[metview] 02/97: upstream 4.4.3

Alastair McKinstry mckinstry at moszumanska.debian.org
Tue Sep 1 09:18:36 UTC 2015


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

mckinstry pushed a commit to branch master
in repository metview.

commit 870d700dc0a76328bd3d36762b379051f3af6a77
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Thu Dec 12 15:41:37 2013 +0000

    upstream 4.4.3
---
 ChangeLog                                          |  363 +-
 INSTALL                                            |    4 +-
 Makefile.am                                        |    2 +-
 Makefile.in                                        |    8 +-
 NOTICE                                             |    4 +-
 config/compile                                     |   21 +-
 config/depcomp                                     |  172 +-
 config/install-sh                                  |  517 +-
 config/missing                                     |  104 +-
 config/ylwrap                                      |   19 +-
 configure                                          | 1243 +++-
 configure.ac                                       |  163 +-
 docs/Metview_Installation_Guide.pdf                |  Bin 0 -> 476370 bytes
 rpms/Makefile.in                                   |    6 +
 scripts/Makefile.am                                |    6 +-
 scripts/Makefile.in                                |   12 +-
 scripts/MarsEcRegridWrapper                        |   81 +
 scripts/MarsScinWrapper                            |   70 -
 scripts/compile                                    |   12 +-
 scripts/metview_base                               |   26 +-
 scripts/metview_help                               |    2 +
 scripts/mv_compress                                |  279 +
 scripts/mv_flexpart_run                            |  105 +
 scripts/mv_flextra_run                             |    2 +-
 scripts/mv_mail                                    |  133 +
 scripts/mv_rttov_run                               |  200 +
 scripts/mv_uniquename                              |   44 +
 scripts/set_mars_env                               |    8 +-
 share/metview/Makefile.am                          |    2 +-
 share/metview/Makefile.in                          |   10 +-
 .../.mvl_plot_scm_data_20121211_1015               |  785 ---
 .../.mvl_plot_scm_data_20130121_1343               |  921 ---
 .../Drawers/Data Access/.EcRegrid Mars Retrieval   |    5 +
 .../Drawers/Data Access/EcRegrid Mars Retrieval    |    3 +
 .../Drawers/Filters/.EcRegrid GRIB Filter          |    5 +
 .../Drawers/Filters/EcRegrid GRIB Filter           |    2 +
 .../Drawers/Modules (Data)/.Average Data           |    2 +-
 .../Drawers/Modules (Data)/.Cross Section Data     |    2 +-
 .../Drawers/Modules (Data)/.Hovmoeller Data        |    6 +-
 .../Drawers/Modules (Data)/.Relative Humidity      |    5 +
 .../app-defaults/Drawers/Modules (Data)/.Rttov Run |    5 +
 .../Drawers/Modules (Data)/.Vertical Profile Data  |    2 +-
 .../Drawers/Modules (Data)/Average Data            |    2 +-
 .../Drawers/Modules (Data)/Cross Section Data      |    2 +-
 .../Drawers/Modules (Data)/Hovmoeller Data         |    7 +-
 .../Drawers/Modules (Data)/Relative Humidity       |    1 +
 .../app-defaults/Drawers/Modules (Data)/Rttov Run  |    2 +
 .../Drawers/Modules (Data)/Vertical Profile Data   |    2 +-
 .../Drawers/Modules (Plotting)/.Rttov Visualiser   |    5 +
 .../Drawers/Modules (Plotting)/Rttov Visualiser    |    1 +
 .../app-defaults/Drawers/Views/.Annotation View    |    5 +
 .../app-defaults/Drawers/Views/.Average View       |    2 +-
 .../app-defaults/Drawers/Views/.Cross Section View |    2 +-
 .../app-defaults/Drawers/Views/.Hovmoeller View    |    5 +
 .../Drawers/Views/.Vertical Profile View           |    2 +-
 .../app-defaults/Drawers/Views/Annotation View     |    1 +
 .../app-defaults/Drawers/Views/Average View        |    2 +-
 .../app-defaults/Drawers/Views/Cross Section View  |    2 +-
 .../app-defaults/Drawers/Views/Hovmoeller View     |    1 +
 .../Drawers/Views/Vertical Profile View            |    2 +-
 share/metview/app-defaults/Makefile.in             |    6 +
 share/metview/app-defaults/MvVersion               |    2 +-
 share/metview/app-defaults/MvVersionDetails        |    2 +-
 .../app-defaults/Templates/.Area Hovmoeller Data   |    3 -
 share/metview/app-defaults/Templates/.Average Data |    3 -
 share/metview/app-defaults/Templates/.Average View |    3 -
 .../metview/app-defaults/Templates/.Cartesian View |    3 -
 .../app-defaults/Templates/.Cross Section View     |    3 -
 .../metview/app-defaults/Templates/.Display Window |    3 -
 .../app-defaults/Templates/.Expand Hovmoeller Data |    3 -
 share/metview/app-defaults/Templates/.Flextra Run  |    3 -
 .../app-defaults/Templates/.Flextra Visualiser     |    3 -
 .../app-defaults/Templates/.Geopoints to GRIB      |    3 -
 share/metview/app-defaults/Templates/.Graph Plot   |    3 -
 share/metview/app-defaults/Templates/.Grib Vectors |    3 -
 .../app-defaults/Templates/.Height Hovmoeller Data |    3 -
 .../app-defaults/Templates/.Input Visualiser       |    3 -
 .../app-defaults/Templates/.Line Hovmoeller Data   |    3 -
 share/metview/app-defaults/Templates/.MV3 Contour  |    3 -
 .../app-defaults/Templates/.NetCDF Visualiser      |    3 -
 .../app-defaults/Templates/.Observation Filter     |    3 -
 .../metview/app-defaults/Templates/.Odb Visualiser |    3 -
 share/metview/app-defaults/Templates/.Page         |    3 -
 share/metview/app-defaults/Templates/.Scm Run      |    3 -
 .../metview/app-defaults/Templates/.Scm Visualiser |    3 -
 share/metview/app-defaults/Templates/.Table Reader |    3 -
 .../app-defaults/Templates/.Table Visualiser       |    3 -
 .../Templates/Area Hovmoeller Data/.Data           |    3 -
 .../Templates/Area Hovmoeller Data/.Geo Axis       |    3 -
 .../Templates/Area Hovmoeller Data/.Time Axis      |    3 -
 .../app-defaults/Templates/Average Data/.Data      |    3 -
 .../Templates/Average View/.Horizontal Axis        |    3 -
 .../Templates/Average View/.Vertical Axis          |    3 -
 .../Templates/Cartesian View/.Horizontal Axis      |    3 -
 .../Templates/Cartesian View/.Tephigram Grid       |    3 -
 .../Templates/Cartesian View/.Vertical Axis        |    3 -
 .../Templates/Cross Section View/.Horizontal Axis  |    3 -
 .../Templates/Cross Section View/.Vertical Axis    |    3 -
 .../app-defaults/Templates/Display Window/.Pages   |    3 -
 .../Templates/Expand Hovmoeller Data/.Data         |    3 -
 .../Templates/Expand Hovmoeller Data/.Netcdf Data  |    3 -
 .../Templates/Flextra Run/.Flextra Input Data      |    3 -
 .../Templates/Flextra Visualiser/.Flextra Data     |    3 -
 .../Templates/Geopoints to GRIB/.Geopoints         |    3 -
 .../Templates/Graph Plot/.Legend Entry             |    3 -
 .../Templates/Grib Vectors/.Colouring Field        |    3 -
 .../app-defaults/Templates/Grib Vectors/.Direction |    3 -
 .../app-defaults/Templates/Grib Vectors/.Intensity |    3 -
 .../Templates/Grib Vectors/.U Component            |    3 -
 .../Templates/Grib Vectors/.V Component            |    3 -
 .../Templates/Height Hovmoeller Data/.Data         |    3 -
 .../Templates/Height Hovmoeller Data/.Height Axis  |    3 -
 .../Templates/Height Hovmoeller Data/.Time Axis    |    3 -
 .../Templates/Input Visualiser/.Input Binning      |    3 -
 .../Templates/Line Hovmoeller Data/.Data           |    3 -
 .../Templates/Line Hovmoeller Data/.Geo Axis       |    3 -
 .../Templates/Line Hovmoeller Data/.Geo2 Axis      |    3 -
 .../Templates/Line Hovmoeller Data/.Time Axis      |    3 -
 .../Templates/MV3 Contour/.Legend Entry            |    3 -
 .../Templates/NetCDF Visualiser/.Netcdf Data       |    3 -
 .../Templates/Observation Filter/.Data             |    3 -
 .../Templates/Odb Visualiser/.Odb Binning          |    3 -
 .../Templates/Odb Visualiser/.Odb Data             |    3 -
 .../metview/app-defaults/Templates/Page/.Sub Pages |    3 -
 share/metview/app-defaults/Templates/Page/.View    |    3 -
 .../app-defaults/Templates/Scm Run/.Scm Input Data |    3 -
 .../app-defaults/Templates/Scm Run/.Scm Namelist   |    3 -
 .../app-defaults/Templates/Scm Run/.Scm Vtable     |    3 -
 .../Templates/Scm Visualiser/.Compare Data         |    3 -
 .../Templates/Scm Visualiser/.Comparison Data      |    3 -
 .../app-defaults/Templates/Scm Visualiser/.Data    |    3 -
 .../Templates/Scm Visualiser/.Scm Comparison Data  |    3 -
 .../Templates/Scm Visualiser/.Scm Data             |    3 -
 .../app-defaults/Templates/Table Reader/.Data      |    3 -
 .../Templates/Table Visualiser/.Table Binning      |    3 -
 .../Templates/Table Visualiser/.Table Data         |    3 -
 share/metview/app-defaults/User_Dir_Frame.tar.gz   |  Bin 399578 -> 401876 bytes
 share/metview/app-defaults/metview.qss             |  117 +-
 share/metview/etc/AnnotationViewDef                |   64 +
 share/metview/etc/AnnotationViewRules              |    2 +
 share/metview/etc/AxisDef                          |   24 +-
 share/metview/etc/BinningObjectDef                 |  147 +-
 share/metview/etc/BinningObjectRules               |   45 +-
 share/metview/etc/CartesianViewDef                 |   55 +-
 share/metview/etc/CartesianViewRules               |   37 +
 share/metview/etc/CommonMapViewDef.h               |   14 -
 share/metview/etc/CommonMapViewRules.h             |   10 -
 share/metview/etc/ConfigDef                        |    6 +
 share/metview/etc/GeoViewDef                       |  221 +-
 share/metview/etc/GeoViewRules                     |    5 +-
 share/metview/etc/MARS_local                       |    2 +-
 share/metview/etc/MAXISDef                         |  449 +-
 share/metview/etc/MAXISRules                       |  155 +-
 share/metview/etc/MAverageViewDef                  |   89 -
 share/metview/etc/MAverageViewRules                |    1 -
 share/metview/etc/MCOASTDef                        |  378 +-
 share/metview/etc/MCOASTRules                      |  114 +-
 share/metview/etc/MCONTDef                         |  320 +-
 share/metview/etc/MCONTRules                       |  485 +-
 share/metview/etc/MGRAPHDef                        |  474 +-
 share/metview/etc/MGRAPHRules                      |  132 +-
 share/metview/etc/MLEGENDDef                       |  518 +-
 share/metview/etc/MLEGENDRules                     |  103 +-
 share/metview/etc/MSYMBDef                         |  378 +-
 share/metview/etc/MSYMBRules                       |  185 +-
 share/metview/etc/MTAYLORDef                       |  169 +
 share/metview/etc/MTAYLORRules                     |   33 +
 share/metview/etc/MTEXTDef                         |  330 +-
 share/metview/etc/MTEXTRules                       |  100 +-
 share/metview/etc/MVertProfViewDef                 |  111 -
 share/metview/etc/MVertProfViewRules               |    7 -
 share/metview/etc/MWINDDef                         |  158 +-
 share/metview/etc/MWINDRules                       |  184 +-
 share/metview/etc/MXSectViewDef                    |  109 -
 share/metview/etc/MXSectViewRules                  |    1 -
 share/metview/etc/Makefile.am                      |  206 +-
 share/metview/etc/Makefile.in                      |  219 +-
 share/metview/etc/MapViewDef                       |   18 +-
 share/metview/etc/MapViewRules                     |    8 +-
 share/metview/etc/MarsEcRegridDef                  | 7135 ++++++++++++++++++++
 share/metview/etc/MarsEcRegridRules                |  771 +++
 share/metview/etc/MarsG2Def                        |   40 +
 share/metview/etc/MarsG2Rules                      |   15 +-
 share/metview/etc/MarsOdbDef                       |   86 +-
 share/metview/etc/MarsOdbRules                     |   15 +-
 share/metview/etc/MarsRules                        |   15 +-
 share/metview/etc/MarsTiggeDef                     |   40 +
 share/metview/etc/MarsTiggeRules                   |   15 +-
 share/metview/etc/ObjectList                       |  664 +-
 share/metview/etc/PageFrameDef                     |  108 +
 share/metview/etc/PageFrameRules                   |    7 +
 share/metview/etc/PlotSuperPageDef                 |    4 +-
 share/metview/etc/RelHumDef                        |   27 +
 share/metview/etc/RelHumRules                      |    0
 share/metview/etc/Services                         |   40 +-
 share/metview/etc/SubpageFrameDef                  |  161 +-
 share/metview/etc/SubpageFrameRules                |   14 +-
 share/metview/etc/UiSpec.Bookmarks                 |   82 +
 share/metview/etc/UiSpec.Breadcrumbs               |   20 +
 share/metview/etc/UiSpec.DetailedFolderView        |   82 +
 share/metview/etc/UiSpec.DrawerView                |   87 +
 share/metview/etc/UiSpec.FolderDrawerPanel         |   14 +
 share/metview/etc/UiSpec.FolderHistory             |   20 +
 share/metview/etc/UiSpec.FolderPanel               |   35 +
 share/metview/etc/UiSpec.FolderView                |  171 +
 share/metview/etc/UiSpec.IconFolderView            |  102 +
 share/metview/etc/UiSpec.IconHelpView              |   60 +
 share/metview/etc/UiSpec.IconHolderView            |   16 +
 share/metview/etc/UiSpec.TemplateDrawerView        |   68 +
 share/metview/etc/UiSpec.ViewDrawerView            |   58 +
 share/metview/etc/dwd.def                          |  176 +
 share/metview/etc/ecmwf.def                        |   86 +-
 share/metview/etc/ifsdata/Makefile.in              |    6 +
 share/metview/etc/macro_built_in_functions.txt     |   27 +-
 share/metview/etc/macro_icon_function_help.xml     | 1102 ++-
 share/metview/etc/mars.chk                         |   15 +-
 share/metview/etc/obsgroups.def                    |    5 +
 share/metview/etc/reportypes.def                   |   42 +-
 share/metview/etc/rt_by_obsgroup.chk               |   23 +-
 share/metview/etc/tigge.def                        |   40 +
 share/metview/etc/uPlotTable                       |   99 +-
 share/metview/icons/ANNOTATIONVIEW.xpm             |   90 +
 share/metview/icons/AVERAGE.xpm                    |   43 +
 share/metview/icons/AVERAGEVIEW.xpm                |   45 +
 share/metview/icons/GRIB_TO_GEO.xpm                |  213 +-
 share/metview/icons/HOVMOELLERDATA.xpm             |   75 +-
 share/metview/icons/HOVMOELLERVIEW.xpm             |   45 +
 share/metview/icons/Interpolation.xpm              |  133 +
 share/metview/icons/MCOAST.xpm                     |  262 +-
 share/metview/icons/MCONT.xpm                      |  246 +-
 share/metview/icons/MGRAPH.xpm                     |  699 +-
 .../{HOVMOELLERDATA.xpm => MHOVMOELLERDATA.xpm}    |    0
 share/metview/icons/MHOVMOELLERVIEW.xpm            |   44 +
 share/metview/icons/MSYMB.xpm                      |  253 +-
 share/metview/icons/MTAYLOR.xpm                    |  242 +
 share/metview/icons/MTEXT.xpm                      |  240 +-
 .../metview/icons/{VPROFILE.xpm => MVPROFILE.xpm}  |    0
 .../icons/{MVPROFVIEW.xpm => MVPROFILEVIEW.xpm}    |    0
 share/metview/icons/MWIND.xpm                      |  233 +-
 .../metview/icons/{XAVERAGE.xpm => MXAVERAGE.xpm}  |    0
 .../icons/{MAVERAGEVIEW.xpm => MXAVERAGEVIEW.xpm}  |    0
 .../metview/icons/{XSECTION.xpm => MXSECTION.xpm}  |    0
 .../icons/{MXSECTVIEW.xpm => MXSECTIONVIEW.xpm}    |    0
 share/metview/icons/Makefile.am                    |   73 +-
 share/metview/icons/Makefile.in                    |   86 +-
 share/metview/icons/NETCDF_RTTOV_INPUT.xpm         |  221 +
 share/metview/icons/ODB_DB.xpm                     |  728 +-
 share/metview/icons/ODB_FILTER.xpm                 |  821 +--
 share/metview/icons/PAXIS.xpm                      |   87 +-
 share/metview/icons/PGRAPH.xpm                     |   93 +-
 share/metview/icons/READ_ECREGRID.xpm              |  186 +
 share/metview/icons/RELHUM.xpm                     |   38 +
 share/metview/icons/RETRIEVE_ECREGRID.xpm          |  216 +
 share/metview/icons/RTTOV_OUTPUT_FILE.xpm          |  184 +
 share/metview/icons/RTTOV_RUN.xpm                  |  205 +
 share/metview/icons/RTTOV_VISUALISER.xpm           |  179 +
 share/metview/icons/VPROF.xpm                      |   43 +
 share/metview/icons/VPROFVIEW.xpm                  |   42 +
 share/metview/icons/XSECT.xpm                      |   42 +
 share/metview/icons/XSECTVIEW.xpm                  |   44 +
 share/metview/icons_mv5/ALIGN_BOTTOM.xpm           |   23 +
 share/metview/icons_mv5/ALIGN_LEFT.xpm             |   23 +
 share/metview/icons_mv5/ALIGN_RIGHT.xpm            |   23 +
 share/metview/icons_mv5/ALIGN_TOP.xpm              |   23 +
 share/metview/icons_mv5/ANNOTATIONVIEW.xpm         |   90 +
 share/metview/icons_mv5/AVERAGE.xpm                |   43 +
 share/metview/icons_mv5/AVERAGEVIEW.xpm            |   45 +
 share/metview/icons_mv5/BINARY.xpm                 |   37 +
 share/metview/icons_mv5/BINNING.svg                |  179 +
 share/metview/icons_mv5/BUFR.svg                   |  335 +
 share/metview/icons_mv5/BUFRPICKER.svg             |  252 +
 share/metview/icons_mv5/Broken.svg                 |  139 +
 share/metview/icons_mv5/CARTESIANVIEW.svg          |  358 +
 share/metview/icons_mv5/CLEANFILE.xpm              |   42 +
 share/metview/icons_mv5/COMPUTE.xpm                |   54 +
 share/metview/icons_mv5/DATACOVERAGE.xpm           |   40 +
 share/metview/icons_mv5/DISTR_HCENTER.xpm          |   23 +
 share/metview/icons_mv5/DISTR_VCENTER.xpm          |   23 +
 share/metview/icons_mv5/DIVROT.svg                 |  956 +++
 share/metview/icons_mv5/DRAWING_PRIORITY.xpm       |   71 +
 share/metview/icons_mv5/ECFS.xpm                   |   44 +
 share/metview/icons_mv5/FLEXTRA_FILE.svg           |  334 +
 share/metview/icons_mv5/FLEXTRA_PREPARE.svg        |  233 +
 share/metview/icons_mv5/FLEXTRA_RUN.svg            |  353 +
 share/metview/icons_mv5/FLEXTRA_VISUALISER.svg     |  227 +
 share/metview/icons_mv5/FOLDER.svg                 |  126 +
 share/metview/icons_mv5/GDDRIVER.xpm               |   82 +
 share/metview/icons_mv5/GEOPOINTS.svg              |  559 ++
 share/metview/icons_mv5/GEOVIEW.xpm                |   40 +
 share/metview/icons_mv5/GEO_TO_GRIB.svg            |  281 +
 share/metview/icons_mv5/GIF.xpm                    |  629 ++
 share/metview/icons_mv5/GRIB.svg                   |  462 ++
 share/metview/icons_mv5/GRIBVECTORS.xpm            |   47 +
 share/metview/icons_mv5/GRIB_TO_GEO.svg            |  280 +
 share/metview/icons_mv5/GeoToKML.xpm               |  446 ++
 share/metview/icons_mv5/HOME.svg                   |  122 +
 .../{icons => icons_mv5}/HOVMOELLERDATA.xpm        |    0
 share/metview/icons_mv5/INPUTVISUALISER.svg        |  187 +
 share/metview/icons_mv5/Interpolation.svg          |  149 +
 share/metview/icons_mv5/JPEG.xpm                   |   79 +
 share/metview/icons_mv5/KML.svg                    |  174 +
 share/metview/icons_mv5/LLMATRIX.xpm               |   38 +
 share/metview/icons_mv5/MACRO.svg                  |  232 +
 share/metview/icons_mv5/MACROPARAM.xpm             |   44 +
 share/metview/icons_mv5/MAGML.xpm                  |  268 +
 share/metview/icons_mv5/MAPVIEW.xpm                |   41 +
 .../metview/{icons => icons_mv5}/MAVERAGEVIEW.xpm  |    0
 .../{icons/PAXIS.xpm => icons_mv5/MAXIS.xpm}       |    0
 share/metview/icons_mv5/MCOAST.svg                 |  305 +
 share/metview/icons_mv5/MCONT.svg                  |  306 +
 share/metview/icons_mv5/MGRAPH.svg                 |  315 +
 share/metview/icons_mv5/MLEGEND.svg                |  528 ++
 share/metview/icons_mv5/MSYMB.svg                  |  320 +
 share/metview/icons_mv5/MTAYLOR.xpm                |  242 +
 share/metview/icons_mv5/MTEXT.svg                  |  318 +
 .../metview/icons_mv5/MVPROFILE.xpm                |    0
 .../MVPROFVIEW.xpm => icons_mv5/MVPROFILEVIEW.xpm} |    0
 share/metview/{icons => icons_mv5}/MVPROFVIEW.xpm  |    0
 share/metview/icons_mv5/MWIND.svg                  |  313 +
 .../metview/icons_mv5/MXAVERAGE.xpm                |    0
 .../MXAVERAGEVIEW.xpm}                             |    0
 .../metview/icons_mv5/MXSECTION.xpm                |    0
 .../MXSECTVIEW.xpm => icons_mv5/MXSECTIONVIEW.xpm} |    0
 share/metview/{icons => icons_mv5}/MXSECTVIEW.xpm  |    0
 share/metview/icons_mv5/Makefile.am                |  136 +
 share/metview/icons_mv5/Makefile.in                |  635 ++
 share/metview/icons_mv5/MetPlus.xpm                |  515 ++
 share/metview/icons_mv5/NAMELIST.svg               |  146 +
 share/metview/icons_mv5/NETCDF.svg                 |  211 +
 share/metview/icons_mv5/NETCDFPLUS.svg             |  238 +
 share/metview/icons_mv5/NETCDF_RTTOV_INPUT.svg     |  309 +
 share/metview/icons_mv5/NEWS.xpm                   |   39 +
 share/metview/icons_mv5/NOTE.svg                   |  214 +
 share/metview/icons_mv5/OBSFILTER.svg              |  221 +
 share/metview/{icons => icons_mv5}/OBSTAT.xpm      |    0
 .../metview/{icons => icons_mv5}/OBSTAT_CURVE.xpm  |    0
 .../{icons => icons_mv5}/OBSTAT_SCATTER.xpm        |    0
 share/metview/icons_mv5/ODB_DB.svg                 |  204 +
 share/metview/icons_mv5/ODB_FILTER.svg             |  339 +
 share/metview/icons_mv5/ODB_VISUALISER.svg         |  313 +
 share/metview/icons_mv5/OPERA_RADAR_FILTER.svg     |  298 +
 share/metview/icons_mv5/OVERLAY_CONTROL.xpm        |   72 +
 share/metview/{icons => icons_mv5}/PAXIS.xpm       |    0
 share/metview/icons_mv5/PCOAST.xpm                 |   47 +
 share/metview/icons_mv5/PCONT.xpm                  |   47 +
 share/metview/icons_mv5/PDF.svg                    |  174 +
 share/metview/icons_mv5/PERCENTILE.svg             |  281 +
 share/metview/{icons => icons_mv5}/PGRAPH.xpm      |    0
 share/metview/icons_mv5/PLOTPAGE.xpm               |   38 +
 share/metview/icons_mv5/PLOTSUBPAGE.xpm            |   39 +
 share/metview/icons_mv5/PNG.svg                    |  174 +
 share/metview/icons_mv5/POBS.svg                   |  421 ++
 share/metview/icons_mv5/POTTF.svg                  |  166 +
 share/metview/icons_mv5/PREFERENCES.xpm            |   38 +
 share/metview/icons_mv5/PRODUCT.svg                |  124 +
 share/metview/icons_mv5/PSFILE.svg                 |  173 +
 share/metview/icons_mv5/PSOUTPUT.xpm               |  240 +
 share/metview/icons_mv5/PSYMB.xpm                  |   48 +
 share/metview/icons_mv5/PTEXT.xpm                  |   48 +
 share/metview/icons_mv5/PWIND.xpm                  |   47 +
 share/metview/icons_mv5/READ.xpm                   |   48 +
 share/metview/icons_mv5/READ_SCIN.svg              |  118 +
 share/metview/icons_mv5/READ_TIGGE.svg             |  137 +
 share/metview/icons_mv5/RELHUM.xpm                 |   38 +
 share/metview/icons_mv5/REPROJECTION.xpm           |  257 +
 share/metview/icons_mv5/RETRIEVE.svg               |  450 ++
 share/metview/icons_mv5/RETRIEVE_SCIN.svg          |  165 +
 share/metview/icons_mv5/RETRIEVE_TIGGE.svg         |  118 +
 share/metview/icons_mv5/RTTOV_OUTPUT_FILE.svg      |  226 +
 share/metview/icons_mv5/RTTOV_RUN.svg              |  293 +
 share/metview/icons_mv5/RTTOV_VISUALISER.svg       |  317 +
 share/metview/icons_mv5/SCM_INPUT_DATA.svg         |  647 ++
 share/metview/icons_mv5/SCM_OUTPUT_DATA.svg        |  647 ++
 share/metview/icons_mv5/SCM_RUN.svg                |  576 ++
 share/metview/icons_mv5/SCM_VIS.svg                |  492 ++
 share/metview/icons_mv5/SERVICE.xpm                |  251 +
 share/metview/icons_mv5/SHELL.svg                  |  461 ++
 share/metview/icons_mv5/SIMPLE_FORMULA.xpm         |   43 +
 share/metview/icons_mv5/SQL.svg                    |  141 +
 share/metview/icons_mv5/STATIONS.xpm               |   42 +
 share/metview/icons_mv5/SUBPAGEDETAILS.xpm         |   39 +
 share/metview/icons_mv5/SUPERPAGE.xpm              |   42 +
 share/metview/icons_mv5/SVG.svg                    |  174 +
 share/metview/icons_mv5/SVGOUTPUT.xpm              |  240 +
 share/metview/icons_mv5/SYSTEM.svg                 |  124 +
 share/metview/icons_mv5/TABLE.svg                  |  197 +
 share/metview/icons_mv5/TABLEREADER.svg            |  309 +
 share/metview/icons_mv5/TABLEVISUALISER.svg        |  240 +
 share/metview/icons_mv5/TAR.xpm                    |  474 ++
 share/metview/icons_mv5/TIFF.xpm                   |  293 +
 share/metview/icons_mv5/VELSTR.svg                 |  775 +++
 share/metview/icons_mv5/VPROF.xpm                  |   43 +
 share/metview/{icons => icons_mv5}/VPROFILE.xpm    |    0
 share/metview/icons_mv5/VPROFVIEW.xpm              |   42 +
 share/metview/icons_mv5/WASTEBASKET.svg            |  142 +
 share/metview/icons_mv5/WCS_CLIENT.svg             |  287 +
 share/metview/icons_mv5/WEBACCESS.xpm              |  643 ++
 share/metview/icons_mv5/WMS_CLIENT.svg             |  287 +
 share/metview/{icons => icons_mv5}/XAVERAGE.xpm    |    0
 share/metview/icons_mv5/XSECT.xpm                  |   42 +
 share/metview/{icons => icons_mv5}/XSECTION.xpm    |    0
 share/metview/icons_mv5/XSECTVIEW.xpm              |   44 +
 share/metview/icons_mv5/help_area.xpm              |   22 +
 share/metview/icons_mv5/help_line.xpm              |   22 +
 share/metview/icons_mv5/help_map.xpm               |   22 +
 share/metview/icons_mv5/help_point.xpm             |   22 +
 share/metview/icons_mv5/help_station.xpm           |   46 +
 src/AppMod/Makefile.am                             |   33 +-
 src/AppMod/Makefile.in                             |  274 +-
 src/AppMod/MvCompress.cc                           |  165 +
 src/AppMod/MvMailTo.cc                             |  229 +
 src/AppMod/maill.c                                 |   97 +-
 src/AppMod/savepool.cc                             |  563 +-
 src/AppMod/savepool.h                              |   37 +
 src/BufrExaminer/Makefile.in                       |    6 +
 src/CptecAccess/CptecAccess.cc                     |    2 +-
 src/CptecAccess/Makefile.in                        |    6 +
 src/Datacoverage/Makefile.in                       |    6 +
 src/DebugTools/Makefile.am                         |   28 +-
 src/DebugTools/Makefile.in                         |  405 +-
 src/DebugTools/MvMainMonitor.cc                    |   64 +
 src/DebugTools/MvProcNode.cc                       |  618 ++
 src/DebugTools/MvProcNode.h                        |  238 +
 src/DebugTools/MvQProcModel.cc                     |  229 +
 src/DebugTools/MvQProcModel.h                      |   60 +
 src/DebugTools/ProcMonitor.cc                      |  499 ++
 src/DebugTools/ProcMonitor.h                       |   65 +
 src/DebugTools/XServ.cc                            |   96 +
 src/DebugTools/XServ.h                             |   40 +
 src/DebugTools/XServ.qrc.cpp                       |  154 +
 src/DebugTools/cback.c                             |   73 -
 src/DebugTools/debug.qrc                           |    7 +
 src/DebugTools/procInfo.css                        |   81 +
 src/DebugTools/xserv.c                             |  152 -
 src/Desktop/Action.cc                              |   43 +
 src/Desktop/Action.h                               |   45 +
 src/Desktop/ActionCommand.cc                       |   36 +
 src/Desktop/ActionCommand.h                        |   32 +
 src/Desktop/Command.cc                             |   47 +
 src/Desktop/Command.h                              |   40 +
 src/Desktop/ComputeEditor.cc                       |  102 +
 src/Desktop/ComputeEditor.h                        |   49 +
 src/Desktop/ConfigLoader.cc                        |   43 +
 src/Desktop/ConfigLoader.h                         |  113 +
 src/Desktop/Counted.cc                             |   78 +
 src/Desktop/Counted.h                              |   81 +
 src/Desktop/Dependancy.cc                          |   18 +
 src/Desktop/Dependancy.h                           |   40 +
 src/Desktop/Drop.cc                                |  110 +
 src/Desktop/Drop.h                                 |   51 +
 src/Desktop/EditTransaction.cc                     |  117 +
 src/Desktop/EditTransaction.h                      |   58 +
 src/Desktop/Editor.cc                              |  123 +
 src/Desktop/Editor.h                               |   72 +
 src/Desktop/EditorDrawer.h                         |   30 +
 src/Desktop/EditorDrawerFactory.cc                 |   40 +
 src/Desktop/EditorDrawerFactory.h                  |   53 +
 src/Desktop/EditorFactory.cc                       |   94 +
 src/Desktop/EditorFactory.h                        |   49 +
 src/Desktop/EditorObserver.h                       |   27 +
 src/Desktop/FamilyEditor.cc                        |  296 +
 src/Desktop/FamilyEditor.h                         |   79 +
 src/Desktop/FamilyObject.cc                        |  102 +
 src/Desktop/FamilyObject.h                         |   51 +
 src/Desktop/FamilyScanner.cc                       |  128 +
 src/Desktop/FamilyScanner.h                        |   56 +
 src/Desktop/FileObject.cc                          |   55 +
 src/Desktop/FileObject.h                           |   46 +
 src/Desktop/Folder.cc                              |  810 +++
 src/Desktop/Folder.h                               |  121 +
 src/Desktop/FolderDatabase.cc                      |  207 +
 src/Desktop/FolderDatabase.h                       |   58 +
 src/Desktop/FolderInfo.cc                          |  168 +
 src/Desktop/FolderInfo.h                           |   47 +
 src/Desktop/FolderObserver.h                       |   36 +
 src/Desktop/FolderPresenter.h                      |   22 +
 src/Desktop/HelpFactory.cc                         |   41 +
 src/Desktop/HelpFactory.h                          |   50 +
 src/Desktop/IconClass.cc                           |  627 ++
 src/Desktop/IconClass.h                            |  107 +
 src/Desktop/IconFactory.cc                         |  291 +
 src/Desktop/IconFactory.h                          |   70 +
 src/Desktop/IconGroupTools.cc                      |   69 +
 src/Desktop/IconGroupTools.h                       |   38 +
 src/Desktop/IconInfo.cc                            |   81 +
 src/Desktop/IconInfo.h                             |   48 +
 src/Desktop/IconObject.cc                          |  889 +++
 src/Desktop/IconObject.h                           |  240 +
 src/Desktop/IconObserver.h                         |   29 +
 src/Desktop/Input.cc                               |   71 +
 src/Desktop/Input.h                                |   46 +
 src/Desktop/InternalService.cc                     |   28 +
 src/Desktop/InternalService.h                      |   35 +
 src/Desktop/InternalTask.cc                        |  101 +
 src/Desktop/InternalTask.h                         |   55 +
 src/Desktop/Items.cc                               |  100 +
 src/Desktop/Items.h                                |   47 +
 src/Desktop/Language.cc                            |  271 +
 src/Desktop/Language.h                             |  135 +
 src/Desktop/LineFactory.cc                         |   49 +
 src/Desktop/LineFactory.h                          |   49 +
 src/Desktop/Log.cc                                 |  116 +
 src/Desktop/Log.h                                  |   59 +
 src/Desktop/MacroGuiObject.cc                      |   41 +
 src/Desktop/MacroGuiObject.h                       |   39 +
 src/Desktop/MacroObject.cc                         |   32 +
 src/Desktop/MacroObject.h                          |   32 +
 src/Desktop/MacroParamEditor.cc                    |  247 +
 src/Desktop/MacroParamEditor.h                     |   99 +
 src/Desktop/MacroParamObject.cc                    |  108 +
 src/Desktop/MacroParamObject.h                     |   47 +
 src/Desktop/MacroParamState.cc                     |  110 +
 src/Desktop/MacroParamState.h                      |   55 +
 src/Desktop/Makefile.am                            |  344 +
 src/Desktop/Makefile.in                            | 4524 +++++++++++++
 src/Desktop/MessageObserver.cc                     |   59 +
 src/Desktop/MessageObserver.h                      |   45 +
 src/Desktop/MethodCommand.cc                       |   37 +
 src/Desktop/MethodCommand.h                        |   40 +
 src/Desktop/MetviewService.cc                      |   26 +
 src/Desktop/MetviewService.h                       |   38 +
 src/Desktop/MetviewTask.cc                         |  146 +
 src/Desktop/MetviewTask.h                          |   71 +
 src/Desktop/MvMainQtBrowser.cc                     |   37 +
 src/Desktop/MvQ.cc                                 |   30 +
 src/Desktop/MvQ.h                                  |   21 +
 src/Desktop/MvQBookmarks.cc                        |  922 +++
 src/Desktop/MvQBookmarks.h                         |  167 +
 src/Desktop/MvQBoolLine.cc                         |   81 +
 src/Desktop/MvQBoolLine.h                          |   46 +
 src/Desktop/MvQClassBrowser.cc                     |  230 +
 src/Desktop/MvQClassBrowser.h                      |   67 +
 src/Desktop/MvQColourHelp.cc                       |  879 +++
 src/Desktop/MvQColourHelp.h                        |  180 +
 src/Desktop/MvQColourLine.cc                       |  145 +
 src/Desktop/MvQColourLine.h                        |   50 +
 src/Desktop/MvQColourListLine.cc                   |  298 +
 src/Desktop/MvQColourListLine.h                    |   87 +
 src/Desktop/MvQComboBoxLine.cc                     |   62 +
 src/Desktop/MvQComboBoxLine.h                      |   46 +
 src/Desktop/MvQContextMenu.cc                      |  416 ++
 src/Desktop/MvQContextMenu.h                       |  132 +
 src/Desktop/MvQDesktop.cc                          |  213 +
 src/Desktop/MvQDesktop.h                           |   34 +
 src/Desktop/MvQDesktopSettings.cc                  |   59 +
 src/Desktop/MvQDesktopSettings.h                   |   32 +
 src/Desktop/MvQDetailedFolderView.cc               |  589 ++
 src/Desktop/MvQDetailedFolderView.h                |   76 +
 src/Desktop/MvQDrawerPanel.cc                      |  255 +
 src/Desktop/MvQDrawerPanel.h                       |   75 +
 src/Desktop/MvQDrawerView.cc                       |   61 +
 src/Desktop/MvQDrawerView.h                        |   27 +
 src/Desktop/MvQEditor.cc                           |  811 +++
 src/Desktop/MvQEditor.h                            |  159 +
 src/Desktop/MvQEditorDrawerPanel.h                 |   26 +
 src/Desktop/MvQExternalHelp.cc                     |   83 +
 src/Desktop/MvQExternalHelp.h                      |   45 +
 src/Desktop/MvQFileBrowser.cc                      | 1159 ++++
 src/Desktop/MvQFileBrowser.h                       |  154 +
 src/Desktop/MvQFileSystemModel.cc                  |  241 +
 src/Desktop/MvQFileSystemModel.h                   |   77 +
 src/Desktop/MvQFileWatcher.cc                      |   73 +
 src/Desktop/MvQFileWatcher.h                       |   50 +
 src/Desktop/MvQFolderDrawerPanel.cc                |  274 +
 src/Desktop/MvQFolderDrawerPanel.h                 |   65 +
 src/Desktop/MvQFolderHistory.cc                    |  128 +
 src/Desktop/MvQFolderHistory.h                     |   49 +
 src/Desktop/MvQFolderItemProperty.cc               |  120 +
 src/Desktop/MvQFolderItemProperty.h                |   41 +
 src/Desktop/MvQFolderModel.cc                      |  742 ++
 src/Desktop/MvQFolderModel.h                       |  151 +
 src/Desktop/MvQFolderNavigation.cc                 |   80 +
 src/Desktop/MvQFolderNavigation.h                  |   40 +
 src/Desktop/MvQFolderPanel.cc                      |  783 +++
 src/Desktop/MvQFolderPanel.h                       |  159 +
 src/Desktop/MvQFolderViewBase.cc                   |  418 ++
 src/Desktop/MvQFolderViewBase.h                    |  101 +
 src/Desktop/MvQFolderViewDelegate.cc               |  427 ++
 src/Desktop/MvQFolderViewDelegate.h                |   82 +
 src/Desktop/MvQFolderViewHandler.cc                |   92 +
 src/Desktop/MvQFolderViewHandler.h                 |   58 +
 src/Desktop/MvQFolderWatcher.cc                    |  136 +
 src/Desktop/MvQFolderWatcher.h                     |   55 +
 src/Desktop/MvQFolderWidget.cc                     |  503 ++
 src/Desktop/MvQFolderWidget.h                      |  133 +
 src/Desktop/MvQGeoHelp.cc                          |  116 +
 src/Desktop/MvQGeoHelp.h                           |   50 +
 src/Desktop/MvQHelpBrowser.cc                      |  339 +
 src/Desktop/MvQHelpBrowser.h                       |  143 +
 src/Desktop/MvQIconFolderView.cc                   |  349 +
 src/Desktop/MvQIconFolderView.h                    |   50 +
 src/Desktop/MvQIconFolderViewBase.cc               |  924 +++
 src/Desktop/MvQIconFolderViewBase.h                |   80 +
 src/Desktop/MvQIconHelp.cc                         |  101 +
 src/Desktop/MvQIconHelp.h                          |   50 +
 src/Desktop/MvQIconHelpView.cc                     |   32 +
 src/Desktop/MvQIconHelpView.h                      |   27 +
 src/Desktop/MvQIconHolder.cc                       |  363 +
 src/Desktop/MvQIconHolder.h                        |   81 +
 src/Desktop/MvQIconLine.cc                         |  166 +
 src/Desktop/MvQIconLine.h                          |   55 +
 src/Desktop/MvQIconMimeData.cc                     |   97 +
 src/Desktop/MvQIconMimeData.h                      |   71 +
 src/Desktop/MvQIconObjectModel.cc                  |  120 +
 src/Desktop/MvQIconObjectModel.h                   |   34 +
 src/Desktop/MvQIconProvider.cc                     |  235 +
 src/Desktop/MvQIconProvider.h                      |   70 +
 src/Desktop/MvQIconStripView.cc                    |  110 +
 src/Desktop/MvQIconStripView.h                     |   25 +
 src/Desktop/MvQListHelp.cc                         |  170 +
 src/Desktop/MvQListHelp.h                          |   59 +
 src/Desktop/MvQLogDialog.cc                        |  252 +
 src/Desktop/MvQLogDialog.h                         |   64 +
 src/Desktop/MvQMessageBox.cc                       |   50 +
 src/Desktop/MvQMessageBox.h                        |   24 +
 src/Desktop/MvQNewIconWidget.cc                    |  492 ++
 src/Desktop/MvQNewIconWidget.h                     |  108 +
 src/Desktop/MvQNoneLine.cc                         |   24 +
 src/Desktop/MvQNoneLine.h                          |   35 +
 src/Desktop/MvQObjectBrowser.cc                    |  117 +
 src/Desktop/MvQObjectBrowser.h                     |   53 +
 src/Desktop/MvQPageView.cc                         | 2128 ++++++
 src/Desktop/MvQPageView.h                          |  415 ++
 src/Desktop/MvQPalette.cc                          |  249 +
 src/Desktop/MvQPalette.h                           |   74 +
 src/Desktop/MvQPathWidget.cc                       |  373 +
 src/Desktop/MvQPathWidget.h                        |   76 +
 src/Desktop/MvQProductBrowser.cc                   |  547 ++
 src/Desktop/MvQProductBrowser.h                    |  154 +
 src/Desktop/MvQRequestPanelHelp.cc                 |   25 +
 src/Desktop/MvQRequestPanelHelp.h                  |   50 +
 src/Desktop/MvQRequestPanelLine.cc                 |  206 +
 src/Desktop/MvQRequestPanelLine.h                  |   66 +
 src/Desktop/MvQRequestPanelWidget.cc               |  186 +
 src/Desktop/MvQRequestPanelWidget.h                |   48 +
 src/Desktop/MvQScriptHelp.cc                       |  149 +
 src/Desktop/MvQScriptHelp.h                        |   83 +
 src/Desktop/MvQScrolledTextLine.cc                 |   55 +
 src/Desktop/MvQScrolledTextLine.h                  |   44 +
 src/Desktop/MvQSliderLine.cc                       |  121 +
 src/Desktop/MvQSliderLine.h                        |   44 +
 src/Desktop/MvQStationsHelp.cc                     |   80 +
 src/Desktop/MvQStationsHelp.h                      |   46 +
 src/Desktop/MvQStringLine.cc                       |   88 +
 src/Desktop/MvQStringLine.h                        |   50 +
 src/Desktop/MvQTemplateDrawer.cc                   |   83 +
 src/Desktop/MvQTemplateDrawer.h                    |   51 +
 src/Desktop/MvQTemporaryEditor.cc                  |  166 +
 src/Desktop/MvQTemporaryEditor.h                   |   55 +
 src/Desktop/MvQTextLine.cc                         |  143 +
 src/Desktop/MvQTextLine.h                          |   48 +
 src/Desktop/MvQTools.cc                            |  108 +
 src/Desktop/MvQTools.h                             |   48 +
 src/Desktop/MvQViewDrawer.cc                       |   83 +
 src/Desktop/MvQViewDrawer.h                        |   55 +
 src/Desktop/NoEditor.cc                            |   24 +
 src/Desktop/NoEditor.h                             |   34 +
 src/Desktop/Parameter.cc                           |  266 +
 src/Desktop/Parameter.h                            |   76 +
 src/Desktop/Product.cc                             |  115 +
 src/Desktop/Product.h                              |   45 +
 src/Desktop/ProductFolder.cc                       |   24 +
 src/Desktop/ProductFolder.h                        |   28 +
 src/Desktop/Protocol.cc                            |   36 +
 src/Desktop/Protocol.h                             |   47 +
 src/Desktop/Queue.cc                               |   74 +
 src/Desktop/Queue.h                                |   46 +
 src/Desktop/ReplyObserver.cc                       |   71 +
 src/Desktop/ReplyObserver.h                        |   46 +
 src/Desktop/RequestPanel.cc                        |  263 +
 src/Desktop/RequestPanel.h                         |   94 +
 src/Desktop/RequestPanelItem.cc                    |  120 +
 src/Desktop/RequestPanelItem.h                     |   64 +
 src/Desktop/RootFolder.cc                          |   53 +
 src/Desktop/RootFolder.h                           |   37 +
 src/Desktop/Runnable.cc                            |   80 +
 src/Desktop/Runnable.h                             |   43 +
 src/Desktop/Service.cc                             |   56 +
 src/Desktop/Service.h                              |   47 +
 src/Desktop/ServiceEditor.cc                       |  165 +
 src/Desktop/ServiceEditor.h                        |   74 +
 src/Desktop/ShellService.cc                        |   25 +
 src/Desktop/ShellService.h                         |   32 +
 src/Desktop/ShellTask.cc                           |   77 +
 src/Desktop/ShellTask.h                            |   50 +
 src/Desktop/SimpleEditor.cc                        |  121 +
 src/Desktop/SimpleEditor.h                         |   66 +
 src/Desktop/StandardObject.cc                      |  316 +
 src/Desktop/StandardObject.h                       |   57 +
 src/Desktop/State.cc                               |   62 +
 src/Desktop/State.h                                |   26 +
 src/Desktop/SystemFolder.cc                        |   38 +
 src/Desktop/SystemFolder.h                         |   43 +
 src/Desktop/Task.cc                                |   46 +
 src/Desktop/Task.h                                 |   58 +
 src/Desktop/TaskObserver.h                         |   27 +
 src/Desktop/TeeBuffer.cc                           |   62 +
 src/Desktop/TeeBuffer.h                            |   47 +
 src/Desktop/TeeStream.cc                           |   22 +
 src/Desktop/TeeStream.h                            |   36 +
 src/Desktop/TemporaryEditor.cc                     |   91 +
 src/Desktop/TemporaryEditor.h                      |   45 +
 src/Desktop/TemporaryObject.cc                     |  135 +
 src/Desktop/TemporaryObject.h                      |   68 +
 src/Desktop/Tools.cc                               |   58 +
 src/Desktop/Tools.h                                |   44 +
 src/Desktop/Transaction.cc                         |   33 +
 src/Desktop/Transaction.h                          |   42 +
 src/Desktop/ViewEditor.cc                          | 1264 ++++
 src/Desktop/ViewEditor.h                           |  277 +
 src/Desktop/Wastebasket.cc                         |   65 +
 src/Desktop/Wastebasket.h                          |   40 +
 src/Desktop/desktop.qrc                            |   86 +
 src/Divrot/Makefile.in                             |    6 +
 src/Divrot/divrot-exFortran.cc                     |    6 +-
 src/Ecfile/Makefile.in                             |    6 +
 src/Event/Event.cc                                 |   42 +-
 src/Event/Makefile.in                              |    6 +
 src/ExamineManager/Makefile.in                     |    6 +
 src/ExamineManager/MvExamineManager.cc             |   13 +-
 src/Flextra/FLEXTRA_FILE.xpm                       |  500 --
 src/Flextra/FLEXTRA_PREPARE.xpm                    |  377 --
 src/Flextra/FLEXTRA_RUN.xpm                        |  399 --
 src/Flextra/FLEXTRA_VISUALISER.xpm                 |  419 --
 src/Flextra/FlexpartRun.cc                         |  814 +--
 src/Flextra/FlexpartRunDef                         |  132 +-
 src/Flextra/Makefile.am                            |   15 +-
 src/Flextra/Makefile.in                            |   22 +-
 src/Flextra/ObjectSpec.Flexpart                    |    2 +-
 src/Flextra/ObjectSpec.Flextra                     |    3 +
 src/FlextraExaminer/Makefile.in                    |    6 +
 src/GeopExaminer/Makefile.in                       |    6 +
 src/GribExaminer/Makefile.in                       |    6 +
 src/GribVectors/Makefile.in                        |    6 +
 src/GribVectors/ObjectSpec.GribVectors             |    2 +-
 src/Hovmoeller/Factory.cc                          |   46 +-
 src/Hovmoeller/Factory.h                           |   50 +-
 src/Hovmoeller/HOVMOELLERDATA.xpm                  |   75 +-
 src/Hovmoeller/HOVMOELLERVIEW.xpm                  |   45 +
 src/Hovmoeller/HovArea.cc                          |  239 +
 src/Hovmoeller/HovArea.h                           |   79 +
 src/Hovmoeller/HovExpand.cc                        |  104 +
 src/Hovmoeller/HovExpand.h                         |   30 +
 src/Hovmoeller/HovHeight.cc                        |  296 +
 src/Hovmoeller/HovHeight.h                         |   84 +
 src/Hovmoeller/HovLine.cc                          |  190 +
 src/Hovmoeller/HovLine.h                           |   79 +
 src/Hovmoeller/HovToolkit.cc                       | 2570 +++----
 src/Hovmoeller/HovToolkit.h                        |  410 +-
 src/Hovmoeller/Hovmoeller.cc                       |  151 +-
 src/Hovmoeller/Hovmoeller.h                        |   53 +-
 src/Hovmoeller/HovmoellerDataDef                   |  526 +-
 src/Hovmoeller/HovmoellerDataRules                 |    0
 src/Hovmoeller/HovmoellerViewDef                   |   27 +
 src/Hovmoeller/HovmoellerViewRules                 |    3 +
 .../Hovmoeller/MHOVMOELLERDATA.xpm                 |    0
 src/Hovmoeller/MHOVMOELLERVIEW.xpm                 |   44 +
 src/Hovmoeller/MHovmoellerDataDef                  |  168 +
 src/Hovmoeller/MHovmoellerViewDef                  |  147 +
 src/Hovmoeller/MHovmoellerViewRules                |   26 +
 src/Hovmoeller/Makefile.am                         |   25 +-
 src/Hovmoeller/Makefile.in                         |  152 +-
 src/Hovmoeller/MvHovmFrame.cc                      |   93 +-
 src/Hovmoeller/MvHovmFrame.h                       |   76 +-
 src/Hovmoeller/ObjectSpec.Hovmoeller               |  154 +-
 src/KML/Makefile.in                                |    6 +
 src/Macro/Makefile.am                              |    8 +-
 src/Macro/Makefile.in                              |   52 +-
 src/Macro/beaul.c                                  |   75 +-
 src/Macro/beauy.c                                  |  384 +-
 src/Macro/codb.cc                                  |   11 +-
 src/Macro/code.cc                                  |    7 +-
 src/Macro/files.cc                                 |    3 +-
 src/Macro/grib.cc                                  |   42 +-
 src/Macro/include/macro.h                          |    4 +-
 src/Macro/include/node.h                           |   15 +-
 src/Macro/include/value.h                          |   33 +-
 src/Macro/macrol.c                                 |   75 +-
 src/Macro/macroy.c                                 |  721 +-
 src/Macro/mvimport.c                               |   37 +-
 src/Macro/mvimportDesktop.c                        | 1205 ++++
 src/Macro/netcdf.cc                                |   60 +-
 src/Macro/request.cc                               |   47 +-
 src/Macro/value.cc                                 |    9 +-
 src/Macro/vis5d.cc                                 |  281 -
 src/MacroEditor/LanguageHelper.cc                  |    8 +-
 src/MacroEditor/MacroEdit.cc                       |   85 +-
 src/MacroEditor/MacroEdit.h                        |    1 +
 src/MacroEditor/MacroEdit.ui                       |    9 +
 src/MacroEditor/Makefile.in                        |    6 +
 src/MacroEditor/MvMain.cc                          |    1 +
 src/MacroEditor/mvplaintextedit.cc                 |  114 +-
 src/MacroEditor/mvplaintextedit.h                  |    8 +-
 src/MagML/Makefile.am                              |    2 +-
 src/MagML/Makefile.in                              |    8 +-
 src/MagML/ObjectSpec.MagML                         |    1 +
 src/Makefile.am                                    |   42 +-
 src/Makefile.in                                    |   57 +-
 src/MarsCatalog/Makefile.in                        |    6 +
 src/Meteogram/Makefile.in                          |    6 +
 src/Meteogram/ObjectSpec.Meteogram                 |    1 +
 src/MetviewUI/Makefile.in                          |    6 +
 src/MetviewUI/Parameter.cc                         |    5 +
 src/MvApp/Makefile.am                              |   33 +
 src/MvApp/Makefile.in                              |   96 +-
 src/MvApp/MarsEcRegrid.cc                          |  354 +
 src/MvApp/ObjectSpec.MarsEcRegrid                  |   51 +
 src/MvApp/ObjectSpec.MarsOdb                       |    2 +-
 src/MvApp/READ_ECREGRID.xpm                        |  186 +
 src/MvApp/RETRIEVE_ECREGRID.xpm                    |  216 +
 src/MvApp/geo_to_grib.cc                           |    5 +-
 src/NcExaminer/Makefile.in                         |    6 +
 src/NcExaminer/MvMain.cc                           |   10 +-
 src/NcExaminer/NcExaminer.cc                       |    2 +-
 src/ObsFilter/Makefile.in                          |    6 +
 src/Obstat/Makefile.in                             |    6 +
 src/ObstatCurveTool/Makefile.am                    |    2 +-
 src/ObstatCurveTool/Makefile.in                    |    8 +-
 src/ObstatScatterTool/Makefile.in                  |    6 +
 src/Odb/Makefile.am                                |   14 +-
 src/Odb/Makefile.in                                |   19 +-
 src/Odb/ODB_FILTER.xpm                             |  590 --
 src/Odb/ODB_VISUALISER.xpm                         |  577 --
 src/Odb/ObjectSpec.Odb                             |    2 +
 src/OdbExaminer/Makefile.in                        |    6 +
 src/OgcClient/Makefile.in                          |    6 +
 src/OgcClient/MvQWmsClient.cc                      |   29 +-
 src/OgcClient/ObjectSpec.WcsClient                 |    1 +
 src/OgcClient/ObjectSpec.WmsClient                 |    1 +
 src/OperaRadar/Makefile.in                         |    6 +
 src/PM_Tephigram/Makefile.am                       |   14 +
 src/PM_Tephigram/Makefile.in                       |  724 ++
 src/PM_Tephigram/MvTephiData.cc                    |  715 ++
 src/PM_Tephigram/MvTephiData.h                     |  179 +
 src/PM_Tephigram/MvTephiFrame.cc                   |  741 ++
 src/PM_Tephigram/MvTephiFrame.h                    |   90 +
 src/PM_Tephigram/MvTephiParams.cc                  |  146 +
 src/PM_Tephigram/MvTephiParams.h                   |   82 +
 src/PM_Tephigram/Tephigrams.cc                     |  500 ++
 src/Percentile/Makefile.in                         |    6 +
 src/Percentile/ObjectSpec.Percentile               |    1 +
 src/PottF/Makefile.in                              |    6 +
 src/Relhum/Makefile.am                             |   11 +
 src/Relhum/Makefile.in                             |  652 ++
 src/Relhum/MvRelhum.cc                             |  131 +
 src/Relhum/MvRelhum.h                              |   41 +
 src/Relhum/Relhum.cc                               |  146 +
 src/Reprojection/Makefile.am                       |    2 +-
 src/Reprojection/Makefile.in                       |    8 +-
 src/Reprojection/ObjectSpec.Reprojection           |    1 +
 src/Reprojection/ReprojectService.cc               |    2 +-
 src/Rttov/Makefile.am                              |   44 +
 src/Rttov/Makefile.in                              |  755 +++
 src/Rttov/ObjectSpec.Rttov                         |  120 +
 src/Rttov/RttovRun.cc                              |  277 +
 src/Rttov/RttovRunDef                              |   78 +
 src/Rttov/RttovRunRules                            |    5 +
 src/Rttov/RttovVisualiser.cc                       |  248 +
 src/Rttov/RttovVisualiserDef                       |   28 +
 src/Rttov/RttovVisualiserRules                     |    3 +
 src/Scm/Makefile.in                                |    6 +
 src/Scm/ScmRun.cc                                  |  186 +-
 src/ScmEditor/Makefile.in                          |    6 +
 src/ScmEditor/MvMain.cc                            |    3 +-
 src/ScmEditor/ScmDataEditor.cc                     |   35 +-
 src/Stations/Makefile.in                           |    6 +
 src/StdAppManager/INPUTVISUALISER.svg              |  179 -
 src/StdAppManager/INPUTVISUALISER.xpm              |  153 -
 src/StdAppManager/Makefile.am                      |   26 +-
 src/StdAppManager/Makefile.in                      |   29 +-
 src/StdAppManager/NETCDFPLUS.svg                   |  268 -
 src/StdAppManager/NETCDFPLUS.xpm                   |  207 -
 src/StdAppManager/NetcdfPlusDef                    |    8 +-
 src/StdAppManager/NetcdfPlusRules                  |    4 +
 src/StdAppManager/ObjectSpec.StdAppManager         |    3 +
 src/StdAppManager/TABLEVISUALISER.svg              |  264 -
 src/StdAppManager/TABLEVISUALISER.xpm              |  210 -
 src/Velstr/Makefile.in                             |    6 +
 src/VisTools/Makefile.in                           |    6 +
 src/WebAccess/Makefile.in                          |    6 +
 src/XSection/AVERAGE.xpm                           |   43 +
 src/XSection/AVERAGEVIEW.xpm                       |   45 +
 src/XSection/Average.cc                            |  231 +
 src/XSection/Average.h                             |   70 +
 src/XSection/AverageDef                            |   59 +
 src/XSection/{XAverageRules => AverageRules}       |    0
 src/XSection/AverageViewDef                        |   61 +
 src/XSection/AverageViewRules                      |    3 +
 src/XSection/CrossS.cc                             |  736 ++
 src/XSection/CrossS.h                              |   87 +
 .../VPROFILE.xpm => src/XSection/MVPROFILE.xpm     |    0
 .../XSection/MVPROFILEVIEW.xpm                     |    0
 src/XSection/MVProfileDef                          |   69 +
 src/XSection/MVProfileRules                        |   10 +
 src/XSection/MVProfileViewDef                      |  107 +
 src/XSection/MVProfileViewRules                    |    8 +
 .../XAVERAGE.xpm => src/XSection/MXAVERAGE.xpm     |    0
 .../XSection/MXAVERAGEVIEW.xpm                     |    0
 src/XSection/MXAverageDef                          |   42 +
 src/XSection/MXAverageRules                        |    0
 src/XSection/MXAverageViewDef                      |   97 +
 src/XSection/MXAverageViewRules                    |    2 +
 .../XSECTION.xpm => src/XSection/MXSECTION.xpm     |    0
 .../XSection/MXSECTIONVIEW.xpm                     |    0
 src/XSection/MXSectionCommonDef                    |   62 +
 src/XSection/MXSectionCommonRules                  |    0
 src/XSection/MXSectionDef                          |   20 +
 src/XSection/MXSectionRules                        |    1 +
 src/XSection/MXSectionViewDef                      |   75 +
 src/XSection/MXSectionViewRules                    |    3 +
 src/XSection/Makefile.am                           |   62 +-
 src/XSection/Makefile.in                           |  130 +-
 src/XSection/MvXsectFrame.cc                       | 1626 ++---
 src/XSection/MvXsectFrame.h                        |  225 +-
 src/XSection/ObjectSpec.XSection                   |  219 +-
 src/XSection/VPROF.xpm                             |   43 +
 src/XSection/VPROFVIEW.xpm                         |   42 +
 src/XSection/VProfileDef                           |   66 -
 src/XSection/VProfileRules                         |    8 -
 src/XSection/VertProfDef                           |   66 +
 src/XSection/VertProfRules                         |    5 +
 src/XSection/VertProfViewDef                       |  108 +
 src/XSection/VertProfViewRules                     |    9 +
 src/XSection/Vprofile.cc                           |  718 ++
 src/XSection/Vprofile.h                            |   84 +
 src/XSection/XAverageDef                           |   60 -
 src/XSection/XSECT.xpm                             |   42 +
 src/XSection/XSECTVIEW.xpm                         |   44 +
 src/XSection/XSectionDef                           |   97 -
 src/XSection/XSectionRules                         |    8 -
 src/XSection/Xsect.cc                              | 1733 ++---
 src/XSection/Xsect.h                               |  131 +
 src/XSection/XsectDef                              |   97 +
 src/XSection/XsectRules                            |    8 +
 src/XSection/XsectViewDef                          |   81 +
 src/XSection/XsectViewRules                        |    3 +
 src/images/Makefile.am                             |   80 +-
 src/images/Makefile.in                             |   84 +-
 src/images/accept.svg                              |  205 +
 src/images/add_bookmark.svg                        |  276 +
 src/images/add_bookmark_group.svg                  |  499 ++
 src/images/antialias.svg                           |  290 +-
 src/images/archive.svg                             |  258 +
 src/images/big_arrow_left.svg                      |  148 +
 src/images/big_arrow_right.svg                     |  148 +
 src/images/big_arrow_up.svg                        |  148 +
 src/images/bookmark.svg                            |  130 +
 src/images/bookmark_broken.svg                     |  188 +
 src/images/bookmark_group.svg                      |  380 ++
 src/images/cancel.svg                              |  141 +
 src/images/create_folder.svg                       |  166 +
 src/images/create_macro.svg                        |  282 +
 src/images/cursor_bdiag.svg                        |  212 +
 src/images/cursor_bdiag_hover.svg                  |  218 +
 src/images/cursor_fdiag.svg                        |  212 +
 src/images/cursor_fdiag_hover.svg                  |  218 +
 src/images/cursor_horiz.svg                        |  212 +
 src/images/cursor_horiz_hover.svg                  |  219 +
 src/images/cursor_vert.svg                         |  212 +
 src/images/cursor_vert_hover.svg                   |  218 +
 src/images/detailed_view.svg                       |  371 +
 src/images/drawer.svg                              |  183 +
 src/images/duplicate.svg                           |  205 +
 src/images/edit.svg                                |   46 +-
 src/images/embedded.svg                            |  182 +
 src/images/error.svg                               |  214 +
 src/images/examine.svg                             |  296 +
 src/images/execute.svg                             |  323 +
 src/images/expand_left.svg                         |  125 +
 src/images/expand_right.svg                        |  125 +
 src/images/filter.svg                              |  157 +
 src/images/folder.svg                              |  126 +
 src/images/foldergroup.svg                         |  146 +
 src/images/gui_edit.svg                            |  147 +
 src/images/help_line.svg                           |   95 +
 src/images/help_map.svg                            |  106 +
 src/images/help_point.svg                          |  120 +
 src/images/help_script.svg                         |  160 +
 src/images/history.svg                             |  463 ++
 src/images/home.svg                                |  122 +
 src/images/icon_group.svg                          |  196 +
 src/images/icon_view.svg                           |  329 +
 src/images/link.svg                                |  117 +
 src/images/link_broken.svg                         |  142 +
 src/images/mail_send.svg                           |  155 +
 src/images/menu_indicator.png                      |  Bin 0 -> 152 bytes
 src/images/padlock.svg                             |  203 +
 src/images/page_add.svg                            |  155 +
 src/images/page_connect.svg                        |  234 +
 src/images/page_delete.svg                         |  205 +
 src/images/page_disconnect.svg                     |  207 +
 src/images/page_expand.svg                         |  248 +
 src/images/page_join.svg                           |  367 +
 src/images/page_select_all.svg                     |  276 +
 src/images/page_setup.svg                          |  289 +
 src/images/page_split.svg                          |  129 +
 src/images/redo.svg                                |  174 +-
 src/images/reload.svg                              |  163 +-
 src/images/sidebar.svg                             |  107 +-
 src/images/sidebar_left.svg                        |  202 +
 src/images/snap_to_grid.svg                        |  293 +
 src/images/splash_screen.png                       |  Bin 0 -> 17606 bytes
 src/images/splash_screen.svg                       |  179 +
 src/images/text_edit.svg                           |  220 +
 src/images/undo.svg                                |  174 +-
 src/images/unknown.svg                             |  198 +
 src/images/view_grid.svg                           |  245 +
 src/images/visualise.svg                           |  293 +
 src/images/warning.svg                             |  145 +
 src/images/wastebasket.svg                         |  283 +
 src/libFTimeUtil/Makefile.in                       |    6 +
 src/libMars-ecregrid/Makefile.am                   |  115 +
 src/libMars-ecregrid/Makefile.in                   | 1991 ++++++
 src/libMars-ecregrid/account.c                     |  207 +
 src/libMars-ecregrid/archive.c                     |  229 +
 src/libMars-ecregrid/authenticate.c                |  985 +++
 src/libMars-ecregrid/base.c                        |  266 +
 src/libMars-ecregrid/base.h                        |   70 +
 src/libMars-ecregrid/bufr.c                        |  765 +++
 src/libMars-ecregrid/bufr.h                        |  231 +
 src/libMars-ecregrid/calc.c                        | 2266 +++++++
 src/libMars-ecregrid/check.c                       |  479 ++
 src/libMars-ecregrid/control.c                     |  109 +
 src/libMars-ecregrid/control.h                     |   25 +
 src/libMars-ecregrid/cos.c                         |  259 +
 src/libMars-ecregrid/cos.h                         |   82 +
 src/{libMars => libMars-ecregrid}/dhsbase.c        |    0
 src/libMars-ecregrid/ecaccess.c                    |  113 +
 src/libMars-ecregrid/ecaccess.h                    |   20 +
 src/{libMars => libMars-ecregrid}/environ.c        |    0
 src/libMars-ecregrid/expand.c                      | 1387 ++++
 src/libMars-ecregrid/externf.c                     |   71 +
 src/libMars-ecregrid/field.c                       | 1150 ++++
 src/libMars-ecregrid/field.h                       |   76 +
 src/libMars-ecregrid/filebase.c                    |  297 +
 src/libMars-ecregrid/files.c                       |   27 +
 src/libMars-ecregrid/flatfilebase.c                |  215 +
 src/libMars-ecregrid/free.c                        |  441 ++
 src/{libMars => libMars-ecregrid}/globals.h        |    0
 src/libMars-ecregrid/grib.c                        |  184 +
 src/libMars-ecregrid/grib.h                        |  872 +++
 src/libMars-ecregrid/gribbase.c                    |  132 +
 src/libMars-ecregrid/guess.c                       |  163 +
 src/libMars-ecregrid/handler.c                     |  184 +
 src/libMars-ecregrid/hash.c                        |  137 +
 src/libMars-ecregrid/hidden.c                      |  567 ++
 src/libMars-ecregrid/hypercube.c                   |  942 +++
 src/libMars-ecregrid/hypercube.h                   |   29 +
 src/libMars-ecregrid/ibmblk.c                      |  384 ++
 src/libMars-ecregrid/ibmblk.h                      |   95 +
 src/libMars-ecregrid/index.c                       |  143 +
 src/libMars-ecregrid/index.h                       |   38 +
 src/libMars-ecregrid/lang.h                        |   67 +
 src/libMars-ecregrid/langl.c                       | 2313 +++++++
 src/libMars-ecregrid/langl.l                       |  365 +
 src/libMars-ecregrid/langy.c                       | 2244 ++++++
 src/libMars-ecregrid/langy.y                       |  328 +
 src/libMars-ecregrid/list.c                        |   34 +
 src/libMars-ecregrid/llmatrix.c                    |  274 +
 src/libMars-ecregrid/lock.c                        |   20 +
 src/{libMars => libMars-ecregrid}/logfile.c        |    0
 src/{libMars => libMars-ecregrid}/mars.h           |    0
 src/libMars-ecregrid/mcs.h                         |   92 +
 src/libMars-ecregrid/memory.c                      |  392 ++
 src/libMars-ecregrid/metadata.c                    |   33 +
 src/libMars-ecregrid/multibase.c                   |  249 +
 src/libMars-ecregrid/netbase.c                     | 1107 +++
 src/libMars-ecregrid/netbase.h                     |   28 +
 src/libMars-ecregrid/nfdbbase.c                    | 1096 +++
 src/libMars-ecregrid/nullbase.c                    |   75 +
 src/libMars-ecregrid/odb.cc                        |  304 +
 src/libMars-ecregrid/odb.h                         |   35 +
 src/libMars-ecregrid/odbbase.c                     |  442 ++
 src/{libMars => libMars-ecregrid}/options.c        |    0
 src/libMars-ecregrid/pproc.c                       | 2017 ++++++
 src/libMars-ecregrid/proto.h                       |  724 ++
 src/libMars-ecregrid/queue.c                       |  304 +
 src/libMars-ecregrid/queue.h                       |   21 +
 src/libMars-ecregrid/remove.c                      |   70 +
 src/libMars-ecregrid/request.c                     | 2673 ++++++++
 src/libMars-ecregrid/restricted.c                  |   55 +
 src/libMars-ecregrid/restricted.h                  |  185 +
 src/libMars-ecregrid/retrieve.c                    |  632 ++
 src/libMars-ecregrid/rpcmars.x                     |  134 +
 src/{libMars => libMars-ecregrid}/schedule.c       |    0
 src/libMars-ecregrid/server.c                      |  371 +
 src/{libMars => libMars-ecregrid}/service.c        |    0
 src/libMars-ecregrid/sh2ll.c                       |  170 +
 src/libMars-ecregrid/statistics.c                  |  402 ++
 src/libMars-ecregrid/stream.c                      |  498 ++
 src/libMars-ecregrid/target.c                      |  850 +++
 src/libMars-ecregrid/tcp.c                         |  383 ++
 src/libMars-ecregrid/time.c                        |   40 +
 src/libMars-ecregrid/timer.c                       |  331 +
 src/libMars-ecregrid/tools.c                       | 1705 +++++
 src/libMars-ecregrid/tools.h                       |   20 +
 src/libMars-ecregrid/udp.c                         |  211 +
 src/libMars-ecregrid/variable.c                    |  185 +
 src/libMars-ecregrid/variable.h                    |   17 +
 src/libMars-ecregrid/version.c                     |   34 +
 src/libMars-ecregrid/webbase.c                     |  613 ++
 src/libMars-ecregrid/wind.c                        |  536 ++
 src/libMars-ecregrid/xservice.c                    |   58 +
 src/libMars/Makefile.in                            |    6 +
 src/libMars/api.c                                  |  810 ++-
 src/libMars/api.h                                  |    3 +
 src/libMars/apibase.c                              |  658 +-
 src/libMars/dhsbase.c                              |    1 +
 src/libMars/environ.c                              |   24 +-
 src/libMars/globals.h                              |    1 +
 src/libMars/handler.c                              |   16 +-
 src/libMars/json.c                                 |   72 +-
 src/libMars/json.h                                 |   20 -
 src/libMars/langl.c                                |   75 +-
 src/libMars/langy.c                                |  441 +-
 src/libMars/logfile.c                              |   26 +-
 src/libMars/mars.h                                 |    3 +
 src/libMars/options.c                              |    3 +
 src/libMars/proto.h                                |   67 +-
 src/libMars/schedule.c                             |    2 +-
 src/libMars/service.c                              |    2 +-
 src/libMars/tools.c                                |    5 +-
 src/libMetview/Makefile.in                         |    6 +
 src/libMetview/MvFieldSet.cc                       |   41 +-
 src/libMetview/MvFieldSet.h                        |    4 +
 src/libMetview/MvGrid.cc                           |    3 +
 src/libMetview/MvRequest.cc                        |   20 +-
 src/libMetview/MvRequest.h                         |    9 -
 src/libMetview/MvScanFileType.cc                   |   39 +-
 src/libMetview/MvServiceTask.cc                    |    5 +
 src/libMetview/MvServiceTask.h                     |    2 +
 src/libMetview/Path.cc                             |   90 +-
 src/libMetview/Path.h                              |    3 +
 src/libMvMotif/Makefile.in                         |    6 +
 src/libMvNetCDF/Makefile.in                        |    6 +
 src/libMvNetCDF/MvNetCDF.cc                        |    2 +-
 src/libMvNetCDF/MvNetCDF.h                         |    2 +-
 src/libMvQtGui/Makefile.am                         |   58 +-
 src/libMvQtGui/Makefile.in                         |  458 +-
 src/libMvQtGui/MvQApplication.cc                   |   16 +-
 src/libMvQtGui/MvQApplication.h                    |    1 +
 src/libMvQtGui/MvQComboLine.cc                     |   94 +
 src/libMvQtGui/MvQComboLine.h                      |   49 +
 src/libMvQtGui/MvQDragDrop.cc                      |   68 +-
 src/libMvQtGui/MvQDragDrop.h                       |   22 +
 src/libMvQtGui/MvQFileBrowserBase.cc               |  583 --
 src/libMvQtGui/MvQFileBrowserBase.h                |  131 -
 src/libMvQtGui/MvQFileDialog.cc                    |  145 +
 src/libMvQtGui/MvQFileDialog.h                     |   50 +
 src/libMvQtGui/MvQFileInfoLabel.cc                 |   12 +-
 src/libMvQtGui/MvQFileInfoLabel.h                  |    2 +-
 src/libMvQtGui/MvQKeyModel.cc                      |   69 +-
 src/libMvQtGui/MvQKeyModel.h                       |   13 +-
 src/libMvQtGui/MvQLineEdit.cc                      |   50 +
 src/libMvQtGui/MvQLineEdit.h                       |   38 +
 src/libMvQtGui/MvQMacroSelector.cc                 |  193 -
 src/libMvQtGui/MvQMacroSelector.h                  |   86 -
 src/libMvQtGui/MvQMailDialog.cc                    |  226 +
 src/libMvQtGui/MvQMailDialog.h                     |   48 +
 src/libMvQtGui/MvQMainWindow.cc                    |   46 +-
 src/libMvQtGui/MvQMenuItem.h                       |    2 +-
 src/libMvQtGui/MvQOdbDataWidget.cc                 |    2 +-
 src/libMvQtGui/MvQOdbModel.cc                      |    7 +-
 src/libMvQtGui/MvQPixmapCache.cc                   |   86 +
 src/libMvQtGui/MvQPixmapCache.h                    |   35 +
 src/libMvQtGui/MvQProfileView.cc                   |   33 +-
 src/libMvQtGui/MvQProfileView.h                    |    1 +
 src/libMvQtGui/MvQRangeWidget.cc                   |   11 +
 src/libMvQtGui/MvQScmDataWidget.cc                 |  840 ++-
 src/libMvQtGui/MvQScmDataWidget.h                  |  107 +-
 src/libMvQtGui/MvQScmModel.cc                      |    8 +-
 src/libMvQtGui/MvQScmModel.h                       |   14 +-
 src/libMvQtGui/MvQSearchLinePanel.cc               |    2 +-
 src/libMvQtGui/MvQSlider.cc                        |   57 +
 src/libMvQtGui/MvQSlider.h                         |   27 +
 src/libMvQtGui/MvQStationsWidget.cc                |  361 +
 src/libMvQtGui/MvQStationsWidget.h                 |  116 +
 src/libMvQtGui/MvQTextEditSearchLine.cc            |    6 +-
 src/libMvQtGui/MvQTextEditSearchLine.h             |    4 +-
 src/libMvQtGui/MvQWebViewSearchLine.cc             |   51 +
 src/libMvQtGui/MvQWebViewSearchLine.h              |   35 +
 src/libMvQtGui/edit.qrc                            |    5 +
 src/libMvQtGui/find.qrc                            |    2 +-
 src/libMvQtGui/keyDialog.qrc                       |    2 +-
 src/libMvQtGui/mail.qrc.cpp                        |  374 +
 src/libMvQtGui/window.qrc                          |    2 +-
 src/libMvQtUtil/Makefile.in                        |    6 +
 src/libMvQtUtil/MvQOdbMetaData.cc                  |    4 +-
 src/libMvQtUtil/MvQOdbMetaData.h                   |    2 +-
 src/libUtil/Makefile.am                            |   11 +-
 src/libUtil/Makefile.in                            |   62 +-
 src/libUtil/MvKeyProfile.cc                        |    5 +-
 src/libUtil/MvKeyProfile.h                         |    1 +
 src/libUtil/MvMiscelaneous.cc                      |   87 +-
 src/libUtil/MvMiscelaneous.h                       |    4 +
 src/libUtil/MvOdb.cc                               |   49 +-
 src/libUtil/MvOdb.h                                |    6 +-
 src/libUtil/MvProfileData.h                        |   12 +-
 src/libUtil/MvRequestUtil.cc                       |   71 +-
 src/libUtil/MvRequestUtil.hpp                      |   11 +-
 src/libUtil/MvRttov.cc                             |  225 +
 src/libUtil/MvRttov.h                              |   45 +
 src/libUtil/MvScm.cc                               |  658 +-
 src/libUtil/MvScm.h                                |   52 +-
 src/libUtil/Request.cc                             |   11 +-
 src/libUtil/Request.h                              |    7 +-
 src/libUtil/TableReader.cc                         |    4 +-
 src/libUtil/TableReader.h                          |    2 +-
 src/metview_config.h                               |   20 +-
 src/metview_config.h.in                            |    6 +
 src/uPlot/AnnotationView.cc                        |  170 +
 src/uPlot/AnnotationView.h                         |   90 +
 src/uPlot/AverageView.cc                           |   98 +-
 src/uPlot/AverageView.h                            |   35 +-
 src/uPlot/CartesianView.cc                         |   49 +-
 src/uPlot/CommonXSectView.cc                       |  160 +-
 src/uPlot/CommonXSectView.h                        |    8 +-
 src/uPlot/CreateAction.cc                          |    8 +
 src/uPlot/DataBuilder.cc                           |   10 -
 src/uPlot/DataObject.cc                            |   26 +-
 src/uPlot/GenAppService.cc                         |   10 +-
 src/uPlot/GeoTool.cc                               |  133 +-
 src/uPlot/GeoTool.h                                |    7 +-
 src/uPlot/GeoToolManager.cc                        |   14 +-
 src/uPlot/GraphicsEngine.h                         |   11 +-
 src/uPlot/HovmoellerView.cc                        |  392 ++
 src/uPlot/HovmoellerView.h                         |  132 +
 src/uPlot/MagPlusService.h                         |    1 +
 src/uPlot/MagicsGraphicsEngine.cc                  |  242 +-
 src/uPlot/MagicsGraphicsEngine.h                   |   14 +-
 src/uPlot/MagicsTranslator.cc                      |   72 +-
 src/uPlot/MagicsTranslator.h                       |   24 +-
 src/uPlot/Makefile.am                              |   22 +-
 src/uPlot/Makefile.in                              |  147 +-
 src/uPlot/MapView.cc                               |  166 +-
 src/uPlot/MvIcon.cc                                |    2 +-
 src/uPlot/MvIconDataBase.cc                        | 1417 ++--
 src/uPlot/MvIconDataBase.h                         |  308 +-
 src/uPlot/MvQContentsModel.cc                      |   13 +-
 src/uPlot/MvQLayerDataWidget.cc                    |    2 +-
 src/uPlot/MvQLayerWidget.cc                        |    2 +-
 src/uPlot/MvQLayerWidget.h                         |    2 +-
 src/uPlot/MvQPlaceMark.cc                          |    2 +-
 src/uPlot/MvQPlotView.cc                           |   41 +
 src/uPlot/MvQPlotView.h                            |    7 +-
 src/uPlot/NewpageAction.cc                         |    7 +-
 src/uPlot/ObjectList.cc                            |   61 +-
 src/uPlot/ObjectList.h                             |   59 +-
 src/uPlot/ObjectSpec.OutputFormats                 |    5 +-
 src/uPlot/OutputFormatAction.cc                    |    7 +-
 src/uPlot/Page.cc                                  |   64 +-
 src/uPlot/Page.h                                   |   60 +-
 src/uPlot/PlotMod.cc                               |   12 +-
 src/uPlot/PlotModView.cc                           |   85 +-
 src/uPlot/PlotModView.h                            |    5 +-
 src/uPlot/PlotPageBuilder.cc                       |    9 -
 src/uPlot/PmContext.h                              |    3 -
 src/uPlot/PmProjection.cc                          |    2 +-
 src/uPlot/Presentable.cc                           |   99 +-
 src/uPlot/Presentable.h                            |   15 +-
 src/uPlot/Root.cc                                  |   47 +-
 src/uPlot/Root.h                                   |   12 +-
 src/uPlot/SubPage.cc                               |   83 +-
 src/uPlot/SuperPage.cc                             |   62 +-
 src/uPlot/SuperPage.h                              |   12 +-
 src/uPlot/VertProfView.cc                          |  268 +-
 src/uPlot/VertProfView.h                           |   55 +-
 src/uPlot/XSectView.cc                             |  113 +-
 src/uPlot/XSectView.h                              |   49 +-
 src/uPlot/uPlot.cc                                 |   25 +
 src/uPlot/uPlot.h                                  |    1 +
 src/uPlot/uPlot.qrc                                |    2 +-
 src/uPlot/uPlotBase.cc                             |   76 +
 src/uPlot/uPlotBase.h                              |    3 +
 src/uPlot/uPlotBatchApp.cc                         |   32 +-
 src/uPlot/uPlotManager.cc                          |  131 +-
 src/uPlot/uPlotService.cc                          |   10 +-
 test/Makefile.am                                   |    2 +-
 test/Makefile.in                                   |    8 +-
 test/data/10U_GG.grb                               |  Bin 0 -> 160200 bytes
 test/data/10U_GG_to_subarea_result.grb             |  Bin 0 -> 8160 bytes
 test/data/t1000_RGG_to_LL_reference.grb            |  Bin 0 -> 65280 bytes
 test/data/t1000_SH.grb                             |  Bin 0 -> 1641240 bytes
 test/data/t1000_SH_to_LL_reference.grb             |  Bin 0 -> 65280 bytes
 test/data/t1000_SH_to_RGG_reference.grb            |  Bin 0 -> 845280 bytes
 test/macros/Makefile.am                            |    5 +-
 test/macros/Makefile.in                            |   12 +-
 test/macros/interpolation_gg_to_subarea.mv         |   49 +
 test/macros/interpolation_rgg_to_ll.mv             |   44 +
 test/macros/interpolation_sh_to_ll.mv              |   44 +
 test/macros/interpolation_sh_to_rgg.mv             |   45 +
 version.sh                                         |   10 +-
 1292 files changed, 175124 insertions(+), 25624 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 524f287..88f6ae3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -13,7 +13,127 @@
    +---------------------------------------------------------------------+
    +---------------------------------------------------------------------+
 
-254ir Lambert grids: nearest_gridpoint returns the first value in the grid 
+268fi Hovmoeller Vertical application: added parameter Vertical_Scaling
+
+   .The Hovmoeller Vertical application can now produce a logarithmic axis
+    (defaul is linear).
+
+   .files: Hovmoeller/MHovmoellerViewDef,MHovmoellerViewRules,
+           uPlot/HovmoellerView.cc.*
+   .date: 2013-09-27
+
+267fi Data applications: updated the automatic Title mechanism
+
+   .All data applications that return a netCDF file (such as Hovmoeller and
+    XSection) no longer send a Title request. This information is now encoded
+    in the netCDF file, so Magics can now produce an automatic title.
+
+   .files: Hovmoeller/HovToolkit.*, XSection/Average.cc, Xsect.*, CrossS.cc,
+           Vprofile.*
+   .date: 2013-09-04
+
+266fi uPlot/DataView: now can overlay other data
+
+   .It is possible now to overlay an input visualiser.
+
+   .files: uPlot/CommonXSectView.cc
+   .date: 2013-09-04
+
+265fi uPlot: fixed problem of calling external modules
+
+   .The external modules (XSection, Hovmoeller, ...) were called asynchronously‎.
+    This was causing communication problems because uPlot needs to wait for all
+    requests to be ready before sending them to Magics. Now, the external modules
+    are called synchronously.
+
+   .files: XSection/Average.cc, libMetview/MvServiceTask.*,
+           uPlot/CommonXSectView.*, uPlotBatchApp.cc
+   .date: 2013-09-03
+
+264fi Hovmoeller: clear separation between Data and View
+
+   .The Data modules return netCDF file and their user interface do not have
+    any visualisation parameter related.
+
+   .files: Hovmoeller/all files in this directory were updated and new files
+           were also created.
+           uPlot/HvmoellerView.*, Makefile.am, uPlotManager.cc,
+           etc/uPlotTable, icons/Makefile.am
+   .date: 2013-08-29
+
+263fi VProfileView: fixed issue when using option Log to Vertical Scaling 
+
+   .Option Log was not activated.
+
+   .files: XSection/Vprofile.*,Xsect.*, uPlot/CommonXSectView.*
+   .date: 2013-08-29
+
+262fi XSection/VProfile/Average: clear separation between Data and View
+
+   .The Data modules return netCDF file and their user interface do not have
+    any visualisation parameter related.
+
+   .files: XSection/Average.*,CrossS.*,Makefile.am,MvXsectFrame.*,Vprofile.*,Xsect.*,
+           libMetview/MvGrid.cc, uPlot/CommonXSectView.cc
+   .date: 2013-07-24
+
+261fi XSection/VerticalProfile: introduce RTTOV variables
+
+   .Three new variables were added to the user interface as well as several
+    derived fields were added to the netcdf file. These new variables are only
+    generated if the RTTOV option is selected, which is also a new parameter.
+
+   .files: XSection/MXSectionCommonDef, MvProfileDef, MvProfileViewDef, MXAverageDef,
+           MXAverageViewDef, Xsect.*, MvXsectFrame.*
+   .date: 2013-06-20
+
+260fi XSection: remove new parameter VERTICAL_LEVEL_TYPE.
+
+   .This will provide more backwards compatibility with Metview 3
+
+   .files: XSection/MXSectionCommonDef, MvProfileDef, MvProfileViewDef, MXAverageDef,
+           MXAverageViewDef, Xsect.*, MvXsectFrame.*
+   .date: 2013-05-30
+
+259fi uPlot-AnnotationView: Error to generate multiple Views
+
+   .Function Drop was not handling the PLOTSUPERPAGE request.
+
+   .files: uPlot/AnnotationView.cc
+   .date: 2013-04-26
+
+258fi Macro: Pool and Observation Filter relationship problem
+
+   .This sequence of commands was crashing uPlot:
+       bufr = retrieve(...)
+       geo  = obsfilter(...)
+       plot(geo)
+    because Macro (InPool class) was deleting the file 'geo' before the plotting
+    was performed. In fact, InPool was called to delete file 'bufr' but it was also
+    deleting all the temporary files related to 'bufr' (including 'geo'). This behaviour
+    was commented out, but there is a need to monitor it until it is sure that there
+    is no side effect.
+
+   .files: Macro/value.cc Macro/include/node.h
+   .date: 2013-04-23
+
+257fi uPlot: translate PCOAST to MCOAST
+
+   .PCOAST icon is now translated to MCOAST.
+
+   .files: uPlot/MagicsTranslator.cc
+   .date: 2013-04-19
+
+256fi XSection, Average, VerticalProfile: introduced the Metview 3 icons equivalents.
+
+   .Metview 3 icons Cross Section, Average and Vertical Profile, both DATA and VIEW,
+    are now available in Metview 4 for backwards compatiblity. They are not fully backward
+    compatible, since the VIEW and DATA interfaces have been reviewd in Metview 4.
+
+   .files: various files in etc, icons, uPlot, XSection
+   .date: 2013-04-18
+
+255ir Lambert grids: nearest_gridpoint returns the first value in the grid 
 
    .This is because an update in the Lambert code corresponding to a new
     GRIB_API version (in 2010) was not completely copied from Metview 3
@@ -23,7 +143,7 @@
    .files: libMetview/MvGrid.cc
    .date: 2013-04-03
 
-253ir Gaussian grids: construction of MvField can be slow 
+254ir Gaussian grids: construction of MvField can be slow 
 
    .This is because the GRIB_API function grib_get_gaussian_latitudes() is
     expensive, and we were calling it for each Gaussian field we loaded.
@@ -32,14 +152,14 @@
    .files: libMetview/MvGrid.[cc,h]
    .date: 2013-04-03
 
-252ir Meteogram: added new option: '15 days epsgram with climate'
+253ir Meteogram: added new option: '15 days epsgram with climate'
 
    .Functionality was already in Magics; just added the interface in Metview
 
    .files: Meteogram/MetPlus.cc,MetPlusDef
    .date: 2013-03-27
 
-251ir Macro: improved deletion of temporary GRIB files
+252ir Macro: improved deletion of temporary GRIB files
 
    .The issue where temporary GRIB files which were passed to
     icon functions were not subsequently being deleted has been fixed.
@@ -47,6 +167,14 @@
    .files: Macro/value.[cc,h],grib.cc
    .date: 2013-03-25
 
+251fi XSection, MXAverage, VerticalProfile: first 'new' version implemented
+
+   .This version is not backwards compatible. The objective is to provide a
+    clear user interface between the View and the correspondent Data application.
+
+   .files: various files in etc, icons, uPlot, XSection
+   .date: 2013-03-20
+
 250ir Macro: removed _UNSET parameter from expanded requests
 
    .We do not use this parameter, and it can increase the size of a
@@ -56,29 +184,26 @@
    .files: Macro/request.cc
    .date: 2013-03-04
 
-249ir Updated version number to 4.3.8
-
-   .New revision number.
+249fi AnnotationView: first version implemented
 
-   .files: version.sh
-   .date: 2013-02-26
+   .This new View groups together previous three Metview 3 Views: TextView, EmptyView and
+    ImportView. This version implements the TextView and EmptyView.
 
-248ir GRIB Filter icon now saves parameter short name instead of number
+   .files: various files in etc, icons, uPlot
+   .date: 2013-02-20
 
-   .The GRIB Filter icon was previously storing things like
-    PARAM=130 instead of PARAM='t'. It now does the latter.
+248ir Macro: user-defined functions take precedence over built-in functions (Mark Rodwell)
 
-   .files: share/metview/etc/ObjectList
-   .date: 2013-02-21
+   .User-defined functions were being overlooked if they had the same name as
+    a built-in function. Now, functions defined in a macro (or in an include file)
+    are found before the built-in functions are searched. This does NOT include
+    functions in the Macro search path (because this would involve either lots
+    of file accesses or else some restructuring of the code).
 
-247ir Updated version number to 4.3.7
+   .files: Macro/code.cc,include/macro.h
+   .date: 2013-02-12
 
-   .New revision number.
-
-   .files: version.sh
-   .date: 2013-02-19
-
-246fi Velstr: fix test of PARAM value
+247fi Velstr: fix test of PARAM value
 
    .Updated the test to check if the input data is Vorticity or Divergence.
     Now, it works for grib1 and grib2 data.
@@ -86,20 +211,27 @@
    .files: Velstr/velstr-exFortran.cc
    .date: 2013-01-31
 
-245ir Updated version number to 4.3.6
+246ir SCM: added SCM_DATA_TITLE and SCM_COMPARISON_DATA_TITLE to SCM Visualiser icon
 
-   .New revision number.
+   .New parameters to allow the user to provide custom legend entries.
 
-   .files: version.sh
-   .date: 2013-01-28
+   .files: Scm/various
+   .date: 2013-01-31
 
-244ir SCM: added first version of the SCM Visualiser
+245ir SCM: added SCM Visualiser module
 
    .Still needs some work, but basic functionality is there.
 
    .files: Scm/various
-   .date: 2013-01-18
+   .date: 2013-01-22
+
+244fi Vertical Profile: View was ignoring user-supplied axis icons
+
+   .Now the output plotting contains the user-supplied axis definition
 
+   .files: etc/uPlotTable, uPlot/DataBuilder.cc, ObjectList.*, Page.cc,
+           PlotPageBuilder.cc, Root.cc, VertProfView.cc
+   .date: 2013-01-11
 
 243ir Cross Section: added y-axis title
 
@@ -109,7 +241,26 @@
    .files: XSection/XSect.cc
    .date: 2013-01-08
 
-242ir Macro: added new function dimension_names(netcdf)
+242ir Cross Section: orography curve was not being drawn when LBSP supplied
+
+   .Now the orography curve is drawn when LNSP is supplied.
+
+   .files: XSection/XSect.cc,MvXsectFrame.[cc,h]
+   .date: 2013-01-04
+
+241ir uPlot: superpage settings such as 'portrait' were not being used
+
+   .In order to obtain a portrait plot, the user had to set
+    custom_width and custom_height, and in fact they had to be set
+    to something very slightly different from the proper values
+    for A4 so that they were not removed by EXPAND_NO_DEFAULT.
+    The solution was to change the Mars expand flags from 
+    EXPAND_NO_DEFAULT to 0 for the PlotSuperpageFunction request.
+
+   .files: Macro/request.cc
+   .date: 2012-12-18
+
+240ir Macro: added new function dimension_names(netcdf)
 
    .New Macro function list dimension_names(netcdf) which returns
     a list of the dimension names for the current netCDF variable.
@@ -117,14 +268,23 @@
    .files: Macro/netcdf.cc
    .date: 2012-12-10
 
-241fi Divrot: fix test of PARAM value
+239fi Divrot: fix test of PARAM value
 
    .Updated the test to check if the input data is Vorticity or Divergence.
 
    .files: Divrot/divrot-exFortran.cc
    .date: 2012-11-20
 
-240ir Improved efficiency of some fieldset routines
+238ir Added Streamlines option to Wind Plotting icon
+
+   .Streamlines for wind fields have been added to Magics, so the
+    option was added to Metview's Wind Plotting icon:
+       WIND_FIELD_TYPE = STREAMLINES
+
+   .files: share/metview/etc/MWINDDef
+   .date: 2012-11-09
+
+237ir Improved efficiency of some fieldset routines
 
    .After noticing that Average Data was taking a long time to compute
     its results, it turned out that the culprit was the repeated calling
@@ -138,14 +298,7 @@
    .files: version.sh
    .date: 2012-11-06
 
-239ir Updated version number to 4.3.5
-
-   .New revision number.
-
-   .files: version.sh
-   .date: 2012-10-25
-
-238sk New environment variable: METVIEW_EXTRA_GRIB_DEFINITION_PATH
+236sk New environment variable: METVIEW_EXTRA_GRIB_DEFINITION_PATH
 
    .Metview now understands a new environment variable which users can
     use to specify a directory where custom GRIB_API definition files
@@ -153,9 +306,9 @@
     before starting Metview.
 
    .files: scripts/metview_base,metview_help uPlot/uPlotService.cc libUtil/GribMetaData.cc
-   .date: 2012-10-26
+   .date: 2012-08-01
 
-237ir Macro: added new function grib_get(fieldset, list, string)
+235ir Macro: added new function grib_get(fieldset, list, string)
 
    .New Macro function grib_get(fieldset, list, string) for
     the efficient retreival of multiple GRIB keys from a fieldset.
@@ -183,7 +336,7 @@
    .files: Macro/grib.cc
    .date: 2012-10-25
 
-236sk Added expression support for column variables in the ODB Visualiser
+234sk Added expression support for column variables in the ODB Visualiser
 
     .Previously the column variables in ODB Viusaliser could strictly take
      column names. Now arbitrary ODB expressions/functions can be used for
@@ -194,7 +347,8 @@
     .files: files in libUtil, libMvQtGui and Odb 
     .date: 2012-10-18
 
-235fi Updated the scheme to trigger requests to be sent to Magics
+
+233fi Updated the scheme to trigger requests to be sent to Magics
 
    .This fix the problem of running Metview in batch mode when another Service
     was called. For example: AverageView + GribData. The application XSection was
@@ -204,7 +358,7 @@
     .files: several files in uPlot
     .date: 2012-10-18
 
-234sk Alphabetically sorted columns in the Data tab of the ODB examiner
+232sk Alphabetically sorted columns in the Data tab of the ODB examiner
     
     .The ODB columns in the Data tab of the ODB Examiner are now
      alphabetically sorted by default. 
@@ -213,7 +367,7 @@
     .date: 2012-10-04
 
 
-233sk Added show/hide columns option to the Data tab of the ODB examiner
+231sk Added show/hide columns option to the Data tab of the ODB examiner
     
     .The ODB columns in the Data tab of the ODB Examiner can now be hidden
     /shown.
@@ -221,7 +375,7 @@
     .files: various files in libMvQtGui
     .date: 2012-10-04
 
-232sk Enabled ODB Visualiser to save additional columns to the resulting ODB 
+230sk Enabled ODB Visualiser to save additional columns to the resulting ODB 
 
     .A parameter called ODB_METADATA_VARIABLES was added to the ODB Visualiser.
      The columns specified here will be added to the ODB Visualiser's output
@@ -231,7 +385,7 @@
     .files: Odb/OdbVisaliser.cc, OdbVisualiserDef
     .date: 2012-10-04
     
-231sk Added an ODB data browser to uPlot
+229sk Added an ODB data browser to uPlot
   
    .The Values panel in the Data tab of uPlot's sidebar now contains a value
     browser for ODB data. The ODB data appear in the same table format as in the ODB
@@ -245,7 +399,7 @@
     .files: various files in uPlot, libMvQtGui, Odb and images
     .date: 2012-10-04
 
-230sk Reorganised sidebar's content in uPlot
+228sk Reorganised sidebar's content in uPlot
   
    .The sidebar tabs in uPlot have been restructured. The Layers tab now only 
     contains the layer list and a new tab called Data was added for the layer
@@ -255,7 +409,7 @@
     .files: various files in uPlot, libMvQtGui and images
     .date: 2012-10-04
 
-229ir Added the ability to shade the area between two curves to the Input Visualiser
+227ir Added the ability to shade the area between two curves to the Input Visualiser
 
    .This was already in Magics - we just needed to add the interface to Metview.
     The Input Visualiser now has a new mode, XY_AREA. The Graph Plotting
@@ -266,7 +420,7 @@
            share/metview/etc/MGRAPHRules.
    .date: 2012-10-05
 
-228ir Cross Section producing an empty plot when given data in model levels with LNSP  (Elias Holm)
+226ir Cross Section producing an empty plot when given data in model levels with LNSP  (Elias Holm)
 
    .The resulting NetCDF visualiser request was asking for the LNSP
     field to be plotted instead of the data field. Additionally, the levels
@@ -275,7 +429,7 @@
    .files: XSection/Xsect.cc,McXSectFrame.[cc,h]
    .date: 2012-10-02
 
-227ir Cross Section producing an empty plot when transect line is of constant longitude  (Johannes Flemming)
+225ir Cross Section producing an empty plot when transect line is of constant longitude  (Johannes Flemming)
 
    .Solution was to check whether X1==X2 and set latitude instead of
     longitude to be the X variable.
@@ -283,7 +437,7 @@
    .files: XSection/Xsect.cc
    .date: 2012-10-01
 
-226ir ObsFilter was not working with Level=Occurrence  (Johannes Flemming)
+224ir ObsFilter was not working with Level=Occurrence  (Johannes Flemming)
 
    .When Level was set to Occurrence, the ObsFilter was returning all
     missing values. This was due to a small syntax error when this
@@ -292,14 +446,7 @@
    .files: ObsFilter/ObsFilter.cc
    .date: 2012-09-28
 
-225ir Updated version number to 4.3.4
-
-   .New revision number.
-
-   .files: version.sh
-   .date: 2012-09-13
-
-224ir Improved the Display Window's Cursor Data for very small values
+223ir Improved the Display Window's Cursor Data for very small values
 
    .If a data value is very small, the cursor data will revert to
     scientific notation.
@@ -307,7 +454,7 @@
    .files: uPlot/MvQCursorData.[cc,h]
    .date: 2012-09-12
 
-223ir Macro could not read macro files with the read() command
+222ir Macro could not read macro files with the read() command
 
    .Now a macro can read('/path/to/macro') and obtain a list of strings
     in the same way as it can with a standard text file.
@@ -315,27 +462,7 @@
    .files: Macro/files.cc
    .date: 2012-08-16
 
-222ir Updated version number to 4.3.3
-
-   .New revision number.
-
-   .files: version.sh
-   .date: 2012-08-14
-
-==============================================================================
-           2012-08-14 Metview 4.3.2 released for export
-==============================================================================
-
-221ir Installation: Qt modules not building on some systems
-
-   .Due to incorrect variables set by the 'qmake' facility, Metview's
-    Qt-based modules were not building on some systems. Metview now
-    sorts out these variables at configure time.
-
-   .files: configure.ac, lots of Makefile.am files.
-   .date: 2012-08-14
-
-220fi GribVectors: only showing the first plot
+221fi GribVectors: only showing the first plot
 
    .If the input fieldset contains more than one vector-field, uPlot was only
     showing the first plot.
@@ -343,7 +470,7 @@
    .files: uPlot/MagicsTranslator.cc, GribVectors/Vector.cc
    .date: 2012-08-13
 
-219ir Installation: PKG_CONFIG_PATH was not being set correctly
+220ir Installation: PKG_CONFIG_PATH was not being set correctly
 
    .The result was that Magics could often not be found during 'configure',
     but this was being hidden at ECMWF because it was being set additionally
@@ -353,18 +480,7 @@
    .files: configure.ac, configure.ecmwf
    .date: 2012-08-07
 
-218ir Updated version number to 4.3.2
-
-   .New revision number.
-
-   .files: version.sh
-   .date: 2012-08-06
-
-==============================================================================
-           2012-08-06 Metview 4.3.1 released for export
-==============================================================================
-
-217ir Macro Editor: 'find/replace' now wrap around
+219ir Macro Editor: 'find/replace' now wrap around
 
    .When searching reaches the bottom (or top for a backwards search) of
     the file, it continues from the top (or bottom). This is not
@@ -373,7 +489,7 @@
    .files: MacroEditor/MacroEdit.[cc,h]
    .date: 2012-07-24
 
-216ir Macro: fixed issue when reading floating-point netCDF attributes
+218ir Macro: fixed issue when reading floating-point netCDF attributes
 
    .Float and double attributes for netCDF variables were being cropped
     because they were being converted to text form in preparation for
@@ -386,7 +502,7 @@
    .files: libMvNetCDF/MvNetCDF.[cc,h]
    .date: 2012-07-17
 
-215ir Macro: added new function sort(vector, string)
+217ir Macro: added new function sort(vector, string)
 
    .New Macro function sort(vector, string) returns a sorted version of
     the given vector. If no second argument is given, the result will be
@@ -396,14 +512,7 @@
    .files: Macro/mvector.cc,value.h
    .date: 2012-07-17
 
-214ir Updated version number to 4.3.1
-
-   .New revision number.
-
-   .files: version.sh
-   .date: 2012-07-16
-
-213fi Allow the geopoints decoder to access only part of the data
+216fi Allow the geopoints decoder to access only part of the data
 
    .A new parameter, 'number of lines' (nlines), was added to inform the decoder to
     read only the first nlines of the file. For example, if the date and time information
@@ -412,15 +521,15 @@
    .files: libMetview/MvGeoPoints.*, uPlot/GeopointsDecoder.cc
    .date: 2012-07-13
 
-212ir Remove redundant output options from Opera Radar Filter
+215ir Remove redundant output options from Opera Radar Filter
 
    .Removed output options which were the 2D geopoints formats. This parameter
     is in fact ignored by the module; the ouput is always geopoints/xyv.
    .files: OperaRadar/OperaRadarDef
    .date: 2012-07-10
-   
-   
-211sk Extended level filter in Obsfilter to work with arbitrary coordinate descriptors 
+
+
+214sk Extended level filter in Obsfilter to work with arbitrary coordinate descriptors 
 
    The level filter in ObsFilter so far has allowed only surface or pressure
    level/layer selection. Now two new options were added to the level filter so
@@ -436,9 +545,9 @@
      
    .files: ObsFilter/ObsFilter.cc, libMetview/MvObs.cc,MvBufrObs.h,
            etc/ObsFilterDef, ObsFilterRules
-   .date: 2012-07-09 
+   .date: 2012-07-09
 
-210ir Ensure that icons in the icon drawers are always writable
+213ir Ensure that icons in the icon drawers are always writable
 
    .When running Metview from a development directory, there is a risk of copying
     read-only icon files from the Perforce depository. This can also happen with
@@ -449,7 +558,14 @@
    .files: libMetview/MavPath.[cc,h], MetviewUI/Filter.[cc,h], FolderDrawers.cc
    .date: 2012-07-09
 
-209fi New application: GribVectors
+212ir Removed code for handling computations with GRIB fields in polar stereographic grids
+
+   .This was done to avoid some licensing issues.
+
+   .files: libMetview/MvGrid.[cc,h]
+   .date: 2012-06-21
+
+211fi New application: GribVectors
 
    .This application is similar to Metview 3 Vectors.
 
@@ -460,12 +576,29 @@
 
    .date: 2012-06-15
 
-208ir Removed code for handling computations with GRIB fields in polar stereographic grids
+210ir Updated XServ module to use Qt instead of Motif
 
-   .This was done to avoid some licensing issues.
+   .Re-written to use Qt.
 
-   .files: libMetview/MvGrid.[cc,h]
-   .date: 2012-06-21
+   .files: src/DebugTools/XServ.[cc,h,qrc]
+   .date: 2012-06-14
+
+209fi uPlot: Layers boundaries, rivers and cities will be plotted only in the foreground
+
+   .At the moment, there is no drawing priority for these 3 layers. So, they
+    will be the last objects to be plotted. Also, for the Coastlines icon,
+    only the parameters set by the user will be passed to Magics, instead of
+    the all the default ones
+
+   .files: uPlot/MagicsGraphicsEngine.cc
+   .date: 2012-05-30
+
+208ir Updated version number to 4.4.0
+
+   .New revision number.
+
+   .files: version.sh
+   .date: 2012-05-29
 
 207ir Updated version number to 4.3.0
 
diff --git a/INSTALL b/INSTALL
index ac57c6e..d14b39a 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,9 +1,9 @@
 
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 >>>>
->>>> Please read the installation guide at
+>>>> Please read the installation guide in
 >>>> 
->>>>    https://software.ecmwf.int/metview/Installation+Guide
+>>>>    docs/Metview_Installation_Guide.pdf
 >>>> 
 >>>>  for information
 >>>>
diff --git a/Makefile.am b/Makefile.am
index d4c9b9c..35e78ee 100755
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
 SUBDIRS		= src scripts share/metview test
 DIST_SUBDIRS	= src scripts share/metview test rpms
 
-EXTRA_DIST	= LICENSE NOTICE config version.sh metview.desktop
+EXTRA_DIST	= LICENSE NOTICE config version.sh docs/Metview_Installation_Guide.pdf metview.desktop
 
 #bin_SCRIPTS	= bin/metview.sh
 ACLOCAL_AMFLAGS	= -I m4
diff --git a/Makefile.in b/Makefile.in
index e7f4553..c89e48b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -161,6 +161,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -176,6 +177,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -202,11 +205,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -336,7 +342,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 SUBDIRS = src scripts share/metview test
 DIST_SUBDIRS = src scripts share/metview test rpms
-EXTRA_DIST = LICENSE NOTICE config version.sh metview.desktop
+EXTRA_DIST = LICENSE NOTICE config version.sh docs/Metview_Installation_Guide.pdf metview.desktop
 
 #bin_SCRIPTS	= bin/metview.sh
 ACLOCAL_AMFLAGS = -I m4
diff --git a/NOTICE b/NOTICE
index fcfd14a..d4540d0 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,7 +1,7 @@
 Metview
 =======
 
-Copyright 2007-2013 ECMWF and INPE
+Copyright 2007-2012 ECMWF and INPE
 
 This product mainly includes software developed by the Meteorological 
 Visualisation Section (formerly known as Graphics Section) at the 
@@ -24,7 +24,7 @@ Magics++
 This graphics library, developed at ECMWF, performs all of the data visualisation
 within Metview. Details can be found at:
 
-  https://software.ecmwf.int/magics
+  http://www.ecmwf.int/publications/manuals/magics/index.html
 
 
 
diff --git a/config/compile b/config/compile
index 1b1d232..c0096a7 100755
--- a/config/compile
+++ b/config/compile
@@ -1,9 +1,10 @@
 #! /bin/sh
 # Wrapper for compilers which do not understand `-c -o'.
 
-scriptversion=2005-05-14.22
+scriptversion=2009-10-06.20; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009  Free Software
+# Foundation, Inc.
 # Written by Tom Tromey <tromey at cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -17,8 +18,7 @@ scriptversion=2005-05-14.22
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -103,13 +103,13 @@ if test -z "$ofile" || test -z "$cfile"; then
 fi
 
 # Name of file we expect compiler to create.
-cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
 
 # Create the lock directory.
-# Note: use `[/.-]' here to ensure that we don't use the same name
+# Note: use `[/\\:.-]' here to ensure that we don't use the same name
 # that we are using for the .o file.  Also, base the name on the expected
 # object file name, since that is what matters with a parallel build.
-lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
 while true; do
   if mkdir "$lockdir" >/dev/null 2>&1; then
     break
@@ -124,9 +124,9 @@ trap "rmdir '$lockdir'; exit 1" 1 2 15
 ret=$?
 
 if test -f "$cofile"; then
-  mv "$cofile" "$ofile"
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
 elif test -f "${cofile}bj"; then
-  mv "${cofile}bj" "$ofile"
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
 fi
 
 rmdir "$lockdir"
@@ -138,5 +138,6 @@ exit $ret
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/config/depcomp b/config/depcomp
index 04701da..df8eea7 100755
--- a/config/depcomp
+++ b/config/depcomp
@@ -1,9 +1,10 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2005-07-09.11
+scriptversion=2009-04-28.21; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
+# Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -16,9 +17,7 @@ scriptversion=2005-07-09.11
 # GNU General Public License for more details.
 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -86,12 +85,34 @@ if test "$depmode" = dashXmstdout; then
    depmode=dashmstdout
 fi
 
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+   # This is just like msvisualcpp but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u="sed s,\\\\\\\\,/,g"
+   depmode=msvisualcpp
+fi
+
 case "$depmode" in
 gcc3)
 ## gcc 3 implements dependency tracking that does exactly what
 ## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
 ## it if -MD -MP comes after the -MF stuff.  Hmm.
-  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
   stat=$?
   if test $stat -eq 0; then :
   else
@@ -178,14 +199,14 @@ sgi)
 ' < "$tmpdepfile" \
     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
     tr '
-' ' ' >> $depfile
-    echo >> $depfile
+' ' ' >> "$depfile"
+    echo >> "$depfile"
 
     # The second pass generates a dummy entry for each header file.
     tr ' ' '
 ' < "$tmpdepfile" \
    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-   >> $depfile
+   >> "$depfile"
   else
     # The sourcefile does not contain any dependencies, so just
     # store a dummy comment line, to avoid errors with the Makefile
@@ -201,34 +222,39 @@ aix)
   # current directory.  Also, the AIX compiler puts `$object:' at the
   # start of each line; $object doesn't have directory information.
   # Version 6 uses the directory in both cases.
-  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
-  tmpdepfile="$stripped.u"
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
   if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
     "$@" -Wc,-M
   else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
     "$@" -M
   fi
   stat=$?
 
-  if test -f "$tmpdepfile"; then :
-  else
-    stripped=`echo "$stripped" | sed 's,^.*/,,'`
-    tmpdepfile="$stripped.u"
-  fi
-
   if test $stat -eq 0; then :
   else
-    rm -f "$tmpdepfile"
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
     exit $stat
   fi
 
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
   if test -f "$tmpdepfile"; then
-    outname="$stripped.o"
     # Each line is of the form `foo.o: dependent.h'.
     # Do two passes, one to just change these to
     # `$object: dependent.h' and one to simply `dependent.h:'.
-    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
-    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+    # That's a tab and a space in the [].
+    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
   else
     # The sourcefile does not contain any dependencies, so just
     # store a dummy comment line, to avoid errors with the Makefile
@@ -276,6 +302,51 @@ icc)
   rm -f "$tmpdepfile"
   ;;
 
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${
+	       s/^ *//
+	       s/ \\*$//
+	       s/$/:/
+	       p
+	     }' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
 tru64)
    # The Tru64 compiler uses -MD to generate dependencies as a side
    # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
@@ -288,13 +359,13 @@ tru64)
 
    if test "$libtool" = yes; then
       # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mecanism is used in libtool 1.4 series to
+      # static library.  This mechanism is used in libtool 1.4 series to
       # handle both shared and static libraries in a single compilation.
       # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
       #
       # With libtool 1.5 this exception was removed, and libtool now
       # generates 2 separate objects for the 2 libraries.  These two
-      # compilations output dependencies in in $dir.libs/$base.o.d and
+      # compilations output dependencies in $dir.libs/$base.o.d and
       # in $dir$base.o.d.  We have to check for both files, because
       # one of the two compilations can be disabled.  We should prefer
       # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
@@ -345,7 +416,7 @@ dashmstdout)
 
   # Remove the call to Libtool.
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
@@ -396,32 +467,39 @@ makedepend)
   "$@" || exit $?
   # Remove any Libtool call
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
   fi
   # X makedepend
   shift
-  cleared=no
-  for arg in "$@"; do
+  cleared=no eat=no
+  for arg
+  do
     case $cleared in
     no)
       set ""; shift
       cleared=yes ;;
     esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
     case "$arg" in
     -D*|-I*)
       set fnord "$@" "$arg"; shift ;;
     # Strip any option that makedepend may not understand.  Remove
     # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
     -*|$object)
       ;;
     *)
       set fnord "$@" "$arg"; shift ;;
     esac
   done
-  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
   touch "$tmpdepfile"
   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
   rm -f "$depfile"
@@ -441,7 +519,7 @@ cpp)
 
   # Remove the call to Libtool.
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
@@ -479,13 +557,27 @@ cpp)
 
 msvisualcpp)
   # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout, regardless of -o,
-  # because we must use -o when running libtool.
+  # always write the preprocessed file to stdout.
   "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
   IFS=" "
   for arg
   do
     case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
 	set fnord "$@"
 	shift
@@ -498,16 +590,23 @@ msvisualcpp)
 	;;
     esac
   done
-  "$@" -E |
-  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
   echo "	" >> "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 none)
   exec "$@"
   ;;
@@ -526,5 +625,6 @@ exit 0
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/config/install-sh b/config/install-sh
index 4d4a951..6781b98 100755
--- a/config/install-sh
+++ b/config/install-sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2005-05-14.22
+scriptversion=2009-04-28.21; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -39,38 +39,68 @@ scriptversion=2005-05-14.22
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
-# from scratch.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
+# from scratch.
+
+nl='
+'
+IFS=" ""	$nl"
 
 # set DOITPROG to echo to test this script
 
 # Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
 
-# put in absolute paths if you don't have them in your path; or use env. vars.
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
 
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
 
-chmodcmd="$chmodprog 0755"
-chowncmd=
 chgrpcmd=
-stripcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
 rmcmd="$rmprog -f"
-mvcmd="$mvprog"
+stripcmd=
+
 src=
 dst=
 dir_arg=
-dstarg=
+dst_arg=
+
+copy_on_change=false
 no_target_directory=
 
-usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
    or: $0 [OPTION]... SRCFILES... DIRECTORY
    or: $0 [OPTION]... -t DIRECTORY SRCFILES...
    or: $0 [OPTION]... -d DIRECTORIES...
@@ -80,81 +110,86 @@ In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
 In the 4th, create DIRECTORIES.
 
 Options:
--c         (ignored)
--d         create directories instead of installing files.
--g GROUP   $chgrpprog installed files to GROUP.
--m MODE    $chmodprog installed files to MODE.
--o USER    $chownprog installed files to USER.
--s         $stripprog installed files.
--t DIRECTORY  install into DIRECTORY.
--T         report an error if DSTFILE is a directory.
---help     display this help and exit.
---version  display version info and exit.
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
 
 Environment variables override the default commands:
-  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
 "
 
-while test -n "$1"; do
+while test $# -ne 0; do
   case $1 in
-    -c) shift
-        continue;;
+    -c) ;;
+
+    -C) copy_on_change=true;;
 
-    -d) dir_arg=true
-        shift
-        continue;;
+    -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-        shift
-        shift
-        continue;;
+	shift;;
 
     --help) echo "$usage"; exit $?;;
 
-    -m) chmodcmd="$chmodprog $2"
-        shift
-        shift
-        continue;;
+    -m) mode=$2
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
 
     -o) chowncmd="$chownprog $2"
-        shift
-        shift
-        continue;;
+	shift;;
 
-    -s) stripcmd=$stripprog
-        shift
-        continue;;
+    -s) stripcmd=$stripprog;;
 
-    -t) dstarg=$2
-	shift
-	shift
-	continue;;
+    -t) dst_arg=$2
+	shift;;
 
-    -T) no_target_directory=true
-	shift
-	continue;;
+    -T) no_target_directory=true;;
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    *)  # When -d is used, all remaining arguments are directories to create.
-	# When -t is used, the destination is already specified.
-	test -n "$dir_arg$dstarg" && break
-        # Otherwise, the last argument is the destination.  Remove it from $@.
-	for arg
-	do
-          if test -n "$dstarg"; then
-	    # $@ is not empty: it contains at least $arg.
-	    set fnord "$@" "$dstarg"
-	    shift # fnord
-	  fi
-	  shift # arg
-	  dstarg=$arg
-	done
+    --)	shift
 	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
   esac
+  shift
 done
 
-if test -z "$1"; then
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+  done
+fi
+
+if test $# -eq 0; then
   if test -z "$dir_arg"; then
     echo "$0: no input file specified." >&2
     exit 1
@@ -164,24 +199,47 @@ if test -z "$1"; then
   exit 0
 fi
 
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
 for src
 do
   # Protect names starting with `-'.
   case $src in
-    -*) src=./$src ;;
+    -*) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
     dst=$src
-    src=
-
-    if test -d "$dst"; then
-      mkdircmd=:
-      chmodcmd=
-    else
-      mkdircmd=$mkdirprog
-    fi
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
   else
+
     # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
     # might cause directories to be created, which would be especially bad
     # if $src (and thus $dsttmp) contains '*'.
@@ -190,71 +248,199 @@ do
       exit 1
     fi
 
-    if test -z "$dstarg"; then
+    if test -z "$dst_arg"; then
       echo "$0: no destination specified." >&2
       exit 1
     fi
 
-    dst=$dstarg
+    dst=$dst_arg
     # Protect names starting with `-'.
     case $dst in
-      -*) dst=./$dst ;;
+      -*) dst=./$dst;;
     esac
 
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
     if test -d "$dst"; then
       if test -n "$no_target_directory"; then
-	echo "$0: $dstarg: Is a directory" >&2
+	echo "$0: $dst_arg: Is a directory" >&2
 	exit 1
       fi
-      dst=$dst/`basename "$src"`
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
     fi
   fi
 
-  # This sed command emulates the dirname command.
-  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
+
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
+
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writeable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
 
-  # Make sure that the destination directory exists.
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
 
-  # Skip lots of stat calls in the usual case.
-  if test ! -d "$dstdir"; then
-    defaultIFS='
-	 '
-    IFS="${IFS-$defaultIFS}"
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
 
-    oIFS=$IFS
-    # Some sh's can't handle IFS=/ for some reason.
-    IFS='%'
-    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
-    shift
-    IFS=$oIFS
+      case $dstdir in
+	/*) prefix='/';;
+	-*) prefix='./';;
+	*)  prefix='';;
+      esac
 
-    pathcomp=
+      eval "$initialize_posix_glob"
 
-    while test $# -ne 0 ; do
-      pathcomp=$pathcomp$1
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
       shift
-      if test ! -d "$pathcomp"; then
-        $mkdirprog "$pathcomp"
-	# mkdir can fail with a `File exist' error in case several
-	# install-sh are creating the directory concurrently.  This
-	# is OK.
-	test -d "$pathcomp" || exit
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test -z "$d" && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
       fi
-      pathcomp=$pathcomp/
-    done
+    fi
   fi
 
   if test -n "$dir_arg"; then
-    $doit $mkdircmd "$dst" \
-      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
-      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
   else
-    dstfile=`basename "$dst"`
 
     # Make a couple of temp file names in the proper directory.
     dsttmp=$dstdir/_inst.$$_
@@ -262,10 +448,9 @@ do
 
     # Trap to clean up those temp files at exit.
     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-    trap '(exit $?); exit' 1 2 13 15
 
     # Copy the file name to the temp name.
-    $doit $cpprog "$src" "$dsttmp" &&
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
 
     # and set any options; do chmod last to preserve setuid bits.
     #
@@ -273,51 +458,63 @@ do
     # ignore errors from any of these, just make sure not to ignore
     # errors from the above "$doit $cpprog $src $dsttmp" command.
     #
-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
-      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
-
-    # Now rename the file to the real destination.
-    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
-      || {
-	   # The rename failed, perhaps because mv can't rename something else
-	   # to itself, or perhaps because mv is so ancient that it does not
-	   # support -f.
-
-	   # Now remove or move aside any old file at destination location.
-	   # We try this two ways since rm can't unlink itself on some
-	   # systems and the destination file might be busy for other
-	   # reasons.  In this case, the final cleanup might fail but the new
-	   # file should still install successfully.
-	   {
-	     if test -f "$dstdir/$dstfile"; then
-	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
-	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
-	       || {
-		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
-		 (exit 1); exit 1
-	       }
-	     else
-	       :
-	     fi
-	   } &&
-
-	   # Now rename the file to the real destination.
-	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
-	 }
-    }
-  fi || { (exit 1); exit 1; }
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
+
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
 done
 
-# The final little trick to "correctly" pass the exit status to the exit trap.
-{
-  (exit 0); exit 0
-}
-
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/config/missing b/config/missing
index 894e786..28055d2 100755
--- a/config/missing
+++ b/config/missing
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
 
-scriptversion=2005-06-08.21
+scriptversion=2009-04-28.21; # UTC
 
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
-#   Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+# 2008, 2009 Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -18,9 +18,7 @@ scriptversion=2005-06-08.21
 # GNU General Public License for more details.
 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -33,6 +31,8 @@ if test $# -eq 0; then
 fi
 
 run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
 
 # In the cases where this matters, `missing' is being run in the
 # srcdir already.
@@ -44,7 +44,7 @@ fi
 
 msg="missing on your system"
 
-case "$1" in
+case $1 in
 --run)
   # Try to run requested program, and just exit if it succeeds.
   run=
@@ -77,6 +77,7 @@ Supported PROGRAM values:
   aclocal      touch file \`aclocal.m4'
   autoconf     touch file \`configure'
   autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
   automake     touch all \`Makefile.in' files
   bison        create \`y.tab.[ch]', if possible, from existing .[ch]
   flex         create \`lex.yy.c', if possible, from existing .c
@@ -86,6 +87,9 @@ Supported PROGRAM values:
   tar          try tar, gnutar, gtar, then tar without non-portable flags
   yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
 
+Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
+\`g' are ignored when checking the name.
+
 Send bug reports to <bug-automake at gnu.org>."
     exit $?
     ;;
@@ -103,15 +107,22 @@ Send bug reports to <bug-automake at gnu.org>."
 
 esac
 
+# normalize program name to check for.
+program=`echo "$1" | sed '
+  s/^gnu-//; t
+  s/^gnu//; t
+  s/^g//; t'`
+
 # Now exit if we have it, but it failed.  Also exit now if we
 # don't have it and --version was passed (most likely to detect
-# the program).
-case "$1" in
-  lex|yacc)
+# the program).  This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+  lex*|yacc*)
     # Not GNU programs, they don't have --version.
     ;;
 
-  tar)
+  tar*)
     if test -n "$run"; then
        echo 1>&2 "ERROR: \`tar' requires --run"
        exit 1
@@ -135,7 +146,7 @@ esac
 
 # If it does not exist, or fails to run (possibly an outdated version),
 # try to emulate it.
-case "$1" in
+case $program in
   aclocal*)
     echo 1>&2 "\
 WARNING: \`$1' is $msg.  You should only need it if
@@ -145,7 +156,7 @@ WARNING: \`$1' is $msg.  You should only need it if
     touch aclocal.m4
     ;;
 
-  autoconf)
+  autoconf*)
     echo 1>&2 "\
 WARNING: \`$1' is $msg.  You should only need it if
          you modified \`${configure_ac}'.  You might want to install the
@@ -154,7 +165,7 @@ WARNING: \`$1' is $msg.  You should only need it if
     touch configure
     ;;
 
-  autoheader)
+  autoheader*)
     echo 1>&2 "\
 WARNING: \`$1' is $msg.  You should only need it if
          you modified \`acconfig.h' or \`${configure_ac}'.  You might want
@@ -164,7 +175,7 @@ WARNING: \`$1' is $msg.  You should only need it if
     test -z "$files" && files="config.h"
     touch_files=
     for f in $files; do
-      case "$f" in
+      case $f in
       *:*) touch_files="$touch_files "`echo "$f" |
 				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
       *) touch_files="$touch_files $f.in";;
@@ -184,7 +195,7 @@ WARNING: \`$1' is $msg.  You should only need it if
 	   while read f; do touch "$f"; done
     ;;
 
-  autom4te)
+  autom4te*)
     echo 1>&2 "\
 WARNING: \`$1' is needed, but is $msg.
          You might have modified some files without having the
@@ -192,8 +203,8 @@ WARNING: \`$1' is needed, but is $msg.
          You can get \`$1' as part of \`Autoconf' from any GNU
          archive site."
 
-    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
-    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
     if test -f "$file"; then
 	touch $file
     else
@@ -207,80 +218,78 @@ WARNING: \`$1' is needed, but is $msg.
     fi
     ;;
 
-  bison|yacc)
+  bison*|yacc*)
     echo 1>&2 "\
 WARNING: \`$1' $msg.  You should only need it if
          you modified a \`.y' file.  You may need the \`Bison' package
          in order for those modifications to take effect.  You can get
          \`Bison' from any GNU archive site."
     rm -f y.tab.c y.tab.h
-    if [ $# -ne 1 ]; then
+    if test $# -ne 1; then
         eval LASTARG="\${$#}"
-	case "$LASTARG" in
+	case $LASTARG in
 	*.y)
 	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-	    if [ -f "$SRCFILE" ]; then
+	    if test -f "$SRCFILE"; then
 	         cp "$SRCFILE" y.tab.c
 	    fi
 	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-	    if [ -f "$SRCFILE" ]; then
+	    if test -f "$SRCFILE"; then
 	         cp "$SRCFILE" y.tab.h
 	    fi
 	  ;;
 	esac
     fi
-    if [ ! -f y.tab.h ]; then
+    if test ! -f y.tab.h; then
 	echo >y.tab.h
     fi
-    if [ ! -f y.tab.c ]; then
+    if test ! -f y.tab.c; then
 	echo 'main() { return 0; }' >y.tab.c
     fi
     ;;
 
-  lex|flex)
+  lex*|flex*)
     echo 1>&2 "\
 WARNING: \`$1' is $msg.  You should only need it if
          you modified a \`.l' file.  You may need the \`Flex' package
          in order for those modifications to take effect.  You can get
          \`Flex' from any GNU archive site."
     rm -f lex.yy.c
-    if [ $# -ne 1 ]; then
+    if test $# -ne 1; then
         eval LASTARG="\${$#}"
-	case "$LASTARG" in
+	case $LASTARG in
 	*.l)
 	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-	    if [ -f "$SRCFILE" ]; then
+	    if test -f "$SRCFILE"; then
 	         cp "$SRCFILE" lex.yy.c
 	    fi
 	  ;;
 	esac
     fi
-    if [ ! -f lex.yy.c ]; then
+    if test ! -f lex.yy.c; then
 	echo 'main() { return 0; }' >lex.yy.c
     fi
     ;;
 
-  help2man)
+  help2man*)
     echo 1>&2 "\
 WARNING: \`$1' is $msg.  You should only need it if
 	 you modified a dependency of a manual page.  You may need the
 	 \`Help2man' package in order for those modifications to take
 	 effect.  You can get \`Help2man' from any GNU archive site."
 
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
-    if test -z "$file"; then
-	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
-    fi
-    if [ -f "$file" ]; then
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
 	touch $file
     else
 	test -z "$file" || exec >$file
 	echo ".ab help2man is required to generate this page"
-	exit 1
+	exit $?
     fi
     ;;
 
-  makeinfo)
+  makeinfo*)
     echo 1>&2 "\
 WARNING: \`$1' is $msg.  You should only need it if
          you modified a \`.texi' or \`.texinfo' file, or any other file
@@ -289,11 +298,17 @@ WARNING: \`$1' is $msg.  You should only need it if
          DU, IRIX).  You might want to install the \`Texinfo' package or
          the \`GNU make' package.  Grab either from any GNU archive site."
     # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
     if test -z "$file"; then
       # ... or it is the one specified with @setfilename ...
       infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
+      file=`sed -n '
+	/^@setfilename/{
+	  s/.* \([^ ]*\) *$/\1/
+	  p
+	  q
+	}' $infile`
       # ... or it is derived from the source name (dir/f.texi becomes f.info)
       test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
     fi
@@ -303,7 +318,7 @@ WARNING: \`$1' is $msg.  You should only need it if
     touch $file
     ;;
 
-  tar)
+  tar*)
     shift
 
     # We have already tried tar in the generic part.
@@ -317,13 +332,13 @@ WARNING: \`$1' is $msg.  You should only need it if
     fi
     firstarg="$1"
     if shift; then
-	case "$firstarg" in
+	case $firstarg in
 	*o*)
 	    firstarg=`echo "$firstarg" | sed s/o//`
 	    tar "$firstarg" "$@" && exit 0
 	    ;;
 	esac
-	case "$firstarg" in
+	case $firstarg in
 	*h*)
 	    firstarg=`echo "$firstarg" | sed s/h//`
 	    tar "$firstarg" "$@" && exit 0
@@ -356,5 +371,6 @@ exit 0
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/config/ylwrap b/config/ylwrap
index 102bd89..84d5634 100755
--- a/config/ylwrap
+++ b/config/ylwrap
@@ -1,10 +1,10 @@
 #! /bin/sh
 # ylwrap - wrapper for lex/yacc invocations.
 
-scriptversion=2005-05-14.22
+scriptversion=2009-04-28.21; # UTC
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005
-#   Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
+# 2007, 2009 Free Software Foundation, Inc.
 #
 # Written by Tom Tromey <tromey at cygnus.com>.
 #
@@ -19,9 +19,7 @@ scriptversion=2005-05-14.22
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -101,14 +99,14 @@ esac
 # FIXME: add hostname here for parallel makes that run commands on
 # other machines.  But that might take us over the 14-char limit.
 dirname=ylwrap$$
-trap "cd `pwd`; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
+trap "cd '`pwd`'; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
 mkdir $dirname || exit 1
 
 cd $dirname
 
 case $# in
-  0) $prog "$input" ;;
-  *) $prog "$@" "$input" ;;
+  0) "$prog" "$input" ;;
+  *) "$prog" "$@" "$input" ;;
 esac
 ret=$?
 
@@ -219,5 +217,6 @@ exit $ret
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/configure b/configure
index 0a03537..ad8f4a3 100755
--- a/configure
+++ b/configure
@@ -809,10 +809,14 @@ METVIEW_SCM_AUX_FALSE
 METVIEW_SCM_AUX_TRUE
 METVIEW_INPE_FALSE
 METVIEW_INPE_TRUE
+METVIEW_ECREGRID_FALSE
+METVIEW_ECREGRID_TRUE
 METVIEW_EXPERIMENTAL_FALSE
 METVIEW_EXPERIMENTAL_TRUE
 METVIEW_EXTERNAL_FALSE
 METVIEW_EXTERNAL_TRUE
+METVIEW_NEW_GUI_FALSE
+METVIEW_NEW_GUI_TRUE
 METVIEW_GUI_FALSE
 METVIEW_GUI_TRUE
 METVIEW_OPERA_FALSE
@@ -858,6 +862,7 @@ ODB_LIBS
 ODB_LDFLAGS
 ODB_CPPFLAGS
 EMOS_LIB_NAME
+MAGPLUS_LIB_QT
 MAGPLUS_LIB
 MAGPLUS_LDFLAGS
 MAGPLUS_CPPFLAGS
@@ -870,11 +875,14 @@ METVIEW_DEBUG_FALSE
 METVIEW_DEBUG_TRUE
 MVSTARTDIR
 METVIEW_EXTRA_TITLE
+MARS_HOME
 MARS_ODB_ACCESS
 ODB1_USE_SCRIPT
 ODB1_VERSION
 ODB1_BIN
 ODB_LIBDIR
+METVIEW_ECREGRID
+ECREGRID_LIBS
 LDFLAGS_INLINE
 GRIBAPI_LIBS
 GRIB_API_LIB
@@ -900,11 +908,13 @@ UIC
 MOC
 QMAKE
 QT_PATH
+HAVE_CONVERT
 FFIXED_FLAGS
 FLIBS
 CPPLIBS
 AXX
 MV_ENVIRON
+HAVE_KSH
 PKGCONFIG_REQUIRES
 STARTUP_SCRIPT
 MVINCLUDE
@@ -1061,6 +1071,7 @@ enable_libtool_lock
 with_startup_script
 enable_32_bits_addressing_mode
 enable_experimental
+enable_new_ui
 enable_ui
 with_qt
 enable_qtdebug
@@ -1070,6 +1081,8 @@ with_netcdf
 with_emos_libraries
 with_emos_libname
 with_grib_api
+enable_ecregrid
+with_ecregrid
 enable_inpe
 enable_mars_odb
 enable_odb
@@ -1078,8 +1091,9 @@ with_odb1_bin
 with_odb1_version
 with_odb1_use_script
 enable_mars_access
+with_local_mars_home
 enable_marscatalog
-enable_mars_api
+enable_mars_web_access
 enable_obstat
 enable_opera_radar
 with_proj4
@@ -1748,15 +1762,17 @@ Optional Features:
   --enable-32-bits-addressing-mode
                           Force 32 bits addressing mode on 64 bits machines
   --enable-experimental             enable experimental component use only in developments [default=no]
+  --enable-new-ui	 enable the new graphics user interface [default=yes]
   --enable-ui	          enable the graphics user interface [default=yes]
   --enable-qtdebug        enable QDebug output in Qt-based modules [default=no]
   --enable-magics         enable the Magics++ library support [default=yes]
+  --enable-ecregrid	          enable the ecRegrid support (only at ECMWF) [default=no]
   --enable-inpe             enable the INPE support (only at INPE) [default=no]
   --enable-mars-odb	          enable the MARS ODB accesss [default=no]
   --enable-odb	          enable the ODB support [default=no]
   --enable-mars-access	          enable the MARS accesss (client-server) [default=no]
   --enable-marscatalog	          enable the MARS catalog support only at ECMWF) [default=no]
-  --enable-mars-api	          enable the MARS API (requires curl library) [default=yes]
+  --enable-mars-web-access	          enable the MARS web access (requires curl library) [default=yes]
   --enable-obstat	          enable the OBSTAT support (only at ECMWF) [default=no]
   --enable-opera-radar	          enable OPERA radar support (requires proj4) [default=yes]
   --enable-scm-aux-files       enable SCM auxillary files [default=no]
@@ -1779,10 +1795,12 @@ Optional Packages:
                           /usr/local/lib]
   --with-emos-libname     Name of EMOS library [default is emosR64]
   --with-grib-api         Prefix of GRIB API libraries and headers.
+  --with-ecregrid         Prefix of ecRegrid libraries and headers.
   --with-odb              Prefix of ODB libraries and headers.
   --with-odb1-bin         Path to the ODB-1 bin directory.
   --with-odb1-version     Required version of ODB-1 environment [default=ANY.]
   --with-odb1-use-script  Path to ODB-1 'use' script (normally 'use_odb.sh').
+  --with-local-mars-home  Local MARS home directory
   --with-proj4            Prefix of Proj4 libraries and headers.
   --with-flextra          FLEXTRA executable path.
   --with-scm              SCM executable path.
@@ -6541,13 +6559,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:6544: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:6562: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:6547: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:6565: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:6550: output\"" >&5)
+  (eval echo "\"\$as_me:6568: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -7752,7 +7770,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 7755 "configure"' > conftest.$ac_ext
+  echo '#line 7773 "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -9970,11 +9988,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9973: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:9991: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:9977: \$? = $ac_status" >&5
+   echo "$as_me:9995: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -10309,11 +10327,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:10312: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:10330: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:10316: \$? = $ac_status" >&5
+   echo "$as_me:10334: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -10414,11 +10432,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:10417: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:10435: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:10421: \$? = $ac_status" >&5
+   echo "$as_me:10439: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -10469,11 +10487,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:10472: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:10490: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:10476: \$? = $ac_status" >&5
+   echo "$as_me:10494: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -12836,7 +12854,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12839 "configure"
+#line 12857 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12932,7 +12950,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12935 "configure"
+#line 12953 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -14888,11 +14906,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14891: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:14909: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:14895: \$? = $ac_status" >&5
+   echo "$as_me:14913: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -14987,11 +15005,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14990: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:15008: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:14994: \$? = $ac_status" >&5
+   echo "$as_me:15012: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -15039,11 +15057,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:15042: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:15060: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:15046: \$? = $ac_status" >&5
+   echo "$as_me:15064: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -16419,11 +16437,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16422: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:16440: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:16426: \$? = $ac_status" >&5
+   echo "$as_me:16444: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -16518,11 +16536,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16521: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:16539: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:16525: \$? = $ac_status" >&5
+   echo "$as_me:16543: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -16570,11 +16588,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16573: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:16591: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:16577: \$? = $ac_status" >&5
+   echo "$as_me:16595: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -19011,11 +19029,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:19014: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:19032: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:19018: \$? = $ac_status" >&5
+   echo "$as_me:19036: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -19110,11 +19128,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:19113: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:19131: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:19117: \$? = $ac_status" >&5
+   echo "$as_me:19135: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -19162,11 +19180,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:19165: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:19183: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:19169: \$? = $ac_status" >&5
+   echo "$as_me:19187: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -21232,6 +21250,51 @@ esac
 
 
 
+# Extract the first word of "ksh", so it can be a program name with args.
+set dummy ksh; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_HAVE_KSH+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_KSH"; then
+  ac_cv_prog_HAVE_KSH="$HAVE_KSH" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_HAVE_KSH="true"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_HAVE_KSH" && ac_cv_prog_HAVE_KSH="false"
+fi
+fi
+HAVE_KSH=$ac_cv_prog_HAVE_KSH
+if test -n "$HAVE_KSH"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_KSH" >&5
+$as_echo "$HAVE_KSH" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+if test "x$HAVE_KSH" = "xfalse" ; then
+    as_fn_error "Could not find Korn Shell. Please ensure that ksh is installed." "$LINENO" 5
+fi
+
+
+
 ###########################################
 #
 # Architecture dependent Compiler options
@@ -21264,7 +21327,7 @@ case "${host}" in
                 QT_EXT="-64"  # used at ECMWF only
 				MV_ENVIRON="ecm_lnx64"
 				FDBLIB="-L/usr/local/lib/metaps/lib -lfdb"
-				X11LIB_DIR=" -L/usr/X11R6/${LIBNAME}"
+###				X11LIB_DIR=" -L/usr/X11R6/${LIBNAME}"
 				if test "x$enable_32_bits_addressing_mode" == xyes; then
 					echo " "
 					echo "You are on AMD 64 and building a 32 bit version of Metview."
@@ -21294,7 +21357,7 @@ case "${host}" in
 		METVIEW_DEFINES="-DLITTLE -DLITTLE_END -DH_INCLUDES_CC"
 
 		CPPFLAGS="$CPPFLAGS -I/usr/include/freetype2 -I/usr/include -I/usr/X11R6/include -I/usr/local/include"
-		LDFLAGS="$LDFLAGS -L/usr/local/${LIBNAME} -L/usr/${LIBNAME}"
+###		LDFLAGS="$LDFLAGS -L/usr/local/${LIBNAME} -L/usr/${LIBNAME}"
 		libdir=${prefix}/${LIBNAME}
 		;;
 	# IBM Server
@@ -21384,6 +21447,16 @@ if test "x$SITE_NAME" != 'xecmwf'; then
  MV_ENVIRON="common"
 fi
 
+# at ECMWF on Red Hat 6 (ecgb), libfdb is in a difference place
+
+if test "x$SITE_NAME" = 'xecmwf'; then
+    if test "x$OS_VERSION" = 'xrhel6'; then
+        FDBLIB="-L/usr/local/apps/fdb/current/lib -lfdb"
+    fi
+fi
+
+
+
 
 
 
@@ -21397,7 +21470,7 @@ fi
 #
 case "${CXX}" in
 	# GNU GCC
-	g++ )
+	g++* )
 		CFLAGS="$CFLAGS $AXX" # -std=c99 -ansi -fpermissive
 		CXXFLAGS="${CXXFLAGS} ${AXX} -fno-gnu-keywords -Wno-deprecated -Wno-write-strings" # -ansi -std=c++98
 		CPPLIBS="-lstdc++"
@@ -21505,7 +21578,7 @@ MAGICS_DEFINES=""
 MV_FLIBS=""
 
 case "${F77}" in
-	gfortran )
+	gfortran* )
 		MAGICS_DEFINES="${MAGICS_DEFINES} -DGFORTRAN"
 		FC_BITFLAGS="${AXX} -DGFORTRAN -fno-second-underscore -fpic -fdefault-real-8 -fcray-pointer"
 		FLIBS="${FLIBS} -lgfortran"
@@ -21601,6 +21674,22 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 #
 #########################################################################################
 
+
+# Check whether --enable-new_ui was given.
+if test "${enable_new_ui+set}" = set; then :
+  enableval=$enable_new_ui; new_ui=$enableval
+else
+  new_ui=yes
+fi
+
+
+if test "x$new_ui" = xyes ; then
+   $as_echo "#define METVIEW_NEW_GUI 1" >>confdefs.h
+
+fi
+
+
+
 # Check whether --enable-ui was given.
 if test "${enable_ui+set}" = set; then :
   enableval=$enable_ui; ui=$enableval
@@ -21654,6 +21743,53 @@ done
 		    ;;
     esac
 
+
+    # ImageMagick
+
+
+    # Extract the first word of "convert", so it can be a program name with args.
+set dummy convert; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_HAVE_CONVERT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_CONVERT"; then
+  ac_cv_prog_HAVE_CONVERT="$HAVE_CONVERT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_HAVE_CONVERT="true"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_HAVE_CONVERT" && ac_cv_prog_HAVE_CONVERT="false"
+fi
+fi
+HAVE_CONVERT=$ac_cv_prog_HAVE_CONVERT
+if test -n "$HAVE_CONVERT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_CONVERT" >&5
+$as_echo "$HAVE_CONVERT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+    if test "x$HAVE_CONVERT" = "xfalse" ; then
+        as_fn_error "Could not find the ImageMagick convert command" "$LINENO" 5
+    fi
+
     ######################################################################
     #
     #     Qt
@@ -21699,112 +21835,760 @@ done
 # without this exception; this exception also makes it possible to release a
 # modified version which carries forward this exception.
 
- # ------------- #
- # DOCUMENTATION #
- # ------------- #
+ # ------------- #
+ # DOCUMENTATION #
+ # ------------- #
+
+# Disclaimer: Never tested with anything else than Qt 4.2! Feedback welcome.
+# Simply invoke AT_WITH_QT in your configure.ac. AT_WITH_QT can take
+# arguments which are documented in depth below. The default arguments are
+# equivalent to the default .pro file generated by qmake.
+#
+# Invoking AT_WITH_QT will do the following:
+#  - Add a --with-qt option to your configure
+#  - Find qmake, moc and uic and save them in the make variables $(QMAKE),
+#    $(MOC), $(UIC).
+#  - Save the path to Qt in $(QT_PATH)
+#  - Find the flags to use Qt, that is:
+#     * $(QT_DEFINES): -D's defined by qmake.
+#     * $(QT_CFLAGS): CFLAGS as defined by qmake (C?!)
+#     * $(QT_CXXFLAGS): CXXFLAGS as defined by qmake.
+#     * $(QT_INCPATH): -I's defined by qmake.
+#     * $(QT_CPPFLAGS): Same as $(QT_DEFINES) + $(QT_INCPATH)
+#     * $(QT_LFLAGS): LFLAGS defined by qmake.
+#     * $(QT_LDFLAGS): Same thing as $(QT_LFLAGS).
+#     * $(QT_LIBS): LIBS defined by qmake.
+#
+# You *MUST* invoke $(MOC) and/or $(UIC) where necessary. AutoTroll provides
+# you with Makerules to ease this, here is a sample Makefile.am to use with
+# AutoTroll which builds the code given in the chapter 7 of the Qt Tutorial:
+# http://doc.trolltech.com/4.2/tutorial-t7.html
+#
+# -------------------------------------------------------------------------
+# include $(top_srcdir)/build-aux/autotroll.mk
+#
+# ACLOCAL_AMFLAGS = -I build-aux
+#
+# bin_PROGRAMS = lcdrange
+# lcdrange_SOURCES =  $(BUILT_SOURCES) lcdrange.cpp lcdrange.h main.cpp
+# lcdrange_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS)
+# lcdrange_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS)
+# lcdrange_LDFLAGS  = $(QT_LDFLAGS) $(LDFLAGS)
+# lcdrange_LDADD    = $(QT_LIBS) $(LDADD)
+#
+# BUILT_SOURCES = lcdrange.moc.cpp
+# -------------------------------------------------------------------------
+#
+# Note that your MOC, UIC and QRC files *MUST* be listed manually in
+# BUILT_SOURCES. If you name them properly (eg: .moc.cc, .qrc.cc, .ui.cc -- of
+# course you can use .cpp or .cxx or .C rather than .cc) AutoTroll will build
+# them automagically for you (using implicit rules defined in autotroll.mk).
+
+
+
+
+
+
+
+# AT_WITH_QT([QT_modules], [QT_config], [QT_misc], [RUN-IF-FAILED], [RUN-IF-OK])
+# ------------------------------------------------------------------------------
+# Enable Qt support and add an option --with-qt to the configure script.
+#
+# The QT_modules argument is optional and defines extra modules to enable or
+# disable (it's equivalent to the QT variable in .pro files). Modules can be
+# specified as follows:
+#
+# AT_WITH_QT   => No argument -> No QT value.
+#                                Qmake sets it to "core gui" by default.
+# AT_WITH_QT([xml])   => QT += xml
+# AT_WITH_QT([+xml])  => QT += xml
+# AT_WITH_QT([-gui])  => QT -= gui
+# AT_WITH_QT([xml -gui +sql svg])  => QT += xml sql svg
+#                                     QT -= gui
+#
+# The QT_config argument is also optional and follows the same convention as
+# QT_modules. Instead of changing the QT variable, it changes the CONFIG
+# variable, which is used to tweak configuration and compiler options.
+#
+# The last argument, QT_misc (also optional) will be copied as-is the .pro
+# file used to guess how to compile Qt apps. You may use it to further tweak
+# the build process of Qt apps if tweaking the QT or CONFIG variables isn't
+# enough for you.
+#
+# RUN-IF-FAILED is arbitrary code to execute if Qt cannot be found or if any
+# problem happens.  If this argument is omitted, then AC_MSG_ERROR will be
+# called.  RUN-IF-OK is arbitrary code to execute if Qt was successfully found.
+
+
+# AT_REQUIRE_QT_VERSION(QT_version, RUN-IF-FAILED, RUN-IF-OK)
+# -----------------------------------------------------------
+# Check (using qmake) that Qt's version "matches" QT_version.
+# Must be run AFTER AT_WITH_QT. Requires autoconf 2.60.
+#
+# RUN-IF-FAILED is arbitrary code to execute if Qt cannot be found or if any
+# problem happens.  If this argument is omitted, then AC_MSG_ERROR will be
+# called.  RUN-IF-OK is arbitrary code to execute if Qt was successfully found.
+
+
+# _AT_TWEAK_PRO_FILE(QT_VAR, VALUE)
+# ---------------------------
+# @internal. Tweak the variable QT_VAR in the .pro.
+# VALUE is an IFS-separated list of value and each value is rewritten
+# as follows:
+#   +value  => QT_VAR += value
+#   -value  => QT_VAR -= value
+#    value  => QT_VAR += value
+
+
+
+    if test "x$new_ui" = "xyes" ; then
+        echo "$as_me: this is autotroll.m4 serial 4" >&5
+
+  test x"$TROLL" != x && echo 'ViM rox emacs.'
+
+
+# Check whether --with-qt was given.
+if test "${with_qt+set}" = set; then :
+  withval=$with_qt; QT_PATH=$withval
+fi
+
+
+  # this is a hack to get decent flow control with 'break'
+  for _qt_ignored in once; do
+
+  # Find Qt.
+
+  if test -d /usr/local/Trolltech; then
+    # Try to find the latest version.
+    tmp_qt_paths=`echo /usr/local/Trolltech/*/bin | tr ' ' '\n' | sort -nr \
+                                              | xargs | sed 's/  */:/g'`
+  fi
+  # Path to which recent MacPorts (~v1.7) install Qt4.
+  test -d /opt/local/libexec/qt4-mac/bin \
+    && tmp_qt_paths="$tmp_qt_paths:/opt/local/libexec/qt4-mac/bin"
+
+  # Find qmake.
+
+  for ac_prog in qmake qmake-qt4 qmake-qt3
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_QMAKE+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $QMAKE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_QMAKE="$QMAKE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$QT_DIR:$QT_PATH:$PATH:$tmp_qt_paths"
+for as_dir in $as_dummy
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_QMAKE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+QMAKE=$ac_cv_path_QMAKE
+if test -n "$QMAKE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QMAKE" >&5
+$as_echo "$QMAKE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$QMAKE" && break
+done
+test -n "$QMAKE" || QMAKE="missing"
+
+  if test x"$QMAKE" = xmissing; then
+    as_fn_error "Cannot find qmake in your PATH. Try using --with-qt." "$LINENO" 5
+    break
+  fi
+
+  # Find moc (Meta Object Compiler).
+
+  for ac_prog in moc moc-qt4 moc-qt3
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MOC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MOC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_MOC="$MOC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$QT_PATH:$PATH:$tmp_qt_paths"
+for as_dir in $as_dummy
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_MOC="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+MOC=$ac_cv_path_MOC
+if test -n "$MOC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOC" >&5
+$as_echo "$MOC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$MOC" && break
+done
+test -n "$MOC" || MOC="missing"
+
+  if test x"$MOC" = xmissing; then
+    as_fn_error "Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
+    break
+  fi
+
+  # Find uic (User Interface Compiler).
+
+  for ac_prog in uic uic-qt4 uic-qt3 uic3
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_UIC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $UIC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_UIC="$UIC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$QT_PATH:$PATH:$tmp_qt_paths"
+for as_dir in $as_dummy
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_UIC="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+UIC=$ac_cv_path_UIC
+if test -n "$UIC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UIC" >&5
+$as_echo "$UIC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$UIC" && break
+done
+test -n "$UIC" || UIC="missing"
+
+  if test x"$UIC" = xmissing; then
+    as_fn_error "Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
+    break
+  fi
+
+  # Find rcc (Qt Resource Compiler).
+
+  for ac_prog in rcc
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_RCC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $RCC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_RCC="$RCC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$QT_PATH:$PATH:$tmp_qt_paths"
+for as_dir in $as_dummy
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_RCC="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+RCC=$ac_cv_path_RCC
+if test -n "$RCC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RCC" >&5
+$as_echo "$RCC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$RCC" && break
+done
+test -n "$RCC" || RCC="false"
+
+  if test x"$UIC" = xfalse; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH.\
+  Try using --with-qt." >&5
+$as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH.\
+  Try using --with-qt." >&2;}
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host operating system is Darwin" >&5
+$as_echo_n "checking whether host operating system is Darwin... " >&6; }
+  at_darwin=no
+  at_qmake_args=
+  case $host_os in
+    darwin*)
+      at_darwin=yes
+      at_qmake_args='-spec macx-g++'
+      ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_darwin" >&5
+$as_echo "$at_darwin" >&6; }
+
+  # If we don't know the path to Qt, guess it from the path to qmake.
+  if test x"$QT_PATH" = x; then
+    QT_PATH=`dirname "$QMAKE"`
+  fi
+  if test x"$QT_PATH" = x; then
+    as_fn_error "Cannot find the path to your Qt install. Use --with-qt." "$LINENO" 5
+    break
+  fi
+
+
+  # Get ready to build a test-app with Qt.
+  if mkdir conftest.dir && cd conftest.dir; then :; else
+    as_fn_error "Cannot mkdir conftest.dir or cd to that directory." "$LINENO" 5
+    break
+  fi
+
+  cat >conftest.h <<_ASEOF
+#include <QObject>
+
+class Foo: public QObject
+{
+  Q_OBJECT;
+public:
+  Foo();
+  ~Foo() {}
+public Q_SLOTS:
+  void setValue(int value);
+Q_SIGNALS:
+  void valueChanged(int newValue);
+private:
+  int value_;
+};
+_ASEOF
+
+  cat >conftest.cpp <<_ASEOF
+#include "conftest.h"
+Foo::Foo()
+  : value_ (42)
+{
+  connect(this, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)));
+}
+
+void Foo::setValue(int value)
+{
+  value_ = value;
+}
+
+int main()
+{
+  Foo f;
+}
+_ASEOF
+  if $QMAKE -project; then :; else
+    as_fn_error "Calling $QMAKE -project failed." "$LINENO" 5
+    break
+  fi
+
+  # Find the .pro file generated by qmake.
+  pro_file='conftest.dir.pro'
+  test -f $pro_file || pro_file=`echo *.pro`
+  if test -f "$pro_file"; then :; else
+    as_fn_error "Can't find the .pro file generated by Qmake." "$LINENO" 5
+    break
+  fi
+
+ # Tweak the value of QT in the .pro file for +xmlpatterns +xml +network +webkit.
+
+  qt_conf=''
+  for at_mod in +xmlpatterns +xml +network +webkit; do
+    at_mod=`echo "$at_mod" | sed 's/^-//; tough
+                                  s/^+//; beef
+                                  :ough
+                                  s/^/QT -= /;n
+                                  :eef
+                                  s/^/QT += /'`
+    qt_conf="$qt_conf
+$at_mod"
+  done
+  echo "$qt_conf" | sed 1d >>"$pro_file"
+
+
+ # Tweak the value of CONFIG in the .pro file for +help.
+
+  qt_conf=''
+  for at_mod in +help; do
+    at_mod=`echo "$at_mod" | sed 's/^-//; tough
+                                  s/^+//; beef
+                                  :ough
+                                  s/^/CONFIG -= /;n
+                                  :eef
+                                  s/^/CONFIG += /'`
+    qt_conf="$qt_conf
+$at_mod"
+  done
+  echo "$qt_conf" | sed 1d >>"$pro_file"
+
+
+
+
+  echo "$as_me:$LINENO: Invoking $QMAKE on $pro_file" >&5
+  sed 's/^/| /' "$pro_file" >&5
+
+  if $QMAKE $at_qmake_args; then :; else
+    as_fn_error "Calling $QMAKE $at_qmake_args failed." "$LINENO" 5
+    break
+  fi
+
+  # QMake has a very annoying misfeature: sometimes it generates Makefiles
+  # where all the references to the files from the Qt installation are
+  # relative.  We can't use them as-is because if we take, say, a
+  # -I../../usr/include/Qt from that Makefile, the flag is invalid as soon
+  # as we use it in another (sub) directory.  So what this perl pass does is
+  # that it rewrite all relative paths to absolute paths.  Another problem
+  # when building on Cygwin is that QMake mixes paths with blackslashes and
+  # forward slashes and paths must be handled with extra care because of the
+  # stupid Windows drive letters.
+  echo "$as_me:$LINENO: fixing the Makefiles:" Makefile* >&5
+  cat >fixmk.pl <<\EOF
+use strict;
+use Cwd qw(cwd abs_path);
+# This variable is useful on Cygwin for the following reason: Say that you are
+# in `/' (that is, in fact you are in C:/cygwin, or something like that) if you
+# `cd ..' then obviously you remain in `/' (that is in C:/cygwin).  QMake
+# generates paths that are relative to C:/ (or another driver letter, whatever)
+# so the trick to get the `..' resolved properly is to prepend the absolute
+# path of the current working directory in a Windows-style.  C:/cygwin/../ will
+# properly become C:/.
+my $d = "";
+my $r2a = 0;
+my $b2f = 0;
+
+my $cygwin = 0;
+if ($^O eq "cygwin") {
+  $cygwin = 1;
+  $d = cwd();
+  $d = `cygpath --mixed '$d'`;
+  chomp($d);
+  $d .= "/";
+}
+
+sub rel2abs($)
+{
+  my $p = $d . shift;
+  # print "r2a p=$p";
+  -e $p || return $p;
+  if ($cygwin) {
+    $p = `cygpath --mixed '$p'`;
+    chomp($p);
+  }
+  else {
+    # Do not use abs_path on Cygwin: it incorrectly resolves the paths that are
+    # relative to C:/ rather than `/'.
+    $p = abs_path($p);
+  }
+  # print " -> $p\n";
+  ++$r2a;
+  return $p;
+}
+
+# Only useful on Cygwin.
+sub back2forward($)
+{
+  my $p = shift;
+  # print "b2f p=$p";
+  -e $p || return $p;
+  $p = `cygpath --mixed '$p'`;
+  chomp($p);
+  # print " -> $p\n";
+  ++$b2f;
+  return $p;
+}
+
+foreach my $mk (@ARGV)
+{
+  next if $mk =~ /~$/;
+  open(MK, $mk) or die("open $mk: $!");
+  # print "mk=$mk\n";
+  my $file = join("", <MK>);
+  close(MK) or die("close $mk: $!");
+  rename $mk, $mk . "~" or die("rename $mk: $!");
+  $file =~ s{(?:\.\.[\\/])+(?:[^"'\s:]+)}{rel2abs($&)}gse;
+  $file =~ s{(?:[a-zA-Z]:[\\/])?(?:[^"\s]+\\[^"\s:]+)+}
+            {back2forward($&)}gse if $cygwin;
+  open(MK, ">", $mk) or die("open >$mk: $!");
+  print MK $file;
+  close(MK) or die("close >$mk: $!");
+  print "$mk: updated $r2a relative paths and $b2f backslash-style paths\n";
+  $r2a = 0;
+  $b2f = 0;
+}
+EOF
+
+  perl >&5 -w fixmk.pl Makefile* ||
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: failed to fix the Makefiles generated by $QMAKE" >&5
+$as_echo "$as_me: WARNING: failed to fix the Makefiles generated by $QMAKE" >&2;}
+  rm -f fixmk.pl
+
+  # Try to compile a simple Qt app.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can build a simple Qt app" >&5
+$as_echo_n "checking whether we can build a simple Qt app... " >&6; }
+if test "${at_cv_qt_build+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  at_cv_qt_build=ko
+  : ${MAKE=make}
+
+  if $MAKE >&5 2>&1; then
+    at_cv_qt_build='ok, looks like Qt 4'
+  else
+    echo "$as_me:$LINENO: Build failed, trying to #include <qobject.h> \
+instead" >&5
+    sed 's/<QObject>/<qobject.h>/' conftest.h > tmp.h && mv tmp.h conftest.h
+    if $MAKE >&5 2>&1; then
+      at_cv_qt_build='ok, looks like Qt 3'
+    else
+      # Sometimes (such as on Debian) build will fail because Qt hasn't been
+      # installed in debug mode and qmake tries (by default) to build apps in
+      # debug mode => Try again in release mode.
+      echo "$as_me:$LINENO: Build failed, trying to enforce release mode" \
+            >&5
+
+       # Tweak the value of CONFIG in the .pro file for +release.
+
+  qt_conf=''
+  for at_mod in +release; do
+    at_mod=`echo "$at_mod" | sed 's/^-//; tough
+                                  s/^+//; beef
+                                  :ough
+                                  s/^/CONFIG -= /;n
+                                  :eef
+                                  s/^/CONFIG += /'`
+    qt_conf="$qt_conf
+$at_mod"
+  done
+  echo "$qt_conf" | sed 1d >>"$pro_file"
+
+
+      sed 's/<qobject.h>/<QObject>/' conftest.h > tmp.h && mv tmp.h conftest.h
+      if $MAKE >&5 2>&1; then
+        at_cv_qt_build='ok, looks like Qt 4, release mode forced'
+      else
+        echo "$as_me:$LINENO: Build failed, trying to #include <qobject.h> \
+instead" >&5
+        sed 's/<QObject>/<qobject.h>/' conftest.h >tmp.h && mv tmp.h conftest.h
+        if $MAKE >&5 2>&1; then
+          at_cv_qt_build='ok, looks like Qt 3, release mode forced'
+        else
+          at_cv_qt_build=ko
+          echo "$as_me:$LINENO: failed program was:" >&5
+          sed 's/^/| /' conftest.h >&5
+          echo "$as_me:$LINENO: failed program was:" >&5
+          sed 's/^/| /' conftest.cpp >&5
+        fi # if make with Qt3-style #include and release mode forced.
+      fi # if make with Qt4-style #include and release mode forced.
+    fi # if make with Qt3-style #include.
+  fi # if make with Qt4-style #include.
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_qt_build" >&5
+$as_echo "$at_cv_qt_build" >&6; }
+  if test x"$at_cv_qt_build" = xko; then
+    as_fn_error "Cannot build a test Qt program" "$LINENO" 5
+    break
+  fi
+  QT_VERSION_MAJOR=`echo "$at_cv_qt_build" | sed 's/[^0-9]*//g'`
+
+
+  # This sed filter is applied after an expression of the form: /^FOO.*=/!d;
+  # It starts by removing the beginning of the line, removing references to
+  # SUBLIBS, removing unnecessary whitespaces at the beginning, and prefixes
+  # all variable uses by QT_.
+  qt_sed_filter='s///;
+                 s/$(SUBLIBS)//g;
+                 s/^ *//;
+                 s/\$(\([A-Z_][A-Z_]*\))/$(QT_\1)/g'
+
+  # Find the Makefile (qmake happens to generate a fake Makefile which invokes
+  # a Makefile.Debug or Makefile.Release). We we have both, we'll pick the
+  # Makefile.Release. The reason is that the main difference is that release
+  # uses -Os and debug -g. We can override -Os by passing another -O but we
+  # usually don't override -g.
+  if test -f Makefile.Release; then
+    at_mfile='Makefile.Release'
+  else
+    at_mfile='Makefile'
+  fi
+  if test -f $at_mfile; then :; else
+    as_fn_error "Cannot find the Makefile generated by qmake." "$LINENO" 5
+    break
+  fi
+
+  # Find the DEFINES of Qt (should have been named CPPFLAGS).
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the DEFINES to use with Qt" >&5
+$as_echo_n "checking for the DEFINES to use with Qt... " >&6; }
+if test "${at_cv_env_QT_DEFINES+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  at_cv_env_QT_DEFINES=`sed "/^DEFINES[^A-Z=]*=/!d;$qt_sed_filter" $at_mfile`
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_DEFINES" >&5
+$as_echo "$at_cv_env_QT_DEFINES" >&6; }
+  QT_DEFINES=$at_cv_env_QT_DEFINES
+
+
+  # Find the CFLAGS of Qt (We can use Qt in C?!)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the CFLAGS to use with Qt" >&5
+$as_echo_n "checking for the CFLAGS to use with Qt... " >&6; }
+if test "${at_cv_env_QT_CFLAGS+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  at_cv_env_QT_CFLAGS=`sed "/^CFLAGS[^A-Z=]*=/!d;$qt_sed_filter" $at_mfile`
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_CFLAGS" >&5
+$as_echo "$at_cv_env_QT_CFLAGS" >&6; }
+  QT_CFLAGS=$at_cv_env_QT_CFLAGS
+
 
-# Disclaimer: Never tested with anything else than Qt 4.2! Feedback welcome.
-# Simply invoke AT_WITH_QT in your configure.ac. AT_WITH_QT can take
-# arguments which are documented in depth below. The default arguments are
-# equivalent to the default .pro file generated by qmake.
-#
-# Invoking AT_WITH_QT will do the following:
-#  - Add a --with-qt option to your configure
-#  - Find qmake, moc and uic and save them in the make variables $(QMAKE),
-#    $(MOC), $(UIC).
-#  - Save the path to Qt in $(QT_PATH)
-#  - Find the flags to use Qt, that is:
-#     * $(QT_DEFINES): -D's defined by qmake.
-#     * $(QT_CFLAGS): CFLAGS as defined by qmake (C?!)
-#     * $(QT_CXXFLAGS): CXXFLAGS as defined by qmake.
-#     * $(QT_INCPATH): -I's defined by qmake.
-#     * $(QT_CPPFLAGS): Same as $(QT_DEFINES) + $(QT_INCPATH)
-#     * $(QT_LFLAGS): LFLAGS defined by qmake.
-#     * $(QT_LDFLAGS): Same thing as $(QT_LFLAGS).
-#     * $(QT_LIBS): LIBS defined by qmake.
-#
-# You *MUST* invoke $(MOC) and/or $(UIC) where necessary. AutoTroll provides
-# you with Makerules to ease this, here is a sample Makefile.am to use with
-# AutoTroll which builds the code given in the chapter 7 of the Qt Tutorial:
-# http://doc.trolltech.com/4.2/tutorial-t7.html
-#
-# -------------------------------------------------------------------------
-# include $(top_srcdir)/build-aux/autotroll.mk
-#
-# ACLOCAL_AMFLAGS = -I build-aux
-#
-# bin_PROGRAMS = lcdrange
-# lcdrange_SOURCES =  $(BUILT_SOURCES) lcdrange.cpp lcdrange.h main.cpp
-# lcdrange_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS)
-# lcdrange_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS)
-# lcdrange_LDFLAGS  = $(QT_LDFLAGS) $(LDFLAGS)
-# lcdrange_LDADD    = $(QT_LIBS) $(LDADD)
-#
-# BUILT_SOURCES = lcdrange.moc.cpp
-# -------------------------------------------------------------------------
-#
-# Note that your MOC, UIC and QRC files *MUST* be listed manually in
-# BUILT_SOURCES. If you name them properly (eg: .moc.cc, .qrc.cc, .ui.cc -- of
-# course you can use .cpp or .cxx or .C rather than .cc) AutoTroll will build
-# them automagically for you (using implicit rules defined in autotroll.mk).
+  # Find the CXXFLAGS of Qt.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the CXXFLAGS to use with Qt" >&5
+$as_echo_n "checking for the CXXFLAGS to use with Qt... " >&6; }
+if test "${at_cv_env_QT_CXXFLAGS+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  at_cv_env_QT_CXXFLAGS=`sed "/^CXXFLAGS[^A-Z=]*=/!d;$qt_sed_filter" $at_mfile`
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_CXXFLAGS" >&5
+$as_echo "$at_cv_env_QT_CXXFLAGS" >&6; }
+  QT_CXXFLAGS=$at_cv_env_QT_CXXFLAGS
 
 
+  # Find the INCPATH of Qt.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the INCPATH to use with Qt" >&5
+$as_echo_n "checking for the INCPATH to use with Qt... " >&6; }
+if test "${at_cv_env_QT_INCPATH+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  at_cv_env_QT_INCPATH=`sed "/^INCPATH[^A-Z=]*=/!d;$qt_sed_filter" $at_mfile`
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_INCPATH" >&5
+$as_echo "$at_cv_env_QT_INCPATH" >&6; }
+  QT_INCPATH=$at_cv_env_QT_INCPATH
 
 
+  QT_CPPFLAGS="$at_cv_env_QT_DEFINES $at_cv_env_QT_INCPATH"
 
 
+  # Find the LFLAGS of Qt (Should have been named LDFLAGS)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the LDFLAGS to use with Qt" >&5
+$as_echo_n "checking for the LDFLAGS to use with Qt... " >&6; }
+if test "${at_cv_env_QT_LDFLAGS+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  at_cv_env_QT_LDFLAGS=`sed "/^LFLAGS[^A-Z=]*=/!d;$qt_sed_filter" $at_mfile`
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_LDFLAGS" >&5
+$as_echo "$at_cv_env_QT_LDFLAGS" >&6; }
+  QT_LFLAGS=$at_cv_env_QT_LDFLAGS
 
-# AT_WITH_QT([QT_modules], [QT_config], [QT_misc], [RUN-IF-FAILED], [RUN-IF-OK])
-# ------------------------------------------------------------------------------
-# Enable Qt support and add an option --with-qt to the configure script.
-#
-# The QT_modules argument is optional and defines extra modules to enable or
-# disable (it's equivalent to the QT variable in .pro files). Modules can be
-# specified as follows:
-#
-# AT_WITH_QT   => No argument -> No QT value.
-#                                Qmake sets it to "core gui" by default.
-# AT_WITH_QT([xml])   => QT += xml
-# AT_WITH_QT([+xml])  => QT += xml
-# AT_WITH_QT([-gui])  => QT -= gui
-# AT_WITH_QT([xml -gui +sql svg])  => QT += xml sql svg
-#                                     QT -= gui
-#
-# The QT_config argument is also optional and follows the same convention as
-# QT_modules. Instead of changing the QT variable, it changes the CONFIG
-# variable, which is used to tweak configuration and compiler options.
-#
-# The last argument, QT_misc (also optional) will be copied as-is the .pro
-# file used to guess how to compile Qt apps. You may use it to further tweak
-# the build process of Qt apps if tweaking the QT or CONFIG variables isn't
-# enough for you.
-#
-# RUN-IF-FAILED is arbitrary code to execute if Qt cannot be found or if any
-# problem happens.  If this argument is omitted, then AC_MSG_ERROR will be
-# called.  RUN-IF-OK is arbitrary code to execute if Qt was successfully found.
+  QT_LDFLAGS=$at_cv_env_QT_LDFLAGS
 
 
-# AT_REQUIRE_QT_VERSION(QT_version, RUN-IF-FAILED, RUN-IF-OK)
-# -----------------------------------------------------------
-# Check (using qmake) that Qt's version "matches" QT_version.
-# Must be run AFTER AT_WITH_QT. Requires autoconf 2.60.
-#
-# RUN-IF-FAILED is arbitrary code to execute if Qt cannot be found or if any
-# problem happens.  If this argument is omitted, then AC_MSG_ERROR will be
-# called.  RUN-IF-OK is arbitrary code to execute if Qt was successfully found.
+  # Find the LIBS of Qt.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the LIBS to use with Qt" >&5
+$as_echo_n "checking for the LIBS to use with Qt... " >&6; }
+if test "${at_cv_env_QT_LIBS+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  at_cv_env_QT_LIBS=`sed "/^LIBS[^A-Z]*=/!d;$qt_sed_filter" $at_mfile`
+   if test x$at_darwin = xyes; then
+     # Fix QT_LIBS: as of today Libtool (GNU Libtool 1.5.23a) doesn't handle
+     # -F properly. The "bug" has been fixed on 22 October 2006
+     # by Peter O'Gorman but we provide backward compatibility here.
+     at_cv_env_QT_LIBS=`echo "$at_cv_env_QT_LIBS" \
+                             | sed 's/^-F/-Wl,-F/;s/ -F/ -Wl,-F/g'`
+   fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_LIBS" >&5
+$as_echo "$at_cv_env_QT_LIBS" >&6; }
+  QT_LIBS=$at_cv_env_QT_LIBS
 
 
-# _AT_TWEAK_PRO_FILE(QT_VAR, VALUE)
-# ---------------------------
-# @internal. Tweak the variable QT_VAR in the .pro.
-# VALUE is an IFS-separated list of value and each value is rewritten
-# as follows:
-#   +value  => QT_VAR += value
-#   -value  => QT_VAR -= value
-#    value  => QT_VAR += value
+  cd .. && rm -rf conftest.dir
+
+  # Run the user code
+
 
+  done  # end hack (useless for to be able to use break)
 
-    echo "$as_me: this is autotroll.m4 serial 4" >&5
+    else
+        echo "$as_me: this is autotroll.m4 serial 4" >&5
 
   test x"$TROLL" != x && echo 'ViM rox emacs.'
 
@@ -22141,6 +22925,20 @@ $at_mod"
   echo "$qt_conf" | sed 1d >>"$pro_file"
 
 
+ # Tweak the value of CONFIG in the .pro file for +help.
+
+  qt_conf=''
+  for at_mod in +help; do
+    at_mod=`echo "$at_mod" | sed 's/^-//; tough
+                                  s/^+//; beef
+                                  :ough
+                                  s/^/CONFIG -= /;n
+                                  :eef
+                                  s/^/CONFIG += /'`
+    qt_conf="$qt_conf
+$at_mod"
+  done
+  echo "$qt_conf" | sed 1d >>"$pro_file"
 
 
 
@@ -22435,6 +23233,8 @@ $as_echo "$at_cv_env_QT_LIBS" >&6; }
 
   done  # end hack (useless for to be able to use break)
 
+    fi
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt" >&5
 $as_echo_n "checking for Qt... " >&6; }
 
@@ -22521,7 +23321,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
     $as_echo "#define METVIEW_QT 1" >>confdefs.h
 
     CXXFLAGS="${CXXFLAGS} -DMETVIEW_QT"
-    MAGPLUS_LIB="-lMagPlusQt ${MAGPLUS_LIB}"
+    MAGPLUS_LIB_QT="-lMagPlusQt"
     echo "set"
 
     # remove any optmisation flags that we get from Qt - we want to control our own
@@ -22566,6 +23366,7 @@ fi
 else
     ui=no
     qt=no
+    new_ui=no
     echo "                         ***"
     echo "Building batch version with no graphical user interface."
     echo "                         ***"
@@ -22827,11 +23628,12 @@ $as_echo "yes" >&6; }
 
 
     MAGPLUSLIB_APPEND=${MAGPLUS_LIB}  # to add to the end, later
-    CPPFLAGS="$MAGICS_CFLAGS $CPPFLAGS"
+
+    #CPPFLAGS="$MAGICS_CFLAGS $CPPFLAGS"
 
     MAGPLUS_CPPFLAGS="-I${with_magics_home}/include/magics ${MAGPLUS_CPPFLAGS}"
     MAGPLUS_LDFLAGS="-L${MAGPLUS_LIBDIR} ${MAGPLUS_LDFLAGS}"
-    MAGPLUS_LIB="-L${MAGPLUS_LIBDIR} -lMagWrapper -lMagPlus -lexpat -lz -lm -lfontconfig"
+    MAGPLUS_LIB="-L${MAGPLUS_LIBDIR} -lMagWrapper -lMagPlus"
     # note: the NetCDF libraries will be added to MAGPLUS_LIB later in this script
 
     if test "x`${MAGPLUS_HOME}/bin/magics-config --with-metview`" = xno; then
@@ -23567,11 +24369,11 @@ fi
 
 #########################################################################################
 #
-# Check for curl - sometimes needed by NetCDF
+# Check for curl - required by MARS web access, and sometimes needed by NetCDF
 #
 #########################################################################################
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for curl library sometimes needed by NetCDF" >&5
-$as_echo_n "checking for curl library sometimes needed by NetCDF... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for curl library required by MARS web access and sometimes needed by NetCDF" >&5
+$as_echo_n "checking for curl library required by MARS web access and sometimes needed by NetCDF... " >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for curl_easy_setopt in -lcurl" >&5
 $as_echo_n "checking for curl_easy_setopt in -lcurl... " >&6; }
@@ -23624,7 +24426,7 @@ then
 	NETCDF_LIBS="${NETCDF_LIBS} -lcurl"
 else
     echo "    No curl library - ensure that your NetCDF library does not require it."
-    echo "    NOTE: the MARS web API will not work without curl. Please use install curl or --disable-mars-api."
+    echo "    NOTE: the MARS web access will not be built if curl is not installed."
 fi
 
 
@@ -23935,6 +24737,47 @@ GRIB_API_LIB="${GRIB_API_LIB} ${GRIBAPI_LIBS} ${JPEG_LIB}" # for inline fortran/
 
   # for inline fortran/c macros
 
+#########################################################################################
+#
+# For ecRegrid header file
+#
+#########################################################################################
+# Check whether --enable-ecregrid was given.
+if test "${enable_ecregrid+set}" = set; then :
+  enableval=$enable_ecregrid; ecregrid=$enableval
+else
+  ecregrid=no
+fi
+
+
+if test "x$ecregrid" = xyes ; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ecRegrid (ECMWF)" >&5
+$as_echo_n "checking for ecRegrid (ECMWF)... " >&6; }
+   $as_echo "#define METVIEW_ECREGRID 1" >>confdefs.h
+
+
+
+# Check whether --with-ecregrid was given.
+if test "${with_ecregrid+set}" = set; then :
+  withval=$with_ecregrid; CPPFLAGS="-I${with_ecregrid}/include ${CPPFLAGS}";LDFLAGS="-L${with_ecregrid}/lib ${LDFLAGS}"
+
+fi
+
+   ac_fn_cxx_check_header_mongrel "$LINENO" "ecregrid_api.h" "ac_cv_header_ecregrid_api_h" "$ac_includes_default"
+if test "x$ac_cv_header_ecregrid_api_h" = x""yes; then :
+
+else
+  as_fn_error "could not successfully compile with ecregrid_api.h!" "$LINENO" 5
+    unset ac_cv_header_ecregrid_h
+fi
+
+
+
+#   AC_CHECK_LIB(ecregrid,ecregrid_set_increments,LIBS="-lecregrid",AC_MSG_ERROR([ecregrid library not found.]))
+   ECREGRID_LIBS="-lecregrid"
+fi
+
+
 
 #########################################################################################
 #
@@ -24033,6 +24876,12 @@ fi
 
 
 
+
+# if using ODB_API 0.9.21:
+#     [ODB_CPPFLAGS="-DODB_SUPPORT -DOLD_ODB_API -I${with_odb}/include";
+
+# if using ODB_API 0.9.24:
+#     [ODB_CPPFLAGS="-DODB_SUPPORT -I${with_odb}/include -I${with_odb}/include/eclib -I${with_odb}/include/odb_api -I${with_odb}/include/odb_api/odblib";
   if test "x$odbnew" = xyes; then
 
 $as_echo "#define METVIEW_ODB_NEW 1" >>confdefs.h
@@ -24219,8 +25068,57 @@ if test "x$mars" = xyes ; then
 
 
   MARS_ACCESS=MARS_local
+
+    # MARS local home
+    mars_lh_found='not_supplied'
+
+# Check whether --with-local-mars-home was given.
+if test "${with_local_mars_home+set}" = set; then :
+  withval=$with_local_mars_home; MARS_HOME="${with_local_mars_home}";
+            as_ac_File=`$as_echo "ac_cv_file_${with_local_mars_home}" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${with_local_mars_home}" >&5
+$as_echo_n "checking for ${with_local_mars_home}... " >&6; }
+if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "${with_local_mars_home}"; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+eval as_val=\$$as_ac_File
+   if test "x$as_val" = x""yes; then :
+  mars_lh_found=yes
+else
+  mars_lh_found=no
+fi
+
+
+fi
+
+
+    if test "x$mars_lh_found" = xnot_supplied; then
+       echo ""
+       as_fn_error "If enabling local MARS support, please supply the --with-local-mars-home path." "$LINENO" 5
+fi
+
+
+    if test "x$mars_lh_found" = xno; then
+       echo ""
+       as_fn_error "Could not find Mars home directory. Please check the --with-local-mars-home path." "$LINENO" 5
+    fi
+
+
 fi
 
+
+
 #####################################################################
 #
 #    M A R S  catalog support
@@ -24246,28 +25144,28 @@ fi
 #
 #    M A R S  CURL support
 #
-# Check whether --enable-mars-api was given.
-if test "${enable_mars_api+set}" = set; then :
-  enableval=$enable_mars_api; mars_api=$enableval
+# Check whether --enable-mars-web-access was given.
+if test "${enable_mars_web_access+set}" = set; then :
+  enableval=$enable_mars_web_access; mars_web_access=$enableval
 else
-  mars_api=yes
+  mars_web_access=yes
 fi
 
 
 
 
-if test "x$mars_api" = xno ; then
+if test "${mars_web_access}" = "yes" -a  "${have_curl}" = "no" ; then
+    mars_web_access=no
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The curl library was not found, so MARS web access has been disabled." >&5
+$as_echo "$as_me: WARNING: The curl library was not found, so MARS web access has been disabled." >&2;}
+fi
+
+
+if test "x$mars_web_access" = xno ; then
     CPPFLAGS="${CPPFLAGS} -DNOCURL"
 else
-    if test "${have_curl}" = "no" ; then
-        { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "The curl library was not found; you can disable its requirement by setting --disable-mars-api.
-See \`config.log' for more details." "$LINENO" 5; }
-    else
         echo "MARS web api will be built"
     fi
-fi
 
 
 
@@ -24565,12 +25463,14 @@ MVSTARTDIR=${bindir}/..    # where the startup script will go
 
 
 
+
 #AH_TEMPLATE(METVIEW_TRAJ,         [Trajectory model.])
 
 
 
 
 
+
 #
 #  Enable Debug information
 #
@@ -24674,6 +25574,7 @@ METVIEW_3RDPARTY_LIBS="$METVIEW_3RDPARTY_LIBS $NETCDF_LIBS $GRIBAPI_LIBS"
 
 
 
+
 ############################################
 #
 #   standard compiler options that we always want
@@ -24869,6 +25770,14 @@ else
   METVIEW_GUI_FALSE=
 fi
 
+ if test "$new_ui"    = yes; then
+  METVIEW_NEW_GUI_TRUE=
+  METVIEW_NEW_GUI_FALSE='#'
+else
+  METVIEW_NEW_GUI_TRUE='#'
+  METVIEW_NEW_GUI_FALSE=
+fi
+
 #AM_CONDITIONAL(METVIEW_TRAJ,    test "$traj"        = yes)
  if test "$external"  = yes; then
   METVIEW_EXTERNAL_TRUE=
@@ -24886,6 +25795,14 @@ else
   METVIEW_EXPERIMENTAL_FALSE=
 fi
 
+ if test "$ecregrid"        = yes; then
+  METVIEW_ECREGRID_TRUE=
+  METVIEW_ECREGRID_FALSE='#'
+else
+  METVIEW_ECREGRID_TRUE='#'
+  METVIEW_ECREGRID_FALSE=
+fi
+
  if test "$inpe"     = yes; then
   METVIEW_INPE_TRUE=
   METVIEW_INPE_FALSE='#'
@@ -24903,7 +25820,7 @@ else
 fi
 
 
-ac_config_files="$ac_config_files Makefile src/Makefile src/AppMod/Makefile src/Event/Makefile src/BufrExaminer/Makefile src/CptecAccess/Makefile src/Datacoverage/Makefile src/DebugTools/Makefile src/Divrot/Makefile src/Ecfile/Makefile src/ExamineManager/Makefile src/Flextra/Makefile src/FlextraExaminer/Makefile src/GeopExaminer/Makefile src/GribExaminer/Makefile src/GribVectors/Makefile src/Hovmoeller/Makefile src/KML/Makefile src/Macro/Makefile src/MacroEditor/Makefile src/MagML/Makefi [...]
+ac_config_files="$ac_config_files Makefile src/Makefile src/AppMod/Makefile src/Event/Makefile src/BufrExaminer/Makefile src/CptecAccess/Makefile src/Datacoverage/Makefile src/DebugTools/Makefile src/Desktop/Makefile src/Divrot/Makefile src/Ecfile/Makefile src/ExamineManager/Makefile src/Flextra/Makefile src/FlextraExaminer/Makefile src/GeopExaminer/Makefile src/GribExaminer/Makefile src/GribVectors/Makefile src/Hovmoeller/Makefile src/KML/Makefile src/Macro/Makefile src/MacroEditor/Make [...]
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -25094,6 +26011,10 @@ if test -z "${METVIEW_GUI_TRUE}" && test -z "${METVIEW_GUI_FALSE}"; then
   as_fn_error "conditional \"METVIEW_GUI\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${METVIEW_NEW_GUI_TRUE}" && test -z "${METVIEW_NEW_GUI_FALSE}"; then
+  as_fn_error "conditional \"METVIEW_NEW_GUI\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${METVIEW_EXTERNAL_TRUE}" && test -z "${METVIEW_EXTERNAL_FALSE}"; then
   as_fn_error "conditional \"METVIEW_EXTERNAL\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -25102,6 +26023,10 @@ if test -z "${METVIEW_EXPERIMENTAL_TRUE}" && test -z "${METVIEW_EXPERIMENTAL_FAL
   as_fn_error "conditional \"METVIEW_EXPERIMENTAL\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${METVIEW_ECREGRID_TRUE}" && test -z "${METVIEW_ECREGRID_FALSE}"; then
+  as_fn_error "conditional \"METVIEW_ECREGRID\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${METVIEW_INPE_TRUE}" && test -z "${METVIEW_INPE_FALSE}"; then
   as_fn_error "conditional \"METVIEW_INPE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -26237,6 +27162,7 @@ do
     "src/CptecAccess/Makefile") CONFIG_FILES="$CONFIG_FILES src/CptecAccess/Makefile" ;;
     "src/Datacoverage/Makefile") CONFIG_FILES="$CONFIG_FILES src/Datacoverage/Makefile" ;;
     "src/DebugTools/Makefile") CONFIG_FILES="$CONFIG_FILES src/DebugTools/Makefile" ;;
+    "src/Desktop/Makefile") CONFIG_FILES="$CONFIG_FILES src/Desktop/Makefile" ;;
     "src/Divrot/Makefile") CONFIG_FILES="$CONFIG_FILES src/Divrot/Makefile" ;;
     "src/Ecfile/Makefile") CONFIG_FILES="$CONFIG_FILES src/Ecfile/Makefile" ;;
     "src/ExamineManager/Makefile") CONFIG_FILES="$CONFIG_FILES src/ExamineManager/Makefile" ;;
@@ -26265,13 +27191,16 @@ do
     "src/OperaRadar/Makefile") CONFIG_FILES="$CONFIG_FILES src/OperaRadar/Makefile" ;;
     "src/Percentile/Makefile") CONFIG_FILES="$CONFIG_FILES src/Percentile/Makefile" ;;
     "src/PottF/Makefile") CONFIG_FILES="$CONFIG_FILES src/PottF/Makefile" ;;
+    "src/Relhum/Makefile") CONFIG_FILES="$CONFIG_FILES src/Relhum/Makefile" ;;
     "src/Reprojection/Makefile") CONFIG_FILES="$CONFIG_FILES src/Reprojection/Makefile" ;;
+    "src/Rttov/Makefile") CONFIG_FILES="$CONFIG_FILES src/Rttov/Makefile" ;;
     "src/Scm/Makefile") CONFIG_FILES="$CONFIG_FILES src/Scm/Makefile" ;;
     "src/ScmEditor/Makefile") CONFIG_FILES="$CONFIG_FILES src/ScmEditor/Makefile" ;;
     "src/StdAppManager/Makefile") CONFIG_FILES="$CONFIG_FILES src/StdAppManager/Makefile" ;;
     "src/images/Makefile") CONFIG_FILES="$CONFIG_FILES src/images/Makefile" ;;
     "src/libFTimeUtil/Makefile") CONFIG_FILES="$CONFIG_FILES src/libFTimeUtil/Makefile" ;;
     "src/libMars/Makefile") CONFIG_FILES="$CONFIG_FILES src/libMars/Makefile" ;;
+    "src/libMars-ecregrid/Makefile") CONFIG_FILES="$CONFIG_FILES src/libMars-ecregrid/Makefile" ;;
     "src/libMetview/Makefile") CONFIG_FILES="$CONFIG_FILES src/libMetview/Makefile" ;;
     "src/libMvMotif/Makefile") CONFIG_FILES="$CONFIG_FILES src/libMvMotif/Makefile" ;;
     "src/libMvNetCDF/Makefile") CONFIG_FILES="$CONFIG_FILES src/libMvNetCDF/Makefile" ;;
@@ -26281,6 +27210,7 @@ do
     "src/uPlot/Makefile") CONFIG_FILES="$CONFIG_FILES src/uPlot/Makefile" ;;
     "src/Velstr/Makefile") CONFIG_FILES="$CONFIG_FILES src/Velstr/Makefile" ;;
     "src/VisTools/Makefile") CONFIG_FILES="$CONFIG_FILES src/VisTools/Makefile" ;;
+    "src/PM_Tephigram/Makefile") CONFIG_FILES="$CONFIG_FILES src/PM_Tephigram/Makefile" ;;
     "src/XSection/Makefile") CONFIG_FILES="$CONFIG_FILES src/XSection/Makefile" ;;
     "src/Stations/Makefile") CONFIG_FILES="$CONFIG_FILES src/Stations/Makefile" ;;
     "src/WebAccess/Makefile") CONFIG_FILES="$CONFIG_FILES src/WebAccess/Makefile" ;;
@@ -26290,6 +27220,7 @@ do
     "share/metview/etc/Makefile") CONFIG_FILES="$CONFIG_FILES share/metview/etc/Makefile" ;;
     "share/metview/etc/ifsdata/Makefile") CONFIG_FILES="$CONFIG_FILES share/metview/etc/ifsdata/Makefile" ;;
     "share/metview/icons/Makefile") CONFIG_FILES="$CONFIG_FILES share/metview/icons/Makefile" ;;
+    "share/metview/icons_mv5/Makefile") CONFIG_FILES="$CONFIG_FILES share/metview/icons_mv5/Makefile" ;;
     "rpms/Makefile") CONFIG_FILES="$CONFIG_FILES rpms/Makefile" ;;
     "rpms/Metview.spec") CONFIG_FILES="$CONFIG_FILES rpms/Metview.spec" ;;
     "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
@@ -28126,8 +29057,6 @@ fi
 #		src/ForwardApp/Makefile
 #		src/MetviewUI_qt/Makefile
 #		src/ObsExam/Makefile
-# 		src/PM_Tephigram/Makefile
-#		src/Relhum/Makefile
 #		src/Spectra/Makefile
 #		src/TimeSeries/Makefile
 #		src/TropCycTrack/Makefile
@@ -28151,10 +29080,14 @@ echo "#" >> $config_file
 echo "WMO_SITE_NR=${SITE_WMO_CODE}"  >> $config_file
 if test "x$SITE_NAME" = 'xecmwf'; then
   echo "QT_DIR_LIB=/usr/local/apps/qt/4.6.2${QT_EXT}/lib" >> $config_file
+  if test "x${with_netcdf}" != "x" ; then
+    echo "PATH=${with_netcdf}/bin:\${PATH}" >> $config_file
+fi
 fi
 echo "INSTALLDIR=${prefix}" >> $config_file
 echo "METVIEW_SCRIPT=${prefix}/bin/$STARTUP_SCRIPT" >> $config_file
 echo "MV_MARS_ACCESS=${MARS_ACCESS}" >> $config_file
+echo "MARS_HOME=${MARS_HOME}" >> $config_file
 echo "METVIEW_DIR_DEV=${PWD}" >> $config_file
 echo "METVIEW_TITLE_PROD=\"Production ${METVIEW_EXTRA_TITLE}\"" >> $config_file
 echo "METVIEW_TITLE_DEV=\"Development autotools ${METVIEW_EXTRA_TITLE}\"" >> $config_file
@@ -28222,9 +29155,13 @@ if test "x$magics" = xyes ; then
  echo ""
  echo "  \$MAGPLUS_HOME is defined as: $MAGPLUS_HOME"
  echo ""
+ echo "ecRegrid          --enable-ecregrid=$ecregrid"
 fi
 echo "MARS              --enable-mars-access=$mars"
-echo "MARS-WEB          --enable-mars-api=$mars_api"
+if test  "x$mars" = xyes -a "x$mars_lh_found" = xyes ; then
+  echo "MARS_HOME           $MARS_HOME"
+fi
+echo "MARS WEB ACCESS   --enable-mars-web-access=$mars_web_access"
 echo "ODB               --enable-odb=$odb"
 echo "MARS ODB          --enable-mars-odb=${marsodb}"
 echo "OBSTAT            --enable-obstat=$obstat"
diff --git a/configure.ac b/configure.ac
index 840a2d1..65c9cb2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -154,6 +154,14 @@ AC_SUBST(PKGCONFIG_REQUIRES)
 
 
 
+AC_CHECK_PROG(HAVE_KSH, ksh, true, false)
+
+if test "x$HAVE_KSH" = "xfalse" ; then
+    AC_MSG_ERROR([Could not find Korn Shell. Please ensure that ksh is installed.])
+fi
+
+
+
 ###########################################
 #
 # Architecture dependent Compiler options
@@ -186,7 +194,7 @@ case "${host}" in
                 QT_EXT="-64"  # used at ECMWF only
 				MV_ENVIRON="ecm_lnx64"
 				FDBLIB="-L/usr/local/lib/metaps/lib -lfdb"
-				X11LIB_DIR=" -L/usr/X11R6/${LIBNAME}"
+###				X11LIB_DIR=" -L/usr/X11R6/${LIBNAME}"
 				if test "x$enable_32_bits_addressing_mode" == xyes; then
 					echo " "
 					echo "You are on AMD 64 and building a 32 bit version of Metview."
@@ -216,7 +224,7 @@ case "${host}" in
 		METVIEW_DEFINES="-DLITTLE -DLITTLE_END -DH_INCLUDES_CC"
 
 		CPPFLAGS="$CPPFLAGS -I/usr/include/freetype2 -I/usr/include -I/usr/X11R6/include -I/usr/local/include"
-		LDFLAGS="$LDFLAGS -L/usr/local/${LIBNAME} -L/usr/${LIBNAME}"
+###		LDFLAGS="$LDFLAGS -L/usr/local/${LIBNAME} -L/usr/${LIBNAME}"
 		libdir=${prefix}/${LIBNAME}
 		;;
 	# IBM Server
@@ -306,6 +314,16 @@ if test "x$SITE_NAME" != 'xecmwf'; then
  MV_ENVIRON="common"
 fi
 
+# at ECMWF on Red Hat 6 (ecgb), libfdb is in a difference place
+
+if test "x$SITE_NAME" = 'xecmwf'; then
+    if test "x$OS_VERSION" = 'xrhel6'; then
+        FDBLIB="-L/usr/local/apps/fdb/current/lib -lfdb"
+    fi
+fi
+
+
+
 
 AC_SUBST(MV_ENVIRON)
 AC_SUBST(AXX)
@@ -319,7 +337,7 @@ AC_SUBST(AXX)
 #
 case "${CXX}" in
 	# GNU GCC
-	g++ )
+	g++* )
 		CFLAGS="$CFLAGS $AXX" # -std=c99 -ansi -fpermissive
 		CXXFLAGS="${CXXFLAGS} ${AXX} -fno-gnu-keywords -Wno-deprecated -Wno-write-strings" # -ansi -std=c++98
 		CPPLIBS="-lstdc++"
@@ -382,7 +400,7 @@ MAGICS_DEFINES=""
 MV_FLIBS=""
 
 case "${F77}" in
-	gfortran )
+	gfortran* )
 		MAGICS_DEFINES="${MAGICS_DEFINES} -DGFORTRAN"
 		FC_BITFLAGS="${AXX} -DGFORTRAN -fno-second-underscore -fpic -fdefault-real-8 -fcray-pointer"
 		FLIBS="${FLIBS} -lgfortran"
@@ -473,6 +491,16 @@ AC_LANG_POP
 #
 #########################################################################################
 
+
+AC_ARG_ENABLE(new_ui, [[  --enable-new-ui	 enable the new graphics user interface [default=yes]]],
+  new_ui=$enableval, new_ui=yes)
+
+if test "x$new_ui" = xyes ; then
+   AC_DEFINE(METVIEW_NEW_GUI, 1)
+fi
+
+
+
 AC_ARG_ENABLE(ui, [[  --enable-ui	          enable the graphics user interface [default=yes]]],
   ui=$enableval, ui=yes)
 
@@ -507,6 +535,16 @@ if test "x$ui" = xyes; then
 		    ;;
     esac
 
+
+    # ImageMagick
+
+
+    AC_CHECK_PROG(HAVE_CONVERT, convert, true, false)
+
+    if test "x$HAVE_CONVERT" = "xfalse" ; then
+        AC_MSG_ERROR([Could not find the ImageMagick convert command])
+    fi
+
     ######################################################################
     #
     #     Qt
@@ -517,7 +555,13 @@ if test "x$ui" = xyes; then
 
     # Qt with AutoTroll.
     m4_include([aux_build/autotroll.m4])
-    AT_WITH_QT([+xmlpatterns +xml +network])
+
+    if test "x$new_ui" = "xyes" ; then
+        AT_WITH_QT([+xmlpatterns +xml +network +webkit],[+help])
+    else
+        AT_WITH_QT([+xmlpatterns +xml +network],[+help])
+    fi
+
     AC_MSG_CHECKING([for Qt])
     AT_REQUIRE_QT_VERSION([4.6],
        AC_MSG_WARN([Qt version >= 4.6 is required]))
@@ -533,7 +577,7 @@ if test "x$ui" = xyes; then
 
     AC_DEFINE(METVIEW_QT, 1)
     CXXFLAGS="${CXXFLAGS} -DMETVIEW_QT"
-    MAGPLUS_LIB="-lMagPlusQt ${MAGPLUS_LIB}"
+    MAGPLUS_LIB_QT="-lMagPlusQt"
     echo "set"
 
     # remove any optmisation flags that we get from Qt - we want to control our own
@@ -573,6 +617,7 @@ if test "x$ui" = xyes; then
 else
     ui=no
     qt=no
+    new_ui=no
     echo "                         ***"
     echo "Building batch version with no graphical user interface."
     echo "                         ***"
@@ -633,11 +678,12 @@ if test "x$magics" = xyes; then
     AC_SUBST(MAGPLUS_LIBDIR)
 
     MAGPLUSLIB_APPEND=${MAGPLUS_LIB}  # to add to the end, later
-    CPPFLAGS="$MAGICS_CFLAGS $CPPFLAGS"
+    AC_SUBST(MAGICS_CFLAGS)
+    #CPPFLAGS="$MAGICS_CFLAGS $CPPFLAGS"
 
     MAGPLUS_CPPFLAGS="-I${with_magics_home}/include/magics ${MAGPLUS_CPPFLAGS}"
     MAGPLUS_LDFLAGS="-L${MAGPLUS_LIBDIR} ${MAGPLUS_LDFLAGS}"
-    MAGPLUS_LIB="-L${MAGPLUS_LIBDIR} -lMagWrapper -lMagPlus -lexpat -lz -lm -lfontconfig"
+    MAGPLUS_LIB="-L${MAGPLUS_LIBDIR} -lMagWrapper -lMagPlus"
     # note: the NetCDF libraries will be added to MAGPLUS_LIB later in this script
 
     if test "x`${MAGPLUS_HOME}/bin/magics-config --with-metview`" = xno; then
@@ -791,10 +837,10 @@ AC_CHECK_LIB(netcdf,ncvarid ,NETCDF_LIBS="-lnetcdf_c++ -lnetcdf",AC_MSG_ERROR([n
 
 #########################################################################################
 #
-# Check for curl - sometimes needed by NetCDF
+# Check for curl - required by MARS web access, and sometimes needed by NetCDF
 #
 #########################################################################################
-AC_MSG_CHECKING([for curl library sometimes needed by NetCDF])
+AC_MSG_CHECKING([for curl library required by MARS web access and sometimes needed by NetCDF])
 
 AC_CHECK_LIB(curl,curl_easy_setopt,  [have_curl="yes"], have_curl="no")
 
@@ -806,7 +852,7 @@ then
 	NETCDF_LIBS="${NETCDF_LIBS} -lcurl"
 else
     echo "    No curl library - ensure that your NetCDF library does not require it."
-    echo "    NOTE: the MARS web API will not work without curl. Please use install curl or --disable-mars-api."
+    echo "    NOTE: the MARS web access will not be built if curl is not installed."
 fi
 
 
@@ -940,6 +986,32 @@ AC_SUBST(GRIB_API_LIB) # for inline fortran/c macros
 AC_SUBST(GRIBAPI_LIBS)
 AC_SUBST(LDFLAGS_INLINE)  # for inline fortran/c macros
 
+#########################################################################################
+#
+# For ecRegrid header file
+#
+#########################################################################################
+AC_ARG_ENABLE(ecregrid, [[  --enable-ecregrid	          enable the ecRegrid support (only at ECMWF) [default=no]]],
+  ecregrid=$enableval, ecregrid=no)
+
+if test "x$ecregrid" = xyes ; then
+   AC_MSG_CHECKING([for ecRegrid (ECMWF)])
+   AC_DEFINE(METVIEW_ECREGRID, 1)
+
+   AC_ARG_WITH([ecregrid],
+       [AS_HELP_STRING([--with-ecregrid],
+       [Prefix of ecRegrid libraries and headers.])],
+       [CPPFLAGS="-I${with_ecregrid}/include ${CPPFLAGS}";LDFLAGS="-L${with_ecregrid}/lib ${LDFLAGS}"]
+   )
+   AC_CHECK_HEADER(ecregrid_api.h,,
+   AC_MSG_ERROR([could not successfully compile with ecregrid_api.h!])
+    unset ac_cv_header_ecregrid_h)
+
+#   AC_CHECK_LIB(ecregrid,ecregrid_set_increments,LIBS="-lecregrid",AC_MSG_ERROR([ecregrid library not found.]))
+   ECREGRID_LIBS="-lecregrid"
+fi
+AC_SUBST(ECREGRID_LIBS)
+AC_SUBST(METVIEW_ECREGRID)
 
 #########################################################################################
 #
@@ -995,6 +1067,12 @@ if test "x$odb" = xyes ; then
    )
    AC_SUBST(ODB_LIBDIR)
 
+
+# if using ODB_API 0.9.21:
+#     [ODB_CPPFLAGS="-DODB_SUPPORT -DOLD_ODB_API -I${with_odb}/include";
+
+# if using ODB_API 0.9.24:
+#     [ODB_CPPFLAGS="-DODB_SUPPORT -I${with_odb}/include -I${with_odb}/include/eclib -I${with_odb}/include/odb_api -I${with_odb}/include/odb_api/odblib";
   if test "x$odbnew" = xyes; then 
       AC_DEFINE(METVIEW_ODB_NEW, 1,["Support for the ODB-2 API"])
       CPPFLAGS="${CPPFLAGS} -DMETVIEW_ODB_NEW" 
@@ -1103,8 +1181,32 @@ if test "x$mars" = xyes ; then
   AC_DEFINE(METVIEW_MARS, 1)
 
   MARS_ACCESS=MARS_local
+
+    # MARS local home
+    mars_lh_found='not_supplied'
+    AC_ARG_WITH([local-mars-home],
+           [AS_HELP_STRING([--with-local-mars-home],
+           [Local MARS home directory])],
+           [MARS_HOME="${with_local_mars_home}";
+            AC_CHECK_FILE(${with_local_mars_home},mars_lh_found=yes,mars_lh_found=no)]
+    )
+
+    if test "x$mars_lh_found" = xnot_supplied; then
+       echo ""
+       AC_MSG_ERROR([If enabling local MARS support, please supply the --with-local-mars-home path.])
 fi
 
+
+    if test "x$mars_lh_found" = xno; then
+       echo ""
+       AC_MSG_ERROR([Could not find Mars home directory. Please check the --with-local-mars-home path.])
+    fi
+
+    AC_SUBST(MARS_HOME)
+fi
+
+
+
 #####################################################################
 #
 #    M A R S  catalog support
@@ -1124,20 +1226,22 @@ fi
 #
 #    M A R S  CURL support
 #
-AC_ARG_ENABLE(mars-api, [[  --enable-mars-api	          enable the MARS API (requires curl library) [default=yes]]],
-  mars_api=$enableval, mars_api=yes)
+AC_ARG_ENABLE(mars-web-access, [[  --enable-mars-web-access	          enable the MARS web access (requires curl library) [default=yes]]],
+  mars_web_access=$enableval, mars_web_access=yes)
 
 
 
-if test "x$mars_api" = xno ; then
+if test "${mars_web_access}" = "yes" -a  "${have_curl}" = "no" ; then
+    mars_web_access=no
+    AC_MSG_WARN([The curl library was not found, so MARS web access has been disabled.])
+fi
+
+
+if test "x$mars_web_access" = xno ; then
     CPPFLAGS="${CPPFLAGS} -DNOCURL"
 else
-    if test "${have_curl}" = "no" ; then
-        AC_MSG_FAILURE([The curl library was not found; you can disable its requirement by setting --disable-mars-api.])
-    else 
         echo "MARS web api will be built"
     fi
-fi
 
 
 
@@ -1290,6 +1394,7 @@ AH_TEMPLATE(METVIEW_MARS_CATALOG, [Turn on the MARS catalog support.])
 AH_TEMPLATE(METVIEW_DEBUG,        [Turn on any additional debugging support])
 AH_TEMPLATE(METVIEW_PROF,         [Turn on any additional profiling information])
 AH_TEMPLATE(METVIEW_GUI,          [Turn on the graphical user interface])
+AH_TEMPLATE(METVIEW_NEW_GUI,      [Turn on the Qt-based graphical user interface])
 AH_TEMPLATE(METVIEW_32BIT,        [Turn on 32 bit addressing])
 AH_TEMPLATE(METVIEW_EMOS,         [Turn off the Emoslib support])
 AH_TEMPLATE(METVIEW_ODB,          [Turn on the ODB support])
@@ -1307,6 +1412,7 @@ AH_TEMPLATE(METVIEW_SITE,         [Name of installation site.])
 #AH_TEMPLATE(METVIEW_TRAJ,         [Trajectory model.])
 AH_TEMPLATE(METVIEW_EXTERNAL,     [Extra data modules used outside ECMWF.])
 AH_TEMPLATE(METVIEW_EXPERIMENTAL, [Turn on experimental components used only in developments.])
+AH_TEMPLATE(METVIEW_ECREGRID,     [Turn on experimental interpolation library - only in developments.])
 AH_TEMPLATE(METVIEW_INPE,         [Turn on the INPE support])
 AH_TEMPLATE(METVIEW_SCM_AUX,      [Turn on the SCM auxillary files])
 
@@ -1383,6 +1489,7 @@ AC_SUBST(LIBNAME)
 AC_SUBST(MAGPLUS_CPPFLAGS)
 AC_SUBST(MAGPLUS_LDFLAGS)
 AC_SUBST(MAGPLUS_LIB)
+AC_SUBST(MAGPLUS_LIB_QT)
 AC_SUBST(EMOS_LIB_NAME)
 AC_SUBST(ODB_CPPFLAGS)
 AC_SUBST(ODB_LDFLAGS)
@@ -1479,9 +1586,11 @@ AM_CONDITIONAL(METVIEW_MARS_ODB,   test "${marsodb}" = yes)
 AM_CONDITIONAL(METVIEW_OBSTAT,     test "$obstat"    = yes)
 AM_CONDITIONAL(METVIEW_OPERA,      test "$operaradar" = yes)
 AM_CONDITIONAL(METVIEW_GUI,        test "$ui"        = yes)
+AM_CONDITIONAL(METVIEW_NEW_GUI,    test "$new_ui"    = yes)
 #AM_CONDITIONAL(METVIEW_TRAJ,    test "$traj"        = yes)
 AM_CONDITIONAL(METVIEW_EXTERNAL,   test "$external"  = yes)
 AM_CONDITIONAL(METVIEW_EXPERIMENTAL,   test "$experimental"  = yes)
+AM_CONDITIONAL(METVIEW_ECREGRID,    test "$ecregrid"        = yes)
 AM_CONDITIONAL(METVIEW_INPE,        test "$inpe"     = yes)
 AM_CONDITIONAL(METVIEW_SCM_AUX,     test "$scm_aux"  = yes)
 
@@ -1493,6 +1602,7 @@ AC_CONFIG_FILES([Makefile
 		src/CptecAccess/Makefile
 		src/Datacoverage/Makefile
 		src/DebugTools/Makefile
+		src/Desktop/Makefile
 		src/Divrot/Makefile
 		src/Ecfile/Makefile
 		src/ExamineManager/Makefile
@@ -1521,13 +1631,16 @@ AC_CONFIG_FILES([Makefile
 		src/OperaRadar/Makefile
 		src/Percentile/Makefile
 		src/PottF/Makefile
+		src/Relhum/Makefile
 		src/Reprojection/Makefile
+		src/Rttov/Makefile
 		src/Scm/Makefile
 		src/ScmEditor/Makefile
 		src/StdAppManager/Makefile
 		src/images/Makefile
 		src/libFTimeUtil/Makefile
 		src/libMars/Makefile
+		src/libMars-ecregrid/Makefile
 		src/libMetview/Makefile
 		src/libMvMotif/Makefile
 		src/libMvNetCDF/Makefile
@@ -1537,6 +1650,7 @@ AC_CONFIG_FILES([Makefile
 		src/uPlot/Makefile
 		src/Velstr/Makefile
 		src/VisTools/Makefile
+ 		src/PM_Tephigram/Makefile
 		src/XSection/Makefile
 		src/Stations/Makefile
 		src/WebAccess/Makefile
@@ -1546,6 +1660,7 @@ AC_CONFIG_FILES([Makefile
 		share/metview/etc/Makefile
 		share/metview/etc/ifsdata/Makefile
 		share/metview/icons/Makefile
+		share/metview/icons_mv5/Makefile
 		rpms/Makefile
 		rpms/Metview.spec
 		test/Makefile
@@ -1560,8 +1675,6 @@ AC_OUTPUT
 #		src/ForwardApp/Makefile
 #		src/MetviewUI_qt/Makefile
 #		src/ObsExam/Makefile
-# 		src/PM_Tephigram/Makefile
-#		src/Relhum/Makefile
 #		src/Spectra/Makefile
 #		src/TimeSeries/Makefile
 #		src/TropCycTrack/Makefile
@@ -1585,10 +1698,14 @@ echo "#" >> $config_file
 echo "WMO_SITE_NR=${SITE_WMO_CODE}"  >> $config_file
 if test "x$SITE_NAME" = 'xecmwf'; then
   echo "QT_DIR_LIB=/usr/local/apps/qt/4.6.2${QT_EXT}/lib" >> $config_file
+  if test "x${with_netcdf}" != "x" ; then
+    echo "PATH=${with_netcdf}/bin:\${PATH}" >> $config_file
+fi
 fi
 echo "INSTALLDIR=${prefix}" >> $config_file
 echo "METVIEW_SCRIPT=${prefix}/bin/$STARTUP_SCRIPT" >> $config_file
 echo "MV_MARS_ACCESS=${MARS_ACCESS}" >> $config_file
+echo "MARS_HOME=${MARS_HOME}" >> $config_file
 echo "METVIEW_DIR_DEV=${PWD}" >> $config_file
 echo "METVIEW_TITLE_PROD=\"Production ${METVIEW_EXTRA_TITLE}\"" >> $config_file
 echo "METVIEW_TITLE_DEV=\"Development autotools ${METVIEW_EXTRA_TITLE}\"" >> $config_file
@@ -1656,9 +1773,13 @@ if test "x$magics" = xyes ; then
  echo ""
  echo "  \$MAGPLUS_HOME is defined as: $MAGPLUS_HOME"
  echo ""
+ echo "ecRegrid          --enable-ecregrid=$ecregrid"
 fi
 echo "MARS              --enable-mars-access=$mars"
-echo "MARS-WEB          --enable-mars-api=$mars_api"
+if test  "x$mars" = xyes -a "x$mars_lh_found" = xyes ; then
+  echo "MARS_HOME           $MARS_HOME"
+fi
+echo "MARS WEB ACCESS   --enable-mars-web-access=$mars_web_access"
 echo "ODB               --enable-odb=$odb"
 echo "MARS ODB          --enable-mars-odb=${marsodb}"
 echo "OBSTAT            --enable-obstat=$obstat"
diff --git a/docs/Metview_Installation_Guide.pdf b/docs/Metview_Installation_Guide.pdf
new file mode 100644
index 0000000..2e02729
Binary files /dev/null and b/docs/Metview_Installation_Guide.pdf differ
diff --git a/rpms/Makefile.in b/rpms/Makefile.in
index b392ad4..8077343 100644
--- a/rpms/Makefile.in
+++ b/rpms/Makefile.in
@@ -83,6 +83,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -98,6 +99,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -124,11 +127,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 6c579c8..a537912 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -10,11 +10,14 @@ scripts = ../bin/compile ../bin/dump ../bin/metview-mail ../bin/mvrun ../bin/mvr
 	../bin/metview_local.${MV_ENVIRON} ../bin/metview_local2.${MV_ENVIRON} \
 	../bin/MarsTiggeWrapper ../bin/metgramclient.pl \
 	../bin/ObstatToolWrapper ../bin/ObstatScatter.magml  \
-	../bin/MarsOdbWrapper ../bin/MarsScinWrapper \
+	../bin/MarsOdbWrapper ../bin/MarsEcRegridWrapper \
 	../bin/generate_video \
+        ../bin/mv_compress ../bin/mv_mail ../bin/mv_uniquename \
 	../bin/mv_odbsql ../bin/mv_odbsql2 ../bin/mv_obstat \
 	../bin/mv_mars_catalog.py \
 	../bin/mv_flextra_prep.mv ../bin/mv_flextra_prep ../bin/mv_flextra_run \
+	../bin/mv_flexpart_run \
+        ../bin/mv_rttov_run \
 	../bin/mv_scm_run ../bin/mv_scm_vis.mv
 
 #../bin/ObstatCurveKind1.magml
@@ -73,7 +76,6 @@ endif
 	printf "#\n# DO NOT EDIT! SCRIPT PRODUCED BY make IN DIR ./scripts!\n#\n" >> $@
 	printf 'set -ea\n'                                 >> $@
 	cat  ../config/CONFIG.site                         >> $@
-#	grep VIS5D_DIR  $(MV_XTRA_SW)                      >> $@
 	printf "METVIEW_RELEASE=`cat ../share/metview/app-defaults/MvVersion`\n" >> $@
 #	METVIEW_VERSION_TITLE="Metview `cat ../share/metview/app-defaults/MvVersion` (`date -u '+%Y-%m-%d'`)"
 #	printf "METVIEW_VERSION_TITLE=$(METVIEW_VERSION_TITLE)\n" >> $@
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
index 83225e6..67b5ed0 100644
--- a/scripts/Makefile.in
+++ b/scripts/Makefile.in
@@ -106,6 +106,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -121,6 +122,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -147,11 +150,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -288,11 +294,14 @@ scripts = ../bin/compile ../bin/dump ../bin/metview-mail ../bin/mvrun ../bin/mvr
 	../bin/metview_local.${MV_ENVIRON} ../bin/metview_local2.${MV_ENVIRON} \
 	../bin/MarsTiggeWrapper ../bin/metgramclient.pl \
 	../bin/ObstatToolWrapper ../bin/ObstatScatter.magml  \
-	../bin/MarsOdbWrapper ../bin/MarsScinWrapper \
+	../bin/MarsOdbWrapper ../bin/MarsEcRegridWrapper \
 	../bin/generate_video \
+        ../bin/mv_compress ../bin/mv_mail ../bin/mv_uniquename \
 	../bin/mv_odbsql ../bin/mv_odbsql2 ../bin/mv_obstat \
 	../bin/mv_mars_catalog.py \
 	../bin/mv_flextra_prep.mv ../bin/mv_flextra_prep ../bin/mv_flextra_run \
+	../bin/mv_flexpart_run \
+        ../bin/mv_rttov_run \
 	../bin/mv_scm_run ../bin/mv_scm_vis.mv
 
 
@@ -603,7 +612,6 @@ compile: compile.src ../config/CONFIG.site
 	printf "#\n# DO NOT EDIT! SCRIPT PRODUCED BY make IN DIR ./scripts!\n#\n" >> $@
 	printf 'set -ea\n'                                 >> $@
 	cat  ../config/CONFIG.site                         >> $@
-#	grep VIS5D_DIR  $(MV_XTRA_SW)                      >> $@
 	printf "METVIEW_RELEASE=`cat ../share/metview/app-defaults/MvVersion`\n" >> $@
 #	METVIEW_VERSION_TITLE="Metview `cat ../share/metview/app-defaults/MvVersion` (`date -u '+%Y-%m-%d'`)"
 #	printf "METVIEW_VERSION_TITLE=$(METVIEW_VERSION_TITLE)\n" >> $@
diff --git a/scripts/MarsEcRegridWrapper b/scripts/MarsEcRegridWrapper
new file mode 100644
index 0000000..5b6087e
--- /dev/null
+++ b/scripts/MarsEcRegridWrapper
@@ -0,0 +1,81 @@
+#!/bin/ksh
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2012 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 ************************************
+
+
+# create directory for ecregrid if it does not already exist
+lpolydir=/tmp/ecregrid/legendre_polynomials
+
+if [ ! -d $lpolydir ]
+then
+    echo "creating $lpolydir"
+    mkdir -p $lpolydir
+    chmod uga+rxw $lpolydir
+fi
+
+
+# -----------------------------------------
+# ECMWF extras for setting MARS environment
+# Note this script runs the Mars module
+# unless 'env_only' is specified on the
+# command line.
+# -----------------------------------------
+
+#if [ x$WMO_SITE_NR = x098 ]  # only do this at ECMWF
+#then
+    export MV_MARS_MODE=ecRegrid
+
+    export METAPS=/usr/local/lib/metaps/mars_grib_api
+    export MARS_HOME=$METAPS
+
+    #-- for xtra safety --
+    unset FDB_SERVER_HOST || true
+
+    export MARS_AUTH_FILE=$MARS_HOME/etc/mars.authentication
+    export MARS_IBM_RULES=$MARS_HOME/chk/ibm.chk
+
+    export MARS_LANGUAGE_FILE=$METVIEW_DIR_SHARE/etc/MarsEcRegridDef
+    export MARS_TEST_FILE=$METVIEW_DIR_SHARE/etc/MarsEcRegridRules
+    ##export MARS_LANGUAGE_FILE=$MARS_HOME/etc/mars.def
+    ##export MARS_TEST_FILE=$MARS_HOME/chk/mars.chk
+
+    #-- for Lagrandian coeffiecient files --
+    export PPDIR=${PPDIR=`$METAPS/bin/ppdir.sh`}
+
+    #-- for MARS statistics --
+    export STAT_PREFIX=metview
+    . $METAPS/bin/marsstat.sh
+
+    #-- MARS home directory for user --
+    . $METAPS/bin/mars_user_home
+
+    #-- how frequent MARS sends warning e-mails --
+    export MARS_MAIL_FREQUENCY=${MARS_MAIL_FREQUENCY:=86400}
+
+    export MARS_DHSBASE_CHECK=$METAPS/chk/dhs.chk
+
+    #-- final solution from Manuel 000615/29 --
+    . $METAPS/bin/mars.environment
+
+    #-- Choose interpolation configuration (040913) --
+    #-- -- moved inside 'mars.environment' (050308) --
+    #-- config_interp=$($METAPS/bin/select_interpolation_mode)
+    #-- CONFIG_INTERP=${CONFIG_INTERP:=$config_interp}
+#else
+#    MARS_LANGUAGE_FILE=$METVIEW_DIR_SHARE/etc/MarsDef
+#    MARS_TEST_FILE=$METVIEW_DIR_SHARE/etc/MarsRules
+#fi
+
+
+if [ x$1 != xenv_only ]
+then
+#    tv8 $METVIEW_BIN/MarsOdb
+	$METVIEW_BIN/MarsEcRegrid
+fi
diff --git a/scripts/MarsScinWrapper b/scripts/MarsScinWrapper
deleted file mode 100644
index e959e96..0000000
--- a/scripts/MarsScinWrapper
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/ksh
-
-# **************************** LICENSE START ***********************************
-#
-# Copyright 2012 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 ************************************
-
-
-# -----------------------------------------
-# ECMWF extras for setting MARS environment
-# Note this script runs the Mars module
-# unless 'env_only' is specified on the
-# command line.
-# -----------------------------------------
-
-#if [ x$WMO_SITE_NR = x098 ]  # only do this at ECMWF
-#then
-    export MV_MARS_MODE=scin
-
-    export METAPS=/usr/local/lib/metaps/mars_grib_api
-    export MARS_HOME=$METAPS
-
-    #-- for xtra safety --
-    unset FDB_SERVER_HOST || true
-
-    export MARS_AUTH_FILE=$MARS_HOME/etc/mars.authentication
-    export MARS_IBM_RULES=$MARS_HOME/chk/ibm.chk
-
-    export MARS_LANGUAGE_FILE=$METVIEW_DIR_SHARE/etc/MarsScinDef
-    export MARS_TEST_FILE=$METVIEW_DIR_SHARE/etc/MarsScinRules
-    ##export MARS_LANGUAGE_FILE=$MARS_HOME/etc/mars.def
-    ##export MARS_TEST_FILE=$MARS_HOME/chk/mars.chk
-
-    #-- for Lagrandian coeffiecient files --
-    export PPDIR=${PPDIR=`$METAPS/bin/ppdir.sh`}
-
-    #-- for MARS statistics --
-    export STAT_PREFIX=metview
-    . $METAPS/bin/marsstat.sh
-
-    #-- MARS home directory for user --
-    . $METAPS/bin/mars_user_home
-
-    #-- how frequent MARS sends warning e-mails --
-    export MARS_MAIL_FREQUENCY=${MARS_MAIL_FREQUENCY:=86400}
-
-    export MARS_DHSBASE_CHECK=$METAPS/chk/dhs.chk
-
-    #-- final solution from Manuel 000615/29 --
-    . $METAPS/bin/mars.environment
-
-    #-- Choose interpolation configuration (040913) --
-    #-- -- moved inside 'mars.environment' (050308) --
-    #-- config_interp=$($METAPS/bin/select_interpolation_mode)
-    #-- CONFIG_INTERP=${CONFIG_INTERP:=$config_interp}
-#else
-#    MARS_LANGUAGE_FILE=$METVIEW_DIR_SHARE/etc/MarsDef
-#    MARS_TEST_FILE=$METVIEW_DIR_SHARE/etc/MarsRules
-#fi
-
-
-if [ x$1 != xenv_only ]
-then
-#    tv8 $METVIEW_BIN/MarsOdb
-	$METVIEW_BIN/MarsScin
-fi
diff --git a/scripts/compile b/scripts/compile
index 579aa1d..f804873 100644
--- a/scripts/compile
+++ b/scripts/compile
@@ -2,19 +2,19 @@
 # --- head created by Make ---
 set -e
 CC=gcc
-CC_FLAGS=" -g -O0 -I/include/python2.5  -m64 -fPIC -DECMWF -DLITTLE -DLITTLE_END -DH_INCLUDES_CC -DR64 -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DI32 -DMAGINT_IS_INT -DREAL_IS_DOUBLE"
+CC_FLAGS=" -O2 -I/include/python2.5  -m64 -fPIC -DECMWF -DLITTLE -DLITTLE_END -DH_INCLUDES_CC -DR64 -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DI32 -DMAGINT_IS_INT -DREAL_IS_DOUBLE"
 CXX=g++
-CXX_FLAGS="-g -O0  -Wall -W -DMETVIEW_EXPERIMENTAL -DUSE_NEW_IO -m64 -fPIC -fno-gnu-keywords -Wno-deprecated -Wno-write-strings -DMETVIEW_QT -DQT_NO_DEBUG_OUTPUT -DECMWF -DLITTLE -DLITTLE_END -DH_INCLUDES_CC -DR64 -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DI32 -DMAGINT_IS_INT -DREAL_IS_DOUBLE"
+CXX_FLAGS="-O2 -mtune=native -O2 -Wall -W -DUSE_NEW_IO -m64 -fPIC -fno-gnu-keywords -Wno-deprecated -Wno-write-strings -DMETVIEW_QT -DQT_NO_DEBUG_OUTPUT -DECMWF -DLITTLE -DLITTLE_END -DH_INCLUDES_CC -DR64 -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DI32 -DMAGINT_IS_INT -DREAL_IS_DOUBLE"
 F77=pgf90
-F77_FLAGS="-g -r8 -tp amd64 -r8"
+F77_FLAGS="-g -r8 -tp amd64 -r8  -O2"
 F90=pgf90
-F90_FLAGS="-g -r8 -tp amd64 -r8"
+F90_FLAGS="-g -r8 -tp amd64 -r8  -O2"
 FC_LIBS="-L/usr/local/apps/pgi/pgi-10.8/linux86-64/10.8/libso -Wl,-rpath,/usr/local/apps/pgi/pgi-10.8/linux86-64/10.8/libso -Wl,-rpath,/usr/local/apps/pgi/pgi-10.8/linux86-64/10.8/libso -lpgf90rtl -lpgftnrtl -lrt -lpgf90 -lpgf902 -lpghpf -lpgf90_rpm1 -lpghpf2 -lpgc -lpgftnrtl -lpgc -lrt"
 LIBNAME="lib64"
 GRIBAPI_LIB="-L/usr/local/apps/Metview/AuxSW/grib_api/1.11.0-64/lib64 -lgrib_api -ljasper"
 GRIBAPI_INC="-I/usr/local/apps/Metview/AuxSW/grib_api/1.11.0-64/include64"
-MV_EMOSLIB="-L/usr/local/lib/metaps/lib/000392 -lemos.R64.D64.I32"
-LDFLAGS_INLINE="-L/lib -L/usr/lib64"
+MV_EMOSLIB="-L/usr/local/apps/libemos/000393 -lemos.R64.D64.I32"
+LDFLAGS_INLINE="-L/lib"
 # **************************** LICENSE START ***********************************
 #
 # Copyright 2012 ECMWF and INPE. This software is distributed under the terms
diff --git a/scripts/metview_base b/scripts/metview_base
index 79b554d..0d9b343 100755
--- a/scripts/metview_base
+++ b/scripts/metview_base
@@ -296,7 +296,7 @@ do
 				echo "$1" >> $args
 				shift
 			done
-			METVIEW_STARTUP="$METVIEW_BIN/macro -script $macro -args $args"
+			METVIEW_STARTUP="$METVIEW_BIN/macro -script '$macro' -args $args"
 			[ $METVIEW_LOG = no_log -o "$METVIEW_LOG" = "-" ] && METVIEW_CMD=""
 			break
 			;;
@@ -319,7 +319,7 @@ do
 				exit 1
 			fi
 
-			METVIEW_STARTUP="$METVIEW_BIN/MvExamineManager $datatype $inputfile"
+			METVIEW_STARTUP="$METVIEW_BIN/MvExamineManager $datatype '$inputfile'"
 			METVIEW_EXIT=MvExamineManager
 			shift 2
 			;;
@@ -351,6 +351,15 @@ do
 			shift
 			;;
 
+		-desktop)			
+			MV_DESKTOP_NAME="Desktop"
+			if [ "$METVIEW_VERSION" = "prod" ]
+			then
+				METVIEW_STARTUP="Desktop"
+				METVIEW_EXIT="Desktop"
+			fi
+			;;
+
 		*)
 			echo "$me: option not supported \"$1\"" 1>&2
 			exit 1
@@ -557,6 +566,9 @@ MV_MLOG=${MV_MLOG=no}
 MV_QUIET=${MV_QUIET:=-quiet}
 MV_SILENT=${MV_SILENT:=NO}
 
+#Set the desktop app name 
+MV_DESKTOP_NAME="MetviewUI"
+
 #===============================================================
 # Setup Qt graphics system flag for Qt applications
 
@@ -764,8 +776,18 @@ rm -f $METVIEW_TMPDIR/config
 [ -f $HOME/.metviewrc ] && cp $HOME/.metviewrc  $METVIEW_TMPDIR/config
 
 
+
 . $METVIEW_DIR_SHARE/etc/ObjectListAll >> $METVIEW_TMPDIR/config
 
+# if $EC_USE_ECREGRID=1 then change the normal Mars client to instead
+# be the ecRegrid Mars client
+if [ "x$EC_USE_ECREGRID" = x1  ]
+then
+    echo " *** EC_USE_ECREGRID is $EC_USE_ECREGRID - will use ecRegrid for Mars interpolation ***"
+    sed 's/service[ \t]*=[ \t]*mars$/service = marsEcRegrid/g' $METVIEW_TMPDIR/config > $METVIEW_TMPDIR/config_temp
+    mv $METVIEW_TMPDIR/config_temp $METVIEW_TMPDIR/config
+fi
+
 
 # ===============================================================
 # Run script patches from another file
diff --git a/scripts/metview_help b/scripts/metview_help
index 1b2bfc2..0ede92b 100755
--- a/scripts/metview_help
+++ b/scripts/metview_help
@@ -45,6 +45,8 @@ Environment variables that have an effect on Metview-Magics-MARS-Emoslib-GRIB_AP
 			[$MARS_COMPUTE_FLAG]
   MARS_DEBUG		triggers all modules to print lots of extra debug info
 			[$MARS_DEBUG]
+  EC_USE_ECREGRID 	if set to 1 then Mars requests will use ecRegrid for interpolation
+			[$EC_USE_ECREGRID]
 
 
   Grib-Api
diff --git a/scripts/mv_compress b/scripts/mv_compress
new file mode 100644
index 0000000..3bfc542
--- /dev/null
+++ b/scripts/mv_compress
@@ -0,0 +1,279 @@
+#!/bin/sh
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2013 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 ************************************
+
+set -x 
+
+print_err()
+{
+	echo ${text_ERR}  $* >> "${f_LOG}"
+} 
+
+print_warn()
+{
+	echo "WARNING: "  $* >> "${f_LOG}"
+} 
+
+text_ERR="ERROR: script `basename $0` FAILED! "
+
+#The original version of this function was taken from: 
+#http://stackoverflow.com/questions/12340846/bash-shell-script-to-find-the-closest-parent-directory-of-several-files
+function findCommonPath()
+{
+  	var1=$1
+  	var2=$2
+  	path="/"
+  	prev_IFS=$IFS; 
+	IFS="/"
+  	for item in $var2; do
+		test "$path" = "/" && v="$item" || v="$path/$item"
+    		case $var1 in
+      			$v*) ;;
+      			*) break ;;
+    		esac
+    		path=$v
+  	done
+  	IFS=$prev_IFS
+  	echo $path
+}
+
+#--------------------------------------------------------------------
+# Read arguments. 
+# Getopts has problems on some HP systems so we need to use this
+# argument parsing techinque.
+#--------------------------------------------------------------------
+
+f_RES=""
+f_DUMP=""
+METHOD=""
+f_LOG=""
+useFixedName=0
+retVal=0
+
+while [ "$1" != "" ]
+do
+	case "$1" in
+
+		-f)
+			f_RES=$2
+			useFixedName=1
+			shift
+			;;
+		-d)
+			f_DUMP=$2
+			shift
+			;;
+		-m)
+			METHOD=$2
+			shift
+			;;
+		-l)     
+			f_LOG=$2
+			shift
+			;;
+		*) 
+			break;
+			;;
+	
+	esac	
+	shift
+done
+
+
+if [  $# -eq 0 ] ; then
+	print_err "No icons specified!"
+	exit 1
+fi
+
+#--------------------------------
+# Set compress cmd
+#--------------------------------
+
+case $METHOD in
+	tgz) 
+		COMPRESS_CMD="gzip -c"
+		SUFFIX="tar.gz"
+		;;
+	tbz)
+		COMPRESS_CMD="bzip2 -c"
+		SUFFIX="tar.bz2"
+		;;	
+	tar)	
+		COMPRESS_CMD=""
+                SUFFIX="tar"
+		;;
+	tzip)
+		COMPRESS_CMD="zip -r" 
+                SUFFIX="tar.zip"
+		;;
+	*)
+		print_err "No method is specified (via the -m flag)!"
+		exit 1
+		;;
+esac
+
+#Checks
+if [ x"$f_LOG" = x  ] ; then
+	f_LOG="/dev/null"
+fi
+
+#Clear log file
+> "$f_LOG"
+
+#tmp files
+f_TMP0=/tmp/$$.0
+f_TMP1=/tmp/$$.1
+
+#Clean tmp files
+rm -f /tmp/$$.*
+
+#All path will be relative to the metview root dir
+cd $METVIEW_USER_DIRECTORY
+
+#--------------------------------------------------
+# Calls mvimport for the icons to be compressed. 
+# this will find all the linked and embedded icons!	
+#--------------------------------------------------
+
+#find out first
+if [ x"$f_RES" = x ] ;then
+	f_RES="$METVIEW_USER_DIRECTORY""/""$1""."$SUFFIX
+fi
+
+MVIMPORT_TAG="@@COMPRESS-TAG@@ " 
+export MVIMPORT_TAG
+
+for n
+do
+	echo "$n" 
+        $METVIEW_BIN/mvimportDesktop "$n" ${f_TMP0} >/dev/null 2>&1
+	if [ $? -eq 0 -a -f ${f_TMP0} ] ; then
+		grep "^$MVIMPORT_TAG" ${f_TMP0} >> ${f_TMP1}
+	else
+		print_warn "Could not import icon \"$n\" !"
+		retVal=255
+	fi
+> ${f_TMP0}
+done
+
+
+if [ ! -s ${f_TMP1} ] ; then
+	print_err "No icons could be imported!"
+	exit 1
+fi
+ 
+#Add "./" to the beginning of files
+sed "s,$MVIMPORT_TAG,./," < ${f_TMP1} | sed "s,//,/,g" | sort -u > ${f_TMP0}
+
+
+#------------------------------------------
+# Find the common parent of all the icons
+#------------------------------------------
+
+d_COMMON=""
+folders=""
+while read m ; do
+
+	[ x"$m" = x ] && continue
+
+	d=`dirname "$m"` # | sed "s,//,/,g"`
+			
+	if [ x"${d_COMMON}" = x ] ; then 
+		d_COMMON=$d
+		folders=$d
+	fi
+
+	if [ `echo $folders | grep -c ${d}` -eq 0 ] ; then
+		folders="${folders} $d"
+		d_COMMON=$(findCommonPath "$d_COMMON" "$d")
+		fi
+done < ${f_TMP0} 
+
+echo "common path " $d_COMMON
+
+if [ x"$d_COMMON" = x  -o ! -d "$d_COMMON" ] ; then
+	print_err "Failed to find common parent folder!"
+	exit 1
+fi 
+
+#------------------------------------------------
+# Tar up the files. 
+# We will use variable folders again! First
+# round create (x=c), then add/replace (x=r)	
+#------------------------------------------------
+
+cd "$d_COMMON"
+
+tarFlag="c"
+folders=""
+
+while read m
+do
+	[ x"$m" = x ] && continue
+
+	# build icon file and dot file names
+	d=`dirname "$m"`
+	if [ x"$d_COMMON" != x -a "$d_COMMON" != "./" ] ; then
+		d=`echo "$d" | sed "s,${d_COMMON},./,g" |  sed "s,//,/,g"`		
+	fi
+	b=`basename "$m"`
+		
+	#Icon file		
+	f_ICON=` echo ${d}"/"${b} | sed "s,//,/,g"`
+	      
+	#Dot file			
+	f_DOT=`echo "${d}/.__metview_icon_" | sed "s,//,/,g"`
+	if [ ! -f "$f_DOT" ] ; then		
+		f_DOT=`echo "${d}/.${b}" | sed "s,//,/,g"`
+	elif [ `echo $folders | grep -c ${d}` -eq 0 ] ; then
+		folders="${folders} $d"
+	else	
+		f_DOT=""
+	fi
+	
+	if [ -e "$f_ICON" ] ; then
+
+		if [ x"$f_DOT" != x -a -f "$f_DOT" ] ; then
+			tar ${tarFlag}f ${f_TMP1} "$f_DOT" "$f_ICON"
+		else
+			tar ${tarFlag}f ${f_TMP1} "$f_ICON"				
+		fi
+
+		tarFlag="r"
+	fi
+
+	echo $f_ICON
+	echo $f_DOT
+	echo $folders
+
+done < ${f_TMP0} 
+
+#-- Dump the contents of the tar file
+if [ x"$f_DUMP" != x ] ; then
+    tar -tvf  ${f_TMP1} > "$f_DUMP"
+fi
+
+#-- Compress tmp tar file
+if [  x"$COMPRESS_CMD" != x ] ;then 
+	if [ "$METHOD" = "tzip" ] ; then
+		eval "${COMPRESS_CMD} \"$f_RES\" ${f_TMP1}"
+	else
+     		eval "${COMPRESS_CMD} ${f_TMP1} > \"$f_RES\""
+	fi
+else
+    	mv ${f_TMP1} "$f_RES"
+fi
+
+#Clean tmp files
+rm -f /tmp/$$.*
+
+exit $retVal
+
+
diff --git a/scripts/mv_flexpart_run b/scripts/mv_flexpart_run
new file mode 100644
index 0000000..a03141f
--- /dev/null
+++ b/scripts/mv_flexpart_run
@@ -0,0 +1,105 @@
+#!/bin/ksh
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2012 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 ************************************
+
+
+# ---------------------------------------------------------
+# Script to run FLEXPART from within Metview
+# ---------------------------------------------------------
+
+set -x
+
+print_err()
+{
+	echo ${text_ERR}  $* >> "${f_LOG}"
+} 
+
+text_ERR="Script `basename $0` FAILED> "
+
+#Get args
+
+if [ $# -ne 3 ] ; then
+    echo "Invalid number of arguments specified! (" $# " instead of 3)"
+    exit 1
+fi
+
+d_WORK=$1
+f_LOG=$2
+f_EXE=$3
+
+if [ "$f_EXE" = "_UNDEF_" ] ; then
+	exe_FLEXPART=${MV_FLEXPART_EXE}
+else
+	exe_FLEXPART=${f_EXE}
+fi
+
+#-------------------------------
+# Go to working directory 
+#-------------------------------
+
+if [ ! -d "$d_WORK" ] ; then   
+   print_err "No working directory found: " $d_WORK
+   exit 1
+fi
+
+cd $d_WORK
+
+#-------------------------------
+# Checks
+#-------------------------------
+
+if [ x"$exe_FLEXPART" = "x" ] ; then   
+   print_err "No FLEXPART executable is defined. Please define it via env variable MV_FLEXPART_EXE."
+   exit 1
+fi
+
+if [ ! -f "$exe_FLEXPART" ] ; then   
+   print_err "No FLEXPART executable found: " $exe_FLEXPART
+   exit 1
+fi
+
+if [ ! -x "$exe_FLEXPART" ] ; then   
+   print_err "FLEXPART executable cannot be run! Permission is missing. " $exe_FLEXPART
+   exit 1
+fi
+
+#species
+d_PAR="/var/tmp/cgr/work/flexpart/FLEXPART_902/options"
+
+cp ${d_PAR}/IGBP_int1.dat .
+cp ${d_PAR}/OH_7lev_agl.dat .
+cp ${d_PAR}/surfdata.t .
+cp ${d_PAR}/surfdepo.t .
+ln -sf ${d_PAR}/SPECIES SPECIES
+
+#-------------------------------
+#Run flextra
+#-------------------------------
+
+$exe_FLEXPART>${f_LOG} 2>&1 
+outCode=$?
+
+
+#-----------------------------------
+#  Check log
+#-----------------------------------
+
+if [ -f ${f_LOG} ] ; then
+  if [ `grep -c -i WARNING $f_LOG` -ne 0 ] ; then
+	outCode=255 
+  elif [ `grep -c -i ERROR $f_LOG` -ne 0 ] ; then
+	outCode=1
+  elif [ $outCode -ne 0 ] ; then
+	outCode=$outCode
+  fi  
+fi
+
+	
+exit $outCode
\ No newline at end of file
diff --git a/scripts/mv_flextra_run b/scripts/mv_flextra_run
index 7eceaf1..a11fb56 100644
--- a/scripts/mv_flextra_run
+++ b/scripts/mv_flextra_run
@@ -163,4 +163,4 @@ if [ $resCnt -gt 1 ] ; then
 	cat $resCnt  > "multipleRes"
 fi	 
 	
-exit $outCode
+exit $outCode
\ No newline at end of file
diff --git a/scripts/mv_mail b/scripts/mv_mail
new file mode 100644
index 0000000..27e17a5
--- /dev/null
+++ b/scripts/mv_mail
@@ -0,0 +1,133 @@
+#!/bin/sh
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2013 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 ************************************
+
+set -x 
+
+print_err()
+{
+	echo ${text_ERR}  $* >> "${f_LOG}"
+} 
+
+text_ERR="Script `basename $0` FAILED> "
+
+
+to=""
+cc=""
+subject=""
+message=""
+f_ATTACH=""
+f_LOG=""
+
+#--------------------------------------------------------------------
+# Read arguments. 
+# Getopts has problems on some HP systems so we need to use this
+# argument parsing techinque.
+#--------------------------------------------------------------------
+
+while [ "$1" != "" ]
+do
+	case "$1" in
+
+		-t)
+			to=$2
+			shift
+			;;
+		-c)
+			cc=$2
+			shift
+			;;
+		-s)
+			subject=$2
+			shift
+			;;
+		-m)
+			message=$2
+			shift
+			;;
+		-f)     
+			f_ATTACH=$2
+			shift
+			;;
+		-l)     
+			f_LOG=$2
+			shift
+			;;
+		*) 
+			;;
+	
+	esac	
+	shift
+done
+
+#-------------------------------
+# Checks
+#-------------------------------
+
+if [ x"$f_LOG" = x ] ; then
+	f_LOG="/dev/null"
+fi
+
+#Clear log file
+> "$f_LOG"
+
+if [ x"$to" = x ] ; then
+	print_err "No email address is specified!"
+   	exit 1
+fi
+
+if [ x"$subject" = x ] ; then
+	subject="Metview icons"
+fi
+
+if [ x"$f_ATTACH" = x ] ; then
+	print_err "No attachment is specified!"
+   	exit 1
+fi
+
+if [ ! -f "$f_ATTACH" ] ; then
+	print_err "Attachment file does not exist!"
+   	exit 1
+fi
+
+#-----------------------------------------
+# Build the mail message and send it.
+#-----------------------------------------
+
+(
+echo $message
+echo
+if [ -f $f_ATTACH ]
+then
+
+cat << EOF
+METVIEW-ICONS --------------->
+
+This mail has been sent from Metview. The attachment is a tar.gz file containing some Metview icons (together with their descriptor files needed by Metview to interpret them). 
+
+To import these icons into your Metview environment you need to do as follows:
+
+   1. Download the tar.gz attachment into a Metview folder 
+   2. Right click on the tar.gz icon and select 'Extract'. A new Metview folder will be created for you containing all the extracted icons.
+
+Please note that the minimum Metview version to use this feature is 4.5. 
+
+<--------------- METVIEW-ICONS
+
+EOF
+# for mailing, encode binary tar file to ascii text file
+uuencode $f_ATTACH `basename $f_ATTACH` #; rm -f $fAttach
+
+fi
+) | mail "$to" -s "$subject"
+
+echo "Return value of mail command: " $?  
+
+exit 0
diff --git a/scripts/mv_rttov_run b/scripts/mv_rttov_run
new file mode 100644
index 0000000..8371a0d
--- /dev/null
+++ b/scripts/mv_rttov_run
@@ -0,0 +1,200 @@
+#!/bin/sh
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2013 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 ************************************
+
+
+# ---------------------------------------------------------
+# Script to run RTTOV from within Metview
+# ---------------------------------------------------------
+
+set -x
+
+print_err()
+{
+	echo ${text_ERR}  $* >> "${f_LOG}"
+} 
+
+text_ERR="Script `basename $0` FAILED> "
+
+#Get args
+if [ $# -ne 9 ] ; then
+    echo "Invalid number of arguments specified for script $0 ! (" $# " instead of 9)"
+    exit 1
+fi
+
+d_WORK=$1
+f_EXE=$2
+f_INPUT=$3
+NLEV=$4
+SENSOR=$5
+f_CHANNEL=$6
+f_COEFF=$7
+f_LOG=$8
+f_RES=$9
+
+
+#Some init
+do_SOLAR=0  # 0 = solar off / 1 = solar on
+do_OZONE=0   # 0 = microwave   1 = infrared ozone input
+
+#Define executable
+if [ "$f_EXE" = "_UNDEF_" ] ; then
+	exe_RTTOV=${MV_RTTOV_EXE}
+else
+	exe_RTTOV=${f_EXE}
+fi
+
+#-------------------------------------------
+# Set-up predefined channels and coeff
+#-------------------------------------------
+
+if [ "$SENSOR"  != "CUSTOM" ] ; then
+	
+	case "$SENSOR" in
+	"AMSUA")
+		f_CHANNEL="/scratch/graphics/cgr/rttov/amsua_channels"		
+		f_COEFF="/scratch/graphics/cgr/rttov/rttov8pred44L/rtcoef_metop_2_amsua.dat"
+		do_SOLAR=0
+		do_OZONE=0
+		;;
+	"IASI")
+		f_CHANNEL="/scratch/graphics/cgr/rttov/iasi_channels"		
+		f_COEFF="/scratch/graphics/cgr/rttov/rttov8pred44L/rtcoef_metop_2_iasi.dat"
+		do_SOLAR=0
+		do_OZONE=1
+		;;
+	*) print_err "Unsupported sensor type:" "$SENSOR"; exit 1 ;;
+		
+	esac
+
+fi
+
+#-------------------------------
+# Go to working directory 
+#-------------------------------
+
+if [ ! -d "$d_WORK" ] ; then   
+   print_err "No working directory found: " $d_WORK
+   exit 1
+fi
+
+cd $d_WORK
+
+#-------------------------------
+# Checks
+#-------------------------------
+
+if [ x"$exe_RTTOV" = "x" ] ; then   
+   print_err "No RTTOV executable is defined. Please define it via env variable MV_RTTOV_EXE."
+   exit 1
+fi
+
+if [ ! -f "$exe_RTTOV" ] ; then   
+   print_err "No RTTOV executable found: " $exe_RTTOV
+   exit 1
+fi
+
+if [ ! -x "$exe_RTTOV" ] ; then   
+   print_err "RTTOV executable cannot be run! Permission is missing. " $exe_RTTOV 
+   exit 1
+fi
+
+if [ ! -f "$f_INPUT" ] ; then   
+   print_err "No RTTOV input profile file is found: " $f_INPUT
+   exit 1
+fi
+
+if [ ! -r "$f_INPUT" ] ; then   
+   print_err "RTTOV input profile file cannot be read! Permission is missing. " $f_INPUT
+   exit 1
+fi
+
+if [ ! -f "$f_CHANNEL" ] ; then   
+   print_err  "No RTTOV channels file is found: " $f_CHANNEL
+   exit 1 
+fi
+
+if [ ! -r "$f_CHANNEL" ] ; then   
+   print_err "RTTOV channels file cannot be read! Permission is missing. " $f_CHANNEL
+   exit 1
+fi
+
+if [ ! -f "$f_COEFF" ] ; then   
+   print_err  "No RTTOV coefficient file is found: " $f_COEFF
+   exit 1 
+fi
+
+if [ ! -r "$f_COEFF" ] ; then   
+   print_err "RTTOV coefficient file cannot be read! Permission is missing. " $f_COEFF
+   exit 1
+fi
+
+#-------------------------------
+# Prepare input profile
+#-------------------------------
+
+ln -sf "${f_INPUT}" rttov_input_data.txt
+
+#--------------------------------------
+# Prepare channels and coefficient file
+#---------------------------------------
+
+ln -sf "${f_CHANNEL}" channel
+ln -sf "${f_COEFF}" coeff
+
+#-------------------------------
+# Prepare option input files
+#-------------------------------
+
+cat > options_input << EOF
+coeff, Coefficient filename
+rttov_input_data.txt      , Input profile filename
+1                 , Number of profiles
+${NLEV}         , Number of levels
+${do_SOLAR}     , Turn solar radiation on/off
+${do_OZONE}     , Turn ozone radiation on/off
+EOF
+cat options_input channel > input
+
+#-------------------------------
+# Run RTTOV
+#-------------------------------
+
+$exe_RTTOV < input > "${f_LOG}" 2>&1 
+outCode=$?
+
+#-----------------------------------
+#  Check log
+#-----------------------------------
+
+if [ -f "${f_LOG}" ] ; then
+  if [ `grep -c -i WARNING "$f_LOG"` -ne 0 ] ; then
+	outCode=255 
+  elif [ `grep -c -i ERROR "$f_LOG"` -ne 0 ] ; then
+	outCode=1
+  elif [ $outCode -ne 0 ] ; then
+	outCode=$outCode
+  fi  
+fi
+
+#-----------------------------------
+#  Check results
+#-----------------------------------
+
+f_OUT=output_example_fwd.dat
+
+if [ ! -f $f_OUT ] ; then
+   print_err "RTTOV ouput file was not generated!"
+   exit 1	 
+fi
+
+cp -f ${f_OUT} "${f_RES}"
+
+exit $outCode
diff --git a/scripts/mv_uniquename b/scripts/mv_uniquename
new file mode 100644
index 0000000..62183b2
--- /dev/null
+++ b/scripts/mv_uniquename
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2013 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 ************************************
+
+f_INP=$1
+suffix=""
+
+if [ $# -eq 2 ] ; then 
+	suffix=$2
+fi
+
+d=`dirname "$f_INP"`
+n=`basename "$f_INP" "$suffix"`
+cd "$d"
+
+if `find -maxdepth 1 -name "$n" | wc -l` -eq 1 ] ; then
+	echo $d
+	exit
+fi 
+
+maxNum=`find -maxdepth 1 -name "*" | wc -l`
+
+i=1
+fn="$n"_$i
+while [ $i -lt $maxNum ]  ; do	
+	fn="$n"_$i
+	if [ `find -maxdepth 1 -name "$fn" | wc -l` -eq 0 ] ; then
+		echo $fn
+		exit
+	fi
+	result=`expr $a + $a`
+	i=`expr $i + 1`
+done
+
+echo "$n"_$maxNum
+
+exit
\ No newline at end of file
diff --git a/scripts/set_mars_env b/scripts/set_mars_env
index 4f131dc..ffab446 100755
--- a/scripts/set_mars_env
+++ b/scripts/set_mars_env
@@ -14,7 +14,13 @@
 # ECMWF extras for setting MARS environment
 # -----------------------------------------
 
-export METAPS=/usr/local/lib/metaps/mars_grib_api
+if [ x$OS_VERSION = xrhel6 ]
+then
+    export METAPS=/usr/local/apps/mars/current
+else
+    export METAPS=/usr/local/lib/metaps/mars_grib_api
+fi
+
 export MARS_HOME=$METAPS
 
 #-- for xtra safety --
diff --git a/share/metview/Makefile.am b/share/metview/Makefile.am
index 17afa4e..1da8608 100644
--- a/share/metview/Makefile.am
+++ b/share/metview/Makefile.am
@@ -8,7 +8,7 @@ SUBDIRS	= app-defaults etc
 CLEANALL_CMD =
 
 if METVIEW_GUI
-SUBDIRS += icons
+SUBDIRS += icons icons_mv5
 CLEANALL_CMD += cd icons; $(MAKE) cleanall ; echo "MAKE CLEANALL > icons"
 endif
 
diff --git a/share/metview/Makefile.in b/share/metview/Makefile.in
index 782cab8..7305857 100644
--- a/share/metview/Makefile.in
+++ b/share/metview/Makefile.in
@@ -34,7 +34,7 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
- at METVIEW_GUI_TRUE@am__append_1 = icons
+ at METVIEW_GUI_TRUE@am__append_1 = icons icons_mv5
 @METVIEW_GUI_TRUE at am__append_2 = cd icons; $(MAKE) cleanall ; echo "MAKE CLEANALL > icons"
 subdir = share/metview
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
@@ -69,7 +69,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
 	distdir
 ETAGS = etags
 CTAGS = ctags
-DIST_SUBDIRS = app-defaults etc icons
+DIST_SUBDIRS = app-defaults etc icons icons_mv5
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -124,6 +124,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -139,6 +140,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -165,11 +168,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/share/metview/app-defaults/CommonMacroFuncs/.mvl_plot_scm_data_20121211_1015 b/share/metview/app-defaults/CommonMacroFuncs/.mvl_plot_scm_data_20121211_1015
deleted file mode 100644
index e1f126e..0000000
--- a/share/metview/app-defaults/CommonMacroFuncs/.mvl_plot_scm_data_20121211_1015
+++ /dev/null
@@ -1,785 +0,0 @@
-# Metview Macro
-
-# **************************** LICENSE START ***********************************
-#
-# Copyright 2012 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 ************************************
-
-# **************************************************************************
-# Function      : mvl_plot_scm_data
-#
-# Syntax        : mvl_plot_scm_data (definition)
-#
-# Author (date) : Iain Russell (05/12/2012)
-#
-# Category      : VISUAL
-#
-# OneLineDesc   : Creates plots interactively or in batch from SCM netCDF data
-#
-# Description   : Creates plots interactively or in batch from SCM netCDF data
-#
-# Parameters    : The input definition can contain some or all of the following
-#                 members. Note that it is valid to provide an empty definition,
-#                 in which case all input will be taken from the user interface.
-#                   mode - 'interactive' (user interface pops up) or 'batch'
-#                   netcdf_1 - path to the 'main' netCDF file
-#                   netcdf_2 - path to the 'comparison' netCDF file
-#                   comparison_mode - 'overlay' or 'difference'
-#                   output_mode - 'ps' or 'screen'
-#                   output_path - only if mode='batch'. Do not supply an extension.
-#                   param_selection - 'list', 'file' or 'all'
-#                   param_list_path - path to a text file containing each parameter name on a new line
-#                   param_list - if param_selection is 'list'
-#
-# Return Value  : None
-#
-# Dependencies  : None
-#
-# Example Usage : 
-#                 # default: pop up a user interface to get user input to the plot
-#                   scm_plot_params = ()
-#                   mvl_plot_scm_data(scm_plot_params)
-#
-#                 # batch usage: supply parameters here; no user interface
-#                   scm_plot_params = 
-#                   (
-#                       mode            : 'batch',
-#                       netcdf_1        : 'scm_out.nc',
-#                       netcdf_2        : 'scm_out_2.nc',
-#                       comparison_mode : 'overlay',
-#                       output_mode     : 'ps',
-#                       output_path     : 'scm_out',
-#                       param_selection : 'list',
-#                       param_list_path : nil,
-#                       param_list      : ['t_skin', 'top_lwrad_clr', 'u_wind_10m']
-#                   )
-#
-#                   mvl_plot_scm_data(scm_plot_params)
-#
-# **************************************************************************
-
-function mvl_plot_scm_data
-
-    args = ()
-
-    arglist = arguments()
-
-    if count(arglist) <> 0 then
-        args = arglist[1]
-    end if
-
-
-    # sanity check on the input arguments
-
-    if args.mode <> nil then
-        if args.mode <> 'interactive' and args.mode <> 'batch' then
-            fail("Argument 'mode' should be 'interactive' or 'batch'. It is ", args.mode)
-        end if
-    end if
-
-    if args.comparison_mode <> nil then
-        if args.comparison_mode <> 'overlay' and args.comparison_mode <> 'difference' then
-            fail("Argument 'comparison_mode' should be 'overlay' or 'difference'. It is ", args.comparison_mode)
-        end if
-    end if
-
-    if args.mode <> nil then
-        if args.output_mode <> 'ps' and args.output_mode <> 'screen' then
-            fail("Argument 'output_mode' should be 'ps' or 'screen'. It is ", args.output_mode)
-        end if
-    end if
-
-    if args.param_selection <> nil then
-        if args.param_selection <> 'list' and args.param_selection <> 'file' and args.param_selection <> 'all' then
-            fail("Argument 'param_selection' should be 'list', 'file' or 'all'. It is ", args.param_selection)
-        end if
-    end if
-
-
-    # fill in the argument definition with defaults if not specified
-
-    if args.mode = nil then
-        args.mode = 'interactive'
-    end if
-
-    if args.comparison_mode = nil then
-        args.comparison_mode = 'overlay'
-    end if
-
-    if args.param_selection = nil then
-        args.param_selection = 'list'
-    end if
-
-    if args.output_path = nil then
-        args.output_path = 'scm_out'
-    end if
-
-    if args.output_mode = nil then
-        args.output_mode = 'screen'
-    end if
-
-
-    
-    # make output_path into an absolute path
-
-    args.output_path = make_path_absolute(args.output_path)
-
-
-    # when running from the command line, we have to force certain options
-
-    if runmode() = 'batch' then
-        args.mode        = 'batch'
-        args.output_mode = 'ps'
-    end if
-
-
-    #print(args)
-
-
-    if args.mode = 'interactive' then
-
-        # ---------------- #
-        # interactive mode #
-        # ---------------- #
-
-
-        ui_comparison_mode = option_menu
-        (
-            name    : "comparison mode",
-            values  : ["overlay", "difference"],
-            default : args.comparison_mode
-        )
-
-        ui_netcdf_1 = icon
-        (
-            name  : "input data 1",
-            class : "NETCDF"
-        )
-
-        ui_netcdf_2 = icon
-        (
-            name  : "input data 2",
-            class : "NETCDF"
-        )
-
-        input = dialog([ui_comparison_mode, ui_netcdf_1, ui_netcdf_2])
-
-        compmode  = input['comparison mode']
-        netcdf_1  = input['input data 1']
-        netcdf_2  = input['input data 2']
-
-        if netcdf_1 = nil then
-            fail('Must supply at least one netCDF icon as input')
-        end if
-
-
-        # ------------------------------------------
-        # user dialog 3 - ask for the parameter(s)
-        # ------------------------------------------
-
-        # parse the parameters from the input netCDF file
-
-        vardef = parse_netcdf_vars(netcdf_1)
-
-        t = generate_vars_help(netcdf_1, vardef)
-
-        dialog_options = nil
-
-        ui_param_selection_mode = option_menu
-        (
-            name    : "parameter selection",
-            values  : ["list", "file", "all"],
-            default : args.param_selection
-        )
-
-        ui_param_list = any
-        (
-            name    : "parameter list",
-            default : 't',
-            help    : "help_script",
-            #help_script_command : "echo list of forward-slash-separated parameter names"
-            #help_script_command : "
-            help_script_command : "echo list of forward-slash-separated parameter names; cat " & t
-        )
-
-        ui_param_file = icon
-        (
-            name  : "parameter file",
-            class : "NOTE"
-        )
-
-        ui_param_output_mode = option_menu
-        (
-            name    : "output mode",
-            values  : ["screen", "ps"],
-            default : args.output_mode
-        )
-
-        outpath = args.output_path
-
-        ui_outpath = any
-        (
-            name    : "output file path",
-            default : outpath
-        )
-
-
-        input = dialog([ui_param_selection_mode, ui_param_list, ui_param_file, ui_param_output_mode, ui_outpath])
-
-        param_selection_mode = input["parameter selection"]
-
-        if param_selection_mode = 'list' then   # user provided an inline list of parameters
-            selected_vars = input['parameter list']
-
-        else if param_selection_mode = 'file' then # user gave a file with a list of parameters to plot
-            parmlist = input["parameter file"]
-
-            if parmlist <> nil then 
-                parmlistpath = parmlist.PATH
-            else
-                fail("Parameter selection was set to 'file', but no icon was supplied")
-            end if
-
-        else # put all the available variable indexes into a list - we will try to plot them all
-            selected_vars = vardef.vars
-        end if
-
-
-        outmode  = input["output mode"]
-        outpath  = input["output file path"]
-
-    else
-
-        # ---------- #
-        # batch mode #
-        # ---------- #
-
-        compmode = args.comparison_mode
-
-        netcdf_1_path = args.netcdf_1
-        if netcdf_1_path = nil then
-            fail('Must supply netcdf_1')
-        else
-            netcdf_1_path = make_path_absolute(netcdf_1_path)
-            netcdf_1 = read(netcdf_1_path)
-        end if
-
-        netcdf_2 = nil
-        netcdf_2_path = args.netcdf_2
-        if netcdf_2_path <> nil then
-            netcdf_2_path = make_path_absolute(netcdf_2_path)
-            netcdf_2 = read(netcdf_2_path)
-        end if
-
-
-        param_selection_mode = args.param_selection
-
-        if param_selection_mode = 'list' then   # user provided an inline list of parameters
-            selected_vars = args.param_list
-        else if param_selection_mode = 'file' then # user gave a file with a list of parameters to plot
-            parmlistpath = param_list_path
-        else # put all the available variable indexes into a list - we will try to plot them all
-            selected_vars = vars
-        end if
-
-        outmode = args.output_mode
-        outpath = args.output_path
-
-
-        # Read netcdf file
-        file_nc = netcdf_1
-
-
-        # parse the parameters from it
-        vardef = parse_netcdf_vars(file_nc)
-
-
-    end if # interactive or batch
-
-
-
-
-    # ----------------------------------------- #
-    # User input obtained, start the processing #
-    # ----------------------------------------- #
-
-
-    # read the list of parameters from a file?
-    if param_selection_mode = 'file' then
-        parmlistpath = parmlist.PATH
-        selected_vars = read(parmlistpath)
-    end if
-
-
-    # (hopefully temporary) mesaure: since we can't yet plot multiple parameters
-    # interactively, we will have to plot just the first one
-
-    if outmode = 'screen' then
-        if count(selected_vars) > 1 then
-            print('Can only plot 1 variable in interactive mode - will plot just the first one')
-            selected_vars = [selected_vars[1]]
-        end if
-    end if
-
-
-    # construct a list of variable indexes from their names
-    plot_var_indexes = nil
-    for i = 1 to count(selected_vars) do
-        index = find(vardef.vars, selected_vars[i])
-        if index = nil then
-            fail('Could not find variable ' & selected_vars[i] & ' in netCDF file')
-        else
-            plot_var_indexes = plot_var_indexes & [index]
-        end if
-    end for
-
-
-    print('Plotting parameters: ', selected_vars, ' ; indexes: ', plot_var_indexes)
-
-
-
-    if outmode = 'ps' then
-        print('Will generate output plot in ', outpath)
-        psfile = ps_output(output_name : outpath)
-        setoutput(psfile)
-    end if
-
-
-
-    # convert seconds to days
-    #setcurrent(file_nc, 4)
-    #file_nc = file_nc / (60*60*24)
-
-
-
-    # decide whether to plot both netCDF files in overlay mode, or to compute
-    # the difference and plot that by itself
-
-    nc_files = nil
-
-    if compmode = 'overlay' then
-        if netcdf_1 <> nil then nc_files = nc_files & [netcdf_1] end if
-        if netcdf_2 <> nil then nc_files = nc_files & [netcdf_2] end if
-    else
-        a = 1 # for syntax correctness
-        if netcdf_2 = nil then
-            fail('Must supply a second netCDF icon')
-        end if
-
-        #setcurrent(netcdf_1, i)
-        #setcurrent(netcdf_2, i)
-        nc_files = [netcdf_1]# - netcdf_2]
-    end if
-
-
-
-
-    graph_line_colours = ['blue', 'red']
-
-
-
-    for j = 1 to count(plot_var_indexes) do
-
-        i = plot_var_indexes[j]
-
-        if not(i in vardef.reserved_var_indexes) and i<>nil then
-
-            # -------------------------------------------
-            # plotting - gather plot info for each netCDF
-            # -------------------------------------------
-
-            to_plot  = nil
-            all_yvals = nil
-            plot_this_var = 0
-
-            for n = 1 to count(nc_files) do
-
-                file_nc = nc_files[n]
-
-                # look at this variable to see what its dimensions are
-                setcurrent(file_nc, i)
-                dim_names = dimension_names(file_nc)
-                print(i, tab, dim_names)
-                if count(dim_names) = 1 then
-                    xdim_name = dim_names[1]
-                        plot_this_var = 1
-
-                        if compmode = 'difference' then
-                            setcurrent(netcdf_2, i)
-                            file_nc = file_nc - netcdf_2
-                        end if
-
-
-                        # visualiser to plot the data
-                        line_plot = netcdf_visualiser
-                        (
-                            netcdf_plot_type      : "xy_points",
-                            netcdf_x_variable     : xdim_name,
-                            netcdf_y_variable     : vardef.vars[i],
-                            netcdf_value_variable : vardef.vars[i],
-                            netcdf_data           : file_nc
-                        )
-
-                        # visual definition to apply to the plot
-                        line_visdef = mgraph
-                        (
-                            legend            : 'on',
-                            graph_line_colour : graph_line_colours[n]
-                        )
-
-                        to_plot = to_plot & [line_plot, line_visdef]
-
-                        # we'll need to combine all the actual values for later
-                        all_yvals = all_yvals & values(file_nc)
-
-                    #else
-                        #print ('Variable ', vardef.vars[i], ' has BAD dims ', xdim_name)
-                    #end if
-
-                else  # 2D matrix plot
-
-                    a = 1 # for syntax
-
-                    if args.mode = 'batch' or  n = 1  or compmode = 'difference' then
-
-                        #xdim_index = find(vardef.reserved_var_sizes, dims[1])
-                        #if xdim_index <> nil then
-                            plot_this_var = 1
-                            xdim_name = dim_names[1] #vardef.reserved_var_names[xdim_index]
-                            ydim_name = dim_names[2] #vardef.reserved_var_names[ydim_index]
-                            ydim_idx = find(vardef.reserved_var_names, ydim_name)
-
-                            if ydim_idx <> nil then
-
-                                if compmode = 'difference' then
-                                    setcurrent(netcdf_2, i)
-                                    file_nc = file_nc - netcdf_2
-                                end if
-
-                                # visualiser to plot the data
-                                matrix_plot = netcdf_visualiser
-                                (
-                                    netcdf_plot_type      : "xy_matrix",
-                                    netcdf_x_variable     : xdim_name,
-                                    netcdf_y_variable     : ydim_name,
-                                    netcdf_value_variable : vardef.vars[i],
-                                    netcdf_data           : file_nc
-                                )
-
-                                # visual definition to apply to the plot
-                                shade = mcont
-                                (
-                                    legend                         : "on",
-                                    contour                        : "off",
-                                    contour_highlight              : "off",
-                                    contour_shade                  : "on",
-                                    contour_shade_method           : "area_fill",
-                                    contour_shade_max_level_colour : "red",
-                                    contour_shade_min_level_colour : "blue",
-                                    contour_shade_colour_direction : "clockwise",
-                                    contour_label                  : "off"
-                                )
-
-                                to_plot = to_plot & [matrix_plot, shade]
-
-                                # store the y values so we can later get a nice y-axis
-                                ydim_index = find(vardef.vars, ydim_name)
-                                setcurrent(file_nc, ydim_index)
-
-                                all_yvals = all_yvals & values(file_nc)
-
-                            else
-                                print ('Variable ', vardef.vars[i], ' has BAD dims ', ydim_name)
-                                plot_this_var = 0
-                            end if
-                        #else
-                        #    print ('Variable ', vardef.vars[i], ' has BAD dims ', xdim_name)
-                        #end if
-
-                    else
-
-                        print('Cannot (yet) overlay plots in interactive mode - not plotting ', vardef.vars[i])
-                        plot_this_var = 0
-
-                    end if # args.mode = 'batch', etc
-
-                end if  # 1D/2D
-
-            end for  # for each netCDF
-
-
-
-            if plot_this_var then
-
-
-                # ----------------------------------
-                # get information for the plot title
-                # ----------------------------------
-                setcurrent(file_nc, i)
-                attrs = attributes(file_nc)
-
-                gattrs         = global_attributes(file_nc)
-                att_title      = gattrs.title
-                att_start_day  = gattrs.start_day
-                att_start_hour = gattrs.start_hour
-
-                title_line_1 = att_title
-                title_line_2 = 'Start day: ' & att_start_day & ' Start hour: ' & att_start_hour
-                title_line_3 = ''
-                if attrs.long_name <> nil then
-                    title_line_3 = title_line_3 & attrs.long_name
-                end if
-                if attrs.units <> nil then
-                    title_line_3 = title_line_3 & ' (' & attrs.units & ')'
-                end if
-                if compmode = 'difference' then
-                    title_line_3 = title_line_3 & ' [difference]'
-                end if
-
-                title = mtext
-                (
-                    text_line_count : 3,
-                    text_line_1     : title_line_1,
-                    text_line_2     : title_line_2,
-                    text_line_3     : title_line_3,
-                    text_font_size  : 0.35
-                )
-
-
-
-                # ------------------------------
-                # get information for the x-axis
-                # ------------------------------
-
-                xdim_index = find(vardef.vars, xdim_name)
-                setcurrent(file_nc, xdim_index)
-                attrs   = attributes(file_nc)
-                x_name  = xdim_name
-                x_units = attrs.units
-                if x_units = nil then
-                    x_units_text = ''
-                else
-                    x_units_text = ' (' & x_units & ')'
-                end if
-                x_axis_title = x_name & x_units_text
-
-
-
-                # ------------------------------
-                # get information for the y-axis
-                # ------------------------------
-
-                # figure out the 'global' min/max for all data files
-                ymin = minvalue(all_yvals)
-                ymax = maxvalue(all_yvals)
-
-                if count(dim_names) = 1 then
-                    adjustment = 0.1 * (ymax - ymin)  # leave a 10% gap around the y limits
-                    if ymin <> 0 then ymin = ymin - adjustment end if
-                    ymax = ymax + adjustment
-
-                    if ymin = ymax then
-                        ymin = ymin - 1
-                        ymax = ymax + 1
-                    end if
-                else
-                    temp = ymin   # matrixc plot - turn the y-axis upside-down
-                    ymin = ymax
-                    ymax = temp
-                end if
-
-
-                if count(dim_names) = 1 then
-                    # define the legend
-                    legend_curves = mlegend
-                    (
-                        legend_display_type     : "disjoint",
-                        legend_text_composition : "user_text_only",
-                        legend_text_font_size   : 0.3,
-                        legend_user_lines       : ['expt 1', 'expt 2']
-                    )
-                    to_plot = to_plot & [legend_curves]
-                end if
-
-                # -----------
-                # do the plot
-                # -----------
-
-                dw = scm_build_layout(ymin, ymax, x_axis_title)
-                plot(dw, to_plot, title)
-                newpage(dw)
-
-            end if  # plot_this_var
-
-        end if #if not(i in reserved_var_indexes)
-    end for  
-
-
-
-    function scm_get_var_sizes (nc: netcdf, all_vars: list, vars: list)
-
-        sizes = nil
-
-        for i = 1 to count(vars) do
-            index = find(all_vars, vars[i])
-            setcurrent(nc, index)
-            dims = dimensions(nc)
-            sizes = sizes & [dims[1]]
-        end for
-
-        return sizes
-
-    end scm_get_var_sizes
-
-
-    function scm_build_layout(ymin, ymax, xtitle)
-
-
-        horizontal_axis = maxis
-        (
-            axis_title_text : xtitle
-        )
-
-
-        # view & page definition
-        cview = cartesianview
-        (  
-            x_automatic  : 'on',
-            #y_automatic  : 'on'
-            y_min : ymin,
-            y_max : ymax,
-            horizontal_axis : horizontal_axis
-            #vertical_axis  : vertical_axis
-        )
-
-        page = plot_page
-        (  
-            view   : cview
-        )  
-
-        # superpage definition 
-        display_window = plot_superpage
-        (  
-            layout_size         : "a4", 
-            layout_orientation  : "landscape", 
-            custom_width        : 29.0, 
-            custom_height       : 21.0, 
-            pages               : [ page ] 
-         ) 
-
-        return display_window
-
-    end scm_build_layout
-
-
-
-    function make_path_absolute(path: string)
-
-        first_char = substring(path, 1, 1)
-        if first_char <> '/' then
-            path = getenv('PWD') & "/" & path
-        end if
-        return path
-
-    end make_path_absolute
-
-
-    function parse_netcdf_vars(nc: netcdf)
-
-        def = ()  # we will returns a definition will various bits of information
-
-        # get the list of variables in the file
-        def.vars = variables(nc)
-
-
-        # get the lists of 'special' variables
-        nlev_var_index   = find(def.vars, 'nlev')
-        nlevp1_var_index = find(def.vars, 'nlevp1')
-        nlevs_var_index  = find(def.vars, 'nlevs')
-        time_var_index   = find(def.vars, 'time')
-
-        if (nlev_var_index = nil or nlevp1_var_index = nil or nlevs_var_index = nil or time_var_index = nil) then
-            fail ('ERROR: Expected to find nlev, nlevp1, nlevs and time variables in netCDF file ', nc_filename)
-        end if
-
-
-        def.reserved_var_indexes = [nlev_var_index, nlevp1_var_index, nlevs_var_index, time_var_index]
-        def.reserved_var_names   = ['nlev', 'nlevp1', 'nlevs', 'time']
-        def.reserved_var_sizes   = scm_get_var_sizes (nc, def.vars, def.reserved_var_names)
-
-
-        # store their names to be used on the y-axis
-        reserved_var_long_names = nil
-        for j = 1 to count(def.reserved_var_indexes) do
-            idx = def.reserved_var_indexes[j]
-            setcurrent(nc, idx)
-            attrs = attributes(nc)
-            reserved_var_long_names = reserved_var_long_names & [attrs.long_name]
-        end for
-
-        def.reserved_var_long_names = reserved_var_long_names
-
-
-        return def
-
-    end parse_netcdf_vars
-
-
-
-
-    function generate_vars_help(nc: netcdf, def: definition)
-
-
-        # parse the file to get the lists of available 1 and 2d variables
-
-        vars_1d = nil
-        vars_2d = nil
-        for i = 1 to count(def.vars) do
-            #print(i, tab, def.vars[i])
-            if not(i in def.reserved_var_indexes) then
-                setcurrent(nc, i)
-                dims = dimensions(nc)
-                if count(dims) = 1 then
-                    vars_1d = vars_1d & [def.vars[i]]
-                else if count(dims) = 2 then
-                    #if dims[2] = 91 then
-                       vars_2d = vars_2d & [def.vars[i]]
-                    #end if
-                end if
-            end if
-        end for
-
-        vars_1d = vars_1d
-        vars_2d = vars_2d
-
-
-        t = tmpfile()
-        f = file(t)
-
-        write(f, "1D variables", newline)
-        write(f, "------------", newline)
-        for i = 1 to count(vars_1d) do
-            write(f, vars_1d[i], newline)
-        end for
-
-        write(f, newline)
-        write(f, "2D variables", newline)
-        write(f, "------------", newline)
-        for i = 1 to count(vars_2d) do
-            write(f, vars_2d[i], newline)
-        end for
-
-
-        f = 0
-
-        return t
-    end generate_vars_help
-
-
-
-end mvl_plot_scm_data
-
diff --git a/share/metview/app-defaults/CommonMacroFuncs/.mvl_plot_scm_data_20130121_1343 b/share/metview/app-defaults/CommonMacroFuncs/.mvl_plot_scm_data_20130121_1343
deleted file mode 100644
index 46e69dd..0000000
--- a/share/metview/app-defaults/CommonMacroFuncs/.mvl_plot_scm_data_20130121_1343
+++ /dev/null
@@ -1,921 +0,0 @@
-# Metview Macro
-
-# **************************** LICENSE START ***********************************
-#
-# Copyright 2012 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 ************************************
-
-# **************************************************************************
-# Function      : mvl_plot_scm_data
-#
-# Syntax        : mvl_plot_scm_data (definition)
-#
-# Author (date) : Iain Russell (05/12/2012)
-#
-# Category      : VISUAL
-#
-# OneLineDesc   : Creates plots interactively or in batch from SCM netCDF data
-#
-# Description   : Creates plots interactively or in batch from SCM netCDF data
-#
-# Parameters    : The input definition can contain some or all of the following
-#                 members. Note that it is valid to provide an empty definition,
-#                 in which case all input will be taken from the user interface.
-#                   mode - 'interactive' (user interface pops up) or 'batch'
-#                   netcdf_1 - path to the 'main' netCDF file
-#                   netcdf_2 - path to the 'comparison' netCDF file
-#                   comparison_mode - 'overlay' or 'difference'
-#                   output_mode - 'postscript' or 'screen'
-#                   output_path - only if mode='batch'. Do not supply an extension.
-#                   param_selection - 'list', 'file' or 'all'
-#                   param_list_path - path to a text file containing each parameter name on a new line
-#                   param_list - if param_selection is 'list'
-#
-# Return Value  : None
-#
-# Dependencies  : None
-#
-# Example Usage : 
-#                 # default: pop up a user interface to get user input to the plot
-#                   scm_plot_params = ()
-#                   mvl_plot_scm_data(scm_plot_params)
-#
-#                 # batch usage: supply parameters here; no user interface
-#                   scm_plot_params = 
-#                   (
-#                       mode            : 'batch',
-#                       netcdf_1        : 'scm_out.nc',
-#                       netcdf_2        : 'scm_out_2.nc',
-#                       comparison_mode : 'overlay',
-#                       plot_type       : 'profile',  # 'profile' is the only accepted string here; anthing else means 'not profile'
-#                       output_mode     : 'ps',
-#                       output_path     : 'scm_out',
-#                       param_selection : 'list',
-#                       param_list_path : nil,
-#                       param_list      : ['t_skin', 'top_lwrad_clr', 'u_wind_10m'],
-#                       times           : [0, 'to', 'last', 'by', 180]
-#                   )
-#
-#                   mvl_plot_scm_data(scm_plot_params)
-#
-# **************************************************************************
-
-function mvl_plot_scm_data
-
-    args = ()
-
-    arglist = arguments()
-
-    if count(arglist) <> 0 then
-        args = arglist[1]
-    end if
-
-print(arglist)
-    # sanity check on the input arguments
-
-    if args.mode <> nil then
-        if args.mode <> 'interactive' and args.mode <> 'batch' then
-            fail("Argument 'mode' should be 'interactive' or 'batch'. It is ", args.mode)
-        end if
-    end if
-
-    if args.comparison_mode <> nil then
-        if args.comparison_mode <> 'overlay' and args.comparison_mode <> 'difference' then
-            fail("Argument 'comparison_mode' should be 'overlay' or 'difference'. It is ", args.comparison_mode)
-        end if
-    end if
-
-    if args.mode <> nil then
-        if args.output_mode <> 'postscript' and args.output_mode <> 'screen' then
-            fail("Argument 'output_mode' should be 'postscript' or 'screen'. It is ", args.output_mode)
-        end if
-    end if
-
-    if args.param_selection <> nil then
-        if args.param_selection <> 'list' and args.param_selection <> 'file' and args.param_selection <> 'all' then
-            fail("Argument 'param_selection' should be 'list', 'file' or 'all'. It is ", args.param_selection)
-        end if
-    end if
-
-
-    # fill in the argument definition with defaults if not specified
-
-    if args.mode = nil then
-        args.mode = 'interactive'
-    end if
-
-    if args.comparison_mode = nil then
-        args.comparison_mode = 'overlay'
-    end if
-
-    if args.param_selection = nil then
-        args.param_selection = 'list'
-    end if
-
-    if args.output_path = nil then
-        args.output_path = 'scm_out'
-    end if
-
-    if args.output_mode = nil then
-        args.output_mode = 'screen'
-    end if
-
-
-    
-    # make output_path into an absolute path
-
-    args.output_path = make_path_absolute(args.output_path)
-
-
-    # when running from the command line, we have to force certain options
-
-    if runmode() = 'batch' then
-        args.mode        = 'batch'
-        args.output_mode = 'postscript'
-    end if
-
-
-    #print(args)
-
-
-    if args.mode = 'interactive' then
-
-        # ---------------- #
-        # interactive mode #
-        # ---------------- #
-
-
-        ui_comparison_mode = option_menu
-        (
-            name    : "comparison mode",
-            values  : ["overlay", "difference"],
-            default : args.comparison_mode
-        )
-
-        ui_netcdf_1 = icon
-        (
-            name  : "input data 1",
-            class : "NETCDF"
-        )
-
-        ui_netcdf_2 = icon
-        (
-            name  : "input data 2",
-            class : "NETCDF"
-        )
-
-        input = dialog([ui_comparison_mode, ui_netcdf_1, ui_netcdf_2])
-
-        compmode  = input['comparison mode']
-        netcdf_1  = input['input data 1']
-        netcdf_2  = input['input data 2']
-
-        if netcdf_1 = nil then
-            fail('Must supply at least one netCDF icon as input')
-        end if
-
-
-        # ------------------------------------------
-        # user dialog 3 - ask for the parameter(s)
-        # ------------------------------------------
-
-        # parse the parameters from the input netCDF file
-
-        vardef = parse_netcdf_vars(netcdf_1)
-
-        t = generate_vars_help(netcdf_1, vardef)
-
-        dialog_options = nil
-
-        ui_param_selection_mode = option_menu
-        (
-            name    : "parameter selection",
-            values  : ["list", "file", "all"],
-            default : args.param_selection
-        )
-
-        ui_param_list = any
-        (
-            name    : "parameter list",
-            default : 't',
-            help    : "help_script",
-            #help_script_command : "echo list of forward-slash-separated parameter names"
-            #help_script_command : "
-            help_script_command : "echo list of forward-slash-separated parameter names; cat " & t
-        )
-
-        ui_param_file = icon
-        (
-            name  : "parameter file",
-            class : "NOTE"
-        )
-
-        ui_param_output_mode = option_menu
-        (
-            name    : "output mode",
-            values  : ["screen", "postscript"],
-            default : args.output_mode
-        )
-
-        outpath = args.output_path
-
-        ui_outpath = any
-        (
-            name    : "output file path",
-            default : outpath
-        )
-
-
-        input = dialog([ui_param_selection_mode, ui_param_list, ui_param_file, ui_param_output_mode, ui_outpath])
-
-        param_selection_mode = input["parameter selection"]
-
-        if param_selection_mode = 'list' then   # user provided an inline list of parameters
-            selected_vars = input['parameter list']
-
-        else if param_selection_mode = 'file' then # user gave a file with a list of parameters to plot
-            parmlist = input["parameter file"]
-
-            if parmlist <> nil then 
-                parmlistpath = parmlist.PATH
-            else
-                fail("Parameter selection was set to 'file', but no icon was supplied")
-            end if
-
-        else # put all the available variable indexes into a list - we will try to plot them all
-            selected_vars = vardef.vars
-        end if
-
-
-        outmode  = input["output mode"]
-        outpath  = input["output file path"]
-
-    else
-
-        # ---------- #
-        # batch mode #
-        # ---------- #
-
-        compmode = args.comparison_mode
-
-        netcdf_1_path = args.netcdf_1
-        if netcdf_1_path = nil then
-            fail('Must supply netcdf_1')
-        else
-            netcdf_1_path = make_path_absolute(netcdf_1_path)
-            netcdf_1 = read(netcdf_1_path)
-        end if
-
-        netcdf_2 = nil
-        netcdf_2_path = args.netcdf_2
-        if netcdf_2_path <> nil then
-            netcdf_2_path = make_path_absolute(netcdf_2_path)
-            netcdf_2 = read(netcdf_2_path)
-        end if
-
-
-        param_selection_mode = args.param_selection
-
-        if param_selection_mode = 'list' then   # user provided an inline list of parameters
-            selected_vars = args.param_list
-        else if param_selection_mode = 'file' then # user gave a file with a list of parameters to plot
-            parmlistpath = param_list_path
-        else # put all the available variable indexes into a list - we will try to plot them all
-            selected_vars = vars
-        end if
-
-
-        plot_type = args.plot_type
-        times     = args.times
-
-
-        outmode = args.output_mode
-        outpath = args.output_path
-
-
-        # Read netcdf file
-        file_nc = netcdf_1
-
-
-        # parse the parameters from it
-        vardef = parse_netcdf_vars(file_nc)
-
-
-    end if # interactive or batch
-
-
-
-
-    # ----------------------------------------- #
-    # User input obtained, start the processing #
-    # ----------------------------------------- #
-
-
-    # read the list of parameters from a file?
-    if param_selection_mode = 'file' then
-        parmlistpath = parmlist.PATH
-        selected_vars = read(parmlistpath)
-    end if
-
-
-    # (hopefully temporary) mesaure: since we can't yet plot multiple parameters
-    # interactively, we will have to plot just the first one
-
-    if outmode = 'screen' then
-        if count(selected_vars) > 1 then
-            print('Can only plot 1 variable in interactive mode - will plot just the first one')
-            selected_vars = [selected_vars[1]]
-        end if
-    end if
-
-
-    # construct a list of variable indexes from their names
-    plot_var_indexes = nil
-    for i = 1 to count(selected_vars) do
-        index = find(vardef.vars, selected_vars[i])
-        if index = nil then
-            fail('Could not find variable ' & selected_vars[i] & ' in netCDF file')
-        else
-            plot_var_indexes = plot_var_indexes & [index]
-        end if
-    end for
-
-
-    print('Plotting parameters: ', selected_vars, ' ; indexes: ', plot_var_indexes)
-
-
-
-    if outmode = 'postscript' then
-        print('Will generate output plot in ', outpath)
-        psfile = ps_output(output_name : outpath)
-        setoutput(psfile)
-    end if
-
-
-
-    # if plotting profiles, then expand the time steps
-    # e.g.
-    #   0/to/last/by/180
-    #   900,1800,2700
-    #   0/to/2700
-
-    if plot_type = 'profile' then
-
-        if type(times) <> 'list' then
-            times = [times]
-        end if
-
-        first_time = times[1] * 60  # convert from minutes (user) to seconds (file)
-
-        if type(times[2]) = 'string' then   # ASSUME a 'TO' b  (1,2,3)
-            second_time = times[3]
-
-            if type(second_time) = 'string' then # ASSUME a 'TO' 'LAST'
-                setcurrent(netcdf_1, vardef.time_var_index)  # get the last time
-                all_times = values(netcdf_1)
-                second_time = all_times[count(all_times)]  # already in seconds
-            end if
-
-            if count(times) > 4 then  # ASSUME a 'TO' b 'BY' s
-                timestep = times[5] * 60  # # convert from minutes (user) to seconds (file)
-
-                times = nil # construct the list of times
-                for t = first_time to second_time by timestep do
-                    times = times & [t]
-                end for
-            else
-                # no step given - use all available times between first and second
-                times_to_use = (all_times >= first_time) * (all_times <= second_time)
-                times = filter(all_times, times_to_use)
-            end if
-
-        else  # 'times' is just a list of times which we can use directly
-
-            times = times * 60  # convert from minutes (user) to seconds (file)
-
-        end if
-
-        print('Computed times: ', times)
-
-    end if
-
-
-
-
-    # convert seconds to days
-    #setcurrent(file_nc, 4)
-    #file_nc = file_nc / (60*60*24)
-
-
-
-    # decide whether to plot both netCDF files in overlay mode, or to compute
-    # the difference and plot that by itself
-
-    nc_files = nil
-
-    if compmode = 'overlay' then
-        if netcdf_1 <> nil then nc_files = nc_files & [netcdf_1] end if
-        if netcdf_2 <> nil then nc_files = nc_files & [netcdf_2] end if
-    else
-        a = 1 # for syntax correctness
-        if netcdf_2 = nil then
-            fail('Must supply a second netCDF icon')
-        end if
-
-        #setcurrent(netcdf_1, i)
-        #setcurrent(netcdf_2, i)
-        nc_files = [netcdf_1]# - netcdf_2]
-    end if
-
-
-
-
-    graph_line_colours = ['blue', 'red']
-
-
-
-    for j = 1 to count(plot_var_indexes) do
-
-        i = plot_var_indexes[j]
-
-        if not(i in vardef.reserved_var_indexes) and i<>nil then
-
-            # -------------------------------------------
-            # plotting - gather plot info for each netCDF
-            # -------------------------------------------
-
-            to_plot  = nil
-            all_yvals = nil
-            plot_this_var = 0
-
-            for n = 1 to count(nc_files) do
-
-                file_nc = nc_files[n]
-
-                # look at this variable to see what its dimensions are
-                setcurrent(file_nc, i)
-                dim_names = dimension_names(file_nc)
-                #print(i, tab, dim_names)
-                if count(dim_names) = 1 then
-                    xdim_name = dim_names[1]
-                        plot_this_var = 1
-
-                        if compmode = 'difference' then
-                            setcurrent(netcdf_2, i)
-                            file_nc = file_nc - netcdf_2
-                        end if
-
-
-                        # visualiser to plot the data
-                        line_plot = netcdf_visualiser
-                        (
-                            netcdf_plot_type      : "xy_points",
-                            netcdf_x_variable     : xdim_name,
-                            netcdf_y_variable     : vardef.vars[i],
-                            netcdf_value_variable : vardef.vars[i],
-                            netcdf_data           : file_nc
-                        )
-
-                        # visual definition to apply to the plot
-                        line_visdef = mgraph
-                        (
-                            legend            : 'on',
-                            graph_line_colour : graph_line_colours[n]
-                        )
-
-                        to_plot = to_plot & [line_plot, line_visdef]
-
-                        # we'll need to combine all the actual values for later
-                        all_yvals = all_yvals & values(file_nc)
-
-                        y_axis_title = ''
-                    #else
-                        #print ('Variable ', vardef.vars[i], ' has BAD dims ', xdim_name)
-                    #end if
-
-                else  # 2D matrix plot
-
-                    a = 1 # for syntax
-
-                    if args.mode = 'batch' or  n = 1  or compmode = 'difference' then
-
-                        #xdim_index = find(vardef.reserved_var_sizes, dims[1])
-                        #if xdim_index <> nil then
-                            plot_this_var = 1
-                            xdim_name = dim_names[1] #vardef.reserved_var_names[xdim_index]
-                            ydim_name = dim_names[2] #vardef.reserved_var_names[ydim_index]
-                            ydim_idx = find(vardef.reserved_var_names, ydim_name)
-
-                            if ydim_idx <> nil then
-
-                                if compmode = 'difference' then
-                                    setcurrent(netcdf_2, i)
-                                    file_nc = file_nc - netcdf_2
-                                end if
-
-
-                                if plot_type = 'profile' then   # PROFILE CURVES
-
-                                    xdim_name =  vardef.vars[i]
-                                    ydim_name = dim_names[2]
-                                    ydim_idx = find(vardef.reserved_var_names, ydim_name)
-
-                                    rgb_inc = 1/(count(times) + 1)
-
-                                    for ti = 1 to count(times) do
-
-                                        ncvis = netcdf_visualiser
-                                        (
-                                            netcdf_plot_type         : "xy_points",
-                                            netcdf_x_variable        : vardef.vars[i],
-                                            netcdf_y_variable        : ydim_name,
-                                            netcdf_value_variable    : vardef.vars[i],
-                                            netcdf_dimension_setting : ["time/"&times[ti]],
-                                            netcdf_data              : file_nc
-                                        )
-
-                                        if times[ti] = 0 then
-                                            r = 0
-                                            g = 0
-                                            b = 0
-                                        else
-                                            qq = 1 # for syntax
-                                            if n = 1 then   # first netCDF file
-                                                r = ti * rgb_inc
-                                                g = ti * rgb_inc
-                                                b = 0.75 + (ti * rgb_inc * 0.25)
-                                            else           # second netCDF file
-                                                r = 0.75 + (ti * rgb_inc * 0.25)
-                                                g = ti * rgb_inc
-                                                b = ti * rgb_inc
-                                            end if
-                                        end if
-                                        rgb = 'RGB(' & r & ',' & g & ',' & b & ')'
-                                        #print(rgb)
-
-                                        gp = mgraph(graph_line_colour : rgb)
-
-                                        to_plot = to_plot & [ncvis, gp]
-
-                                    end for
-
-                                else   # MATRIX
-
-                                    xdim_name = dim_names[1] #vardef.reserved_var_names[xdim_index]
-                                    ydim_name = dim_names[2] #vardef.reserved_var_names[ydim_index]
-                                    ydim_idx = find(vardef.reserved_var_names, ydim_name)
-
-                                    # visualiser to plot the data
-                                    matrix_plot = netcdf_visualiser
-                                    (
-                                        netcdf_plot_type      : "xy_matrix",
-                                        netcdf_x_variable     : xdim_name,
-                                        netcdf_y_variable     : ydim_name,
-                                        netcdf_value_variable : vardef.vars[i],
-                                        netcdf_data           : file_nc
-                                    )
-
-                                    # visual definition to apply to the plot
-                                    if n = 1 then   # first netCDF, shaded
-                                        matrix_cont = mcont
-                                        (
-                                            legend                         : "on",
-                                            contour                        : "off",
-                                            contour_highlight              : "off",
-                                            contour_shade                  : "on",
-                                            contour_shade_method           : "area_fill",
-                                            contour_shade_max_level_colour : "red",
-                                            contour_shade_min_level_colour : "blue",
-                                            contour_shade_colour_direction : "clockwise",
-                                            contour_label                  : "off"
-                                        )
-                                    else
-                                        matrix_cont = mcont
-                                        (
-                                            contour                 : "on",
-                                            contour_line_colour     : 'black',
-                                            contour_line_thickness  : 2,
-                                            contour_highlight       : "off",
-                                            contour_label           : "on"
-                                        )
-                                    end if
-
-                                    to_plot = to_plot & [matrix_plot, matrix_cont]
-
-
-                                end if
-
-                                # store the y values so we can later get a nice y-axis
-                                ydim_index = find(vardef.vars, ydim_name)
-                                setcurrent(file_nc, ydim_index)
-
-                                all_yvals = all_yvals & values(file_nc)
-
-
-                                # y-axis title
-                                attrs = attributes(file_nc)
-                                y_axis_title = attrs.long_name
-                                if y_axis_title = nil then y_axis_title = '' end if
-                            else
-                                print ('Variable ', vardef.vars[i], ' has BAD dims ', ydim_name)
-                                plot_this_var = 0
-                            end if
-                        #else
-                        #    print ('Variable ', vardef.vars[i], ' has BAD dims ', xdim_name)
-                        #end if
-
-                    else
-
-                        print('Cannot (yet) overlay plots in interactive mode - not plotting ', vardef.vars[i])
-                        plot_this_var = 0
-
-                    end if # args.mode = 'batch', etc
-
-                end if  # 1D/2D
-
-            end for  # for each netCDF
-
-
-
-            if plot_this_var then
-
-
-                # ----------------------------------
-                # get information for the plot title
-                # ----------------------------------
-                setcurrent(file_nc, i)
-                attrs = attributes(file_nc)
-
-                gattrs         = global_attributes(file_nc)
-                att_title      = gattrs.title
-                att_start_day  = gattrs.start_day
-                att_start_hour = gattrs.start_hour
-
-                title_line_1 = att_title
-                title_line_2 = 'Start day: ' & att_start_day & ' Start hour: ' & att_start_hour
-                title_line_3 = ''
-                if attrs.long_name <> nil then
-                    title_line_3 = title_line_3 & attrs.long_name
-                end if
-                if attrs.units <> nil then
-                    title_line_3 = title_line_3 & ' (' & attrs.units & ')'
-                end if
-                if compmode = 'difference' then
-                    title_line_3 = title_line_3 & ' [difference]'
-                end if
-
-                title = mtext
-                (
-                    text_line_count : 3,
-                    text_line_1     : title_line_1,
-                    text_line_2     : title_line_2,
-                    text_line_3     : title_line_3,
-                    text_font_size  : 0.35
-                )
-
-
-
-                # ------------------------------
-                # get information for the x-axis
-                # ------------------------------
-
-                xdim_index = find(vardef.vars, xdim_name)
-                setcurrent(file_nc, xdim_index)
-                attrs   = attributes(file_nc)
-                x_name  = xdim_name
-                x_units = attrs.units
-                if x_units = nil then
-                    x_units_text = ''
-                else
-                    x_units_text = ' (' & x_units & ')'
-                end if
-                x_axis_title = x_name & x_units_text
-
-
-
-                # ------------------------------
-                # get information for the y-axis
-                # ------------------------------
-
-                # figure out the 'global' min/max for all data files
-                ymin = minvalue(all_yvals)
-                ymax = maxvalue(all_yvals)
-
-                if count(dim_names) = 1 then
-                    adjustment = 0.1 * (ymax - ymin)  # leave a 10% gap around the y limits
-                    if ymin <> 0 then ymin = ymin - adjustment end if
-                    ymax = ymax + adjustment
-
-                    if ymin = ymax then
-                        ymin = ymin - 1
-                        ymax = ymax + 1
-                    end if
-                else
-                    temp = ymin   # matrixc plot - turn the y-axis upside-down
-                    ymin = ymax
-                    ymax = temp
-                end if
-
-
-                if count(dim_names) = 1 then
-                    # define the legend
-                    legend_curves = mlegend
-                    (
-                        legend_display_type     : "disjoint",
-                        legend_text_composition : "user_text_only",
-                        legend_text_font_size   : 0.3,
-                        legend_user_lines       : ['expt 1', 'expt 2']
-                    )
-                    to_plot = to_plot & [legend_curves]
-                end if
-
-                # -----------
-                # do the plot
-                # -----------
-
-                dw = scm_build_layout(ymin, ymax, x_axis_title, y_axis_title)
-                plot(dw, to_plot, title)
-                newpage(dw)
-
-            end if  # plot_this_var
-
-        end if #if not(i in reserved_var_indexes)
-    end for  
-
-
-
-    function scm_get_var_sizes (nc: netcdf, all_vars: list, vars: list)
-
-        sizes = nil
-
-        for i = 1 to count(vars) do
-            index = find(all_vars, vars[i])
-            setcurrent(nc, index)
-            dims = dimensions(nc)
-            sizes = sizes & [dims[1]]
-        end for
-
-        return sizes
-
-    end scm_get_var_sizes
-
-
-    function scm_build_layout(ymin, ymax, xtitle, ytitle)
-
-
-        horizontal_axis = maxis
-        (
-            axis_title_text : xtitle
-        )
-
-
-        vertical_axis = maxis
-        (
-            axis_orientation : 'vertical',
-            axis_title_text  : ytitle
-        )
-
-
-        # view & page definition
-        cview = cartesianview
-        (  
-            x_automatic  : 'on',
-            #y_automatic  : 'on'
-            y_min : ymin,
-            y_max : ymax,
-            horizontal_axis : horizontal_axis,
-            vertical_axis   : vertical_axis
-        )
-
-        page = plot_page
-        (  
-            view   : cview
-        )  
-
-        # superpage definition 
-        display_window = plot_superpage
-        (  
-            layout_size         : "a4", 
-            layout_orientation  : "landscape", 
-            custom_width        : 29.0, 
-            custom_height       : 21.0, 
-            pages               : [ page ] 
-         ) 
-
-        return display_window
-
-    end scm_build_layout
-
-
-
-    function make_path_absolute(path: string)
-
-        first_char = substring(path, 1, 1)
-        if first_char <> '/' then
-            path = getenv('PWD') & "/" & path
-        end if
-        return path
-
-    end make_path_absolute
-
-
-    function parse_netcdf_vars(nc: netcdf)
-
-        def = ()  # we will returns a definition will various bits of information
-
-        # get the list of variables in the file
-        def.vars = variables(nc)
-
-
-        # get the lists of 'special' variables
-        nlev_var_index   = find(def.vars, 'nlev')
-        nlevp1_var_index = find(def.vars, 'nlevp1')
-        nlevs_var_index  = find(def.vars, 'nlevs')
-        time_var_index   = find(def.vars, 'time')
-
-        if (nlev_var_index = nil or nlevp1_var_index = nil or nlevs_var_index = nil or time_var_index = nil) then
-            fail ('ERROR: Expected to find nlev, nlevp1, nlevs and time variables in netCDF file ', nc_filename)
-        end if
-
-
-        def.reserved_var_indexes = [nlev_var_index, nlevp1_var_index, nlevs_var_index, time_var_index]
-        def.reserved_var_names   = ['nlev', 'nlevp1', 'nlevs', 'time']
-        def.reserved_var_sizes   = scm_get_var_sizes (nc, def.vars, def.reserved_var_names)
-        def.time_var_index       = time_var_index
-
-
-        # store their names to be used on the y-axis
-        reserved_var_long_names = nil
-        for j = 1 to count(def.reserved_var_indexes) do
-            idx = def.reserved_var_indexes[j]
-            setcurrent(nc, idx)
-            attrs = attributes(nc)
-            reserved_var_long_names = reserved_var_long_names & [attrs.long_name]
-        end for
-
-        def.reserved_var_long_names = reserved_var_long_names
-
-
-        return def
-
-    end parse_netcdf_vars
-
-
-
-
-    function generate_vars_help(nc: netcdf, def: definition)
-
-
-        # parse the file to get the lists of available 1 and 2d variables
-
-        vars_1d = nil
-        vars_2d = nil
-        for i = 1 to count(def.vars) do
-            #print(i, tab, def.vars[i])
-            if not(i in def.reserved_var_indexes) then
-                setcurrent(nc, i)
-                dims = dimensions(nc)
-                if count(dims) = 1 then
-                    vars_1d = vars_1d & [def.vars[i]]
-                else if count(dims) = 2 then
-                    #if dims[2] = 91 then
-                       vars_2d = vars_2d & [def.vars[i]]
-                    #end if
-                end if
-            end if
-        end for
-
-        vars_1d = vars_1d
-        vars_2d = vars_2d
-
-
-        t = tmpfile()
-        f = file(t)
-
-        write(f, "1D variables", newline)
-        write(f, "------------", newline)
-        for i = 1 to count(vars_1d) do
-            write(f, vars_1d[i], newline)
-        end for
-
-        write(f, newline)
-        write(f, "2D variables", newline)
-        write(f, "------------", newline)
-        for i = 1 to count(vars_2d) do
-            write(f, vars_2d[i], newline)
-        end for
-
-
-        f = 0
-
-        return t
-    end generate_vars_help
-
-
-
-end mvl_plot_scm_data
-
diff --git a/share/metview/app-defaults/Drawers/Data Access/.EcRegrid Mars Retrieval b/share/metview/app-defaults/Drawers/Data Access/.EcRegrid Mars Retrieval
new file mode 100644
index 0000000..f4a0e11
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Data Access/.EcRegrid Mars Retrieval	
@@ -0,0 +1,5 @@
+USER_INTERFACE,
+    ICON_CLASS = RETRIEVE_ECREGRID,
+    X          = 11,
+    Y          = 110
+
diff --git a/share/metview/app-defaults/Drawers/Data Access/EcRegrid Mars Retrieval b/share/metview/app-defaults/Drawers/Data Access/EcRegrid Mars Retrieval
new file mode 100644
index 0000000..eb0ba90
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Data Access/EcRegrid Mars Retrieval	
@@ -0,0 +1,3 @@
+RETRIEVE_ECREGRID,
+    GRID       = 1.5/1.5
+
diff --git a/share/metview/app-defaults/Drawers/Filters/.EcRegrid GRIB Filter b/share/metview/app-defaults/Drawers/Filters/.EcRegrid GRIB Filter
new file mode 100644
index 0000000..c83b886
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Filters/.EcRegrid GRIB Filter	
@@ -0,0 +1,5 @@
+USER_INTERFACE,
+    ICON_CLASS = READ_ECREGRID,
+    X          = 27,
+    Y          = 146
+
diff --git a/share/metview/app-defaults/Drawers/Filters/EcRegrid GRIB Filter b/share/metview/app-defaults/Drawers/Filters/EcRegrid GRIB Filter
new file mode 100644
index 0000000..b583da2
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Filters/EcRegrid GRIB Filter	
@@ -0,0 +1,2 @@
+READ_ECREGRID
+
diff --git a/share/metview/app-defaults/Drawers/Modules (Data)/.Average Data b/share/metview/app-defaults/Drawers/Modules (Data)/.Average Data
index bc47b08..efe259f 100644
--- a/share/metview/app-defaults/Drawers/Modules (Data)/.Average Data	
+++ b/share/metview/app-defaults/Drawers/Modules (Data)/.Average Data	
@@ -1,5 +1,5 @@
 USER_INTERFACE,
-    ICON_CLASS = PM_AVERAGE,
+    ICON_CLASS = MXAVERAGE,
     X          = 70,
     Y          = 10
 
diff --git a/share/metview/app-defaults/Drawers/Modules (Data)/.Cross Section Data b/share/metview/app-defaults/Drawers/Modules (Data)/.Cross Section Data
index ef2b702..fe43056 100644
--- a/share/metview/app-defaults/Drawers/Modules (Data)/.Cross Section Data	
+++ b/share/metview/app-defaults/Drawers/Modules (Data)/.Cross Section Data	
@@ -1,5 +1,5 @@
 USER_INTERFACE,
-    ICON_CLASS = PM_XSECT,
+    ICON_CLASS = MXSECTION,
     X          = 273,
     Y          = 10
 
diff --git a/share/metview/app-defaults/Drawers/Modules (Data)/.Hovmoeller Data b/share/metview/app-defaults/Drawers/Modules (Data)/.Hovmoeller Data
index 487397b..1b7a895 100644
--- a/share/metview/app-defaults/Drawers/Modules (Data)/.Hovmoeller Data	
+++ b/share/metview/app-defaults/Drawers/Modules (Data)/.Hovmoeller Data	
@@ -1,5 +1,5 @@
 USER_INTERFACE,
-    ICON_CLASS = HOVMOELLERDATA_FAMILY,
-    X          = 58,
-    Y          = 121
+    ICON_CLASS = MHOVMOELLERDATA_FAMILY,
+    X          = 482,
+    Y          = 6
 
diff --git a/share/metview/app-defaults/Drawers/Modules (Data)/.Relative Humidity b/share/metview/app-defaults/Drawers/Modules (Data)/.Relative Humidity
new file mode 100644
index 0000000..1329af6
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Modules (Data)/.Relative Humidity	
@@ -0,0 +1,5 @@
+USER_INTERFACE,
+    ICON_CLASS = RELHUM2,
+    X          = 235,
+    Y          = 310
+
diff --git a/share/metview/app-defaults/Drawers/Modules (Data)/.Rttov Run b/share/metview/app-defaults/Drawers/Modules (Data)/.Rttov Run
new file mode 100644
index 0000000..50c770c
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Modules (Data)/.Rttov Run	
@@ -0,0 +1,5 @@
+USER_INTERFACE,
+    ICON_CLASS = RTTOV_RUN,
+    X          = 15,
+    Y          = 84
+
diff --git a/share/metview/app-defaults/Drawers/Modules (Data)/.Vertical Profile Data b/share/metview/app-defaults/Drawers/Modules (Data)/.Vertical Profile Data
index a8ff46c..686760f 100644
--- a/share/metview/app-defaults/Drawers/Modules (Data)/.Vertical Profile Data	
+++ b/share/metview/app-defaults/Drawers/Modules (Data)/.Vertical Profile Data	
@@ -1,5 +1,5 @@
 USER_INTERFACE,
-    ICON_CLASS = PM_VPROF,
+    ICON_CLASS = MVPROFILE,
     X          = 312,
     Y          = 254
 
diff --git a/share/metview/app-defaults/Drawers/Modules (Data)/Average Data b/share/metview/app-defaults/Drawers/Modules (Data)/Average Data
index c6f0834..7eb6a1b 100644
--- a/share/metview/app-defaults/Drawers/Modules (Data)/Average Data	
+++ b/share/metview/app-defaults/Drawers/Modules (Data)/Average Data	
@@ -1,2 +1,2 @@
-PM_AVERAGE
+MXAVERAGE
 
diff --git a/share/metview/app-defaults/Drawers/Modules (Data)/Cross Section Data b/share/metview/app-defaults/Drawers/Modules (Data)/Cross Section Data
index 557e77c..54c36be 100644
--- a/share/metview/app-defaults/Drawers/Modules (Data)/Cross Section Data	
+++ b/share/metview/app-defaults/Drawers/Modules (Data)/Cross Section Data	
@@ -1,2 +1,2 @@
-PM_XSECT
+MXSECTION
 
diff --git a/share/metview/app-defaults/Drawers/Modules (Data)/Hovmoeller Data b/share/metview/app-defaults/Drawers/Modules (Data)/Hovmoeller Data
index c76cfdf..969ea23 100644
--- a/share/metview/app-defaults/Drawers/Modules (Data)/Hovmoeller Data	
+++ b/share/metview/app-defaults/Drawers/Modules (Data)/Hovmoeller Data	
@@ -1,6 +1,5 @@
-HOVMOELLERDATA_FAMILY,
-    AREA       = LINE_HOV,
-    APPLICATION = LINE_HOV
+MHOVMOELLERDATA_FAMILY,
+    APPLICATION = LINE_HOVM
 
-LINE_HOV
+LINE_HOVM
 
diff --git a/share/metview/app-defaults/Drawers/Modules (Data)/Relative Humidity b/share/metview/app-defaults/Drawers/Modules (Data)/Relative Humidity
new file mode 100644
index 0000000..afc3b76
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Modules (Data)/Relative Humidity	
@@ -0,0 +1 @@
+RELHUM2
\ No newline at end of file
diff --git a/share/metview/app-defaults/Drawers/Modules (Data)/Rttov Run b/share/metview/app-defaults/Drawers/Modules (Data)/Rttov Run
new file mode 100644
index 0000000..1a223bf
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Modules (Data)/Rttov Run	
@@ -0,0 +1,2 @@
+RTTOV_RUN
+
diff --git a/share/metview/app-defaults/Drawers/Modules (Data)/Vertical Profile Data b/share/metview/app-defaults/Drawers/Modules (Data)/Vertical Profile Data
index 093e298..90dce46 100644
--- a/share/metview/app-defaults/Drawers/Modules (Data)/Vertical Profile Data	
+++ b/share/metview/app-defaults/Drawers/Modules (Data)/Vertical Profile Data	
@@ -1,2 +1,2 @@
-PM_VPROF
+MVPROFILE
 
diff --git a/share/metview/app-defaults/Drawers/Modules (Plotting)/.Rttov Visualiser b/share/metview/app-defaults/Drawers/Modules (Plotting)/.Rttov Visualiser
new file mode 100644
index 0000000..551b661
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Modules (Plotting)/.Rttov Visualiser	
@@ -0,0 +1,5 @@
+USER_INTERFACE,
+    ICON_CLASS = RTTOV_VISUALISER,
+    X          = 872,
+    Y          = 141
+
diff --git a/share/metview/app-defaults/Drawers/Modules (Plotting)/Rttov Visualiser b/share/metview/app-defaults/Drawers/Modules (Plotting)/Rttov Visualiser
new file mode 100644
index 0000000..460ccbf
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Modules (Plotting)/Rttov Visualiser	
@@ -0,0 +1 @@
+RTTOV_VISUALISER
\ No newline at end of file
diff --git a/share/metview/app-defaults/Drawers/Views/.Annotation View b/share/metview/app-defaults/Drawers/Views/.Annotation View
new file mode 100644
index 0000000..de52230
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Views/.Annotation View	
@@ -0,0 +1,5 @@
+USER_INTERFACE,
+    ICON_CLASS = ANNOTATIONVIEW,
+    X          = 161,
+    Y          = 19
+
diff --git a/share/metview/app-defaults/Drawers/Views/.Average View b/share/metview/app-defaults/Drawers/Views/.Average View
index 0ac82b7..8170c50 100644
--- a/share/metview/app-defaults/Drawers/Views/.Average View	
+++ b/share/metview/app-defaults/Drawers/Views/.Average View	
@@ -1,5 +1,5 @@
 USER_INTERFACE,
-    ICON_CLASS = MAVERAGEVIEW,
+    ICON_CLASS = MXAVERAGEVIEW,
     X          = 532,
     Y          = 13
 
diff --git a/share/metview/app-defaults/Drawers/Views/.Cross Section View b/share/metview/app-defaults/Drawers/Views/.Cross Section View
index fe44e16..bf6c199 100644
--- a/share/metview/app-defaults/Drawers/Views/.Cross Section View	
+++ b/share/metview/app-defaults/Drawers/Views/.Cross Section View	
@@ -1,5 +1,5 @@
 USER_INTERFACE,
-    ICON_CLASS = MXSECTVIEW,
+    ICON_CLASS = MXSECTIONVIEW,
     X          = 207,
     Y          = 12
 
diff --git a/share/metview/app-defaults/Drawers/Views/.Hovmoeller View b/share/metview/app-defaults/Drawers/Views/.Hovmoeller View
new file mode 100644
index 0000000..3f0cb81
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Views/.Hovmoeller View	
@@ -0,0 +1,5 @@
+USER_INTERFACE,
+    ICON_CLASS = MHOVMOELLERVIEW,
+    X          = 299,
+    Y          = 91
+
diff --git a/share/metview/app-defaults/Drawers/Views/.Vertical Profile View b/share/metview/app-defaults/Drawers/Views/.Vertical Profile View
index 7699373..87fb7b5 100644
--- a/share/metview/app-defaults/Drawers/Views/.Vertical Profile View	
+++ b/share/metview/app-defaults/Drawers/Views/.Vertical Profile View	
@@ -1,5 +1,5 @@
 USER_INTERFACE,
-    ICON_CLASS = MVERTPROFVIEW,
+    ICON_CLASS = MVPROFILEVIEW,
     X          = 376,
     Y          = 12
 
diff --git a/share/metview/app-defaults/Drawers/Views/Annotation View b/share/metview/app-defaults/Drawers/Views/Annotation View
new file mode 100644
index 0000000..82ec20e
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Views/Annotation View	
@@ -0,0 +1 @@
+ANNOTATIONVIEW
\ No newline at end of file
diff --git a/share/metview/app-defaults/Drawers/Views/Average View b/share/metview/app-defaults/Drawers/Views/Average View
index 22b33c3..976dae0 100644
--- a/share/metview/app-defaults/Drawers/Views/Average View	
+++ b/share/metview/app-defaults/Drawers/Views/Average View	
@@ -1 +1 @@
-MAVERAGEVIEW
\ No newline at end of file
+MXAVERAGEVIEW
diff --git a/share/metview/app-defaults/Drawers/Views/Cross Section View b/share/metview/app-defaults/Drawers/Views/Cross Section View
index 5727809..d65e64b 100644
--- a/share/metview/app-defaults/Drawers/Views/Cross Section View	
+++ b/share/metview/app-defaults/Drawers/Views/Cross Section View	
@@ -1 +1 @@
-MXSECTVIEW
\ No newline at end of file
+MXSECTIONVIEW
diff --git a/share/metview/app-defaults/Drawers/Views/Hovmoeller View b/share/metview/app-defaults/Drawers/Views/Hovmoeller View
new file mode 100644
index 0000000..032b353
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Views/Hovmoeller View	
@@ -0,0 +1 @@
+MHOVMOELLERVIEW
\ No newline at end of file
diff --git a/share/metview/app-defaults/Drawers/Views/Vertical Profile View b/share/metview/app-defaults/Drawers/Views/Vertical Profile View
index 42abd97..466abdd 100644
--- a/share/metview/app-defaults/Drawers/Views/Vertical Profile View	
+++ b/share/metview/app-defaults/Drawers/Views/Vertical Profile View	
@@ -1 +1 @@
-MVERTPROFVIEW
\ No newline at end of file
+MVPROFILEVIEW
diff --git a/share/metview/app-defaults/Makefile.in b/share/metview/app-defaults/Makefile.in
index beded4a..6cc6bda 100644
--- a/share/metview/app-defaults/Makefile.in
+++ b/share/metview/app-defaults/Makefile.in
@@ -106,6 +106,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -121,6 +122,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -147,11 +150,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/share/metview/app-defaults/MvVersion b/share/metview/app-defaults/MvVersion
index 32e5402..f0f76fb 100644
--- a/share/metview/app-defaults/MvVersion
+++ b/share/metview/app-defaults/MvVersion
@@ -1 +1 @@
-4.3.11
\ No newline at end of file
+4.4.3
\ No newline at end of file
diff --git a/share/metview/app-defaults/MvVersionDetails b/share/metview/app-defaults/MvVersionDetails
index 171c760..4e8ea4e 100644
--- a/share/metview/app-defaults/MvVersionDetails
+++ b/share/metview/app-defaults/MvVersionDetails
@@ -1 +1 @@
-1 Metview 4 3 11  2013 1990-2013 04-July-2013
+1 Metview 4 4 3  2012 1990-2012 15-October-2013
diff --git a/share/metview/app-defaults/Templates/.Area Hovmoeller Data b/share/metview/app-defaults/Templates/.Area Hovmoeller Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Area Hovmoeller Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Average Data b/share/metview/app-defaults/Templates/.Average Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Average Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Average View b/share/metview/app-defaults/Templates/.Average View
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Average View	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Cartesian View b/share/metview/app-defaults/Templates/.Cartesian View
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Cartesian View	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Cross Section View b/share/metview/app-defaults/Templates/.Cross Section View
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Cross Section View	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Display Window b/share/metview/app-defaults/Templates/.Display Window
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Display Window	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Expand Hovmoeller Data b/share/metview/app-defaults/Templates/.Expand Hovmoeller Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Expand Hovmoeller Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Flextra Run b/share/metview/app-defaults/Templates/.Flextra Run
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Flextra Run	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Flextra Visualiser b/share/metview/app-defaults/Templates/.Flextra Visualiser
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Flextra Visualiser	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Geopoints to GRIB b/share/metview/app-defaults/Templates/.Geopoints to GRIB
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Geopoints to GRIB	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Graph Plot b/share/metview/app-defaults/Templates/.Graph Plot
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Graph Plot	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Grib Vectors b/share/metview/app-defaults/Templates/.Grib Vectors
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Grib Vectors	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Height Hovmoeller Data b/share/metview/app-defaults/Templates/.Height Hovmoeller Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Height Hovmoeller Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Input Visualiser b/share/metview/app-defaults/Templates/.Input Visualiser
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Input Visualiser	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Line Hovmoeller Data b/share/metview/app-defaults/Templates/.Line Hovmoeller Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Line Hovmoeller Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.MV3 Contour b/share/metview/app-defaults/Templates/.MV3 Contour
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.MV3 Contour	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.NetCDF Visualiser b/share/metview/app-defaults/Templates/.NetCDF Visualiser
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.NetCDF Visualiser	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Observation Filter b/share/metview/app-defaults/Templates/.Observation Filter
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Observation Filter	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Odb Visualiser b/share/metview/app-defaults/Templates/.Odb Visualiser
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Odb Visualiser	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Page b/share/metview/app-defaults/Templates/.Page
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Page
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Scm Run b/share/metview/app-defaults/Templates/.Scm Run
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Scm Run	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Scm Visualiser b/share/metview/app-defaults/Templates/.Scm Visualiser
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Scm Visualiser	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Table Reader b/share/metview/app-defaults/Templates/.Table Reader
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Table Reader	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/.Table Visualiser b/share/metview/app-defaults/Templates/.Table Visualiser
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/.Table Visualiser	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Area Hovmoeller Data/.Data b/share/metview/app-defaults/Templates/Area Hovmoeller Data/.Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Area Hovmoeller Data/.Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Area Hovmoeller Data/.Geo Axis b/share/metview/app-defaults/Templates/Area Hovmoeller Data/.Geo Axis
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Area Hovmoeller Data/.Geo Axis	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Area Hovmoeller Data/.Time Axis b/share/metview/app-defaults/Templates/Area Hovmoeller Data/.Time Axis
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Area Hovmoeller Data/.Time Axis	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Average Data/.Data b/share/metview/app-defaults/Templates/Average Data/.Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Average Data/.Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Average View/.Horizontal Axis b/share/metview/app-defaults/Templates/Average View/.Horizontal Axis
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Average View/.Horizontal Axis	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Average View/.Vertical Axis b/share/metview/app-defaults/Templates/Average View/.Vertical Axis
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Average View/.Vertical Axis	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Cartesian View/.Horizontal Axis b/share/metview/app-defaults/Templates/Cartesian View/.Horizontal Axis
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Cartesian View/.Horizontal Axis	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Cartesian View/.Tephigram Grid b/share/metview/app-defaults/Templates/Cartesian View/.Tephigram Grid
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Cartesian View/.Tephigram Grid	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Cartesian View/.Vertical Axis b/share/metview/app-defaults/Templates/Cartesian View/.Vertical Axis
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Cartesian View/.Vertical Axis	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Cross Section View/.Horizontal Axis b/share/metview/app-defaults/Templates/Cross Section View/.Horizontal Axis
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Cross Section View/.Horizontal Axis	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Cross Section View/.Vertical Axis b/share/metview/app-defaults/Templates/Cross Section View/.Vertical Axis
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Cross Section View/.Vertical Axis	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Display Window/.Pages b/share/metview/app-defaults/Templates/Display Window/.Pages
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Display Window/.Pages	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Expand Hovmoeller Data/.Data b/share/metview/app-defaults/Templates/Expand Hovmoeller Data/.Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Expand Hovmoeller Data/.Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Expand Hovmoeller Data/.Netcdf Data b/share/metview/app-defaults/Templates/Expand Hovmoeller Data/.Netcdf Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Expand Hovmoeller Data/.Netcdf Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Flextra Run/.Flextra Input Data b/share/metview/app-defaults/Templates/Flextra Run/.Flextra Input Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Flextra Run/.Flextra Input Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Flextra Visualiser/.Flextra Data b/share/metview/app-defaults/Templates/Flextra Visualiser/.Flextra Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Flextra Visualiser/.Flextra Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Geopoints to GRIB/.Geopoints b/share/metview/app-defaults/Templates/Geopoints to GRIB/.Geopoints
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Geopoints to GRIB/.Geopoints	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Graph Plot/.Legend Entry b/share/metview/app-defaults/Templates/Graph Plot/.Legend Entry
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Graph Plot/.Legend Entry	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Grib Vectors/.Colouring Field b/share/metview/app-defaults/Templates/Grib Vectors/.Colouring Field
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Grib Vectors/.Colouring Field	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Grib Vectors/.Direction b/share/metview/app-defaults/Templates/Grib Vectors/.Direction
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Grib Vectors/.Direction	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Grib Vectors/.Intensity b/share/metview/app-defaults/Templates/Grib Vectors/.Intensity
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Grib Vectors/.Intensity	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Grib Vectors/.U Component b/share/metview/app-defaults/Templates/Grib Vectors/.U Component
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Grib Vectors/.U Component	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Grib Vectors/.V Component b/share/metview/app-defaults/Templates/Grib Vectors/.V Component
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Grib Vectors/.V Component	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Height Hovmoeller Data/.Data b/share/metview/app-defaults/Templates/Height Hovmoeller Data/.Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Height Hovmoeller Data/.Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Height Hovmoeller Data/.Height Axis b/share/metview/app-defaults/Templates/Height Hovmoeller Data/.Height Axis
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Height Hovmoeller Data/.Height Axis	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Height Hovmoeller Data/.Time Axis b/share/metview/app-defaults/Templates/Height Hovmoeller Data/.Time Axis
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Height Hovmoeller Data/.Time Axis	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Input Visualiser/.Input Binning b/share/metview/app-defaults/Templates/Input Visualiser/.Input Binning
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Input Visualiser/.Input Binning	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Line Hovmoeller Data/.Data b/share/metview/app-defaults/Templates/Line Hovmoeller Data/.Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Line Hovmoeller Data/.Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Line Hovmoeller Data/.Geo Axis b/share/metview/app-defaults/Templates/Line Hovmoeller Data/.Geo Axis
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Line Hovmoeller Data/.Geo Axis	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Line Hovmoeller Data/.Geo2 Axis b/share/metview/app-defaults/Templates/Line Hovmoeller Data/.Geo2 Axis
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Line Hovmoeller Data/.Geo2 Axis	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Line Hovmoeller Data/.Time Axis b/share/metview/app-defaults/Templates/Line Hovmoeller Data/.Time Axis
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Line Hovmoeller Data/.Time Axis	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/MV3 Contour/.Legend Entry b/share/metview/app-defaults/Templates/MV3 Contour/.Legend Entry
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/MV3 Contour/.Legend Entry	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/NetCDF Visualiser/.Netcdf Data b/share/metview/app-defaults/Templates/NetCDF Visualiser/.Netcdf Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/NetCDF Visualiser/.Netcdf Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Observation Filter/.Data b/share/metview/app-defaults/Templates/Observation Filter/.Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Observation Filter/.Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Odb Visualiser/.Odb Binning b/share/metview/app-defaults/Templates/Odb Visualiser/.Odb Binning
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Odb Visualiser/.Odb Binning	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Odb Visualiser/.Odb Data b/share/metview/app-defaults/Templates/Odb Visualiser/.Odb Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Odb Visualiser/.Odb Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Page/.Sub Pages b/share/metview/app-defaults/Templates/Page/.Sub Pages
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Page/.Sub Pages	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Page/.View b/share/metview/app-defaults/Templates/Page/.View
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Page/.View
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Scm Run/.Scm Input Data b/share/metview/app-defaults/Templates/Scm Run/.Scm Input Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Scm Run/.Scm Input Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Scm Run/.Scm Namelist b/share/metview/app-defaults/Templates/Scm Run/.Scm Namelist
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Scm Run/.Scm Namelist	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Scm Run/.Scm Vtable b/share/metview/app-defaults/Templates/Scm Run/.Scm Vtable
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Scm Run/.Scm Vtable	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Scm Visualiser/.Compare Data b/share/metview/app-defaults/Templates/Scm Visualiser/.Compare Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Scm Visualiser/.Compare Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Scm Visualiser/.Comparison Data b/share/metview/app-defaults/Templates/Scm Visualiser/.Comparison Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Scm Visualiser/.Comparison Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Scm Visualiser/.Data b/share/metview/app-defaults/Templates/Scm Visualiser/.Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Scm Visualiser/.Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Scm Visualiser/.Scm Comparison Data b/share/metview/app-defaults/Templates/Scm Visualiser/.Scm Comparison Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Scm Visualiser/.Scm Comparison Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Scm Visualiser/.Scm Data b/share/metview/app-defaults/Templates/Scm Visualiser/.Scm Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Scm Visualiser/.Scm Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Table Reader/.Data b/share/metview/app-defaults/Templates/Table Reader/.Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Table Reader/.Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Table Visualiser/.Table Binning b/share/metview/app-defaults/Templates/Table Visualiser/.Table Binning
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Table Visualiser/.Table Binning	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/Templates/Table Visualiser/.Table Data b/share/metview/app-defaults/Templates/Table Visualiser/.Table Data
deleted file mode 100644
index f50c25e..0000000
--- a/share/metview/app-defaults/Templates/Table Visualiser/.Table Data	
+++ /dev/null
@@ -1,3 +0,0 @@
-USER_INTERFACE,
-    ICON_CLASS = FOLDER
-
diff --git a/share/metview/app-defaults/User_Dir_Frame.tar.gz b/share/metview/app-defaults/User_Dir_Frame.tar.gz
index 9a1a4f7..b42129f 100644
Binary files a/share/metview/app-defaults/User_Dir_Frame.tar.gz and b/share/metview/app-defaults/User_Dir_Frame.tar.gz differ
diff --git a/share/metview/app-defaults/metview.qss b/share/metview/app-defaults/metview.qss
index 9aaa472..0be815c 100644
--- a/share/metview/app-defaults/metview.qss
+++ b/share/metview/app-defaults/metview.qss
@@ -3,10 +3,43 @@ QLineEdit:read-only {
      color: #3a3a3a
 }
 
+QLineEdit#iconLabel {
+     border: 2px solid #0C79E0;
+     padding: 0px 1px;
+     background: white;
+     color: black;
+}
+
+QFrame#guiItemLine {
+        border: 1px solid rgb(190,190,190);
+ }
+
 QToolButton::checked#guiItemDefaultTb {
-     background: rgb(200, 241, 255);
+     background: rgb(12, 121, 224);
+ }
+
+QToolButton::menu-indicator {
+     image: url(":/desktop/menu_indicator.png");
  }
 
+QLabel#editorHeaderLabel {
+     background: rgb(246, 246, 246);   
+}
+
+QLabel#editorWarningLabel {
+     background: rgb(255, 226, 171); 
+     border: 1px solid rgb(174,174,172);
+     border-radius: 4px; 
+     padding-top: 2px;
+     padding-bottom: 2px;    
+}
+
+QLabel#editorMessageLabel {
+     background: rgb(255, 231, 231); 
+     border: 1px solid rgb(223,152,152);
+     border-radius: 4px;
+}
+
 QLabel#fileInfoLabel {
 	background: rgb(246, 246, 246);   
 }
@@ -35,6 +68,57 @@ QToolButton#zoomStackLevelTb:checked {
 	border-color: red;	
  }
 
+QToolButton#pathNameTb {
+	background: rgb(242, 242, 242);
+     	border: 1px solid rgb(220, 220, 220);
+     	border-radius: 0px;
+     	padding: 0px; 	
+ }
+
+QToolButton#pathNameTb:hover{
+	background:  qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #deebf6, stop: 1 #bed8ee);
+        border: 1px solid rgb(160, 160, 160);
+     	border-radius: 0px;
+        padding: 0px; 		
+ }
+
+QToolButton#pathIconTb{
+	background:  white;
+        border: none;
+        padding: 0px; 		
+ }
+
+QToolButton#pathIconTb:hover{
+	background:  white;
+        border: 1px solid rgb(160, 160, 160);
+     	border-radius: 0px;
+        padding: 0px; 		
+ }
+
+QToolButton#pathMenuTb{
+	background:  white;
+        border: none;
+        padding: 0px; 		
+}
+
+QListView[mvStyle="bookmarks"] {
+     	background: rgb(238, 238, 238);
+     	border-style: outset;
+	border-width: 1px;
+	border-color: rgb(120, 120, 120);;
+	border-radius: 8px;
+     	padding: 1px; 
+ }
+
+QListView::text[mvStyle="IconFolderView"] {
+     	background: rgb(238, 0, 0);
+ }
+
+QListView[mvStyle="helper"] {
+     	background: rgb(238, 238, 238);
+ }
+
+
 QAbstractItemView[mvStyle="0"] {
 	alternate-background-color: #FFE6BF;
     	background: #FFF2DE;
@@ -72,8 +156,7 @@ QAbstractItemView::item:selected[mvStyle="1"]
    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc);
 }
 
-
-QListView { 
+QListView#1 { 
 	show-decoration-selected: 1; 
 }
 
@@ -116,4 +199,30 @@ QTextBrowser[mvStyle="fileContents"]{ background: rgb(255, 255, 242) }
 
 QPlainTextEdit[mvStyle="fileContents"]{ background: rgb(255, 255, 242) }
 
-QTextEdit { font-size: 9pt }
\ No newline at end of file
+QPlainTextEdit[mvStyle="fileContentsReadOnly"]{ background: rgb(240, 240, 240) }
+
+QPlainTextEdit[mvStyle="mailAttachment"]{ background: rgb(240, 240, 240) }
+
+QTextEdit { font-size: 9pt }
+
+QStatusBar::item { border: 0px solid black }
+
+QTabBar::tab:selected[mvStyle="folder"] {
+     font: bold ;
+ }
+
+QScrollBar::vertical:handler[mvStyle="helper"] {
+     min-height : 10px ;
+ }
+
+QToolBar
+{
+    icon-size: 16px;
+}
+
+QWidget [path="1"]{
+        background: white;
+        border-radius: 4px; 
+        border-color: rgb(20,200.200);
+        border-top-width: 4px; 
+}
diff --git a/share/metview/etc/AnnotationViewDef b/share/metview/etc/AnnotationViewDef
new file mode 100644
index 0000000..6163b21
--- /dev/null
+++ b/share/metview/etc/AnnotationViewDef
@@ -0,0 +1,64 @@
+ANNOTATIONVIEW ; uPlot Icon; Metview
+{
+   SUBPAGE_X_POSITION
+   {
+      *
+   } = 0
+
+   SUBPAGE_Y_POSITION
+   {
+      *
+   } = 0
+
+   SUBPAGE_X_LENGTH
+   {
+      *
+   } = 100
+
+   SUBPAGE_Y_LENGTH
+   {
+      *
+   } = 100
+
+%include PageFrameDef
+
+SUBPAGE_FRAME
+{
+   ON      ; ON
+   OFF     ; OFF
+} = OFF
+
+SUBPAGE_FRAME_COLOUR [interface=colour]
+{
+   %include MagicsColors.h
+} = BLACK
+
+SUBPAGE_FRAME_LINE_STYLE
+{
+   SOLID      ; SOLID
+   DOT        ; DOT
+   DASH       ; DASH
+   CHAIN_DOT  ; CHAIN_DOT
+   CHAIN_DASH ; CHAIN_DASH
+} = SOLID
+
+SUBPAGE_FRAME_THICKNESS
+{
+   1   ; 1
+   2   ; 2
+   3   ; 3
+   4   ; 4
+   5   ; 5
+   6   ; 6
+   7   ; 7
+   8   ; 8
+   9   ; 9
+   10  ; 10
+} = 2
+
+SUBPAGE_BACKGROUND_COLOUR [interface=colour]
+{
+   %include MagicsColors.h
+} = WHITE
+
+}
diff --git a/share/metview/etc/AnnotationViewRules b/share/metview/etc/AnnotationViewRules
new file mode 100644
index 0000000..a3fbc4e
--- /dev/null
+++ b/share/metview/etc/AnnotationViewRules
@@ -0,0 +1,2 @@
+%include PageFrameRules
+%include SubpageFrameRules
diff --git a/share/metview/etc/AxisDef b/share/metview/etc/AxisDef
index 9b80d6e..5bfc501 100755
--- a/share/metview/etc/AxisDef
+++ b/share/metview/etc/AxisDef
@@ -112,7 +112,7 @@ PAXIS   ; AXIS    ; MAGICS
                  &PARAMSHARE&THICKNESS
         } = 2
  
-        AXIS_LINE_COLOUR
+        AXIS_LINE_COLOUR [interface=colour]
         {
                  &PARAMSHARE&COLOUR
         } = BLACK
@@ -134,7 +134,7 @@ PAXIS   ; AXIS    ; MAGICS
                 PARALLEL   ; PARALLEL  
         } = PARALLEL
  
-        AXIS_TITLE_COLOUR
+        AXIS_TITLE_COLOUR [interface=colour]
         {
                  &PARAMSHARE&COLOUR
         } = BLACK
@@ -166,7 +166,7 @@ PAXIS   ; AXIS    ; MAGICS
                 PARALLEL   ; PARALLEL  
         } = HORIZONTAL
  
-        AXIS_TIP_TITLE_COLOUR
+        AXIS_TIP_TITLE_COLOUR [interface=colour]
         {
                  &PARAMSHARE&COLOUR
         } = BLACK
@@ -190,8 +190,8 @@ PAXIS   ; AXIS    ; MAGICS
         {
                  &PARAMSHARE&ONOFF
         } = ON
- 
-        AXIS_TICK_COLOUR
+  
+        AXIS_TICK_COLOUR [interface=colour]
         {
                  &PARAMSHARE&COLOUR
         } = BLACK
@@ -235,7 +235,7 @@ PAXIS   ; AXIS    ; MAGICS
                 PARALLEL   ; PARALLEL  
         } = HORIZONTAL
  
-        AXIS_TICK_LABEL_COLOUR
+        AXIS_TICK_LABEL_COLOUR [interface=colour] 
         {
                  &PARAMSHARE&COLOUR
         } = BLACK
@@ -312,7 +312,7 @@ PAXIS   ; AXIS    ; MAGICS
                 *
         } = 0
  
-        AXIS_MINOR_TICK_COLOUR
+        AXIS_MINOR_TICK_COLOUR [interface=colour] 
         {
                  &PARAMSHARE&COLOUR
         } = BLACK
@@ -351,7 +351,7 @@ PAXIS   ; AXIS    ; MAGICS
                  &PARAMSHARE&ONOFF
         } = OFF
  
-        AXIS_HOURS_LABEL_COLOUR
+        AXIS_HOURS_LABEL_COLOUR [interface=colour] 
         {
                  &PARAMSHARE&COLOUR
         } = BLACK
@@ -374,7 +374,7 @@ PAXIS   ; AXIS    ; MAGICS
                 OFF    ; OFF
         } = BOTH
  
-        AXIS_DAYS_LABEL_COLOUR
+        AXIS_DAYS_LABEL_COLOUR [interface=colour] 
         {
                  &PARAMSHARE&COLOUR
         } = BLACK
@@ -401,7 +401,7 @@ PAXIS   ; AXIS    ; MAGICS
                  &PARAMSHARE&ONOFF
         } = ON
  
-        AXIS_MONTHS_LABEL_COLOUR
+        AXIS_MONTHS_LABEL_COLOUR [interface=colour] 
         {
                  &PARAMSHARE&COLOUR
         } = BLACK
@@ -428,7 +428,7 @@ PAXIS   ; AXIS    ; MAGICS
                  &PARAMSHARE&ONOFF
         } = ON
  
-        AXIS_YEARS_LABEL_COLOUR
+        AXIS_YEARS_LABEL_COLOUR [interface=colour] 
         {
                  &PARAMSHARE&COLOUR
         } = BLACK
@@ -448,7 +448,7 @@ PAXIS   ; AXIS    ; MAGICS
                  &PARAMSHARE&ONOFF
         } = OFF
  
-        AXIS_GRID_COLOUR
+        AXIS_GRID_COLOUR [interface=colour] 
         {
                  &PARAMSHARE&COLOUR
         } = YELLOW
diff --git a/share/metview/etc/BinningObjectDef b/share/metview/etc/BinningObjectDef
index 72fef41..520a081 100644
--- a/share/metview/etc/BinningObjectDef
+++ b/share/metview/etc/BinningObjectDef
@@ -1,76 +1,93 @@
+PARAMSHARE ; ParamShare; PARAMSHARE
+{
+	COLOUR {
+		%include MagicsColors.h
+	}
+	STYLE {
+		SOLID; SOLID
+		DASH; DASH
+		DOT; DOT
+		CHAIN_DOT; CHAIN_DOT
+		CHAIN_DASH; CHAIN_DASH
+	}
+}
+
 MBINNING; Magics; Automatically generated
 {
 	BINNING_X_METHOD
 	{
-        COUNT
-        INTERVAL
-        LIST
+		COUNT;COUNT
+		LIST;LIST
+		INTERVAL;INTERVAL
 	} = COUNT
-    
-    BINNING_X_MIN_VALUE
-    {
-        *
-    } = -1.0e+21
-    
-    BINNING_X_MAX_VALUE
-    {
-        *
-    } = 1.0e+21
-    
-    BINNING_X_COUNT
-    {
-        *
-    } = 10 
-    
-    BINNING_X_LIST
-    {
-        *
-        /
-    } = ''
-    BINNING_X_INTERVAL
-    {
-        *
-    } = 10
-    
-    BINNING_X_REFERENCE
+
+	BINNING_X_MIN_VALUE
+	{
+		*
+	} = -1.0E+21
+
+	BINNING_X_MAX_VALUE
+	{
+		*
+	} = 1.0E+21
+
+	BINNING_X_COUNT
 	{
-        *
-    } = 0
-    
-    BINNING_Y_METHOD
-    {
-        COUNT
-        INTERVAL
-        LIST
-    } = COUNT
-    
-    BINNING_Y_MIN_VALUE
-    {
-        *
-    } = -1.0e+21
-    
-    BINNING_Y_MAX_VALUE
-    {
-        *
-    } = 1.0e+21
-    
-    BINNING_Y_COUNT
-    {
-        *
-    } = 10 
-    
-    BINNING_Y_LIST
-    {
-        *
-        /
-    } = ''
-    BINNING_Y_INTERVAL
-    {
-        *
-    } = 10
+		*
+	} = 10
+
+	BINNING_X_LIST
+	{
+		*
+		/
+	} = ''
+
+	BINNING_X_INTERVAL
+	{
+		*
+	} = 10
+
+	BINNING_X_REFERENCE
+	{
+		*
+	} = 0
+
+	BINNING_Y_METHOD
+	{
+		COUNT;COUNT
+		LIST;LIST
+		INTERVAL;INTERVAL
+	} = COUNT
+
+	BINNING_Y_MIN_VALUE
+	{
+		*
+	} = -1.0E+21
+
+	BINNING_Y_MAX_VALUE
+	{
+		*
+	} = 1.0E+21
+
+	BINNING_Y_COUNT
+	{
+		*
+	} = 10
+
+	BINNING_Y_LIST
+	{
+		*
+		/
+	} = ''
+
+	BINNING_Y_INTERVAL
+	{
+		*
+	} = 10
 
 	BINNING_Y_REFERENCE
 	{
-        *
+		*
 	} = 0
+
 }
diff --git a/share/metview/etc/BinningObjectRules b/share/metview/etc/BinningObjectRules
index e522817..10ca3a7 100644
--- a/share/metview/etc/BinningObjectRules
+++ b/share/metview/etc/BinningObjectRules
@@ -1,29 +1,20 @@
-%if BINNING_Y_METHOD = COUNT %then    
-    %unset BINNING_Y_LIST
-    %unset BINNING_Y_INTERVAL
-    %unset BINNING_Y_REFERENCE
-    
-%if BINNING_Y_METHOD = INTERVAL %then    
-    %unset BINNING_Y_LIST
-    %unset BINNING_Y_COUNT
 
-%if BINNING_Y_METHOD = LIST %then  
-    %unset BINNING_Y_COUNT  
-    %unset BINNING_Y_INTERVAL
-    %unset BINNING_Y_REFERENCE 
-    
-%if BINNING_X_METHOD = COUNT %then    
-    %unset BINNING_X_LIST
-    %unset BINNING_X_INTERVAL
-    %unset BINNING_X_REFERENCE
-    
-%if BINNING_X_METHOD = INTERVAL %then    
-    %unset BINNING_X_LIST
-    %unset BINNING_X_COUNT
+%if BINNING_X_METHOD <> COUNT %then
+	%unset BINNING_X_COUNT
 
-%if BINNING_X_METHOD = LIST %then  
-    %unset BINNING_X_COUNT  
-    %unset BINNING_X_INTERVAL
-    %unset BINNING_X_REFERENCE 
-    
-    
+%if BINNING_Y_METHOD <> LIST %then
+	%unset BINNING_Y_LIST
+
+%if BINNING_X_METHOD <> LIST %then
+	%unset BINNING_X_LIST
+
+%if BINNING_Y_METHOD <> INTERVAL %then
+	%unset BINNING_Y_INTERVAL
+	%unset BINNING_Y_REFERENCE
+
+%if BINNING_Y_METHOD <> COUNT %then
+	%unset BINNING_Y_COUNT
+
+%if BINNING_X_METHOD <> INTERVAL %then
+	%unset BINNING_X_REFERENCE
+	%unset BINNING_X_INTERVAL
diff --git a/share/metview/etc/CartesianViewDef b/share/metview/etc/CartesianViewDef
index 159c519..aadd4d7 100644
--- a/share/metview/etc/CartesianViewDef
+++ b/share/metview/etc/CartesianViewDef
@@ -1,5 +1,12 @@
 CARTESIANVIEW; CartesianTransformation; MagicsPlusPlus Object
 {
+	MAP_PROJECTION 	
+	{
+		cartesian
+		tephigram
+		taylor
+	} = cartesian
+
      X_AUTOMATIC
      [ help = help_script, help_script_command = 'echo "Only active when data is present. This option will be deactivated if there is no data at visualisation time."' ]
      {
@@ -49,6 +56,12 @@ CARTESIANVIEW; CartesianTransformation; MagicsPlusPlus Object
 	X_DATE_MAX {
 		@
 	} = 2011-01-31
+     X_AUTOMATIC_REVERSE
+     [ help = help_script, help_script_command = 'echo "Will reverse axis."' ]
+     {
+          on
+          off
+     } = off
     
      Y_AUTOMATIC
      [ help = help_script, help_script_command = 'echo "Only active when data is present. This option will be deactivated if there is no data at visualisation time."' ]
@@ -100,6 +113,14 @@ CARTESIANVIEW; CartesianTransformation; MagicsPlusPlus Object
           @
      } = 2011-01-31
 
+     Y_AUTOMATIC_REVERSE
+     [ help = help_script, help_script_command = 'echo "Will reverse axis."' ]
+     {
+          on
+          off
+     } = off
+    
+
      HORIZONTAL_AXIS [interface = icon,
                       class = MAXIS, missing = ignored,
                       help            = help_data,
@@ -123,21 +144,41 @@ CARTESIANVIEW; CartesianTransformation; MagicsPlusPlus Object
      {
           @
      }
+     TEPHIGRAM_GRID [interface = icon,
+                      class = MTEPHI, missing = ignored,
+                      help            = help_data,
+                      help_name       = Tephigram Grid,
+                      help_directory  = '/System/Defaults',
+                      help_class      = MTEPHI,
+                      help_definition = ( MTEPHI )
+                     ]
+     {
+          @
+     }
+
+     TAYLOR_GRID [interface = icon,
+                      class = MTAYLOR, missing = ignored,
+                      help            = help_data,
+                      help_name       = Taylor Grid,
+                      help_directory  = '/System/Defaults',
+                      help_class      = MTAYLOR,
+                      help_definition = ( MTAYLOR )
+
+				]
+     {
+          @
+     }
     
-	MAP_PROJECTION 	[ visible = false ]
-	{
-		cartesian
-	} = cartesian
 
 	SUBPAGE_X_POSITION
 	{
 		@
-	} = 11
+	} = 7.5
 
 	SUBPAGE_Y_POSITION
 	{
 		@
-	} = 7.5
+	} = 7
 
 	SUBPAGE_X_LENGTH
 	{
@@ -157,5 +198,7 @@ CARTESIANVIEW; CartesianTransformation; MagicsPlusPlus Object
 	{
 		@
 	} =1
+
+%include PageFrameDef
 %include SubpageFrameDef
 }
diff --git a/share/metview/etc/CartesianViewRules b/share/metview/etc/CartesianViewRules
index 5997198..38d163a 100644
--- a/share/metview/etc/CartesianViewRules
+++ b/share/metview/etc/CartesianViewRules
@@ -1,3 +1,37 @@
+%if  MAP_PROJECTION = tephigram %then
+    %unset HORIZONTAL_AXIS
+    %unset VERTICAL_AXIS
+    %unset X_AUTOMATIC
+    %unset X_AXIS_TYPE
+    %unset X_DATE_MIN
+    %unset X_DATE_MAX
+    %unset X_MIN_LATITUDE
+    %unset X_MAX_LATITUDE
+    %unset X_MIN_LONGITUDE
+    %unset X_MAX_LONGITUDE   
+    %unset Y_AUTOMATIC
+    %unset Y_AXIS_TYPE
+    %unset Y_DATE_MIN
+    %unset Y_DATE_MAX
+    %unset Y_MIN_LATITUDE
+    %unset Y_MAX_LATITUDE
+    %unset Y_MIN_LONGITUDE
+    %unset Y_MAX_LONGITUDE
+    
+%if  MAP_PROJECTION <> tephigram %then   
+     %unset TEPHIGRAM_GRID
+
+%if  MAP_PROJECTION <> taylor %then   
+     %unset TAYLOR_GRID
+
+     
+%if X_AUTOMATIC = off %then
+	%unset X_AUTOMATIC_REVERSE
+
+%if Y_AUTOMATIC = off %then
+	%unset Y_AUTOMATIC_REVERSE
+
+     
 %if X_AXIS_TYPE = regular %or X_AXIS_TYPE = logarithmic %then
      %unset X_DATE_MIN
      %unset X_DATE_MAX
@@ -41,3 +75,6 @@
      %unset Y_MAX_LATITUDE
      %unset Y_MIN_LONGITUDE
      %unset Y_MAX_LONGITUDE
+
+%include PageFrameRules
+%include SubpageFrameRules
diff --git a/share/metview/etc/CommonMapViewDef.h b/share/metview/etc/CommonMapViewDef.h
deleted file mode 100644
index 0336c19..0000000
--- a/share/metview/etc/CommonMapViewDef.h
+++ /dev/null
@@ -1,14 +0,0 @@
-        COASTLINES
-        [
-              interface       = icon,
-              class           = MCOAST/PCOAST,
-              exclusive       = true,
-              help            = help_data,
-              help_directory  = '/System/Defaults',
-              help_name       = Coastlines,
-              help_class      = MCOAST,
-              help_definition = (MCOAST)
-         ]
-         {
-         @
-         }
diff --git a/share/metview/etc/CommonMapViewRules.h b/share/metview/etc/CommonMapViewRules.h
deleted file mode 100644
index c29978b..0000000
--- a/share/metview/etc/CommonMapViewRules.h
+++ /dev/null
@@ -1,10 +0,0 @@
-%if MAP_PROJECTION <> POLAR_STEREOGRAPHIC %then
-    %unset MAP_HEMISPHERE
-    %unset MAP_VERTICAL_LONGITUDE
-
-%if MAP_PROJECTION <> SPACEVIEW %then
-    %unset MAP_SUB_SAT_LONGITUDE
-    %unset MAP_SUB_SAT_LATITUDE
- 
-%if MAP_PROJECTION = SPACEVIEW %then
-    %unset AREA
diff --git a/share/metview/etc/ConfigDef b/share/metview/etc/ConfigDef
index 8826149..23a5f10 100644
--- a/share/metview/etc/ConfigDef
+++ b/share/metview/etc/ConfigDef
@@ -353,6 +353,12 @@ GENERAL_PREFERENCES; Configuration; Metview
         	@
 	} = '../Devices/Default Printer'
 
+	FOLDER_ICON_SIZE_POLICY [interface = option_menu] 
+	{
+		Unique icon size for each folder ; UNIQUE 
+		Same icon size for all folders ; SAME
+	} = SAME
+	
 	DATA_CACHE_RETENTION_PERIOD
 	{
 		0; INFINITE
diff --git a/share/metview/etc/GeoViewDef b/share/metview/etc/GeoViewDef
index 6ec2be6..6d2696a 100644
--- a/share/metview/etc/GeoViewDef
+++ b/share/metview/etc/GeoViewDef
@@ -1,109 +1,120 @@
 GEOVIEW; GEOVIEW; UPLOT
 {
-! Include Coastlines
-%include "CommonMapViewDef.h"
-
-	MAP_PROJECTION
-	{
-		CYLINDRICAL	; CYLINDRICAL
-		POLAR_STEREOGRAPHIC	 ; POLAR_STEREOGRAPHIC
-		POLAR_NORTH
-		LAMBERT		
-		GEOS
-		GOODE
-		COLLIGNON
-		MOLLWEIDE
-		BONNE
-        EPSG:32661
-		EPSG:4326
-	} = CYLINDRICAL
-    
-    MAP_AREA_DEFINITION 
-    {
-        CORNERS
-        CENTRE
-        FULL  
-    } = FULL
-    
-    AREA
-	[
-		help = help_input,
-		help_icon = 'help_map',
-		input_type = map,
-		input_window = '/Metview/System/Input Window'
-	]
-	{
-		*
-		/
-        } = -90./-180./90./180
-
-	MAP_HEMISPHERE
-	{
-			NORTH		; NORTH
-			SOUTH		; SOUTH
-	} = NORTH
-
-	
-	MAP_VERTICAL_LONGITUDE
-	{
-		*
-	} = 0
-
-	MAP_CENTRE_LATITUDE
-	{
-		@
-	} = 45.0
-
-	MAP_CENTRE_LONGITUDE
-	{
-		@
-	} = 0.0
-
-
-	MAP_SCALE
-	{
-		@
-	} = 130.0E4
-
-	
-
-    MAP_OVERLAY_CONTROL
-    {
-        ALWAYS
-        BY_DATE
-        BY_LEVEL
-        NEVER
-    }= ALWAYS_OVERLAY
-
-
-	SUBPAGE_X_POSITION
-	{
-		@
-	} = 7.5
-
-	SUBPAGE_Y_POSITION
-	{
-		@
-	} = 5
-
-	SUBPAGE_X_LENGTH
-	{
-		@
-	} = 85
-
-	SUBPAGE_Y_LENGTH
-	{
-		@
-	} = 85
-
-	SUBPAGE_METADATA_INFO {
-		ON
-		OFF
-	} = OFF
-
-	SUBPAGE_METADATA_JAVASCRIPT_PATH {
-		@ 
-	} = map.js
-
+   COASTLINES
+   [
+      interface       = icon,
+      class           = MCOAST/PCOAST,
+      exclusive       = true,
+      help            = help_data,
+      help_directory  = '/System/Defaults',
+      help_name       = Coastlines,
+      help_class      = MCOAST,
+      help_definition = (MCOAST)
+   ]
+   { @ }
+
+   MAP_PROJECTION
+   {
+      CYLINDRICAL ; CYLINDRICAL
+      POLAR_STEREOGRAPHIC ; POLAR_STEREOGRAPHIC
+      POLAR_NORTH
+      LAMBERT
+      LAMBERT_NORTH_ATLANTIC
+      GEOS
+      GOODE
+      COLLIGNON
+      MOLLWEIDE
+      ROBINSON
+      BONNE
+      EPSG:32661
+      EPSG:4326
+   } = CYLINDRICAL
+
+   MAP_AREA_DEFINITION
+   {
+      CORNERS
+      CENTRE
+      FULL
+   } = FULL
+
+   AREA
+   [
+      help = help_input,
+      help_icon = 'help_map',
+      help_tooltip = 'Define area on a map',
+      input_type = map,
+      input_window = '/Metview/System/Input Window'
+   ]
+   {
+      *
+      /
+   } = -90./-180./90./180
+
+   MAP_HEMISPHERE
+   {
+      NORTH ; NORTH
+      SOUTH ; SOUTH
+   } = NORTH
+
+   MAP_VERTICAL_LONGITUDE
+   {
+      *
+   } = 0
+
+   MAP_CENTRE_LATITUDE
+   {
+      @
+   } = 45.0
+
+   MAP_CENTRE_LONGITUDE
+   {
+      @
+   } = 0.0
+
+   MAP_SCALE
+   {
+      @
+   } = 130.0E4
+
+   MAP_OVERLAY_CONTROL
+   {
+      ALWAYS
+      BY_DATE
+      BY_LEVEL
+      NEVER
+   }= ALWAYS_OVERLAY
+
+   SUBPAGE_X_POSITION
+   {
+      @
+   } = 7.5
+
+   SUBPAGE_Y_POSITION
+   {
+      @
+   } = 5
+
+   SUBPAGE_X_LENGTH
+   {
+      @
+   } = 85
+
+   SUBPAGE_Y_LENGTH
+   {
+      @
+   } = 85
+
+   SUBPAGE_METADATA_INFO
+   {
+      ON
+      OFF
+   } = OFF
+
+   SUBPAGE_METADATA_JAVASCRIPT_PATH
+   {
+      @
+   } = map.js
+
+%include PageFrameDef
 %include SubpageFrameDef
 }
diff --git a/share/metview/etc/GeoViewRules b/share/metview/etc/GeoViewRules
index 99834aa..133506a 100644
--- a/share/metview/etc/GeoViewRules
+++ b/share/metview/etc/GeoViewRules
@@ -13,11 +13,8 @@
 %if MAP_AREA_DEFINITION <> CORNERS  %then
     %unset AREA
 
-    
 %if SUBPAGE_METADATA_INFO = OFF %then
     %unset SUBPAGE_METADATA_JAVASCRIPT_PATH
-    
 
+%include PageFrameRules
 %include SubpageFrameRules
-
-
diff --git a/share/metview/etc/MARS_local b/share/metview/etc/MARS_local
index c6f7253..1f60cd0 100755
--- a/share/metview/etc/MARS_local
+++ b/share/metview/etc/MARS_local
@@ -4,7 +4,7 @@
 #
 #
 
-MARS_CFG_FILE=`/usr/local/lib/metaps/mars_grib_api/bin/select_mars_config`
+MARS_CFG_FILE=`$MARS_HOME/bin/select_mars_config`
 export MARS_CFG_FILE
 
 if [ -f $MARS_CFG_FILE ]
diff --git a/share/metview/etc/MAXISDef b/share/metview/etc/MAXISDef
index d62772a..ba9392c 100755
--- a/share/metview/etc/MAXISDef
+++ b/share/metview/etc/MAXISDef
@@ -2,7 +2,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
 		%include MagicsColors.h
-		}
+	}
 	STYLE {
 		SOLID; SOLID
 		DASH; DASH
@@ -11,21 +11,22 @@ PARAMSHARE ; ParamShare; PARAMSHARE
 		CHAIN_DASH; CHAIN_DASH
 	}
 }
+
 MAXIS; Magics; Automatically generated
 {
 	AXIS_ORIENTATION
 	{
-		HORIZONTAL; HORIZONTAL
-		VERTICAL; VERTICAL
+		HORIZONTAL;HORIZONTAL
+		VERTICAL;VERTICAL
 	} = HORIZONTAL
 
 	AXIS_POSITION
 	{
-		BOTTOM; BOTTOM
-		TOP; TOP
-		LEFT; LEFT
-		RIGHT; RIGHT
-		AUTOMATIC; AUTOMATIC
+		BOTTOM;BOTTOM
+		TOP;TOP
+		LEFT;LEFT
+		RIGHT;RIGHT
+		AUTOMATIC;AUTOMATIC
 	} = AUTOMATIC
 
 	AXIS_TYPE
@@ -37,148 +38,20 @@ MAXIS; Magics; Automatically generated
 		GEOLINE; GEOLINE
 	} = REGULAR
 
-	AXIS_TICK_INTERVAL
-	{
-		*
-	} = 1.0E+21
-
-	AXIS_TICK_POSITION_LIST
-	{
-		*		
-		/
-	} 
-	AXIS_DATE_TYPE
-	{
-		AUTOMATIC; AUTOMATIC
-		YEARS; YEARS
-		MONTHS; MONTHS
-		DAYS; DAYS
-		HOURS; HOURS
-	} = DAYS
-
-	AXIS_YEARS_LABEL
-	{
-		ON; ON
-		OFF; OFF
-	} = ON
-
-	AXIS_YEARS_LABEL_COLOUR
-	{
-		&PARAMSHARE&COLOUR
-	} = BLACK
-
-	AXIS_YEARS_LABEL_QUALITY
-	{
-		@
-	} = medium 
-
-	AXIS_YEARS_LABEL_HEIGHT
-	{
-		*
-	} = 0.2
-
-	AXIS_MONTHS_LABEL
-	{
-		ON; ON
-		OFF; OFF
-	} = ON
-
-	AXIS_MONTHS_LABEL_COMPOSITION
-	{
-		ONE; ONE
-		TWO; TWO
-		THREE; THREE
-	} = THREE
-
-	AXIS_MONTHS_LABEL_COLOUR
-	{
-		&PARAMSHARE&COLOUR
-	} = BLACK
-
-	AXIS_MONTHS_LABEL_QUALITY
-	{
-		@
-	} = medium
-
-	AXIS_MONTHS_LABEL_HEIGHT
-	{
-		*
-	} = 0.2
-
-	AXIS_DAYS_LABEL
-	{
-		DAY; DAY
-		NUMBER; NUMBER
-		BOTH; BOTH
-		OFF; OFF
-	} = BOTH
-
-	AXIS_DAYS_LABEL_COMPOSITION
-	{
-		ONE; ONE
-		THREE; THREE
-		FULL; FULL
-	} = THREE
-
-	AXIS_DAYS_LABEL_COLOUR
-	{
-		&PARAMSHARE&COLOUR
-	} = BLACK
-
-	AXIS_DAYS_SUNDAY_LABEL_COLOUR
-	{
-		&PARAMSHARE&COLOUR
-	} = RED
-
-	AXIS_DAYS_LABEL_QUALITY
-	{
-		@
-	} = medium
-
-	AXIS_DAYS_LABEL_HEIGHT
-	{
-		*
-	} = 0.2
-
-	AXIS_HOURS_LABEL
-	{
-		ON; ON
-		OFF; OFF
-	} = OFF
-
-	AXIS_HOURS_LABEL_COLOUR
-	{
-		&PARAMSHARE&COLOUR
-	} = BLACK
-
-	AXIS_HOURS_LABEL_QUALITY
-	{
-		@
-	} = medium
-
-	AXIS_HOURS_LABEL_HEIGHT
-	{
-		*
-	} = 0.2
-
 	AXIS_LINE
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = ON
 
-	AXIS_LINE_COLOUR
-	{
+	AXIS_LINE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
-	} = BLACK
+	} = AUTOMATIC
 
 	AXIS_LINE_STYLE
 	{
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DASH; CHAIN_DASH
-		CHAIN_DOT; CHAIN_DOT
+		&PARAMSHARE&STYLE
 	} = SOLID
 
 	AXIS_LINE_THICKNESS
@@ -188,22 +61,18 @@ MAXIS; Magics; Automatically generated
 
 	AXIS_GRID
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = OFF
 
-	AXIS_GRID_COLOUR
-	{
+	AXIS_GRID_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = YELLOW
 
 	AXIS_GRID_LINE_STYLE
 	{
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DASH; CHAIN_DASH
-		CHAIN_DOT; CHAIN_DOT
+		&PARAMSHARE&STYLE
 	} = SOLID
 
 	AXIS_GRID_THICKNESS
@@ -214,20 +83,16 @@ MAXIS; Magics; Automatically generated
 	AXIS_GRID_REFERENCE_LEVEL
 	{
 		*
-	} = 1.0E+21
+	} = 1.0E21
 
-	AXIS_GRID_REFERENCE_COLOUR
-	{
+	AXIS_GRID_REFERENCE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
-	} = BLACK
+	} = AUTOMATIC
 
 	AXIS_GRID_REFERENCE_LINE_STYLE
 	{
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DASH; CHAIN_DASH
-		CHAIN_DOT; CHAIN_DOT
+		&PARAMSHARE&STYLE
 	} = SOLID
 
 	AXIS_GRID_REFERENCE_THICKNESS
@@ -237,51 +102,73 @@ MAXIS; Magics; Automatically generated
 
 	AXIS_TITLE
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = ON
 
 	AXIS_TITLE_TEXT
 	{
 		@
-	} 
+	} = ''
 
 	AXIS_TITLE_ORIENTATION
 	{
-		@
-	} = parallel
+		HORIZONTAL;HORIZONTAL
+		VERTICAL;VERTICAL
+		PARALLEL;PARALLEL
+	} = PARALLEL
 
-	AXIS_TITLE_COLOUR
-	{
+	AXIS_TITLE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
-	} = BLACK
+	} = AUTOMATIC
 
 	AXIS_TITLE_HEIGHT
 	{
 		*
 	} = 0.4
 
-	AXIS_TITLE_QUALITY
+	AXIS_TITLE_FONT
 	{
-		@
-	} = sansserif
+		SERIF;SERIF
+		SANSSERIF;SANSSERIF
+	} = SANSSERIF
+
+	AXIS_TITLE_FONT_STYLE
+	{
+		NORMAL;NORMAL
+		BOLD;BOLD
+		ITALIC;ITALIC
+		BOLDITALIC;BOLDITALIC
+	} = NORMAL
 
 	AXIS_TICK
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = ON
 
+	AXIS_TICK_INTERVAL
+	{
+		*
+	} = 1.0E21
+
+	AXIS_TICK_POSITION_LIST
+	{
+		*
+		/
+	} = ''
+
 	AXIS_TICK_POSITION
 	{
-		OUT; OUT
-		IN; IN
+		OUT;OUT
+		IN;IN
 	} = OUT
 
-	AXIS_TICK_COLOUR
-	{
+	AXIS_TICK_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
-	} = BLACK
+	} = AUTOMATIC
 
 	AXIS_TICK_SIZE
 	{
@@ -295,28 +182,18 @@ MAXIS; Magics; Automatically generated
 
 	AXIS_TICK_LABEL
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = ON
 
 	AXIS_TICK_LABEL_TYPE
 	{
-		NUMBER; NUMBER
-		LABEL_LIST; LABEL_LIST
-		LATITUDE; LATITUDE
-		LONGITUDE; LONGITUDE
+		NUMBER;NUMBER
+		LABEL_LIST;LABEL_LIST
+		LATITUDE;LATITUDE
+		LONGITUDE;LONGITUDE
 	} = NUMBER
 
-	AXIS_TICK_LABEL_FORMAT
-	{
-		@
-	} = "(automatic)"
-
-	AXIS_TICK_LABEL_LIST
-	{
-		@		
-		/
-	}
 	AXIS_TICK_LABEL_FREQUENCY
 	{
 		*
@@ -324,52 +201,67 @@ MAXIS; Magics; Automatically generated
 
 	AXIS_TICK_LABEL_FIRST
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = ON
 
 	AXIS_TICK_LABEL_LAST
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = ON
 
 	AXIS_TICK_LABEL_POSITION
 	{
-		ON_TICK; ON_TICK
-		INTER_TICK; INTER_TICK
+		ON_TICK;ON_TICK
+		INTER_TICK;INTER_TICK
 	} = ON_TICK
 
 	AXIS_TICK_LABEL_ORIENTATION
 	{
-		HORIZONTAL; HORIZONTAL
-		VERTICAL; VERTICAL
-		PARALLEL; PARALLEL
+		HORIZONTAL;HORIZONTAL
+		VERTICAL;VERTICAL
+		PARALLEL;PARALLEL
 	} = HORIZONTAL
 
 	AXIS_TICK_LABEL_FONT
 	{
-		@
-	} = sansserif
+		SERIF;SERIF
+		SANSSERIF;SANSSERIF
+	} = SANSSERIF
 
 	AXIS_TICK_LABEL_FONT_STYLE
 	{
-		@
-	} 
+		NORMAL;NORMAL
+		BOLD;BOLD
+		ITALIC;ITALIC
+		BOLDITALIC;BOLDITALIC
+	} = NORMAL
 
-	AXIS_TICK_LABEL_COLOUR
-	{
+	AXIS_TICK_LABEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
-	} = BLACK
+	} = AUTOMATIC
 
 	AXIS_TICK_LABEL_HEIGHT
 	{
 		*
 	} = 0.3
 
+	AXIS_TICK_LABEL_LIST
+	{
+		@
+		/
+	} = ''
+
+	AXIS_TICK_LABEL_FORMAT
+	{
+		@
+	} = '(AUTOMATIC)'
+
 	AXIS_MINOR_TICK
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = OFF
 
@@ -378,10 +270,10 @@ MAXIS; Magics; Automatically generated
 		*
 	} = 2
 
-	AXIS_MINOR_TICK_COLOUR
-	{
+	AXIS_MINOR_TICK_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
-	} = BLACK
+	} = AUTOMATIC
 
 	AXIS_MINOR_TICK_THICKNESS
 	{
@@ -390,19 +282,19 @@ MAXIS; Magics; Automatically generated
 
 	AXIS_TIP_TITLE
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = OFF
 
 	AXIS_TIP_TITLE_TEXT
 	{
 		@
-	} 
+	} = ''
 
-	AXIS_TIP_TITLE_COLOUR
-	{
+	AXIS_TIP_TITLE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
-	} = BLACK
+	} = AUTOMATIC
 
 	AXIS_TIP_TITLE_HEIGHT
 	{
@@ -411,9 +303,136 @@ MAXIS; Magics; Automatically generated
 
 	AXIS_TIP_TITLE_QUALITY
 	{
-		HIGH; HIGH
-		MEDIUM; MEDIUM
-		LOW; LOW
+		HIGH;HIGH
+		MEDIUM;MEDIUM
+		LOW;LOW
 	} = MEDIUM
 
+	AXIS_DATE_TYPE
+	{
+		AUTOMATIC;AUTOMATIC
+		YEARS;YEARS
+		MONTHS;MONTHS
+		DAYS;DAYS
+		HOURS;HOURS
+	} = DAYS
+
+	AXIS_YEARS_LABEL
+	{
+		ON;  ON
+		OFF; OFF
+	} = ON
+
+	AXIS_YEARS_LABEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = AUTOMATIC
+
+	AXIS_YEARS_LABEL_QUALITY
+	{
+		HIGH;HIGH
+		MEDIUM;MEDIUM
+		LOW;LOW
+	} = MEDIUM 
+
+	AXIS_YEARS_LABEL_HEIGHT
+	{
+		*
+	} = 0.2
+
+	AXIS_MONTHS_LABEL
+	{
+		ON;  ON
+		OFF; OFF
+	} = ON
+
+	AXIS_MONTHS_LABEL_COMPOSITION
+	{
+		ONE;ONE
+		TWO;TWO
+		THREE;THREE
+	} = THREE
+
+	AXIS_MONTHS_LABEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = AUTOMATIC
+
+	AXIS_MONTHS_LABEL_QUALITY
+	{
+		HIGH;HIGH
+		MEDIUM;MEDIUM
+		LOW;LOW
+	} = MEDIUM
+
+	AXIS_MONTHS_LABEL_HEIGHT
+	{
+		*
+	} = 0.2
+
+	AXIS_DAYS_LABEL
+	{
+		DAY;DAY
+		NUMBER;NUMBER
+		BOTH;BOTH
+		OFF;OFF
+	} = BOTH
+
+	AXIS_DAYS_LABEL_COMPOSITION
+	{
+		ONE;ONE
+		THREE;THREE
+		FULL;FULL
+	} = THREE
+
+	AXIS_DAYS_LABEL_POSITION
+	{
+		*
+	} = 12
+
+	AXIS_DAYS_LABEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLACK
+
+	AXIS_DAYS_SUNDAY_LABEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = RED
+
+	AXIS_DAYS_LABEL_QUALITY
+	{
+		HIGH;HIGH
+		MEDIUM;MEDIUM
+		LOW;LOW
+	} = MEDIUM
+
+	AXIS_DAYS_LABEL_HEIGHT
+	{
+		*
+	} = 0.2
+
+	AXIS_HOURS_LABEL
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	AXIS_HOURS_LABEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLACK
+
+	AXIS_HOURS_LABEL_QUALITY
+	{
+		HIGH;HIGH
+		MEDIUM;MEDIUM
+		LOW;LOW
+	} = MEDIUM
+
+	AXIS_HOURS_LABEL_HEIGHT
+	{
+		*
+	} = 0.2
+
 }
diff --git a/share/metview/etc/MAXISRules b/share/metview/etc/MAXISRules
index 891c0ac..685a6ba 100755
--- a/share/metview/etc/MAXISRules
+++ b/share/metview/etc/MAXISRules
@@ -1,87 +1,94 @@
-%if AXIS_TYPE <> REGULAR %then
-	%unset AXIS_TICK_INTERVAL
-%if AXIS_TYPE <> POSITION_LIST %then
-	%unset AXIS_TICK_POSITION_LIST
-%if AXIS_TYPE <> DATE %then
-	%unset AXIS_DATE_TYPE
-	%unset AXIS_YEARS_LABEL
-	%unset AXIS_YEARS_LABEL_COLOUR
-	%unset AXIS_YEARS_LABEL_QUALITY
-	%unset AXIS_YEARS_LABEL_HEIGHT
-	%unset AXIS_MONTHS_LABEL
+
+%if AXIS_GRID <> ON %then
+	%unset AXIS_GRID_THICKNESS
+	%unset AXIS_GRID_REFERENCE_THICKNESS
+	%unset AXIS_GRID_REFERENCE_COLOUR
+	%unset AXIS_GRID_REFERENCE_LEVEL
+	%unset AXIS_GRID_LINE_STYLE
+	%unset AXIS_GRID_COLOUR
+	%unset AXIS_GRID_REFERENCE_LINE_STYLE
+
+%if AXIS_TICK_LABEL <> ON %or AXIS_TICK_LABEL_TYPE <> NUMBER %then
+	%unset AXIS_TICK_LABEL_FORMAT
+
+%if AXIS_MONTHS_LABEL <> ON %or AXIS_TYPE <> DATE %then
 	%unset AXIS_MONTHS_LABEL_COMPOSITION
 	%unset AXIS_MONTHS_LABEL_COLOUR
-	%unset AXIS_MONTHS_LABEL_QUALITY
 	%unset AXIS_MONTHS_LABEL_HEIGHT
-	%unset AXIS_DAYS_LABEL
+	%unset AXIS_MONTHS_LABEL_QUALITY
+
+%if AXIS_MINOR_TICK <> ON %then
+	%unset AXIS_MINOR_TICK_COLOUR
+	%unset AXIS_MINOR_TICK_THICKNESS
+	%unset AXIS_MINOR_TICK_COUNT
+
+%if AXIS_TICK_LABEL <> ON %or AXIS_TICK_LABEL_TYPE <> LABEL_LIST %then
+	%unset AXIS_TICK_LABEL_LIST
+
+%if AXIS_TICK_LABEL <> ON %then
+	%unset AXIS_TICK_LABEL_HEIGHT
+	%unset AXIS_TICK_LABEL_ORIENTATION
+	%unset AXIS_TICK_LABEL_COLOUR
+	%unset AXIS_TICK_LABEL_FIRST
+	%unset AXIS_TICK_LABEL_TYPE
+	%unset AXIS_TICK_LABEL_FREQUENCY
+	%unset AXIS_TICK_LABEL_POSITION
+	%unset AXIS_TICK_LABEL_LAST
+	%unset AXIS_TICK_LABEL_FONT_STYLE
+	%unset AXIS_TICK_LABEL_FONT
+
+%if AXIS_TICK <> ON %then
+	%unset AXIS_TICK_POSITION
+	%unset AXIS_TICK_COLOUR
+	%unset AXIS_TICK_SIZE
+	%unset AXIS_TICK_THICKNESS
+
+%if AXIS_TICK <> ON %or AXIS_TYPE <> DATE %and AXIS_TYPE <> GEOLINE %and AXIS_TYPE <> REGULAR %then
+	%unset AXIS_TICK_INTERVAL
+
+%if AXIS_TIP_TITLE <> ON %then
+	%unset AXIS_TIP_TITLE_COLOUR
+	%unset AXIS_TIP_TITLE_QUALITY
+	%unset AXIS_TIP_TITLE_TEXT
+	%unset AXIS_TIP_TITLE_HEIGHT
+
+%if AXIS_TYPE <> DATE %or AXIS_YEARS_LABEL <> ON %then
+	%unset AXIS_YEARS_LABEL_HEIGHT
+	%unset AXIS_YEARS_LABEL_QUALITY
+	%unset AXIS_YEARS_LABEL_COLOUR
+
+%if AXIS_DAYS_LABEL <> BOTH %and AXIS_DAYS_LABEL <> DAY %and AXIS_DAYS_LABEL <> NUMBER %or AXIS_TYPE <> DATE %then
+	%unset AXIS_DAYS_SUNDAY_LABEL_COLOUR
+	%unset AXIS_DAYS_LABEL_HEIGHT
 	%unset AXIS_DAYS_LABEL_COMPOSITION
 	%unset AXIS_DAYS_LABEL_COLOUR
-	%unset AXIS_DAYS_SUNDAY_LABEL_COLOUR
 	%unset AXIS_DAYS_LABEL_QUALITY
-	%unset AXIS_DAYS_LABEL_HEIGHT
-	%unset AXIS_HOURS_LABEL
+	%unset AXIS_DAYS_LABEL_POSITION
+
+%if AXIS_HOURS_LABEL <> ON %or AXIS_TYPE <> DATE %then
 	%unset AXIS_HOURS_LABEL_COLOUR
-	%unset AXIS_HOURS_LABEL_QUALITY
 	%unset AXIS_HOURS_LABEL_HEIGHT
-%if AXIS_YEARS_LABEL <> ON %then
-	%unset AXIS_YEARS_LABEL_COLOUR
-	%unset AXIS_YEARS_LABEL_QUALITY
-	%unset AXIS_YEARS_LABEL_HEIGHT
-%if AXIS_MONTHS_LABEL <> ON %then
-	%unset AXIS_MONTHS_LABEL_COMPOSITION
-	%unset AXIS_MONTHS_LABEL_COLOUR
-	%unset AXIS_MONTHS_LABEL_QUALITY
-	%unset AXIS_MONTHS_LABEL_HEIGHT
-%if AXIS_HOURS_LABEL <> ON %then
-	%unset AXIS_HOURS_LABEL_COLOUR
 	%unset AXIS_HOURS_LABEL_QUALITY
-	%unset AXIS_HOURS_LABEL_HEIGHT
-%if AXIS_LINE <> ON %then
-	%unset AXIS_LINE_COLOUR
-	%unset AXIS_LINE_STYLE
-	%unset AXIS_LINE_THICKNESS
-%if AXIS_GRID <> ON %then
-	%unset AXIS_GRID_COLOUR
-	%unset AXIS_GRID_LINE_STYLE
-	%unset AXIS_GRID_THICKNESS
-	%unset AXIS_GRID_REFERENCE_LEVEL
-	%unset AXIS_GRID_REFERENCE_COLOUR
-	%unset AXIS_GRID_REFERENCE_LINE_STYLE
-	%unset AXIS_GRID_REFERENCE_THICKNESS
+
+%if AXIS_TYPE <> DATE %then
+	%unset AXIS_HOURS_LABEL
+	%unset AXIS_DAYS_LABEL
+	%unset AXIS_YEARS_LABEL
+	%unset AXIS_MONTHS_LABEL
+	%unset AXIS_DATE_TYPE
+
 %if AXIS_TITLE <> ON %then
 	%unset AXIS_TITLE_TEXT
+	%unset AXIS_TITLE_FONT_STYLE
+	%unset AXIS_TITLE_HEIGHT
 	%unset AXIS_TITLE_ORIENTATION
+	%unset AXIS_TITLE_FONT
 	%unset AXIS_TITLE_COLOUR
-	%unset AXIS_TITLE_HEIGHT
-	%unset AXIS_TITLE_QUALITY
-%if AXIS_TICK <> ON %then
-	%unset AXIS_TICK_POSITION
-	%unset AXIS_TICK_COLOUR
-	%unset AXIS_TICK_SIZE
-	%unset AXIS_TICK_THICKNESS
-%if AXIS_TICK_LABEL <> ON %then
-	%unset AXIS_TICK_LABEL_TYPE
-	%unset AXIS_TICK_LABEL_FORMAT
-	%unset AXIS_TICK_LABEL_LIST
-	%unset AXIS_TICK_LABEL_FREQUENCY
-	%unset AXIS_TICK_LABEL_FIRST
-	%unset AXIS_TICK_LABEL_LAST
-	%unset AXIS_TICK_LABEL_POSITION
-	%unset AXIS_TICK_LABEL_ORIENTATION
-	%unset AXIS_TICK_LABEL_FONT
-	%unset AXIS_TICK_LABEL_FONT_STYLE
-	%unset AXIS_TICK_LABEL_COLOUR
-	%unset AXIS_TICK_LABEL_HEIGHT
-%if AXIS_TICK_LABEL_TYPE <> NUMBER %then
-	%unset AXIS_TICK_LABEL_FORMAT
-%if AXIS_TICK_LABEL_TYPE <> LABEL_LIST %then
-	%unset AXIS_TICK_LABEL_LIST
-%if AXIS_MINOR_TICK <> ON %then
-	%unset AXIS_MINOR_TICK_COUNT
-	%unset AXIS_MINOR_TICK_COLOUR
-	%unset AXIS_MINOR_TICK_THICKNESS
-%if AXIS_TIP_TITLE <> ON %then
-	%unset AXIS_TIP_TITLE_TEXT
-	%unset AXIS_TIP_TITLE_COLOUR
-	%unset AXIS_TIP_TITLE_HEIGHT
-	%unset AXIS_TIP_TITLE_QUALITY
+
+%if AXIS_LINE <> ON %then
+	%unset AXIS_LINE_THICKNESS
+	%unset AXIS_LINE_STYLE
+	%unset AXIS_LINE_COLOUR
+
+%if AXIS_TYPE <> POSITION_LIST %then
+	%unset AXIS_TICK_POSITION_LIST
diff --git a/share/metview/etc/MAverageViewDef b/share/metview/etc/MAverageViewDef
deleted file mode 100644
index 6830d16..0000000
--- a/share/metview/etc/MAverageViewDef
+++ /dev/null
@@ -1,89 +0,0 @@
-MAVERAGEVIEW; uPlot Icon; Metview
-{
-    AREA
-        [
-            help = help_input,
-            help_icon = 'help_area',
-            input_type = area,
-            input_window = '/System/Defaults/Input Window'
-        ]
-    {
-        *
-        /
-    } = 90./-180./-90./180.
-
-    DIRECTION
-    {
-        NORTH SOUTH ; NS ; NS
-        EAST WEST   ; EW ; EW
-    } = NS
-
-    BOTTOM_PRESSURE
-    {
-        *
-    } = 1015.0
-
-    TOP_PRESSURE
-    {
-        *
-    } = 10.0
-
-    PRESSURE_LEVEL_AXIS
-    {
-        LINEAR
-        LOG
-    } = LINEAR
-
-    MAP_PROJECTION  [ visible = false ]
-    {
-        cartesian
-    } = cartesian
-
-    HORIZONTAL_AXIS [interface       = icon,
-                     class           = MAXIS,
-                     missing         = ignored,
-                     help            = help_data,
-                     help_name       = Horizontal Axis,
-                     help_directory  = '/System/Defaults',
-                     help_class      = MAXIS,
-                     help_definition = ( MAXIS, AXIS_ORIENTATION ='HORIZONTAL' )
-                    ]
-    {
-        @
-    }
-
-    VERTICAL_AXIS [interface = icon, 
-                   class           = MAXIS,
-                   missing         = ignored,
-                   help            = help_data,
-                   help_name       = Vertical Axis,
-                   help_directory  = '/System/Defaults',
-                   help_class      = MAXIS,
-                   help_definition = ( MAXIS, AXIS_ORIENTATION ='VERTICAL' )
-                  ]
-    {
-        @
-    }
-
-    SUBPAGE_X_POSITION
-    {
-        @
-    } = 7.5
-
-    SUBPAGE_Y_POSITION
-    {
-        @
-    } = 5
-
-    SUBPAGE_X_LENGTH
-    {
-        @
-    } = 85
-
-    SUBPAGE_Y_LENGTH
-    {
-        @
-    } = 80
-
-%include SubpageFrameDef
-}
diff --git a/share/metview/etc/MAverageViewRules b/share/metview/etc/MAverageViewRules
deleted file mode 100644
index d4d6569..0000000
--- a/share/metview/etc/MAverageViewRules
+++ /dev/null
@@ -1 +0,0 @@
-%include "SubpageFrameRules"
diff --git a/share/metview/etc/MCOASTDef b/share/metview/etc/MCOASTDef
index f5cfd58..f9bbcc0 100644
--- a/share/metview/etc/MCOASTDef
+++ b/share/metview/etc/MCOASTDef
@@ -2,7 +2,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
 		%include MagicsColors.h
-		}
+	}
 	STYLE {
 		SOLID; SOLID
 		DASH; DASH
@@ -11,6 +11,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
 		CHAIN_DASH; CHAIN_DASH
 	}
 }
+
 MCOAST; Magics; Automatically generated
 {
 	MAP_COASTLINE
@@ -19,26 +20,14 @@ MCOAST; Magics; Automatically generated
 		OFF; OFF
 	} = ON
 
-	MAP_COASTLINE_COLOUR
-	{
+	MAP_COASTLINE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = BLACK
 
-	MAP_COASTLINE_RESOLUTION
-	{
-		AUTOMATIC; AUTOMATIC
-		LOW; LOW
-		MEDIUM; MEDIUM
-		HIGH; HIGH
-	} = AUTOMATIC
-
 	MAP_COASTLINE_STYLE
 	{
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DASH; CHAIN_DASH
-		CHAIN_DOT; CHAIN_DOT
+		&PARAMSHARE&STYLE
 	} = SOLID
 
 	MAP_COASTLINE_THICKNESS
@@ -46,25 +35,33 @@ MCOAST; Magics; Automatically generated
 		*
 	} = 1
 
+	MAP_COASTLINE_RESOLUTION
+	{
+		AUTOMATIC;AUTOMATIC
+		LOW;LOW
+		MEDIUM;MEDIUM
+		HIGH;HIGH
+	} = AUTOMATIC
+
 	MAP_COASTLINE_LAND_SHADE
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = OFF
 
-	MAP_COASTLINE_LAND_SHADE_COLOUR
-	{
+	MAP_COASTLINE_LAND_SHADE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = GREEN
 
 	MAP_COASTLINE_SEA_SHADE
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = OFF
 
-	MAP_COASTLINE_SEA_SHADE_COLOUR
-	{
+	MAP_COASTLINE_SEA_SHADE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = BLUE
 
@@ -74,126 +71,77 @@ MCOAST; Magics; Automatically generated
 		OFF; OFF
 	} = OFF
 
-	MAP_BOUNDARIES_STYLE
-	{
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DASH; CHAIN_DASH
-		CHAIN_DOT; CHAIN_DOT
-	} = SOLID
-
-	MAP_BOUNDARIES_COLOUR
-	{
-		&PARAMSHARE&COLOUR
-	} = GREY
-
-	MAP_BOUNDARIES_THICKNESS
-	{
-		*
-	} = 1
-
-	MAP_DISPUTED_BOUNDARIES
+	MAP_CITIES
 	{
 		ON; ON
 		OFF; OFF
-	} = ON
-
-	MAP_DISPUTED_BOUNDARIES_STYLE
-	{
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DASH; CHAIN_DASH
-		CHAIN_DOT; CHAIN_DOT
-	} = DASH
-
-	MAP_DISPUTED_BOUNDARIES_COLOUR
-	{
-		&PARAMSHARE&COLOUR
-	} = BLACK
-
-	MAP_DISPUTED_BOUNDARIES_THICKNESS
-	{
-		*
-	} = 1
+	} = OFF
 
-	MAP_ADMINISTRATIVE_BOUNDARIES
+	MAP_RIVERS
 	{
-		ON; ON
-		OFF; OFF
+		ON;ON
+		OFF;OFF
 	} = OFF
 
-	MAP_ADMINISTRATIVE_BOUNDARIES_COUNTRIES_LIST
-	{
-		@		
-		/
-	}
-	MAP_ADMINISTRATIVE_BOUNDARIES_STYLE
+	MAP_RIVERS_STYLE
 	{
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DASH; CHAIN_DASH
-		CHAIN_DOT; CHAIN_DOT
-	} = DASH
+		&PARAMSHARE&STYLE
+	} = SOLID
 
-	MAP_ADMINISTRATIVE_BOUNDARIES_COLOUR
-	{
+	MAP_RIVERS_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
-	} = BLACK
+	} = BLUE
 
-	MAP_ADMINISTRATIVE_BOUNDARIES_THICKNESS
+	MAP_RIVERS_THICKNESS
 	{
 		*
 	} = 1
 
-	MAP_CITIES
-	{
-		ON; ON
-		OFF; OFF
-	} = OFF
-
 	MAP_CITIES_UNIT_SYSTEM
 	{
-		PERCENT; PERCENT
-		CM; CM
+		PERCENT;PERCENT
+		CM;CM
 	} = PERCENT
 
 	MAP_CITIES_FONT_NAME
 	{
-		@
-	} = sansserif
+		SERIF;SERIF
+		SANSSERIF;SANSSERIF
+	} = SANSSERIF
 
 	MAP_CITIES_FONT_STYLE
 	{
-		@
-	} = normal
+		NORMAL;NORMAL
+		BOLD;BOLD
+		ITALIC;ITALIC
+		BOLDITALIC;BOLDITALIC
+	} = NORMAL
 
 	MAP_CITIES_FONT_SIZE
 	{
 		*
 	} = 2.5
 
-	MAP_CITIES_FONT_COLOUR
-	{
+	MAP_CITIES_FONT_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = NAVY
 
 	MAP_CITIES_NAME_POSITION
 	{
-		ABOVE; ABOVE
-		BELOW; BELOW
-		LEFT; LEFT
-		RIGHT; RIGHT
+		ABOVE;ABOVE
+		BELOW;BELOW
+		LEFT;LEFT
+		RIGHT;RIGHT
 	} = ABOVE
 
 	MAP_CITIES_MARKER
 	{
-		CIRCLE; CIRCLE
-		BOX; BOX
-		SNOWFLAKE; SNOWFLAKE
-		PLUS; PLUS
+		CIRCLE;CIRCLE
+		BOX;BOX
+		SNOWFLAKE;SNOWFLAKE
+		PLUS;PLUS
 	} = PLUS
 
 	MAP_CITIES_MARKER_HEIGHT
@@ -201,32 +149,176 @@ MCOAST; Magics; Automatically generated
 		*
 	} = 0.7
 
-	MAP_CITIES_MARKER_COLOUR
-	{
+	MAP_CITIES_MARKER_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = EVERGREEN
 
-	MAP_RIVERS
+	MAP_BOUNDARIES_STYLE
 	{
-		ON; ON
+		&PARAMSHARE&STYLE
+	} = SOLID
+
+	MAP_BOUNDARIES_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = GREY
+
+	MAP_BOUNDARIES_THICKNESS
+	{
+		*
+	} = 1
+
+	MAP_DISPUTED_BOUNDARIES
+	{
+		ON;  ON
 		OFF; OFF
-	} = OFF
+	} = ON
 
-	MAP_RIVERS_STYLE
+	MAP_DISPUTED_BOUNDARIES_STYLE
 	{
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DASH; CHAIN_DASH
-		CHAIN_DOT; CHAIN_DOT
-	} = SOLID
+		&PARAMSHARE&STYLE
+	} = DASH
+
+	MAP_DISPUTED_BOUNDARIES_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = AUTOMATIC
+
+	MAP_DISPUTED_BOUNDARIES_THICKNESS
+	{
+		*
+	} = 1
+
+	MAP_ADMINISTRATIVE_BOUNDARIES
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	MAP_ADMINISTRATIVE_BOUNDARIES_COUNTRIES_LIST [ help = help_multiple_selection, exclusive = False ]
+	{
+		ANGOLA;AGO
+		ALGERIA;DZA
+		EGYPT;EGY
+		BANGLADESH;BGD
+		NAMIBIA;NAM
+		BOLIVIA;BOL
+		GHANA;GHA
+		AUSTRALIA CCK;CCK
+		PAKISTAN;PAK
+		LIBYA;LBY
+		MALAYSIA;MYS
+		KOREA  NORTH;PRK
+		TANZANIA;TZA
+		BOTSWANA;BWA
+		PARAGUAY;PRY
+		SAUDI ARABIA;SAU
+		MAURITANIA;MRT
+		CHILE;CHL
+		CHINA;CHN
+		LAOS;LAO
+		UNITED KINGDOM GIB;GIB
+		GUINEA;GIN
+		FINLAND;FIN
+		URUGUAY;URY
+		NEPAL;NPL
+		AUSTRALIA CXR;CXR
+		MOROCCO;MAR
+		YEMEN;YEM
+		SOUTH AFRICA;ZAF
+		TOGO;TGO
+		SYRIA;SYR
+		KAZAKHSTAN;KAZ
+		CONGO  KINSHASA ;COD
+		NIGERIA;NGA
+		ZIMBABWE;ZWE
+		UNITED KINGDOM;GBR
+		GUYANA;GUY
+		MYANMAR;MMR
+		CAMEROON;CMR
+		TURKMENISTAN;TKM
+		AUSTRALIA HMD;HMD
+		CHAD;TCD
+		ROMANIA;ROU
+		MONGOLIA;MNG
+		AFGHANISTAN;AFG
+		AUSTRALIA NFK;NFK
+		BELARUS;BLR
+		FINLAND ALA;ALA
+		GREECE;GRC
+		MOZAMBIQUE;MOZ
+		TAJIKISTAN;TJK
+		INDIA;IND
+		CZECH REPUBLIC;CZE
+		ISRAEL;ISR
+		PERU;PER
+		INDONESIA;IDN
+		VANUATU;VUT
+		SURINAME;SUR
+		CONGO  BRAZZAVILLE ;COG
+		ETHIOPIA;ETH
+		NIGER;NER
+		COLOMBIA;COL
+		MADAGASCAR;MDG
+		SENEGAL;SEN
+		EAST TIMOR;TLS
+		FRANCE;FRA
+		RWANDA;RWA
+		ZAMBIA;ZMB
+		GAMBIA  THE;GMB
+		DENMARK;FRO
+		GERMANY;DEU
+		AUSTRALIA;AUS
+		AUSTRIA;AUT
+		NORWAY;SJM
+		VENEZUELA;VEN
+		KENYA;KEN
+		TURKEY;TUR
+		ITALY;ITA
+		BAIKONUR COSMODROME;RUS
+		MEXICO;MEX
+		BRAZIL;BRA
+		IVORY COAST;CIV
+		SERBIA;SRB
+		UNITED STATES OF AMERICA;USA
+		UKRAINE;UKR
+		CANADA;CAN
+		KOREA  SOUTH;KOR
+		CENTRAL AFRICAN REPUBLIC;CAF
+		SOMALIA;SOM
+		UZBEKISTAN;UZB
+		ERITREA;ERI
+		POLAND;POL
+		GABON;GAB
+		SPAIN;ESP
+		IRAQ;IRQ
+		MALI;MLI
+		IRAN;IRN
+		SOLOMON ISLANDS;SLB
+		NEW ZEALAND;NZL
+		JAPAN;JPN
+		KYRGYZSTAN;KGZ
+		NEW CALEDONIA;NCL
+		ARGENTINA;ARG
+		SUDAN;SDN
+		PAPUA NEW GUINEA;PNG
+		CUBA;CUB
+		*
+		/
+	} = ''
 
-	MAP_RIVERS_COLOUR
+	MAP_ADMINISTRATIVE_BOUNDARIES_STYLE
 	{
+		&PARAMSHARE&STYLE
+	} = DASH
+
+	MAP_ADMINISTRATIVE_BOUNDARIES_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
-	} = BLUE
+	} = AUTOMATIC
 
-	MAP_RIVERS_THICKNESS
+	MAP_ADMINISTRATIVE_BOUNDARIES_THICKNESS
 	{
 		*
 	} = 1
@@ -237,6 +329,21 @@ MCOAST; Magics; Automatically generated
 		OFF; OFF
 	} = ON
 
+	MAP_GRID_LINE_STYLE
+	{
+		&PARAMSHARE&STYLE
+	} = SOLID
+
+	MAP_GRID_THICKNESS
+	{
+		*
+	} = 1
+
+	MAP_GRID_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLACK
+
 	MAP_GRID_LATITUDE_REFERENCE
 	{
 		*
@@ -257,25 +364,6 @@ MCOAST; Magics; Automatically generated
 		*
 	} = 20
 
-	MAP_GRID_LINE_STYLE
-	{
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DASH; CHAIN_DASH
-		CHAIN_DOT; CHAIN_DOT
-	} = SOLID
-
-	MAP_GRID_THICKNESS
-	{
-		*
-	} = 1
-
-	MAP_GRID_COLOUR
-	{
-		&PARAMSHARE&COLOUR
-	} = BLACK
-
 	MAP_LABEL
 	{
 		ON; ON
@@ -284,11 +372,13 @@ MCOAST; Magics; Automatically generated
 
 	MAP_LABEL_QUALITY
 	{
-		@
+		HIGH;HIGH
+		MEDIUM;MEDIUM
+		LOW;LOW
 	} = MEDIUM
 
-	MAP_LABEL_COLOUR
-	{
+	MAP_LABEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = BLACK
 
@@ -309,25 +399,25 @@ MCOAST; Magics; Automatically generated
 
 	MAP_LABEL_LEFT
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = ON
 
 	MAP_LABEL_RIGHT
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = ON
 
 	MAP_LABEL_TOP
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = ON
 
 	MAP_LABEL_BOTTOM
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = ON
 
diff --git a/share/metview/etc/MCOASTRules b/share/metview/etc/MCOASTRules
index cee8422..2a9a492 100644
--- a/share/metview/etc/MCOASTRules
+++ b/share/metview/etc/MCOASTRules
@@ -1,90 +1,64 @@
+
 %if MAP_COASTLINE <> ON %then
-	%unset MAP_COASTLINE_COLOUR
-	%unset MAP_COASTLINE_RESOLUTION
 	%unset MAP_COASTLINE_STYLE
+	%unset MAP_COASTLINE_RESOLUTION
 	%unset MAP_COASTLINE_THICKNESS
 	%unset MAP_COASTLINE_LAND_SHADE
-	%unset MAP_COASTLINE_LAND_SHADE_COLOUR
 	%unset MAP_COASTLINE_SEA_SHADE
-	%unset MAP_COASTLINE_SEA_SHADE_COLOUR
-	%unset MAP_BOUNDARIES
-	%unset MAP_BOUNDARIES_STYLE
-	%unset MAP_BOUNDARIES_COLOUR
-	%unset MAP_BOUNDARIES_THICKNESS
-	%unset MAP_DISPUTED_BOUNDARIES
-	%unset MAP_DISPUTED_BOUNDARIES_STYLE
-	%unset MAP_DISPUTED_BOUNDARIES_COLOUR
-	%unset MAP_DISPUTED_BOUNDARIES_THICKNESS
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES_COUNTRIES_LIST
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES_STYLE
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES_COLOUR
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES_THICKNESS
-	%unset MAP_CITIES
-	%unset MAP_CITIES_UNIT_SYSTEM
-	%unset MAP_CITIES_FONT_NAME
-	%unset MAP_CITIES_FONT_STYLE
-	%unset MAP_CITIES_FONT_SIZE
-	%unset MAP_CITIES_FONT_COLOUR
-	%unset MAP_CITIES_NAME_POSITION
-	%unset MAP_CITIES_MARKER
+	%unset MAP_COASTLINE_COLOUR
+
+%if MAP_CITIES <> ON %then
 	%unset MAP_CITIES_MARKER_HEIGHT
 	%unset MAP_CITIES_MARKER_COLOUR
-	%unset MAP_RIVERS
-	%unset MAP_RIVERS_STYLE
-	%unset MAP_RIVERS_COLOUR
-	%unset MAP_RIVERS_THICKNESS
-%if MAP_COASTLINE_LAND_SHADE <> ON %then
-	%unset MAP_COASTLINE_LAND_SHADE_COLOUR
-%if MAP_COASTLINE_SEA_SHADE <> ON %then
-	%unset MAP_COASTLINE_SEA_SHADE_COLOUR
-%if MAP_BOUNDARIES <> ON %then
-	%unset MAP_BOUNDARIES_STYLE
-	%unset MAP_BOUNDARIES_COLOUR
-	%unset MAP_BOUNDARIES_THICKNESS
-	%unset MAP_DISPUTED_BOUNDARIES
-	%unset MAP_DISPUTED_BOUNDARIES_STYLE
-	%unset MAP_DISPUTED_BOUNDARIES_COLOUR
-	%unset MAP_DISPUTED_BOUNDARIES_THICKNESS
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES_COUNTRIES_LIST
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES_STYLE
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES_COLOUR
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES_THICKNESS
-%if MAP_DISPUTED_BOUNDARIES <> ON %then
-	%unset MAP_DISPUTED_BOUNDARIES_STYLE
-	%unset MAP_DISPUTED_BOUNDARIES_COLOUR
-	%unset MAP_DISPUTED_BOUNDARIES_THICKNESS
-%if MAP_ADMINISTRATIVE_BOUNDARIES <> ON %then
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES_COUNTRIES_LIST
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES_STYLE
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES_COLOUR
-	%unset MAP_ADMINISTRATIVE_BOUNDARIES_THICKNESS
-%if MAP_CITIES <> ON %then
-	%unset MAP_CITIES_UNIT_SYSTEM
 	%unset MAP_CITIES_FONT_NAME
-	%unset MAP_CITIES_FONT_STYLE
 	%unset MAP_CITIES_FONT_SIZE
-	%unset MAP_CITIES_FONT_COLOUR
-	%unset MAP_CITIES_NAME_POSITION
 	%unset MAP_CITIES_MARKER
-	%unset MAP_CITIES_MARKER_HEIGHT
-	%unset MAP_CITIES_MARKER_COLOUR
-%if MAP_RIVERS <> ON %then
-	%unset MAP_RIVERS_STYLE
-	%unset MAP_RIVERS_COLOUR
-	%unset MAP_RIVERS_THICKNESS
+	%unset MAP_CITIES_FONT_STYLE
+	%unset MAP_CITIES_NAME_POSITION
+	%unset MAP_CITIES_FONT_COLOUR
+	%unset MAP_CITIES_UNIT_SYSTEM
+
 %if MAP_GRID <> ON %then
 	%unset MAP_GRID_LINE_STYLE
 	%unset MAP_GRID_THICKNESS
 	%unset MAP_GRID_COLOUR
+
+%if MAP_COASTLINE <> ON %or MAP_COASTLINE_SEA_SHADE <> ON %then
+	%unset MAP_COASTLINE_SEA_SHADE_COLOUR
+
+%if MAP_RIVERS <> ON %then
+	%unset MAP_RIVERS_COLOUR
+	%unset MAP_RIVERS_STYLE
+	%unset MAP_RIVERS_THICKNESS
+
+%if MAP_ADMINISTRATIVE_BOUNDARIES <> ON %or MAP_BOUNDARIES <> ON %then
+	%unset MAP_ADMINISTRATIVE_BOUNDARIES_THICKNESS
+	%unset MAP_ADMINISTRATIVE_BOUNDARIES_STYLE
+	%unset MAP_ADMINISTRATIVE_BOUNDARIES_COUNTRIES_LIST
+	%unset MAP_ADMINISTRATIVE_BOUNDARIES_COLOUR
+
+%if MAP_COASTLINE <> ON %or MAP_COASTLINE_LAND_SHADE <> ON %then
+	%unset MAP_COASTLINE_LAND_SHADE_COLOUR
+
 %if MAP_LABEL <> ON %then
+	%unset MAP_LABEL_TOP
+	%unset MAP_LABEL_LATITUDE_FREQUENCY
 	%unset MAP_LABEL_QUALITY
 	%unset MAP_LABEL_COLOUR
-	%unset MAP_LABEL_HEIGHT
-	%unset MAP_LABEL_LATITUDE_FREQUENCY
 	%unset MAP_LABEL_LONGITUDE_FREQUENCY
+	%unset MAP_LABEL_HEIGHT
+	%unset MAP_LABEL_BOTTOM
 	%unset MAP_LABEL_LEFT
 	%unset MAP_LABEL_RIGHT
-	%unset MAP_LABEL_TOP
-	%unset MAP_LABEL_BOTTOM
+
+%if MAP_BOUNDARIES <> ON %or MAP_DISPUTED_BOUNDARIES <> ON %then
+	%unset MAP_DISPUTED_BOUNDARIES_THICKNESS
+	%unset MAP_DISPUTED_BOUNDARIES_STYLE
+	%unset MAP_DISPUTED_BOUNDARIES_COLOUR
+
+%if MAP_BOUNDARIES <> ON %then
+	%unset MAP_BOUNDARIES_STYLE
+	%unset MAP_DISPUTED_BOUNDARIES
+	%unset MAP_BOUNDARIES_THICKNESS
+	%unset MAP_ADMINISTRATIVE_BOUNDARIES
+	%unset MAP_BOUNDARIES_COLOUR
diff --git a/share/metview/etc/MCONTDef b/share/metview/etc/MCONTDef
index 0a3a879..a5cb0f3 100644
--- a/share/metview/etc/MCONTDef
+++ b/share/metview/etc/MCONTDef
@@ -16,121 +16,188 @@ MCONT; Magics; Automatically generated
 {
 	LEGEND
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = OFF
+
 	CONTOUR
 	{
 		ON; ON
 		OFF; OFF
 	} = ON
+
 	CONTOUR_LINE_STYLE
 	{
 		&PARAMSHARE&STYLE
 	} = SOLID
+
 	CONTOUR_LINE_THICKNESS
 	{
 		*
 	} = 1
+
+	CONTOUR_LINE_COLOUR_RAINBOW
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
 	CONTOUR_LINE_COLOUR [ help = help_colour,interface = colour ]
 	{ 
 		&PARAMSHARE&COLOUR
 	} = BLUE
+
+	CONTOUR_LINE_COLOUR_RAINBOW_METHOD
+	{
+		CALCULATE;CALCULATE
+		LIST;LIST
+	} = CALCULATE
+
+	CONTOUR_LINE_COLOUR_RAINBOW_MAX_LEVEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLUE
+
+	CONTOUR_LINE_COLOUR_RAINBOW_MIN_LEVEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = RED
+
+	CONTOUR_LINE_COLOUR_RAINBOW_DIRECTION
+	{
+		CLOCKWISE;CLOCKWISE
+		ANTI-CLOCKWISE;ANTI-CLOCKWISE
+	} = ANTI_CLOCKWISE
+
+	CONTOUR_LINE_COLOUR_RAINBOW_COLOUR_LIST
+	{
+		@
+		/
+	} = ''
+
+	CONTOUR_LINE_COLOUR_RAINBOW_COLOUR_LIST_POLICY
+	{
+		LASTONE;LASTONE
+		CYCLE;CYCLE
+	} = LASTONE
+
 	CONTOUR_HIGHLIGHT
 	{
 		ON; ON
 		OFF; OFF
 	} = ON
+
 	CONTOUR_HIGHLIGHT_STYLE
 	{
 		&PARAMSHARE&STYLE
 	} = SOLID
+
 	CONTOUR_REFERENCE_LEVEL
 	{
 		*
 	} = 0.0
+
 	CONTOUR_HIGHLIGHT_COLOUR [ help = help_colour,interface = colour ]
 	{ 
 		&PARAMSHARE&COLOUR
 	} = BLUE
+
 	CONTOUR_HIGHLIGHT_THICKNESS
 	{
 		*
 	} = 3
+
 	CONTOUR_HIGHLIGHT_FREQUENCY
 	{
 		*
 	} = 4
+
 	CONTOUR_LEVEL_SELECTION_TYPE
 	{
 		COUNT; COUNT
 		INTERVAL; INTERVAL
 		LEVEL_LIST; LEVEL_LIST
 	} = COUNT
+
 	CONTOUR_MAX_LEVEL
 	{
 		*
 	} = 1.0E+21
+
 	CONTOUR_MIN_LEVEL
 	{
 		*
 	} = -1.0E+21
+
 	CONTOUR_SHADE_MAX_LEVEL
 	{
 		*
 	} = 1.0E+21
+
 	CONTOUR_SHADE_MIN_LEVEL
 	{
 		*
 	} = -1.0E+21
-	CONTOUR_LEVEL_COUNT
-	{
-		*
-	} = 10
-	CONTOUR_LEVEL_TOLERANCE
+
+	CONTOUR_LEVEL_LIST
 	{
 		*
-	} = 2
+		/
+	} = ''
+
 	CONTOUR_INTERVAL
 	{
 		*
 	} = 8.0
-	CONTOUR_LEVEL_LIST
+
+	CONTOUR_LEVEL_COUNT
 	{
 		*
-		/
-	} = ''
+	} = 10
+
+	CONTOUR_LEVEL_TOLERANCE
+	{
+		*
+	} = 2
+
 	CONTOUR_LABEL
 	{
 		ON; ON
 		OFF; OFF
 	} = ON
+
 	CONTOUR_LABEL_TYPE
 	{
 		@
 	} = NUMBER
+
 	CONTOUR_LABEL_TEXT
 	{
 		@
 	} = ''
+
 	CONTOUR_LABEL_HEIGHT
 	{
 		*
 	} = 0.3
+
 	CONTOUR_LABEL_FORMAT
 	{
 		@
 	} = '(AUTOMATIC)'
+
 	CONTOUR_LABEL_BLANKING
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = ON
+
 	CONTOUR_LABEL_FONT
 	{
 		SERIF;SERIF
 		SANSSERIF;SANSSERIF
 	} = SANSSERIF
+
 	CONTOUR_LABEL_FONT_STYLE
 	{
 		NORMAL;NORMAL
@@ -138,104 +205,144 @@ MCONT; Magics; Automatically generated
 		ITALIC;ITALIC
 		BOLDITALIC;BOLDITALIC
 	} = NORMAL
-	CONTOUR_LABEL_COLOUR
-	{
 
+	CONTOUR_LABEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 		CONTOUR_LINE_COLOUR
 	} = CONTOUR_LINE_COLOUR
+
 	CONTOUR_LABEL_FREQUENCY
 	{
 		*
 	} = 2
+
 	CONTOUR_SHADE
 	{
 		ON; ON
 		OFF; OFF
 	} = OFF
+
 	CONTOUR_SHADE_TECHNIQUE
 	{
 		POLYGON_SHADING; POLYGON_SHADING
-		CELL_SHADING; CELL_SHADING
 		GRID_SHADING; GRID_SHADING
+		CELL_SHADING; CELL_SHADING
 		MARKER; MARKER
 	} = POLYGON_SHADING
+
+	CONTOUR_SHADE_COLOUR_METHOD
+	{
+		CALCULATE;CALCULATE
+		LIST;LIST
+	} = CALCULATE
+
+	CONTOUR_SHADE_LABEL_BLANKING
+	[ visible = false ]
+	{
+		ON;  ON
+		OFF; OFF
+	} = ON
+
 	CONTOUR_SHADE_METHOD
 	{
 		AREA_FILL; AREA_FILL
 		DOT; DOT
 		HATCH; HATCH
 	} = DOT
-	CONTOUR_SHADE_DOT_SIZE
-	{
-		*
-	} = 0.02
-	CONTOUR_SHADE_MAX_LEVEL_DENSITY
-	{
-		*
-	} = 50.0
-	CONTOUR_SHADE_MIN_LEVEL_DENSITY
-	{
-		*
-	} = 0.0
-	CONTOUR_SHADE_ANGLE
-	{
-		*
-	} = 45.0
-	CONTOUR_SHADE_HATCH_INDEX
+
+	CONTOUR_SHADE_CELL_RESOLUTION
 	{
 		*
-	} = 0
-	CONTOUR_SHADE_HATCH_THICKNESS
+	} = 10
+
+	CONTOUR_SHADE_CELL_METHOD
 	{
-		*
-	} = 1
-	CONTOUR_SHADE_HATCH_DENSITY
+		NEAREST;NEAREST
+		INTERPOLATE;INTERPOLATE
+	} = NEAREST
+
+	CONTOUR_GRID_SHADING_POSITION
 	{
-		*
-	} = 18.0
+		MIDDLE;MIDDLE
+		BOTTOM_LEFT;BOTTOM_LEFT
+	} = MIDDLE
+
 	CONTOUR_SHADE_COLOUR_TABLE
 	{
 		@
 		/
 	} = ''
+
 	CONTOUR_SHADE_HEIGHT_TABLE
 	{
 		*
 		/
 	} = ''
+
 	CONTOUR_SHADE_MARKER_TABLE
 	{
 		*
 		/
 	} = ''
-	CONTOUR_SHADE_COLOUR_METHOD
-	{
-		CALCULATE; CALCULATE
-		LIST; LIST
-	} = CALCULATE
+
 	CONTOUR_SHADE_MAX_LEVEL_COLOUR [ help = help_colour,interface = colour ]
 	{ 
 		&PARAMSHARE&COLOUR
 	} = BLUE
+
 	CONTOUR_SHADE_MIN_LEVEL_COLOUR [ help = help_colour,interface = colour ]
 	{ 
 		&PARAMSHARE&COLOUR
 	} = RED
+
 	CONTOUR_SHADE_COLOUR_DIRECTION
 	{
 		CLOCKWISE;CLOCKWISE
 		ANTI_CLOCKWISE;ANTI_CLOCKWISE
 	} = ANTI_CLOCKWISE
+
 	CONTOUR_SHADE_COLOUR_LIST [ help = help_colour,interface = colour ]
 	{ 
 		&PARAMSHARE&COLOUR		/
 	} = ''
-	CONTOUR_SHADE_LABEL_BLANKING
+
+	CONTOUR_SHADE_DOT_SIZE
 	{
-		ON; ON
+		*
+	} = 0.02
+
+	CONTOUR_SHADE_MAX_LEVEL_DENSITY
+	{
+		*
+	} = 50.0
+
+	CONTOUR_SHADE_MIN_LEVEL_DENSITY
+	{
+		*
+	} = 1.0
+
+	CONTOUR_SHADE_HATCH_INDEX
+	{
+		*
+	} = 0
+
+	CONTOUR_SHADE_HATCH_THICKNESS
+	{
+		*
+	} = 1
+
+	CONTOUR_SHADE_HATCH_DENSITY
+	{
+		*
+	} = 18.0
+
+	CONTOUR_LEGEND_ONLY
+	{
+		ON;  ON
 		OFF; OFF
-	} = ON
+	} = OFF
+
 	CONTOUR_METHOD
 	{
 		AUTOMATIC; AUTOMATIC
@@ -244,39 +351,34 @@ MCONT; Magics; Automatically generated
 		AKIMA760; AKIMA760
 		AKIMA474; AKIMA474
 	} = AUTOMATIC
-	CONTOUR_SAMPLE_X_INTERVAL
-	{
-		*
-	} = 2
-	CONTOUR_SAMPLE_Y_INTERVAL
-	{
-		*
-	} = 2
+
 	CONTOUR_AKIMA_X_RESOLUTION
 	{
 		*
 	} = 1.5
+
 	CONTOUR_AKIMA_Y_RESOLUTION
 	{
 		*
 	} = 1.5
+
 	CONTOUR_INTERPOLATION_FLOOR
 	{
 		*
 	} = -1.0E21
+
 	CONTOUR_INTERPOLATION_CEILING
 	{
 		*
 	} = 1.0E21
+
 	CONTOUR_AUTOMATIC_SETTING
 	{
-		ON; ON
-		OFF; OFF
+		ON;ON
+		OFF;OFF
+		ECCHART;ECCHART
 	} = OFF
-	CONTOUR_AUTOMATIC_LIBRARY_PATH
-	{
-		@
-	} = ''
+
 	CONTOUR_HILO
 	{
 		ON; ON
@@ -284,181 +386,225 @@ MCONT; Magics; Automatically generated
 		HI; HI
 		LO; LO
 	} = OFF
+
 	CONTOUR_HILO_TYPE
 	{
 		TEXT; TEXT
 		NUMBER; NUMBER
 		BOTH; BOTH
 	} = TEXT
-	CONTOUR_HILO_HEIGHT
-	{
-		*
-	} = 0.4
-	CONTOUR_HILO_QUALITY
-	{
-		HIGH;HIGH
-		MEDIUM;MEDIUM
-		LOW;LOW
-	} = LOW
-	CONTOUR_HI_COLOUR [ help = help_colour,interface = colour ]
-	{ 
-		&PARAMSHARE&COLOUR
-	} = BLUE
-	CONTOUR_LO_COLOUR [ help = help_colour,interface = colour ]
-	{ 
-		&PARAMSHARE&COLOUR
-	} = BLUE
+
 	CONTOUR_HI_TEXT
 	{
 		@
 	} = H
+
 	CONTOUR_LO_TEXT
 	{
 		@
 	} = L
-	CONTOUR_HILO_TEXT_BLANKING
+
+	CONTOUR_HILO_BLANKING
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = OFF
+
 	CONTOUR_HILO_FORMAT
 	{
 		@
 	} = '(AUTOMATIC)'
+
 	CONTOUR_HILO_WINDOW_SIZE
 	{
 		*
 	} = 3
+
 	CONTOUR_HILO_SUPPRESS_RADIUS
 	{
 		*
 	} = 15.0
+
 	CONTOUR_HILO_MAX_VALUE
 	{
 		*
 	} = 1.0E+21
+
 	CONTOUR_HILO_MIN_VALUE
 	{
 		*
 	} = -1.0E+21
+
 	CONTOUR_HI_MAX_VALUE
 	{
 		*
 	} = 1.0E+21
+
 	CONTOUR_HI_MIN_VALUE
 	{
 		*
 	} = -1.0E+21
+
 	CONTOUR_LO_MAX_VALUE
 	{
 		*
 	} = 1.0E+21
+
 	CONTOUR_LO_MIN_VALUE
 	{
 		*
 	} = -1.0E+21
+
 	CONTOUR_HILO_MARKER
 	{
 		ON; ON
 		OFF; OFF
 	} = OFF
+
 	CONTOUR_HILO_MARKER_HEIGHT
 	{
 		*
 	} = 0.1
+
 	CONTOUR_HILO_MARKER_INDEX
 	{
 		*
 	} = 3
+
 	CONTOUR_HILO_MARKER_COLOUR [ help = help_colour,interface = colour ]
 	{ 
 		&PARAMSHARE&COLOUR
 	} = RED
-	CONTOUR_HILO_POSITION_WRITE
-	{
-		ON; ON
-		OFF; OFF
-	} = OFF
+
 	CONTOUR_HILO_POSITION_FILE_NAME
 	{
 		@
 	} = ''
+
+	CONTOUR_HILO_HEIGHT
+	{
+		*
+	} = 0.4
+
+	CONTOUR_HILO_QUALITY
+	{
+		HIGH;HIGH
+		MEDIUM;MEDIUM
+		LOW;LOW
+	} = LOW
+
+	CONTOUR_HI_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLUE
+
+	CONTOUR_LO_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLUE
+
 	CONTOUR_GRID_VALUE_PLOT
 	{
 		ON; ON
 		OFF; OFF
 	} = OFF
+
 	CONTOUR_GRID_VALUE_TYPE
 	{
 		NORMAL;NORMAL
 		REDUCED;REDUCED
 		AKIMA;AKIMA
 	} = NORMAL
+
 	CONTOUR_GRID_VALUE_PLOT_TYPE
 	{
 		VALUE; VALUE
 		MARKER; MARKER
 		BOTH; BOTH
 	} = VALUE
+
 	CONTOUR_GRID_VALUE_MIN
 	{
 		*
 	} = -1.0E+21
+
 	CONTOUR_GRID_VALUE_MAX
 	{
 		*
 	} = 1.0E+21
+
 	CONTOUR_GRID_VALUE_LAT_FREQUENCY
 	{
 		*
 	} = 1
+
 	CONTOUR_GRID_VALUE_LON_FREQUENCY
 	{
 		*
 	} = 1
+
 	CONTOUR_GRID_VALUE_HEIGHT
 	{
 		*
 	} = 0.25
+
 	CONTOUR_GRID_VALUE_COLOUR [ help = help_colour,interface = colour ]
 	{ 
 		&PARAMSHARE&COLOUR
 	} = BLUE
+
 	CONTOUR_GRID_VALUE_FORMAT
 	{
 		@
 	} = '(AUTOMATIC)'
+
 	CONTOUR_GRID_VALUE_QUALITY
 	{
 		HIGH;HIGH
 		MEDIUM;MEDIUM
 		LOW;LOW
 	} = LOW
+
 	CONTOUR_GRID_VALUE_MARKER_HEIGHT
 	{
 		*
 	} = 0.25
+
 	CONTOUR_GRID_VALUE_MARKER_COLOUR [ help = help_colour,interface = colour ]
 	{ 
 		&PARAMSHARE&COLOUR
 	} = RED
+
 	CONTOUR_GRID_VALUE_MARKER_QUAL
 	{
 		@
 	} = LOW
+
 	CONTOUR_GRID_VALUE_MARKER_INDEX
 	{
 		*
 	} = 3
+
 	GRIB_SCALING_OF_RETRIEVED_FIELDS
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = ON
 
 	GRIB_SCALING_OF_DERIVED_FIELDS
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = OFF
+
+	CONTOUR_SAMPLE_X_INTERVAL
+	{
+		*
+	} = 2
+
+	CONTOUR_SAMPLE_Y_INTERVAL
+	{
+		*
+	} = 2
+
 }
diff --git a/share/metview/etc/MCONTRules b/share/metview/etc/MCONTRules
index 11be7c6..8a68a2b 100644
--- a/share/metview/etc/MCONTRules
+++ b/share/metview/etc/MCONTRules
@@ -1,306 +1,179 @@
-%if CONTOUR_HIGHLIGHT = OFF %then 
-	%unset CONTOUR_HIGHLIGHT_STYLE 
-	%unset CONTOUR_REFERENCE_LEVEL 
-	%unset CONTOUR_HIGHLIGHT_COLOUR 
-	%unset CONTOUR_HIGHLIGHT_THICKNESS 
-	%unset CONTOUR_HIGHLIGHT_FREQUENCY 
-%if CONTOUR_LEVEL_SELECTION_TYPE = COUNT %then 
-	%unset CONTOUR_LEVEL_LIST 
-	%unset CONTOUR_INTERVAL 
-%if CONTOUR_LEVEL_SELECTION_TYPE = LEVEL_LIST %then 
-	%unset CONTOUR_LEVEL_COUNT 
-	%unset CONTOUR_LEVEL_TOLERANCE 
-	%unset CONTOUR_REFERENCE_LEVEL 
-	%unset CONTOUR_INTERVAL 
-%if CONTOUR_LEVEL_SELECTION_TYPE = INTERVAL %then 
-	%unset CONTOUR_LEVEL_COUNT 
-	%unset CONTOUR_LEVEL_TOLERANCE 
-	%unset CONTOUR_LEVEL_LIST 
-%if CONTOUR_LABEL = OFF %then 
-	%unset CONTOUR_LABEL_TYPE 
-	%unset CONTOUR_LABEL_TEXT 
-	%unset CONTOUR_LABEL_HEIGHT 
-	%unset CONTOUR_LABEL_FORMAT 
-	%unset CONTOUR_LABEL_BLANKING 
-	%unset CONTOUR_LABEL_FONT 
-	%unset CONTOUR_LABEL_FONT_STYLE 
-	%unset CONTOUR_LABEL_COLOUR 
-	%unset CONTOUR_LABEL_FREQUENCY 
-%if CONTOUR_SHADE_METHOD = AREA_FILL %then 
-	%unset CONTOUR_SHADE_DOT_SIZE 
-	%unset CONTOUR_SHADE_MAX_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_MIN_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_ANGLE 
-	%unset CONTOUR_SHADE_HATCH_INDEX 
-	%unset CONTOUR_SHADE_HATCH_THICKNESS 
-	%unset CONTOUR_SHADE_HATCH_DENSITY 
-%if CONTOUR_SHADE_METHOD = DOT %then 
-	%unset CONTOUR_SHADE_HATCH_INDEX 
-	%unset CONTOUR_SHADE_HATCH_THICKNESS 
-	%unset CONTOUR_SHADE_HATCH_DENSITY 
-%if CONTOUR_SHADE_METHOD = HATCH %then 
-	%unset CONTOUR_SHADE_DOT_SIZE 
-	%unset CONTOUR_SHADE_MAX_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_MIN_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_ANGLE 
-%if CONTOUR_SHADE_TECHNIQUE = MARKER %then 
-	%unset CONTOUR_SHADE_METHOD 
-	%unset CONTOUR_SHADE_DOT_SIZE 
-	%unset CONTOUR_SHADE_MAX_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_MIN_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_ANGLE 
-	%unset CONTOUR_SHADE_HATCH_INDEX 
-	%unset CONTOUR_SHADE_HATCH_THICKNESS 
-	%unset CONTOUR_SHADE_HATCH_DENSITY 
-%if CONTOUR_SHADE_TECHNIQUE = POLYGON_SHADING %then 
-	%unset CONTOUR_SHADE_COLOUR_TABLE 
-	%unset CONTOUR_SHADE_HEIGHT_TABLE 
-	%unset CONTOUR_SHADE_MARKER_TABLE 
-%if CONTOUR_SHADE_COLOUR_METHOD = LIST %then 
-	%unset CONTOUR_SHADE_MAX_LEVEL_COLOUR 
-	%unset CONTOUR_SHADE_MIN_LEVEL_COLOUR 
-	%unset CONTOUR_SHADE_COLOUR_DIRECTION 
-%if CONTOUR_SHADE_COLOUR_METHOD = CALCULATE %then 
-	%unset CONTOUR_SHADE_COLOUR_LIST 
-%if CONTOUR_SHADE = OFF %then 
-	%unset CONTOUR_SHADE_TECHNIQUE 
-	%unset CONTOUR_SHADE_METHOD 
-	%unset CONTOUR_SHADE_DOT_SIZE 
-	%unset CONTOUR_SHADE_MAX_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_MIN_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_ANGLE 
-	%unset CONTOUR_SHADE_HATCH_INDEX 
-	%unset CONTOUR_SHADE_HATCH_THICKNESS 
-	%unset CONTOUR_SHADE_HATCH_DENSITY 
-	%unset CONTOUR_SHADE_COLOUR_TABLE 
-	%unset CONTOUR_SHADE_HEIGHT_TABLE 
-	%unset CONTOUR_SHADE_MARKER_TABLE 
-	%unset CONTOUR_SHADE_MAX_LEVEL 
-	%unset CONTOUR_SHADE_MIN_LEVEL 
-	%unset CONTOUR_SHADE_COLOUR_METHOD 
-	%unset CONTOUR_SHADE_MAX_LEVEL_COLOUR 
-	%unset CONTOUR_SHADE_MIN_LEVEL_COLOUR 
-	%unset CONTOUR_SHADE_COLOUR_DIRECTION 
-	%unset CONTOUR_SHADE_COLOUR_LIST 
-	%unset CONTOUR_SHADE_LABEL_BLANKING 
-%if CONTOUR_HIGHLIGHT = OFF %then 
-	%unset CONTOUR_HIGHLIGHT_STYLE 
-	%unset CONTOUR_REFERENCE_LEVEL 
-	%unset CONTOUR_HIGHLIGHT_COLOUR 
-	%unset CONTOUR_HIGHLIGHT_THICKNESS 
-	%unset CONTOUR_HIGHLIGHT_FREQUENCY 
-%if CONTOUR_LEVEL_SELECTION_TYPE = COUNT %then 
-	%unset CONTOUR_LEVEL_LIST 
-	%unset CONTOUR_INTERVAL 
-%if CONTOUR_LEVEL_SELECTION_TYPE = LEVEL_LIST %then 
-	%unset CONTOUR_LEVEL_COUNT 
-	%unset CONTOUR_LEVEL_TOLERANCE 
-	%unset CONTOUR_REFERENCE_LEVEL 
-	%unset CONTOUR_INTERVAL 
-%if CONTOUR_LEVEL_SELECTION_TYPE = INTERVAL %then 
-	%unset CONTOUR_LEVEL_COUNT 
-	%unset CONTOUR_LEVEL_TOLERANCE 
-	%unset CONTOUR_LEVEL_LIST 
-%if CONTOUR_LABEL = OFF %then 
-	%unset CONTOUR_LABEL_TYPE 
-	%unset CONTOUR_LABEL_TEXT 
-	%unset CONTOUR_LABEL_HEIGHT 
-	%unset CONTOUR_LABEL_FORMAT 
-	%unset CONTOUR_LABEL_BLANKING 
-	%unset CONTOUR_LABEL_FONT 
-	%unset CONTOUR_LABEL_FONT_STYLE 
-	%unset CONTOUR_LABEL_COLOUR 
-	%unset CONTOUR_LABEL_FREQUENCY 
-%if CONTOUR_SHADE_METHOD = AREA_FILL %then 
-	%unset CONTOUR_SHADE_DOT_SIZE 
-	%unset CONTOUR_SHADE_MAX_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_MIN_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_ANGLE 
-	%unset CONTOUR_SHADE_HATCH_INDEX 
-	%unset CONTOUR_SHADE_HATCH_THICKNESS 
-	%unset CONTOUR_SHADE_HATCH_DENSITY 
-%if CONTOUR_SHADE_METHOD = DOT %then 
-	%unset CONTOUR_SHADE_HATCH_INDEX 
-	%unset CONTOUR_SHADE_HATCH_THICKNESS 
-	%unset CONTOUR_SHADE_HATCH_DENSITY 
-%if CONTOUR_SHADE_METHOD = HATCH %then 
-	%unset CONTOUR_SHADE_DOT_SIZE 
-	%unset CONTOUR_SHADE_MAX_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_MIN_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_ANGLE 
-%if CONTOUR_SHADE_TECHNIQUE = MARKER %then 
-	%unset CONTOUR_SHADE_METHOD 
-	%unset CONTOUR_SHADE_DOT_SIZE 
-	%unset CONTOUR_SHADE_MAX_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_MIN_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_ANGLE 
-	%unset CONTOUR_SHADE_HATCH_INDEX 
-	%unset CONTOUR_SHADE_HATCH_THICKNESS 
-	%unset CONTOUR_SHADE_HATCH_DENSITY 
-%if CONTOUR_SHADE_TECHNIQUE = POLYGON_SHADING %then 
-	%unset CONTOUR_SHADE_COLOUR_TABLE 
-	%unset CONTOUR_SHADE_HEIGHT_TABLE 
-	%unset CONTOUR_SHADE_MARKER_TABLE 
-%if CONTOUR_SHADE_COLOUR_METHOD = LIST %then 
-	%unset CONTOUR_SHADE_MAX_LEVEL_COLOUR 
-	%unset CONTOUR_SHADE_MIN_LEVEL_COLOUR 
-	%unset CONTOUR_SHADE_COLOUR_DIRECTION 
-%if CONTOUR_SHADE_COLOUR_METHOD = CALCULATE %then 
-	%unset CONTOUR_SHADE_COLOUR_LIST 
-%if CONTOUR_SHADE = OFF %then 
-	%unset CONTOUR_SHADE_TECHNIQUE 
-	%unset CONTOUR_SHADE_METHOD 
-	%unset CONTOUR_SHADE_DOT_SIZE 
-	%unset CONTOUR_SHADE_MAX_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_MIN_LEVEL_DENSITY 
-	%unset CONTOUR_SHADE_ANGLE 
-	%unset CONTOUR_SHADE_HATCH_INDEX 
-	%unset CONTOUR_SHADE_HATCH_THICKNESS 
-	%unset CONTOUR_SHADE_HATCH_DENSITY 
-	%unset CONTOUR_SHADE_COLOUR_TABLE 
-	%unset CONTOUR_SHADE_HEIGHT_TABLE 
-	%unset CONTOUR_SHADE_MARKER_TABLE 
-	%unset CONTOUR_SHADE_MAX_LEVEL 
-	%unset CONTOUR_SHADE_MIN_LEVEL 
-	%unset CONTOUR_SHADE_COLOUR_METHOD 
-	%unset CONTOUR_SHADE_MAX_LEVEL_COLOUR 
-	%unset CONTOUR_SHADE_MIN_LEVEL_COLOUR 
-	%unset CONTOUR_SHADE_COLOUR_DIRECTION 
-	%unset CONTOUR_SHADE_COLOUR_LIST 
-	%unset CONTOUR_SHADE_LABEL_BLANKING 
-%if CONTOUR = OFF %then 
-	%unset CONTOUR_LINE_STYLE 
-%if CONTOUR = OFF %then 
-	%unset CONTOUR_LINE_THICKNESS 
-%if CONTOUR = OFF %then 
-	%unset CONTOUR_LINE_COLOUR 
-%if CONTOUR_METHOD = SAMPLE %then 
-	%unset CONTOUR_AKIMA_X_RESOLUTION 
-	%unset CONTOUR_AKIMA_Y_RESOLUTION 
-%if CONTOUR_METHOD = AKIMA760 %then 
-	%unset CONTOUR_SAMPLE_X_INTERVAL 
-	%unset CONTOUR_SAMPLE_Y_INTERVAL 
-%if CONTOUR_METHOD = AKIMA474 %then 
-	%unset CONTOUR_SAMPLE_X_INTERVAL 
-	%unset CONTOUR_SAMPLE_Y_INTERVAL 
-%if CONTOUR_METHOD = AUTOMATIC %then 
-	%unset CONTOUR_SAMPLE_X_INTERVAL 
-	%unset CONTOUR_SAMPLE_Y_INTERVAL 
-	%unset CONTOUR_AKIMA_X_RESOLUTION 
-	%unset CONTOUR_AKIMA_Y_RESOLUTION 
-%if CONTOUR_METHOD = LINEAR %then 
-	%unset CONTOUR_SAMPLE_X_INTERVAL 
-	%unset CONTOUR_SAMPLE_Y_INTERVAL 
-	%unset CONTOUR_AKIMA_X_RESOLUTION 
-	%unset CONTOUR_AKIMA_Y_RESOLUTION 
-%if CONTOUR_AUTOMATIC_SETTING = OFF %then 
-	%unset CONTOUR_AUTOMATIC_LIBRARY_PATH 
-%if CONTOUR_HILO_TYPE = TEXT %then 
-	%unset CONTOUR_HILO_FORMAT 
-%if CONTOUR_HILO_TYPE = NUMBER %then 
-	%unset CONTOUR_HI_TEXT 
-	%unset CONTOUR_LO_TEXT 
-	%unset CONTOUR_HILO_TEXT_BLANKING 
-%if CONTOUR_HILO_TYPE = BOTH %then 
-	%unset CONTOUR_HI_TEXT 
-	%unset CONTOUR_LO_TEXT 
-	%unset CONTOUR_HILO_TEXT_BLANKING 
-	%unset CONTOUR_HILO_FORMAT 
-%if CONTOUR_HILO_MARKER = OFF %then 
-	%unset CONTOUR_HILO_MARKER_HEIGHT 
-	%unset CONTOUR_HILO_MARKER_INDEX 
-	%unset CONTOUR_HILO_MARKER_COLOUR 
-%if CONTOUR_HILO_POSITION_WRITE = OFF %then 
-	%unset CONTOUR_HILO_POSITION_FILE_NAME 
-%if CONTOUR_HILO = HI %then 
-	%unset CONTOUR_HILO_TYPE 
-	%unset CONTOUR_HILO_HEIGHT 
-	%unset CONTOUR_HILO_QUALITY 
-	%unset CONTOUR_HI_COLOUR 
-	%unset CONTOUR_LO_COLOUR 
-	%unset CONTOUR_HI_TEXT 
-	%unset CONTOUR_LO_TEXT 
-	%unset CONTOUR_HILO_TEXT_BLANKING 
-	%unset CONTOUR_HILO_FORMAT 
-	%unset CONTOUR_HILO_WINDOW_SIZE 
-	%unset CONTOUR_HILO_SUPPRESS_RADIUS 
-	%unset CONTOUR_HILO_MAX_VALUE 
-	%unset CONTOUR_HILO_MIN_VALUE 
-	%unset CONTOUR_HI_MAX_VALUE 
-	%unset CONTOUR_HI_MIN_VALUE 
-	%unset CONTOUR_LO_MAX_VALUE 
-	%unset CONTOUR_LO_MIN_VALUE 
-	%unset CONTOUR_HILO_MARKER 
-	%unset CONTOUR_HILO_MARKER_HEIGHT 
-	%unset CONTOUR_HILO_MARKER_INDEX 
-	%unset CONTOUR_HILO_MARKER_COLOUR 
-	%unset CONTOUR_HILO_POSITION_WRITE 
-	%unset CONTOUR_HILO_POSITION_FILE_NAME 
-%if CONTOUR_HILO = OFF %then 
-	%unset CONTOUR_HILO_TYPE 
-	%unset CONTOUR_HILO_HEIGHT 
-	%unset CONTOUR_HILO_QUALITY 
-	%unset CONTOUR_HI_COLOUR 
-	%unset CONTOUR_LO_COLOUR 
-	%unset CONTOUR_HI_TEXT 
-	%unset CONTOUR_LO_TEXT 
-	%unset CONTOUR_HILO_TEXT_BLANKING 
-	%unset CONTOUR_HILO_FORMAT 
-	%unset CONTOUR_HILO_WINDOW_SIZE 
-	%unset CONTOUR_HILO_SUPPRESS_RADIUS 
-	%unset CONTOUR_HILO_MAX_VALUE 
-	%unset CONTOUR_HILO_MIN_VALUE 
-	%unset CONTOUR_HI_MAX_VALUE 
-	%unset CONTOUR_HI_MIN_VALUE 
-	%unset CONTOUR_LO_MAX_VALUE 
-	%unset CONTOUR_LO_MIN_VALUE 
-	%unset CONTOUR_HILO_MARKER 
-	%unset CONTOUR_HILO_MARKER_HEIGHT 
-	%unset CONTOUR_HILO_MARKER_INDEX 
-	%unset CONTOUR_HILO_MARKER_COLOUR 
-	%unset CONTOUR_HILO_POSITION_WRITE 
-	%unset CONTOUR_HILO_POSITION_FILE_NAME 
-%if CONTOUR_HILO = LO %then 
-	%unset CONTOUR_HILO_TYPE 
-	%unset CONTOUR_HILO_HEIGHT 
-	%unset CONTOUR_HILO_QUALITY 
-	%unset CONTOUR_HI_COLOUR 
-	%unset CONTOUR_LO_COLOUR 
-	%unset CONTOUR_HI_TEXT 
-	%unset CONTOUR_LO_TEXT 
-	%unset CONTOUR_HILO_TEXT_BLANKING 
-	%unset CONTOUR_HILO_FORMAT 
-	%unset CONTOUR_HILO_WINDOW_SIZE 
-	%unset CONTOUR_HILO_SUPPRESS_RADIUS 
-	%unset CONTOUR_HILO_MAX_VALUE 
-	%unset CONTOUR_HILO_MIN_VALUE 
-	%unset CONTOUR_HI_MAX_VALUE 
-	%unset CONTOUR_HI_MIN_VALUE 
-	%unset CONTOUR_LO_MAX_VALUE 
-	%unset CONTOUR_LO_MIN_VALUE 
-	%unset CONTOUR_HILO_MARKER 
-	%unset CONTOUR_HILO_MARKER_HEIGHT 
-	%unset CONTOUR_HILO_MARKER_INDEX 
-	%unset CONTOUR_HILO_MARKER_COLOUR 
-	%unset CONTOUR_HILO_POSITION_WRITE 
-	%unset CONTOUR_HILO_POSITION_FILE_NAME 
-%if CONTOUR_GRID_VALUE_PLOT_TYPE = VALUE %then 
-	%unset CONTOUR_GRID_VALUE_MARKER_HEIGHT 
-	%unset CONTOUR_GRID_VALUE_MARKER_COLOUR 
-	%unset CONTOUR_GRID_VALUE_MARKER_QUAL 
-	%unset CONTOUR_GRID_VALUE_MARKER_INDEX 
-%if CONTOUR_GRID_VALUE_PLOT = OFF %then 
-	%unset CONTOUR_GRID_VALUE_TYPE 
-	%unset CONTOUR_GRID_VALUE_PLOT_TYPE 
-	%unset CONTOUR_GRID_VALUE_MIN 
-	%unset CONTOUR_GRID_VALUE_MAX 
-	%unset CONTOUR_GRID_VALUE_LAT_FREQUENCY 
-	%unset CONTOUR_GRID_VALUE_LON_FREQUENCY 
-	%unset CONTOUR_GRID_VALUE_HEIGHT 
-	%unset CONTOUR_GRID_VALUE_COLOUR 
-	%unset CONTOUR_GRID_VALUE_FORMAT 
-	%unset CONTOUR_GRID_VALUE_QUALITY 
-	%unset CONTOUR_GRID_VALUE_MARKER_HEIGHT 
-	%unset CONTOUR_GRID_VALUE_MARKER_COLOUR 
-	%unset CONTOUR_GRID_VALUE_MARKER_QUAL 
-	%unset CONTOUR_GRID_VALUE_MARKER_INDEX 
+
+%if CONTOUR_GRID_VALUE_PLOT <> ON %or CONTOUR_GRID_VALUE_PLOT_TYPE <> BOTH %and CONTOUR_GRID_VALUE_PLOT_TYPE <> MARKER %and CONTOUR_GRID_VALUE_PLOT_TYPE <> VALUE %then
+	%unset CONTOUR_GRID_VALUE_MARKER_QUAL
+	%unset CONTOUR_GRID_VALUE_MARKER_INDEX
+	%unset CONTOUR_GRID_VALUE_MARKER_HEIGHT
+	%unset CONTOUR_GRID_VALUE_MARKER_COLOUR
+
+%if CONTOUR_HILO <> LO %and CONTOUR_HILO <> ON %then
+	%unset CONTOUR_LO_MIN_VALUE
+	%unset CONTOUR_LO_MAX_VALUE
+
+%if CONTOUR_HILO <> LO %and CONTOUR_HILO <> ON %or CONTOUR_HILO_TYPE <> BOTH %and CONTOUR_HILO_TYPE <> NUMBER %and CONTOUR_HILO_TYPE <> TEXT %then
+	%unset CONTOUR_LO_COLOUR
+
+%if CONTOUR_SHADE <> ON %or CONTOUR_SHADE_COLOUR_METHOD <> LIST %then
+	%unset CONTOUR_SHADE_COLOUR_LIST
+
+%if CONTOUR <> ON %or CONTOUR_LINE_COLOUR_RAINBOW <> ON %then
+	%unset CONTOUR_LINE_COLOUR_RAINBOW_METHOD
+
+%if CONTOUR_SHADE <> ON %or CONTOUR_SHADE_TECHNIQUE <> POLYGON_SHADING %then
+	%unset CONTOUR_SHADE_METHOD
+
+%if CONTOUR_SHADE_METHOD <> DOT %or CONTOUR_SHADE_TECHNIQUE <> POLYGON_SHADING %then
+	%unset CONTOUR_SHADE_MIN_LEVEL_DENSITY
+
+%if CONTOUR_HILO <> HI %and CONTOUR_HILO <> LO %and CONTOUR_HILO <> ON %or CONTOUR_HILO_MARKER <> ON %then
+	%unset CONTOUR_HILO_MARKER_INDEX
+	%unset CONTOUR_HILO_MARKER_HEIGHT
+	%unset CONTOUR_HILO_MARKER_COLOUR
+
+%if CONTOUR_LEVEL_SELECTION_TYPE <> COUNT %then
+	%unset CONTOUR_LEVEL_COUNT
+	%unset CONTOUR_LEVEL_TOLERANCE
+
+%if CONTOUR_GRID_VALUE_PLOT <> ON %then
+	%unset CONTOUR_GRID_VALUE_PLOT_TYPE
+	%unset CONTOUR_GRID_VALUE_MAX
+	%unset CONTOUR_GRID_VALUE_TYPE
+	%unset CONTOUR_GRID_VALUE_MIN
+	%unset CONTOUR_GRID_VALUE_LON_FREQUENCY
+	%unset CONTOUR_GRID_VALUE_LAT_FREQUENCY
+
+%if CONTOUR_LEVEL_SELECTION_TYPE <> INTERVAL %then
+	%unset CONTOUR_INTERVAL
+
+%if CONTOUR <> ON %or CONTOUR_HIGHLIGHT <> ON %or CONTOUR_LEVEL_SELECTION_TYPE <> COUNT %and CONTOUR_LEVEL_SELECTION_TYPE <> INTERVAL %then
+	%unset CONTOUR_REFERENCE_LEVEL
+
+%if CONTOUR_HILO <> HI %and CONTOUR_HILO <> ON %or CONTOUR_HILO_TYPE <> BOTH %and CONTOUR_HILO_TYPE <> NUMBER %and CONTOUR_HILO_TYPE <> TEXT %then
+	%unset CONTOUR_HI_COLOUR
+
+%if CONTOUR_HILO <> HI %and CONTOUR_HILO <> ON %or CONTOUR_HILO_TYPE <> TEXT %then
+	%unset CONTOUR_HI_TEXT
+
+%if CONTOUR_SHADE <> ON %or CONTOUR_SHADE_METHOD <> DOT %or CONTOUR_SHADE_TECHNIQUE <> POLYGON_SHADING %then
+	%unset CONTOUR_SHADE_MIN_LEVEL_DENSITY
+	%unset CONTOUR_SHADE_DOT_SIZE
+	%unset CONTOUR_SHADE_MAX_LEVEL_DENSITY
+
+%if CONTOUR <> ON %or CONTOUR_LINE_COLOUR_RAINBOW <> ON %or CONTOUR_LINE_COLOUR_RAINBOW_METHOD <> CALCULATE %then
+	%unset CONTOUR_LINE_COLOUR_RAINBOW_MAX_LEVEL_COLOUR
+	%unset CONTOUR_LINE_COLOUR_RAINBOW_DIRECTION
+	%unset CONTOUR_LINE_COLOUR_RAINBOW_MIN_LEVEL_COLOUR
+
+%if CONTOUR <> ON %or CONTOUR_LINE_COLOUR_RAINBOW <> ON %or CONTOUR_LINE_COLOUR_RAINBOW_METHOD <> LIST %then
+	%unset CONTOUR_LINE_COLOUR_RAINBOW_COLOUR_LIST
+	%unset CONTOUR_LINE_COLOUR_RAINBOW_COLOUR_LIST_POLICY
+
+%if LEGEND <> ON %then
+	%unset CONTOUR_LEGEND_TEXT
+	%unset CONTOUR_SPECIAL_LEGEND
+
+%if CONTOUR_LABEL <> ON %then
+	%unset CONTOUR_LABEL_HEIGHT
+	%unset CONTOUR_LABEL_COLOUR
+	%unset CONTOUR_LABEL_FONT
+	%unset CONTOUR_LABEL_FREQUENCY
+	%unset CONTOUR_LABEL_TEXT
+	%unset CONTOUR_LABEL_TYPE
+	%unset CONTOUR_LABEL_FORMAT
+	%unset CONTOUR_LABEL_BLANKING
+	%unset CONTOUR_LABEL_FONT_STYLE
+
+%if CONTOUR_SHADE_METHOD <> HATCH %or CONTOUR_SHADE_TECHNIQUE <> POLYGON_SHADING %then
+	%unset CONTOUR_SHADE_HATCH_DENSITY
+	%unset CONTOUR_SHADE_HATCH_INDEX
+	%unset CONTOUR_SHADE_HATCH_THICKNESS
+
+%if CONTOUR_METHOD <> SAMPLE %then
+	%unset CONTOUR_SAMPLE_Y_INTERVAL
+	%unset CONTOUR_SAMPLE_X_INTERVAL
+
+%if CONTOUR_HILO <> HI %and CONTOUR_HILO <> LO %and CONTOUR_HILO <> ON %then
+	%unset CONTOUR_HILO_POSITION_FILE_NAME
+	%unset CONTOUR_HILO_MAX_VALUE
+	%unset CONTOUR_HILO_MIN_VALUE
+	%unset CONTOUR_HILO_REDUCTION_RADIUS
+	%unset CONTOUR_HILO_TYPE
+	%unset CONTOUR_HILO_SUPPRESS_RADIUS
+	%unset CONTOUR_HILO_MARKER
+	%unset CONTOUR_HILO_WINDOW_SIZE
+
+%if CONTOUR_SHADE <> ON %or CONTOUR_SHADE_TECHNIQUE <> GRID_SHADING %then
+	%unset CONTOUR_GRID_SHADING_POSITION
+
+%if CONTOUR_HILO <> HI %and CONTOUR_HILO <> LO %and CONTOUR_HILO <> ON %or CONTOUR_HILO_TYPE <> NUMBER %then
+	%unset CONTOUR_HILO_FORMAT
+
+%if CONTOUR_HILO <> LO %and CONTOUR_HILO <> ON %or CONTOUR_HILO_TYPE <> TEXT %then
+	%unset CONTOUR_LO_TEXT
+
+%if CONTOUR <> ON %or CONTOUR_LINE_COLOUR_RAINBOW <> OFF %then
+	%unset CONTOUR_LINE_COLOUR
+
+%if CONTOUR_SHADE <> ON %or CONTOUR_SHADE_METHOD <> HATCH %or CONTOUR_SHADE_TECHNIQUE <> POLYGON_SHADING %then
+	%unset CONTOUR_SHADE_HATCH_DENSITY
+	%unset CONTOUR_SHADE_HATCH_INDEX
+	%unset CONTOUR_SHADE_HATCH_THICKNESS
+
+%if CONTOUR_GRID_VALUE_PLOT <> ON %or CONTOUR_GRID_VALUE_PLOT_TYPE <> BOTH %and CONTOUR_GRID_VALUE_PLOT_TYPE <> VALUE %and CONTOUR_GRID_VALUE_PLOT_TYPE <> VALUE %then
+	%unset CONTOUR_GRID_VALUE_HEIGHT
+	%unset CONTOUR_GRID_VALUE_COLOUR
+	%unset CONTOUR_GRID_VALUE_FORMAT
+	%unset CONTOUR_GRID_VALUE_QUALITY
+
+%if CONTOUR_HILO <> HI %and CONTOUR_HILO <> LO %and CONTOUR_HILO <> ON %or CONTOUR_HILO_TYPE <> NUMBER %and CONTOUR_HILO_TYPE <> TEXT %then
+	%unset CONTOUR_HILO_BLANKING
+
+%if CONTOUR_AUTOMATIC_SETTING <> ON %then
+	%unset CONTOUR_AUTOMATIC_LIBRARY_PATH
+
+%if CONTOUR_SHADE <> ON %then
+	%unset CONTOUR_SHADE_COLOUR_METHOD
+	%unset CONTOUR_SHADE_TECHNIQUE
+	%unset CONTOUR_SHADE_MIN_LEVEL
+	%unset CONTOUR_SHADE_MAX_LEVEL
+
+%if CONTOUR_SHADE <> ON %or CONTOUR_SHADE_TECHNIQUE <> MARKER %then
+	%unset CONTOUR_SHADE_HEIGHT_TABLE
+	%unset CONTOUR_SHADE_COLOUR_TABLE
+	%unset CONTOUR_SHADE_MARKER_TABLE
+
+%if CONTOUR_LEVEL_SELECTION_TYPE <> LEVEL_LIST %then
+	%unset CONTOUR_LEVEL_LIST
+
+%if CONTOUR_SHADE <> ON %or CONTOUR_SHADE_TECHNIQUE <> CELL_SHADING %then
+	%unset CONTOUR_SHADE_CELL_METHOD
+	%unset CONTOUR_SHADE_CELL_RESOLUTION
+
+%if CONTOUR_HILO <> HI %and CONTOUR_HILO <> ON %then
+	%unset CONTOUR_HI_MAX_VALUE
+	%unset CONTOUR_HI_MIN_VALUE
+
+%if CONTOUR_METHOD <> AKIMA474 %and CONTOUR_METHOD <> AKIMA760 %then
+	%unset CONTOUR_AKIMA_X_RESOLUTION
+	%unset CONTOUR_AKIMA_Y_RESOLUTION
+
+%if CONTOUR <> ON %or CONTOUR_HIGHLIGHT <> ON %then
+	%unset CONTOUR_HIGHLIGHT_COLOUR
+	%unset CONTOUR_HIGHLIGHT_FREQUENCY
+	%unset CONTOUR_HIGHLIGHT_STYLE
+	%unset CONTOUR_HIGHLIGHT_THICKNESS
+
+%if CONTOUR_HILO <> HI %and CONTOUR_HILO <> LO %and CONTOUR_HILO <> ON %or CONTOUR_HILO_TYPE <> BOTH %and CONTOUR_HILO_TYPE <> NUMBER %and CONTOUR_HILO_TYPE <> TEXT %then
+	%unset CONTOUR_HILO_HEIGHT
+	%unset CONTOUR_HILO_QUALITY
+
+%if CONTOUR <> ON %then
+	%unset CONTOUR_LEGEND_ONLY
+	%unset CONTOUR_HIGHLIGHT
+	%unset CONTOUR_LINE_THICKNESS
+	%unset CONTOUR_LINE_COLOUR_RAINBOW
+	%unset CONTOUR_LINE_STYLE
+
+%if CONTOUR_SHADE <> ON %or CONTOUR_SHADE_COLOUR_METHOD <> CALCULATE %then
+	%unset CONTOUR_SHADE_MAX_LEVEL_COLOUR
+	%unset CONTOUR_SHADE_COLOUR_DIRECTION
+	%unset CONTOUR_SHADE_MIN_LEVEL_COLOUR
diff --git a/share/metview/etc/MGRAPHDef b/share/metview/etc/MGRAPHDef
index dcbf5a4..a558a5c 100755
--- a/share/metview/etc/MGRAPHDef
+++ b/share/metview/etc/MGRAPHDef
@@ -1,223 +1,259 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
-       ONOFF {
-             ON  ; ON 
-             OFF ; OFF
-       }
- 
-       COLOUR {
-			%include MagicsColors.h
-       } 
-
-       LINE_STYLE {
-             SOLID      ; SOLID     
-             DOT        ; DOT       
-             DASH       ; DASH      
-             CHAIN_DOT  ; CHAIN_DOT 
-             CHAIN_DASH ; CHAIN_DASH
-       }
-
-       MARKER {
-             1        ; 1
-             2        ; 2
-             3        ; 3
-             4        ; 4
-             5        ; 5
-       }
-
-       QUALITY {
-             LOW        ; LOW
-             MEDIUM     ; MEDIUM
-             HIGH       ; HIGH
-       } 
-
-       SHADING {
-             DOT        ; DOT
-             HATCH      ; HATCH
-             AREA_FILL  ; AREA_FILL
-       }
-
-       THICKNESS {
-             1        ; 1
-             2        ; 2
-             3        ; 3
-             4        ; 4
-             5        ; 5
-             6        ; 6
-             7        ; 7
-             8        ; 8
-             9        ; 9
-            10        ; 10
-       }
+	COLOUR {
+		%include MagicsColors.h
+	}
+	STYLE {
+		SOLID; SOLID
+		DASH; DASH
+		DOT; DOT
+		CHAIN_DOT; CHAIN_DOT
+		CHAIN_DASH; CHAIN_DASH
+	}
 }
- 
-MGRAPH  ; GRAPH   ; MAGICS
+
+MGRAPH; Magics; Automatically generated
 {
-     LEGEND
-     {
-          ON;  ON
-          OFF; OFF
-     } = OFF
-	
-        GRAPH_TYPE
-        {
-                CURVE ; CURVE
-                BAR   ; BAR  
-                AREA  ; AREA 
-        } = CURVE
- 
-        GRAPH_LINE
-        {
-                 &PARAMSHARE&ONOFF
-        } = ON
- 
-        GRAPH_LINE_COLOUR
-        {
-                 &PARAMSHARE&COLOUR
-        } = BLUE
- 
-        GRAPH_LINE_STYLE
-        {
-                 &PARAMSHARE&LINE_STYLE
-        } = SOLID
- 
-        GRAPH_LINE_THICKNESS
-        {
-                 &PARAMSHARE&THICKNESS
-        } = 1
-
-        GRAPH_SYMBOL
-        {
-                 &PARAMSHARE&ONOFF
-        } = OFF
- 
-        GRAPH_SYMBOL_HEIGHT
-        {
-                @
-        } = 0.2
- 
-        GRAPH_SYMBOL_COLOUR
-        {
-                 &PARAMSHARE&COLOUR
-        } = RED
- 
-        GRAPH_SYMBOL_MARKER_INDEX
-        {
-                 *
-        } = 3
- 
-        GRAPH_MISSING_DATA_MODE
-        {
-                IGNORE ; IGNORE
-                JOIN   ; JOIN  
-                DROP   ; DROP  
-        } = IGNORE
- 
-        GRAPH_MISSING_DATA_STYLE
-        {
-                 &PARAMSHARE&LINE_STYLE
-        } = DASH
- 
-        GRAPH_MISSING_DATA_COLOUR
-        {
-                 &PARAMSHARE&COLOUR
-        } = RED
- 
-        GRAPH_MISSING_DATA_THICKNESS
-        {
-                 &PARAMSHARE&THICKNESS
-        } = 1
- 
-        GRAPH_BAR_COLOUR
-        {
-                 &PARAMSHARE&COLOUR
-        } = BLUE
- 
-        GRAPH_BAR_WIDTH
-        {
-                @
-        } = 0.
-
-        GRAPH_BAR_LINE_STYLE
-        {
-                 &PARAMSHARE&LINE_STYLE
-        } = SOLID
- 
-        GRAPH_BAR_LINE_THICKNESS
-        {
-                 &PARAMSHARE&THICKNESS
-        } = 1
- 
-        GRAPH_SHADE
-        {
-                 &PARAMSHARE&ONOFF
-        } = ON
- 
-        GRAPH_SHADE_COLOUR
-        {
-                 &PARAMSHARE&COLOUR
-        } = BLUE
- 
-        GRAPH_SHADE_STYLE
-			[ interface = option_menu ]
-        {
-                 &PARAMSHARE&SHADING
-        } = AREA_FILL
- 
-        GRAPH_SHADE_DENSITY
-        {
-                @
-        } = 20.0
- 
-        GRAPH_SHADE_DOT_SIZE
-        {
-                @
-        } = 0.02
- 
-        GRAPH_SHADE_HATCH_INDEX
-        {
-                *
-        } = 0
-
-        GRAPH_SHADE_HATCH_THICKNESS
-        {
-                *
-        } = 1
-
-        GRAPH_SHADE_HATCH_DENSITY
-        {
-                @
-        } = 18.0
- 
-        GRAPH_X_SUPPRESS_BELOW
-        {
-                @
-        } = '-2.1E07'
- 
-        GRAPH_X_SUPPRESS_ABOVE
-        {
-                @
-        } = 2.1E07
- 
-        GRAPH_DATE_X_SUPPRESS_BELOW [ visible = false ]
-        {
-                @
-        } = '1900-01-01'
- 
-        GRAPH_DATE_X_SUPPRESS_ABOVE [ visible = false ]
-        {
-                @
-        } = '2099-12-31'
-
-        GRAPH_Y_SUPPRESS_BELOW
-        {
-                @
-        } = '-2.1E0'
- 
-        GRAPH_Y_SUPPRESS_ABOVE
-        {
-                @
-        } = 2.1E07
- 
-
-} ! end of MGRAPH 
+	LEGEND
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	LEGEND_USER_TEXT
+	{
+		@
+	} = ''
+
+	GRAPH_TYPE
+	{
+		CURVE; CURVE
+		BAR; BAR
+		FLAG; FLAG
+		ARROW; ARROW
+		AREA; AREA
+	} = CURVE
+
+	GRAPH_SHADE
+	{
+		ON; ON
+		OFF; OFF
+	} = ON
+
+	GRAPH_LINE
+	{
+		ON;  ON
+		OFF; OFF
+	} = ON
+
+	GRAPH_LINE_STYLE
+	{
+		&PARAMSHARE&STYLE
+	} = SOLID
+
+	GRAPH_LINE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLUE
+
+	GRAPH_LINE_THICKNESS
+	{
+		*
+	} = 1
+
+	GRAPH_SYMBOL
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	GRAPH_SYMBOL_MARKER_INDEX
+	{
+		*
+	} = 3
+
+	GRAPH_SYMBOL_HEIGHT
+	{
+		*
+	} = 0.2
+
+	GRAPH_SYMBOL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = RED
+
+	GRAPH_SYMBOL_OUTLINE
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	GRAPH_SYMBOL_OUTLINE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLACK
+
+	GRAPH_SYMBOL_OUTLINE_THICKNESS
+	{
+		*
+	} = 1
+
+	GRAPH_SYMBOL_OUTLINE_STYLE
+	{
+		&PARAMSHARE&STYLE
+	} = SOLID
+
+	GRAPH_X_SUPPRESS_BELOW
+	{
+		*
+	} = -1.0E+21
+
+	GRAPH_X_SUPPRESS_ABOVE
+	{
+		*
+	} = 1.0E+21
+
+	GRAPH_Y_SUPPRESS_BELOW
+	{
+		*
+	} = -1.0E+21
+
+	GRAPH_Y_SUPPRESS_ABOVE
+	{
+		*
+	} = 1.0E+21
+
+	GRAPH_MISSING_DATA_MODE
+	{
+		IGNORE;IGNORE
+		JOIN;JOIN
+		DROP;DROP
+	} = IGNORE
+
+	GRAPH_MISSING_DATA_STYLE
+	{
+		&PARAMSHARE&STYLE
+	} = DASH
+
+	GRAPH_MISSING_DATA_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = RED
+
+	GRAPH_MISSING_DATA_THICKNESS
+	{
+		*
+	} = 1
+
+	GRAPH_FLAG_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLACK
+
+	GRAPH_FLAG_LENGTH
+	{
+		*
+	} = 0.75
+
+	GRAPH_ARROW_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLACK
+
+	GRAPH_ARROW_UNIT_VELOCITY
+	{
+		*
+	} = 25.0
+
+	GRAPH_BAR_WIDTH
+	{
+		*
+	} = 1.0E21
+
+	GRAPH_BAR_JUSTIFICATION
+	{
+		LEFT;LEFT
+		CENTRE;CENTRE
+		RIGHT;RIGHT
+	} = CENTRE
+
+	GRAPH_BAR_STYLE
+	{
+		@
+	} = BAR
+
+	GRAPH_BAR_LINE_STYLE
+	{
+		&PARAMSHARE&STYLE
+	} = SOLID
+
+	GRAPH_BAR_LINE_THICKNESS
+	{
+		*
+	} = 1
+
+	GRAPH_BAR_LINE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLACK
+
+	GRAPH_BAR_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLUE
+
+	GRAPH_BAR_CLIPPING
+	{
+		ON;  ON
+		OFF; OFF
+	} = ON
+
+	GRAPH_BAR_ANNOTATION
+	{
+		@
+		/
+	} = ''
+
+	GRAPH_BAR_ANNOTATION_FONT_SIZE
+	{
+		*
+	} = 0.25
+
+	GRAPH_BAR_ANNOTATION_FONT_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = RED
+
+	GRAPH_BAR_MINIMUM_VALUE
+	{
+		*
+	} = 1.0E21
+
+	GRAPH_SHADE_STYLE
+	{
+		AREA_FILL; AREA_FILL
+		HATCH; HATCH
+		DOT; DOT
+	} = AREA_FILL
+
+	GRAPH_SHADE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLUE
+
+	GRAPH_SHADE_DOT_DENSITY
+	{
+		*
+	} = 20
+
+	GRAPH_SHADE_DOT_SIZE
+	{
+		*
+	} = 0.02
+
+	GRAPH_SHADE_HATCH_INDEX
+	{
+		*
+	} = 0
+
+}
diff --git a/share/metview/etc/MGRAPHRules b/share/metview/etc/MGRAPHRules
index 522aaf6..1ed21aa 100755
--- a/share/metview/etc/MGRAPHRules
+++ b/share/metview/etc/MGRAPHRules
@@ -1,87 +1,71 @@
-! This is the magics check file
-!
-! Each request is checked again each rule
-! The rules have the following syntax:
-!
-!   RULE   ---> if TEST then ACTION 
-!
-!
-!   TEST   ---> PARAMETER  =  VALUE
-!          ---> PARAMETER  >  VALUE
-!          ---> PARAMETER  <  VALUE
-!          ---> PARAMETER  >= VALUE
-!          ---> PARAMETER  <= VALUE
-!          ---> PARAMETER  <> VALUE
-!          ---> PARAMETER  in LIST_OF_VALUES
-!          ---> not TEST
-!          ---> TEST and TEST
-!          ---> TEST or TEST
-!          ---> ( TEST )
-!
-!
-!   ACTION ---> error    MESSAGE
-!          ---> warning	 MESSAGE
-!		   ---> set      PARAMETER = VALUE
-!		   ---> unset    PARAMETER 
-!
-! B.Raoult
-! Wed Feb 13 15:07:49 GMT 1991
-!
-! J.Daabeck
-! Thu Nov 3
-!
-#
-# GRAPH_Y_MAX_VALUE is used for bars but might be removed in magics
-#
 
+%if GRAPH_SHADE <> ON %or GRAPH_SHADE_STYLE <> DOT %then
+	%unset GRAPH_SHADE_DOT_DENSITY
 
+%if GRAPH_LINE <> ON %or GRAPH_TYPE <> CURVE %then
+	%unset GRAPH_LINE_COLOUR
+	%unset GRAPH_LINE_STYLE
+	%unset GRAPH_LINE_THICKNESS
 
-%if GRAPH_TYPE = CURVE %then
-        %unset GRAPH_SHADE
+%if GRAPH_TYPE <> ARROW %then
+	%unset GRAPH_ARROW_UNIT_VELOCITY
+	%unset GRAPH_ARROW_COLOUR
 
-%if GRAPH_TYPE = CURVE %or GRAPH_SHADE = OFF %then
-        %unset GRAPH_SHADE_STYLE
-        %unset GRAPH_SHADE_COLOUR
+%if GRAPH_TYPE <> FLAG %then
+	%unset GRAPH_FLAG_LENGTH
+	%unset GRAPH_FLAG_COLOUR
 
-%if GRAPH_TYPE = CURVE %or GRAPH_SHADE = OFF %or GRAPH_SHADE_STYLE <> DOT %then
-        %unset GRAPH_SHADE_DENSITY
-        %unset GRAPH_SHADE_DOT_SIZE
+%if GRAPH_MISSING_DATA_MODE <> DROP %and GRAPH_MISSING_DATA_MODE <> JOIN %or GRAPH_TYPE <> CURVE %then
+	%unset GRAPH_MISSING_DATA_COLOUR
+	%unset GRAPH_MISSING_DATA_STYLE
+	%unset GRAPH_MISSING_DATA_THICKNESS
 
-%if GRAPH_TYPE = CURVE %or GRAPH_SHADE = OFF %or GRAPH_SHADE_STYLE <> HATCH %then
-        %unset GRAPH_SHADE_HATCH_INDEX
-        %unset GRAPH_SHADE_HATCH_THICKNESS
-        %unset GRAPH_SHADE_HATCH_DENSITY
+%if GRAPH_SYMBOL <> ON %or GRAPH_SYMBOL_OUTLINE <> ON %or GRAPH_TYPE <> CURVE %and GRAPH_TYPE <> CURVE %then
+	%unset GRAPH_SYMBOL_OUTLINE_STYLE
+	%unset GRAPH_SYMBOL_OUTLINE_THICKNESS
+	%unset GRAPH_SYMBOL_OUTLINE_COLOUR
 
-%if GRAPH_TYPE <> CURVE %and GRAPH_TYPE <> AREA %then
-        %unset GRAPH_SYMBOL
-        %unset GRAPH_MISSING_DATA_MODE
+%if GRAPH_SYMBOL <> ON %or GRAPH_TYPE <> CURVE %then
+	%unset GRAPH_SYMBOL_MARKER_INDEX
+	%unset GRAPH_SYMBOL_HEIGHT
+	%unset GRAPH_SYMBOL_COLOUR
+	%unset GRAPH_SYMBOL_OUTLINE
 
-%if GRAPH_TYPE <> CURVE %or GRAPH_MISSING_DATA_MODE = IGNORE %then
-        %unset GRAPH_MISSING_DATA_STYLE
-        %unset GRAPH_MISSING_DATA_COLOUR
-        %unset GRAPH_MISSING_DATA_THICKNESS
+%if GRAPH_SHADE <> ON %or GRAPH_SHADE_STYLE <> HATCH %then
+	%unset GRAPH_SHADE_HATCH_INDEX
 
-%if GRAPH_TYPE <> CURVE %or GRAPH_LINE = OFF %then
-        %unset GRAPH_BLANKING
+%if GRAPH_SHADE <> ON %or GRAPH_SHADE_STYLE <> DOT %or GRAPH_TYPE <> AREA %and GRAPH_TYPE <> BAR %then
+	%unset GRAPH_SHADE_DOT_SIZE
 
-%if GRAPH_TYPE <> CURVE %or GRAPH_LINE = OFF %or GRAPH_BLANKING = OFF %then
-        %unset GRAPH_BLANKING_GAP
+%if GRAPH_SHADE <> ON %or GRAPH_TYPE <> AREA %and GRAPH_TYPE <> BAR %then
+	%unset GRAPH_SHADE_COLOUR
+	%unset GRAPH_SHADE_STYLE
 
-%if GRAPH_LINE = OFF %then
-        %unset GRAPH_LINE_STYLE
-        %unset GRAPH_LINE_COLOUR
-        %unset GRAPH_LINE_THICKNESS
-
-%if (GRAPH_TYPE <> CURVE %and GRAPH_TYPE <> AREA) %or GRAPH_SYMBOL = OFF %then
-        %unset GRAPH_SYMBOL_MARKER_INDEX
-        %unset GRAPH_SYMBOL_COLOUR
-        %unset GRAPH_SYMBOL_HEIGHT
- 
 %if GRAPH_TYPE <> BAR %then
-        %unset GRAPH_BAR_WIDTH
-        %unset GRAPH_BAR_COLOUR
-        %unset GRAPH_BAR_ANNOTATION_POSITION
+	%unset GRAPH_BAR_COLOUR
+	%unset GRAPH_BAR_ANNOTATION
+	%unset GRAPH_BAR_STYLE
+	%unset GRAPH_BAR_CLIPPING
+	%unset GRAPH_BAR_LINE_COLOUR
+	%unset GRAPH_BAR_WIDTH
+	%unset GRAPH_BAR_MINIMUM_VALUE
+	%unset GRAPH_BAR_JUSTIFICATION
+	%unset GRAPH_BAR_ANNOTATION_FONT_COLOUR
+	%unset GRAPH_BAR_ANNOTATION_FONT_SIZE
+	%unset GRAPH_BAR_LINE_STYLE
+	%unset GRAPH_BAR_LINE_THICKNESS
+
+%if LEGEND <> ON %then
+	%unset LEGEND_USER_TEXT
+
+%if GRAPH_TYPE <> AREA %and GRAPH_TYPE <> BAR %then
+	%unset GRAPH_SHADE
 
-%if GRAPH_TYPE <> BAR %or GRAPH_LINE = OFF %then
-        %unset GRAPH_BAR_LINE_STYLE
-        %unset GRAPH_BAR_LINE_THICKNESS
+%if GRAPH_TYPE <> CURVE %then
+	%unset GRAPH_X_SUPPRESS_BELOW
+	%unset GRAPH_X_SUPPRESS_ABOVE
+	%unset GRAPH_SYMBOL
+	%unset GRAPH_Y_SUPPRESS_ABOVE
+	%unset GRAPH_LINE
+	%unset GRAPH_Y_SUPPRESS_BELOW
+	%unset GRAPH_MISSING_DATA_MODE
diff --git a/share/metview/etc/MLEGENDDef b/share/metview/etc/MLEGENDDef
index 821ad2c..1e2535c 100755
--- a/share/metview/etc/MLEGENDDef
+++ b/share/metview/etc/MLEGENDDef
@@ -1,263 +1,285 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
-       ONOFF {
-             ON  ; ON
-             OFF ; OFF
-       }
-
-       COLOUR {
-			%include MagicsColors.h
-       }
-
-       LINE_STYLE {
-             SOLID      ; SOLID
-             DOT        ; DOT
-             DASH       ; DASH
-             CHAIN_DOT  ; CHAIN_DOT
-             CHAIN_DASH ; CHAIN_DASH
-       }
-
-       MARKER {
-             1        ; 1
-             2        ; 2
-             3        ; 3
-             4        ; 4
-             5        ; 5
-       }
-
-       QUALITY {
-             LOW        ; LOW
-             MEDIUM     ; MEDIUM
-             HIGH       ; HIGH
-       }
-
-       SHADING {
-             DOT        ; DOT
-             HATCH      ; HATCH
-             AREA_FILL  ; AREA_FILL
-       }
-
-       THICKNESS {
-             1        ; 1
-             2        ; 2
-             3        ; 3
-             4        ; 4
-             5        ; 5
-             6        ; 6
-             7        ; 7
-             8        ; 8
-             9        ; 9
-            10        ; 10
-       }
+	COLOUR {
+		%include MagicsColors.h
+	}
+	STYLE {
+		SOLID; SOLID
+		DASH; DASH
+		DOT; DOT
+		CHAIN_DOT; CHAIN_DOT
+		CHAIN_DASH; CHAIN_DASH
+	}
 }
 
-MLEGEND   ; LEGEND    ; MAGICS
+MLEGEND; Magics; Automatically generated
 {
-	
-		LEGEND_POSITIONING [ visible= false]
-		{
- 				AUTOMATIC	; AUTOMATIC
- 				#INSIDE		; INSIDE
- 				#OUTSIDE		; OUTSIDE
-		} = AUTOMATIC
-
-		LEGEND_SUBPAGE_POSITION 
-        [ visible= false]
-		{
-				BOTTOM_RIGHT	; BOTTOM_RIGHT
-				TOP_RIGHT		; TOP_RIGHT
-				TOP_LEFT		; TOP_LEFT
-				BOTTOM_LEFT		; BOTTOM_LEFT
-		} = BOTTOM_RIGHT
-        LEGEND_DISPLAY_TYPE
-    	{
-    	        DISJOINT    ; DISJOINT
-    	        CONTINUOUS  ; CONTINUOUS
-    	        HISTOGRAM  ; HISTOGRAM
-    	} = CONTINUOUS
+	LEGEND_TEXT_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = NAVY
+
+	LEGEND_TITLE
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	LEGEND_TITLE_TEXT
+	{
+		@
+	} = LEGEND
+
+	LEGEND_TITLE_ORIENTATION
+	{
+		VERTICAL;VERTICAL
+		HORIZONTAL;HORIZONTAL
+		AUTOMATIC;AUTOMATIC
+	} = AUTOMATIC
+
+	LEGEND_TITLE_FONT_SIZE
+	{
+		*
+	} = -1
+
+	LEGEND_TITLE_FONT_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = AUTOMATIC
+
+	LEGEND_TITLE_POSITION
+	{
+		AUTOMATIC;AUTOMATIC
+		TOP;TOP
+		BOTTOM;BOTTOM
+		LEFT;LEFT
+		RIGHT;RIGHT
+	} = AUTOMATIC
+
+	LEGEND_TITLE_POSITION_RATIO
+	{
+		*
+	} = 25
+
+	LEGEND_UNITS_TEXT
+	{
+		@
+	} = ''
+
+	LEGEND_USER_MINIMUM
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	LEGEND_USER_MINIMUM_TEXT
+	{
+		@
+	} = ''
+
+	LEGEND_USER_MAXIMUM
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	LEGEND_USER_MAXIMUM_TEXT
+	{
+		@
+	} = ''
+
+	LEGEND_DISPLAY_TYPE
+	{
+		DISJOINT; DISJOINT
+		CONTINUOUS; CONTINUOUS
+		HISTOGRAM; HISTOGRAM
+	} = CONTINUOUS
+
+	LEGEND_TEXT_FORMAT
+	{
+		@
+	} = '(AUTOMATIC)'
+
+	LEGEND_BOX_MODE
+	{
+		AUTOMATIC;AUTOMATIC
+		POSITIONAL;POSITIONAL
+	} = AUTOMATIC
+
+	LEGEND_TEXT_FONT
+	{
+		SERIF;SERIF
+		SANSSERIF;SANSSERIF
+	} = SANSSERIF
+
+	LEGEND_TEXT_FONT_STYLE
+	{
+		NORMAL;NORMAL
+		BOLD;BOLD
+		ITALIC;ITALIC
+		BOLDITALIC;BOLDITALIC
+	} = NORMAL
+
+	LEGEND_TEXT_FONT_SIZE
+	{
+		@
+	} = 0.2
+
+	LEGEND_TEXT_ORIENTATION
+	{
+		*
+	} = 0
+
+	LEGEND_USER_LINES
+	{
+		@
+		/
+	} = ''
+
+	LEGEND_COLUMN_COUNT
+	{
+		*
+	} = 1
 
 	LEGEND_ENTRY_PLOT_DIRECTION
 	{
-		AUTOMATIC
-		ROW
-		COLUMN
+		AUTOMATIC;AUTOMATIC
+		ROW;ROW
+		COLUMN;COLUMN
 	} = AUTOMATIC
-    LEGEND_ENTRY_PLOT_ORIENTATION
+
+	LEGEND_ENTRY_PLOT_ORIENTATION
 	{
-		BOTTOM_TOP
-		TOP_BOTTOM
+		BOTTOM_TOP;BOTTOM_TOP
+		TOP_BOTTOM;TOP_BOTTOM
 	} = BOTTOM_TOP
+
+	LEGEND_TEXT_COMPOSITION
+	{
+		AUTOMATIC_TEXT_ONLY;AUTOMATIC_TEXT_ONLY
+		USER_TEXT_ONLY;USER_TEXT_ONLY
+		BOTH;BOTH
+	} = AUTOMATIC_TEXT_ONLY
+
+	LEGEND_BOX_X_POSITION
+	{
+		*
+	} = -1
+
+	LEGEND_BOX_Y_POSITION
+	{
+		*
+	} = -1
+
+	LEGEND_BOX_X_LENGTH
+	{
+		*
+	} = -1
+
+	LEGEND_BOX_Y_LENGTH
+	{
+		*
+	} = 0
+
+	LEGEND_BOX_BLANKING
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	LEGEND_BORDER
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	LEGEND_BORDER_LINE_STYLE
+	{
+		&PARAMSHARE&STYLE
+	} = SOLID
+
+	LEGEND_BORDER_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLUE
+
+	LEGEND_BORDER_THICKNESS
+	{
+		*
+	} = 1
+
 	LEGEND_ENTRY_TEXT_WIDTH
 	{
 		*
-	} = 50
+	} = 60
 
-	LEGEND_COLUMN_COUNT
-    	{
-        		*
-    	} = 1
-
-    	LEGEND_TITLE
-    	{
-        		&PARAMSHARE&ONOFF
-    	} = OFF
-
-    	LEGEND_TITLE_TEXT
-    	{
-        		@
-    	} = 'LEGEND'
-
-     LEGEND_TITLE_ORIENTATION
-     {
-          AUTOMATIC
-          HORIZONTAL
-          VERTICAL
-     } = AUTOMATIC
-
-     LEGEND_TEXT_COMPOSITION
-     {
-          AUTOMATIC_TEXT_ONLY ;AUTOMATIC_TEXT_ONLY
-          USER_TEXT_ONLY; USER_TEXT_ONLY
-          BOTH; BOTH
-     } = AUTOMATIC_TEXT_ONLY
-
-     LEGEND_USER_LINES
-     {
-          @
-          /
-     } = ''
-
-        LEGEND_TEXT_COLOUR
-        {
-                 &PARAMSHARE&COLOUR
-        } = NAVY
-
-        LEGEND_TEXT_FORMAT
-        {
-                @
-        } = '(automatic)'
-        
-        LEGEND_TEXT_FONT_SIZE
-        {
-               *
-        } = 0.2
-        
-        LEGEND_LABEL_FREQUENCY
-        {
-            *
-        } = 1
-        
-        LEGEND_ENTRY_BORDER 
-        {
-            &PARAMSHARE&ONOFF
-        } = ON
-        
-        LEGEND_ENTRY_BORDER_COLOUR 
-        {
-            &PARAMSHARE&COLOUR
-        } = black
-        
-        
-    	LEGEND_BOX_BLANKING
-    	{
-        		&PARAMSHARE&ONOFF
-    	} = OFF
-
-    	LEGEND_BORDER
-    	{
-        		&PARAMSHARE&ONOFF
-    	} = OFF
-
-    	LEGEND_BORDER_COLOUR
-    	{
-    		    &PARAMSHARE&COLOUR
-    	} = BLUE
-
-    	LEGEND_BORDER_LINE_STYLE
-    	{
-        		&PARAMSHARE&LINE_STYLE
-    	} = SOLID
-
-    	LEGEND_BORDER_THICKNESS
-    	{
-        		&PARAMSHARE&THICKNESS
-    	} = 1
-
-    	
-
-
-        LEGEND_BOX_MODE 
-		{
-				AUTOMATIC		; AUTOMATIC
-				POSITIONAL		; POSITIONAL
-		} = AUTOMATIC
-
-	 	
-    	LEGEND_BOX_X_POSITION
-    	{
-        		@
-    	} = 0.0
-
-    	LEGEND_BOX_Y_POSITION 
-    	{
-        		@
-    	} = 0.0
-
-    	LEGEND_BOX_X_LENGTH 
-    	{
-        		@
-    	} = 1.0
-
-    	LEGEND_BOX_Y_LENGTH 
-    	{
-        		@
-    	} = 1.0
-        
-        LEGEND_HISTOGRAM_BORDER 
-        {
-            &PARAMSHARE&ONOFF
-        } = ON
-        
-        LEGEND_HISTOGRAM_BORDER_COLOUR 
-        {
-            &PARAMSHARE&COLOUR
-        } = black
-        
-        LEGEND_HISTOGRAM_MEAN_VALUE 
-        {
-            &PARAMSHARE&ONOFF
-        } = OFF
-        
-        LEGEND_HISTOGRAM_MEAN_VALUE_MARKER 
-        {
-            *
-        } = 15
-        
-        LEGEND_HISTOGRAM_MEAN_VALUE_MARKER_COLOUR
-        {
-            &PARAMSHARE&COLOUR
-        } = black
-        LEGEND_HISTOGRAM_MEAN_VALUE_MARKER_SIZE
-        {
-            @
-        } = 0.5
-        
-         LEGEND_HISTOGRAM_MAX_VALUE 
-        {
-            &PARAMSHARE&ONOFF
-        } = ON
-        LEGEND_HISTOGRAM_GRID_COLOUR
-        {
-            &PARAMSHARE&COLOUR
-        } = black
-        LEGEND_HISTOGRAM_GRID_LINE_STYLE
-        {
-            &PARAMSHARE&LINE_STYLE
-        } = SOLID
-         LEGEND_HISTOGRAM_GRID_THICKNESS
-        {
-            *
-        } = 1
-        
-
-}  ! end of MLEGEND
+	LEGEND_ENTRY_BORDER
+	{
+		ON;  ON
+		OFF; OFF
+	} = ON
+
+	LEGEND_ENTRY_BORDER_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLACK
+
+	LEGEND_LABEL_FREQUENCY
+	{
+		*
+	} = 1
+
+	LEGEND_HISTOGRAM_BORDER
+	{
+		ON;  ON
+		OFF; OFF
+	} = ON
+
+	LEGEND_HISTOGRAM_BORDER_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLACK
+
+	LEGEND_HISTOGRAM_MEAN_VALUE
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	LEGEND_HISTOGRAM_MEAN_VALUE_MARKER
+	{
+		*
+	} = 15
+
+	LEGEND_HISTOGRAM_MEAN_VALUE_MARKER_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLACK
+
+	LEGEND_HISTOGRAM_MEAN_VALUE_MARKER_SIZE
+	{
+		*
+	} = 0.4
+
+	LEGEND_HISTOGRAM_MAX_VALUE
+	{
+		ON;  ON
+		OFF; OFF
+	} = ON
+
+	LEGEND_HISTOGRAM_GRID_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLACK
+
+	LEGEND_HISTOGRAM_GRID_LINE_STYLE
+	{
+		&PARAMSHARE&STYLE
+	} = SOLID
+
+	LEGEND_HISTOGRAM_GRID_THICKNESS
+	{
+		*
+	} = 1
+
+}
diff --git a/share/metview/etc/MLEGENDRules b/share/metview/etc/MLEGENDRules
index a7af715..f64951c 100644
--- a/share/metview/etc/MLEGENDRules
+++ b/share/metview/etc/MLEGENDRules
@@ -1,62 +1,53 @@
-%if LEGEND_TITLE = OFF %then
-    %unset LEGEND_TITLE_TEXT
-    %unset LEGEND_TITLE_ORIENTATION
 
-%if LEGEND_BORDER = OFF %then
-    %unset LEGEND_BORDER_COLOUR
-    %unset LEGEND_BORDER_THICKNESS
-    %unset LEGEND_BORDER_LINE_STYLE
+%if LEGEND_TITLE <> ON %then
+	%unset LEGEND_TITLE_TEXT
+	%unset LEGEND_TITLE_FONT_SIZE
+	%unset LEGEND_TITLE_FONT_COLOUR
+	%unset LEGEND_TITLE_POSITION_RATIO
+	%unset LEGEND_TITLE_POSITION
+	%unset LEGEND_TITLE_ORIENTATION
 
-%if LEGEND_BOX_MODE = AUTOMATIC %then
-	%unset LEGEND_BOX_X_POSITION
+%if LEGEND_USER_MINIMUM <> ON %then
+	%unset LEGEND_USER_MINIMUM_TEXT
+
+%if LEGEND_BORDER <> ON %then
+	%unset LEGEND_BORDER_THICKNESS
+	%unset LEGEND_BORDER_COLOUR
+	%unset LEGEND_BORDER_LINE_STYLE
+
+%if LEGEND_ENTRY_BORDER <> ON %then
+	%unset LEGEND_ENTRY_BORDER_COLOUR
+
+%if LEGEND_DISPLAY_TYPE <> CONTINUOUS %then
+	%unset LEGEND_LABEL_FREQUENCY
+
+%if LEGEND_DISPLAY_TYPE <> HISTOGRAM %then
+	%unset LEGEND_HISTOGRAM_BORDER
+	%unset LEGEND_HISTOGRAM_GRID_THICKNESS
+	%unset LEGEND_HISTOGRAM_MEAN_VALUE
+	%unset LEGEND_HISTOGRAM_GRID_LINE_STYLE
+	%unset LEGEND_HISTOGRAM_MAX_VALUE
+	%unset LEGEND_HISTOGRAM_GRID_COLOUR
+
+%if LEGEND_DISPLAY_TYPE <> HISTOGRAM %or LEGEND_HISTOGRAM_BORDER <> ON %then
+	%unset LEGEND_HISTOGRAM_BORDER_COLOUR
+
+%if LEGEND_USER_MAXIMUM <> ON %then
+	%unset LEGEND_USER_MAXIMUM_TEXT
+
+%if LEGEND_DISPLAY_TYPE <> HISTOGRAM %or LEGEND_HISTOGRAM_MEAN_VALUE <> ON %then
+	%unset LEGEND_HISTOGRAM_MEAN_VALUE_MARKER
+	%unset LEGEND_HISTOGRAM_MEAN_VALUE_MARKER_COLOUR
+	%unset LEGEND_HISTOGRAM_MEAN_VALUE_MARKER_SIZE
+
+%if LEGEND_BOX_MODE <> POSITIONAL %then
 	%unset LEGEND_BOX_Y_POSITION
+	%unset LEGEND_BOX_X_POSITION
 	%unset LEGEND_BOX_X_LENGTH
 	%unset LEGEND_BOX_Y_LENGTH
 
-%if LEGEND_BOX_MODE = POSITIONAL %then
-    %unset LEGEND_POSITIONING
-    %unset LEGEND_SUBPAGE_POSITION
-
-
-%if LEGEND_DISPLAY_TYPE = DISJOINT %then
-    %unset LEGEND_LABEL_FREQUENCY
-    %unset LEGEND_HISTOGRAM_BORDER
-    %unset LEGEND_HISTOGRAM_BORDER_COLOUR
-    %unset LEGEND_HISTOGRAM_MEAN_VALUE
-    %unset LEGEND_HISTOGRAM_MEAN_VALUE_MARKER
-    %unset LEGEND_HISTOGRAM_MEAN_VALUE_MARKER_COLOUR
-    %unset LEGEND_HISTOGRAM_MEAN_VALUE_MARKER_SIZE 
-    %unset LEGEND_HISTOGRAM_MAX_VALUE      
-    %unset LEGEND_HISTOGRAM_GRID_COLOUR
-    %unset LEGEND_HISTOGRAM_GRID_LINE_STYLE
-    %unset LEGEND_HISTOGRAM_GRID_THICKNESS
-
-%if LEGEND_DISPLAY_TYPE = CONTINUOUS %then
-    %unset LEGEND_HISTOGRAM_BORDER_COLOUR 
-    %unset LEGEND_HISTOGRAM_BORDER 
-    %unset LEGEND_HISTOGRAM_MEAN_VALUE
-    %unset LEGEND_HISTOGRAM_MEAN_VALUE_MARKER
-    %unset LEGEND_HISTOGRAM_MEAN_VALUE_MARKER_COLOUR
-    %unset LEGEND_HISTOGRAM_MEAN_VALUE_MARKER_SIZE 
-    %unset LEGEND_HISTOGRAM_MAX_VALUE      
-    %unset LEGEND_HISTOGRAM_GRID_COLOUR
-    %unset LEGEND_HISTOGRAM_GRID_LINE_STYLE
-    %unset LEGEND_HISTOGRAM_GRID_THICKNESS
-    
-%if LEGEND_ENTRY_BORDER = OFF %then
-    %unset LEGEND_ENTRY_BORDER_COLOUR
-
-%if LEGEND_HISTOGRAM_BORDER = OFF %then
-    %unset LEGEND_HISTOGRAM_BORDER_COLOUR
-
-%if LEGEND_POSITIONING = AUTOMATIC %or LEGEND_POSITIONING = OUTSIDE %then
-    %unset LEGEND_SUBPAGE_POSITION
-
-%if LEGEND_TEXT_COMPOSITION = AUTOMATIC_TEXT_ONLY %then
-    %unset LEGEND_USER_LINES
-
-%if LEGEND_HISTOGRAM_MEAN_VALUE = OFF %then
-    %unset LEGEND_HISTOGRAM_MEAN_VALUE_MARKER
-    %unset LEGEND_HISTOGRAM_MEAN_VALUE_MARKER_COLOUR
-    %unset LEGEND_HISTOGRAM_MEAN_VALUE_MARKER_SIZE
-    
+%if LEGEND_DISPLAY_TYPE <> CONTINUOUS %and LEGEND_DISPLAY_TYPE <> HISTOGRAM %then
+	%unset LEGEND_LABEL_FREQUENCY
+
+%if LEGEND_TEXT_COMPOSITION <> BOTH %and LEGEND_TEXT_COMPOSITION <> USER_TEXT_ONLY %then
+	%unset LEGEND_USER_LINES
diff --git a/share/metview/etc/MSYMBDef b/share/metview/etc/MSYMBDef
index e217fa8..b35ba73 100644
--- a/share/metview/etc/MSYMBDef
+++ b/share/metview/etc/MSYMBDef
@@ -2,7 +2,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
 		%include MagicsColors.h
-		}
+	}
 	STYLE {
 		SOLID; SOLID
 		DASH; DASH
@@ -11,51 +11,91 @@ PARAMSHARE ; ParamShare; PARAMSHARE
 		CHAIN_DASH; CHAIN_DASH
 	}
 }
+
 MSYMB; Magics; Automatically generated
 {
 	LEGEND
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = OFF
 
 	SYMBOL_TYPE
 	{
-		NUMBER; NUMBER
-		TEXT; TEXT
-		MARKER; MARKER
+		NUMBER;NUMBER
+		TEXT;TEXT
+		MARKER;MARKER
+		WIND;WIND
+		BOTH;BOTH
 	} = NUMBER
 
+	SYMBOL_TABLE_MODE
+	{
+		OFF; OFF
+		ADVANCED; ADVANCED
+		ON; ON
+	} = OFF
+
 	SYMBOL_FORMAT
 	{
 		@
-	} = "(automatic)"
+	} = '(AUTOMATIC)'
 
-	SYMBOL_TABLE_MODE
+	SYMBOL_OUTLINE
 	{
+		ON;  ON
 		OFF; OFF
-		ADVANCED; ADVANCED
-		ON; ON
 	} = OFF
 
-	SYMBOL_MARKER_MODE
+	SYMBOL_OUTLINE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLACK
+
+	SYMBOL_OUTLINE_THICKNESS
+	{
+		*
+	} = 1
+
+	SYMBOL_OUTLINE_STYLE
 	{
-		BY_INDEX; BY_INDEX
-		BY_NAME; BY_NAME
-	} = BY_INDEX
+		&PARAMSHARE&STYLE
+	} = SOLID
 
-	SYMBOL_MARKER_INDEX
+	SYMBOL_CONNECT_LINE
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	SYMBOL_CONNECT_AUTOMATIC_LINE_COLOUR
+	{
+		ON;  ON
+		OFF; OFF
+	} = ON
+
+	SYMBOL_CONNECT_LINE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLACK
+
+	SYMBOL_CONNECT_LINE_THICKNESS
 	{
 		*
 	} = 1
 
-	SYMBOL_MARKER_NAME
+	SYMBOL_CONNECT_LINE_STYLE
 	{
-		@
-	} = dot
+		&PARAMSHARE&STYLE
+	} = SOLID
 
-	SYMBOL_COLOUR
+	LEGEND_USER_TEXT
 	{
+		@
+	} = ''
+
+	SYMBOL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = BLUE
 
@@ -64,23 +104,64 @@ MSYMB; Magics; Automatically generated
 		*
 	} = 0.2
 
+	SYMBOL_MARKER_MODE
+	{
+		INDEX;INDEX
+		NAME;NAME
+		IMAGE;IMAGE
+	} = INDEX
+
+	SYMBOL_MARKER_INDEX
+	{
+		*
+	} = 1
+
+	SYMBOL_MARKER_NAME
+	{
+		@
+	} = DOT
+
+	SYMBOL_IMAGE_PATH
+	{
+		@
+	} = ''
+
+	SYMBOL_IMAGE_FORMAT
+	{
+		AUTOMATIC;AUTOMATIC
+		PNG;PNG
+		SVG;SVG
+	} = AUTOMATIC
+
+	SYMBOL_IMAGE_WIDTH
+	{
+		*
+	} = -1
+
+	SYMBOL_IMAGE_HEIGHT
+	{
+		*
+	} = -1
+
 	SYMBOL_TEXT_LIST
 	{
-		@		
+		@
 		/
-	}
+	} = ''
+
 	SYMBOL_TEXT_POSITION
 	{
-		RIGHT; RIGHT
-		LEFT; LEFT
-		BOTTOM; BOTTOM
-		TOP; TOP
+		RIGHT;RIGHT
+		LEFT;LEFT
+		BOTTOM;BOTTOM
+		TOP;TOP
 	} = RIGHT
 
 	SYMBOL_TEXT_FONT_NAME
 	{
-		@
-	} = sansserif
+		SERIF;SERIF
+		SANSSERIF;SANSSERIF
+	} = SANSSERIF
 
 	SYMBOL_TEXT_FONT_SIZE
 	{
@@ -89,13 +170,58 @@ MSYMB; Magics; Automatically generated
 
 	SYMBOL_TEXT_FONT_STYLE
 	{
+		NORMAL;NORMAL
+		BOLD;BOLD
+		ITALIC;ITALIC
+		BOLDITALIC;BOLDITALIC
+	} = NORMAL
+
+	SYMBOL_TEXT_FONT_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = AUTOMATIC
+
+	SYMBOL_TEXT_BLANKING
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	SYMBOL_MIN_TABLE
+	{
+		*
+		/
+	} = ''
+
+	SYMBOL_MAX_TABLE
+	{
+		*
+		/
+	} = ''
+
+	SYMBOL_MARKER_TABLE
+	{
+		*
+		/
+	} = ''
+
+	SYMBOL_NAME_TABLE
+	{
 		@
-	} = normal
+		/
+	} = ''
 
-	SYMBOL_TEXT_FONT_COLOUR
+	SYMBOL_COLOUR_TABLE
 	{
-		&PARAMSHARE&COLOUR
-	} = BLACK
+		@
+		/
+	} = ''
+
+	SYMBOL_HEIGHT_TABLE
+	{
+		*
+		/
+	} = ''
 
 	SYMBOL_ADVANCED_TABLE_SELECTION_TYPE
 	{
@@ -104,6 +230,16 @@ MSYMB; Magics; Automatically generated
 		LIST; LIST
 	} = COUNT
 
+	SYMBOL_ADVANCED_TABLE_MIN_VALUE
+	{
+		*
+	} = -1.E21
+
+	SYMBOL_ADVANCED_TABLE_MAX_VALUE
+	{
+		*
+	} = 1.E21
+
 	SYMBOL_ADVANCED_TABLE_LEVEL_COUNT
 	{
 		*
@@ -126,61 +262,54 @@ MSYMB; Magics; Automatically generated
 
 	SYMBOL_ADVANCED_TABLE_LEVEL_LIST
 	{
-		*		
-		/
-	} 
-	SYMBOL_ADVANCED_TABLE_MIN_VALUE
-	{
-		*
-	} = -1.E21
-
-	SYMBOL_ADVANCED_TABLE_MAX_VALUE
-	{
 		*
-	} = 1.E21
+		/
+	} = ''
 
 	SYMBOL_ADVANCED_TABLE_COLOUR_METHOD
 	{
-		CALCULATE; CALCULATE
-		LIST; LIST
+		CALCULATE;CALCULATE
+		LIST;LIST
 	} = CALCULATE
 
-	SYMBOL_ADVANCED_TABLE_MAX_LEVEL_COLOUR
-	{
+	SYMBOL_ADVANCED_TABLE_MAX_LEVEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = BLUE
 
-	SYMBOL_ADVANCED_TABLE_MIN_LEVEL_COLOUR
-	{
+	SYMBOL_ADVANCED_TABLE_MIN_LEVEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = RED
 
 	SYMBOL_ADVANCED_TABLE_COLOUR_DIRECTION
 	{
-		CLOCKWISE; CLOCKWISE
-		ANTI-CLOCKWISE; ANTI-CLOCKWISE
+		CLOCKWISE;CLOCKWISE
+		ANTI-CLOCKWISE;ANTI-CLOCKWISE
 	} = ANTI_CLOCKWISE
 
 	SYMBOL_ADVANCED_TABLE_COLOUR_LIST
 	{
-		@		
+		@
 		/
-	}
+	} = ''
+
 	SYMBOL_ADVANCED_TABLE_COLOUR_LIST_POLICY
 	{
-		LASTONE; LASTONE
-		CYCLE; CYCLE
+		LASTONE;LASTONE
+		CYCLE;CYCLE
 	} = LASTONE
 
 	SYMBOL_ADVANCED_TABLE_MARKER_LIST
 	{
-		*		
+		*
 		/
-	} 
+	} = ''
+
 	SYMBOL_ADVANCED_TABLE_MARKER_LIST_POLICY
 	{
-		LASTONE; LASTONE
-		CYCLE; CYCLE
+		LASTONE;LASTONE
+		CYCLE;CYCLE
 	} = LASTONE
 
 	SYMBOL_ADVANCED_TABLE_HEIGHT_METHOD
@@ -201,30 +330,33 @@ MSYMB; Magics; Automatically generated
 
 	SYMBOL_ADVANCED_TABLE_HEIGHT_LIST
 	{
-		*		
+		*
 		/
-	} 
+	} = ''
+
 	SYMBOL_ADVANCED_TABLE_HEIGHT_LIST_POLICY
 	{
-		LASTONE; LASTONE
-		CYCLE; CYCLE
+		LASTONE;LASTONE
+		CYCLE;CYCLE
 	} = LASTONE
 
 	SYMBOL_ADVANCED_TABLE_TEXT_LIST
 	{
-		@		
+		@
 		/
-	}
+	} = ''
+
 	SYMBOL_ADVANCED_TABLE_TEXT_LIST_POLICY
 	{
-		LASTONE; LASTONE
-		CYCLE; CYCLE
+		LASTONE;LASTONE
+		CYCLE;CYCLE
 	} = CYCLE
 
 	SYMBOL_ADVANCED_TABLE_TEXT_FONT_NAME
 	{
-		@
-	} = sansserif
+		SERIF;SERIF
+		SANSSERIF;SANSSERIF
+	} = SANSSERIF
 
 	SYMBOL_ADVANCED_TABLE_TEXT_FONT_SIZE
 	{
@@ -233,114 +365,30 @@ MSYMB; Magics; Automatically generated
 
 	SYMBOL_ADVANCED_TABLE_TEXT_FONT_STYLE
 	{
-		@
-	} = normal
+		NORMAL;NORMAL
+		BOLD;BOLD
+		ITALIC;ITALIC
+		BOLDITALIC;BOLDITALIC
+	} = NORMAL
 
-	SYMBOL_ADVANCED_TABLE_TEXT_FONT_COLOUR
-	{
+	SYMBOL_ADVANCED_TABLE_TEXT_FONT_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
-	} = BLACK
+	} = AUTOMATIC
 
 	SYMBOL_ADVANCED_TABLE_TEXT_DISPLAY_TYPE
 	{
-		CENTRE; CENTRE
-		NONE; NONE
-		RIGHT; RIGHT
-		LEFT; LEFT
-		TOP; TOP
-		BOTTOM; BOTTOM
+		CENTRE;CENTRE
+		NONE;NONE
+		RIGHT;RIGHT
+		LEFT;LEFT
+		TOP;TOP
+		BOTTOM;BOTTOM
 	} = NONE
 
 	SYMBOL_ADVANCED_TABLE_OUTLAYER_METHOD
 	{
 		NONE; NONE
-		SIMPLE; SIMPLE
 	} = NONE
 
-	SYMBOL_MIN_TABLE
-	{
-		*		
-		/
-	} 
-	SYMBOL_MAX_TABLE
-	{
-		*		
-		/
-	} 
-	SYMBOL_MARKER_TABLE
-	{
-		*		
-		/
-	} 
-	SYMBOL_NAME_TABLE
-	{
-		@		
-		/
-	}
-	SYMBOL_COLOUR_TABLE
-	{
-		@		
-		/
-	}
-	SYMBOL_HEIGHT_TABLE
-	{
-		*		
-		/
-	} 
-	SYMBOL_OUTLINE
-	{
-		ON; ON
-		OFF; OFF
-	} = OFF
-
-	SYMBOL_OUTLINE_COLOUR
-	{
-		&PARAMSHARE&COLOUR
-	} = BLACK
-
-	SYMBOL_OUTLINE_THICKNESS
-	{
-		*
-	} = 1
-
-	SYMBOL_OUTLINE_STYLE
-	{
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DASH; CHAIN_DASH
-		CHAIN_DOT; CHAIN_DOT
-	} = SOLID
-
-	SYMBOL_CONNECT_LINE
-	{
-		ON; ON
-		OFF; OFF
-	} = OFF
-
-	SYMBOL_CONNECT_AUTOMATIC_LINE_COLOUR
-	{
-		ON; ON
-		OFF; OFF
-	} = ON
-
-	SYMBOL_CONNECT_LINE_COLOUR
-	{
-		&PARAMSHARE&COLOUR
-	} = BLACK
-
-	SYMBOL_CONNECT_LINE_THICKNESS
-	{
-		*
-	} = 1
-
-	SYMBOL_CONNECT_LINE_STYLE
-	{
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DASH; CHAIN_DASH
-		CHAIN_DOT; CHAIN_DOT
-	} = SOLID
-
 }
diff --git a/share/metview/etc/MSYMBRules b/share/metview/etc/MSYMBRules
index bde823d..59542c8 100644
--- a/share/metview/etc/MSYMBRules
+++ b/share/metview/etc/MSYMBRules
@@ -1,87 +1,134 @@
-%if SYMBOL_TYPE <> NUMBER %then
-	%unset SYMBOL_FORMAT
-%if SYMBOL_TABLE_MODE <> OFF %then
+
+%if SYMBOL_CONNECT_LINE <> ON %then
+	%unset SYMBOL_CONNECT_AUTOMATIC_LINE_COLOUR
+	%unset SYMBOL_CONNECT_LINE_THICKNESS
+	%unset SYMBOL_CONNECT_LINE_STYLE
+
+%if SYMBOL_TYPE <> TEXT %then
+	%unset SYMBOL_TEXT_LIST
+
+%if SYMBOL_TABLE_MODE <> ON %then
+	%unset SYMBOL_MAX_TABLE
+	%unset SYMBOL_NAME_TABLE
+	%unset SYMBOL_MARKER_TABLE
+	%unset SYMBOL_HEIGHT_TABLE
+	%unset SYMBOL_MIN_TABLE
+	%unset SYMBOL_COLOUR_TABLE
+
+%if LEGEND <> ON %or SYMBOL_TABLE_MODE <> OFF %then
+	%unset LEGEND_USER_TEXT
+
+%if SYMBOL_ADVANCED_TABLE_SELECTION_TYPE <> LIST %or SYMBOL_TABLE_MODE <> ADVANCED %then
+	%unset SYMBOL_ADVANCED_TABLE_LEVEL_LIST
+
+%if SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> NUMBER %and SYMBOL_TYPE <> TEXT %then
+	%unset SYMBOL_TEXT_BLANKING
+
+%if SYMBOL_ADVANCED_TABLE_COLOUR_METHOD <> LIST %or SYMBOL_TABLE_MODE <> ADVANCED %then
+	%unset SYMBOL_ADVANCED_TABLE_COLOUR_LIST
+	%unset SYMBOL_ADVANCED_TABLE_COLOUR_LIST_POLICY
+
+%if SYMBOL_MARKER_MODE <> INDEX %or SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> MARKER %then
+	%unset SYMBOL_MARKER_INDEX
+
+%if SYMBOL_TYPE <> NUMBER %and SYMBOL_TYPE <> TEXT %then
+	%unset SYMBOL_TEXT_BLANKING
+
+%if SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> MARKER %then
 	%unset SYMBOL_MARKER_MODE
 	%unset SYMBOL_MARKER_INDEX
 	%unset SYMBOL_MARKER_NAME
-	%unset SYMBOL_COLOUR
-	%unset SYMBOL_HEIGHT
+
+%if SYMBOL_ADVANCED_TABLE_SELECTION_TYPE <> INTERVAL %or SYMBOL_TABLE_MODE <> ADVANCED %then
+	%unset SYMBOL_ADVANCED_TABLE_INTERVAL
+	%unset SYMBOL_ADVANCED_TABLE_REFERENCE_LEVEL
+
+%if SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> TEXT %then
 	%unset SYMBOL_TEXT_LIST
+
+%if SYMBOL_OUTLINE <> ON %then
+	%unset SYMBOL_OUTLINE_STYLE
+	%unset SYMBOL_OUTLINE_THICKNESS
+	%unset SYMBOL_OUTLINE_COLOUR
+
+%if SYMBOL_ADVANCED_TABLE_HEIGHT_METHOD <> LIST %or SYMBOL_TABLE_MODE <> ADVANCED %then
+	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_LIST
+	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_LIST_POLICY
+
+%if SYMBOL_ADVANCED_TABLE_HEIGHT_METHOD <> CALCULATE %or SYMBOL_TABLE_MODE <> ADVANCED %then
+	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_MAX_VALUE
+	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_MIN_VALUE
+
+%if SYMBOL_ADVANCED_TABLE_SELECTION_TYPE <> COUNT %or SYMBOL_TABLE_MODE <> ADVANCED %then
+	%unset SYMBOL_ADVANCED_TABLE_LEVEL_COUNT
+	%unset SYMBOL_ADVANCED_TABLE_LEVEL_TOLERANCE
+
+%if SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> NUMBER %and SYMBOL_TYPE <> TEXT %then
 	%unset SYMBOL_TEXT_POSITION
-	%unset SYMBOL_TEXT_FONT_NAME
-	%unset SYMBOL_TEXT_FONT_SIZE
 	%unset SYMBOL_TEXT_FONT_STYLE
+	%unset SYMBOL_TEXT_FONT_SIZE
+	%unset SYMBOL_TEXT_FONT_NAME
 	%unset SYMBOL_TEXT_FONT_COLOUR
+
+%if SYMBOL_ADVANCED_TABLE_COLOUR_METHOD <> CALCULATE %or SYMBOL_TABLE_MODE <> ADVANCED %then
+	%unset SYMBOL_ADVANCED_TABLE_MIN_LEVEL_COLOUR
+	%unset SYMBOL_ADVANCED_TABLE_COLOUR_DIRECTION
+	%unset SYMBOL_ADVANCED_TABLE_MAX_LEVEL_COLOUR
+
+%if SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> MARKER %then
+	%unset SYMBOL_IMAGE_WIDTH
+	%unset SYMBOL_IMAGE_HEIGHT
+	%unset SYMBOL_IMAGE_PATH
+	%unset SYMBOL_IMAGE_FORMAT
+
+%if SYMBOL_CONNECT_AUTOMATIC_LINE_COLOUR <> OFF %or SYMBOL_CONNECT_LINE <> ON %then
+	%unset SYMBOL_CONNECT_LINE_COLOUR
+
 %if SYMBOL_TABLE_MODE <> ADVANCED %then
 	%unset SYMBOL_ADVANCED_TABLE_SELECTION_TYPE
-	%unset SYMBOL_ADVANCED_TABLE_LEVEL_COUNT
-	%unset SYMBOL_ADVANCED_TABLE_LEVEL_TOLERANCE
+	%unset SYMBOL_ADVANCED_TABLE_TEXT_LIST
+	%unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_SIZE
+	%unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_STYLE
 	%unset SYMBOL_ADVANCED_TABLE_INTERVAL
-	%unset SYMBOL_ADVANCED_TABLE_REFERENCE_LEVEL
-	%unset SYMBOL_ADVANCED_TABLE_LEVEL_LIST
-	%unset SYMBOL_ADVANCED_TABLE_MIN_VALUE
-	%unset SYMBOL_ADVANCED_TABLE_MAX_VALUE
-	%unset SYMBOL_ADVANCED_TABLE_COLOUR_METHOD
-	%unset SYMBOL_ADVANCED_TABLE_MAX_LEVEL_COLOUR
-	%unset SYMBOL_ADVANCED_TABLE_MIN_LEVEL_COLOUR
-	%unset SYMBOL_ADVANCED_TABLE_COLOUR_DIRECTION
 	%unset SYMBOL_ADVANCED_TABLE_COLOUR_LIST
 	%unset SYMBOL_ADVANCED_TABLE_COLOUR_LIST_POLICY
-	%unset SYMBOL_ADVANCED_TABLE_MARKER_LIST
-	%unset SYMBOL_ADVANCED_TABLE_MARKER_LIST_POLICY
-	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_METHOD
-	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_MAX_VALUE
+	%unset SYMBOL_ADVANCED_TABLE_LEVEL_COUNT
+	%unset SYMBOL_ADVANCED_TABLE_COLOUR_METHOD
 	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_MIN_VALUE
-	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_LIST
+	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_METHOD
 	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_LIST_POLICY
-	%unset SYMBOL_ADVANCED_TABLE_TEXT_LIST
-	%unset SYMBOL_ADVANCED_TABLE_TEXT_LIST_POLICY
-	%unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_NAME
-	%unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_SIZE
-	%unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_STYLE
-	%unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_COLOUR
-	%unset SYMBOL_ADVANCED_TABLE_TEXT_DISPLAY_TYPE
-	%unset SYMBOL_ADVANCED_TABLE_OUTLAYER_METHOD
-%if SYMBOL_TABLE_MODE <> ON %then
-	%unset SYMBOL_MIN_TABLE
-	%unset SYMBOL_MAX_TABLE
-	%unset SYMBOL_MARKER_TABLE
-	%unset SYMBOL_NAME_TABLE
-	%unset SYMBOL_COLOUR_TABLE
-	%unset SYMBOL_HEIGHT_TABLE
-%if SYMBOL_MARKER_MODE <> BY_INDEX %then
-	%unset SYMBOL_MARKER_INDEX
-%if SYMBOL_MARKER_MODE <> BY_NAME %then
-	%unset SYMBOL_MARKER_NAME
-%if SYMBOL_ADVANCED_TABLE_SELECTION_TYPE <> COUNT %then
-	%unset SYMBOL_ADVANCED_TABLE_LEVEL_COUNT
-	%unset SYMBOL_ADVANCED_TABLE_LEVEL_TOLERANCE
-%if SYMBOL_ADVANCED_TABLE_SELECTION_TYPE <> INTERVAL %then
-	%unset SYMBOL_ADVANCED_TABLE_INTERVAL
 	%unset SYMBOL_ADVANCED_TABLE_REFERENCE_LEVEL
-%if SYMBOL_ADVANCED_TABLE_SELECTION_TYPE <> LIST %then
-	%unset SYMBOL_ADVANCED_TABLE_LEVEL_LIST
-%if SYMBOL_ADVANCED_TABLE_COLOUR_METHOD <> CALCULATE %then
+	%unset SYMBOL_ADVANCED_TABLE_MARKER_LIST_POLICY
 	%unset SYMBOL_ADVANCED_TABLE_MAX_LEVEL_COLOUR
-	%unset SYMBOL_ADVANCED_TABLE_MIN_LEVEL_COLOUR
+	%unset SYMBOL_ADVANCED_TABLE_OUTLAYER_MIN_VALUE
+	%unset SYMBOL_ADVANCED_TABLE_OUTLAYER_METHOD
+	%unset SYMBOL_ADVANCED_TABLE_OUTLAYER_MAX_VALUE
+	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_LIST
+	%unset SYMBOL_ADVANCED_TABLE_MARKER_LIST
+	%unset SYMBOL_ADVANCED_TABLE_MAX_VALUE
 	%unset SYMBOL_ADVANCED_TABLE_COLOUR_DIRECTION
-%if SYMBOL_ADVANCED_TABLE_COLOUR_METHOD <> LIST %then
-	%unset SYMBOL_ADVANCED_TABLE_COLOUR_LIST
-	%unset SYMBOL_ADVANCED_TABLE_COLOUR_LIST_POLICY
-%if SYMBOL_ADVANCED_TABLE_HEIGHT_METHOD <> CALCULATE %then
+	%unset SYMBOL_ADVANCED_TABLE_LEVEL_TOLERANCE
+	%unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_COLOUR
+	%unset SYMBOL_ADVANCED_TABLE_MIN_VALUE
 	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_MAX_VALUE
-	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_MIN_VALUE
-%if SYMBOL_ADVANCED_TABLE_HEIGHT_METHOD <> LIST %then
-	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_LIST
-	%unset SYMBOL_ADVANCED_TABLE_HEIGHT_LIST_POLICY
-%if SYMBOL_OUTLINE <> ON %then
-	%unset SYMBOL_OUTLINE_COLOUR
-	%unset SYMBOL_OUTLINE_THICKNESS
-	%unset SYMBOL_OUTLINE_STYLE
-%if SYMBOL_CONNECT_LINE <> ON %then
-	%unset SYMBOL_CONNECT_AUTOMATIC_LINE_COLOUR
-	%unset SYMBOL_CONNECT_LINE_COLOUR
-	%unset SYMBOL_CONNECT_LINE_THICKNESS
-	%unset SYMBOL_CONNECT_LINE_STYLE
-%if SYMBOL_CONNECT_AUTOMATIC_LINE_COLOUR <> ON %then
-	%unset SYMBOL_CONNECT_LINE_COLOUR
+	%unset SYMBOL_ADVANCED_TABLE_TEXT_LIST_POLICY
+	%unset SYMBOL_ADVANCED_TABLE_LEVEL_LIST
+	%unset SYMBOL_ADVANCED_TABLE_MIN_LEVEL_COLOUR
+	%unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_NAME
+	%unset SYMBOL_ADVANCED_TABLE_TEXT_DISPLAY_TYPE
+
+%if SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> NUMBER %then
+	%unset SYMBOL_FORMAT
+
+%if SYMBOL_MARKER_MODE <> NAME %or SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> MARKER %then
+	%unset SYMBOL_MARKER_NAME
+
+%if SYMBOL_TABLE_MODE <> OFF %then
+	%unset SYMBOL_COLOUR
+	%unset SYMBOL_HEIGHT
+
+%if SYMBOL_MARKER_MODE <> IMAGE %or SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> MARKER %then
+	%unset SYMBOL_IMAGE_WIDTH
+	%unset SYMBOL_IMAGE_HEIGHT
+	%unset SYMBOL_IMAGE_PATH
+	%unset SYMBOL_IMAGE_FORMAT
diff --git a/share/metview/etc/MTAYLORDef b/share/metview/etc/MTAYLORDef
new file mode 100644
index 0000000..d748a1e
--- /dev/null
+++ b/share/metview/etc/MTAYLORDef
@@ -0,0 +1,169 @@
+PARAMSHARE ; ParamShare; PARAMSHARE
+{
+	COLOUR {
+		%include MagicsColors.h
+		}
+	STYLE {
+		SOLID; SOLID
+		DASH; DASH
+		DOT; DOT
+		CHAIN_DOT; CHAIN_DOT
+		CHAIN_DASH; CHAIN_DASH
+	}
+}
+MTAYLOR; Magics; Automatically generated
+{
+	TAYLOR_LABEL
+	[ help_text = 'Label of the grid' ]
+	{
+		@
+	} = Correlation
+
+	TAYLOR_LABEL_COLOUR
+	[ help_text = 'Colour of the label', help = help_colour,interface = colour]
+	{
+		&PARAMSHARE&COLOUR
+	} = NAVY
+
+	TAYLOR_LABEL_HEIGHT
+	[ help_text = 'Hieght of the label' ]
+	{
+		*
+	} = 0.35
+
+	TAYLOR_PRIMARY_GRID_INCREMENT
+	[ help_text = 'Reference used  of the Standard deviation plotting.' ]
+	{
+		*
+	} = 0.5
+
+	TAYLOR_PRIMARY_GRID_LINE_COLOUR
+	[ help_text = 'Colour used to plot the primary grid', help = help_colour,interface = colour]
+	{
+		&PARAMSHARE&COLOUR
+	} = NAVY
+
+	TAYLOR_PRIMARY_GRID_LINE_THICKNESS
+	[ help_text = 'Thickness used to plot the primary grid' ]
+	{
+		*
+	} = 1
+
+	TAYLOR_PRIMARY_GRID_LINE_STYLE
+	[ help_text = 'Line Style used to plot the primary grid' ]
+	{
+		SOLID; SOLID
+		DASH; DASH
+		DOT; DOT
+		CHAIN_DASH; CHAIN_DASH
+		CHAIN_DOT; CHAIN_DOT
+	} = SOLID
+
+	TAYLOR_PRIMARY_GRID_REFERENCE
+	[ help_text = 'Reference used  of the Standard deviation plotting.' ]
+	{
+		*
+	} = 0.5
+
+	TAYLOR_REFERENCE_LINE_COLOUR
+	[ help_text = 'Colour used to plot the primary grid', help = help_colour,interface = colour]
+	{
+		&PARAMSHARE&COLOUR
+	} = NAVY
+
+	TAYLOR_REFERENCE_LINE_THICKNESS
+	[ help_text = 'Thickness used to plot the primary grid' ]
+	{
+		*
+	} = 2
+
+	TAYLOR_REFERENCE_LINE_STYLE
+	[ help_text = 'Line Style used to plot the primary grid' ]
+	{
+		SOLID; SOLID
+		DASH; DASH
+		DOT; DOT
+		CHAIN_DASH; CHAIN_DASH
+		CHAIN_DOT; CHAIN_DOT
+	} = SOLID
+
+	TAYLOR_PRIMARY_LABEL
+	[ help_text = 'Turn the labels (on/off) of the primary grid' ]
+	{
+		ON; ON
+		OFF; OFF
+	} = ON
+
+	TAYLOR_PRIMARY_LABEL_COLOUR
+	[ help_text = 'Colour of the  labels  of the primary grid', help = help_colour,interface = colour]
+	{
+		&PARAMSHARE&COLOUR
+	} = NAVY
+
+	TAYLOR_PRIMARY_LABEL_HEIGHT
+	[ help_text = 'Height of the  labels  of the primary grid' ]
+	{
+		*
+	} = 0.35
+
+	TAYLOR_SECONDARY_GRID
+	[ help_text = 'turn on/off the secondaries lines for the grid' ]
+	{
+		ON; ON
+		OFF; OFF
+	} = OFF
+
+	TAYLOR_SECONDARY_GRID_REFERENCE
+	[ help_text = 'Reference used  of the Standard deviation plotting.' ]
+	{
+		*
+	} = 0.5
+
+	TAYLOR_SECONDARY_GRID_INCREMENT
+	[ help_text = 'Reference used  of the Standard deviation plotting.' ]
+	{
+		*
+	} = 0.5
+
+	TAYLOR_SECONDARY_GRID_LINE_COLOUR
+	[ help_text = 'Colour used to plot the primary grid', help = help_colour,interface = colour]
+	{
+		&PARAMSHARE&COLOUR
+	} = NAVY
+
+	TAYLOR_SECONDARY_GRID_LINE_THICKNESS
+	[ help_text = 'Thickness used to plot the primary grid' ]
+	{
+		*
+	} = 1
+
+	TAYLOR_SECONDARY_GRID_LINE_STYLE
+	[ help_text = 'Line Style used to plot the primary grid' ]
+	{
+		SOLID; SOLID
+		DASH; DASH
+		DOT; DOT
+		CHAIN_DASH; CHAIN_DASH
+		CHAIN_DOT; CHAIN_DOT
+	} = SOLID
+
+	TAYLOR_SECONDARY_LABEL
+	[ help_text = 'Turn the labels (on/off) of the secondary grid' ]
+	{
+		ON; ON
+		OFF; OFF
+	} = ON
+
+	TAYLOR_SECONDARY_LABEL_COLOUR
+	[ help_text = 'Colour of the  labels  of the secondary grid', help = help_colour,interface = colour]
+	{
+		&PARAMSHARE&COLOUR
+	} = NAVY
+
+	TAYLOR_SECONDARY_LABEL_HEIGHT
+	[ help_text = 'Height of the  labels  of the secondary grid' ]
+	{
+		*
+	} = 0.35
+
+}
diff --git a/share/metview/etc/MTAYLORRules b/share/metview/etc/MTAYLORRules
new file mode 100644
index 0000000..ec4ec73
--- /dev/null
+++ b/share/metview/etc/MTAYLORRules
@@ -0,0 +1,33 @@
+%if  TAYLOR_SECONDARY_GRID <> ON %then 
+	%unset TAYLOR_SECONDARY_GRID_LINE_COLOUR
+
+%if  TAYLOR_SECONDARY_GRID <> ON %then 
+	%unset TAYLOR_SECONDARY_LABEL_COLOUR
+
+%if  TAYLOR_SECONDARY_LABEL <> ON %then 
+	%unset TAYLOR_SECONDARY_LABEL_COLOUR
+
+%if  TAYLOR_SECONDARY_GRID <> ON %then 
+	%unset TAYLOR_SECONDARY_LABEL_HEIGHT
+
+%if  TAYLOR_SECONDARY_LABEL <> ON %then 
+	%unset TAYLOR_SECONDARY_LABEL_HEIGHT
+
+%if  TAYLOR_PRIMARY_LABEL <> ON %then 
+	%unset TAYLOR_PRIMARY_LABEL_COLOUR
+
+%if  TAYLOR_PRIMARY_LABEL <> ON %then 
+	%unset TAYLOR_PRIMARY_LABEL_HEIGHT
+
+%if  TAYLOR_SECONDARY_GRID <> ON %then 
+	%unset TAYLOR_SECONDARY_LABEL
+
+%if  TAYLOR_SECONDARY_GRID <> ON %then 
+	%unset TAYLOR_SECONDARY_GRID_INCREMENT
+
+%if  TAYLOR_SECONDARY_GRID <> ON %then 
+	%unset TAYLOR_SECONDARY_GRID_LINE_STYLE
+
+%if  TAYLOR_SECONDARY_GRID <> ON %then 
+	%unset TAYLOR_SECONDARY_GRID_LINE_THICKNESS
+
diff --git a/share/metview/etc/MTEXTDef b/share/metview/etc/MTEXTDef
index c6fb8b6..a313233 100755
--- a/share/metview/etc/MTEXTDef
+++ b/share/metview/etc/MTEXTDef
@@ -1,141 +1,85 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
-       ONOFF {
-             ON  ; ON
-             OFF ; OFF
-       }
-
-       COLOUR {
-			%include MagicsColors.h
-       }
-
-       LINE_STYLE {
-             SOLID      ; SOLID
-             DOT        ; DOT
-             DASH       ; DASH
-             CHAIN_DOT  ; CHAIN_DOT
-             CHAIN_DASH ; CHAIN_DASH
-       }
-
-       MARKER {
-             1        ; 1
-             2        ; 2
-             3        ; 3
-             4        ; 4
-             5        ; 5
-       }
-
-       QUALITY {
-             LOW        ; LOW
-             MEDIUM     ; MEDIUM
-             HIGH       ; HIGH
-       }
-
-       SHADING {
-             DOT        ; DOT
-             HATCH      ; HATCH
-             AREA_FILL  ; AREA_FILL
-       }
-
-       THICKNESS {
-             1        ; 1
-             2        ; 2
-             3        ; 3
-             4        ; 4
-             5        ; 5
-             6        ; 6
-             7        ; 7
-             8        ; 8
-             9        ; 9
-            10        ; 10
-       }
+	COLOUR {
+		%include MagicsColors.h
+	}
+	STYLE {
+		SOLID; SOLID
+		DASH; DASH
+		DOT; DOT
+		CHAIN_DOT; CHAIN_DOT
+		CHAIN_DASH; CHAIN_DASH
+	}
 }
 
-MTEXT   ; TEXT    ; MAGICS
+MTEXT; Magics; Automatically generated
 {
-	  TEXT_LINE_COUNT
-        {
-                0
-                1
-                2
-                3
-                4
-                5
-                6
-                7
-                8
-                9
-                10
-        } = 1
-        TEXT_LINE_1
-        {
-                @
-        } = "<magics_title/>"
-
-        TEXT_LINE_2
-        {
-                @
-        } = " "
-
-        TEXT_LINE_3
-        {
-                @
-        } = " "
-
-        TEXT_LINE_4
-        {
-                @
-        } = " "
-
-        TEXT_LINE_5
-        {
-                @
-        } = " "
-
-        TEXT_LINE_6
-        {
-                @
-        } = " "
-
-        TEXT_LINE_7
-        {
-                @
-        } = " "
-
-        TEXT_LINE_8
-        {
-                @
-        } = " "
-
-        TEXT_LINE_9
-        {
-                @
-        } = " "
-
-        TEXT_LINE_10
-        {
-                @
-        } = " "
-
-     
-        TEXT_JUSTIFICATION
-        {
-                CENTRE     ; CENTRE
-                LEFT       ; LEFT
-                RIGHT      ; RIGHT
-        } = CENTRE
-
-        
-        TEXT_COLOUR
-        {
-                 &PARAMSHARE&COLOUR
-        } = NAVY
-        
-        TEXT_FONT
+	TEXT_LINE_COUNT
+	{
+		*
+	} = 1
+
+	TEXT_LINE_1
+	{
+		@
+	} = '<magics_title/>'
+
+	TEXT_LINE_2
+	{
+		@
+	} = ''
+
+	TEXT_LINE_3
+	{
+		@
+	} = ''
+
+	TEXT_LINE_4
+	{
+		@
+	} = ''
+
+	TEXT_LINE_5
+	{
+		@
+	} = ''
+
+	TEXT_LINE_6
+	{
+		@
+	} = ''
+
+	TEXT_LINE_7
+	{
+		@
+	} = ''
+
+	TEXT_LINE_8
+	{
+		@
+	} = ''
+
+	TEXT_LINE_9
+	{
+		@
+	} = ''
+
+	TEXT_LINE_10
+	{
+		@
+	} = ''
+
+	TEXT_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = NAVY
+
+	TEXT_FONT
 	{
 		SERIF;SERIF
 		SANSSERIF;SANSSERIF
 	} = SANSSERIF
+
 	TEXT_FONT_STYLE
 	{
 		NORMAL;NORMAL
@@ -143,62 +87,76 @@ MTEXT   ; TEXT    ; MAGICS
 		ITALIC;ITALIC
 		BOLDITALIC;BOLDITALIC
 	} = NORMAL
-      TEXT_FONT_SIZE
+
+	TEXT_FONT_SIZE
+	{
+		@
+	} = 0.3
+
+	TEXT_JUSTIFICATION
+	{
+		LEFT;LEFT
+		CENTRE;CENTRE
+		RIGHT;RIGHT
+	} = CENTRE
+
+	TEXT_LINES
+	{
+		@
+		/
+	} = ''
+
+	TEXT_MODE
+	{
+		TITLE;TITLE
+		POSITIONAL;POSITIONAL
+	} = TITLE
+
+	TEXT_BOX_X_POSITION
+	{
+		*
+	} = -1
+
+	TEXT_BOX_Y_POSITION
 	{
 		*
-	} = 0.3  
-        TEXT_MODE
-        {
-                TITLE      ; TITLE
-                POSITIONAL ; POSITIONAL
-        } = TITLE
-
-        TEXT_BOX_X_POSITION
-        {
-                @
-        } = 2.08
-
-        TEXT_BOX_Y_POSITION
-        {
-                @
-        } = 18.9
-
-        TEXT_BOX_X_LENGTH
-        {
-                @
-        } = 25.245
-
-        TEXT_BOX_Y_LENGTH
-        {
-                @
-        } = 2.1
-
-        TEXT_BOX_BLANKING
-        {
-                 &PARAMSHARE&ONOFF
-        } = OFF
-
-       
-       TEXT_BORDER
-        {
-                 &PARAMSHARE&ONOFF
-        } = OFF
-
-        TEXT_BORDER_COLOUR
-        {
-                 &PARAMSHARE&COLOUR
-        } = BLUE
-
-        TEXT_BORDER_LINE_STYLE
-        {
-                 &PARAMSHARE&LINE_STYLE
-        } = SOLID
-
-        TEXT_BORDER_THICKNESS
-        {
-                 &PARAMSHARE&THICKNESS
-        } = 1
-
-   
-       
-}  ! end of MTEXT
+	} = -1
+
+	TEXT_BOX_X_LENGTH
+	{
+		*
+	} = -1
+
+	TEXT_BOX_Y_LENGTH
+	{
+		*
+	} = -1
+
+	TEXT_BOX_BLANKING
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	TEXT_BORDER
+	{
+		ON;  ON
+		OFF; OFF
+	} = OFF
+
+	TEXT_BORDER_LINE_STYLE
+	{
+		&PARAMSHARE&STYLE
+	} = SOLID
+
+	TEXT_BORDER_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLUE
+
+	TEXT_BORDER_THICKNESS
+	{
+		*
+	} = 1
+
+}
diff --git a/share/metview/etc/MTEXTRules b/share/metview/etc/MTEXTRules
index c6a2f5b..9ad25e9 100644
--- a/share/metview/etc/MTEXTRules
+++ b/share/metview/etc/MTEXTRules
@@ -1,75 +1,41 @@
-%if TEXT_MODE = TITLE %then
-	%unset TEXT_BOX_X_POSITION
-	%unset TEXT_BOX_Y_POSITION
-	%unset TEXT_BOX_X_LENGTH
-	%unset TEXT_BOX_Y_LENGTH
 
-%if TEXT_BORDER = OFF %then
-	%unset TEXT_BORDER_COLOUR
-	%unset TEXT_BORDER_THICKNESS
-	%unset TEXT_BORDER_LINE_STYLE
+%if TEXT_LINE_COUNT <> 10 %and TEXT_LINE_COUNT <> 4 %and TEXT_LINE_COUNT <> 5 %and TEXT_LINE_COUNT <> 6 %and TEXT_LINE_COUNT <> 7 %and TEXT_LINE_COUNT <> 8 %and TEXT_LINE_COUNT <> 9 %then
+	%unset TEXT_LINE_4
+
+%if TEXT_LINE_COUNT <> 10 %and TEXT_LINE_COUNT <> 9 %then
+	%unset TEXT_LINE_9
+
+%if TEXT_LINE_COUNT <> 10 %and TEXT_LINE_COUNT <> 8 %and TEXT_LINE_COUNT <> 9 %then
+	%unset TEXT_LINE_8
 
+%if TEXT_LINE_COUNT <> 10 %then
+	%unset TEXT_LINE_10
 
-%if TEXT_LINE_COUNT = 1 %then
-    %unset TEXT_LINE_2
-    %unset TEXT_LINE_3
-    %unset TEXT_LINE_4
-    %unset TEXT_LINE_5
-    %unset TEXT_LINE_6
-    %unset TEXT_LINE_7
-    %unset TEXT_LINE_8
-    %unset TEXT_LINE_9
-    %unset TEXT_LINE_10
-        
-%if TEXT_LINE_COUNT = 2 %then
-    %unset TEXT_LINE_3
-    %unset TEXT_LINE_4
-    %unset TEXT_LINE_5
-    %unset TEXT_LINE_6
-    %unset TEXT_LINE_7
-    %unset TEXT_LINE_8
-    %unset TEXT_LINE_9
-    %unset TEXT_LINE_10
+%if TEXT_LINE_COUNT <> 10 %and TEXT_LINE_COUNT <> 7 %and TEXT_LINE_COUNT <> 8 %and TEXT_LINE_COUNT <> 9 %then
+	%unset TEXT_LINE_7
 
-%if TEXT_LINE_COUNT = 3 %then
-    %unset TEXT_LINE_4
-    %unset TEXT_LINE_5
-    %unset TEXT_LINE_6
-    %unset TEXT_LINE_7
-    %unset TEXT_LINE_8
-    %unset TEXT_LINE_9
-    %unset TEXT_LINE_10
-    
-%if TEXT_LINE_COUNT = 4 %then
-    %unset TEXT_LINE_5
-    %unset TEXT_LINE_6
-    %unset TEXT_LINE_7
-    %unset TEXT_LINE_8
-    %unset TEXT_LINE_9
-    %unset TEXT_LINE_10
+%if TEXT_BORDER <> ON %then
+	%unset TEXT_BORDER_LINE_STYLE
+	%unset TEXT_BORDER_THICKNESS
+	%unset TEXT_BORDER_COLOUR
+
+%if TEXT_LINE_COUNT <> 10 %and TEXT_LINE_COUNT <> 2 %and TEXT_LINE_COUNT <> 3 %and TEXT_LINE_COUNT <> 4 %and TEXT_LINE_COUNT <> 5 %and TEXT_LINE_COUNT <> 6 %and TEXT_LINE_COUNT <> 7 %and TEXT_LINE_COUNT <> 8 %and TEXT_LINE_COUNT <> 9 %then
+	%unset TEXT_LINE_2
+
+%if TEXT_LINE_COUNT <> 10 %and TEXT_LINE_COUNT <> 5 %and TEXT_LINE_COUNT <> 6 %and TEXT_LINE_COUNT <> 7 %and TEXT_LINE_COUNT <> 8 %and TEXT_LINE_COUNT <> 9 %then
+	%unset TEXT_LINE_5
 
-%if TEXT_LINE_COUNT = 5 %then
-    %unset TEXT_LINE_6
-    %unset TEXT_LINE_7
-    %unset TEXT_LINE_8
-    %unset TEXT_LINE_9
-    %unset TEXT_LINE_10
+%if TEXT_MODE <> POSITIONAL %then
+	%unset TEXT_BOX_X_LENGTH
+	%unset TEXT_BOX_Y_LENGTH
+	%unset TEXT_BOX_X_POSITION
+	%unset TEXT_BOX_Y_POSITION
 
-%if TEXT_LINE_COUNT = 6 %then
-    %unset TEXT_LINE_7
-    %unset TEXT_LINE_8
-    %unset TEXT_LINE_9
-    %unset TEXT_LINE_10
+%if TEXT_LINE_COUNT <> 1 %and TEXT_LINE_COUNT <> 10 %and TEXT_LINE_COUNT <> 2 %and TEXT_LINE_COUNT <> 3 %and TEXT_LINE_COUNT <> 4 %and TEXT_LINE_COUNT <> 5 %and TEXT_LINE_COUNT <> 6 %and TEXT_LINE_COUNT <> 7 %and TEXT_LINE_COUNT <> 8 %and TEXT_LINE_COUNT <> 9 %then
+	%unset TEXT_LINE_1
 
-%if TEXT_LINE_COUNT = 7 %then
-    %unset TEXT_LINE_8
-    %unset TEXT_LINE_9
-    %unset TEXT_LINE_10   
-    
-%if TEXT_LINE_COUNT = 8 %then
-    %unset TEXT_LINE_9
-    %unset TEXT_LINE_10  
-    
+%if TEXT_LINE_COUNT <> 10 %and TEXT_LINE_COUNT <> 6 %and TEXT_LINE_COUNT <> 7 %and TEXT_LINE_COUNT <> 8 %and TEXT_LINE_COUNT <> 9 %then
+	%unset TEXT_LINE_6
 
-%if TEXT_LINE_COUNT = 9 %then
-    %unset TEXT_LINE_10   
+%if TEXT_LINE_COUNT <> 10 %and TEXT_LINE_COUNT <> 3 %and TEXT_LINE_COUNT <> 4 %and TEXT_LINE_COUNT <> 5 %and TEXT_LINE_COUNT <> 6 %and TEXT_LINE_COUNT <> 7 %and TEXT_LINE_COUNT <> 8 %and TEXT_LINE_COUNT <> 9 %then
+	%unset TEXT_LINE_3
diff --git a/share/metview/etc/MVertProfViewDef b/share/metview/etc/MVertProfViewDef
deleted file mode 100644
index 65f7a95..0000000
--- a/share/metview/etc/MVertProfViewDef
+++ /dev/null
@@ -1,111 +0,0 @@
-MVERTPROFVIEW; PlotMod Icon; Metview
-{
-    INPUT_MODE
-    {
-        POINT             ; POINT
-        NEAREST_GRIDPOINT ; GPOINT
-        AREA              ; AREA
-        AREA_2            ; AREA2
-    } = POINT
-
-    POINT
-        [
-            help = help_input,
-            help_icon = 'help_point',
-            input_type = point,
-            input_window = '/System/Defaults/Input Window'
-        ]
-    {
-        *
-        /
-    } = 0./0.
-
-    AREA
-        [
-            help = help_input,
-            help_icon = 'help_area',
-            input_type = area,
-            input_window = '/System/Defaults/Input Window'
-        ]
-    {
-        *
-        /
-    } = 30./-30./-30./30.
-
-    BOTTOM_PRESSURE
-    {
-        *
-    } = 1015.0
-
-    TOP_PRESSURE
-    {
-        *
-    } = 10.0
-
-# PRESSURE_LEVEL_AXIS not checked, use PRESSURE_AXIS icon
-    PRESSURE_LEVEL_AXIS [ visible = false ]
-    {
-        LINEAR
-        LOG
-    } = LINEAR
-
-    PRESSURE_AXIS  
-        [ 
-            interface = icon, 
-            class = PAXIS, 
-            missing = ignored,
-            help            = help_data,
-            help_name       = Pressure Axis,
-            help_directory  = '/System/Defaults',
-            help_class      = PAXIS,
-            help_definition = ( PAXIS,AXIS_ORIENTATION=VERTICAL,
-                                AXIS_POSITION = LEFT)
-        ]
-    {
-        @
-        /
-    }
-
-    VALUE_AXIS
-        [
-            interface = icon, class = PAXIS, missing = ignored,
-            help            = help_data,
-            help_name       = Value Axis,
-            help_directory  = '/System/Defaults',
-            help_class      = PAXIS,
-            help_definition = ( PAXIS, AXIS_TICK_LABEL_TYPE = NUMBER )
-        ]
-    {
-        @
-        /
-    }
-
-    MAP_OVERLAY_CONTROL
-    {
-        ALWAYS
-        BY_DATE
-        BY_LEVEL
-        NEVER
-    } = ALWAYS_OVERLAY
-
-    SUBPAGE_X_POSITION
-    {
-        @
-    } = 7.5
-
-    SUBPAGE_Y_POSITION
-    {
-        @
-    } = 8
-
-    SUBPAGE_X_LENGTH
-    {
-        @
-    } = 85
-
-    SUBPAGE_Y_LENGTH
-    {
-        @
-    } = 80
-%include SubpageFrameDef
-}
diff --git a/share/metview/etc/MVertProfViewRules b/share/metview/etc/MVertProfViewRules
deleted file mode 100644
index 86db976..0000000
--- a/share/metview/etc/MVertProfViewRules
+++ /dev/null
@@ -1,7 +0,0 @@
-%if INPUT_MODE = POINT %then
-	%unset AREA
-
-%if INPUT_MODE = AREA  %then
-	%unset POINT
-
-%include "SubpageFrameRules"
diff --git a/share/metview/etc/MWINDDef b/share/metview/etc/MWINDDef
index 09a2d05..6d235cb 100644
--- a/share/metview/etc/MWINDDef
+++ b/share/metview/etc/MWINDDef
@@ -2,7 +2,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
 		%include MagicsColors.h
-		}
+	}
 	STYLE {
 		SOLID; SOLID
 		DASH; DASH
@@ -11,36 +11,69 @@ PARAMSHARE ; ParamShare; PARAMSHARE
 		CHAIN_DASH; CHAIN_DASH
 	}
 }
+
 MWIND; Magics; Automatically generated
 {
 	WIND_FIELD_TYPE
 	{
 		FLAGS; FLAGS
 		ARROWS; ARROWS
+		STREAMLINES; STREAMLINES
 	} = ARROWS
 
+	WIND_STREAMLINE_MIN_DENSITY
+	{
+		*
+	} = 1
+
+	WIND_STREAMLINE_MIN_SPEED
+	{
+		*
+	} = 1
+
+	WIND_STREAMLINE_THICKNESS
+	{
+		*
+	} = 2
+
+	WIND_STREAMLINE_COLOUR [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR
+	} = BLUE
+
+	WIND_STREAMLINE_STYLE
+	{
+		&PARAMSHARE&STYLE
+	} = SOLID
+
+	WIND_THINNING_FACTOR
+	{
+		*
+	} = 2.0
+
 	LEGEND
 	{
-		ON; ON
+		ON;  ON
 		OFF; OFF
 	} = OFF
 
 	WIND_LEGEND_TEXT
 	{
 		@
-	} = vector
-
-	WIND_ARROW_LEGEND_TEXT
-	{
-		@
-	} = m/s
+	} = VECTOR
 
 	WIND_ADVANCED_METHOD
 	{
-		ON; ON
-		OFF; OFF
+		ON;ON
+		OFF;OFF
 	} = OFF
 
+	WIND_ADVANCED_COLOUR_PARAMETER
+	{
+		SPEED;SPEED
+		PARAMETER;PARAMETER
+	} = SPEED
+
 	WIND_ADVANCED_COLOUR_SELECTION_TYPE
 	{
 		COUNT; COUNT
@@ -48,10 +81,15 @@ MWIND; Magics; Automatically generated
 		LIST; LIST
 	} = COUNT
 
-	WIND_ADVANCED_COLOUR_REFERENCE_LEVEL
+	WIND_ADVANCED_COLOUR_MAX_VALUE
 	{
 		*
-	} = 0.0
+	} = 1.E21
+
+	WIND_ADVANCED_COLOUR_MIN_VALUE
+	{
+		*
+	} = -1.E21
 
 	WIND_ADVANCED_COLOUR_LEVEL_COUNT
 	{
@@ -63,64 +101,55 @@ MWIND; Magics; Automatically generated
 		*
 	} = 2
 
-	WIND_ADVANCED_COLOUR_LEVEL_INTERVAL
+	WIND_ADVANCED_COLOUR_REFERENCE_LEVEL
 	{
 		*
-	} = 8.0
+	} = 0.0
 
-	WIND_ADVANCED_COLOUR_LEVEL_LIST
-	{
-		*		
-		/
-	} 
-	WIND_ADVANCED_COLOUR_MAX_VALUE
+	WIND_ADVANCED_COLOUR_LEVEL_INTERVAL
 	{
 		*
-	} = 1.E21
+	} = 8.0
 
-	WIND_ADVANCED_COLOUR_MIN_VALUE
+	WIND_ADVANCED_COLOUR_LEVEL_LIST
 	{
 		*
-	} = -1.E21
+		/
+	} = ''
 
 	WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD
 	{
-		CALCULATE; CALCULATE
-		LIST; LIST
+		CALCULATE;CALCULATE
+		LIST;LIST
 	} = CALCULATE
 
-	WIND_ADVANCED_COLOUR_MAX_LEVEL_COLOUR
-	{
+	WIND_ADVANCED_COLOUR_MAX_LEVEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = BLUE
 
-	WIND_ADVANCED_COLOUR_MIN_LEVEL_COLOUR
-	{
+	WIND_ADVANCED_COLOUR_MIN_LEVEL_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = RED
 
 	WIND_ADVANCED_COLOUR_DIRECTION
 	{
-		CLOCKWISE; CLOCKWISE
-		ANTI_CLOCKWISE; ANTI_CLOCKWISE
+		CLOCKWISE;CLOCKWISE
+		ANTI_CLOCKWISE;ANTI_CLOCKWISE
 	} = ANTI_CLOCKWISE
 
-	WIND_ADVANCED_COLOUR_LIST
-	{
-		/
-	}
+	WIND_ADVANCED_COLOUR_LIST [ help = help_colour,interface = colour ]
+	{ 
+		&PARAMSHARE&COLOUR		/
+	} = ''
+
 	WIND_ADVANCED_COLOUR_LIST_POLICY
 	{
-		LASTONE; LASTONE
-		CYCLE; CYCLE
+		LASTONE;LASTONE
+		CYCLE;CYCLE
 	} = LASTONE
 
-	WIND_ADVANCED_COLOUR_PARAMETER
-	{
-		SPEED; SPEED
-		PARAMETER; PARAMETER
-	} = SPEED
-
 	WIND_FLAG_CALM_INDICATOR
 	{
 		ON; ON
@@ -137,8 +166,8 @@ MWIND; Magics; Automatically generated
 		*
 	} = 0.5
 
-	WIND_FLAG_COLOUR
-	{
+	WIND_FLAG_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = BLUE
 
@@ -157,18 +186,9 @@ MWIND; Magics; Automatically generated
 		*
 	} = -1.0E+21
 
-	WIND_FLAG_MODE
-	{
-		@
-	} = normal
-
 	WIND_FLAG_STYLE
 	{
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DASH; CHAIN_DASH
-		CHAIN_DOT; CHAIN_DOT
+		&PARAMSHARE&STYLE
 	} = SOLID
 
 	WIND_FLAG_ORIGIN_MARKER
@@ -204,17 +224,11 @@ MWIND; Magics; Automatically generated
 		*
 	} = 0.5
 
-	WIND_ARROW_COLOUR
-	{
+	WIND_ARROW_COLOUR [ help = help_colour,interface = colour ]
+	{ 
 		&PARAMSHARE&COLOUR
 	} = BLUE
 
-	WIND_ARROW_CROSS_BOUNDARY
-	{
-		ON; ON
-		OFF; OFF
-	} = ON
-
 	WIND_ARROW_HEAD_SHAPE
 	{
 		*
@@ -235,12 +249,6 @@ MWIND; Magics; Automatically generated
 		*
 	} = -1.0E+21
 
-	WIND_ARROW_ORIGIN_POSITION
-	{
-		TAIL; TAIL
-		CENTRE; CENTRE
-	} = TAIL
-
 	WIND_ARROW_THICKNESS
 	{
 		*
@@ -248,11 +256,7 @@ MWIND; Magics; Automatically generated
 
 	WIND_ARROW_STYLE
 	{
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DASH; CHAIN_DASH
-		CHAIN_DOT; CHAIN_DOT
+		&PARAMSHARE&STYLE
 	} = SOLID
 
 	WIND_ARROW_UNIT_VELOCITY
@@ -260,9 +264,9 @@ MWIND; Magics; Automatically generated
 		*
 	} = 25.0
 
-	WIND_THINNING_FACTOR
+	WIND_ARROW_LEGEND_TEXT
 	{
-		*
-	} = 2.0
+		@
+	} = M/S
 
 }
diff --git a/share/metview/etc/MWINDRules b/share/metview/etc/MWINDRules
index 3d4c5b0..b335bd8 100644
--- a/share/metview/etc/MWINDRules
+++ b/share/metview/etc/MWINDRules
@@ -1,153 +1,73 @@
-%if LEGEND <> ON  
-		%and  LEGEND <> ON %then 
-	%unset WIND_LEGEND_TEXT
-
-%if WIND_ADVANCED_COLOUR_SELECTION_TYPE <> COUNT  
-		%and  WIND_ADVANCED_COLOUR_SELECTION_TYPE <> COUNT %then 
-	%unset WIND_ADVANCED_COLOUR_LEVEL_TOLERANCE
 
-%if WIND_FIELD_TYPE <> ARROWS %then 
-	%unset WIND_ARROW_HEAD_SHAPE
+%if WIND_FIELD_TYPE <> FLAGS %or WIND_FLAG_CALM_INDICATOR <> ON %then
+	%unset WIND_FLAG_CALM_INDICATOR_SIZE
+	%unset WIND_FLAG_CALM_BELOW
 
-%if WIND_FIELD_TYPE <> FLAGS %then 
+%if WIND_FIELD_TYPE <> FLAGS %then
+	%unset WIND_FLAG_ORIGIN_MARKER
+	%unset WIND_FLAG_MIN_SPEED
 	%unset WIND_FLAG_LENGTH
-
-%if WIND_FIELD_TYPE <> ARROWS %then 
-	%unset WIND_ARROW_CROSS_BOUNDARY
-
-%if WIND_FIELD_TYPE <> ARROWS %then 
-	%unset WIND_ARROW_THICKNESS
-
-%if WIND_FIELD_TYPE <> FLAGS %then 
+	%unset WIND_FLAG_ORIGIN_MARKER_SIZE
+	%unset WIND_FLAG_COLOUR
+	%unset WIND_FLAG_THICKNESS
+	%unset WIND_FLAG_STYLE
+	%unset WIND_FLAG_MAX_SPEED
 	%unset WIND_FLAG_CALM_INDICATOR
 
-%if WIND_ADVANCED_METHOD <> ON  
-		%and  WIND_ADVANCED_METHOD <> ON %then 
-	%unset WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD
-
-%if WIND_ADVANCED_METHOD <> ON  
-		%and  WIND_ADVANCED_METHOD <> ON %then 
-	%unset WIND_ADVANCED_COLOUR_SELECTION_TYPE
-
-%if WIND_FIELD_TYPE <> ARROWS %then 
-	%unset WIND_ARROW_UNIT_VELOCITY
-
-%if WIND_FIELD_TYPE <> FLAGS %then 
-	%unset WIND_FLAG_MIN_SPEED
-
-%if WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD <> LIST  
-		%and  WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD <> LIST %then 
-	%unset WIND_ADVANCED_COLOUR_LIST_POLICY
-
-%if WIND_ADVANCED_COLOUR_SELECTION_TYPE <> LIST  
-		%and  WIND_ADVANCED_COLOUR_SELECTION_TYPE <> LIST %then 
-	%unset WIND_ADVANCED_COLOUR_LEVEL_LIST
-
-%if WIND_ADVANCED_METHOD <> ON  
-		%and  WIND_ADVANCED_METHOD <> ON %then 
-	%unset WIND_ADVANCED_COLOUR_MAX_VALUE
+%if WIND_ADVANCED_COLOUR_SELECTION_TYPE <> COUNT %or WIND_ADVANCED_METHOD <> ON %then
+	%unset WIND_ADVANCED_COLOUR_LEVEL_TOLERANCE
+	%unset WIND_ADVANCED_COLOUR_LEVEL_COUNT
 
-%if WIND_ADVANCED_COLOUR_SELECTION_TYPE <> COUNT  
-		%and  WIND_ADVANCED_COLOUR_SELECTION_TYPE <> INTERVAL  
-		%and  WIND_ADVANCED_COLOUR_SELECTION_TYPE <> COUNT  
-		%and  WIND_ADVANCED_COLOUR_SELECTION_TYPE <> INTERVAL %then 
-	%unset WIND_ADVANCED_COLOUR_REFERENCE_LEVEL
+%if LEGEND <> ON %then
+	%unset WIND_LEGEND_TEXT
 
-%if WIND_FLAG_CALM_INDICATOR <> ON %then 
-	%unset WIND_FLAG_CALM_INDICATOR_SIZE
+%if WIND_ARROW_CALM_INDICATOR <> ON %or WIND_FIELD_TYPE <> ARROWS %then
+	%unset WIND_ARROW_CALM_INDICATOR_SIZE
+	%unset WIND_ARROW_CALM_BELOW
 
-%if WIND_FIELD_TYPE <> ARROWS %then 
+%if WIND_FIELD_TYPE <> ARROWS %then
+	%unset WIND_ARROW_UNIT_VELOCITY
+	%unset WIND_ARROW_HEAD_SHAPE
 	%unset WIND_ARROW_MAX_SPEED
-
-%if WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD <> CALCULATE  
-		%and  WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD <> CALCULATE %then 
-	%unset WIND_ADVANCED_COLOUR_MAX_LEVEL_COLOUR
-
-%if WIND_FIELD_TYPE <> ARROWS %then 
-	%unset WIND_ARROW_CALM_INDICATOR
-
-%if WIND_FIELD_TYPE <> FLAGS %then 
-	%unset WIND_FLAG_ORIGIN_MARKER
-
-%if WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD <> LIST  
-		%and  WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD <> LIST %then 
-	%unset WIND_ADVANCED_COLOUR_LIST
-
-%if WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD <> CALCULATE  
-		%and  WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD <> CALCULATE %then 
-	%unset WIND_ADVANCED_COLOUR_DIRECTION
-
-%if WIND_FIELD_TYPE <> FLAGS %then 
-	%unset WIND_FLAG_COLOUR
-
-%if WIND_FIELD_TYPE <> ARROWS %then 
 	%unset WIND_ARROW_HEAD_RATIO
-
-%if WIND_FIELD_TYPE <> FLAGS %then 
-	%unset WIND_FLAG_MODE
-
-%if WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD <> CALCULATE  
-		%and  WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD <> CALCULATE %then 
-	%unset WIND_ADVANCED_COLOUR_MIN_LEVEL_COLOUR
-
-%if WIND_FIELD_TYPE <> FLAGS %then 
-	%unset WIND_FLAG_MAX_SPEED
-
-%if WIND_FIELD_TYPE <> FLAGS  
-		%and  WIND_FIELD_TYPE <> ARROWS %then 
-	%unset WIND_ADVANCED_COLOUR_PARAMETER
-
-%if WIND_FIELD_TYPE <> ARROWS %then 
+	%unset WIND_ARROW_STYLE
+	%unset WIND_ARROW_THICKNESS
 	%unset WIND_ARROW_MIN_SPEED
-
-%if WIND_FIELD_TYPE <> FLAGS %then 
-	%unset WIND_FLAG_STYLE
-
-%if WIND_FIELD_TYPE <> FLAGS  
-		%and  WIND_FIELD_TYPE <> ARROWS %then 
-	%unset LEGEND
-
-%if WIND_FIELD_TYPE <> ARROWS %then 
+	%unset WIND_ARROW_CALM_INDICATOR
+	%unset WIND_ARROW_ORIGIN_POSITION
 	%unset WIND_ARROW_COLOUR
 
-%if WIND_FIELD_TYPE <> ARROWS %then 
-	%unset WIND_ARROW_CALM_BELOW
-
-%if LEGEND <> ON  
-		%and  LEGEND <> ON %then 
-	%unset WIND_ARROW_LEGEND_TEXT
-
-%if WIND_FIELD_TYPE <> ARROWS %then 
-	%unset WIND_ARROW_CALM_INDICATOR_SIZE
+%if WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD <> CALCULATE %or WIND_ADVANCED_METHOD <> ON %then
+	%unset WIND_ADVANCED_COLOUR_MIN_LEVEL_COLOUR
+	%unset WIND_ADVANCED_COLOUR_MAX_LEVEL_COLOUR
+	%unset WIND_ADVANCED_COLOUR_DIRECTION
 
-%if WIND_FIELD_TYPE <> FLAGS %then 
-	%unset WIND_FLAG_ORIGIN_MARKER_SIZE
+%if WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD <> LIST %or WIND_ADVANCED_METHOD <> ON %then
+	%unset WIND_ADVANCED_COLOUR_LIST
+	%unset WIND_ADVANCED_COLOUR_LIST_POLICY
 
-%if WIND_FIELD_TYPE <> ARROWS %then 
-	%unset WIND_ARROW_STYLE
+%if WIND_FIELD_TYPE <> STREAMLINES %then
+	%unset WIND_STREAMLINE_STYLE
+	%unset WIND_STREAMLINE_MIN_DENSITY
+	%unset WIND_STREAMLINE_MIN_SPEED
+	%unset WIND_STREAMLINE_COLOUR
+	%unset WIND_STREAMLINE_THICKNESS
 
-%if WIND_ADVANCED_METHOD <> ON  
-		%and  WIND_ADVANCED_METHOD <> ON %then 
-	%unset WIND_ADVANCED_COLOUR_MIN_VALUE
+%if LEGEND <> ON %or WIND_FIELD_TYPE <> ARROWS %then
+	%unset WIND_ARROW_LEGEND_TEXT
 
-%if WIND_FLAG_CALM_INDICATOR <> ON %then 
-	%unset WIND_FLAG_CALM_BELOW
+%if WIND_ADVANCED_COLOUR_SELECTION_TYPE <> COUNT %and WIND_ADVANCED_COLOUR_SELECTION_TYPE <> INTERVAL %or WIND_ADVANCED_METHOD <> ON %then
+	%unset WIND_ADVANCED_COLOUR_REFERENCE_LEVEL
 
-%if WIND_ADVANCED_COLOUR_SELECTION_TYPE <> INTERVAL  
-		%and  WIND_ADVANCED_COLOUR_SELECTION_TYPE <> INTERVAL %then 
+%if WIND_ADVANCED_COLOUR_SELECTION_TYPE <> INTERVAL %or WIND_ADVANCED_METHOD <> ON %then
 	%unset WIND_ADVANCED_COLOUR_LEVEL_INTERVAL
 
-%if WIND_FIELD_TYPE <> FLAGS %then 
-	%unset WIND_FLAG_THICKNESS
-
-%if WIND_ADVANCED_COLOUR_SELECTION_TYPE <> COUNT  
-		%and  WIND_ADVANCED_COLOUR_SELECTION_TYPE <> COUNT %then 
-	%unset WIND_ADVANCED_COLOUR_LEVEL_COUNT
-
-%if WIND_FIELD_TYPE <> ARROWS %then 
-	%unset WIND_ARROW_ORIGIN_POSITION
-
-%if WIND_FIELD_TYPE <> FLAGS  
-		%and  WIND_FIELD_TYPE <> ARROWS %then 
-	%unset WIND_ADVANCED_METHOD
+%if WIND_ADVANCED_COLOUR_SELECTION_TYPE <> LIST %or WIND_ADVANCED_METHOD <> ON %then
+	%unset WIND_ADVANCED_COLOUR_LEVEL_LIST
 
+%if WIND_ADVANCED_METHOD <> ON %then
+	%unset WIND_ADVANCED_COLOUR_MIN_VALUE
+	%unset WIND_ADVANCED_COLOUR_PARAMETER
+	%unset WIND_ADVANCED_COLOUR_MAX_VALUE
+	%unset WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD
+	%unset WIND_ADVANCED_COLOUR_SELECTION_TYPE
diff --git a/share/metview/etc/MXSectViewDef b/share/metview/etc/MXSectViewDef
deleted file mode 100644
index 9e4d335..0000000
--- a/share/metview/etc/MXSectViewDef
+++ /dev/null
@@ -1,109 +0,0 @@
-MXSECTVIEW; uPlot Icon; Metview
-{
-	LINE
-	[
-		help = help_input,
-		help_icon = 'help_line',
-		input_type = line,
-		input_window = '/System/Defaults/Input Window'
-	]
-	{
-		*
-		/
-	} = 0./-180./0./180.
-
-    BOTTOM_PRESSURE
-    {
-        * 
-    } = 1015.0
-
-    TOP_PRESSURE
-    {
-        *
-    } = 10.0
-                                
-	WIND_PARALLEL
-	{
-		ON
-		OFF
-	} = ON
-
-	WIND_PERPENDICULAR
-	{
-		ON
-		OFF
-	} = OFF
-
-	WIND_INTENSITY
-	{
-		ON
-		OFF
-	} = OFF
-
-	WIND_HORIZONTAL_COMPONENT
-	[ visible = false ]
-	{
-		PERPENDICULAR   ; PER
-		PARALLEL        ; PAR
-		INTENSITY       ; INT
-	} = PAR
-
-	PRESSURE_LEVEL_AXIS
-	{
-		LINEAR
-		LOG
-	} = LINEAR
-
-    MAP_PROJECTION  [ visible = false ]
-    {
-        cartesian
-    } = cartesian
-
-    HORIZONTAL_AXIS [interface       = icon,
-                     class           = MAXIS,
-                     missing         = ignored,
-                     help            = help_data,
-                     help_name       = Horizontal Axis,
-                     help_directory  = '/System/Defaults',
-                     help_class      = MAXIS,
-                     help_definition = ( MAXIS, AXIS_ORIENTATION ='HORIZONTAL' )
-                    ]
-    {
-        @
-    }
-
-    VERTICAL_AXIS [interface = icon, 
-                   class           = MAXIS,
-                   missing         = ignored,
-                   help            = help_data,
-                   help_name       = Vertical Axis,
-                   help_directory  = '/System/Defaults',
-                   help_class      = MAXIS,
-                   help_definition = ( MAXIS, AXIS_ORIENTATION ='VERTICAL' )
-                  ]
-    {
-        @
-    }
-
-	SUBPAGE_X_POSITION
-	{
-		@
-	} = 7.5
-
-	SUBPAGE_Y_POSITION
-	{
-		@
-	} = 8
-
-	SUBPAGE_X_LENGTH
-	{
-		@
-	} = 85
-
-	SUBPAGE_Y_LENGTH
-	{
-		@
-	} = 80
-
-%include SubpageFrameDef
-}
diff --git a/share/metview/etc/MXSectViewRules b/share/metview/etc/MXSectViewRules
deleted file mode 100644
index d4d6569..0000000
--- a/share/metview/etc/MXSectViewRules
+++ /dev/null
@@ -1 +0,0 @@
-%include "SubpageFrameRules"
diff --git a/share/metview/etc/Makefile.am b/share/metview/etc/Makefile.am
index f88ac67..fe4d3a6 100644
--- a/share/metview/etc/Makefile.am
+++ b/share/metview/etc/Makefile.am
@@ -3,20 +3,15 @@ SUBDIRS = ifsdata
 
 sharedir		= $(datadir)/metview/etc
 share_DATA		= \
-	AuxPrepBufrTable_B.txt \
-	AuxPrepBufrTable_D.txt \
-	AxisDef \
-	AxisRules \
-	BinningObjectDef \
-	BinningObjectRules \
-	CartesianViewDef \
-	CartesianViewRules\
+	AnnotationViewDef AnnotationViewRules \
+	AuxPrepBufrTable_B.txt AuxPrepBufrTable_D.txt \
+	AxisDef AxisRules \
+	BinningObjectDef BinningObjectRules \
+	CartesianViewDef CartesianViewRules\
 	CleanFileDef \
 	Coastlines \
 	CoastDef \
 	CoastRules \
-	CommonMapViewDef.h \
-	CommonMapViewRules.h \
 	ConfigDef \
 	ConfigRules \
 	ContDef \
@@ -34,7 +29,7 @@ share_DATA		= \
 	GenAppDef \
 	GenAppRules \
 	GeoToGribDef \
-        GeoViewDef GeoViewRules \
+	GeoViewDef GeoViewRules \
 	GraphDef \
 	GraphRules \
 	GribToGeoDef \
@@ -43,16 +38,14 @@ share_DATA		= \
 	MARS_none \
 	MARS_local \
 	MARS_remote \
-        MAverageViewDef MAverageViewRules \
 	MAXISDef MAXISRules \
 	MCOASTDef MCOASTRules \
 	MCONTDef MCONTRules \
 	MGRAPHDef MGRAPHRules \
 	MLEGENDDef MLEGENDRules \
 	MSYMBDef MSYMBRules \
-        MTEXTDef MTEXTRules \
-        MVertProfViewDef MVertProfViewRules \
-        MXSectViewDef MXSectViewRules \
+	MTAYLORDef MTAYLORRules \
+	MTEXTDef MTEXTRules \
 	MWINDDef MWINDRules \
 	MacroDef \
 	MacroParamDef \
@@ -76,6 +69,8 @@ share_DATA		= \
 	OverlayControl \
 	OverlayControlDef \
 	OverlayControlRules \
+	PageFrameDef \
+	PageFrameRules \
 	PDFOutputDef \
 	PercentileDef \
 	PercentileRules \
@@ -90,6 +85,8 @@ share_DATA		= \
 	PottFDef \
 	PottFRules \
 	PSOutputDef \
+	RelHumDef \
+	RelHumRules \
 	Services \
 	SimpleFormulaDef \
 	SimpleFormulaRules \
@@ -101,6 +98,19 @@ share_DATA		= \
 	SymbDef SymbRules \
 	TableCommonDef TableReaderDef TableReaderRules \
 	TextDef TextRules \
+        UiSpec.Bookmarks \
+	UiSpec.Breadcrumbs \
+	UiSpec.DetailedFolderView \
+	UiSpec.DrawerView \
+	UiSpec.FolderDrawerPanel \
+ 	UiSpec.FolderHistory \
+	UiSpec.FolderPanel \
+	UiSpec.FolderView \
+ 	UiSpec.IconFolderView \
+ 	UiSpec.IconHelpView  \
+	UiSpec.IconHolderView \
+ 	UiSpec.TemplateDrawerView \
+	UiSpec.ViewDrawerView \
 	VelstrDef VelstrRules \
 	VoidDef \
 	WidgetDef \
@@ -128,6 +138,10 @@ if METVIEW_MARS_ODB
 share_DATA += MarsOdbDef MarsOdbRules
 endif  
 
+if METVIEW_ECREGRID
+share_DATA += MarsEcRegridDef MarsEcRegridRules
+endif  
+
 
 #
 MarsG2Def: tigge.def
@@ -152,6 +166,15 @@ MarsOdbRules: mars.chk
 
 endif
 
+if METVIEW_ECREGRID
+
+MarsEcRegridDef: ecmwf.def 
+	cat ecmwf.def | sed 's/RETRIEVE[^D]/RETRIEVE_ECREGRID /g' | sed 's/READ /READ_ECREGRID /g' > $@
+
+MarsEcRegridRules: mars.chk 
+	cat mars.chk | sed 's/RETRIEVE/RETRIEVE_ECREGRID/g' | sed 's/READ/READ_ECREGRID/g' | sed 's/%or _APPL = marsG2/%or _APPL = marsG2 %or _APPL = marsEcRegrid/g' > $@
+
+endif
 
 
 
@@ -181,7 +204,7 @@ ObjectListAll: remove_objectlist
 	echo "cat <<@ "   >> ObjectListAll.temp
 	cat Services ObjectList uPlotTable >> ObjectListAll.temp
 	echo " " > ObjectSpec.dummy
-	cat ObjectSpec.*  >> ObjectListAll.temp
+	cat `ls  ObjectSpec.* | grep -v \~`  >> ObjectListAll.temp  # no not include editor backups
 	echo "@"          >> ObjectListAll.temp
 	grep -v '^#' ObjectListAll.temp > ObjectListAll  # remove comments
 	rm -f ObjectListAll.temp ObjectSpec.dummy
@@ -192,155 +215,4 @@ remove_objectlist:
 
 nodist_share_DATA = ObjectListAll
 
-
-
-
-
-#######################################################################################
-#share_DATA		= \
-#	AnnotationDef \
-#	AnnotationRules \
-#	ArticleDef \
-#	BudgetDef \
-#	BudgetRules \
-#	ColourDef \
-#	ColourRules \
-#	CurveDef \
-#	CurveViewDef \
-#	CurveViewRules \
-#	DataBases \
-#	DefaultAxis \
-#	DefaultCoast \
-#	DefaultMatching \
-#	DemoFortDef \
-#	DevObjectList \
-#	DeviceDef \
-#	DeviceRules \
-#	DeviceDriverDef \
-#	DeviceDriverRules \
-#	EditMapDef \
-#	EditMapRules \
-#	EmptyViewDef \
-#	EmptyViewRules \
-#	Family1Def \
-#	Family1Rules \
-#	GeoPointsDef \
-#	GeoPointsRules \
-#	GeoToMatrixDef \
-#	GeoToolsDef \
-#	GeoToolsRules \
-#	GraphObjectsDef \
-#	HovmoellerViewDef \
-#	HovmoellerViewRules \
-#	HovmoellerDataDef \
-#	HovmoellerDataRules \
-#	ImageDef \
-#	ImageRules \
-#	ImportDef \
-#	ImportRules \
-#	ImportViewRules \
-#	ImportViewDef \
-#	LayoutDef \
-#	LayoutRules \
-#	LegendEntryDef \
-#	LegendEntryRules \
-#	MacroPref \
-#	MapDefinitionDef \
-#	MapDefinitionRules \
-#	MarsUIRules \
-#	MatchingInfoDef \
-#	MatchingInfoRules \
-#	MatrixDef \
-#	MatrixRules \
-#	Metgram0Def \
-#	Metgram0Rules \
-#	MetgramCoachDef \
-#	MetgramCoachRules \
-#	MetgramData \
-#	MetgramDef \
-#	MetgramManagerDef \
-#	MetgramManagerRules \
-#	MetgramPref \
-#	MetgramRules \
-#	MetgramUIRules \
-#	MetgramDescDef \
-#	MetPlusDef \
-#	MetPlusRules \
-#	MultiDef \
-#	NeuronsDef \
-#	NeuronsRules \
-#	ODB.sql \
-#	PM_AverageDef \
-#	PM_AverageUIRules \
-#	PM_ImageDef \
-#	PM_ImageRules \
-#	PM_VprofDef \
-#	PM_VprofUIRules \
-#	PM_XsectionDef \
-#	PM_XsectionUIRules \
-#	PageDef \
-#	PageRules \
-#	PhysicalUIRules \
-#	PlotModPrinterList \
-#	PlotModUserInterface \
-#	PlotWindowDef \
-#	PlotWindowRules \
-#	PostcriptDef \
-#	PrintMenuDef \
-#	PrintMenuRules \
-#	PrinterList \
-#	PTephiDef \
-#	RelHum2Def \
-#	RelHum2Rules \
-#	SampleDef \
-#	SampleUIRules \
-#	SatelliteViewDef \
-#	SatelliteViewRules \
-#	SatMonPlotDef \
-#	SatMonPlotRules \
-#	ScoreRules \
-#	ScoresDef \
-#	ScoresRules \
-#	SelectionArea \
-#	SerieDef \
-#	SerieRules \
-#	SeriesDef \
-#	SeriesRules \
-#	SpectraDef \
-#	SpectraRules \
-#	SubpageDef \
-#	SubpageDetailsDef \
-#	SubpageDetailsRules \
-#	SuperPageDef \
-#	SuperPageRules \
-#	TephigramDataDef \
-#	TephigramDataRules \
-#	TephigramViewDef \
-#	TephigramViewRules \
-#	TextViewDef \
-#	TextViewRules \
-#	TimerDef \
-#	TimerRules \
-#	TimeSeriesDescDef \
-#	TotRainDef \
-#	TotRainRules \
-#	VectorsDef \
-#	VectorsRules \
-#	VelstrDef \
-#	VelstrRules \
-#	Vis5DDef \
-#	Vis5DRules \
-#	VisdefUIRules \
-#	VoidDef \
-#	WebClientDef \
-#	WebClientRules \
-#	XSectDef \
-#	XSectRules \
-#	XSectDescDef \
-#	XSectMetadataDef \
-#	macro_calltips_builtin.txt \
-#	macro_list_builtin.txt \
-#	macro_templates_default.txt \
-#	ms_mars.cfg
-
 EXTRA_DIST = $(share_DATA)
diff --git a/share/metview/etc/Makefile.in b/share/metview/etc/Makefile.in
index a334617..f86b039 100644
--- a/share/metview/etc/Makefile.in
+++ b/share/metview/etc/Makefile.in
@@ -36,6 +36,7 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 @METVIEW_MARS_ODB_TRUE at am__append_1 = MarsOdbDef MarsOdbRules
+ at METVIEW_ECREGRID_TRUE@am__append_2 = MarsEcRegridDef MarsEcRegridRules
 subdir = share/metview/etc
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -147,6 +148,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -162,6 +164,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -188,11 +192,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -322,188 +329,46 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 SUBDIRS = ifsdata
 sharedir = $(datadir)/metview/etc
-share_DATA = AuxPrepBufrTable_B.txt AuxPrepBufrTable_D.txt AxisDef \
+share_DATA = AnnotationViewDef AnnotationViewRules \
+	AuxPrepBufrTable_B.txt AuxPrepBufrTable_D.txt AxisDef \
 	AxisRules BinningObjectDef BinningObjectRules CartesianViewDef \
 	CartesianViewRules CleanFileDef Coastlines CoastDef CoastRules \
-	CommonMapViewDef.h CommonMapViewRules.h ConfigDef ConfigRules \
-	ContDef ContRules DatacoverageDef DatacoverageRules \
-	DeviceDriverDef DeviceDriverRules DivrotDef DivrotRules \
-	DrawingPriorityDef DrawingPriorityRules EcfsDef EPSOutputDef \
-	GenAppDef GenAppRules GeoToGribDef GeoViewDef GeoViewRules \
-	GraphDef GraphRules GribToGeoDef Input_Window KMLOutputDef \
-	MARS_none MARS_local MARS_remote MAverageViewDef \
-	MAverageViewRules MAXISDef MAXISRules MCOASTDef MCOASTRules \
-	MCONTDef MCONTRules MGRAPHDef MGRAPHRules MLEGENDDef \
-	MLEGENDRules MSYMBDef MSYMBRules MTEXTDef MTEXTRules \
-	MVertProfViewDef MVertProfViewRules MXSectViewDef \
-	MXSectViewRules MWINDDef MWINDRules MacroDef MacroParamDef \
-	MacroParamRules MacroRules MagicsColors.h MapViewDef \
-	MapViewRules MarsDef MarsRules MarsG2Def MarsG2Rules \
-	MarsTiggeDef MarsTiggeRules ObjectList ObjectList.forTesting \
-	ObsDef ObsRules ObsFilterDef ObsFilterRules OverlayControl \
-	OverlayControlDef OverlayControlRules PDFOutputDef \
+	ConfigDef ConfigRules ContDef ContRules DatacoverageDef \
+	DatacoverageRules DeviceDriverDef DeviceDriverRules DivrotDef \
+	DivrotRules DrawingPriorityDef DrawingPriorityRules EcfsDef \
+	EPSOutputDef GenAppDef GenAppRules GeoToGribDef GeoViewDef \
+	GeoViewRules GraphDef GraphRules GribToGeoDef Input_Window \
+	KMLOutputDef MARS_none MARS_local MARS_remote MAXISDef \
+	MAXISRules MCOASTDef MCOASTRules MCONTDef MCONTRules MGRAPHDef \
+	MGRAPHRules MLEGENDDef MLEGENDRules MSYMBDef MSYMBRules \
+	MTAYLORDef MTAYLORRules MTEXTDef MTEXTRules MWINDDef \
+	MWINDRules MacroDef MacroParamDef MacroParamRules MacroRules \
+	MagicsColors.h MapViewDef MapViewRules MarsDef MarsRules \
+	MarsG2Def MarsG2Rules MarsTiggeDef MarsTiggeRules ObjectList \
+	ObjectList.forTesting ObsDef ObsRules ObsFilterDef \
+	ObsFilterRules OverlayControl OverlayControlDef \
+	OverlayControlRules PageFrameDef PageFrameRules PDFOutputDef \
 	PercentileDef PercentileRules PlotPageDef PlotPageRules \
 	PlotSubPageDef PlotSubPageRules PlotSuperPageDef \
 	PlotSuperPageRules Plot_Window_for_Image PNGOutputDef PottFDef \
-	PottFRules PSOutputDef Services SimpleFormulaDef \
-	SimpleFormulaRules StationDef StationRules SubpageFrameDef \
-	SubpageFrameRules SVGOutputDef SymbDef SymbRules \
-	TableCommonDef TableReaderDef TableReaderRules TextDef \
-	TextRules VelstrDef VelstrRules VoidDef WidgetDef WindDef \
-	WindRules dwd.def ecmwf.def italy.def mars.chk oldrd.chk \
-	obsgroups.def rt_by_obsgroup.chk reportypes.def tigge.def \
+	PottFRules PSOutputDef RelHumDef RelHumRules Services \
+	SimpleFormulaDef SimpleFormulaRules StationDef StationRules \
+	SubpageFrameDef SubpageFrameRules SVGOutputDef SymbDef \
+	SymbRules TableCommonDef TableReaderDef TableReaderRules \
+	TextDef TextRules UiSpec.Bookmarks UiSpec.Breadcrumbs \
+	UiSpec.DetailedFolderView UiSpec.DrawerView \
+	UiSpec.FolderDrawerPanel UiSpec.FolderHistory \
+	UiSpec.FolderPanel UiSpec.FolderView UiSpec.IconFolderView \
+	UiSpec.IconHelpView UiSpec.IconHolderView \
+	UiSpec.TemplateDrawerView UiSpec.ViewDrawerView VelstrDef \
+	VelstrRules VoidDef WidgetDef WindDef WindRules dwd.def \
+	ecmwf.def italy.def mars.chk oldrd.chk obsgroups.def \
+	rt_by_obsgroup.chk reportypes.def tigge.def \
 	macro_built_in_functions.txt macro_deprecated_functions.txt \
 	macro_templates.txt uPlotTable macro_icon_function_help.xml \
 	licence_for_about_box.txt licence_for_macros.txt \
-	$(am__append_1)
+	$(am__append_1) $(am__append_2)
 nodist_share_DATA = ObjectListAll
-
-#######################################################################################
-#share_DATA		= \
-#	AnnotationDef \
-#	AnnotationRules \
-#	ArticleDef \
-#	BudgetDef \
-#	BudgetRules \
-#	ColourDef \
-#	ColourRules \
-#	CurveDef \
-#	CurveViewDef \
-#	CurveViewRules \
-#	DataBases \
-#	DefaultAxis \
-#	DefaultCoast \
-#	DefaultMatching \
-#	DemoFortDef \
-#	DevObjectList \
-#	DeviceDef \
-#	DeviceRules \
-#	DeviceDriverDef \
-#	DeviceDriverRules \
-#	EditMapDef \
-#	EditMapRules \
-#	EmptyViewDef \
-#	EmptyViewRules \
-#	Family1Def \
-#	Family1Rules \
-#	GeoPointsDef \
-#	GeoPointsRules \
-#	GeoToMatrixDef \
-#	GeoToolsDef \
-#	GeoToolsRules \
-#	GraphObjectsDef \
-#	HovmoellerViewDef \
-#	HovmoellerViewRules \
-#	HovmoellerDataDef \
-#	HovmoellerDataRules \
-#	ImageDef \
-#	ImageRules \
-#	ImportDef \
-#	ImportRules \
-#	ImportViewRules \
-#	ImportViewDef \
-#	LayoutDef \
-#	LayoutRules \
-#	LegendEntryDef \
-#	LegendEntryRules \
-#	MacroPref \
-#	MapDefinitionDef \
-#	MapDefinitionRules \
-#	MarsUIRules \
-#	MatchingInfoDef \
-#	MatchingInfoRules \
-#	MatrixDef \
-#	MatrixRules \
-#	Metgram0Def \
-#	Metgram0Rules \
-#	MetgramCoachDef \
-#	MetgramCoachRules \
-#	MetgramData \
-#	MetgramDef \
-#	MetgramManagerDef \
-#	MetgramManagerRules \
-#	MetgramPref \
-#	MetgramRules \
-#	MetgramUIRules \
-#	MetgramDescDef \
-#	MetPlusDef \
-#	MetPlusRules \
-#	MultiDef \
-#	NeuronsDef \
-#	NeuronsRules \
-#	ODB.sql \
-#	PM_AverageDef \
-#	PM_AverageUIRules \
-#	PM_ImageDef \
-#	PM_ImageRules \
-#	PM_VprofDef \
-#	PM_VprofUIRules \
-#	PM_XsectionDef \
-#	PM_XsectionUIRules \
-#	PageDef \
-#	PageRules \
-#	PhysicalUIRules \
-#	PlotModPrinterList \
-#	PlotModUserInterface \
-#	PlotWindowDef \
-#	PlotWindowRules \
-#	PostcriptDef \
-#	PrintMenuDef \
-#	PrintMenuRules \
-#	PrinterList \
-#	PTephiDef \
-#	RelHum2Def \
-#	RelHum2Rules \
-#	SampleDef \
-#	SampleUIRules \
-#	SatelliteViewDef \
-#	SatelliteViewRules \
-#	SatMonPlotDef \
-#	SatMonPlotRules \
-#	ScoreRules \
-#	ScoresDef \
-#	ScoresRules \
-#	SelectionArea \
-#	SerieDef \
-#	SerieRules \
-#	SeriesDef \
-#	SeriesRules \
-#	SpectraDef \
-#	SpectraRules \
-#	SubpageDef \
-#	SubpageDetailsDef \
-#	SubpageDetailsRules \
-#	SuperPageDef \
-#	SuperPageRules \
-#	TephigramDataDef \
-#	TephigramDataRules \
-#	TephigramViewDef \
-#	TephigramViewRules \
-#	TextViewDef \
-#	TextViewRules \
-#	TimerDef \
-#	TimerRules \
-#	TimeSeriesDescDef \
-#	TotRainDef \
-#	TotRainRules \
-#	VectorsDef \
-#	VectorsRules \
-#	VelstrDef \
-#	VelstrRules \
-#	Vis5DDef \
-#	Vis5DRules \
-#	VisdefUIRules \
-#	VoidDef \
-#	WebClientDef \
-#	WebClientRules \
-#	XSectDef \
-#	XSectRules \
-#	XSectDescDef \
-#	XSectMetadataDef \
-#	macro_calltips_builtin.txt \
-#	macro_list_builtin.txt \
-#	macro_templates_default.txt \
-#	ms_mars.cfg
 EXTRA_DIST = $(share_DATA)
 all: all-recursive
 
@@ -916,6 +781,12 @@ MarsTiggeRules: mars.chk
 @METVIEW_MARS_ODB_TRUE at MarsOdbRules: mars.chk 
 @METVIEW_MARS_ODB_TRUE@	cat mars.chk | sed 's/RETRIEVE/RETRIEVE_ODB/g' | sed 's/READ/READ_ODB/g' > $@
 
+ at METVIEW_ECREGRID_TRUE@MarsEcRegridDef: ecmwf.def 
+ at METVIEW_ECREGRID_TRUE@	cat ecmwf.def | sed 's/RETRIEVE[^D]/RETRIEVE_ECREGRID /g' | sed 's/READ /READ_ECREGRID /g' > $@
+
+ at METVIEW_ECREGRID_TRUE@MarsEcRegridRules: mars.chk 
+ at METVIEW_ECREGRID_TRUE@	cat mars.chk | sed 's/RETRIEVE/RETRIEVE_ECREGRID/g' | sed 's/READ/READ_ECREGRID/g' | sed 's/%or _APPL = marsG2/%or _APPL = marsG2 %or _APPL = marsEcRegrid/g' > $@
+
 macro_built_in_functions.txt:
 	touch -d 20050101 $@
 
@@ -940,7 +811,7 @@ ObjectListAll: remove_objectlist
 	echo "cat <<@ "   >> ObjectListAll.temp
 	cat Services ObjectList uPlotTable >> ObjectListAll.temp
 	echo " " > ObjectSpec.dummy
-	cat ObjectSpec.*  >> ObjectListAll.temp
+	cat `ls  ObjectSpec.* | grep -v \~`  >> ObjectListAll.temp  # no not include editor backups
 	echo "@"          >> ObjectListAll.temp
 	grep -v '^#' ObjectListAll.temp > ObjectListAll  # remove comments
 	rm -f ObjectListAll.temp ObjectSpec.dummy
diff --git a/share/metview/etc/MapViewDef b/share/metview/etc/MapViewDef
index 083b084..98c4493 100644
--- a/share/metview/etc/MapViewDef
+++ b/share/metview/etc/MapViewDef
@@ -1,7 +1,19 @@
 MAPVIEW; MAPVIEW; PLOTMOD
 {
-! Include Coastlines
-%include "CommonMapViewDef.h"
+   COASTLINES
+      [
+         interface       = icon,
+         class           = PCOAST,
+         exclusive       = true,
+         help            = help_data,
+         help_directory  = '/Metview/Defaults',
+         help_name       = Coastlines,
+         help_class      = PCOAST,
+         help_definition = (PCOAST)
+      ]
+   {
+      @
+   }
 
 	MAP_PROJECTION
 	{
@@ -58,6 +70,7 @@ MAPVIEW; MAPVIEW; PLOTMOD
 		GOODE
 		COLLIGNON
 		MOLLWEIDE
+        ROBINSON
 		BONNE
     } = CYLINDRICAL
 
@@ -126,5 +139,6 @@ MAPVIEW; MAPVIEW; PLOTMOD
 		@ 
 	} = map.js
 
+%include PageFrameDef
 %include SubpageFrameDef
 }
diff --git a/share/metview/etc/MapViewRules b/share/metview/etc/MapViewRules
index 01fe57f..f027e84 100644
--- a/share/metview/etc/MapViewRules
+++ b/share/metview/etc/MapViewRules
@@ -8,10 +8,7 @@
     %unset MAP_SCALE
     %unset MAP_STANDARD_LATITUDE_1
     %unset MAP_STANDARD_LATITUDE_2
-%if MAP_PROJECTION <> POLAR_STEREOGRAPHIC %then
-    %unset MAP_HEMISPHERE
-    %unset MAP_VERTICAL_LONGITUDE
-    
+
 %if MAP_PROJECTION = OCEAN_SECTION %or MAP_PROJECTION = LAMBERT %then
     %unset MAP_VERTICAL_LONGITUDE
 
@@ -22,13 +19,12 @@
 %if MAP_PROJ4_GLOBAL = ON %then
 	%unset AREA
 
-    
 %if SUBPAGE_METADATA_INFO = OFF %then
     %unset SUBPAGE_METADATA_JAVASCRIPT_PATH
     
 %if MAP_PROJECTION = OCEAN_SECTION %or MAP_PROJECTION = LAMBERT %or MAP_PROJECTION = AITOFF %then
     %unset AREA
 
+%include PageFrameRules
 %include SubpageFrameRules
-
 %include OverlayControlRules
diff --git a/share/metview/etc/MarsEcRegridDef b/share/metview/etc/MarsEcRegridDef
new file mode 100644
index 0000000..0fc1220
--- /dev/null
+++ b/share/metview/etc/MarsEcRegridDef
@@ -0,0 +1,7135 @@
+# © Copyright 1996-2012 ECMWF.
+# 
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+# In applying this licence, ECMWF does not waive the privileges and immunities 
+# granted to it by virtue of its status as an intergovernmental organisation nor
+# does it submit to any jurisdiction.
+
+!
+! mars language definition file.
+!
+!     author.
+!     -------
+!
+!           b.raoult 22/10/90
+!
+!     Modifications.
+!     --------------
+!
+!           K. Fielding 26.07.93
+!           Add new observation types wind profile (WP) and
+!           temp mobile (TM)
+!
+!
+! syntax :
+!
+!
+!  command name ; command description ; command type     
+!  {
+!        parameter 1
+!        {
+!       value 1 ; abbreviation 1
+!               value 2 ; abbreviation 2
+!               value 3 
+!               ...
+!               value n ; abbreviation n
+!    } = default value
+!
+!        parameter 2
+!        {
+!            ...
+!        } = default value
+!       
+!        ...
+!
+! }
+!
+!------------------------------------------------------------------------
+
+_DUMMY ; DUMMY REQUEST  ; DUMMY
+{
+    PARAM {
+
+
+20 DEGREES ISOTHERM DEPTH                     ;  20D   ;  163
+ACCUMULATED CLOUD FRACTION TENDENCY           ;  ACF   ;  241
+ACCUMULATED ICE WATER TENDENCY                ;  AIW   ;  249
+ACCUMULATED LIQUID WATER TENDENCY             ;  ALW   ;  242
+ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE   ; ACO2NEE; 80.228
+ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION ; ACO2GPP; 81.228
+ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION    ; ACO2REC; 82.228
+ADIABATIC TENDENCY OF HUMIDITY                ;  ATH   ;  229
+ADIABATIC TENDENCY OF HUMIDITY - ECMWF        ;  ATHE  ;  252
+ADIABATIC TENDENCY OF MERIDIONAL WIND         ;  ATMW  ;  254
+ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX ; ATMWAX ;  231
+ADIABATIC TENDENCY OF TEMPERATURE             ;  ATT   ;  228
+ADIABATIC TENDENCY OF TEMPERATURE - ECMWF     ;  ATTE  ;  251
+ADIABATIC TENDENCY OF ZONAL WIN               ;  ATZW  ;  230
+ADIABATIC TENDENCY OF ZONAL WIND - ECMWF      ;  ATZE  ;  253
+ALBEDO                                        ;  AL    ;  174
+ALTIMETER WAVE HEIGHT                         ;  AWH   ;  246
+ALTIMETER CORRECTED WAVE HEIGHT               ;  ACWH  ;  247
+ALTIMETER RANGE RELATIVE CORRECTION           ;  ARRC  ;  248
+ALTITUDE OF EMITTER                           ;  ALE   ;  210119 ; 119.210
+ALTITUDE OF PLUME TOP                         ;  ALPT  ;  210120 ; 120.210
+ANALYSED POTENTIAL TEMPERATURE                ;  APT   ;  181
+ANALYSED SALINITY                             ;  AS    ;  183
+ANGLE OF SUBGRID OROGRAPHY                    ;  ANOR  ;  162
+ANISOTROPHY SUBGRID OROGRAPHY                 ;  ISOR  ;  161
+APPARENT SURFACE HUMIDITY                     ;  ASQ   ;  233
+ATMOSPHERIC TIDE                              ;  AT    ;  127
+AVERAGE POTENTIAL TEMPERATURE IN UPPER 300M   ; TAV300 ;  164
+AVERAGE SALINITY IN UPPER 300M                ; SAV300 ;  175
+BACKGROUND POTENTIAL TEMPERATURE              ;  BPT   ;  180
+BENJAMIN-FEIR INDEX                           ;  BFI   ;  253
+BOUNDARY LAYER DISSIPATION                    ;  BLD   ;  145
+BOUNDARY LAYER HEIGHT                         ;  BLH   ;  159
+BRIGHTNESS TEMPERATURE                        ;  BTMP  ;  194
+BUDGET VALUES                                 ;  BV    ;  128
+CHANGE FROM REMOVING NEG. HUMID               ;  CRNH  ;  227
+CHARNOCK                                      ;  CHNK  ;  148
+CLEAR SKY SURFACE PHOTOSYNTHETICALLY ACTIVE RADIATION  ; PARCS ; 20
+CLIMAT. DEEP SOIL TEMP.                       ;  CDST  ;  183
+CLIMAT. DEEP SOIL WETNESS                     ;  CDSW  ;  184
+CLOUD BASE HEIGHT                             ;  CBH   ;  228023   ; 23.228
+CLOUD COVER                                   ;  CC    ;  248
+CLOUD FRACTION                                ;  CF    ;  213
+CLOUD ICE WATER CONTENT                       ;  CIWC  ;  247
+CLOUD LIQUID WATER                            ;  CLW   ;  212
+CLOUD LIQUID WATER CONTENT                    ;  CLWC  ;  246
+CLOUD LIQUID WATER CONTENT - ERA              ; CLWCER ;  241
+CLOUD RAIN WATER CONTENT                      ;  CRWC  ;  75
+CLOUD SNOW WATER CONTENT                      ;  CSWC  ;  76
+COEFFICIENT OF DRAG WITH WAVES                ;  CDWW  ;  233
+CONVECTIVE AVAILABLE POTENTIAL ENERGY         ;  CAPE  ;  059
+CONVECTIVE CLOUD COVER                        ;  CCC   ;  185
+CONVECTIVE INHIBITION                         ;  CIN   ;  228001
+CONVECTIVE PRECIPITATION                      ;  CP    ;  143
+CONVECTIVE SNOW-FALL                          ;  CSF   ;  239
+CONVECTIVE TENDENCY OF MERIDIONAL WIND        ;  CTMW  ;  223
+CONVECTIVE TENDENCY OF ZONAL WIND             ;  CTZW  ;  222
+DEEP SOIL TEMPERATURE                         ;  DST   ;  170
+DEEP SOIL WETNESS                             ;  DSW   ;  171
+DEPTH OF SALINITY MAXIMUM                     ;  DSMAX ;  174
+DEPTH OF VELOCITY MAXIMUM                     ;  DUMAX ;  172
+DIABATIC HEATING BY CUMULUS CONVECTION        ;  DHCC  ;  216
+DIABATIC HEATING BY LARGE-SCALE CONDENSATION  ;  DHLC  ;  217
+DIABATIC HEATING BY RADIATION                 ;  DHR   ;  214
+DIABATIC HEATING BY VERTICAL DIFFUSION        ;  DHVD  ;  215
+DIRECT SOLAR RADIATION                        ;  DSRP  ;  047
+DIVERGENCE                                    ;  D     ;  155
+DOWNWARD UV RADIATION AT THE SURFACE          ;  UVB   ;  057
+DUCT BASE HEIGHT                              ;  DCTB  ;  228017   ; 017.228
+EASTWARD GRAVITY WAVE SURFACE STRESS          ;  LGWS  ;  195
+EASTWARD TURBULENT SURFACE STRESS             ;  EWSS  ;  180
+E-W OROGRAPHIC VARIANCE.                      ;  EWOV  ;  190
+EQUIVALENT POTENTIAL TEMPERATURE              ;  EQPT  ;  004
+ETA-COORDINATE VERTICAL VELOCITY              ;  ETADOT ; 077
+EVAPORATION                                   ;  E     ;  182
+EW GRAVITY WAVE DRAG                          ;  EWGD  ;  220
+FIELD CAPACITY                                ;  CAP   ;  228170 ; 170.228
+FLUX OF CARBON DIOXIDE NET ECOSYSTEM EXCHANGE       ; FCO2NEE; 83.228
+FLUX OF CARBON DIOXIDE GROSS PRIMARY PRODUCTION     ; FCO2GPP; 84.228
+FLUX OF CARBON DIOXIDE ECOSYSTEM RESPIRATION        ; FCO2REC; 85.228
+FORECAST ALBEDO                               ;  FAL   ;  243
+FORECAST LOG SRF ROUGHNESS HEAT               ;  FLSR  ;  245
+FORECAST SURFACE ROUGHNESS                    ;  FSR   ;  244
+FRICTION VELOCITY                             ;  ZUST  ;  228003 ; 3.228
+GEOPOTENTIAL                                  ;  Z     ;  129
+GEOPOTENTIAL ANOMALY                          ;  ZA    ;  129.171
+GRAVITY WAVE DISSIPATION.                     ;  GWD   ;  197
+HEIGHT GEOPOTENTIAL                           ;  GH    ;  156
+HIGH CLOUD COVER                              ;  HCC   ;  188
+HIGH VEGETATION COVER                         ;  CVH   ;  028
+HORIZONTAL VISIBILITY                         ;  HVIS  ;  228025  ; 25.228
+HUMIDITY TENDENCY BY CUMULUS CONVECTION       ;  HTCC  ;  225
+HUMIDITY TENDENCY BY LARGE-SCALE CONDENSATION ;  HTLC  ;  226
+HUNDRED METRE U WIND COMPONENT                ;  100U  ;  U100 ; 228246  ;  246.228
+HUNDRED METRE V WIND COMPONENT                ;  100V  ;  V100 ; 228247  ;  247.228
+HUNDRED METRE WIND SPEED                      ;  100SI ;  228249  ;  249.228
+ICE AGE                                       ;  ICE   ;  250
+ICE SURFACE TEMPERATURE LAYER 1               ;  ISTL1 ;  035
+ICE SURFACE TEMPERATURE LAYER 2               ;  ISTL2 ;  036
+ICE SURFACE TEMPERATURE LAYER 3               ;  ISTL3 ;  037
+ICE SURFACE TEMPERATURE LAYER 4               ;  ISTL4 ;  038
+INSTANT MOISTURE FLUX                         ;  IE    ;  232
+INSTANTANEOUS EASTWARD TURBULENT SURFACE STRESS   ;  IEWS  ; 229
+INSTANTANEOUS NORTHWARD TURBULENT SURFACE STRESS   ;  INSS  ; 230
+INSTANTANEOUS SURFACE SENSIBLE HEAT FLUX      ;  ISHF  ;  231
+K INDEX                                       ;  KX    ;  260121
+LAKE COVER                                    ;  CL    ;   26
+LAKE DEPTH                                    ;  DL    ;  228007 ;  7.228
+LAKE MIX-LAYER TEMPERATURE                    ;  LMLT  ;  228008 ;  8.228
+LAKE MIX-LAYER DEPTH                          ;  LMLD  ;  228009 ;  9.228
+LAKE BOTTOM TEMPERATURE                       ;  LBLT  ;  228010 ; 10.228
+LAKE TOTAL LAYER TEMPERATURE                  ;  LTLT  ;  228011 ; 11.228
+LAKE SHAPE FACTOR                             ;  LSHF  ;  228012 ; 12.228
+LAKE ICE TEMPERATURE                          ;  LICT  ;  228013 ; 13.228
+LAKE ICE DEPTH                                ;  LICD  ;  228014 ; 14.228
+LAND SEA MASK                                 ;  LSM   ;  172
+LARGE SCALE PRECIPITATION                     ;  LSP   ;  142
+LARGE SCALE PRECIPITATION FRACTION            ;  LSPF  ;  050
+LARGE SCALE SNOW-FALL                         ;  LSF   ;  240
+LEAF AREA INDEX LOW VEGETATION                ;  LAILV ;   66
+LEAF AREA INDEX HIGH VEGETATION               ;  LAIHV ;   67
+LN SURFACE PRESSURE                           ;  LNSP  ;  152
+LOG SURFACE ROUGHNESS - HEAT                  ;  LSRH  ;  234
+LONG WAVE HEATING RATE                        ;  LWH   ;  154
+LOW CLOUD COVER                               ;  LCC   ;  186
+LOW VEGETATION COVER                          ;  CVL   ;  027
+MAGNITUDE OF SURFACE STRESS                   ;  MAGSS ;  048
+MAXIMUM TEMPERATURE AT 2M                     ;  MX2T  ;  201
+MAXIMUM TEMPERATURE AT 2M ANOMALY             ;  MX2TA  ;  201.171
+MAXIMUM TEMPERATURE AT 2M IN THE LAST 6 HOURS ANOMALY  ;  MX2T6A  ;  121.171
+MAXIMUM TEMPERATURE AT 2M IN THE LAST 6 HOURS  ;  MX2T6 ;  121.128
+MAXIMUM TEMPERATURE AT 2M IN THE LAST 3 HOURS  ;  MX2T3 ;  228026 ; 026.228
+MAXIMUM TEMPERATURE AT 2M IN THE LAST 24 HOURS ;  MX2T24 ;  51
+MAXIMUM INDIVIDUAL WAVE HEIGHT                           ;  HMAX  ;  218
+MAXIMUM OF SIGNIFICANT WAVE HEIGHT            ;  MAXSWH ; 200
+MEAN 2 METRE TEMPERATURE PAST 24 HOURS        ;  MEAN2T24;  055
+MEAN 2 METRE DEWPOINT TEMPERATURE PAST 24 HOURS ;  MEAN2D24;  056
+MEAN TEMPERATURE AT 2 METRES                  ;  MEAN2T ; 228004  ; 4.228
+MEAN DIRECTION OF TOTAL SWELL               ;  MDPS ; MDTS ;  238
+MEAN DIRECTION OF WIND WAVES                  ;  MDWW  ;  235
+MEAN OF 10M WINDSPEED                         ;  MU10  ;  241
+MEAN 10 METRE WINDSPEED                       ;  MEAN10WS ; 228005  ; 5.228
+MEAN TOTAL CLOUD COVER                        ;  MEANTCC ; 228006   ; 6.228
+MEAN PERIOD                                   ;  MP    ;  232
+MEAN PERIOD OF TOTAL SWELL                  ;  MPPS ; MPTS  ;  239
+MEAN PERIOD OF WIND WAVES                     ;  MPWW  ;  236
+MEAN SEA LEVEL PRESSURE                       ;  MSL   ; MSLP ;  151
+MEAN SEA LEVEL PRESSURE ANOMALY               ;  MSLA   ; MSLPA ;  151.171
+MEAN SEA LEVEL PRESSURE SIGNIFICANCE          ;  MSLS  ;  151.234
+MEAN SEA LEVEL PRESSURE ANOMALY OF AT LEAST 0 Pa ;  MSLAG0   ;  10
+MEAN SQUARE SLOPE OF WAVES                    ;  MSQS  ;  244
+MEAN VERTICAL GRADIENT OF REFRACTIVITY INSIDE TRAPPING LAYER ; DNDZA ;  228016  ; 016.228
+MEAN VERTICAL VELOCITY                        ;  MVV   ;  232
+MEAN WAVE DIRECTION                           ;  MWD   ;  230
+MEAN WAVE PERIOD                              ;  MWP   ;  232
+MEAN WAVE PERIOD PROBABILITY                  ;  MWPP  ;  232
+MEAN WAVE PERIOD BASED ON FIRST MOMENT                 ; MP1   ; 220
+MEAN WAVE PERIOD BASED ON FIRST MOMENT FOR SWELL       ; P1PS  ; 226
+MEAN WAVE PERIOD BASED ON FIRST MOMENT FOR WIND WAVES  ; P1WW  ; 223
+MEAN WAVE PERIOD BASED ON SECOND MOMENT                ; MP2   ; 221
+MEAN WAVE PERIOD BASED ON SECOND MOMENT FOR SWELL      ; P2PS  ; 227
+MEAN WAVE PERIOD BASED ON SECOND MOMENT FOR WIND WAVES ; P2WW  ; 224
+MEAN WIND DIRECTION                           ;  MDWI  ;  242
+MEDIUM CLOUD COVER                            ;  MCC   ;  187
+MINIMUM TEMPERATURE AT 2M                     ;  MN2T  ;  202
+MINIMUM TEMPERATURE AT 2M ANOMALY             ;  MN2TA  ;  202.171
+MINIMUM TEMPERATURE AT 2M IN THE LAST 6 HOURS ANOMALY  ;  MN2T6A  ;  122.171
+MINIMUM TEMPERATURE AT 2M IN THE LAST 6 HOURS  ;  MN2T6 ;  122.128
+MINIMUM TEMPERATURE AT 2M IN THE LAST 3 HOURS  ;  MN2T3 ;  228027 ; 027.228
+MINIMUM TEMPERATURE AT 2M IN THE LAST 24 HOURS ;  MN2T24 ;  52
+MINIMUM VERTICAL GRADIENT OF REFRACTIVITY INSIDE TRAPPING LAYER ; DNDZN ; 228015 ; 015.228
+MONTGOMERY POTENTIAL                          ;  MONT  ;  053
+NORTHWARD GRAVITY WAVE SURFACE STRESS         ;  MGWS  ;  196
+NORTHWARD TURBULENT SURFACE STRESS            ;  NSSS  ;  181
+N-S OROGRAPHIC VARIANCE                       ;  NSOV  ;  191
+NE-SW OROGRAPHIC VARIANCE                     ;  NWOV  ;  192
+NS GRAVITY WAVE DRAG                          ;  NSGD  ;  221
+NEAR IR ALBEDO FOR DIRECT RADIATION           ;  ALNIP ;   17
+NEAR IR ALBEDO FOR DIFFUSE RADIATION          ;  ALNID ;   18
+NEUTRAL WIND AT 10 M X-COMPONENT              ;  U10N  ;  228131  ; 131.228
+NEUTRAL WIND AT 10 M Y-COMPONENT              ;  V10N  ;  228132  ; 132.228
+NW-SE OROGRAPHIC VARIANCE                     ;  NEOV  ;  193
+OBSERVATION COUNT                             ;  OBCT  ;  062
+OCEAN POTENTIAL TEMPERATURE                   ;  OCPT  ;  129
+OZONE MASS MIXING RATIO                       ;  O3    ;  203     ; 203.128
+PEAK DIRECTION                                ;  PD    ;  230
+PEAK PERIOD                                   ;  PP    ;  231
+PEAK PERIOD OF 1D SPECTRA                     ;  PP1D  ;  231
+PERIOD CORRESPONDING TO MAXIMUM INDIVIDUAL WAVE HEIGHT   ;  TMAX  ;  217
+PHOTOSYNTHETICALLY ACTIVE RADIATION AT THE SURFACE ;  PAR   ;  058
+PROBABILITY OF A TROPICAL STORM                     ; PTS   ; 89.131
+PROBABILITY OF A HURRICANE                          ; PH    ; 90.131
+PROBABILITY OF A TROPICAL DEPRESION                 ; PTD   ; 91.131
+CLIMATOLOGICAL PROBABILITY OF A TROPICAL STORM      ; CPTS  ; 92.131
+CLIMATOLOGICAL PROBABILITY OF A HURRICANE           ; CPH   ; 93.131
+CLIMATOLOGICAL PROBABILITY OF A TROPICAL DEPRESION  ; CPTD  ; 94.131
+PROBABILITY ANOMALY OF A TROPICAL STORM             ; PATS  ; 95.131
+PROBABILITY ANOMALY OF A HURRICANE                  ; PAH   ; 96.131
+PROBABILITY ANOMALY OF A TROPICAL DEPRESION         ; PATD  ; 97.131
+POTENTIAL TEMPERATURE                         ;  PT    ;  003
+POTENTIAL TEMPERATURE INCREMENT               ;  PTI   ;  178
+POTENTIAL TEMPERATURE ANALYSIS ERROR          ;  PTAE  ;  179
+POTENTIAL TEMPERATURE BACKGROUND ERROR        ;  PTBE  ;  182
+POTENTIAL VORTICITY                           ;  PV    ;  060
+PRECIP. ANALYSIS WEIGHTS                      ;  PAW   ;  204
+PRECIPITABLE WATER CONTENT                    ;  PWC   ;  137
+PRESSURE                                      ;  PRES  ;  054
+RELATIVE HUMIDITY                             ;  R     ;  157
+RUNOFF                                        ;  RO    ;  205
+SALINITY INCREMENT                            ;  SALI  ;  184
+SALINITY MAXIMUM                              ;  SMAX  ;  173
+SATURATED EQUIVALENT POTENTIAL TEMPERATURE    ;  SEPT  ;  005
+SATURATION                                    ;  SAT   ;  228172  ;  172.228
+SEA ICE COVER                                 ;  CI    ;  031
+SEA LEVEL PREVIOUS TIMESTEP                   ;  SL_1  ;  146
+SEA SURFACE TEMPERATURE                       ;  SSTK  ;  SST   ; 034
+SEA SURFACE TEMPERATURE ANOMALY               ;  SSTAK ;  SSTA  ; 171034  ; 034.171
+SHORT WAVE HEATING RATE                       ;  SWHR  ;  153
+SIGNIFICANT HEIGHT TOTAL SWELL              ;  SHPS ; SHTS  ;  237
+SIGNIFICANT HEIGHT WIND WAVES                 ;  SHWW  ;  234
+SIGNIFICANT WAVE HEIGHT                       ;  SWH   ;  229
+SIGNIFICANT WAVE HEIGHT PROBABILITY           ;  SWHP  ;  229
+SKIN RESERVOIR CONTENT                        ;  SRC   ;  198
+SKIN TEMPERATURE                              ;  SKT   ;  235
+SLOPE OF SUBGRID OROGRAPHY                    ;  SLOR  ;  163
+SNOW ALBEDO                                   ;  ASN   ;  032
+SNOW DENSITY                                  ;  RSN   ;  033
+SNOW DENSITY ANOMALY                          ;  RSNA  ;  171033  ; 033.171
+SNOW DEPTH                                    ;  SD    ;  141
+SNOW DEPTH ANOMALY                            ;  SDA   ;  171141  ; 141.171
+SNOW EVAPORATION                              ;  ES    ;  044
+SNOWFALL                                      ;  SF    ;  144
+SNOWFALL PROBABILITY                          ;  SFP   ;  144
+SNOWFALL ANOMALOUS RATE OF ACCUMULATION       ;  SFARA ;  144.173
+SNOWMELT                                      ;  SMLT  ;  045
+SOIL SAND FRACTION                            ;  SSFR  ;    6
+SOIL CLAY FRACTION                            ;  SCFR  ;    7
+SOIL TEMPERATURE LEVEL 1                      ;  STL1  ;  139
+SOIL TEMPERATURE ANOMALY LEVEL 1              ;  STAL1 ;  139.171
+SOIL TEMPERATURE LEVEL 2                      ;  STL2  ;  170
+SOIL TEMPERATURE LEVEL 3                      ;  STL3  ;  183
+SOIL TEMPERATURE LEVEL 4                      ;  STL4  ;  236
+SOIL TYPE                                     ;  SLT   ;  043
+SOIL WETNESS LEVEL 1                          ;  SWL1  ;  140
+SOIL WETNESS LEVEL 2                          ;  SWL2  ;  171
+SOIL WETNESS LEVEL 3                          ;  SWL3  ;  184
+SOIL WETNESS LEVEL 4                          ;  SWL4  ;  237
+SOLAR DURATION                                ;  SDUR  ;  046
+SOLAR INSULATION                              ;  SI    ;  212
+SPECIFIC HUMIDITY                             ;  Q     ;  133
+STANDARD DEVIATION 10M WIND SPEED             ;  SDU   ;  243
+STANDARD DEVIATION OROGRAPHY                  ;  SDOR  ;  160
+STANDARD DEVIATION OF FILTERED SUBGRID OROGRAPHY  ;  SDFOR  ;  74.128
+STANDARD DEVIATION WAVE HEIGHT                ;  SDHS  ;  240
+STREAM FUNCTION                               ;  STRF  ;  001
+STREAM FUNCTION ANOMALY                       ;  STRFA  ;  001.171
+SUB-SURFACE RUNOFF                            ;  SSRO  ;    9
+SUNSHINE DURATION                             ;  SUND  ;  189
+SUNSHINE DURATION ANOMALY                     ;  SUNDA ;  189.171
+SUNSHINE DURATION ANOMALOUS RATE OF ACCUMULATION ;  SUNDARA ;  189.173
+SURFACE LATENT HEAT FLUX                      ;  SLHF  ;  147
+SURFACE NET RADIATION                         ;  SNR   ;  149
+SURFACE NET SOLAR RADIATION CLEAR SKY         ;  SSRC  ;  210
+SURFACE NET THERMAL RADIATION CLEAR SKY       ;  STRC  ;  211
+SURFACE PRESSURE                              ;  SP    ;  134
+SURFACE ROUGHNESS                             ;  SR    ;  173
+SURFACE RUNOFF                                ;  SRO   ;    8
+SURFACE SENSIBLE HEAT FLUX                    ;  SSHF  ;  146
+SURFACE SOIL WETNESS                          ;  SSW   ;  140
+SURFACE SOLAR RADIATION                       ;  SSR   ;  176
+SURFACE SOLAR RADIATION DOWNWARDS             ;  SSRD  ;  169
+SURFACE STRESS                                ;  SS    ;  148
+SURFACE TEMPERATURE                           ;  ST    ;  139
+SURFACE TEMPERATURE ANOMALY OF AT LEAST 0K    ;  STAG0 ;    9
+SURFACE TEMPERATURE SIGNIFICANCE              ;  STS   ;  139.234
+SURFACE NET THERMAL RADIATION                     ;  STR   ;  177
+SURFACE THERMAL RADIATION DOWNWARDS           ;  STRD  ;  175
+TEMPERATURE                                   ;  T     ;  130
+TEMPERATURE ANOMALY                           ;  TA    ;  130.171
+TEMPERATURE ANOMALY PROBABILITY               ;  TAP   ;  130
+TEMPERATURE OF SNOW LAYER                     ;  TSN   ;  238
+TEN METRE SPEED PROBABILITY                   ;  10SP  ;  165
+TEN METRE WIND SPEED INDEX                    ;  10WSI ;  165
+TEN METRE U WIND COMPONENT                    ;  10U   ;  165
+TEN METRE U WIND COMPONENT ANOMALY            ;  10UA   ;  165.171
+TEN METRE V WIND COMPONENT                    ;  10V   ;  166
+TEN METRE V WIND COMPONENT ANOMALY            ;  10VA   ;  166.171
+TEN METRE WINDSPEED IRRESP OF DIR             ;  10SI  ;  207
+TEN METRE WINDSPEED ONLY                      ;  10WS  ;  246
+TEN METRE WIND DIRECTION                      ;  DWI   ;  249
+TENDENCY SURFACE PRESSURE                     ;  TSP   ;  158
+TOP NET RADIATION                             ;  TNR   ;  150
+TOP NET SOLAR RADIATION CLEAR SKY             ;  TSRC  ;  208
+TOP SOLAR RAD. UPWARD CLEAR SKY               ;  TSUC  ;  210
+TOP NET SOLAR RADIATION                           ;  TSR   ;  178
+TOP SOLAR RADIATION UPWARD                    ;  TSRU  ;  208
+TOP THERMAL RAD. UPWARD CLEAR S               ;  TTUC  ;  211
+TOP NET THERMAL RADIATION                         ;  TTR   ;  179
+TOP THERMAL RADIATION UPWARD                  ;  TTRU  ;  209
+TOP UPWARD THERMAL RADIATION CLEAR SKY        ;  TTRC  ;  209
+TOTAL CLOUD COVER                             ;  TCC   ;  164
+TOTAL CLOUD COVER ANOMALY                     ;  TCCA   ;  164.171
+TOTAL COLUMN ICE WATER                        ;  TCIW  ;  079
+TOTAL COLUMN ICE WATER ANOMALY                ;  TCIWA  ;  079.171
+TOTAL COLUMN LIQUID WATER                     ;  TCLW  ;  078
+TOTAL COLUMN LIQUID WATER ANOMALY             ;  TCLWA  ;  078.171
+TOTAL COLUMN OZONE                            ;  TCO3  ;  206     ; 206.128
+TOTAL COLUMN RAIN WATER                       ;  TCRW  ; 228089   ; 089.228
+TOTAL COLUMN SNOW WATER                       ;  TCSW  ; 228090   ; 090.228
+TOTAL COLUMN WATER                            ;  TCW   ;  136
+TOTAL COLUMN WATER ANOMALY                    ;  TCWA  ;  136.171
+TOTAL COLUMN WATER VAPOUR                     ;  TCWV  ;  137
+TOTAL COLUMN WATER VAPOUR ANOMALY             ;  TCWVA ;  137.171
+TOTAL PRECIPITATION                           ;  TP    ;  228
+TOTAL PRECIPITATION ANOMALY                   ;  TPA    ;  228.171
+TOTAL PRECIPITATION ANOMALOUS RATE OF ACCUMULATION ;  TPARA    ;  228.173
+TOTAL PRECIPITATION INDEX                     ;  TPI   ;  228
+TOTAL PRECIPITATION PROBABILITY               ;  TPP   ;  228
+TOTAL PRECIPITATION SIGNIFICANCE              ;  TPS   ;  228.234
+TOTAL PRECIPITATION ANOMALY OF AT LEAST 20 MM ;  TPAG20;    6
+TOTAL PRECIPITATION ANOMALY OF AT LEAST 10 MM ;  TPAG10;    7
+TOTAL PRECIPITATION ANOMALY OF AT LEAST  0 MM ;  TPAG0 ;    8
+TOTAL TOTALS INDEX                            ;  TOTALX ; 260123
+TOTAL SKY DIRECT SOLAR RADIATION AT SURFACE   ;  FDIR ;   228021
+TRAPPING LAYER BASE HEIGHT                    ;  TPLB  ;  228018   ;  018.228
+TRAPPING LAYER TOP HEIGHT                     ;  TPLT  ;  228019   ; 019.228
+TWO METRE DEWPOINT                            ;  2D    ;  168
+TWO METRE DEWPOINT ANOMALY                    ;  2DA   ;  171168   ; 168.171
+TWO METRE TEMPERATURE                         ;  2T    ;  167
+TWO METRE TEMPERATURE INDEX                   ;  2TI   ;  167
+TWO METRE TEMPERATURE PROBABILITY             ;  2TP   ;  167
+TWO METRE TEMPERATURE ANOMALY                 ;  2TA   ;  167.171
+TWO METRE TEMPERATURE SIGNIFICANCE            ;  2TS   ;  167.234
+TWO METRE TEMPERATURE WARM ANOMALY OF AT LEAST 2K    ;  2TWA2K;    1
+TWO METRE TEMPERATURE WARM ANOMALY OF AT LEAST 1K    ;  2TWA1K;    2
+TWO METRE TEMPERATURE WARM ANOMALY OF AT LEAST 0K    ;   2TWA0K;    3
+TWO METRE TEMPERATURE COLD ANOMALY OF AT LEAST 1K    ;  2TCA1K;    4
+TWO METRE TEMPERATURE COLD ANOMALY OF AT LEAST 2K    ;  2TCA2K;    5
+TWO-D WAVE SPECTRA                            ;  2DSP  ;  250
+TWO-D WAVE SINGLE FREQUENCY DIRECTION SPECTRUM;  2DFD  ;  251
+TYPE OF HIGH VEGETATION                       ;  TVH   ;  030
+TYPE OF LOW VEGETATION                        ;  TVL   ;  029
+U WIND COMPONENT                              ;  U     ;  131
+U WIND COMPONENT ANOMALY                      ;  UA    ;  131.171
+U-COMPONENT OF DIVERGENT WIND                 ;  UDVW  ;  011
+U-COMPONENT OF ROTATIONAL WIND                ;  URTW  ;  013
+U-COMPONENT STOKES DRIFT                      ;  UST   ;  215
+UNBALANCED COMPONENT OF DIVERGENCE            ;  UCDV  ;  023
+UNBALANCED COMPONENT OF TEMPERATURE           ;  UCTP  ;  021
+UNBALANCED COMPONENT OF LNSP                  ;  UCLN  ;  022
+U-VELOCITY MAXIMUM                            ;  UMAX  ;  171
+UV VISIBLE ALBEDO FOR DIRECT RADIATION        ;  ALUVP ;   15
+UV VISIBLE ALBEDO FOR DIFFUSE RADIATION       ;  ALUVD ;   16
+V WIND COMPONENT                              ;  V     ;  132
+V WIND COMPONENT ANOMALY                      ;  VA    ;  132.171
+V-COMPONENT OF DIVERGENT WIND                 ;  VDVW  ;  012
+V-COMPONENT OF ROTATIONAL WIND                ;  VRTW  ;  014
+V-COMPONENT STOKES DRIFT                      ;  VST   ;  216
+VARIANCE SUBGRIDSCALE OROGRAPHY               ;  VSO   ;  200
+VEGETATION                                    ;  VEG   ;  199
+VELOCITY POTENTIAL                            ;  VPOT  ;  002
+VELOCITY POTENTIAL ANOMALY                    ;  VPOTA ;  002.171
+VERTICAL DIFFUSION OF HUMIDITY                ;  VDH   ;  224
+VERTICAL DIFFUSION OF MERIDIONAL WIND         ;  VDMW  ;  219
+VERTICAL DIFFUSION OF ZONAL WIND              ;  VDZW  ;  218
+VERTICAL VELOCITY                             ;  W     ;  135
+VERTICALLY INTEGRATED MERIDIONAL HEAT TRANSPORT    ;  MHT   ;  170
+VERTICALLY INTEGRATED MERIDIONAL VOLUME TRANSPORT  ;  MTR   ;  168
+VERTICALLY INTEGRATED MOISTURE DIVERGENCE     ;  VIMD  ;  213
+VERTICALLY INTEGRATED ZONAL HEAT TRANSPORT         ;  ZHT   ;  169
+VERTICALLY INTEGRATED ZONAL VOLUME TRANSPORT       ;  ZTR   ;  167
+VOLUMETRIC SOIL WATER LAYER 1                 ;  SWVL1 ;  039
+VOLUMETRIC SOIL WATER LAYER 2                 ;  SWVL2 ;  040
+VOLUMETRIC SOIL WATER LAYER 3                 ;  SWVL3 ;  041
+VOLUMETRIC SOIL WATER LAYER 4                 ;  SWVL4 ;  042
+VORTICITY                                     ;  VO    ;  138
+WAVE HEIGHT                                   ;  WH    ;  229
+WAVE SPECTRAL DIRECTIONAL WIDTH               ;  WDW   ; 222
+WAVE SPECTRAL DIRECTIONAL WIDTH FOR SWELL     ;  DWPS  ; 228
+WAVE SPECTRAL DIRECTIONAL WIDTH FOR WIND WAVES;  DWWW  ; 225
+WAVE SPECTRAL KURTOSIS                        ;  WSK   ; 252
+WAVE SPECTRAL PEAKEDNESS                      ;  WSP   ; 254
+WILTING POINT                                 ;  WILT  ; 228171  ; 171.228
+WIND GUST AT 10 METRES                        ;  10FG  ;  049
+WIND GUST AT 10 METRES INDEX                  ;  10FGI ;  049
+WIND GUST AT 10 METRES IN THE LAST 6 HOURS     ;  10FG6 ;  123.128
+WIND GUST AT 10 METRES IN THE LAST 3 HOURS     ;  10FG3 ;  228028 ; 028.228
+WIND SPEED                                    ;  WS    ;   10
+ZERO DEGREE LEVEL                             ;  DEG0L ; 228024  ; 24.228
+
+# Variable resolution parameters (extracted with /usr/local/bin/python ./paramdb2overlap.py)
+
+SURFACE RUNOFF VARIABLE RESOLUTION ; SROVAR ; 8.230
+SUB-SURFACE RUNOFF VARIABLE RESOLUTION ; SSROVAR ; 9.230
+SNOW EVAPORATION VARIABLE RESOLUTION ; ESVAR ; 44.230
+SNOWMELT VARIABLE RESOLUTION ; SMLTVAR ; 45.230
+SOLAR DURATION VARIABLE RESOLUTION ; SDURVAR ; 46.230
+DOWNWARD UV RADIATION AT THE SURFACE VARIABLE RESOLUTION ; UVBVAR ; 57.230
+PHOTOSYNTHETICALLY ACTIVE RADIATION AT THE SURFACE VARIABLE RESOLUTION ; PARVAR ; 58.230
+STRATIFORM PRECIPITATION LARGE-SCALE PRECIPITATION VARIABLE RESOLUTION ; LSPVAR ; 142.230
+CONVECTIVE PRECIPITATION VARIABLE RESOLUTION ; CPVAR ; 143.230
+SNOWFALL CONVECTIVE + STRATIFORM VARIABLE RESOLUTION ; SFVAR ; 144.230
+BOUNDARY LAYER DISSIPATION VARIABLE RESOLUTION ; BLDVAR ; 145.230
+SURFACE SENSIBLE HEAT FLUX VARIABLE RESOLUTION ; SSHFVAR ; 146.230
+SURFACE LATENT HEAT FLUX VARIABLE RESOLUTION ; SLHFVAR ; 147.230
+SURFACE SOLAR RADIATION DOWNWARDS VARIABLE RESOLUTION ; SSRDVAR ; 169.230
+ALBEDO VARIABLE RESOLUTION ; ALVAR ; 174.230
+SURFACE THERMAL RADIATION DOWNWARDS VARIABLE RESOLUTION ; STRDVAR ; 175.230
+SURFACE NET SOLAR RADIATION VARIABLE RESOLUTION ; SSRVAR ; 176.230
+SURFACE NET THERMAL RADIATION VARIABLE RESOLUTION ; STRVAR ; 177.230
+TOP NET SOLAR RADIATION VARIABLE RESOLUTION ; TSRVAR ; 178.230
+TOP NET THERMAL RADIATION VARIABLE RESOLUTION ; TTRVAR ; 179.230
+EAST-WEST SURFACE STRESS VARIABLE RESOLUTION ; EWSSVAR ; 180.230
+NORTH-SOUTH SURFACE STRESS VARIABLE RESOLUTION ; NSSSVAR ; 181.230
+EVAPORATION VARIABLE RESOLUTION ; EVAR ; 182.230
+SUNSHINE DURATION VARIABLE RESOLUTION ; SUNDVAR ; 189.230
+LONGITUDINAL COMPONENT OF GRAVITY WAVE STRESS VARIABLE RESOLUTION ; LGWSVAR ; 195.230
+MERIDIONAL COMPONENT OF GRAVITY WAVE STRESS VARIABLE RESOLUTION ; MGWSVAR ; 196.230
+GRAVITY WAVE DISSIPATION VARIABLE RESOLUTION ; GWDVAR ; 197.230
+SKIN RESERVOIR CONTENT VARIABLE RESOLUTION ; SRCVAR ; 198.230
+RUNOFF VARIABLE RESOLUTION ; ROVAR ; 205.230
+TOP NET SOLAR RADIATION CLEAR SKY VARIABLE RESOLUTION ; TSRCVAR ; 208.230
+TOP NET THERMAL RADIATION CLEAR SKY VARIABLE RESOLUTION ; TTRCVAR ; 209.230
+SURFACE NET SOLAR RADIATION CLEAR SKY VARIABLE RESOLUTION ; SSRCVAR ; 210.230
+SURFACE NET THERMAL RADIATION CLEAR SKY VARIABLE RESOLUTION ; STRCVAR ; 211.230
+TOA INCIDENT SOLAR RADIATION VARIABLE RESOLUTION ; TISRVAR ; 212.230
+TOTAL PRECIPITATION VARIABLE RESOLUTION ; TPVAR ; 228.230
+
+# Probability parameters (extracted from METDB with script: ./proba2def.pl on linux)
+
+
+   10 METRE SPEED PROBABILITY                  ; 10SP  ;  165
+   10 METRE WIND GUST OF AT LEAST 15 METRE PER SECOND     ; 10FGG15  ;  070
+   10 METRE WIND GUST OF AT LEAST 20 METRE PER SECOND     ; 10FGG20  ;  071
+   10 METRE WIND GUST OF AT LEAST 25 METRE PER SECOND     ; 10FGG25  ;  072
+   10 METRE WIND GUST PROBABILITY              ; 10GP  ;  049
+   10 METRE WIND SPEED OF AT LEAST 10 METRE PER SECOND     ; 10SPG10  ;  068
+   10 METRE WIND SPEED OF AT LEAST 15 METRE PER SECOND     ; 10SPG15  ;  069
+   2 METRE TEMPERATURE LESS THAN 273.15 K      ; 2TL273  ;  073
+   2 METRE TEMPERATURE PROBABILITY             ; 2TP  ;  167
+   2M TEMPERATURE ANOMALY OF AT LEAST 0K       ; 2TAG0  ;  003
+   2M TEMPERATURE ANOMALY OF AT LEAST 1K      ; 2TAG1  ;  002
+   2M TEMPERATURE ANOMALY OF AT LEAST 2K      ; 2TAG2  ;  001
+   2M TEMPERATURE ANOMALY OF AT MOST -1K       ; 2TALM1  ;  004
+   2M TEMPERATURE ANOMALY OF AT MOST -2K       ; 2TALM2  ;  005
+   CONVECTIVE AVAILABLE POTENTIAL ENERGY PROBABILITY     ; CAPEP  ;  059
+   GEOPOTENTIAL PROBABILITY                    ; ZP  ;  129
+   HEIGTH OF 0 DEGREE ISOTHERM PROBABILITY     ; H0DIP  ;  015
+   HEIGTH OF SNOWFALL LIMIT PROBABILITY        ; HSLP  ;  016
+   MAXIMUM 2 METRE TEMPERATURE PROBABILITY     ; MX2TP  ;  201
+   MEAN SEA LEVEL PRESSURE ANOMALY OF AT LEAST 0 PA     ; MSLAG0  ;  010
+   MEAN WAVE PERIOD OF AT LEAST 10 S           ; MWPG10  ;  079
+   MEAN WAVE PERIOD OF AT LEAST 12 S           ; MWPG12  ;  080
+   MEAN WAVE PERIOD OF AT LEAST 15 S           ; MWPG15  ;  081
+   MEAN WAVE PERIOD OF AT LEAST 8 S            ; MWPG8  ;  078
+   MEAN WAVE PERIOD PROBABILITY                ; MWPP  ;  232
+   MINIMUM 2 METRE TEMPERATURE PROBABILITY     ; MN2TP  ;  202
+   SHOWALTER INDEX PROBABILITY                 ; SAIP  ;  017
+   SIGNIFICANT WAVE HEIGHT OF AT LEAST 2 M     ; SWHG2  ;  074
+   SIGNIFICANT WAVE HEIGHT OF AT LEAST 4 M     ; SWHG4  ;  075
+   SIGNIFICANT WAVE HEIGHT OF AT LEAST 6 M     ; SWHG6  ;  076
+   SIGNIFICANT WAVE HEIGHT OF AT LEAST 8 M     ; SWHG8  ;  077
+   SIGNIFICANT WAVE HEIGHT PROBABILITY         ; SWHP  ;  229
+   SNOWFALL PROBABILITY                        ; SFP  ;  144
+   SURFACE TEMPERATURE ANOMALY OF AT LEAST 0K     ; STAG0  ;  009
+   TEMPERATURE ANOMALY GREATER THAN 4 K       ; TAG4K  ;  024
+   TEMPERATURE ANOMALY GREATER THAN 8 K       ; TAG8K  ;  025
+   TEMPERATURE ANOMALY LESS THAN -2 K          ; TALM2K  ;  020
+   TEMPERATURE ANOMALY LESS THAN -4 K          ; TALM4K  ;  023
+   TEMPERATURE ANOMALY LESS THAN -8 K          ; TALM8K  ;  022
+   TEMPERATURE ANOMALY OF AT LEAST 2 K        ; TAG2K  ;  021
+   TEMPERATURE ANOMALY PROBABILITY             ; TAP  ;  130
+   TOTAL CLOUD COVER PROBABILITY               ; TCCP  ;  164
+   TOTAL PRECIPITATION ANOMALY OF AT LEAST 0 MM     ; TPAG0  ;  008
+   TOTAL PRECIPITATION ANOMALY OF AT LEAST 10 MM     ; TPAG10  ;  007
+   TOTAL PRECIPITATION ANOMALY OF AT LEAST 20 MM     ; TPAG20  ;  006
+   TOTAL PRECIPITATION LESS THAN 0.1 MM        ; TPL01  ;  064
+   TOTAL PRECIPITATION OF AT LEAST 1 MM        ; TPG1  ;  060
+   TOTAL PRECIPITATION OF AT LEAST 10 MM       ; TPG10  ;  062
+   TOTAL PRECIPITATION OF AT LEAST 100 MM      ; TPG100  ;  085
+   TOTAL PRECIPITATION OF AT LEAST 150 MM      ; TPG150  ;  086
+   TOTAL PRECIPITATION OF AT LEAST 20 MM       ; TPG20  ;  063
+   TOTAL PRECIPITATION OF AT LEAST 200 MM      ; TPG200  ;  087
+   TOTAL PRECIPITATION OF AT LEAST 300 MM      ; TPG300  ;  088
+   TOTAL PRECIPITATION OF AT LEAST 40 MM       ; TPG40  ;  082
+   TOTAL PRECIPITATION OF AT LEAST 5 MM        ; TPG5  ;  061
+   TOTAL PRECIPITATION OF AT LEAST 60 MM       ; TPG60  ;  083
+   TOTAL PRECIPITATION OF AT LEAST 80 MM       ; TPG80  ;  084
+   TOTAL PRECIPITATION PROBABILITY             ; TPP  ;  228
+   TOTAL PRECIPITATION RATE LESS THAN 1 MM PER DAY     ; TPRL1  ;  065
+   TOTAL PRECIPITATION RATE OF AT LEAST 3 MM PER DAY     ; TPRG3  ;  066
+   TOTAL PRECIPITATION RATE OF AT LEAST 5 MM PER DAY     ; TPRG5  ;  067
+   WHITING INDEX PROBABILITY                   ; WHIP  ;  018
+
+
+# GEMS parameters (to sort when we fully use metdb)
+
+AEROSOL TYPE 1 MIXING RATIO                   ; AERMR01    ;   1.210
+AEROSOL TYPE 2 MIXING RATIO                   ; AERMR02    ;   2.210
+AEROSOL TYPE 3 MIXING RATIO                   ; AERMR03    ;   3.210
+AEROSOL TYPE 4 MIXING RATIO                   ; AERMR04    ;   4.210
+AEROSOL TYPE 5 MIXING RATIO                   ; AERMR05    ;   5.210
+AEROSOL TYPE 6 MIXING RATIO                   ; AERMR06    ;   6.210
+AEROSOL TYPE 7 MIXING RATIO                   ; AERMR07    ;   7.210
+AEROSOL TYPE 8 MIXING RATIO                   ; AERMR08    ;   8.210
+AEROSOL TYPE 9 MIXING RATIO                   ; AERMR09    ;   9.210
+AEROSOL TYPE 10 MIXING RATIO                  ; AERMR10    ;  10.210
+AEROSOL TYPE 11 MIXING RATIO                  ; AERMR11    ;  11.210
+AEROSOL TYPE 12 MIXING RATIO                  ; AERMR12    ;  12.210
+AEROSOL TYPE 1 SOURCE/GAIN ACCUMULATED        ; AERGN01    ;  16.210
+AEROSOL TYPE 2 SOURCE/GAIN ACCUMULATED        ; AERGN02    ;  17.210
+AEROSOL TYPE 3 SOURCE/GAIN ACCUMULATED        ; AERGN03    ;  18.210
+AEROSOL TYPE 4 SOURCE/GAIN ACCUMULATED        ; AERGN04    ;  19.210
+AEROSOL TYPE 5 SOURCE/GAIN ACCUMULATED        ; AERGN05    ;  20.210
+AEROSOL TYPE 6 SOURCE/GAIN ACCUMULATED        ; AERGN06    ;  21.210
+AEROSOL TYPE 7 SOURCE/GAIN ACCUMULATED        ; AERGN07    ;  22.210
+AEROSOL TYPE 8 SOURCE/GAIN ACCUMULATED        ; AERGN08    ;  23.210
+AEROSOL TYPE 9 SOURCE/GAIN ACCUMULATED        ; AERGN09    ;  24.210
+AEROSOL TYPE 10 SOURCE/GAIN ACCUMULATED       ; AERGN10    ;  25.210
+AEROSOL TYPE 11 SOURCE/GAIN ACCUMULATED       ; AERGN11    ;  26.210
+AEROSOL TYPE 12 SOURCE/GAIN ACCUMULATED       ; AERGN12    ;  27.210
+AEROSOL TYPE 1 SINK/LOSS ACCUMULATED          ; AERLS01    ;  31.210
+AEROSOL TYPE 2 SINK/LOSS ACCUMULATED          ; AERLS02    ;  32.210
+AEROSOL TYPE 3 SINK/LOSS ACCUMULATED          ; AERLS03    ;  33.210
+AEROSOL TYPE 4 SINK/LOSS ACCUMULATED          ; AERLS04    ;  34.210
+AEROSOL TYPE 5 SINK/LOSS ACCUMULATED          ; AERLS05    ;  35.210
+AEROSOL TYPE 6 SINK/LOSS ACCUMULATED          ; AERLS06    ;  36.210
+AEROSOL TYPE 7 SINK/LOSS ACCUMULATED          ; AERLS07    ;  37.210
+AEROSOL TYPE 8 SINK/LOSS ACCUMULATED          ; AERLS08    ;  38.210
+AEROSOL TYPE 9 SINK/LOSS ACCUMULATED          ; AERLS09    ;  39.210
+AEROSOL TYPE 10 SINK/LOSS ACCUMULATED         ; AERLS10    ;  40.210
+AEROSOL TYPE 11 SINK/LOSS ACCUMULATED         ; AERLS11    ;  41.210
+AEROSOL TYPE 12 SINK/LOSS ACCUMULATED         ; AERLS12    ;  42.210
+AEROSOL PRECURSOR MIXING RATIO                ; AERPR      ;  46.210
+AEROSOL SMALL MODE MIXING RATIO               ; AERSM      ;  47.210
+AEROSOL LARGE MODE MIXING RATIO               ; AERLG      ;  48.210
+AEROSOL PRECURSOR OPTICAL DEPTH               ; AODPR      ;  49.210
+AEROSOL SMALL MODE OPTICAL DEPTH              ; AODSM      ;  50.210
+AEROSOL LARGE MODE OPTICAL DEPTH              ; AODLG      ;  51.210
+DUST EMISSION POTENTIAL                       ; AERDEP     ;  52.210
+LIFTING THRESHOLD SPEED                       ; AERLTS     ;  53.210
+SOIL CLAY CONTENT                             ; AERSCC     ;  54.210
+CARBON DIOXIDE                                ; CO2        ;  61.210
+METHANE                                       ; CH4        ;  62.210
+NITROUS OXIDE                                 ; N2O        ;  63.210
+TOTAL COLUMN CARBON DIOXIDE                   ; TCCO2      ;  64.210
+TOTAL COLUMN METHANE                          ; TCCH4      ;  65.210
+TOTAL COLUMN NITROUS OXIDE                    ; TCN2O      ;  66.210
+OCEAN FLUX OF CARBON DIOXIDE                  ; CO2OF      ;  67.210
+NATURAL BIOSPHERE FLUX OF CARBON DIOXIDE      ; CO2NBF     ;  68.210
+ANTHROPROGENIC EMISSIONS OF CARBON DIOXIDE    ; CO2APF     ;  69.210
+METHANE SURFACE FLUXES                        ; CH4F       ;  70.210
+METHANE LOSS RATE DUE TO RADICAL HYDROXYL     ; kCH4       ;  71.210
+WILDFIRE FLUX OF CARBON DIOXIDE               ; CO2FIRE    ;  80.210
+WILDFIRE FLUX OF CARBON MONOXIDE              ; COFIRE     ;  81.210
+WILDFIRE FLUX OF METHANE                      ; CH4FIRE    ;  82.210
+WILDFIRE FLUX OF NON-METHANE HYDRO-CARBONS    ; NMHCFIRE   ;  83.210
+WILDFIRE FLUX OF HYDROGEN                     ; H2FIRE     ;  84.210
+WILDFIRE FLUX OF NITROGEN OXIDES NOX          ; NOXFIRE    ;  85.210
+WILDFIRE FLUX OF NITROUS OXIDE                ; N2OFIRE    ;  86.210
+WILDFIRE FLUX OF PARTICULATE MATTER PM2.5     ; PM2P5FIRE  ;  87.210
+WILDFIRE FLUX OF TOTAL PARTICULATE MATTER     ; TPMFIRE    ;  88.210
+WILDFIRE FLUX OF TOTAL CARBON IN AEROSOLS     ; TCFIRE     ;  89.210
+WILDFIRE FLUX OF ORGANIC CARBON               ; OCFIRE     ;  90.210
+WILDFIRE FLUX OF BLACK CARBON                 ; BCFIRE     ;  91.210
+WILDFIRE OVERALL FLUX OF BURNT CARBON         ; CFIRE      ;  92.210
+WILDFIRE FRACTION OF C4 PLANTS                ; C4FFIRE    ;  93.210
+WILDFIRE VEGETATION MAP INDEX                 ; VEGFIRE    ;  94.210
+WILDFIRE COMBUSTION COMPLETENESS              ; CCFIRE     ;  95.210
+WILDFIRE FUEL LOAD CARBON PER UNIT AREA       ; FLFIRE     ;  96.210
+WILDFIRE FRACTION OF AREA BURNT               ; BFFIRE     ;  97.210
+WILDFIRE OBSERVED AREA                        ; OAFIRE     ;  98.210
+WILDFIRE RADIATIVE POWER                      ; FRPFIRE    ;  99.210
+WILDFIRE DRY MATTER COMBUSTION RATE DENSITY   ; DMFIRE     ; 100.210
+NITROGEN DIOXIDE                              ; NO2        ; 121.210
+SULPHUR DIOXIDE                               ; SO2        ; 122.210
+CARBON MONOXIDE                               ; CO         ; 123.210
+FORMALDEHYDE                                  ; HCHO       ; 124.210
+TOTAL COLUMN NITROGEN DIOXIDE                 ; TCNO2      ; 125.210
+TOTAL COLUMN SULPHUR DIOXIDE                  ; TCSO2      ; 126.210
+TOTAL COLUMN CARBON MONOXIDE                  ; TCCO       ; 127.210
+TOTAL COLUMN FORMALDEHYDE                     ; TCHCHO     ; 128.210
+NITROGEN OXIDES                               ; NOX        ; 129.210
+TOTAL COLUMN NITROGEN OXIDES                  ; TCNOX      ; 130.210
+RADON                                         ; RA         ; 181.210
+SULPHUR HEXAFLUORIDE                          ; SF6        ; 182.210
+TOTAL COLUMN RADON                            ; TCRA       ; 183.210
+TOTAL COLUMN SULPHUR HEXAFLUORIDE             ; TCSF6      ; 184.210
+ANTHROPOGENIC EMISSIONS OF SULPHUR HEXAFLUORIDE ; SF6APF     ; 185.210
+GEMS OZONE                                    ; GO3        ; 203.210
+GEMS TOTAL COLUMN OZONE                       ; GTCO3      ; 206.210
+TOTAL AEROSOL OPTICAL DEPTH AT 550NM          ; AOD550     ; 207.210
+SEA SALT AEROSOL OPTICAL DEPTH AT 550NM       ; SSAOD550 ; 208.210
+DUST AEROSOL OPTICAL DEPTH AT 550NM           ; DUAOD550 ; 209.210
+ORGANIC MATTER AEROSOL OPTICAL DEPTH AT 550NM ; OMAOD550 ; 210.210
+BLACK CARBON AEROSOL OPTICAL DEPTH AT 550NM   ; BCAOD550 ; 211.210
+SULPHATE AEROSOL OPTICAL DEPTH AT 550NM       ; SUAOD550 ; 212.210
+TOTAL AEROSOL OPTICAL DEPTH AT 469NM          ; AOD469 ; 213.210
+TOTAL AEROSOL OPTICAL DEPTH AT 670NM          ; AOD670 ; 214.210
+TOTAL AEROSOL OPTICAL DEPTH AT 865NM          ; AOD865 ; 215.210
+TOTAL AEROSOL OPTICAL DEPTH AT 1240NM         ; AOD1240 ; 216.210
+
+		*
+        /   
+    } = Z
+
+    CLASS
+    {
+        OPERATIONS  ;   OD
+        RESEARCH    ;   RD
+        REANALYSE   ;   ER
+        ECSN        ;   CS
+        REANALYSE40 ;   E4
+		ERA INTERIM ;   EI
+        DEMETER     ;   DM
+        PROVOST     ;   PV
+        ELDAS       ;   EL
+        TOST        ;   TO
+        COSMO       ;   CO
+        ENSEMBLES   ;   EN
+        MERSEA      ;   ME
+		SREPS       ;   SR
+		DTS         ;   DT
+		LACE        ; LAEF   ; ALADIN-LAEF ;   LA
+		YOTC        ;   YT
+		MACC        ;   MC
+		PERMANENT EXPERIMENT ; PE
+		E20CM       ; EM
+		E20C        ; E2
+		ESAT        ; EA
+		EPST        ; EP
+
+        EURO4M      ; RM
+        20CR        ; NCEP 20CR ; NR
+
+		! Member stats
+
+		AUSTRIA		;	AT 
+		BELGIUM		;	BE 
+		CROATIA		;	HR 
+		DENMARK		;	DK 
+		FINLAND		;	FI 
+		FRANCE		;	FR 
+		GERMANY		;	DE 
+		GREECE		;	GR 
+		HUNGARY		;	HU 
+		ICELAND		;	IS 
+		IRELAND		;	IE 
+		ITALY		;	IT 
+		NETHERLANDS	;	NL 
+		NORWAY		;	NO 
+		PORTUGAL	;	PT 
+		SLOVENIA	;	SI 
+		SPAIN		;	ES 
+		SWEDEN		;	SE 
+		SWITZERLAND	;	CH 
+		TURKEY		;	TR 
+		UNITED KINGDOM;	UK 
+
+		! Test
+		METAPS      ;   MA
+		TEST        ;   TE
+    } = OD
+
+    TYPE
+    {
+		3D VARIATIONAL ANALYSIS     ;   3V
+		3D VARIATIONAL GRADIENTS    ;   3G
+		4D VARIATIONAL ANALYSIS     ;   4V
+		4D VARIATIONAL INCREMENTS   ;   4I
+		4D VARIATIONAL GRADIENTS    ;   4G
+		ADJOINT SINGULAR VECTOR     ;   AS
+		ANALYSIS BIAS               ;	AB
+		ANALYSIS INPUT              ;	AI
+		ANALYSIS FEEDBACK           ;	AF
+		ANALYSIS                    ;   AN
+		ASSIMILATION RUN            ;   AR
+		BIAS-CORRECTED FORECAST     ;   BF
+		CALIBRATION VALIDATION FORECAST      ;   CV
+		CLIMATE DISTRIBUTION        ;   CD
+		CLIMATOLOGY                 ;   CL
+		CLUSTERING INFORMATION      ;   CI
+		CLUSTER MEANS               ;   CM
+		CLUSTER REPRESENTATIVE      ;   CR
+		CLUSTER STD DEVIATIONS      ;   CS
+		CONTROL FORECAST            ;   CF
+		EMPIRICAL DISTRIBUTION      ;   ED
+		ENSEMBLE MEAN               ;   EM
+		ENSEMBLE STANDARD DEVIATION ;   ES
+		ERRORS IN ANALYSIS          ;   EA
+		ERRORS IN FIRST GUESS       ;   EF
+		EXTREME FORECAST INDEX      ;   EFI
+		EXTREME FORECAST INDEX CONTROL ;   EFIC
+		FIRST GUESS                 ;   FG
+		FLUX FORCING REALTIME       ;   FF
+		FORECAST                    ;   FC
+		SIMULATED IMAGES            ;   SIM
+		SIMULATED SATELLITE DATA    ;   SSD
+		EVENT PROBABILITY           ;   EP
+		FORECAST PROBABILITY        ;   FP
+		FORECAST ACCUMULATION       ;   FA
+		FLUX FORCING                ;   FX
+		GRIDDED OBSERVATIONS        ;   GO
+		HINDCAST MEAN               ;   HCMEAN
+		IMAGES                      ;   IM
+		INIT. ANALYSIS              ;   IA
+		INITIAL CONDITION PERTURBATION ; ICP
+		MODEL ERRORS                ;   ME
+		OBSERVATIONS                ;   OB
+		OCEAN FORWARD               ;   OF
+		OCEAN REANALYSIS            ;   OR
+		OI ANALYSIS                 ;   OI
+		OLD FORMAT IMAGES           ;   OLDIM
+		PERTURBED ANALYSIS          ;   PA
+		PERTURBED FORECAST          ;   PF
+		PROBABILITY BOUNDARY        ;   PB
+		PROBABILITY DISTRIBUTION    ;   PD
+		SCALED ENSEMBLE STANDARD DEVIATION ;   SES
+		SENSITIVITY FORECAST        ;   SF
+		SENSITIVITY GRADIENT        ;   SG
+		SHIFT OF TAILS              ;   SOT
+		SIGNAL VARIANCE             ;   SVAR
+		SINGULAR VECTOR             ;   SV
+		TIME AVERAGE ENSEMBLE MEAN  ;               TAEM
+		TIME AVERAGE ENSEMBLE STANDARD DEVIATION ;  TAES
+		TRAJECTORY FORECAST         ;   TF
+		TUBE                        ;   TU
+		WEATHER PARAMETERS          ;   WP
+		WEIGHTED ENSEMBLE MEAN               ;   WEM
+		WEIGHTED ENSEMBLE STANDARD DEVIATION ;   WES
+		FEEDBACK                    ;   FB
+                CLIMATE SIMULATION          ;   SI
+		CLIMATE 30 DAYS SIMULATION  ;   S3
+
+		FCMEAN
+		FCMAX
+		FCMIN
+		FCSTDEV
+		ODB FEEDBACK                ; OFB
+		MONDB FEEDBACK              ; MFB
+		ODB ANALYSIS INPUT          ; OAI
+
+    } = AN
+    
+    STREAM
+    {
+		ANALYSIS FOR MULTIANALYSIS PROJECT ; AMAP
+        BRACKNELL               ; EXETER  ;   EGRR    
+        CHERNOBYL               ;   CH; CHER
+        DAILY ARCHIVE           ;   DA; OPER
+		DAILY ARCHIVE HINDCASTS ;   DAHC
+		DAILY CLIMATOLOGY       ;   DACL
+		DAILY CLIMATOLOGY WAVE  ;   DACW
+        ENSEMBLE DATA ASSIMILATION      ;   ENDA
+		ENSEMBLE DATA ASSIMILATION MONTHLY MEANS                      ; EDMM
+		ENSEMBLE DATA ASSIMILATION MONTHLY MEANS OF DAILY MEANS       ; EDMO
+		ENSEMBLE WAVE DATA ASSIMILATION MONTHLY MEANS OF DAILY MEANS  ; EWMO
+		ENSEMBLE WAVE DATA ASSIMILATION MONTHLY MEANS                 ; EWMM
+		ENSEMBLE LONG WINDOW DATA ASSIMILATION      ; ELDA
+		ENSEMBLE WAVE LONG WINDOW DATA ASSIMILATION ; EWLA
+        ENSEMBLE FORECASTS      ;    EF ; ENFO
+		ENSEMBLE FORECAST HINDCASTS ; EFHC
+		ENSEMBLE FORECAST HINDCAST STATISTICS ; EFHS
+		ENSEMBLE FORECAST OVERLAP ; EFOV
+        ENSEMBLE WAVE DATA ASSIMILATION   ;   EWDA
+		ENFH
+		ENWH
+		EFHO
+		EWHO
+		ERS1                    ;   E1
+		EUROSIP MONTHLY MEANS            ;   ESMM
+		EUROSIP HINDCAST MONTHLY MEANS   ;   EHMM
+        FG                               ;  FGGE         
+        MEANS ARCHIVE           ;   MA
+		MELBOURNE               ;   AMMC
+
+		LONG WINDOW DAILY ARCHIVE             ; LWDA
+		LONG WINDOW WAVE                      ; LWWV
+		MONTHLY FORECAST                      ; MNFC
+		MONTHLY FORECAST HINDCASTS            ; MNFH
+		MONTHLY FORECAST ANOMALIES            ; MNFA
+		MONTHLY FORECAST WAVE                 ; MNFW
+		MONTHLY FORECAST HINDCASTS WAVE       ; MFHW
+		MONTHLY FORECAST ANOMALIES WAVE       ; MFAW
+		MONTHLY FORECAST MEANS                ; MNFM
+		MONTHLY FORECAST HINDCASTS MEANS      ; MFHM
+		MONTHLY FORECAST ANOMALIES MEANS      ; MFAM
+		MONTHLY FORECAST WAVE MEANS           ; MFWM
+		MONTHLY FORECAST HINDCASTS WAVE MEANS ; MHWM
+		MONTHLY FORECAST ANOMALIES WAVE MEANS ; MAWM 
+
+		MONTHLY STDDEV         ;   SYNOPTIC MONTHLY VARIANCE AND CO-VARIANCE ; MV ; MSDC
+		MONTHLY DAILY STDDEV   ;   MONTHLY VARIANCE AND CO-VARIANCE ; MSDA  
+		MONTHLY DAILY MEANS    ;   MONTHLY MEANS OF DAILY MEANS ;   MODA
+		MONTHLY DAILY FORECAST ACCUMULATION ; MDFA
+		MONTHLY MEANS BOERS    ;   MOBR
+        MONTHLY                ; SYNOPTIC MONTHLY MEANS ;   MO; MNTH
+		MONTHLY STDDEV BOERS   ;   MVBR
+
+		SYNOPTIC MONTHLY VARIANCE AND CO-VARIANCE OF FILTERED FIELDS ;  MFVC
+		MONTHLY VARIANCE AND CO-VARIANCE OF FILTERED FIELDS          ;  MFVA
+
+        MONTREAL               ;   CWAO
+        MULTIANALYSIS ENSEMBLE DATA  ;   MAED
+        MULTIANALYSIS WAVE DATA      ;   MAWV
+
+		MULTIMODEL SEASONAL FORECAST                ; MMSF
+		MULTIMODEL SEASONAL FORECAST MEANS          ; MSMM
+		MULTIMODEL SEASONAL FORECAST WAVE           ; WAMS
+		MULTIMODEL SEASONAL FORECAST WAVE MEANS     ; MSWM
+		MULTIMODEL SEASONAL FORECAST MEAN ANOMALIES ; MMSA
+
+		MULTIMODEL MULTIANNUAL FORECAST             ; MMAF
+		MULTIMODEL MULTIANNUAL FORECAST MEANS       ; MMAM
+		MULTIMODEL MULTIANNUAL FORECAST WAVE        ; MMAW
+		MULTIMODEL MULTIANNUAL FORECAST WAVE MEANS  ; MMWM
+
+        OFFENBACH              ;   EDZW
+		OCEAN                  ;   OCEA
+        OLD MONTHLY FORECAST             ;   MOFC  
+        OLD MONTHLY FORECAST MEANS       ;   MOFM  
+		OLD WAVE MONTHLY FORECAST        ;   WAMF
+		OLD WAVE MONTHLY FORECAST  MEANS ;   WMFM
+        PARIS                  ;   LFPW 
+		SEASONAL FORECAST      ;   SEAS
+		SEASONAL MONTHLY MEANS ; SFMM
+		SEASONAL MONTHLY MEANS ANOMALIES ; SMMA
+		SEASONAL WAVE MONTLHY MEANS ; SWMM
+		SENSITIVE AREA PREDICTIONS ; SEAP
+		SENSITIVITY FORECAST   ;    SF ; SENS
+		SHORT CUTOFF DAILY ARCHIVE  ;   SCDA
+		SHORT CUTOFF WAVE      ;   SCWV
+		DELAYED CUTOFF DAILY ARCHIVE  ;   DCDA
+		DELAYED CUTOFF WAVE           ;   DCWV
+		SSBT                   ;   SSBT
+		SSMI                   ;   SSMI
+        SUPPLEMENTARY DATA     ;   SD ; SUPD
+        ENSEMBLE SUPPLEMENTARY DATA     ;   ESPD
+        TOGA                   ;   TG ; TOGA
+        TOKYO                  ;   RJTD
+        WASHINGTON             ;   KWBC
+        WAVE                   ;   WV ; WAVE
+        WAVE ENSEMBLE FORECAST ;   WAEF
+        WAVE ENSEMBLE FORECAST HINDCASTS ;   EWHC
+        WAVE ENSEMBLE FORECAST OVERLAP ;   WEOV
+        WAVE ENSEMBLE HINDCAST STATISTICS ;   WEHS
+        WAVE HINDCASTS         ;   WVHC
+		WAVE MODEL             ;   WAVM
+        WAVE SEASONAL FORECAST ;   WASF
+        WAMO                   ;   WAMO
+        WMO                    ;   WM
+        UKMO CLIMATE SUPPORT   ;   UKMO
+        CNRM CLIMATE SUPPORT   ;   CNRM
+        MPI  CLIMATE SUPPORT   ;   MPIC
+		2243
+		2242
+    } = DA
+
+	ORIGIN 
+	{
+		OFF ; OFF
+        WASHINGTON            ;   7     ; KWBC
+        BRACKNELL   ; EXETER  ;   74    ; EGRR    
+        FLEET NUMERICAL       ;   58    ; FNMOC ; FNMO
+        OFFENBACH             ;   78    ; DWD   ; EDZW
+        ECMWF                 ;   98    ; ECMF
+		TOULOUSE              ;   85    ; LFPW
+		PARIS                 ;   84    ; LFPW
+		MADRID                ;   214   ; LEMM
+		UNIVERSITY OF VIENNA  ;   244   ; VUWIEN
+		KNMI                  ;   245   ; KNMI
+		INGV                  ;   235   ; INGV
+		CERFACS               ;   239   ; CRFC
+		IFMK                  ;   246   ; IFMK
+		HADLEY CENTRE         ;   247   ; HADC
+		CONSENSUS             ;   255   ; CONSENSUS
+# for TIGGE
+		MELBOURNE             ;   1     ; AMMC
+        TOKYO                 ;   34    ; RJTD
+        MONTREAL              ;   54    ; CWAO
+        BEIJING               ;   38    ; BABJ
+		SEOUL                 ;   40    ; RKSL
+		CPTEC                 ;   46    ; SBSJ
+		CNMC                  ;   80    ; CNMC
+		OSLO                  ;   88    ; ENMI
+		/
+		ALL
+	} = OFF
+
+    MODEL
+	{
+		OFF
+		ECMF
+		EDZW
+		EGRR
+		LFPW
+		KWBC
+		NONE
+		HRM
+		LM
+		IFS
+		GLOBAL ; GLOB
+		@
+	} = OFF
+
+	SYSTEM {
+		*
+		ALL
+	}
+
+	METHOD {
+		TO ;    TO
+		BY ;    BY 
+        ALL ;   ALL
+        OFF ;   OFF
+        *   
+        /   
+	}
+
+	PRODUCT {
+		INSTANTANEOUS     ; INST
+		TIME-SERIES       ; TIMS
+		TIME-AVERAGE      ; TAVG
+		TIME-ACCUMULATION ; TACC
+		ALL
+	} = INSTANTANEOUS
+
+	SECTION {
+		HORIZONTAL  ; H
+		VERTICAL    ; V
+		ZONAL       ; Z 
+		MERIDIONAL  ; M
+		ALL
+	} = HORIZONTAL
+
+
+
+    LEVTYPE  
+    {
+		POTENTIAL VORTICITY   ; PV
+		POTENTIAL TEMPERATURE ; PT
+        SURFACE               ; SFC
+        PRESSURE LEVELS       ; PL
+        MODEL LEVELS          ; ML
+		DEPTH                 ; DP
+		OCEAN WAVE            ; WV
+		LAYER                 ; LAYER
+		CATEGORY              ; CAT
+		ALL
+    } = PL
+    
+    REPRES 
+    {
+        BUFR            ;   BU
+        SPHERICAL HARMONICS ;   SH
+        LAT LONG GRID       ;   LL
+        GAUSSIAN GRID       ;   GG
+		SPACE VIEW          ; SV
+		OCEAN GRID          ; OG
+		ALL
+    } = SH
+
+    OBSTYPE
+    {
+		 *   
+		 /   
+
+		 ALL                = (NSD/SD)
+		 CONVENTIONAL; NSD  = (LSD/SSD/VSNS/SLNS/SLS/OD/DD/CC/SF/GBGPS/OSTIA)
+		 SD                 = (SDS/VSS/SSMI/SSMIS/SSBT/TRMM/QSCAT/REO3/IASI/ATMS/CRIS)
+
+# Image stuff
+
+GRIB IMAGES #= (0/1/10/20)
+
+	FIRST INFRARED BAND  ; FIB ; 0
+	SECOND INFRARED BAND ; SIB ; 1
+	FIRST VISIBLE BAND   ; FVB ; 10
+	WATER VAPOR BAND     ; WVB ; 20
+
+# Extractions
+
+BUFR = (1/3/9/11/13/19/21/22/23/28/61/62/63/82/83/84/85/86/87/91/92/95/96/101/102/103/106/110/140/142/144/145/147/164)
+WAVESCAT = (121)
+SCAT = (122)
+RALT = (123)
+TOVH = (53)
+GRAD = (88/89/189/190)
+ATOV = (55)
+AIRS = (57)
+STORM = (31)
+IMSSNOW = (165)
+AMSU_EARS = (155)
+BALTIC_CI = (237)
+WAVESAR = (210)
+IASI = (240)
+OSTIA = (26)
+ENVISAT_MERIS = (212)
+ATMS = (201)
+CRIS = (202)
+SMOS = (203)
+
+# FeedBack
+
+FBCONV = (1/3/9/11/13/19/21/22/23/28/65/82/83/86/87/91/92/95/96/101/102/103/106/110/140/142/143/144/145/164)
+FBSCAT = (122/136/137/139)
+FBSSMI = (127)
+FBTMI  = (129)
+FBTOVS = (53)
+FBRAD1C = (54/55)
+FBGEOS = (89/189/190)
+FBTRMR = (255)
+FBREO3 = (206)
+FBAIRS = (57)
+FBAMSRE = (59)
+FBSSMIS = (49)
+FBGPSRO = (250)
+FBIASI = (240)
+FBWINDSAT = (156)
+
+# Type LSD (NSD)
+
+	LAND SURFACE DATA         ; LSD = (1/2/3/4/7/28/140/147/165)
+
+	SYNOP LAND                ; S   ; 1
+	SYNOP RECORD 2 LAND       ; S2  ; 2
+	SYNOP AUTO LAND           ; SA  ; 3
+	SYNOP AUTO RECORD 2 LAND  ; SA2 ; 4
+	SOIL AND EARTH TEMPERATURE; SET ; 7
+	METAR                     ; METAR ; 140
+	AUTO METAR                ; AMETAR ; 147
+	SNOW COVER                ; SNOWCOVER ; SNOW ; 165
+	SNOW DEPTH                ; SNOWD ; 28
+
+# Type SSD (NSD)
+
+	SEA SURFACE DATA ; SSD  = ( 9/11/12/13/14/19/21/22/23 )
+
+	SYNOP ABBREVIATED SHIP    ; SAB ; 9
+	SYNOP SHIP               ; SS   ; 11
+	SYNOP RECORD 2 SHIP      ; SS2  ; 12
+	SYNOP AUTO SHIP          ; SAS  ; 13
+	SYNOP AUTO RECORD 2 SHIP ; SAS2 ; 14
+	SHRED                    ; SH   ; 19
+	DRIBU SURFACE             ; DSU ; 21
+	BATHY SURFACE             ; BSU ; 22
+	TESAC SURFACE             ; TSU ; 23
+	OSTIA                     ;       26
+	BUOY                      ;       27
+
+
+# Type VSNS (NSD)
+
+VERTICAL SOUNDINGS NOT SATELLITE ; VSNS = (91/92/95/96/97/101/102/103/104/105/106/107)
+
+	PILOT LAND   ;  P   ; 91
+	PILOT SHIP   ;  PS  ; 92
+	WIND PROFILE ;  WP  ; 95
+	EUROPEAN WIND PROFILE;  EWP  ; 96
+	EUROPEAN WIND AND TEMPERATURE PROFILE;  EWTP  ; 97
+	TEMP LAND    ;  T   ; 101
+	TEMP SHIP    ;  TS  ; 102
+	TEMP DROP    ;  TD  ; 103
+	ROCOB LAND   ;  R   ; 104
+	ROCOB SHIP   ;  RS  ; 105
+	TEMP MOBILE	 ;  TM  ; 106
+	CLIMATE TEMP ;  CT  ; 107
+
+# Type VSS (SD)
+
+VERTICAL SOUNDINGS SATELLITE ; VSS = (51/53/54/55/56/57/59/61/62/63/65/71/72/73/75/138/139/155/250)
+
+	HIGH RESOLUTION        ;  HR    ; 51
+	RTOVS                  ;  RTOV  ; 53
+	TOVS1b                 ;  TOVB  ; 54
+	ATOVS                  ;  ATOV  ; 55
+	ATOVS PRODUCTS         ;  ATOP  ; 56
+	AIRS                   ;  AIRS  ; 57
+	ADVANCED MICROWAVE SCANNING RADIOMETER  ;  AMSRE ; 59
+	ADVANCED MICROWAVE SCANNING RADIOMETER 2 ;  AMSR2 ; 60
+	SATEM MEAN TEMPERATURE ;  SMT   ; 61
+	SATEM WATER            ;  SW    ; 62
+	SATEM HIGHER LEVEL     ;  SHL   ; 63
+	SATEM LEVELS MERGED    ;  SLM   ; 65
+	MEAN TEMPERATURE       ;  MT    ; 71
+	WATER                  ;  W     ; 72
+	HIGHER LEVEL           ;  HL    ; 73
+	TOVS LEVELS MERGED     ;  TLM   ; 75
+	ATOVS EUMETSAT         ;  ATEU  ; 155
+	GPS RADIO OCCULTATION  ; GPSRO ; 250
+	ASCAT                  ; 139
+	OSCAT                  ; 138
+
+	IASI_SCREENED          ; IASI  ; 240
+
+CHEMICAL CONSTITUENT; CC = (162/159)
+
+#	SURFACE OZONE           ;  SO    ; 157
+#	SURFACE OZONE AVERAGED  ;  SOA   ; 158
+	OZONE PARTIAL           ;  OP    ; 159
+	OZONE VERTICAL SOUNDING ;  OVS   ; 162
+
+# Synoptic Features
+
+SYNOPTIC FEATURES; SF = (31)
+    STORM ; STOR ; 31
+	TROPICAL CYCLONE ; TC ; 32
+
+SATELLITE = (VSS/SSBT/SSMI/SSMIS/QSCAT/REO3/WSAT/VASS/ATMS)
+
+# Type SLNS (NSD)
+
+SINGLE LEVEL UPPER AIR NOT SATELLITE ; SLNS = (141/142/143/144/145)
+
+	CODAR ;  COD ; 141
+	AIREP ;  AIR ; 142
+	COLBA ;  COL ; 143
+	AMDAR ;  AM  ; 144
+	ACARS ;  AC  ; 145
+
+# Type SLS (NSD)
+
+SINGLE LEVEL UPPER AIR SATELLITE ; SLS = (82/83/84/85/86/87/88/89/189/190)
+
+	SATOB SECTION 2                            ; SAT2 ; 82
+	SATOB SECTION 3                            ; SAT3 ; 83
+	SATOB SECTION 4                            ; SAT4 ; 84
+	SATOB SECTION 5                            ; SAT5 ; 85
+    HIGH RESOLUTION WINDS                      ; SAT6 ; 86 
+    HIGH DENSITY UNIFIED FORMAT SATELLITE WINDS; SAT7 ; 87
+	GEOSTATIONARY RADIANCES                    ; GEOR ; 88 
+	GEOSTATIONARY CLEAR SKY RADIANCES          ; GCSR ; 89
+	GEOSTATIONARY MSG RADIANCES                ; GMSGR ; 189
+	GEOSTATIONARY ALL SKY RADIANCES            ; GASR ; 190
+
+# Type OD (NSD)
+
+OCEANOGRAPHIC DATA      ;   OD = (131/132/133) 
+
+	DRIBU OCEANOGRAPHIC     ;   DO ; 131
+	BATHY OCEANOGRAPHIC     ;   BO ; 132
+	TESAC OCEANOGRAPHIC     ;   TO ; 133
+
+# Type DD (NSD)
+
+DERIVED DATA ;   DD = (164/237) 
+	PAOBS ; PA ; 164
+	BALTIC SEA ICE ; BICE ; 237
+
+
+
+# Type SDS, ERS1 (SD)
+
+SURFACE DATA SATELLITE  ; ERS1; SDS = (121/122/123/124/210/212/213/214/216)
+
+	WAVE SCATTEROMETER      ; WAS  ; 121
+	WIND SCATTEROMETER      ; WIS  ; 122
+	RADAR ALTIMETER         ; RAL  ; 123
+	SEA SURFACE TEMPERATURE ; SST  ; 124
+	ENVISAT SAR             ; ESAR  ; 210
+	ENVISAT MERIS           ; EMERIS ; 212
+	ENVISAT RADAR ALTIMETER ; ERA  ; 213
+	JASON RADAR ALTIMETER ;   JRA  ; 214
+	JASON2 RADAR ALTIMETER ;  J2RA ; 216
+
+# RADAR
+	REPROCESSED WIND        ; RW ;  NEXRAD ; 125
+NEXRAD_RR = (125)
+
+# SSMI
+	
+	MICROWAVE IMAGES  ;  SSMI = (126)
+        SPECIAL SENSOR MICROWAVE IMAGER SOUNDER ; SSMIS = (49)
+
+SEA SURFACE BRIGTHNESS TEMPERATURE ; SSBT ; 127
+
+# TRMM
+TRMM = (129/130)
+TMI BRIGHTNESS TEMPERATURES              ; TBT  ; 129
+TMI INSTANTANEOUS 3-D RAINFALL STRUCTURE ; TI3R ; 130
+
+QSCAT = (137/138)
+QUIKSCAT                                 ; QSCA ; 137
+QUIKSCAT SEAWINDS                        ; QSSW ; 138
+
+REO3 = (206/207/208/209/217)
+RETRIEVED OZONE                          ; REO3 ; 206
+MODIS AEROSOL                                                            ; MODIS     ; 207
+LAYER INTEGRATED MASS DENSITY                                            ; LIMD      ; 208
+LAYER INTEGRATED MASS DENSITY WITH AVERAGING KERNELS                     ; LIMD_AK   ; 209
+LAYER INTEGRATED MASS DENSITY WITH AVERAGING KERNELS AND A PRIORI PROFIL ; LIMD_AKPP ; 217
+
+GBGPS = (110)
+GROUND BASED GPS                         ; PGPS ; 110
+
+WINDSAT                                  ; WSAT ; 156
+VASS = (154)
+VERTICAL ATMOSPHERIC SOUNDER SYSTEM      ; VASS ; 154
+
+ADVANCED TECHNOLOGY MICROWAVE SOUNDER      ; ATMS ; 201
+CROSS-TRACK INFRARED SOUNDER               ; CRIS ; 202
+
+} = SYNOP LAND
+
+	REPORTYPE {
+
+%include "reportypes.def"
+
+		*
+		/
+		OFF
+	} = OFF
+
+	OBSGROUP {	
+#		CONVENTIONAL
+		SAT          ; SATELLITE
+		ERS1 
+		TRMM
+		QSCAT
+#		IASI
+
+		# reo3 needs to stay for compatibility 
+		REO3
+
+%include "obsgroups.def"
+
+	} = CONV
+    
+    DOMAIN
+    {
+		GENERAL EUROPEAN AREA   ; G
+		GLOBE                   ; G
+        MEDITERRANEAN           ; M
+        NORTHERN HEMISPHERE     ; N
+        SOUTHERN HEMISPHERE     ; S
+		BALTIC AND BLACK SEA    ; B
+		EUROPE                  ; E
+        NORTH WEST EUROPE       ; A
+        NORTH EAST EUROPE       ; B
+        SOUTH WEST EUROPE       ; C
+        SOUTH EAST EUROPE       ; D
+		WESTERN ATLANTIC        ; W
+		FASTEX                  ; F
+		TROPICS                 ; T
+		TROPICS 2               ; U
+		X
+		ALL
+		V
+		H
+		I
+		J
+		K
+		L
+		O
+		P
+		Q
+		R
+		Y
+		Z
+    } = GLOBE
+
+    DATE
+    {
+        JANUARY     ;   JAN
+        FEBRUARY    ;   FEB
+        MARCH       ;   MAR
+        APRIL       ;   APR
+        MAY         ;   MAY
+        JUNE        ;   JUN
+        JULY        ;   JUL
+        AUGUST      ;   AUG
+        SEPTEMBER   ;   SEP
+        OCTOBER     ;   OCT
+        NOVEMBER    ;   NOV
+        DECEMBER    ;   DEC
+        *   
+        CURRENT DATE ; 0
+        YESTERDAY    ; -1
+		TO          ; TO
+		BY          ;   BY
+		/
+		OFF
+    } = CURRENT DATE
+
+	IDENT {
+        METEOSAT 3 ; MS3  ; 50
+        METEOSAT 4 ; MS4  ; 51
+        METEOSAT 5 ; MS5  ; 52
+        METEOSAT 6 ; MS6  ; 53
+        METEOSAT 7 ; MS7  ; 54
+        METEOSAT 8 ; MS8  ; 55
+        GOES 8     ; GOES ; 252
+        GOES 9     ;        253
+        GOES 10    ;        254
+        GOES 11    ;        255
+        GOES 12    ;        256
+		DMSP 10 ; 204
+		DMSP 13 ; 246
+		/
+		OFF
+	} = OFF
+
+	INSTRUMENT {
+		MHS          ; 203
+		MVIRI        ; 205
+		SEVIRI       ; 207
+		GOES IMAGER  ; 615
+		AMSU-A       ; 570
+		AMSU-B       ; 574
+		MSU          ; 623
+		HIRS2        ; 605
+		HIRS3        ; 606
+		SSU          ; 627
+		*
+		OFF
+		/
+	} = OFF
+
+	CHANNEL {
+		*
+		OFF; OFF
+		/
+		TO 
+		ALL
+	} = OFF
+
+    PADDING  
+    {
+		AUTOMATIC   ; AUTO
+		NONE        ; N    ; 0
+		OFF
+		*
+    } = OFF
+    
+	BRANCH 
+	{
+		TRUE
+		FALSE
+		OFF
+	} = OFF
+
+} ! END OF DUMMY
+
+HELP    ;   Displays prints help file   ;   INTERNAL
+{
+}
+
+!------------------------------------------------------------------------
+
+NEWS    ;   Displays prints news file   ;   INTERNAL
+{
+}
+
+!------------------------------------------------------------------------
+
+END ;   Normal exit from mars system    ;   INTERNAL
+{
+}
+
+!------------------------------------------------------------------------
+
+DEFAULT ;   Reset defaults    ;   INTERNAL
+{
+}
+
+!------------------------------------------------------------------------
+
+ARCHIVE ;   Archives data   ;   MARS
+{
+
+	DATASET [ priority = 0 ]
+	{
+		@
+	}
+
+    CLASS  { &_DUMMY&CLASS  } = OD
+
+    TYPE   { &_DUMMY&TYPE   } = AN
+
+    STREAM { &_DUMMY&STREAM } = DA
+    
+	MODEL  { &_DUMMY&MODEL  } = OFF
+
+	ORIGIN { &_DUMMY&ORIGIN } = OFF
+
+	SYSTEM { &_DUMMY&SYSTEM 
+			  OFF } = OFF
+	METHOD { &_DUMMY&METHOD 
+			  OFF } = OFF
+
+    REPORTYPE { &_DUMMY&REPORTYPE } = OFF
+
+	PRODUCT { &_DUMMY&PRODUCT 
+			  OFF } = OFF
+	SECTION { &_DUMMY&SECTION 
+			  OFF } = OFF
+	LATITUDE { @ 
+			   OFF } = OFF
+	LONGITUDE { @ 
+				OFF } = OFF
+
+    EXPVER  [ priority = 1 ]
+    {
+		@
+        "       
+        *       
+        /
+    } = 1
+    
+    LEVTYPE { &_DUMMY&LEVTYPE } = PL 
+    
+    LEVELIST  
+    {
+		TO ; TO
+		BY ; BY 
+        OFF ;   OFF
+        *       
+        /       
+    } = 1000/850/700/500/400/300
+    
+    REPRES { &_DUMMY&REPRES } = SH
+    
+    DOMAIN 
+    {
+	&_DUMMY&DOMAIN
+    } = G
+    
+    OBSTYPE { ALL
+		 KNOWN				= (ALL)
+	&_DUMMY&OBSTYPE } = S
+
+    IDENT
+    {
+		&_DUMMY&IDENT
+		ALL 
+        OFF     ; OFF;  OFF
+        /   
+        *       
+    }=OFF
+
+	OBSGROUP { ALL
+	&_DUMMY&OBSGROUP } = CONVENTIONAL	
+    
+    PARAM { &_DUMMY&PARAM } = Z
+
+    CHANNEL { &_DUMMY&CHANNEL } = OFF
+    
+	INSTRUMENT { &_DUMMY&INSTRUMENT } = OFF
+
+    DATE 
+	{
+		&_DUMMY&DATE
+    } = CURRENT DATE
+    
+    VERIFY 
+	{
+		&_DUMMY&DATE
+		OFF          ; OFF
+    } = OFF
+    
+    REFDATE 
+	{
+		&_DUMMY&DATE
+    } = OFF
+
+	HDATE 
+	{ 
+		&_DUMMY&DATE 
+		ALL
+	} = OFF
+
+    FCMONTH 
+	{
+		*
+		/
+		TO
+		BY  ! 1
+		OFF
+    } = OFF
+    
+    FCPERIOD
+    {
+        TO  ;   TO
+        BY  ;   BY    
+		/
+        *   
+		OFF
+    } = OFF
+    
+    TIME
+    {
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY    !                               6
+    } = 12
+    
+	LEADTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+	OPTTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+	RANGE 
+	{
+		*
+		OFF; OFF
+	} = OFF
+
+    REFERENCE 
+    {
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        
+		OFF
+    } = OFF 
+
+    STEP
+    {
+        TO  ;   TO
+        BY  ;   BY    
+		/
+        *   
+    } = 00
+    
+    ANOFFSET
+    {
+        TO  ;   TO
+        BY  ;   BY    
+		/
+        *   
+		OFF
+    }
+    
+    ENSEMBLE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    } = OFF
+    
+    CLUSTER
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    } = OFF
+    
+    
+    PROBABILITY
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    } = OFF
+    
+    NUMBER
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+    
+    QUANTILE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+
+    DIAGNOSTIC
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+        *   
+        /
+    } = OFF
+
+    ITERATION
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    FREQUENCY
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  
+        *   
+        /
+    } = OFF
+    
+    DIRECTION
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  
+        *   
+        /
+    } = OFF
+    
+    SOURCE
+    {
+		@
+		/
+        "   
+    } = ""
+    
+    LOGSTATS
+    {
+		@
+        "   
+		OFF
+    }
+
+    DISP
+    {
+        NEW ;   N
+        OLD ;   OLD
+		REMOVE
+    } = NEW
+    
+	STYLE
+    {
+        DISSEMINATION  
+        OFF   
+    } = OFF
+
+	INTERPOLATION
+    {
+        NEAREST NEIGHBOUR  
+        NEAREST LSM  
+		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
+        OFF   
+    } = OFF
+
+    AREA
+    {
+        GLOBE   ;   G
+        EUROPE  ;   E
+    } = G
+    
+    RESOL
+    {
+        /
+        *   
+    }
+
+	FRAME 
+	{
+		*
+		OFF; OFF
+	} = OFF
+
+	BITMAP 
+	{
+		OFF; OFF
+		@
+		"
+	} = OFF
+
+    GRID
+    {
+        *
+        /
+        OFF     ; OFF;  OFF
+    } = OFF
+    
+    PASSWORD
+    {
+        "   
+    } = ""
+
+	DATABASE [ priority = 1 ]
+	{
+		@
+		/
+		OFF
+	} 
+
+	EXPECT [ priority = 0 ]
+	{
+		ANY
+		*
+		OFF ; OFF
+	} = OFF
+
+	JOB
+	{
+		"
+		OFF
+	} = OFF
+
+    USE  
+    {
+        FREQUENT   
+        INFREQUENT
+        NORMAL
+		BOUNDARY CONDITIONS  ;  BC
+		OFF; OFF
+    } = OFF
+
+	CRC
+	{
+		ON
+		OFF
+	} = OFF
+
+    DUPLICATES  
+    {
+        KEEP
+        REMOVE
+    } = REMOVE
+
+	PADDING
+	{
+		&_DUMMY&PADDING
+	} = OFF
+
+    PROCESS  
+    {
+		LOCAL ; LOCAL
+		SERVER 
+        OFF ;   OFF
+    } = OFF
+
+	BRANCH { &_DUMMY&BRANCH } = OFF
+
+} ! END OF ARCHIVE
+
+!------------------------------------------------------------------------
+
+LIST    ;   LIST FDF ENTRIES AND CFS FILES  ;   MARS
+{
+    
+	DATASET [ priority = 0 ]
+	{
+		@
+	}
+
+    CLASS  
+	{ 
+		&_DUMMY&CLASS  
+		/ 
+		ALL
+	} 
+    
+    TYPE   
+	{ 
+		&_DUMMY&TYPE  
+		/  
+		ALL
+	} 
+
+    STREAM 
+	{ 
+		&_DUMMY&STREAM 
+		/ 
+		ALL
+	} 
+    
+	MODEL 
+	{
+		&_DUMMY&MODEL
+		/
+		ALL
+	}
+
+	ORIGIN 
+	{
+		&_DUMMY&ORIGIN
+		/
+		ALL
+	}
+
+	SYSTEM 
+	{ 	
+		&_DUMMY&SYSTEM 
+		/
+		ALL 
+	} 
+
+	METHOD 
+	{ 	
+		&_DUMMY&METHOD 
+		/
+		ALL 
+	} 
+
+	PRODUCT 
+	{ 	
+		&_DUMMY&PRODUCT 
+		/
+		ALL 
+	} 
+
+	SECTION 
+	{ 	
+		&_DUMMY&SECTION 
+		/
+		ALL 
+	} 
+
+	LATITUDE 
+	{ 	
+		@
+		/
+		ALL 
+	} 
+
+	LONGITUDE 
+	{ 	
+		@
+		/
+		ALL 
+	} 
+
+    EXPVER{
+		@
+		/
+		ALL
+    } 
+    
+    LEVTYPE 
+	{ 
+		&_DUMMY&LEVTYPE 
+		/ 
+		ALL
+	}
+    
+    LEVELIST
+    {
+		TO ; TO
+		BY ; BY 
+        ALL ;   ALL
+        OFF ; OFF;   OFF
+        *   
+        /   
+    }
+    
+    REPRES { 
+		&_DUMMY&REPRES 
+		/ 
+		ALL
+	}
+    
+    DOMAIN  
+    {
+		&_DUMMY&DOMAIN
+		/
+		ALL
+    } 
+
+    OBSTYPE 
+    {
+        ALL                     ;   ALL
+        NON SATELLITE DATA ALL  ;   NSD 
+        SATELLITE DATA ALL      ;   SD
+        &_DUMMY & OBSTYPE
+		/
+    } 
+
+	OBSGROUP { ALL
+	&_DUMMY&OBSGROUP } = ALL
+    
+    REPORTYPE { ALL
+	&_DUMMY&REPORTYPE } = OFF
+
+    DUPLICATES  {
+        KEEP
+        REMOVE
+    } = KEEP
+    
+    PARAM 
+    {
+        ALL             ;   ALL
+        &_DUMMY&PARAM
+		/
+    }
+    
+    CHANNEL 
+	{ 	
+		ALL             ; ALL
+		&_DUMMY&CHANNEL 
+	} 
+
+    INSTRUMENT 
+	{ 	
+		ALL             ; ALL
+		&_DUMMY&INSTRUMENT 
+	} 
+
+	IDENT
+	{
+		ALL
+		&_DUMMY&IDENT
+		*
+	}
+
+	PSEUDODATE
+	{
+		LATEST
+		EARLIEST
+	}
+
+    DATE
+    {
+		&_DUMMY&DATE
+		ALL
+    } 
+    
+    VERIFY 
+	{
+		&_DUMMY&DATE
+		OFF          ; OFF
+    } = OFF
+    
+    REFDATE 
+	{
+		&_DUMMY&DATE
+		ALL
+    } = OFF
+
+	HDATE 
+	{ 
+		&_DUMMY&DATE 
+		ALL
+	} = OFF
+
+    FCMONTH 
+	{
+		*
+		/
+		TO
+		BY  ! 1
+		OFF
+    } = OFF
+    
+    FCPERIOD
+    {
+        TO  ;   TO
+        BY  ;   BY    
+		/
+        *   
+		OFF
+    } = OFF
+    
+	MONTH
+	{
+		*
+		/
+		TO
+		BY  ;   BY           !        1
+		ALL
+	}
+
+	YEAR
+	{
+		*
+		/
+		TO
+		BY  ;   BY           !        1
+		ALL
+	}
+    
+	DECADE
+	{
+		*
+		/
+		TO
+		BY  ;   BY           !        1
+		ALL
+	}
+
+    TIME
+    {
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY           !        6
+		ALL ;   ALL
+    }
+    
+	LEADTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+	OPTTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+    REFERENCE 
+    {
+        ALL ;   ALL
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        !           12
+		OFF
+    } = OFF 
+
+    STEP
+    {
+        ALL ;   ALL
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        !           12
+    }
+    
+    ANOFFSET
+    {
+        ALL ;   ALL
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        !           12
+		OFF
+    }
+
+    ENSEMBLE
+    {
+        ALL
+		TO  ; TO
+        *   
+        /   
+        OFF ; OFF;  OFF
+    } 
+    
+    CLUSTER
+    {
+        ALL
+		TO  ; TO
+        *   
+        /   
+        OFF ; OFF;  OFF
+    } 
+    
+    
+    PROBABILITY
+    {
+        ALL ;   ALL
+		TO  ; TO
+        OFF ;   OFF
+        *   
+        /
+    }
+
+    NUMBER
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+    
+    QUANTILE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+
+    DIAGNOSTIC
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+        *   
+        /
+    } 
+
+    ITERATION
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    }
+
+    FREQUENCY
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    DIRECTION
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+	SHOW
+	{
+		@
+		/
+	}
+
+	HIDE
+	{
+		@
+		/
+	}
+
+ 
+    TARGET
+    {
+		@
+        "   
+		OFF
+    }
+
+	DATABASE [ priority = 1 ]
+	{
+		@
+		/
+		OFF
+	} 
+
+	RANGE 
+	{
+		*
+		OFF; OFF
+	} = OFF
+
+
+    SOURCE
+    {
+		@
+        "   
+    } = ""
+
+    FIELDSET  
+    {
+        @
+    }
+    
+    CFSPATH  
+    {
+        "   
+    } = ""
+    
+    FORMAT  
+    {
+        PACKED      ;   P
+        UNPACKED    ;   U
+        GRIB EDITION 1 ;   GRIB1
+        GRIB EDITION 2 ;   GRIB2
+		NETCDF
+		OFF         ;   OFF
+    } = OFF
+    
+    RESOL 
+    {
+        ARCHIVED VALUE       ;   AV
+		AUTOMATIC RESOLUTION ;   AUTO
+		OFF                  ;   OFF
+		319
+		213
+		106
+		63
+        *   
+    } = OFF
+    
+    ACCURACY 
+    {
+        NORMAL  ;   N
+        REDUCED ;   R
+        LOW ;   L
+		OFF; OFF
+        *   
+		ARCHIVED VALUE ; AV
+    } = OFF
+    
+    AREA  
+    {
+        GLOBE               ;  GLOBE;  G
+        EUROPE              ;  EUROPE; E
+        *   
+        /   
+		OFF; OFF
+    } = OFF
+
+	LOCATION 
+	{
+		*
+        /   
+        OFF     ;  OFF
+	} = OFF
+
+	FRAME 
+	{
+		*
+		OFF; OFF
+	} = OFF
+
+	BITMAP 
+	{
+		OFF ; OFF
+		@
+		"
+	} = OFF
+
+    BLOCK  
+    {
+        OFF     ; OFF;  OFF
+        /   
+        *       
+    }=OFF
+
+    GRID  
+    {
+        ARCHIVED VALUE  ;   AV
+        *   
+        /   
+        OFF     ; OFF;  OFF
+    } = OFF
+    
+	GAUSSIAN 
+	{
+		REDUCED
+		REGULAR
+		OFF     ; OFF;  OFF
+	} = OFF
+
+	SPECIFICATION 
+	{
+		*
+		OFF
+	} = OFF
+
+    LAUNCH  
+    {
+        "   
+    } = ""
+    
+	PADDING
+	{
+		&_DUMMY&PADDING
+	} = OFF
+
+	JOB
+	{
+		"
+		OFF
+	} = OFF
+
+    USE  
+    {
+        FREQUENT   
+        INFREQUENT
+        NORMAL
+		BOUNDARY CONDITIONS  ;  BC
+		COMPARE
+		MONTHLY RUN
+		OFF; OFF
+    } = OFF
+    
+    PASSWORD  
+    {
+        "   
+        OFF ;   OFF
+    } = OFF
+    
+    COSTONLY  
+    {
+        YES ;   Y
+        NO  ;   N
+		OFF ;   OFF
+    } = OFF
+    
+    PROCESS  
+    {
+		LOCAL ; LOCAL
+		SERVER
+        OFF ;   OFF
+    } = OFF
+
+	BRANCH { &_DUMMY&BRANCH } = OFF
+
+	EXPECT 
+	{
+		*
+		OFF ; OFF
+		ANY
+	} = OFF
+
+	OUTPUT {
+		TABLE
+		BROWSE
+		COST
+		SEARCH
+		TREE
+	} = TABLE
+
+
+} ! END OF LIST
+
+STAGE    ;   STAGE FIELDS ;    MARS
+{
+    
+	DATASET [ priority = 0 ]
+	{
+		@
+	}
+
+    CLASS
+	{ 
+		&_DUMMY&CLASS  
+	} = OD
+    
+
+    TYPE
+	{ 
+		&_DUMMY&TYPE   
+		ALL
+	} = AN
+
+    STREAM
+	{ 
+		&_DUMMY&STREAM 
+	} = DA
+    
+	MODEL 
+	{
+		&_DUMMY&MODEL
+		/
+	} = OFF
+
+	ORIGIN 
+	{
+		&_DUMMY&ORIGIN
+		/
+	} = OFF
+
+    EXPVER
+	{
+		@
+        *   
+    } = 1
+    
+
+	SYSTEM 
+	{ 	
+		&_DUMMY&SYSTEM 
+		/
+		ALL 
+	} 
+
+	METHOD 
+	{ 	
+		&_DUMMY&METHOD 
+		/
+		ALL 
+	} 
+
+	PRODUCT { &_DUMMY&PRODUCT 
+			  OFF } = OFF
+	SECTION { &_DUMMY&SECTION 
+			  OFF } = OFF
+	LATITUDE { @ 
+			   OFF } = OFF
+	LONGITUDE { @ 
+				OFF } = OFF
+
+    LEVTYPE
+	{ 
+		&_DUMMY&LEVTYPE 
+	} = PL 
+    
+    LEVELIST
+    {
+		TO ; TO
+		BY ; BY 
+        ALL ;   ALL
+        OFF ; OFF;   OFF
+        *   
+        /   
+    } = 1000/850/700/500/400/300
+    
+    REPRES
+	{ 
+		&_DUMMY&REPRES 
+	} = SH
+    
+    DOMAIN
+    {
+		&_DUMMY&DOMAIN
+    } = G
+
+    OBSTYPE
+    {
+        ALL                     ;   ALL
+        NON SATELLITE DATA ALL  ;   NSD 
+        SATELLITE DATA ALL      ;   SD
+        &_DUMMY & OBSTYPE
+    } = S
+
+	OBSGROUP 
+	{ 
+		&_DUMMY&OBSGROUP
+		OFF    ; OFF
+	} = OFF
+
+    REPORTYPE { &_DUMMY&REPORTYPE } = OFF
+
+
+    PARAM
+    {
+        ALL             ;   ALL
+        &_DUMMY&PARAM
+    } = Z
+    
+    CHANNEL { 
+		ALL     ; ALL
+		&_DUMMY&CHANNEL 
+	} = OFF
+
+    INSTRUMENT { 
+		ALL     ; ALL
+		&_DUMMY&INSTRUMENT 
+	} = OFF
+
+    DATE
+    {
+		&_DUMMY&DATE
+    } = CURRENT DATE
+    
+    VERIFY 
+	{
+		&_DUMMY&DATE
+		OFF          ; OFF
+    } = OFF
+    
+    REFDATE 
+	{
+		&_DUMMY&DATE
+    } = OFF
+
+	HDATE 
+	{ 
+		&_DUMMY&DATE 
+		ALL
+	} = OFF
+
+    FCMONTH 
+	{
+		*
+		/
+		TO
+		BY  ! 1
+		OFF
+    } = OFF
+    
+    FCPERIOD
+    {
+        TO  ;   TO
+        BY  ;   BY    
+		/
+        *   
+		OFF
+    } = OFF
+    
+    TIME 
+    {
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY           !        6
+		ALL ;   ALL
+    } = 12
+
+	LEADTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+	OPTTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+	RANGE 
+	{
+		*
+		OFF; OFF
+	} = OFF
+    
+	REFERENCE 
+	{
+		ALL ;   ALL
+		*
+		/
+		TO  ;   TO
+		BY  ;   BY
+		OFF
+	} = OFF
+
+    STEP
+    {
+        ALL ;   ALL
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        !           12
+    } = 00
+    
+    ANOFFSET
+    {
+        ALL ;   ALL
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        !           12
+		OFF
+    }
+
+    ENSEMBLE
+    {
+        ALL
+		TO  ; TO
+        *   
+        /   
+        OFF ; OFF;  OFF
+    } = OFF
+    
+    CLUSTER
+    {
+        ALL
+		TO  ; TO
+        *   
+        /   
+        OFF ; OFF;  OFF
+    } = OFF
+    
+    
+    PROBABILITY
+    {
+        ALL ;   ALL
+		TO  ; TO
+        OFF ;   OFF
+        *   
+        /
+    } = OFF
+
+    NUMBER
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+    
+    QUANTILE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+
+    DIAGNOSTIC
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+        *   
+        /
+    } = OFF
+
+    ITERATION
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    FREQUENCY
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    DIRECTION
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    BLOCK
+    {
+        OFF     ; OFF;  OFF
+        /   
+        *       
+    }=OFF
+
+    IDENT
+    {
+		ALL 
+		&_DUMMY&IDENT 
+    }=OFF
+    
+	TARGET 
+	{
+		@
+		"
+		OFF
+	} = ""
+
+    FIELDSET  
+    {
+        @
+    }
+    
+	RESOL
+	{
+        ARCHIVED VALUE       ;   AV
+		AUTOMATIC RESOLUTION ;   AUTO
+		OFF                  ;   OFF
+		319
+		213
+		106
+        *   
+	} = AUTO
+
+	ACCURACY
+	{
+        NORMAL  ;   N
+        REDUCED ;   R
+        LOW ;   L
+		OFF; OFF
+        *   
+		ARCHIVED VALUE ; AV
+	} = N
+
+	STYLE
+    {
+        DISSEMINATION  
+        OFF   
+    } = OFF
+
+	AREA
+	{
+        GLOBE               ;  GLOBE;  G
+        EUROPE              ;  EUROPE; E
+        NORTHERN HEMISPHERE OCTANT 1    ;   N1
+        NORTHERN HEMISPHERE OCTANT 2    ;   N2
+        NORTHERN HEMISPHERE OCTANT 3    ;   N3
+        NORTHERN HEMISPHERE OCTANT 4    ;   N4
+        SOUTHERN HEMISPHERE OCTANT 1    ;   S1
+        SOUTHERN HEMISPHERE OCTANT 2    ;   S2
+        SOUTHERN HEMISPHERE OCTANT 3    ;   S3
+        SOUTHERN HEMISPHERE OCTANT 4    ;   S4
+        *   
+        /   
+	} = G
+
+	FRAME 
+	{
+		*
+		OFF; OFF
+	} = OFF
+
+	BITMAP 
+	{
+		OFF; OFF
+		@
+		"
+	} = OFF
+
+	ROTATION
+	{
+		*
+		/
+		OFF;  OFF
+	} = OFF
+
+	GRID
+	{
+        ARCHIVED VALUE  ;   AV
+        *   
+        /   
+        OFF     ; OFF;  OFF
+	} = OFF
+
+	GAUSSIAN
+	{
+		REDUCED
+		REGULAR
+		OFF     ; OFF;  OFF
+	} = OFF
+
+	SPECIFICATION 
+	{
+		*
+		OFF
+	} = OFF
+
+    DUPLICATES  
+    {
+        KEEP
+        REMOVE
+		OFF
+    } = OFF
+
+	EXPECT
+	{
+		ANY
+		*
+		OFF ; OFF
+	} = OFF
+
+    LOGSTATS
+    {
+		@
+        "   
+		OFF
+    }
+
+	BRANCH { &_DUMMY&BRANCH } = OFF
+
+	DATABASE 
+	{
+		@
+		/
+		OFF
+	} 
+
+} ! END OF STAGE
+
+!------------------------------------------------------------------------
+
+REMOVE  ;   REMOVE FDF ENTRIES AND CFS FILES    ;   MARS
+{
+    
+    CLASS  { 
+
+		RESEARCH    ;   RD
+		OD
+
+		AUSTRIA		;	AT 
+		BELGIUM		;	BE 
+		CROATIA		;	HR 
+		DENMARK		;	DK 
+		FINLAND		;	FI 
+		FRANCE		;	FR 
+		GERMANY		;	DE 
+		GREECE		;	GR 
+		HUNGARY		;	HU 
+		ICELAND		;	IS 
+		IRELAND		;	IE 
+		ITALY		;	IT 
+		NETHERLANDS	;	NL 
+		NORWAY		;	NO 
+		PORTUGAL	;	PT 
+		SLOVENIA	;	SI 
+		SPAIN		;	ES 
+		SWEDEN		;	SE 
+		SWITZERLAND	;	CH 
+		TURKEY		;	TR 
+		UNITED KINGDOM;	UK 
+
+	} = RD
+
+    
+    PASSWORD
+    {
+        "   
+		@
+    } 
+    
+    EXPVER
+    {
+		@
+        "   
+    } = ""
+    
+    DOMAIN
+    {
+		&_DUMMY&DOMAIN
+    }
+    
+	DATABASE
+	{
+		@
+		*
+		/
+		OFF
+	} 
+
+    TYPE   { &_DUMMY&TYPE   }
+
+	DATE { 
+		*
+		TO
+		/
+	}
+
+    REFDATE 
+	{
+		&_DUMMY&DATE
+    } 
+
+	HDATE 
+	{ 
+		&_DUMMY&DATE 
+		ALL
+	} 
+
+	TIME {
+		*
+		TO
+		/
+	}
+
+    STREAM
+	{ 
+		&_DUMMY&STREAM 
+	}
+    
+	ORIGIN 
+	{
+		&_DUMMY&ORIGIN
+		/
+	}
+
+
+	SYSTEM 
+	{ 	
+		&_DUMMY&SYSTEM 
+		/
+		ALL 
+	} 
+
+	METHOD 
+	{ 	
+		&_DUMMY&METHOD 
+		/
+		ALL 
+	} 
+
+	PRODUCT { &_DUMMY&PRODUCT 
+			  OFF }
+	SECTION { &_DUMMY&SECTION 
+			  OFF }
+
+    LEVTYPE
+	{ 
+		&_DUMMY&LEVTYPE 
+	}
+
+	VOLUME { * }
+
+	CREATED { * }
+
+	LASTACCESS { * }
+
+	EXPR { 
+		"
+		* 
+	}
+
+} ! END OF REMOVE
+
+!------------------------------------------------------------------------
+    
+!------------------------------------------------------------------------
+
+EXPORT  ;   Write cfs files to tape    ;   MARS
+{
+    
+    VOLSER
+    {
+        "   
+    } = ""
+    
+    SLOTNO
+    {
+        "   
+    } = ""
+    
+    CFSPATH
+    {
+        "   
+    } = ""
+    
+    DENSITY
+    {
+        *
+    } = 6250
+    
+    RECLEN
+    {
+        *   
+    } = 120
+    
+    FILESEQ
+    {
+        *   
+    } = 1
+    
+    SOFTWARE
+    {
+        "   
+    } = ""
+    
+    FILTER
+    {
+        "   
+    } = "*"
+    
+    CHECK
+    {
+        YES ;   Y
+        NO  ;   N
+    } = NO
+
+}
+
+!------------------------------------------------------------------------
+
+
+RETRIEVE_ECREGRID    ;   Retrieval of data   ;   MARS
+{
+    
+	DATASET [ java_hidden  = TRUE , 
+				visible      = false, 
+				check        = false,
+				priority     = 0]
+	{
+		@
+	}
+
+    CLASS 	[ 	java_control = CHOICE, 
+				java_section = ID, 
+				marsdoc      = id,
+				mars_interface         = menu,
+				java_hidden  = FALSE ]
+	{ 
+		&_DUMMY&CLASS  
+	} = OD
+    
+
+    TYPE  	[	help = help_multiple_selection, exclusive = True,
+				java_control = CHOICE, 
+				java_section = ID, 
+				marsdoc      = field/image/obs/all,
+				mars_interface         = menu,
+				java_hidden  = FALSE ] 
+	{ 
+		&_DUMMY&TYPE   
+		*
+	} = AN
+
+
+    STREAM 	[ 	help = help_multiple_selection, exclusive = True,
+				java_control = CHOICE, 
+				java_section = ID, 
+				marsdoc      = id,
+				mars_interface         = menu,
+				java_hidden  = FALSE ]
+	{ 
+		&_DUMMY&STREAM 
+		*
+	} = DA
+    
+
+    EXPVER 	[ 	priority     = 1,
+				java_control = CHOICE_TEXT_1,
+				java_section = ID,
+				marsdoc      = id,
+				mars_interface         = text,
+				java_hidden  = FALSE ]
+	{
+		@
+		1
+        "   
+        *   
+        /
+    } = 1
+    
+
+    MODEL 	[ 	java_control = CHOICE, 
+				java_section = ID, 
+				marsdoc      = id,
+				mars_interface         = menu,
+				hidden       = TRUE,
+				java_hidden  = FALSE ]
+	{
+		&_DUMMY&MODEL
+	} = OFF
+
+    REPRES [ java_control = CHOICE, 
+			 java_section = ID, 
+			 marsdoc      = id,
+			 java_hidden = FALSE ] 
+	{ 
+		&_DUMMY&REPRES 
+	} = SH
+    
+	OBSGROUP [ 	java_hidden  = false , 
+				visible      = true, 
+				check        = false,
+				priority     = 0]
+	{ 
+		&_DUMMY&OBSGROUP 
+		OFF    ; OFF
+	} = OFF
+
+    REPORTYPE 
+	{ 
+		&_DUMMY&REPORTYPE 
+	} = OFF
+
+    
+	RDBPREFIX [	java_hidden  = TRUE , 
+				visible      = false, 
+				check        = false,
+				priority     = 0]
+	{ 
+		@
+		"
+		OFF    ; OFF
+	} = OFF
+    
+    OBSTYPE [ help = help_multiple_selection, # For Metview
+			java_control = LIST_2, 
+			marsdoc      = obs/image/all,
+			mars_interface         = list,
+				check        = false,
+			java_section = METEO, java_hidden = FALSE, priority = 1 ]
+    {
+        ALL                     ;   ALL
+        NON SATELLITE DATA ALL  ;   NSD 
+        SATELLITE DATA ALL      ;   SD
+        &_DUMMY & OBSTYPE
+    } = S
+
+    LEVTYPE [ java_control = CHOICE, 
+			  java_section = ID, 
+			  marsdoc      = field/all,
+			  mars_interface         = menu,
+			  java_hidden = FALSE ] 
+	{ 
+		&_DUMMY&LEVTYPE 
+	} = PL 
+    
+    LEVELIST [ java_control = CHOICE_TEXT_2, 
+			   java_section = ID, 
+			   marsdoc      = field/level,
+			   mars_interface         = text,
+			   java_hidden = FALSE ]
+    {
+		TO ;    TO
+		BY ;    BY 
+        ALL ;   ALL
+        OFF ;   OFF
+        *   
+        /   
+    } = 1000/850/700/500/400/300
+    
+    PARAM [ help = help_multiple_selection,  # For Metview
+			java_control = LIST_2, 
+			marsdoc      = field/all,
+			mars_interface         = list,
+			java_section = METEO, java_hidden = FALSE ]
+    {
+        ALL             
+        &_DUMMY&PARAM
+    } = Z
+    
+	YEAR [  
+			check        = false,
+			visible = false
+			]
+	{
+		*
+		/
+		TO
+		BY  ;   BY           !        1
+		ALL
+	}
+
+	DECADE [
+			check        = false,
+			visible = false
+			]
+	{
+		*
+		/
+		TO
+		BY  ;   BY           !        1
+		ALL
+	}
+
+	MONTH [  
+			check        = false,
+			visible = false
+			]
+	{
+		*
+		/
+		TO
+		BY  ;   BY           !        1
+		ALL
+	}
+
+    DATE [ java_control = CHOICE_TEXT_2, 
+	       java_section = DATE, 
+		   marsdoc      = date/all,
+		   mars_interface         = text,
+		   java_hidden = FALSE ]
+    {
+		&_DUMMY&DATE
+    } = YESTERDAY
+    
+    VERIFY [ java_control = CHOICE_TEXT_2, 
+	       java_section = DATE, 
+		   marsdoc      = date/all,
+		   mars_interface         = text,
+		   hidden      = TRUE,
+			check        = false,
+		   java_hidden = FALSE ]
+	{
+		&_DUMMY&DATE
+		OFF          ; OFF
+    } = OFF
+    
+    REFDATE [ java_control = CHOICE_TEXT_2,
+				java_section = DATE,
+				marsdoc      = date/all,
+				mars_interface         = text,
+				java_hidden = FALSE ]
+	{
+		&_DUMMY&DATE
+		OFF          ; OFF
+    } = OFF
+
+    HDATE [ java_control = CHOICE_TEXT_2,
+				java_section = DATE,
+				marsdoc      = date/all,
+				mars_interface         = text,
+				java_hidden = FALSE ]
+	{
+		&_DUMMY&DATE
+		ALL
+		OFF          ; OFF
+    } = OFF
+
+    FCMONTH [ java_control = CHOICE_TEXT_2,
+			java_section = DATE,
+			marsdoc      = date/all,
+			mars_interface         = text,
+			java_hidden = FALSE ]
+	{
+		*
+		/
+		TO
+		BY  ! 1
+		OFF
+    } = OFF
+    
+    FCPERIOD [ java_control = CHOICE_TEXT_2,
+			java_section = DATE,
+			marsdoc      = date/all,
+			mars_interface         = text,
+			java_hidden = FALSE ]
+    {
+        TO  ;   TO
+        BY  ;   BY    
+		/
+        *   
+		OFF
+    } = OFF
+    
+    TIME [ java_control = CHOICE_TEXT_2, 
+		   java_section = DATE, 
+		   marsdoc      = date/all,
+		   mars_interface         = text,
+		   java_hidden = FALSE ]
+    {
+        *   
+        /   
+        TO  
+        BY  !        6
+		ALL 
+		12
+    } = 12
+
+	LEADTIME [ java_control = CHOICE_TEXT_2,
+		   java_section = DATE, 
+		   marsdoc      = date/all,
+		   mars_interface         = text,
+		   java_hidden = FALSE ]
+	{
+		*
+		/
+		TO
+		OFF
+		ALL
+	} = OFF
+
+	OPTTIME [ java_control = CHOICE_TEXT_2,
+		   java_section = DATE, 
+		   marsdoc      = date/all,
+		   mars_interface         = text,
+		   java_hidden = FALSE ]
+	{
+		*
+		/
+		TO
+		OFF
+		ALL
+	} = OFF
+
+	RANGE [ java_control = CHOICE_TEXT_2, 
+			java_section = DATE, 
+			marsdoc      = date/obs,
+			mars_interface         = text,
+			java_hidden = FALSE ]
+	{
+		*
+		OFF; OFF
+	} = OFF
+    
+    STEP [ java_control = CHOICE_TEXT_2, 
+		   java_section = DATE, 
+		   marsdoc      = date/field,
+		   mars_interface         = text,
+		   java_hidden = FALSE ]
+    {
+        ALL 
+        *   
+        /   
+        TO  
+        BY  !           12
+!		* [DAY]
+!		* [MONTH]
+!		* [WEEK]
+!		* [VERIFY]
+    } = 00
+    
+    ANOFFSET [ java_control = CHOICE_TEXT_2, 
+		   java_section = DATE, 
+		   marsdoc      = date/field,
+		   mars_interface         = text,
+		   java_hidden = FALSE ]
+    {
+        ALL 
+        *   
+        /   
+        TO  
+        BY  !           12
+		OFF
+    }
+    
+    REFERENCE [ java_control = CHOICE_TEXT_2, 
+				java_section = DATE, 
+				marsdoc      = date/field,
+				mars_interface         = text,
+				java_hidden  = FALSE ]
+    {
+        ALL 
+        *   
+        /   
+        TO  
+        BY  !           12
+		OFF
+    } = OFF 
+
+    ENSEMBLE [ 	java_control = CHOICE_TEXT_2, 
+				visible      = false, 
+			check        = false,
+				java_section = OTHER, 
+				mars_interface         = text,
+				java_hidden  = FALSE ]
+    {
+        ALL
+		TO  
+        *   
+        /   
+        OFF ;  OFF
+    } = OFF
+    
+    CLUSTER [ 	java_control = CHOICE_TEXT_2, 
+				visible = false, 
+			check        = false,
+				java_section = OTHER, 
+				java_hidden = FALSE ]
+    {
+        ALL
+		TO  
+        *   
+        /   
+        OFF ;  OFF
+    } = OFF
+    
+    
+    PROBABILITY [ 	java_control = CHOICE_TEXT_2, 
+					visible = false, 
+			check        = false,
+					java_section = OTHER, 
+					java_hidden = FALSE ]
+    {
+        ALL 
+		TO  
+        OFF ; OFF
+        *   
+        /
+    } = OFF
+
+    NUMBER [ java_control = CHOICE_TEXT_2, 
+			 java_section = OTHER, 
+			 marsdoc      = field/ensemble,
+			 mars_interface         = text,
+			 java_hidden = FALSE ]
+    {
+        ALL 
+        OFF ;   OFF
+		TO  
+		BY
+        *   
+        /
+    } = OFF
+    
+    QUANTILE [ java_control = CHOICE_TEXT_2,
+				 java_section = OTHER,
+				 marsdoc      = field/ensemble,
+				 mars_interface         = text,
+			     java_hidden = FALSE ]
+
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+
+    DOMAIN  [ 	help = help_multiple_selection, # For Metview
+				java_control = CHOICE, 
+				java_section = OTHER, 
+				marsdoc      = id,
+				mars_interface         = menu,
+				java_hidden = FALSE ] 
+    {
+	&_DUMMY&DOMAIN
+    } = GLOBE
+
+    FREQUENCY [ java_control = CHOICE_TEXT_2, 
+				java_section = OTHER, 
+				marsdoc      = field/wave,
+				mars_interface         = text,
+				java_hidden = FALSE ]
+    {
+        ALL 
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    DIRECTION [ priority = 0, 
+				marsdoc  = field/wave,
+				java_control = CHOICE_TEXT_2, 
+				java_section = OTHER, 
+				mars_interface         = text,
+				java_hidden = FALSE ]
+    {
+        ALL 
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    DIAGNOSTIC  [ 	priority = 1, 
+				  	marsdoc  = field/sensitivity,
+					mars_interface         = text,
+				  	java_control = CHOICE_TEXT_2, 
+				  	java_section = OTHER, 
+				  	java_hidden = FALSE ]
+    {
+        ALL 
+        OFF ;   OFF
+        *   
+        /
+    } = OFF
+
+    ITERATION  [ 	java_control = CHOICE_TEXT_2, 
+				 	java_section = OTHER, 
+				 	marsdoc      = field/sensitivity,
+					mars_interface         = text,
+				 	java_hidden = FALSE ]
+    {
+        ALL 
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    CHANNEL [ 	priority = 0, 
+			  	java_control = CHOICE_TEXT_2, 
+			  	java_section = OTHER, 
+			  	marsdoc     = field/brigthness,
+				mars_interface         = text,
+			  	java_hidden = FALSE ]
+	{ 
+		ALL
+		&_DUMMY&CHANNEL 
+	} = OFF
+
+    IDENT
+			# For Metview
+				   [ help = help_script,                  
+				   help_script_command = 
+					'/usr/local/lib/metaps/bin/mcs_sat_availability.sh',
+			check        = false,
+					java_control = CHOICE_TEXT_2, 
+					java_section = DATA, 
+					marsdoc      = image/obs,
+					mars_interface         = list,
+					java_hidden = FALSE 
+				 ]
+											   
+    {
+		ALL 
+		&_DUMMY&IDENT
+		"
+		@
+    }=OFF
+    
+    ORIGIN 	[ 	java_control = CHOICE, 
+				java_section = ID, 
+				marsdoc      = field/supplementary,
+				mars_interface         = menu,
+				java_hidden  = FALSE ]
+	{
+		&_DUMMY&ORIGIN
+	} = OFF
+
+	SYSTEM { &_DUMMY&SYSTEM 
+			  OFF } = OFF
+	METHOD { &_DUMMY&METHOD 
+			  OFF } = OFF
+	PRODUCT { &_DUMMY&PRODUCT 
+			  OFF } = OFF
+	SECTION { &_DUMMY&SECTION 
+			  OFF } = OFF
+	LATITUDE { @ 
+			   OFF } = OFF
+	LONGITUDE { @ 
+				OFF } = OFF
+
+    SOURCE  [   java_control = CHOICE, 
+				java_section = TARGET, 
+				marsdoc      = target,
+				mars_interface         = text,
+				hidden      = TRUE,
+			check        = false,
+				java_hidden = TRUE ]
+    {
+		@
+        "   
+		OFF
+    } = ""
+
+    TARGET [ java_control = TEXT, 
+			 java_section = TARGET, 
+			 marsdoc      = target,
+			 mars_interface         = text,
+				hidden      = TRUE,
+			check        = false,
+			 java_hidden = FALSE ]
+    {
+		@
+        "   
+		OFF
+    } = ""
+
+    LOGSTATS [ java_control = TEXT,
+             java_section = TARGET,
+             marsdoc      = target,
+             mars_interface         = text,
+                hidden      = TRUE,
+            check        = false,
+             java_hidden = FALSE ]
+    {
+		@
+        "   
+		OFF
+    }
+
+    TRANSFER [ hidden      = TRUE, check        = false ]
+    {
+		HANDLE
+		DATA
+		OFF
+    }
+
+    FIELDSET  [ java_control = CHOICE, 
+				java_section = TARGET, 
+				marsdoc      = target,
+			 	mars_interface         = text,
+				priority     = 1,
+				hidden      = TRUE,
+			check        = false,
+				java_hidden = TRUE ]
+    {
+        @
+		OFF
+    }
+    
+    CFSPATH  [ java_control = TEXT, 
+			   java_section = TARGET, 
+			   hidden      = TRUE,
+			check        = false,
+			   java_hidden = TRUE ]
+    {
+        "   
+    } = ""
+    
+    FORMAT  [ java_control = CHOICE, 
+	          java_section = DATA, 
+				hidden      = TRUE,
+			check        = false,
+			  java_hidden = FALSE ]
+    {
+        PACKED      ;   P
+        UNPACKED    ;   U
+        GRIB EDITION 1 ;   GRIB1
+        GRIB EDITION 2 ;   GRIB2
+		NETCDF
+    } = P
+    
+    DISP [ java_control = CHOICE,
+			java_section = DATA,
+			hidden      = TRUE,
+			check        = false,
+			java_hidden = FALSE ]
+
+    {
+        NEW ;   N
+        OLD ;   OLD
+		REMOVE
+		OFF
+    } = OFF
+    
+    RESOL [ help = help_multiple_selection,  # For Metview
+			check        = false,
+			java_control = CHOICE_TEXT_2, 
+			java_section = DATA, 
+			marsdoc      = pproc/field,
+			mars_interface         = menu,
+			java_hidden = FALSE ]
+    {
+        ARCHIVED VALUE       ;   AV
+		AUTOMATIC RESOLUTION ;   AUTO
+		REDUCED GAUSSIAN 128 ;   N128
+		REDUCED GAUSSIAN 160 ;   N160
+		REDUCED GAUSSIAN 200 ;   N200
+		OFF                  ;   OFF
+		319
+		213
+		106
+		63
+        *   
+    } = AUTO
+    
+    ACCURACY [ 	java_control = CHOICE_TEXT_1, 
+			   	java_section = DATA, 
+			   	marsdoc      = pproc/field,
+				mars_interface         = text,
+			check        = false,
+			   	java_hidden = FALSE ]
+    {
+        NORMAL  ;   N
+        REDUCED ;   R
+        LOW     ;   L
+		OFF; OFF
+        *   
+		ARCHIVED VALUE ; AV
+    } = N
+    
+    STYLE [ 	java_control = CHOICE_TEXT_1, 
+			   	java_section = DATA, 
+			   	marsdoc      = pproc/field,
+				mars_interface         = text,
+			    check        = false,
+			   	java_hidden = FALSE ]
+    {
+        DISSEMINATION  
+        OFF   
+    } = OFF
+    
+	INTERPOLATION [ java_control = CHOICE_TEXT_1, 
+			   	java_section = DATA, 
+			   	marsdoc      = pproc/field,
+				mars_interface         = text,
+			    check        = false,
+			   	java_hidden = FALSE ]
+	{
+		NEAREST NEIGHBOUR
+        NEAREST LSM  
+		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
+		OFF
+	} = OFF
+
+    AREA  [ help = help_multiple_selection,			# For Metview
+    		java_control = CHOICE_TEXT_2, 
+			java_section = DATA, 
+			marsdoc      = pproc/obs,
+			mars_interface         = text,
+			check        = false,
+			java_hidden = FALSE ]
+    {
+        GLOBE                           ;   G
+        EUROPE                          ;   E 
+        *   
+        /   
+		OFF
+    } = G
+
+	LOCATION [ java_hidden  = TRUE , 
+				visible      = false, 
+				check        = false,
+				priority     = 0]
+	{
+		*
+        /   
+        OFF     ;  OFF
+	} = OFF
+
+    BLOCK  [ 	java_control = CHOICE_TEXT_2, 
+			 	java_section = DATA, 
+			 	marsdoc      = obs,
+				mars_interface         = text,
+			check        = false,
+			 	java_hidden = FALSE ]
+    {
+        OFF     ;  OFF
+        /   
+        *       
+    }=OFF
+
+    INSTRUMENT  [ 	java_control = CHOICE_TEXT_2, 
+			 	java_section = DATA, 
+			 	marsdoc      = obs,
+				mars_interface         = text,
+			check        = false,
+			 	java_hidden = FALSE ]
+    {
+		&_DUMMY&INSTRUMENT
+    }=OFF
+
+    FILTER  [ 	java_control = CHOICE_TEXT_2, 
+			 	java_section = DATA, 
+			 	marsdoc      = obs,
+				mars_interface         = text,
+				priority     = 0,
+			check        = false,
+			 	java_hidden = FALSE ]
+    {
+		@
+		OFF
+    }=OFF
+
+	ROTATION [ java_control = CHOICE_TEXT_2,
+			   java_section = DATA,
+			   marsdoc      = pproc/field,
+				mars_interface         = text,
+			check        = false,
+			   java_hidden = FALSE ]
+	{
+		*
+		/
+		OFF;  OFF
+	} = OFF
+
+	FRAME [ marsdoc      = pproc/field,
+			check        = false,
+			mars_interface         = text ]
+	{
+		*
+		OFF;  OFF
+	} = OFF
+
+	BITMAP [ marsdoc      = pproc/field,
+			check        = false,
+			mars_interface         = text ]
+	{
+		OFF ; OFF
+		@
+		"
+	}  = OFF
+
+    GRID  [ java_control = CHOICE_TEXT_2, 
+			java_section = DATA, 
+			marsdoc      = pproc/field,
+			mars_interface         = text,
+			check        = false,
+			java_hidden = FALSE ]
+    {
+        ARCHIVED VALUE  ;   AV
+		320
+		160
+		80
+		48
+        *   
+        /   
+        OFF     ;  OFF
+    } = OFF
+    
+	GAUSSIAN [  help = help_multiple_selection,  # For Metview
+				java_control = CHOICE_TEXT_2, 
+				java_section = DATA, 
+				marsdoc      = pproc/field,
+				mars_interface         = text,
+			check        = false,
+				java_hidden = FALSE ]
+	{
+		REDUCED
+		REGULAR
+		OFF     ;  OFF
+	} = OFF
+
+	SPECIFICATION [ marsdoc      = pproc/field,
+			check        = false,
+					mars_interface         = text ]
+	{
+		*
+		OFF
+	} = OFF
+
+	PACKING [ help = help_multiple_selection,  # For Metview
+			  java_control = CHOICE_TEXT_2,
+			  java_section = DATA,
+			  marsdoc      = pproc/field,
+			  hidden       = true,
+			check        = false,
+			  mars_interface         = text,
+			  java_hidden = FALSE ]
+	{
+		SI   ; SIMPLE
+		CO   ; COMPLEX
+		SO   ; SECOND ORDER
+		AV   ; ARCHIVED VALUE
+		OFF
+	} = OFF
+
+
+    PADDING  [ 	help = help_multiple_selection,  # For Metview
+			check        = false,
+				java_control = CHOICE, 
+				java_section = OTHER, 
+				marsdoc      = control,
+				mars_interface    = text,
+				java_hidden = FALSE ]
+    {
+		&_DUMMY&PADDING
+		OFF
+    } = OFF
+    
+
+    DUPLICATES  [ 	java_control = CHOICE, 
+				  	java_section = OTHER, 
+				  	marsdoc      = obs,
+					mars_interface    = on_off,
+			check        = false,
+				  	java_hidden = FALSE ]
+    {
+        KEEP
+        REMOVE
+    } = KEEP
+    
+    LAUNCH  [ java_control = TEXT, 
+			  java_section = OTHER, 
+			  hidden      = TRUE,
+			check        = false,
+			  java_hidden = FALSE ]
+    {
+        "   
+    } = ""
+    
+	JOB
+	{
+		"
+		OFF
+	} = OFF
+
+    USE  [ 	java_control=CHOICE, 
+	       	java_section=OTHER, 
+		   	marsdoc     = control,
+			mars_interface         = menu,
+			hidden     = TRUE,
+			check        = false,
+		   	java_hidden=FALSE ]
+    {
+        FREQUENT   
+        INFREQUENT
+        NORMAL
+		BOUNDARY CONDITIONS  ;  BC
+		COMPARE
+		MONTHLY RUN
+    } = NORMAL
+    
+    PASSWORD  [ java_control = CHOICE_TEXT_1, 
+				java_section = OTHER, 
+				hidden      = TRUE,
+			check        = false,
+				java_hidden = FALSE ]
+    {
+        "   
+		@
+        OFF ;   OFF
+    } = OFF
+    
+    COSTONLY  [ java_control = CHOICE, 
+				java_section = OTHER, 
+				hidden      = TRUE,
+			check        = false,
+				java_hidden = FALSE ]
+    {
+        YES ;   Y
+        NO  ;   N
+    } = N
+    
+    PROCESS  [ java_control = CHOICE, 
+			   java_section = OTHER, 
+			   hidden       = TRUE,
+			check        = false,
+			   java_hidden = FALSE ]
+    {
+		LOCAL 
+		SERVER
+        OFF ;   OFF
+    } = OFF
+
+	BRANCH [ java_control = CHOICE, 
+			 java_section = OTHER, 
+			 hidden       = TRUE,
+			 check        = false,
+			 java_hidden = FALSE ]
+	{ &_DUMMY&BRANCH } = OFF
+
+	DATABASE  [ java_control = CHOICE, 
+				java_section = OTHER, 
+				marsdoc      = control,
+			check        = false,
+				priority = 1,
+				java_hidden = TRUE ]
+	{
+		@
+		/
+		OFF
+	}
+
+	EXPECT [    priority = 0,
+				java_control = CHOICE_TEXT_2, 
+				java_section = OTHER, 
+				marsdoc      = control,
+			check        = false,
+				java_hidden = FALSE]
+	{
+		ANY
+		*
+		OFF ; OFF
+	} = OFF
+
+	_VERSION [ java_control = CHOICE, 
+			   java_section = OTHER, 
+			   hidden       = TRUE,
+			check        = false,
+			   java_hidden = FALSE ]
+	{
+		*
+	} = 2.0
+    
+} ! END OF RETRIEVE
+
+COMPUTE ; X ; METVIEW
+{
+    FORMULA {
+		@
+    } = ""
+
+    FIELDSET {
+        @
+    } = OUT
+
+    ACCURACY 
+    {
+        NORMAL  ;   N
+        REDUCED ;   R
+        LOW ;   L
+		OFF; OFF
+        *   
+		ARCHIVED VALUE ; AV
+    } = N
+
+	TARGET 
+	{
+		@
+		"
+		OFF
+	} = ""
+}
+
+WRITE ; X; METVIEW
+{
+    FIELDSET {
+    @
+    } = OUT
+
+    LOGSTATS
+    {
+		@
+        "   
+		OFF
+    }
+
+    TARGET  {
+		@
+        "
+    } = ""
+}
+
+READ_ECREGRID ; X; METVIEW
+{
+    FIELDSET [ visible = false ] {
+    @
+    } = OUT
+
+	READ_DATA_FROM [ visible = false ]
+	{
+		FILE
+		METVIEW_ICON
+	} = FILE
+
+
+    SOURCE  [ visible = always, help = help_file_box ]
+	{
+		@
+		OFF
+    } = OFF
+
+    LOGSTATS
+    {
+		@
+        "   
+		OFF
+    }
+
+	DATA
+		[
+			interface = icon,
+			class           = GRIB,
+			exclusive       = true
+		]
+	{
+		@
+	}
+
+
+	CFSPATH {
+		@
+		OFF
+	} = OFF
+
+    ORDER [ label = 'Field Ordering' ] {
+	AS IS  ; 0
+        SORTED ; 1
+    } = AS IS
+
+	CLASS  { &_DUMMY&CLASS 
+			 ANY ; ANY
+			 } = ANY
+
+	STREAM [ help = help_multiple_selection, exclusive = True ]
+		{ &_DUMMY&STREAM 
+			 ANY ; ANY
+			 *
+			 } = ANY
+
+    TYPE   [ help = help_multiple_selection, exclusive = True ]
+		{ 
+		ANY ; ANY
+		&_DUMMY&TYPE   
+		*
+	} = ANY
+    
+    MODEL   { 
+		ANY ; ANY
+		&_DUMMY&MODEL   
+	} = ANY
+    
+    LEVTYPE
+    {
+		ANY ; ANY
+		&_DUMMY&LEVTYPE
+    } = ANY
+    
+    LEVELIST
+    {
+        ANY ; ANY
+		TO  ; TO
+		BY  ; BY 
+        OFF ; OFF;   OFF
+        *   
+        /   
+    } = ANY
+    
+    PARAM [ help = help_multiple_selection ] # For Metview
+    {
+        ANY             ;   ANY
+        &_DUMMY&PARAM
+    } = ANY
+    
+    DATE
+    {
+		ANY             ;   ANY
+		&_DUMMY&DATE   
+    } = ANY
+    
+    VERIFY 
+	{
+		ANY             ;   ANY
+		&_DUMMY&DATE
+		OFF          ; OFF
+    } = OFF
+    
+    REFDATE 
+	{
+		ANY             ;   ANY
+		&_DUMMY&DATE
+    } = OFF
+
+	HDATE 
+	{ 
+		ANY             ;   ANY
+		&_DUMMY&DATE 
+		ALL
+	} = OFF
+
+    FCMONTH 
+	{
+		*
+		/
+		TO
+		BY  ! 1
+		OFF
+    } = OFF
+    
+    FCPERIOD
+    {
+        TO  ;   TO
+        BY  ;   BY    
+		/
+        *   
+		OFF
+    } = OFF
+    
+    TIME
+    {
+		ANY
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY           !        6
+    } = ANY
+    
+	LEADTIME
+	{
+		*
+		/
+		TO
+		OFF
+		ANY
+	} = ANY
+
+	OPTTIME
+	{
+		*
+		/
+		TO
+		OFF
+		ANY
+	} = ANY
+
+    REFERENCE 
+    {
+        ANY ;   ANY
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        !           12
+    } = ANY 
+
+    STEP
+    {
+        ANY ;   ANY
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        !           12
+    } = ANY
+    
+    ANOFFSET
+    {
+        ANY ;   ANY
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        !           12
+		OFF
+    } = ANY
+    
+	RANGE 
+	{
+		*
+		ANY
+	} = ANY
+    
+    ACCURACY 
+    {
+		ANY     ;   ANY
+        NORMAL  ;   N
+        REDUCED ;   R
+        LOW ;   L
+		OFF; OFF
+        *   
+		ARCHIVED VALUE ; AV
+    } = N
+    
+	STYLE
+    {
+        DISSEMINATION  
+        OFF   
+		ANY
+    } = ANY
+
+	INTERPOLATION
+    {
+        NEAREST NEIGHBOUR  
+        NEAREST LSM  
+		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
+        OFF   
+		ANY
+    } = ANY
+
+    AREA
+    {
+		ANY ; ANY
+        GLOBE               ;  GLOBE;  G
+        EUROPE              ;  EUROPE; E
+        *   
+        /   
+    } = ANY
+
+	FRAME 
+	{
+		*
+		OFF; OFF
+	} = OFF
+
+	BITMAP 
+	{
+		OFF ; OFF
+		@
+		"
+	} = OFF
+
+	RESOL 
+	{
+        ARCHIVED VALUE       ;   AV
+		AUTOMATIC RESOLUTION ;   AUTO
+		319
+		213
+		106
+        *   
+		ANY ; ANY
+	} = ANY
+
+	ROTATION
+	{
+		ANY     ; ANY
+		*
+		/
+	} = ANY
+
+    GRID
+    {
+        ANY     ; ANY
+        *   
+        /   
+    } = ANY
+
+	GAUSSIAN 
+	{
+		REDUCED
+		REGULAR
+		OFF     ; OFF;  OFF
+	} = OFF
+
+	SPECIFICATION 
+	{
+		*
+		OFF
+	} = OFF
+
+	TARGET [ visible = false ]
+	{
+		@
+		"
+		OFF
+	} = OFF
+
+    ENSEMBLE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    } = OFF
+    
+    CLUSTER
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    } = OFF
+    
+    
+    PROBABILITY
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    } = OFF
+    
+    NUMBER
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+		ANY
+    } = ANY
+    
+    QUANTILE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+		ANY
+    } = ANY
+
+    FREQUENCY
+    {
+        ALL 
+        OFF ;   OFF
+		TO
+        *   
+        /
+		ANY
+    } = ANY
+    
+    DIRECTION 
+    {
+        ALL 
+        OFF ;   OFF
+		TO
+        *   
+        /
+		ANY
+    } = ANY
+    
+    DIAGNOSTIC
+    {
+        ALL 
+        OFF ;   OFF
+        *   
+        /
+		ANY
+    } = ANY
+
+    ITERATION
+    {
+        ALL 
+        OFF ;   OFF
+		TO
+        *   
+        /
+		ANY
+    } = ANY
+    
+    CHANNEL { &_DUMMY&CHANNEL 
+			 ANY ; ANY
+			 } = ANY
+
+    IDENT { &_DUMMY&IDENT 
+			 ANY ; ANY
+			 } = ANY
+
+    INSTRUMENT { &_DUMMY&INSTRUMENT 
+			 ANY ; ANY
+			 } = ANY
+
+    FILTER  
+    {
+		@
+		ANY ; ANY
+    }= ANY
+
+! For compatibility with RETRIEVE_ECREGRID  They are unset in Mars rules
+
+	REPRES { &_DUMMY&REPRES
+			 ANY ; ANY
+			 } = ANY 
+
+    ORIGIN 	{ &_DUMMY&ORIGIN
+			 ANY ; ANY
+			 } = ANY 
+
+    PADDING  
+    {
+		ANY  ; ANY
+		&_DUMMY&PADDING
+    } = ANY
+    
+    DOMAIN 
+    {
+	&_DUMMY&DOMAIN
+	ANY
+    } = ANY
+    
+	SYSTEM { &_DUMMY&SYSTEM 
+			  ANY } = ANY
+	METHOD { &_DUMMY&METHOD 
+			  ANY } = ANY
+	PRODUCT { &_DUMMY&PRODUCT 
+			  ANY } = ANY
+	SECTION { &_DUMMY&SECTION 
+			  ANY } = ANY
+	LATITUDE { 
+		@ 
+		ANY
+	} = ANY
+
+	LONGITUDE { 
+		@ 
+		ANY
+	} = ANY
+
+    EXPVER{
+		@
+		1
+		2
+		11
+		12
+        "   
+        *   
+		ANY ; ANY
+    } = ANY
+    
+}
+
+DATA ; X ; METVIEW
+{
+    FIELDSET [ visible = false ] {
+		@
+	}
+
+	PATH {
+		@
+	}
+
+	OFFSET {
+		*
+		/
+	}
+
+	LENGTH {
+		*
+		/
+	}
+
+	INDEX {
+		*
+		/
+	}
+
+}
+
+FLUSH ;   Flushes data   ;   MARS
+{
+
+    CLASS  { &_DUMMY&CLASS  }
+
+    TYPE   { &_DUMMY&TYPE   }
+
+    STREAM { &_DUMMY&STREAM }
+
+    MODEL  { &_DUMMY&MODEL }
+
+    ORIGIN { &_DUMMY&ORIGIN }
+
+	SYSTEM  { &_DUMMY&SYSTEM  }
+
+	METHOD  { &_DUMMY&METHOD  }
+
+	PRODUCT { &_DUMMY&PRODUCT }
+
+	SECTION { &_DUMMY&SECTION }
+
+	LATITUDE { @ }
+
+	LONGITUDE { @ }
+
+    EXPVER  [ priority = 1 ]
+    {
+		@
+        "       
+        *       
+    }
+    
+    LEVTYPE  { &_DUMMY&LEVTYPE }
+    
+    LEVELIST  
+    {
+		TO ; TO
+		BY ; BY 
+        OFF ;   OFF
+        *       
+        /       
+    }
+    
+    REPRES   { &_DUMMY&REPRES }
+    
+    DOMAIN 
+    {
+	&_DUMMY&DOMAIN
+    }
+    
+    OBSTYPE { ALL &_DUMMY&OBSTYPE }
+    
+	OBSGROUP { ALL
+	&_DUMMY&OBSGROUP } 
+    
+    PARAM { &_DUMMY&PARAM }
+    
+	CHANNEL { &_DUMMY&CHANNEL }
+
+	IDENT { &_DUMMY&IDENT }
+
+	INSTRUMENT { &_DUMMY&INSTRUMENT }
+
+	FILTER { @ }
+
+    DATE
+    {
+        JANUARY     ;   JAN
+        FEBRUARY    ;   FEB
+        MARCH       ;   MAR
+        APRIL       ;   APR
+        MAY     ;   MAY
+        JUNE        ;   JUN
+        JULY        ;   JUL
+        AUGUST      ;   AUG
+        SEPTEMBER   ;   SEP
+        OCTOBER     ;   OCT
+        NOVEMBER    ;   NOV
+        DECEMBER    ;   DEC
+        *   
+         CURRENT DATE ; 0
+         YESTERDAY    ; -1
+		 TO ; TO
+		 /
+    }
+    
+    REFDATE 
+	{
+		&_DUMMY&DATE
+    } 
+
+    FCMONTH 
+	{
+        *   
+		ALL
+	}
+
+	HDATE 
+	{ 
+		&_DUMMY&DATE 
+		ALL
+	} 
+
+    TIME
+    {
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY    !                               6
+    }
+    
+	LEADTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} 
+
+	OPTTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} 
+
+	RANGE 
+	{
+		*
+		OFF; OFF
+	} 
+
+    REFERENCE 
+    {
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        
+		OFF
+    }
+
+    STEP
+    {
+        *   
+    }
+    
+    ANOFFSET
+    {
+        *   
+		OFF
+    }
+    
+    ENSEMBLE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    }
+    
+    CLUSTER
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    }
+    
+    
+    PROBABILITY
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    }
+    
+    NUMBER
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } 
+    
+    QUANTILE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } 
+
+    DIAGNOSTIC
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+        *   
+        /
+    }
+
+    ITERATION
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    }
+    
+    FREQUENCY
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  
+        *   
+        /
+    } 
+    
+    DIRECTION
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  
+        *   
+        /
+    }
+    
+    SOURCE
+    {
+		@
+		/
+        "   
+    }
+    
+    DISP
+    {
+        NEW ;   N
+        OLD ;   OLD
+    } 
+    
+    AREA
+    {
+        GLOBE   ;   G
+        EUROPE  ;   E
+    }
+    
+	FRAME 
+	{
+		*
+		OFF; OFF
+	} = OFF
+
+	BITMAP 
+	{
+		OFF ; OFF
+		@
+		"
+	} = OFF
+
+    RESOL
+    {
+        /
+        *   
+    }
+
+    GRID
+    {
+        *
+        /
+        OFF     ; OFF;  OFF
+    }
+    
+    PASSWORD
+    {
+        "   
+    } 
+
+	EXPECT 
+	{
+		*
+		OFF ; OFF
+		ANY
+	} = OFF
+
+	DATABASE
+	{
+		@
+		/
+		OFF
+	} 
+
+! Only for FLUSH
+
+	WAIT
+	{
+		TRUE
+		FALSE
+	} = FALSE
+
+	DECACHE
+	{
+		TRUE
+		FALSE
+	} = FALSE
+
+} ! END OF FLUSH
+
+
+ATTACH ;   attaches data   ;   MARS
+{
+
+    CLASS  { &_DUMMY&CLASS  } = OD
+
+    TYPE   { &_DUMMY&TYPE   } = AN
+
+    STREAM { &_DUMMY&STREAM } = DA
+
+    MODEL  { &_DUMMY&MODEL }  = OFF
+
+    ORIGIN { &_DUMMY&ORIGIN } = OFF
+
+    EXPVER  
+    {
+		@
+        "       
+        *       
+    } = 1
+    
+    LEVTYPE  { &_DUMMY&LEVTYPE } = PL
+    
+    LEVELIST  
+    {
+		TO ; TO
+		BY ; BY 
+        OFF ;   OFF
+        *       
+        /       
+    } = 1000/850/700/500/400/300
+    
+    REPRES   { &_DUMMY&REPRES } = SH
+    
+    DOMAIN 
+    {
+	&_DUMMY&DOMAIN
+    } = G
+    
+    OBSTYPE { ALL
+	&_DUMMY&OBSTYPE } = S
+    
+    PARAM { &_DUMMY&PARAM } = Z
+    
+    DATE
+    {
+        JANUARY     ;   JAN
+        FEBRUARY    ;   FEB
+        MARCH       ;   MAR
+        APRIL       ;   APR
+        MAY     ;   MAY
+        JUNE        ;   JUN
+        JULY        ;   JUL
+        AUGUST      ;   AUG
+        SEPTEMBER   ;   SEP
+        OCTOBER     ;   OCT
+        NOVEMBER    ;   NOV
+        DECEMBER    ;   DEC
+        *   
+         CURRENT DATE ; 0
+         YESTERDAY    ; -1
+		 TO ; TO
+		 /
+    } = CURRENT DATE
+    
+    REFDATE 
+	{
+		&_DUMMY&DATE
+    } = OFF
+
+	HDATE 
+	{ 
+		&_DUMMY&DATE 
+		ALL
+	} = OFF
+
+    TIME
+    {
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY    !                               6
+    } = 12
+    
+	LEADTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+	OPTTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+    STEP
+    {
+        *   
+    } = 00
+    
+    ANOFFSET
+    {
+        *   
+		OFF
+    }
+    
+    ENSEMBLE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    } = OFF
+    
+    CLUSTER
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    } = OFF
+    
+    
+    PROBABILITY
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    } = OFF
+    
+    NUMBER
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+    
+    QUANTILE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+
+    DIAGNOSTIC
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+        *   
+        /
+    } = OFF
+
+    ITERATION
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    SOURCE
+    {
+		@
+        "   
+    } = ""
+    
+	NAME
+	{
+		"
+	} = ""
+
+    DISP
+    {
+        NEW ;   N
+        OLD ;   OLD
+    } = NEW
+    
+    AREA
+    {
+        GLOBE   ;   G
+        EUROPE  ;   E
+    } = G
+    
+	FRAME 
+	{
+		*
+		OFF; OFF
+	} = OFF
+
+	BITMAP 
+	{
+		OFF ; OFF
+		@
+		"
+	} = OFF
+
+    RESOL
+    {
+        /
+        *   
+    }
+    
+    LAUNCH
+    {
+        "   
+    } = ""
+    
+	JOB
+	{
+		"
+		OFF
+	} = OFF
+
+    USE
+    {
+        FREQUENT    ;   F
+        INFREQUENT  ;   I
+        NORMAL      ;   N
+		BOUNDARY CONDITIONS  ;  BC
+		COMPARE
+		MONTHLY RUN
+    } = N
+    
+    PASSWORD
+    {
+        "   
+    } = ""
+
+	DATABASE
+	{
+		@
+		/
+		OFF
+	}
+
+	WAIT {
+		YES
+		NO
+	} = NO
+
+} ! END OF ATTACH
+
+
+STORE ;   Stores files   ;   MARS
+{
+
+    CLASS  { &_DUMMY&CLASS  } = OD
+
+    TYPE   { &_DUMMY&TYPE   } = AN
+
+    STREAM { &_DUMMY&STREAM } = DA
+
+    MODEL  { &_DUMMY&MODEL  } = OFF
+
+    ORIGIN { &_DUMMY&ORIGIN } = OFF
+
+    EXPVER  [ priority = 1 ]
+    {
+		@
+        "       
+        *       
+    } = 1
+    
+    LEVTYPE { &_DUMMY&LEVTYPE } = PL 
+    
+    LEVELIST  
+    {
+		TO ; TO
+		BY ; BY 
+        OFF ;   OFF
+        *       
+        /       
+    } = 1000/850/700/500/400/300
+    
+    REPRES { &_DUMMY&REPRES } = SH
+    
+    DOMAIN 
+    {
+	&_DUMMY&DOMAIN
+    } = G
+    
+    OBSTYPE { ALL
+	&_DUMMY&OBSTYPE } = S
+
+	OBSGROUP { ALL
+	&_DUMMY&OBSGROUP } = CONVENTIONAL	
+    
+    PARAM { &_DUMMY&PARAM } = Z
+    
+    DATE 
+	{
+		&_DUMMY&DATE
+    } = CURRENT DATE
+    
+    REFDATE 
+	{
+		&_DUMMY&DATE
+    } = OFF
+
+	HDATE 
+	{ 
+		&_DUMMY&DATE 
+		ALL
+	} = OFF
+
+    TIME
+    {
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY    !                               6
+    } = 12
+    
+	LEADTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+	OPTTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+    STEP
+    {
+        *   
+    } = 00
+    
+    ANOFFSET
+    {
+        *   
+		OFF
+    }
+    
+    ENSEMBLE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    } = OFF
+    
+    CLUSTER
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    } = OFF
+    
+    
+    PROBABILITY
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+        *   
+        /
+    } = OFF
+    
+    NUMBER
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+    
+    QUANTILE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+
+    DIAGNOSTIC
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+        *   
+        /
+    } = OFF
+
+    ITERATION
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    SOURCE
+    {
+		@
+        "   
+    } = ""
+    
+    DISP
+    {
+        NEW ;   N
+        OLD ;   OLD
+    } = NEW
+    
+    AREA
+    {
+        GLOBE   ;   G
+        EUROPE  ;   E
+    } = G
+    
+	FRAME 
+	{
+		*
+		OFF; OFF
+	} = OFF
+
+	BITMAP 
+	{
+		OFF ; OFF
+		@
+		"
+	} = OFF
+
+    RESOL
+    {
+        /
+        *   
+    }
+    
+    PASSWORD
+    {
+        "   
+    } = ""
+
+	DATABASE
+	{
+		@
+		/
+		OFF
+	} 
+
+	EXPECT [ priority = 0 ]
+	{
+		ANY
+		*
+		OFF ; OFF
+	} = OFF
+
+	NAME
+	{
+		@
+	} = ""
+
+} ! END OF STORE
+
+REGISTER    ;   Registering of keywords   ;   MARS
+{
+    
+    CLASS 	[ 	java_control = CHOICE, 
+				java_section = ID, 
+				java_hidden  = FALSE ]
+	{ 
+		&_DUMMY&CLASS  
+	} = OD
+    
+
+    TYPE  	[	java_control = CHOICE, 
+				java_section = ID, 
+				java_hidden  = FALSE ] 
+	{ 
+		&_DUMMY&TYPE   
+	} = AN
+
+
+    STREAM 	[ 	java_control = CHOICE, 
+				java_section = ID, 
+				java_hidden  = FALSE ]
+	{ 
+		&_DUMMY&STREAM 
+	} = DA
+    
+
+    EXPVER 	[ 	priority     = 1,
+				java_control = CHOICE_TEXT_1,
+				java_section = ID,
+				java_hidden  = FALSE ]
+	{
+		@
+		1
+		2
+		11
+		12
+        "   
+        *   
+    } = 1
+
+    LEVTYPE [ java_control = CHOICE, java_section = ID, java_hidden = FALSE ] 
+	{ 
+		&_DUMMY&LEVTYPE 
+	} = PL 
+    
+
+	NAME
+	{
+		@
+	} = ""
+
+	ATTRIBUTES
+	{
+		DATE
+		TIME
+		OBSTYPE
+		/
+	} = DATE
+
+	DATABASE
+	{
+		@
+		/
+		OFF
+	}
+
+} ! END OF REGISTER
+
+
+FETCH    ;   Fetch data   ;   MARS
+{
+    
+    CLASS 	[ 	java_control = CHOICE, 
+				java_section = ID, 
+				java_hidden  = FALSE ]
+	{ 
+		&_DUMMY&CLASS  
+	} = OD
+    
+
+    TYPE  	[	java_control = CHOICE, 
+				java_section = ID, 
+				java_hidden  = FALSE ] 
+	{ 
+		&_DUMMY&TYPE   
+	} = AN
+
+
+    STREAM 	[ 	java_control = CHOICE, 
+				java_section = ID, 
+				java_hidden  = FALSE ]
+	{ 
+		&_DUMMY&STREAM 
+	} = DA
+    
+    ORIGIN 	[ 	java_control = CHOICE, 
+				java_section = ID, 
+				java_hidden  = FALSE ]
+	{
+		&_DUMMY&ORIGIN
+	} = OFF
+
+    EXPVER 	[ 	priority     = 1,
+				java_control = CHOICE_TEXT_1,
+				java_section = ID,
+				java_hidden  = FALSE ]
+	{
+		@
+		1
+		2
+		11
+		12
+        "   
+        *   
+    } = 1
+    
+
+    LEVTYPE [ java_control = CHOICE, java_section = ID, java_hidden = FALSE ] 
+	{ 
+		&_DUMMY&LEVTYPE 
+	} = PL 
+    
+    LEVELIST [ java_control = CHOICE_TEXT_2, java_section = ID, java_hidden = FALSE ]
+    {
+		TO ; TO
+		BY ; BY 
+        ALL ;   ALL
+        OFF ; OFF;   OFF
+        *   
+        /   
+    } = 1000/850/700/500/400/300
+    
+    REPRES [ java_control = CHOICE, java_section = ID, java_hidden = FALSE ] 
+	{ 
+		&_DUMMY&REPRES 
+	} = SH
+    
+    DOMAIN  [ help = help_multiple_selection, # For Metview
+				java_control = CHOICE, java_section = OTHER, java_hidden = FALSE ] 
+    {
+	&_DUMMY&DOMAIN
+    } = G
+
+    OBSTYPE [ help = help_multiple_selection, # For Metview
+			java_control = LIST_2, java_section = METEO, java_hidden = FALSE ]
+    {
+        ALL                     ;   ALL
+        NON SATELLITE DATA ALL  ;   NSD 
+        SATELLITE DATA ALL      ;   SD
+        &_DUMMY & OBSTYPE
+    } = S
+
+    PARAM [ help = help_multiple_selection,  # For Metview
+			java_control = LIST_2, java_section = METEO, java_hidden = FALSE ]
+    {
+        ALL             ;   ALL
+        &_DUMMY&PARAM
+    } = Z
+    
+    DATE [ java_control = CHOICE_TEXT_2, java_section = DATE, java_hidden = FALSE ]
+    {
+		&_DUMMY&DATE
+    } = CURRENT DATE
+    
+    REFDATE [ java_control = CHOICE_TEXT_2, java_section = DATE, java_hidden = FALSE ]
+	{
+		&_DUMMY&DATE
+    } = OFF
+
+    HDATE [ java_control = CHOICE_TEXT_2, java_section = DATE, java_hidden = FALSE ]
+	{
+		&_DUMMY&DATE
+		ALL
+    } = OFF
+
+    TIME [ java_control = CHOICE_TEXT_2, java_section = DATE, java_hidden = FALSE ]
+    {
+!		00
+!		03
+!		06
+!		09
+!		12
+!		15
+!		18
+!		21
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY           !        6
+		ALL ;   ALL
+    } = 12
+
+	LEADTIME [ java_control = CHOICE_TEXT_2, java_section = DATE, java_hidden = FALSE ]
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+	OPTTIME [ java_control = CHOICE_TEXT_2, java_section = DATE, java_hidden = FALSE ]
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+	RANGE 
+	{
+		*
+		OFF; OFF
+	} = OFF
+    
+    STEP [ java_control = CHOICE_TEXT_2, java_section = DATE, java_hidden = FALSE ]
+    {
+        ALL ;   ALL
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        !           12
+    } = 00
+    
+    ANOFFSET [ java_control = CHOICE_TEXT_2, java_section = DATE, java_hidden = FALSE ]
+    {
+        ALL ;   ALL
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        !           12
+		OFF
+    }
+    
+    ENSEMBLE [ java_control = CHOICE_TEXT_2, java_section = OTHER, java_hidden = FALSE ]
+    {
+        ALL
+		TO  ; TO
+        *   
+        /   
+        OFF ; OFF;  OFF
+    } = OFF
+    
+    CLUSTER [ java_control = CHOICE_TEXT_2, java_section = OTHER, java_hidden = FALSE ]
+    {
+        ALL
+		TO  ; TO
+        *   
+        /   
+        OFF ; OFF;  OFF
+    } = OFF
+    
+    
+    PROBABILITY [ java_control = CHOICE_TEXT_2, java_section = OTHER, java_hidden = FALSE ]
+    {
+        ALL ;   ALL
+		TO  ; TO
+        OFF ;   OFF
+        *   
+        /
+    } = OFF
+
+    NUMBER [ java_control = CHOICE_TEXT_2, java_section = OTHER, java_hidden = FALSE ]
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+    
+    QUANTILE [ java_control = CHOICE_TEXT_2, java_section = OTHER, java_hidden = FALSE ]
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+
+    DIAGNOSTIC  [ priority = 1, java_control = CHOICE_TEXT_2, java_section = OTHER, java_hidden = FALSE ]
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+        *   
+        /
+    } = OFF
+
+    ITERATION  [ java_control = CHOICE_TEXT_2, java_section = OTHER, java_hidden = FALSE ]
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    FREQUENCY [ java_control = CHOICE_TEXT_2, java_section = OTHER, java_hidden = FALSE ]
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    DIRECTION [ priority = 0, java_control = CHOICE_TEXT_2, java_section = OTHER, java_hidden = FALSE ]
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    TARGET [ java_control = TEXT, java_section = TARGET, java_hidden = FALSE ]
+    {
+		@
+        "   
+		OFF
+    } = ""
+
+    FIELDSET  [ java_control = CHOICE, java_section = TARGET, java_hidden = TRUE ]
+    {
+        @
+		OFF
+    }
+    
+    CFSPATH  [ java_control = TEXT, java_section = TARGET, java_hidden = FALSE ]
+    {
+        "   
+    } = ""
+    
+    FORMAT  [ java_control = CHOICE, java_section = DATA, java_hidden = FALSE ]
+    {
+        PACKED      ;   P
+        UNPACKED    ;   U
+        GRIB EDITION 1 ;   GRIB1
+        GRIB EDITION 2 ;   GRIB2
+		NETCDF
+    } = P
+    
+    RESOL [ java_control = CHOICE_TEXT_2, java_section = DATA, java_hidden = FALSE ]
+    {
+        ARCHIVED VALUE  ;   AV
+        OFF     ;   OFF
+        *   
+        /
+    } = AV
+    
+    ACCURACY [ java_control = CHOICE_TEXT_1, java_section = DATA, java_hidden = FALSE ]
+    {
+        NORMAL  ;   N
+        REDUCED ;   R
+        LOW ;   L
+		OFF; OFF
+        *   
+		ARCHIVED VALUE ; AV
+    } = N
+    
+    AREA  [ help = help_multiple_selection,			# For Metview
+    		java_control = CHOICE_TEXT_2, java_section = DATA, java_hidden = FALSE ]
+    {
+        GLOBE               ;  GLOBE;  G
+        EUROPE              ;  EUROPE; E
+        *   
+        /   
+    } = G
+
+	FRAME 
+	{
+		*
+		OFF; OFF
+	} = OFF
+
+	BITMAP 
+	{
+		OFF ; OFF
+		@
+		"
+	} = OFF
+
+    BLOCK  [ java_control = CHOICE_TEXT_2, java_section = DATA, java_hidden = FALSE ]
+    {
+        OFF     ; OFF;  OFF
+        /   
+        *       
+    }=OFF
+
+    IDENT
+			# For Metview
+				   [ help = help_script,                  
+				   help_script_command = 
+					'/usr/local/lib/metaps/bin/mcs_sat_availability.sh',
+					java_control = CHOICE_TEXT_2, java_section = DATA, java_hidden = FALSE 
+				 ]
+											   
+    {
+		ALL 
+        METEOSAT 3 ; MS3 ; 50
+        METEOSAT 4 ; MS4 ; 51
+        METEOSAT 5 ; MS5 ; 52
+        METEOSAT 6 ; MS6 ; 53
+        METEOSAT 7 ; MS7 ; 54
+		DMSP 10 ; 204
+		DMSP 13 ; 246
+        OFF     ; OFF;  OFF
+        /   
+        *       
+    }=OFF
+    
+	ROTATION [ java_control = CHOICE_TEXT_2, java_section = DATA, java_hidden = FALSE ]
+	{
+		*
+		/
+		OFF;  OFF
+	} = OFF
+
+    GRID  [ java_control = CHOICE_TEXT_2, java_section = DATA, java_hidden = FALSE ]
+    {
+        ARCHIVED VALUE  ;   AV
+        *   
+        /   
+        OFF     ; OFF;  OFF
+    } = OFF
+    
+    DUPLICATES  [ java_control = CHOICE, java_section = OTHER, java_hidden = FALSE ]
+    {
+        KEEP
+        REMOVE
+    } = KEEP
+    
+    LAUNCH  [ java_control = TEXT, java_section = OTHER, java_hidden = FALSE ]
+    {
+        "   
+    } = ""
+    
+	JOB
+	{
+		"
+		OFF
+	} = OFF
+
+    USE  [ java_control=CHOICE, java_section=OTHER, java_hidden=FALSE ]
+    {
+        FREQUENT   
+        INFREQUENT
+        NORMAL
+		BOUNDARY CONDITIONS  ;  BC
+		COMPARE
+		MONTHLY RUN
+    } = NORMAL
+    
+    PASSWORD  [ java_control = CHOICE_TEXT_1, java_section = OTHER, java_hidden = FALSE ]
+    {
+        "   
+        OFF ;   OFF
+    } = OFF
+    
+    COSTONLY  [ java_control = CHOICE, java_section = OTHER, java_hidden = FALSE ]
+    {
+        YES ;   Y
+        NO  ;   N
+    } = N
+    
+    PROCESS  [ java_control = CHOICE, java_section = OTHER, java_hidden = FALSE ]
+    {
+		LOCAL ; LOCAL
+		SERVER
+        OFF ;   OFF
+    } = LOCAL
+
+
+	DATABASE  [ java_control = CHOICE, java_section = OTHER, java_hidden = FALSE ]
+	{
+		@
+		OFF
+	}
+
+	EXPECT [ priority = 0,
+				java_control = CHOICE_TEXT_2, java_section = OTHER, java_hidden = FALSE]
+	{
+		ANY
+		*
+		OFF ; OFF
+	} = OFF
+
+	_VERSION {
+		*
+	} = 1.3
+
+	NAME {
+		@
+	}
+    
+} ! END OF FETCH
+
+!------------------------------------------------------------------------
+
+BROWSE    ;   LIST FDF ENTRIES AND CFS FILES  ;   MARS
+{
+    
+    CLASS  
+	{ 
+		&_DUMMY&CLASS  
+		/ 
+		ALL
+	} 
+    
+    TYPE   
+	{ 
+		&_DUMMY&TYPE  
+		/  
+		ALL
+	} 
+
+    STREAM 
+	{ 
+		&_DUMMY&STREAM 
+		/ 
+		ALL
+	} 
+    
+	ORIGIN 
+	{
+		&_DUMMY&ORIGIN
+		/
+		ALL
+	}
+
+    EXPVER{
+		@
+		/
+		ALL
+    } 
+    
+    LEVTYPE 
+	{ 
+		&_DUMMY&LEVTYPE 
+		/ 
+		ALL
+	}
+    
+    LEVELIST
+    {
+		TO ; TO
+		BY ; BY 
+        ALL ;   ALL
+        OFF ; OFF;   OFF
+        *   
+        /   
+    }
+    
+    REPRES { 
+		&_DUMMY&REPRES 
+		/ 
+		ALL
+	}
+    
+    DOMAIN  
+    {
+		&_DUMMY&DOMAIN
+		/
+		ALL
+    } 
+
+    OBSTYPE 
+    {
+        ALL                     ;   ALL
+        NON SATELLITE DATA ALL  ;   NSD 
+        SATELLITE DATA ALL      ;   SD
+        &_DUMMY & OBSTYPE
+		/
+    } 
+
+	OBSGROUP { ALL
+	&_DUMMY&OBSGROUP }
+    
+    DUPLICATES  {
+        KEEP
+        REMOVE
+    } = KEEP
+    
+    PARAM 
+    {
+        ALL             ;   ALL
+        &_DUMMY&PARAM
+		/
+    }
+    
+    CHANNEL 
+	{ 	
+		ALL             ; ALL
+		&_DUMMY&CHANNEL 
+	} 
+
+    IDENT 
+	{ 	
+		ALL             ; ALL
+		&_DUMMY&IDENT 
+	} 
+
+    INSTRUMENT 
+	{ 	
+		ALL             ; ALL
+		&_DUMMY&INSTRUMENT 
+	} 
+
+    DATE
+    {
+		&_DUMMY&DATE
+		ALL
+    } 
+
+    REFDATE 
+	{
+		&_DUMMY&DATE
+		ALL
+    } = OFF
+
+	HDATE 
+	{ 
+		&_DUMMY&DATE 
+		ALL
+	} = OFF
+
+    TIME
+    {
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY           !        6
+		ALL ;   ALL
+    }
+    
+	LEADTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+	OPTTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+    REFERENCE 
+    {
+        ALL ;   ALL
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        !           12
+		OFF
+    }
+
+    STEP
+    {
+        ALL ;   ALL
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        !           12
+    }
+    
+    ANOFFSET
+    {
+        ALL ;   ALL
+        *   
+        /   
+        TO  ;   TO
+        BY  ;   BY        !           12
+		OFF
+    }
+    
+    ENSEMBLE
+    {
+        ALL
+		TO  ; TO
+        *   
+        /   
+        OFF ; OFF;  OFF
+    } 
+    
+    CLUSTER
+    {
+        ALL
+		TO  ; TO
+        *   
+        /   
+        OFF ; OFF;  OFF
+    } 
+    
+    
+    PROBABILITY
+    {
+        ALL ;   ALL
+		TO  ; TO
+        OFF ;   OFF
+        *   
+        /
+    }
+
+    NUMBER
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    }
+    
+    QUANTILE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } 
+
+    DIAGNOSTIC
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+        *   
+        /
+    } 
+
+    ITERATION
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    }
+
+    FREQUENCY
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    DIRECTION
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO
+        *   
+        /
+    }
+    
+	SHOW
+	{
+		@
+		/
+	}
+
+	HIDE
+	{
+		@
+		/
+	}
+
+ 
+    TARGET
+    {
+		@
+        "   
+		OFF
+    }
+
+	DATABASE {
+		@
+		/
+		OFF
+	}
+
+	RANGE 
+	{
+		*
+		OFF; OFF
+	}
+
+
+    SOURCE
+    {
+		@
+        "   
+    } 
+
+    FIELDSET  
+    {
+        @
+    }
+    
+    CFSPATH  
+    {
+        "   
+    }
+    
+    FORMAT  
+    {
+        PACKED      ;   P
+        UNPACKED    ;   U
+        GRIB EDITION 1 ;   GRIB1
+        GRIB EDITION 2 ;   GRIB2
+		NETCDF
+		OFF         ;   OFF
+    } 
+    
+    RESOL 
+    {
+		OFF                  ;   OFF
+        *   
+    } = OFF
+    
+    ACCURACY 
+    {
+        NORMAL  ;   N
+        REDUCED ;   R
+        LOW ;   L
+		OFF; OFF
+        *   
+		ARCHIVED VALUE ; AV
+    } = OFF
+    
+    AREA  
+    {
+        GLOBE               ;  GLOBE;  G
+        EUROPE              ;  EUROPE; E
+        *   
+        /   
+		OFF; OFF
+    } = OFF
+
+	FRAME 
+	{
+		*
+		OFF; OFF
+	} = OFF
+
+	BITMAP 
+	{
+		OFF ; OFF
+		@
+		"
+	} = OFF
+
+    BLOCK  
+    {
+        OFF     ; OFF;  OFF
+        /   
+        *       
+    }=OFF
+
+    IDENT
+    {
+        OFF     ; OFF;  OFF
+        /   
+        *       
+    }=OFF
+    
+    GRID  
+    {
+        ARCHIVED VALUE  ;   AV
+        *   
+        /   
+        OFF     ; OFF;  OFF
+    } = OFF
+    
+	GAUSSIAN 
+	{
+		REDUCED
+		REGULAR
+		OFF     ; OFF;  OFF
+	} = OFF
+
+	SPECIFICATION 
+	{
+		*
+		OFF
+	} = OFF
+
+    LAUNCH  
+    {
+        "   
+    } = ""
+    
+	JOB
+	{
+		"
+		OFF
+	} = OFF
+
+    USE  
+    {
+        FREQUENT   
+        INFREQUENT
+        NORMAL
+		BOUNDARY CONDITIONS  ;  BC
+		COMPARE
+		MONTHLY RUN
+		OFF; OFF
+    } = OFF
+    
+    PASSWORD  
+    {
+        "   
+        OFF ;   OFF
+    } = OFF
+    
+    COSTONLY  
+    {
+        YES ;   Y
+        NO  ;   N
+		OFF ;   OFF
+    } = OFF
+    
+    PROCESS  
+    {
+		LOCAL ; LOCAL
+		SERVER
+        OFF ;   OFF
+    } = OFF
+
+
+	EXPECT 
+	{
+		ANY
+		*
+		OFF ; OFF
+	} = OFF
+
+
+
+} ! END OF BROWSE
+
+
+GET    ;   GET ;   MARS
+{
+	TAPE
+	{
+		@
+	}
+
+    TARGET
+    {
+		@
+        "   
+		OFF
+    }
+
+	DATABASE {
+		@
+		OFF
+	}
+
+} ! END OF GET
+
+
+REGRIB    ;   Regrib of data   ;   MARS
+{
+    
+    CLASS 	
+	{ 
+		&_DUMMY&CLASS  
+		OFF
+	} = OFF
+    
+
+    TYPE
+	{ 
+		&_DUMMY&TYPE   
+		OFF
+	} = OFF
+
+
+    STREAM
+	{ 
+		&_DUMMY&STREAM 
+		OFF
+	} = OFF
+    
+
+    MODEL
+	{
+		&_DUMMY&MODEL
+		OFF
+	} = OFF
+
+    EXPVER
+	{
+		@
+        "   
+		OFF
+    } = OFF
+    
+
+    LEVTYPE
+	{ 
+		&_DUMMY&LEVTYPE 
+		OFF
+	} = OFF
+    
+    LEVELIST 
+    {
+        OFF
+        *   
+    } = OFF
+    
+    PARAM 
+    {
+        &_DUMMY&PARAM
+		OFF
+    } = OFF
+    
+    DATE
+    {
+		&_DUMMY&DATE
+		OFF
+    } = OFF
+    
+    REFDATE 
+	{
+		&_DUMMY&DATE
+    } = OFF
+
+	HDATE 
+	{ 
+		&_DUMMY&DATE 
+		ALL
+	} = OFF
+
+    TIME
+    {
+        *   
+		OFF
+    } = OFF
+
+	LEADTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+	OPTTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+    STEP
+    {
+        *   
+		OFF
+    } = OFF
+    
+    ANOFFSET
+    {
+        *   
+		OFF
+    } = OFF
+    
+    REFERENCE
+    {
+        *   
+		OFF
+    } = OFF 
+
+    NUMBER
+    {
+        *   
+        OFF
+    } = OFF
+    
+    QUANTILE
+    {
+        *   
+        OFF
+    } = OFF
+
+    DOMAIN
+    {
+	&_DUMMY&DOMAIN
+	OFF
+    } = OFF
+
+    FREQUENCY
+    {
+        *   
+        OFF
+    } = OFF
+    
+    DIRECTION
+    {
+        OFF
+        *   
+    } = OFF
+    
+    DIAGNOSTIC
+    {
+        OFF
+        *   
+    } = OFF
+
+    ITERATION
+    {
+        OFF
+        *   
+    } = OFF
+    
+    CHANNEL
+	{ 
+		&_DUMMY&CHANNEL 
+	} = OFF
+
+    IDENT
+	{ 
+		&_DUMMY&IDENT 
+	} = OFF
+
+    INSTRUMENT
+	{ 
+		&_DUMMY&INSTRUMENT 
+	} = OFF
+
+    ORIGIN
+	{
+		&_DUMMY&ORIGIN
+	} = OFF
+
+    MODEL
+	{
+		OFF
+		ECMF
+		EDZW
+		EGRR
+		LFPW
+		KWBC
+		NONE
+	} = OFF
+
+	SYSTEM { &_DUMMY&SYSTEM 
+			  OFF } = OFF
+	METHOD { &_DUMMY&METHOD 
+			  OFF } = OFF
+	PRODUCT { &_DUMMY&PRODUCT 
+			  OFF } = OFF
+	SECTION { &_DUMMY&SECTION 
+			  OFF } = OFF
+	LATITUDE { @ 
+			   OFF } = OFF
+	LONGITUDE { @ 
+				OFF } = OFF
+
+    OBSTYPE { @
+				OFF } = OFF
+
+    IDENT { @
+        METEOSAT 3 ; MS3  ; 50
+        METEOSAT 4 ; MS4  ; 51
+        METEOSAT 5 ; MS5  ; 52
+        METEOSAT 6 ; MS6  ; 53
+        METEOSAT 7 ; MS7  ; 54
+        GOES 8     ; GOES ; 252
+		DMSP 10 ; 204
+		DMSP 13 ; 246
+		OFF } = OFF
+    
+
+	KSEC1 
+	{
+		OFF
+		*
+		@
+		/
+	} = OFF
+
+	LOCALDEF
+	{
+		OFF
+		*
+		@
+	} = OFF
+
+    SOURCE
+    {
+		@
+        "   
+    } = ""
+
+    TARGET
+    {
+		@
+        "   
+		OFF
+    }= ""
+
+} ! END OF REGRIB
+
+!-----------------------------------------------------------------
+
+ERASE    ;   Erase data   ;   MARS
+{
+    
+	DATASET
+	{
+		@
+	}
+
+    CLASS
+	{ 
+		&_DUMMY&CLASS  
+	} = TE
+    
+
+    TYPE
+	{ 
+		&_DUMMY&TYPE   
+		*
+	} = AN
+
+
+    STREAM
+	{ 
+		&_DUMMY&STREAM 
+		*
+	} = MA
+    
+
+    EXPVER
+	{
+		@
+		1
+        "   
+        *   
+        /
+    } = 9999
+    
+
+    MODEL
+	{
+		&_DUMMY&MODEL
+	} = OFF
+
+    REPRES
+	{ 
+		&_DUMMY&REPRES 
+	} = SH
+    
+	OBSGROUP
+	{ 
+		&_DUMMY&OBSGROUP 
+		OFF    ; OFF
+	} = OFF
+    
+	RDBPREFIX
+	{ 
+		@
+		"
+		OFF    ; OFF
+	} = OFF
+    
+    OBSTYPE
+    {
+        ALL                     ;   ALL
+        NON SATELLITE DATA ALL  ;   NSD 
+        SATELLITE DATA ALL      ;   SD
+        &_DUMMY & OBSTYPE
+    } = 0
+
+    LEVTYPE
+	{ 
+		&_DUMMY&LEVTYPE 
+	} = DP
+    
+    LEVELIST
+    {
+		TO ;    TO
+		BY ;    BY 
+        ALL ;   ALL
+        OFF ;   OFF
+        *   
+        /   
+    } = 9999
+    
+    PARAM 
+    {
+        ALL             
+        &_DUMMY&PARAM
+    } = 255
+    
+	YEAR 
+	{
+		*
+		/
+		TO
+		BY  ;   BY           !        1
+		ALL
+	}
+
+	DECADE
+	{
+		*
+		/
+		TO
+		BY  ;   BY           !        1
+		ALL
+	}
+
+	MONTH
+	{
+		*
+		/
+		TO
+		BY  ;   BY           !        1
+		ALL
+	}
+
+    DATE 
+    {
+		&_DUMMY&DATE
+    } = 19000101
+    
+    VERIFY
+	{
+		&_DUMMY&DATE
+		OFF          ; OFF
+    } = OFF
+    
+    REFDATE
+	{
+		&_DUMMY&DATE
+		OFF          ; OFF
+    } = OFF
+
+    HDATE
+	{
+		&_DUMMY&DATE
+		OFF          ; OFF
+    } = OFF
+
+    FCMONTH
+	{
+		*
+		/
+		TO
+		BY  ! 1
+		OFF
+    } = OFF
+    
+    FCPERIOD
+    {
+        TO  ;   TO
+        BY  ;   BY    
+		/
+        *   
+		OFF
+    } = OFF
+    
+    TIME
+    {
+        *   
+        /   
+        TO  
+        BY  !        6
+		ALL 
+		12
+    } = 12
+
+	LEADTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+	OPTTIME
+	{
+		*
+		/
+		TO
+		OFF
+	} = OFF
+
+	RANGE
+	{
+		*
+		OFF; OFF
+	} = OFF
+    
+    STEP
+    {
+        ALL 
+        *   
+        /   
+        TO  
+        BY  !           12
+    } = 00
+    
+    ANOFFSET
+    {
+        ALL 
+        *   
+        /   
+        TO  
+        BY  !           12
+		OFF
+    }
+    
+    REFERENCE
+    {
+        ALL 
+        *   
+        /   
+        TO  
+        BY  !           12
+		OFF
+    } = OFF 
+
+    NUMBER
+    {
+        ALL 
+        OFF ;   OFF
+		TO  
+		BY
+        *   
+        /
+    } = OFF
+    
+    QUANTILE
+    {
+        ALL ;   ALL
+        OFF ;   OFF
+		TO  ; TO
+		BY
+        *   
+        /
+    } = OFF
+
+    DOMAIN
+    {
+	&_DUMMY&DOMAIN
+    } = GLOBE
+
+    FREQUENCY
+    {
+        ALL 
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    DIRECTION
+    {
+        ALL 
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    DIAGNOSTIC
+    {
+        ALL 
+        OFF ;   OFF
+        *   
+        /
+    } = OFF
+
+    ITERATION
+    {
+        ALL 
+        OFF ;   OFF
+		TO
+        *   
+        /
+    } = OFF
+    
+    CHANNEL
+	{ 
+		ALL
+		&_DUMMY&CHANNEL 
+	} = OFF
+
+    IDENT
+    {
+		ALL 
+		&_DUMMY&IDENT
+		"
+		@
+    }=OFF
+    
+    ORIGIN
+	{
+		&_DUMMY&ORIGIN
+	} = OFF
+
+	SYSTEM { &_DUMMY&SYSTEM 
+			  OFF } = OFF
+	METHOD { &_DUMMY&METHOD 
+			  OFF } = OFF
+	PRODUCT { &_DUMMY&PRODUCT 
+			  OFF } = OFF
+	SECTION { &_DUMMY&SECTION 
+			  OFF } = OFF
+	LATITUDE { @ 
+			   OFF } = OFF
+	LONGITUDE { @ 
+				OFF } = OFF
+
+    SOURCE
+    {
+		@
+        "   
+		OFF
+    } = ""
+
+    TARGET
+    {
+		@
+        "   
+		OFF
+    } = ""
+
+    LOGSTATS
+    {
+		@
+        "   
+		OFF
+    }
+
+    TRANSFER
+    {
+		HANDLE
+		DATA
+		OFF
+    }
+
+    FIELDSET
+    {
+        @
+		OFF
+    }
+    
+    CFSPATH
+    {
+        "   
+    } = ""
+    
+    FORMAT
+    {
+        PACKED      ;   P
+        UNPACKED    ;   U
+        GRIB EDITION 1 ;   GRIB1
+        GRIB EDITION 2 ;   GRIB2
+		NETCDF
+    } = P
+    
+    DISP
+    {
+        NEW ;   N
+        OLD ;   OLD
+		REMOVE
+		OFF
+    } = OFF
+    
+    RESOL
+    {
+        ARCHIVED VALUE       ;   AV
+		AUTOMATIC RESOLUTION ;   AUTO
+		REDUCED GAUSSIAN 128 ;   N128
+		REDUCED GAUSSIAN 200 ;   N200
+		OFF                  ;   OFF
+		319
+		213
+		106
+		63
+        *   
+    } = AUTO
+    
+    ACCURACY
+    {
+        NORMAL  ;   N
+        REDUCED ;   R
+        LOW     ;   L
+		OFF; OFF
+        *   
+		ARCHIVED VALUE ; AV
+    } = N
+    
+    STYLE
+    {
+        DISSEMINATION  
+        OFF   
+    } = OFF
+    
+	INTERPOLATION
+	{
+		NEAREST NEIGHBOUR
+        NEAREST LSM  
+		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
+		OFF
+	} = OFF
+
+    AREA
+    {
+        GLOBE                           ;   G
+        EUROPE                          ;   E 
+        NORTHERN HEMISPHERE OCTANT 1    ;   N1
+        NORTHERN HEMISPHERE OCTANT 2    ;   N2
+        NORTHERN HEMISPHERE OCTANT 3    ;   N3
+        NORTHERN HEMISPHERE OCTANT 4    ;   N4
+        SOUTHERN HEMISPHERE OCTANT 1    ;   S1
+        SOUTHERN HEMISPHERE OCTANT 2    ;   S2
+        SOUTHERN HEMISPHERE OCTANT 3    ;   S3
+        SOUTHERN HEMISPHERE OCTANT 4    ;   S4
+        *   
+        /   
+    } = G
+
+	LOCATION
+	{
+		*
+        /   
+        OFF     ;  OFF
+	} = OFF
+
+    BLOCK
+    {
+        OFF     ;  OFF
+        /   
+        *       
+    }=OFF
+
+    INSTRUMENT
+    {
+		&_DUMMY&INSTRUMENT
+    }=OFF
+
+	ROTATION
+	{
+		*
+		/
+		OFF;  OFF
+	} = OFF
+
+	FRAME
+	{
+		*
+		OFF;  OFF
+	} = OFF
+
+	BITMAP
+	{
+		OFF ; OFF
+		@
+		"
+	}  = OFF
+
+    GRID
+    {
+        ARCHIVED VALUE  ;   AV
+		320
+		160
+		80
+		48
+        *   
+        /   
+        OFF     ;  OFF
+    } = OFF
+    
+	GAUSSIAN
+	{
+		REDUCED
+		REGULAR
+		OFF     ;  OFF
+	} = OFF
+
+	SPECIFICATION
+	{
+		*
+		OFF
+	} = OFF
+
+	PACKING
+	{
+		SI   ; SIMPLE
+		CO   ; COMPLEX
+		SO   ; SECOND ORDER
+		AV   ; ARCHIVED VALUE
+		OFF
+	} = OFF
+
+
+    PADDING
+    {
+		&_DUMMY&PADDING
+		OFF
+    } = OFF
+    
+
+    DUPLICATES
+    {
+        KEEP
+        REMOVE
+    } = KEEP
+    
+    LAUNCH
+    {
+        "   
+    } = ""
+    
+	JOB
+	{
+		"
+		OFF
+	} = OFF
+
+    USE
+    {
+        FREQUENT   
+        INFREQUENT
+        NORMAL
+		BOUNDARY CONDITIONS  ;  BC
+		COMPARE
+		MONTHLY RUN
+    } = NORMAL
+    
+    PASSWORD
+    {
+        "   
+		@
+        OFF ;   OFF
+    } = OFF
+    
+    COSTONLY
+    {
+        YES ;   Y
+        NO  ;   N
+    } = N
+    
+    PROCESS
+    {
+		LOCAL 
+		SERVER
+        OFF ;   OFF
+    } = LOCAL
+
+	BRANCH
+	{ &_DUMMY&BRANCH } = OFF
+
+	DATABASE
+	{
+		@
+		/
+		OFF
+	} = marsdev
+
+	EXPECT
+	{
+		ANY
+		*
+		OFF ; OFF
+	} = OFF
+
+	_VERSION
+	{
+		*
+	} = 2.0
+    
+} ! END OF ERASE
diff --git a/share/metview/etc/MarsEcRegridRules b/share/metview/etc/MarsEcRegridRules
new file mode 100644
index 0000000..7d645ca
--- /dev/null
+++ b/share/metview/etc/MarsEcRegridRules
@@ -0,0 +1,771 @@
+!
+! This is the mars check file
+!
+! Each request is checked again each rule
+! The rules have the following syntax:
+!
+!   RULE   ---> if TEST then ACTION 
+!
+!
+!   TEST   ---> PARAMETER  =  VALUE
+!          ---> PARAMETER  >  VALUE
+!          ---> PARAMETER  <  VALUE
+!          ---> PARAMETER  >= VALUE
+!          ---> PARAMETER  <= VALUE
+!          ---> PARAMETER  <> VALUE
+!          ---> PARAMETER  in LIST_OF_VALUES
+!          ---> not TEST
+!          ---> TEST and TEST
+!          ---> TEST or TEST
+!          ---> ( TEST )
+!
+!
+!   ACTION ---> error    MESSAGE
+!          ---> warning	 MESSAGE
+!          ---> info	 MESSAGE
+!          ---> mail	 MESSAGE
+!          ---> set      PARAMETER = VALUE
+!          ---> unset    PARAMETER 
+!
+!
+!
+! B.Raoult
+! Wed Feb 13 15:07:49 GMT 1991
+!
+
+# Remove access to marsodb
+%if (_VERB = ARCHIVE %or 
+	 _VERB = STAGE %or 
+	 _VERB = FLUSH %or 
+	 _VERB = REMOVE)
+	%and DATABASE=marsodb %then
+	%unset DATABASE
+
+%include "oldrd.chk"
+
+
+%if CLASS = OD %and (TYPE = CM %or TYPE = CS %or TYPE = CR) %and DOMAIN = G %then 
+	%warning "Domain forced to E"
+	%set DOMAIN = E
+
+%if (TYPE = IM %or TYPE = SIM %or TYPE = OLDIM) %and STREAM <> SSMI %then
+	%set REPRES = SV
+	%unset PARAM
+	%unset LEVTYPE
+	%unset LEVELIST
+	%unset RESOL
+	%unset DUPLICATES 
+	%unset GRID 
+	%unset ROTATION 
+
+# Simulated radiances
+%if (TYPE = SSD) %then
+	%unset LEVTYPE
+	%unset LEVELIST
+
+
+%if (TYPE = IM  %or TYPE = OLDIM) %and STREAM <> SSMI %then
+	%unset STEP
+
+
+%if TYPE = OB %or TYPE = FB  %or STREAM = SSMI %or TYPE = AI %or TYPE = AF %or TYPE = AB %or TYPE = OFB %or TYPE = MFB %then 
+	%set REPRES = BU
+	%unset PARAM  
+	%unset STEP  
+	%unset LEVTYPE  
+	%unset LEVELIST  
+	%unset GRID 
+	%unset ROTATION 
+
+%if TYPE = TF %then
+	%set REPRES = BU
+	%unset PARAM
+	%unset LEVTYPE
+	%unset LEVELIST
+	%unset GRID 
+	%unset ROTATION
+
+%if TYPE = AB %then
+	%unset TIME
+
+%if TYPE = OB %or TYPE = FB %then
+	%unset ORDER
+
+%if TYPE = CL %then
+	%unset STEP
+
+%if LEVTYPE = SFC %or LEVTYPE = WAVE %then 
+	%unset LEVELIST
+
+%if LEVTYPE = SFC %and CLASS = OD %and STREAM = OPER %then
+	%set REPRES = GG
+
+%if LEVTYPE = SFC %and CLASS = ER %and STREAM = OPER %and (TYPE = AN %or TYPE = FC) %and (%not REPRES) %then
+	%set REPRES = GG
+
+%if LEVTYPE = SFC %and CLASS = OD %and STREAM = OPER %and (TYPE = IA %or TYPE = AN) %and DATE < 19830420 %then
+	%set REPRES = LL
+
+%if (_VERB = RETRIEVE_ECREGRID %and TYPE = TU) %then
+	%set REPRES = LL
+
+%if %not ( TYPE = OLDIM %or TYPE = OB %or TYPE = FB %or TYPE = AI %or TYPE = AF %or TYPE = AB %or TYPE = TF %or TYPE = OFB %or TYPE = MFB) %then 
+	%unset OBSTYPE 
+	%unset OBSGROUP 
+	%unset DUPLICATES 
+
+%if %not ( TYPE = IM %or TYPE = OLDIM %or TYPE = SIM %or TYPE = OB %or TYPE = FB %or TYPE = AI %or TYPE = AF %or TYPE = AB %or TYPE = TF %or TYPE = OFB %or TYPE = MFB %or TYPE = SSD) %then 
+	%unset IDENT 
+
+%if _VERB = LIST %and %not OBSGROUP %and (TYPE = OB %or TYPE = FB %or TYPE = AI %or TYPE = AF %or TYPE = AB %or TYPE = TF %or TYPE = OFB %or TYPE = MFB) %then
+	%set OBSGROUP = ALL
+
+%if GRID=O  %and (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
+%if GRID=AV  %and (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
+
+%if (RESOL=AUTO %or RESOL=AV) %and (%not GRID) %then %unset RESOL
+%if (STYLE = DISSEMINATION) %and (RESOL=AUTO %or (%not RESOL)) %then 
+	%warning "Force RESOL=AV when STYLE=DISSEMINATION"
+	%set RESOL=AV
+
+%if AREA = E %then
+	%set AREA = 73.5/-27/33/45
+
+%if (AREA = G %or AREA = GLOBE) %and (_APPL = diss) %then
+	%warning "Expand global AREA for dissemination to AREA = 90/0/-90/359.99"
+	%set AREA = 90/0/-90/359.99
+
+%if AREA = G %then
+	%set _AREA_N = 0
+	%set _AREA_W = 0
+	%set _AREA_S = 0
+	%set _AREA_E = 0
+
+%if AREA = G %and (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %then %unset AREA
+%if AREA = GLOBE %and (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %then %unset AREA
+
+%if FORMAT = P %or FORMAT = PACKED  %then %unset FORMAT
+
+# %if FORMAT %then %warning "Format is not yet implemented" %unset FORMAT
+
+
+%if USE = NORMAL     %then %unset USE
+%if USE = STAGE     %then %set TARGET="/dev/null" %unset FIELDSET %set EXPECT=0
+%if COSTONLY = N %then %unset COSTONLY
+
+
+
+!
+!
+!
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and CLASS=ANY     %then %unset CLASS
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and STREAM=ANY    %then %unset STREAM
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and MODEL=ANY     %then %unset MODEL
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and LEVTYPE=ANY   %then %unset LEVTYPE
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and LEVELIST=ANY  %then %unset LEVELIST
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and TYPE=ANY      %then %unset TYPE
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and PARAM=ANY     %then %unset PARAM
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and DATE=ANY      %then %unset DATE
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and TIME=ANY      %then %unset TIME
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and STEP=ANY      %then %unset STEP
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and ANOFFSET=ANY %then %unset ANOFFSET
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and AREA=ANY      %then %unset AREA
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and GRID=ANY      %then %unset GRID
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and ROTATION=ANY  %then %unset ROTATION
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and STYLE=ANY     %then %unset STYLE
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and RESOL=ANY     %then %unset RESOL
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and ORDER=0       %then %unset ORDER
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and EXPVER=ANY    %then %unset EXPVER
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and REFERENCE=ANY %then %unset REFERENCE
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and DOMAIN=ANY    %then %unset DOMAIN
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and ORIGIN=ANY    %then %unset ORIGIN
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and CHANNEL=ANY   %then %unset CHANNEL
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and RANGE=ANY     %then %unset RANGE
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and LEADTIME=ANY  %then %unset LEADTIME
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and OPTTIME=ANY   %then %unset OPTTIME
+
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and PADDING=ANY     %then %unset PADDING
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and SYSTEM=ANY     %then %unset SYSTEM
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and METHOD=ANY     %then %unset METHOD
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and PRODUCT=ANY     %then %unset PRODUCT
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and SECTION=ANY     %then %unset SECTION
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and LATITUDE=ANY     %then %unset LATITUDE
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and LONGITUDE=ANY     %then %unset LONGITUDE
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and NUMBER=ANY     %then %unset NUMBER
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and QUANTILE=ANY     %then %unset QUANTILE
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and ITERATION=ANY     %then %unset ITERATION
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and DIAGNOSTIC=ANY     %then %unset DIAGNOSTIC
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and INSTRUMENT=ANY     %then %unset INSTRUMENT
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and FILTER=ANY     %then %unset FILTER
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and INTERPOLATION=ANY     %then %unset INTERPOLATION
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and REFDATE=ANY     %then %unset REFDATE
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and HDATE=ANY     %then %unset HDATE
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and FREQUENCY=ANY     %then %unset FREQUENCY
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and DIRECTION=ANY     %then %unset DIRECTION
+
+
+
+
+%if TYPE <> CF %and TYPE <> PF %and TYPE <> CV %then %unset ENSEMBLE
+%if TYPE <> CM %and TYPE <> CS  %then %unset CLUSTER
+%if TYPE <> FP %then %unset PROBABILITY
+
+
+#%if TYPE <> CF %and 
+%if TYPE <> PF %and 
+	TYPE <> CM %and 
+	TYPE <> CS %and 
+	TYPE <> CR %and 
+	TYPE <> CV %and 
+	TYPE <> SV %and 
+	TYPE <> AS %and 
+	TYPE <> FP %and 
+	TYPE <> ED %and 
+	TYPE <> TU %and 
+	TYPE <> CI %and
+	TYPE <> ME %and 
+	TYPE <> FF %and           # Ocean
+	TYPE <> ICP %and 
+	TYPE <> SOT %and 
+	TYPE <> FCMEAN %and
+	TYPE <> FCMAX %and
+	TYPE <> FCMIN %and
+	TYPE <> FCSTDEV %and
+	TYPE <> SVAR %and
+	CLASS <> TI %and
+	STREAM <> MOFC %and 
+	STREAM <> WAMF %and 
+	STREAM <> MOFM %and 
+	STREAM <> WMFM %and 
+	STREAM <> SEAS %and 
+	STREAM <> WASF %and
+	STREAM <> WAMF %and
+	STREAM <> SFMM %and
+	STREAM <> SMMA %and
+	STREAM <> SEAP %and 
+	STREAM <> SWMM %and
+	STREAM <> OCEA %and
+# New Monthly Forecast
+	STREAM <> MNFC %and
+    STREAM <> MNFH %and
+    STREAM <> MNFA %and
+    STREAM <> MNFW %and
+    STREAM <> MFHW %and
+    STREAM <> MFAW %and
+    STREAM <> MNFM %and
+    STREAM <> MFHM %and
+    STREAM <> MFAM %and
+    STREAM <> MFWM %and
+    STREAM <> MHWM %and
+    STREAM <> MAWM %and
+# New Multi-model
+	STREAM <> MMSF %and 
+	STREAM <> MSMM %and 
+	STREAM <> WAMS %and 
+	STREAM <> MSWM %and 
+	STREAM <> MMSA %and 
+# Ensemble Data Assimilation
+	STREAM <> ENDA %and 
+	STREAM <> EWDA %and 
+	STREAM <> EDMM %and 
+	STREAM <> EDMO %and 
+	STREAM <> EWMM %and 
+	STREAM <> EWMO %and 
+	STREAM <> ELDA %and 
+	STREAM <> EWLA %and 
+# Ensemble Supplementary data
+	STREAM <> ESPD %and 
+# Multi-model Multi-annual
+	STREAM <> MMAF %and 
+	STREAM <> MMAM %and 
+	STREAM <> MMAW %and 
+	STREAM <> MMWM %and 
+	STREAM <> SEAS %then
+	%unset NUMBER
+
+%if STREAM <> ENFH %and 
+	STREAM <> ENWH %and
+	STREAM <> EFHO %and
+	STREAM <> EHMM %and
+	STREAM <> EWHO %then
+	%unset HDATE
+
+%if (TYPE <> PD %and 
+    TYPE <> CD %and
+    TYPE <> PB) %then
+	%unset QUANTILE
+
+%if ( STREAM = MNFM %or
+	STREAM = MFHM %or
+    STREAM = MFAM %or
+    STREAM = MFWM %or
+    STREAM = MHWM %or
+    STREAM = ESMM %or
+    STREAM = EHMM %or
+    STREAM = MAWM )
+	%then
+	%unset STEP
+
+%if ( STREAM = MFHM %and
+	( TYPE = EM %or TYPE = ES %or TYPE = SES) )
+	%then 
+	%unset DATE
+
+%if ( STREAM = MNFH %and
+	( TYPE = EM %or TYPE = ES %or TYPE = SES %or TYPE = ED ) )
+	%then
+	%unset DATE
+
+%if (_VERB = RETRIEVE_ECREGRID %or _VERB = ARCHIVE) %and 
+	(STREAM <> MOFC %and STREAM <> WAMF %and STREAM <> MOFM %and STREAM <> WMFM) %and 
+	(TYPE = CF %or TYPE = EM %or TYPE = ES %or TYPE = SES %or TYPE = TAEM %or TYPE = TAES) %then 
+	%unset ENSEMBLE %unset NUMBER
+
+! For read
+%if _VERB = READ_ECREGRID %and CLASS  <> ANY %then %warning "CLASS  ignored in READ_ECREGRID"
+%if _VERB = READ_ECREGRID %and REPRES <> ANY %then %warning "REPRES ignored in READ_ECREGRID"
+
+%if _VERB = READ_ECREGRID %then 
+	%unset CLASS 
+	%unset REPRES
+
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %and TYPE = FG %and STEP = 0 %and STREAM = OPER  
+	%then 
+		%warning "First Guess step 0 removed"
+		%error   "Please, use STEP=06 instead"
+
+
+! =========================================
+! For wave, there is no step for FG
+%if (STREAM = WAVE %or STREAM = SCWV %or STREAM = DCWV) %and TYPE = FG %and STEP <> 0 %then 
+	%warning "For wave first-guess, step is ignored and set to zero"
+	%set     STEP = 0
+
+! =========================================
+! There are no waves in altitude
+%if STREAM = WAVE %or 
+	STREAM = WAEF %or 
+	STREAM = WEHS %or 
+	STREAM = WEOV %or 
+	STREAM = WAMO %or 
+	STREAM = SCWV %or 
+	STREAM = DCWV %or 
+	STREAM = WVHC %or
+	STREAM = EWHC %or
+	STREAM = MAWV %or
+	STREAM = WASF %or 
+	STREAM = WAMF %or
+	STREAM = WMFM %or
+	STREAM = SWMM %or
+	STREAM = MNFW %or
+	STREAM = MFHW %or
+	STREAM = MFAW %or
+	STREAM = MFWM %or
+	STREAM = MHWM %or
+	STREAM = MAWM %or
+	STREAM = WAMS %or
+	STREAM = DACW %or
+	STREAM = EWDA %or
+	STREAM = LWWV %or
+	STREAM = EWLA %or
+	STREAM = EWMM %or
+	STREAM = EWMO %or
+	STREAM = MSWM %then
+
+	%warning "For wave data, LEVTYPE forced to Surface"
+	%set     LEVTYPE = SFC
+	%unset   LEVELIST
+
+!===========================================================
+
+!
+! Avoid use of ENSEMBLE, CLUSTER and PROBABILITY in new MARS retrieval editors
+
+%if TYPE = PF %and ENSEMBLE = OFF %then %unset ENSEMBLE
+%if (TYPE = CM %or TYPE = CS %or TYPE = CR) %and CLUSTER = OFF %then %unset CLUSTER
+%if (TYPE = FP) %and PROBABILITY = OFF %then %unset PROBABILITY
+
+%if STREAM <> WAVE %and 
+	STREAM <> SCWV %and 
+	STREAM <> DCWV %and 
+	STREAM <> MAWV %and 
+	STREAM <> WASF %and 
+
+	STREAM <> WAEF %and 
+	STREAM <> EWDA %and 
+
+	STREAM <> MNFW %and 
+	STREAM <> MFHW %and 
+	STREAM <> MFAW %and 
+
+	STREAM <> WVHC %and
+	STREAM <> EWHC %and
+
+	STREAM <> ENWH %and
+	STREAM <> EWHO %and
+
+	STREAM <> LWWV %and
+	STREAM <> EWLA %and
+
+	STREAM <> WAMF %then 
+	%unset FREQUENCY %unset DIRECTION
+
+! Avoid visiting all mars tree on the server
+%if (_VERB = LIST %and OUTPUT <> BROWSER %and (%not CLASS))   %then 
+	%warning "Missing CLASS. Force to Operations"
+	%set CLASS= OD
+
+%if (_VERB = LIST %and OUTPUT <> BROWSER %and CLASS <> RD  %and (%not DATE) %and (%not PSEUDODATE) ) %then 
+	%warning "Missing DATE. Force to yesterday"
+	%set DATE = -1
+
+%if (_VERB = LIST %and OUTPUT <> BROWSER %and CLASS <> RD  %and (%not STREAM) ) %then 
+	%warning "Missing STREAM. Force to Daily archive"
+	%set STREAM = OPER
+
+%if (_VERB = LIST %and OUTPUT <> BROWSER %and CLASS <> RD  %and (%not EXPVER) ) %then 
+	%warning "Missing EXPVER. Force to 1"
+	%set EXPVER = 1
+
+%if (_VERB = LIST %and OUTPUT <> BROWSER %and CLASS <> RD  %and (%not TYPE) ) %then 
+	%warning "Missing TYPE. Force to Analysis"
+	%set TYPE = AN
+
+%if (_VERB = LIST %and OUTPUT <> BROWSER %and CLASS = RD  %and (%not EXPVER) ) %then 
+	%error "Missing EXPVER. Please, specify one"
+
+%if (_VERB = LIST %and OUTPUT = TREE %and (%not HIDE)) %then 
+	%set HIDE=FILE/LENGTH/MISSING/OFFSET/ID/COST/MONTH/YEAR
+
+
+%if (_VERB = RETRIEVE_ECREGRID %and EXPVER = 8 %and (%not GRID)) %then
+	%warning "To get old EXPVER=8 SST, please specify:"
+	%warning "ORIGIN = KWBC, EXPVER = 1, GRID = 0.5/0.5"
+	%set ORIGIN = KWBC
+	%set EXPVER = 1
+	%set GRID   = 0.5/0.5
+
+%if (_VERB = RETRIEVE_ECREGRID %and EXPVER = 8) %then
+	%warning "To get SST, specify the following:"
+	%warning "ORIGIN = KWBC, EXPVER = 1"
+	%set ORIGIN = KWBC
+	%set EXPVER = 1
+
+%if (_VERB = RETRIEVE_ECREGRID %and EXPVER = 7 %and (%not GRID)) %then
+	%warning "To get old EXPVER=7 SST, please specify:"
+	%warning "ORIGIN = KWBC, EXPVER = 1, GRID = 2/2"
+	%set ORIGIN = KWBC
+	%set EXPVER = 1
+	%set GRID   = 2/2
+
+%if (_VERB = RETRIEVE_ECREGRID %and EXPVER = 7) %then
+	%warning "To get SST, specify the following:"
+	%warning "ORIGIN = KWBC, EXPVER = 1"
+	%set ORIGIN = KWBC
+	%set EXPVER = 1
+
+
+! Observation retrieval from new MARS
+%if (_VERB = RETRIEVE_ECREGRID %and (STREAM = SSBT %or STREAM = E1)) %then
+	%warning "Changed STREAM to OPER"
+	%set STREAM = OPER
+
+%if (_VERB = RETRIEVE_ECREGRID %and STREAM = SSMI) %then
+	%warning "Changed STREAM=OPER, TYPE=OB"
+	%set STREAM = OPER
+	%set TYPE = OB
+
+%if (ACCURACY = N) %and (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %then
+	%unset ACCURACY
+
+%if (ACCURACY = R %or ACCURACY = L) %then
+	%warning "ACCURACY Low or Reduced force to 8 bits"
+	%set ACCURACY = 8
+
+%if (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) 
+	%and _VERB = RETRIEVE_ECREGRID 
+	%and SOURCE 
+	%and (%not DATABASE) %then
+	%set DATABASE = file
+
+%if (_VERB = ARCHIVE %or 
+	 _VERB = FLUSH %or 
+	 _VERB = STAGE %or 
+	 _VERB = LIST %or 
+	 _VERB = REMOVE)
+	%and (EXPVER=fdy1) 
+	%and (%not DATABASE) %then
+	%set DATABASE = mars grib2
+
+
+%if (_VERB = ARCHIVE %or 
+	 _VERB = FLUSH %or 
+	 _VERB = STAGE %or 
+	 _VERB = LIST %or 
+	 _VERB = REMOVE)
+	%and (CLASS=E4 %or 
+	      CLASS=EI %or
+		  CLASS=ER %or 
+		  CLASS=PV %or 
+		  CLASS=DM %or 
+		  CLASS=CS %or 
+		  CLASS=TO %or 
+		  CLASS=DT %or 
+		  CLASS=EL %or 
+		  CLASS=YT %or 
+		  CLASS=MC %or 
+		  CLASS=EM %or 
+		  CLASS=E2 %or 
+		  CLASS=NR %or 
+		  CLASS=RM %or 
+		  CLASS=ME %or 
+		  CLASS=EN) 
+	%and (%not DATABASE) %then
+	%set DATABASE = marser
+
+%if (_VERB = ARCHIVE %or 
+	 _VERB = FLUSH %or 
+	 _VERB = STAGE %or 
+	 _VERB = LIST %or 
+	 _VERB = REMOVE)
+	%and (CLASS=TI %or
+	      CLASS=S2)
+	%and (%not DATABASE) %then
+	%set DATABASE = marsth
+
+%if (_VERB = ARCHIVE %or 
+	 _VERB = STAGE %or 
+	 _VERB = FLUSH %or 
+	 _VERB = LIST %or 
+	 _VERB = REMOVE)
+	%and CLASS=OD 
+	%and EXPVER < 10
+	%and (%not DATABASE) %then
+	%set DATABASE = marsod
+
+%if (_VERB = ARCHIVE %or 
+	 _VERB = STAGE %or 
+	 _VERB = FLUSH %or 
+	 _VERB = LIST %or 
+	 _VERB = REMOVE)
+	%and CLASS=OD 
+	%and EXPVER > 9
+	%and (%not DATABASE) %then
+	%set DATABASE = marsode
+
+%if (_VERB = ARCHIVE %or 
+	 _VERB = STAGE %or 
+	 _VERB = FLUSH %or 
+	 _VERB = LIST %or 
+	 _VERB = REMOVE)
+	%and (CLASS=CO %or CLASS=SR %or CLASS=LA %or CLASS=MS)
+	%and (%not DATABASE) %then
+	%set DATABASE = marsms
+
+%if (_VERB = ARCHIVE %or 
+	 _VERB = FLUSH %or 
+	 _VERB = STAGE %or 
+	 _VERB = REMOVE %or 
+	 _VERB = LIST)
+	%and (CLASS<>E4 %and 
+	      CLASS<>EI %and
+	      CLASS<>TI %and
+		  CLASS<>ER %and 
+		  CLASS<>PV %and 
+		  CLASS<>DM %and 
+		  CLASS<>OD %and 
+		  CLASS<>TO %and
+		  CLASS<>DT %and
+		  CLASS<>EN %and
+		  CLASS<>CO %and
+		  CLASS<>RM %and
+		  CLASS<>SR %and
+		  CLASS<>LA %and
+		  CLASS<>EL %and
+		  CLASS<>MS %and
+		  CLASS<>ME %and
+		  CLASS<>EM %and
+		  CLASS<>E2 %and
+		  CLASS<>MC %and
+		  CLASS<>NR %and
+		  CLASS<>RM %and
+		  CLASS<>CS)
+	%and (%not DATABASE) %then
+	%set DATABASE = marsrd
+
+# ocean
+%if LEVTYPE = DP
+	%and (SECTION = M %or SECTION = Z) 
+	%and (PRODUCT = INST %or PRODUCT = TACC %or PRODUCT = TAVG)
+	%then
+	%unset LEVELIST
+
+# Special case for TIMS, V
+%if LEVTYPE = DP
+	%and SECTION = V
+	%and PRODUCT = TIMS 
+	%then
+	%unset LEVELIST
+
+%if LEVTYPE = DP
+	%and TYPE = OR
+	%and (%not PRODUCT)
+	%then
+		%warning "Default PRODUCT for Ocean ReAnalysis set to Instantaneous"
+		%set PRODUCT = INST
+
+
+# Year & month
+%if _VERB = RETRIEVE_ECREGRID %and (YEAR %or MONTH) %then
+	%unset DATE
+
+# Boundary Conditions (BC)
+%if _VERB = RETRIEVE_ECREGRID %and CLASS = OD %and TIME = 00 %and STREAM = OPER %and DATE >= 20000906 %and EXPVER = 02
+%then 
+	%warning "From 20000906 onwards, please use EXPVER=1"
+	%warning "STREAM=SCDA for Boundary Conditions Project data"
+
+%if _VERB = RETRIEVE_ECREGRID %and CLASS = OD %and TIME = 00 %and STREAM = WAVE %and DATE >= 20000906 %and EXPVER = 02
+%then 
+	%warning "From 20000906 onwards, please use EXPVER=1"
+	%warning "STREAM=SCWV for Boundary Conditions wave data"
+
+%if (_VERB = ARCHIVE %and (STREAM = SFMM %or STREAM = SWMM %or STREAM = SMMA) %and VERIFY) %then
+	%error "Please, use FCMONTH instead of VERIFY for archiving"
+	%error "Exiting..."
+
+%if ((CLASS <> OD %and CLASS <> EN %and CLASS <> ME) %and SYSTEM ) %then
+	%unset SYSTEM
+
+# A bit of paranoia...
+
+%if _VERB = REMOVE %and CLASS = OD %and %not DATABASE %then
+	%set DATABASE = dhstest
+	
+# That should be disabled in mars.def anyway
+
+%if _VERB = REMOVE %and (
+	CLASS = ER %or
+	CLASS = E4 %or 
+	CLASS = EI %or 
+	CLASS = EM %or 
+	CLASS = E2 %or 
+	CLASS = CS %or 
+	CLASS = PV %or 
+	CLASS = TO %or 
+	CLASS = DT %or 
+	CLASS = PE %or 
+	CLASS = MC %or 
+	CLASS = ME %or 
+	CLASS = DM
+	) %then
+	%error "Cannot remove this data..."
+
+
+%if (CLASS = IT %and MODEL = HRM) %or (CLASS = CO) %then
+	%warning "Post-processing directives are ignored"
+	%set _POSTPROCESSING = 0
+
+%if (STREAM = MODA %or STREAM = MSDA %or STREAM = EDMO %or STREAM = EWMO) %and (CLASS <> ER) %then
+	%unset TIME
+	%unset STEP
+
+%if (STREAM = MDFA) %then
+	%unset TIME
+
+%if (CLASS <> TO %and CLASS <> DT) %or STREAM <> SEAP %then
+	%unset LEADTIME
+	%unset OPTTIME
+
+%if (CLASS=DT) %then
+	%unset METHOD
+
+#########################################
+# Migration from old images to new images
+#########################################
+
+# Meteosat
+%if (TYPE=IM %and OBSTYPE=0 %and (IDENT=52 %or IDENT=53 %or IDENT=54))  %then 
+	%warning "Replacing OBSTYPE=0 by CHANNEL=2, INSTRUMENT=205"
+	%unset OBSTYPE 
+	%set CHANNEL    = 2 
+	%set INSTRUMENT = 205
+
+%if (TYPE=IM %and OBSTYPE=10 %and (IDENT=52 %or IDENT=53 %or IDENT=54))  %then 
+	%warning "Replacing OBSTYPE=10 by CHANNEL=3, INSTRUMENT=205"
+	%unset OBSTYPE 
+	%set CHANNEL    = 3 
+	%set INSTRUMENT = 205
+
+%if (TYPE=IM %and OBSTYPE=20 %and (IDENT=52 %or IDENT=53 %or IDENT=54))  %then 
+	%warning "Replacing OBSTYPE=10 by CHANNEL=1, INSTRUMENT=205"
+	%unset OBSTYPE 
+	%set CHANNEL    = 1 
+	%set INSTRUMENT = 205
+
+# GOES
+%if (TYPE=IM %and OBSTYPE=0 %and (IDENT=252 %or IDENT=253 %or IDENT=254 %or IDENT=255 %or IDENT=256)) %then 
+	%warning "Replacing OBSTYPE=0 by CHANNEL=4, INSTRUMENT=615"
+	%unset OBSTYPE 
+	%set CHANNEL    = 4 
+	%set INSTRUMENT = 615
+
+%if (TYPE=IM %and OBSTYPE=10 %and (IDENT=252 %or IDENT=253 %or IDENT=254 %or IDENT=255 %or IDENT=256)) %then 
+	%warning "Replacing OBSTYPE=10 by CHANNEL=1, INSTRUMENT=615"
+	%unset OBSTYPE 
+	%set CHANNEL    = 1 
+	%set INSTRUMENT = 615
+
+%if (TYPE=IM %and OBSTYPE=20 %and (IDENT=252 %or IDENT=253 %or IDENT=254 %or IDENT=255 %or IDENT=256)) %then 
+	%warning "Replacing OBSTYPE=20 by CHANNEL=3, INSTRUMENT=615"
+	%unset OBSTYPE 
+	%set CHANNEL    = 3 
+	%set INSTRUMENT = 615
+
+################################################
+# end of Migration from old images to new images
+################################################
+
+%if (FCMONTH %or FCPERIOD)  %and (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %then 
+	%unset STEP
+
+# %if (STREAM = SFMM %or STREAM = SWMM %or STREAM = SMMA %or STREAM = MMSA) %then
+# 	%unset STEP
+# 
+
+%if CLASS = TI %or CLASS = S2 %then                %unset DOMAIN
+%if CLASS = TI %and TYPE = CF %then %set NUMBER=0
+%if CLASS = TI %and TYPE = FC %then %set STREAM=OPER
+%if CLASS = TI %and (%not EXPVER) %then %set EXPVER=PROD
+
+%if CLASS = DM %and TYPE = FC %then %set TIME=0
+
+# ANOFFSET not valid unless Long window 4dvar 
+%if STREAM <> LWDA %and 
+	STREAM <> LWWV %and
+	STREAM <> ELDA %and 
+	STREAM <> EWLA %then
+	%unset ANOFFSET
+
+
+# ERA Interim Data Server at full resolution
+%if ((DATASET = interim_full_daily)  %and
+    ((TYPE <> AN %and TYPE <> FC) %or
+	 (TYPE = FC %and (STEP > 12 %or LEVTYPE <> SFC)))) %then
+	 %error "Dataset ERA-Interim full resolution available only for Analysis and Forecast surface fluxes at time-step <= 12"
+	 %fail
+
+
+# Double-archiving marsrd/marsrd-cluster
+#%if ((_VERB = ARCHIVE %or 
+#	 _VERB = FLUSH %or 
+#	 _VERB = REMOVE) %and 
+#    (DATABASE = marsrd)) %then %set DATABASE = marsrd/marsrd-cluster
+
+
+#%if ((_VERB = ARCHIVE %or 
+#	 _VERB = FLUSH %or 
+#	 _VERB = REMOVE) %and 
+#     (DATABASE = marstest)) %then %set DATABASE = marstest/marsdev-core
+
+%include "rt_by_obsgroup.chk"
diff --git a/share/metview/etc/MarsG2Def b/share/metview/etc/MarsG2Def
index f19312c..35ba792 100644
--- a/share/metview/etc/MarsG2Def
+++ b/share/metview/etc/MarsG2Def
@@ -94,6 +94,7 @@ V VELOCITY                                         ;      V ;     132
     CLASS
     {
 		TIGGE       ;   TI
+		S2S         ;   S2
 
     } = TI
 
@@ -132,9 +133,36 @@ V VELOCITY                                         ;      V ;     132
 		LFPW
 
 	# TIGGE LAM
+	# old
+#		COSMOLEPS-ARPASIMC-EU
+#		MOGREPS-MO-EUA
+#		AEMET-SREPS-MM-EUAT
+#		SRNWP-PEPS
+#		NORLAMEPS
+#		ALADIN-LAEF
+#		COSMO-DE-EPS
+#		COSMO-SREPS-BO-EU
+#		GLAMEPS
+#		PEARCE
+#		DMI-HIRLAM
+#		OMSZ-ALADIN-EPS
+
+	# new
 		COSMOLEPS-ARPASIMC-EU
+		ALADINLAEF-ZAMG-EU
+		COSMODEEPS-DWD-EU
+		ALADINHUNEPS-OMSZ-EU
+		SRNWPPEPS-DWD-EUA
+		MOGREPS-MO-EUA
+		GLAMEPS-HIRLAMCONS-EU
+		SREPS-AEMET-EUA
+		HIRLAM-DMI-EU
+		AROMEEPS-MF-EU
+
 		/
 		ALL
+
+
 	}
 
     MODEL
@@ -593,6 +621,7 @@ LIST    ;   LIST FDF ENTRIES AND CFS FILES  ;   TIGGE
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
 		OFF         ;   OFF
     } = OFF
     
@@ -1401,6 +1430,7 @@ RETRIEVE_G2    ;   Retrieval of data   ;   TIGGE
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
     } = P
     
     DISP [ java_control = CHOICE,
@@ -1471,6 +1501,11 @@ RETRIEVE_G2    ;   Retrieval of data   ;   TIGGE
 		NEAREST NEIGHBOUR
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
 		OFF
 	} = OFF
 
@@ -1862,6 +1897,11 @@ READ_G2 ; X; TIGGEMETVIEW
         NEAREST NEIGHBOUR  
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
         OFF   
 		ANY
     } = ANY
diff --git a/share/metview/etc/MarsG2Rules b/share/metview/etc/MarsG2Rules
index 2362cf5..c31367f 100644
--- a/share/metview/etc/MarsG2Rules
+++ b/share/metview/etc/MarsG2Rules
@@ -368,6 +368,8 @@
 	STREAM = EWDA %or
 	STREAM = LWWV %or
 	STREAM = EWLA %or
+	STREAM = EWMM %or
+	STREAM = EWMO %or
 	STREAM = MSWM %then
 
 	%warning "For wave data, LEVTYPE forced to Surface"
@@ -514,6 +516,8 @@
 		  CLASS=MC %or 
 		  CLASS=EM %or 
 		  CLASS=E2 %or 
+		  CLASS=NR %or 
+		  CLASS=RM %or 
 		  CLASS=ME %or 
 		  CLASS=EN) 
 	%and (%not DATABASE) %then
@@ -524,7 +528,8 @@
 	 _VERB = STAGE %or 
 	 _VERB = LIST %or 
 	 _VERB = REMOVE)
-	%and (CLASS=TI)
+	%and (CLASS=TI %or
+	      CLASS=S2)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsth
 
@@ -553,7 +558,7 @@
 	 _VERB = FLUSH %or 
 	 _VERB = LIST %or 
 	 _VERB = REMOVE)
-	%and (CLASS=CO %or CLASS=SR %or CLASS=LA %or CLASS=MS %or CLASS=4M) 
+	%and (CLASS=CO %or CLASS=SR %or CLASS=LA %or CLASS=MS)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsms
 
@@ -573,7 +578,7 @@
 		  CLASS<>DT %and
 		  CLASS<>EN %and
 		  CLASS<>CO %and
-		  CLASS<>4M %and
+		  CLASS<>RM %and
 		  CLASS<>SR %and
 		  CLASS<>LA %and
 		  CLASS<>EL %and
@@ -582,6 +587,8 @@
 		  CLASS<>EM %and
 		  CLASS<>E2 %and
 		  CLASS<>MC %and
+		  CLASS<>NR %and
+		  CLASS<>RM %and
 		  CLASS<>CS)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsrd
@@ -726,7 +733,7 @@
 # 	%unset STEP
 # 
 
-%if CLASS = TI %then                %unset DOMAIN
+%if CLASS = TI %or CLASS = S2 %then                %unset DOMAIN
 %if CLASS = TI %and TYPE = CF %then %set NUMBER=0
 %if CLASS = TI %and TYPE = FC %then %set STREAM=OPER
 %if CLASS = TI %and (%not EXPVER) %then %set EXPVER=PROD
diff --git a/share/metview/etc/MarsOdbDef b/share/metview/etc/MarsOdbDef
index e784aed..c8217b6 100644
--- a/share/metview/etc/MarsOdbDef
+++ b/share/metview/etc/MarsOdbDef
@@ -121,7 +121,8 @@ DIRECT SOLAR RADIATION                        ;  DSRP  ;  047
 DIVERGENCE                                    ;  D     ;  155
 DOWNWARD UV RADIATION AT THE SURFACE          ;  UVB   ;  057
 DUCT BASE HEIGHT                              ;  DCTB  ;  228017   ; 017.228
-E-W COMPONENT SURFACE STRESS                  ;  EWSS  ;  180
+EASTWARD GRAVITY WAVE SURFACE STRESS          ;  LGWS  ;  195
+EASTWARD TURBULENT SURFACE STRESS             ;  EWSS  ;  180
 E-W OROGRAPHIC VARIANCE.                      ;  EWOV  ;  190
 EQUIVALENT POTENTIAL TEMPERATURE              ;  EQPT  ;  004
 ETA-COORDINATE VERTICAL VELOCITY              ;  ETADOT ; 077
@@ -153,8 +154,8 @@ ICE SURFACE TEMPERATURE LAYER 2               ;  ISTL2 ;  036
 ICE SURFACE TEMPERATURE LAYER 3               ;  ISTL3 ;  037
 ICE SURFACE TEMPERATURE LAYER 4               ;  ISTL4 ;  038
 INSTANT MOISTURE FLUX                         ;  IE    ;  232
-INSTANT X SURFACE STRESS                      ;  IEWS  ;  229
-INSTANT Y SURFACE STRESS                      ;  INSS  ;  230
+INSTANTANEOUS EASTWARD TURBULENT SURFACE STRESS   ;  IEWS  ; 229
+INSTANTANEOUS NORTHWARD TURBULENT SURFACE STRESS   ;  INSS  ; 230
 INSTANTANEOUS SURFACE SENSIBLE HEAT FLUX      ;  ISHF  ;  231
 K INDEX                                       ;  KX    ;  260121
 LAKE COVER                                    ;  CL    ;   26
@@ -170,7 +171,6 @@ LAND SEA MASK                                 ;  LSM   ;  172
 LARGE SCALE PRECIPITATION                     ;  LSP   ;  142
 LARGE SCALE PRECIPITATION FRACTION            ;  LSPF  ;  050
 LARGE SCALE SNOW-FALL                         ;  LSF   ;  240
-LATITUDINAL GRAVITYWAVE STRESS                ;  LGWS  ;  195
 LEAF AREA INDEX LOW VEGETATION                ;  LAILV ;   66
 LEAF AREA INDEX HIGH VEGETATION               ;  LAIHV ;   67
 LN SURFACE PRESSURE                           ;  LNSP  ;  152
@@ -216,7 +216,6 @@ MEAN WAVE PERIOD BASED ON SECOND MOMENT FOR SWELL      ; P2PS  ; 227
 MEAN WAVE PERIOD BASED ON SECOND MOMENT FOR WIND WAVES ; P2WW  ; 224
 MEAN WIND DIRECTION                           ;  MDWI  ;  242
 MEDIUM CLOUD COVER                            ;  MCC   ;  187
-MERIDIONAL GRAVITY WAVE STRESS                ;  MGWS  ;  196
 MINIMUM TEMPERATURE AT 2M                     ;  MN2T  ;  202
 MINIMUM TEMPERATURE AT 2M ANOMALY             ;  MN2TA  ;  202.171
 MINIMUM TEMPERATURE AT 2M IN THE LAST 6 HOURS ANOMALY  ;  MN2T6A  ;  122.171
@@ -225,7 +224,8 @@ MINIMUM TEMPERATURE AT 2M IN THE LAST 3 HOURS  ;  MN2T3 ;  228027 ; 027.228
 MINIMUM TEMPERATURE AT 2M IN THE LAST 24 HOURS ;  MN2T24 ;  52
 MINIMUM VERTICAL GRADIENT OF REFRACTIVITY INSIDE TRAPPING LAYER ; DNDZN ; 228015 ; 015.228
 MONTGOMERY POTENTIAL                          ;  MONT  ;  053
-N-S COMPONENT SURFACE STRESS                  ;  NSSS  ;  181
+NORTHWARD GRAVITY WAVE SURFACE STRESS         ;  MGWS  ;  196
+NORTHWARD TURBULENT SURFACE STRESS            ;  NSSS  ;  181
 N-S OROGRAPHIC VARIANCE                       ;  NSOV  ;  191
 NE-SW OROGRAPHIC VARIANCE                     ;  NWOV  ;  192
 NS GRAVITY WAVE DRAG                          ;  NSGD  ;  221
@@ -420,6 +420,7 @@ VERTICAL DIFFUSION OF ZONAL WIND              ;  VDZW  ;  218
 VERTICAL VELOCITY                             ;  W     ;  135
 VERTICALLY INTEGRATED MERIDIONAL HEAT TRANSPORT    ;  MHT   ;  170
 VERTICALLY INTEGRATED MERIDIONAL VOLUME TRANSPORT  ;  MTR   ;  168
+VERTICALLY INTEGRATED MOISTURE DIVERGENCE     ;  VIMD  ;  213
 VERTICALLY INTEGRATED ZONAL HEAT TRANSPORT         ;  ZHT   ;  169
 VERTICALLY INTEGRATED ZONAL VOLUME TRANSPORT       ;  ZTR   ;  167
 VOLUMETRIC SOIL WATER LAYER 1                 ;  SWVL1 ;  039
@@ -436,7 +437,7 @@ WAVE SPECTRAL PEAKEDNESS                      ;  WSP   ; 254
 WILTING POINT                                 ;  WILT  ; 228171  ; 171.228
 WIND GUST AT 10 METRES                        ;  10FG  ;  049
 WIND GUST AT 10 METRES INDEX                  ;  10FGI ;  049
-WIND GUST AT 10 METRES IN THE LAST 6 HOURS     ;  10FG6 ;  123
+WIND GUST AT 10 METRES IN THE LAST 6 HOURS     ;  10FG6 ;  123.128
 WIND GUST AT 10 METRES IN THE LAST 3 HOURS     ;  10FG3 ;  228028 ; 028.228
 WIND SPEED                                    ;  WS    ;   10
 ZERO DEGREE LEVEL                             ;  DEG0L ; 228024  ; 24.228
@@ -683,7 +684,8 @@ TOTAL AEROSOL OPTICAL DEPTH AT 1240NM         ; AOD1240 ; 216.210
 		ESAT        ; EA
 		EPST        ; EP
 
-        EURO4M      ; 4M
+        EURO4M      ; RM
+        20CR        ; NCEP 20CR ; NR
 
 		! Member stats
 
@@ -790,6 +792,7 @@ TOTAL AEROSOL OPTICAL DEPTH AT 1240NM         ; AOD1240 ; 216.210
 		FCSTDEV
 		ODB FEEDBACK                ; OFB
 		MONDB FEEDBACK              ; MFB
+		ODB ANALYSIS INPUT          ; OAI
 
     } = AN
     
@@ -1031,7 +1034,7 @@ GRIB IMAGES #= (0/1/10/20)
 
 # Extractions
 
-BUFR = (1/3/9/11/13/19/21/22/23/28/61/62/63/82/83/84/85/86/87/91/92/95/96/101/102/103/106/110/140/142/144/145/164)
+BUFR = (1/3/9/11/13/19/21/22/23/28/61/62/63/82/83/84/85/86/87/91/92/95/96/101/102/103/106/110/140/142/144/145/147/164)
 WAVESCAT = (121)
 SCAT = (122)
 RALT = (123)
@@ -1049,6 +1052,7 @@ OSTIA = (26)
 ENVISAT_MERIS = (212)
 ATMS = (201)
 CRIS = (202)
+SMOS = (203)
 
 # FeedBack
 
@@ -1070,7 +1074,7 @@ FBWINDSAT = (156)
 
 # Type LSD (NSD)
 
-	LAND SURFACE DATA         ; LSD = (1/2/3/4/7/140/165/28)
+	LAND SURFACE DATA         ; LSD = (1/2/3/4/7/28/140/147/165)
 
 	SYNOP LAND                ; S   ; 1
 	SYNOP RECORD 2 LAND       ; S2  ; 2
@@ -1078,6 +1082,7 @@ FBWINDSAT = (156)
 	SYNOP AUTO RECORD 2 LAND  ; SA2 ; 4
 	SOIL AND EARTH TEMPERATURE; SET ; 7
 	METAR                     ; METAR ; 140
+	AUTO METAR                ; AMETAR ; 147
 	SNOW COVER                ; SNOWCOVER ; SNOW ; 165
 	SNOW DEPTH                ; SNOWD ; 28
 
@@ -1126,6 +1131,7 @@ VERTICAL SOUNDINGS SATELLITE ; VSS = (51/53/54/55/56/57/59/61/62/63/65/71/72/73/
 	ATOVS PRODUCTS         ;  ATOP  ; 56
 	AIRS                   ;  AIRS  ; 57
 	ADVANCED MICROWAVE SCANNING RADIOMETER  ;  AMSRE ; 59
+	ADVANCED MICROWAVE SCANNING RADIOMETER 2 ;  AMSR2 ; 60
 	SATEM MEAN TEMPERATURE ;  SMT   ; 61
 	SATEM WATER            ;  SW    ; 62
 	SATEM HIGHER LEVEL     ;  SHL   ; 63
@@ -1706,6 +1712,11 @@ ARCHIVE ;   Archives data   ;   MARS
         NEAREST NEIGHBOUR  
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
         OFF   
     } = OFF
 
@@ -2240,6 +2251,7 @@ LIST    ;   LIST FDF ENTRIES AND CFS FILES  ;   MARS
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
 		OFF         ;   OFF
     } = OFF
     
@@ -2269,14 +2281,6 @@ LIST    ;   LIST FDF ENTRIES AND CFS FILES  ;   MARS
     {
         GLOBE               ;  GLOBE;  G
         EUROPE              ;  EUROPE; E
-        NORTHERN HEMISPHERE OCTANT 1    ;   N1
-        NORTHERN HEMISPHERE OCTANT 2    ;   N2
-        NORTHERN HEMISPHERE OCTANT 3    ;   N3
-        NORTHERN HEMISPHERE OCTANT 4    ;   N4
-        SOUTHERN HEMISPHERE OCTANT 1    ;   S1
-        SOUTHERN HEMISPHERE OCTANT 2    ;   S2
-        SOUTHERN HEMISPHERE OCTANT 3    ;   S3
-        SOUTHERN HEMISPHERE OCTANT 4    ;   S4
         *   
         /   
 		OFF; OFF
@@ -2503,6 +2507,9 @@ STAGE    ;   STAGE FIELDS ;    MARS
 		OFF    ; OFF
 	} = OFF
 
+    REPORTYPE { &_DUMMY&REPORTYPE } = OFF
+
+
     PARAM
     {
         ALL             ;   ALL
@@ -3647,6 +3654,7 @@ RETRIEVE_ODB    ;   Retrieval of data   ;   MARS
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
     } = P
     
     DISP [ java_control = CHOICE,
@@ -3719,6 +3727,11 @@ RETRIEVE_ODB    ;   Retrieval of data   ;   MARS
 		NEAREST NEIGHBOUR
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
 		OFF
 	} = OFF
 
@@ -3732,14 +3745,6 @@ RETRIEVE_ODB    ;   Retrieval of data   ;   MARS
     {
         GLOBE                           ;   G
         EUROPE                          ;   E 
-        NORTHERN HEMISPHERE OCTANT 1    ;   N1
-        NORTHERN HEMISPHERE OCTANT 2    ;   N2
-        NORTHERN HEMISPHERE OCTANT 3    ;   N3
-        NORTHERN HEMISPHERE OCTANT 4    ;   N4
-        SOUTHERN HEMISPHERE OCTANT 1    ;   S1
-        SOUTHERN HEMISPHERE OCTANT 2    ;   S2
-        SOUTHERN HEMISPHERE OCTANT 3    ;   S3
-        SOUTHERN HEMISPHERE OCTANT 4    ;   S4
         *   
         /   
 		OFF
@@ -4268,6 +4273,11 @@ READ_ODB ; X; METVIEW
         NEAREST NEIGHBOUR  
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
         OFF   
 		ANY
     } = ANY
@@ -5667,6 +5677,7 @@ FETCH    ;   Fetch data   ;   MARS
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
     } = P
     
     RESOL [ java_control = CHOICE_TEXT_2, java_section = DATA, java_hidden = FALSE ]
@@ -5692,14 +5703,6 @@ FETCH    ;   Fetch data   ;   MARS
     {
         GLOBE               ;  GLOBE;  G
         EUROPE              ;  EUROPE; E
-        NORTHERN HEMISPHERE OCTANT 1    ;   N1
-        NORTHERN HEMISPHERE OCTANT 2    ;   N2
-        NORTHERN HEMISPHERE OCTANT 3    ;   N3
-        NORTHERN HEMISPHERE OCTANT 4    ;   N4
-        SOUTHERN HEMISPHERE OCTANT 1    ;   S1
-        SOUTHERN HEMISPHERE OCTANT 2    ;   S2
-        SOUTHERN HEMISPHERE OCTANT 3    ;   S3
-        SOUTHERN HEMISPHERE OCTANT 4    ;   S4
         *   
         /   
     } = G
@@ -6153,6 +6156,7 @@ BROWSE    ;   LIST FDF ENTRIES AND CFS FILES  ;   MARS
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
 		OFF         ;   OFF
     } 
     
@@ -6176,14 +6180,6 @@ BROWSE    ;   LIST FDF ENTRIES AND CFS FILES  ;   MARS
     {
         GLOBE               ;  GLOBE;  G
         EUROPE              ;  EUROPE; E
-        NORTHERN HEMISPHERE OCTANT 1    ;   N1
-        NORTHERN HEMISPHERE OCTANT 2    ;   N2
-        NORTHERN HEMISPHERE OCTANT 3    ;   N3
-        NORTHERN HEMISPHERE OCTANT 4    ;   N4
-        SOUTHERN HEMISPHERE OCTANT 1    ;   S1
-        SOUTHERN HEMISPHERE OCTANT 2    ;   S2
-        SOUTHERN HEMISPHERE OCTANT 3    ;   S3
-        SOUTHERN HEMISPHERE OCTANT 4    ;   S4
         *   
         /   
 		OFF; OFF
@@ -6916,6 +6912,7 @@ ERASE    ;   Erase data   ;   MARS
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
     } = P
     
     DISP
@@ -6961,6 +6958,11 @@ ERASE    ;   Erase data   ;   MARS
 		NEAREST NEIGHBOUR
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
 		OFF
 	} = OFF
 
diff --git a/share/metview/etc/MarsOdbRules b/share/metview/etc/MarsOdbRules
index b7931ea..cec9762 100644
--- a/share/metview/etc/MarsOdbRules
+++ b/share/metview/etc/MarsOdbRules
@@ -368,6 +368,8 @@
 	STREAM = EWDA %or
 	STREAM = LWWV %or
 	STREAM = EWLA %or
+	STREAM = EWMM %or
+	STREAM = EWMO %or
 	STREAM = MSWM %then
 
 	%warning "For wave data, LEVTYPE forced to Surface"
@@ -514,6 +516,8 @@
 		  CLASS=MC %or 
 		  CLASS=EM %or 
 		  CLASS=E2 %or 
+		  CLASS=NR %or 
+		  CLASS=RM %or 
 		  CLASS=ME %or 
 		  CLASS=EN) 
 	%and (%not DATABASE) %then
@@ -524,7 +528,8 @@
 	 _VERB = STAGE %or 
 	 _VERB = LIST %or 
 	 _VERB = REMOVE)
-	%and (CLASS=TI)
+	%and (CLASS=TI %or
+	      CLASS=S2)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsth
 
@@ -553,7 +558,7 @@
 	 _VERB = FLUSH %or 
 	 _VERB = LIST %or 
 	 _VERB = REMOVE)
-	%and (CLASS=CO %or CLASS=SR %or CLASS=LA %or CLASS=MS %or CLASS=4M) 
+	%and (CLASS=CO %or CLASS=SR %or CLASS=LA %or CLASS=MS)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsms
 
@@ -573,7 +578,7 @@
 		  CLASS<>DT %and
 		  CLASS<>EN %and
 		  CLASS<>CO %and
-		  CLASS<>4M %and
+		  CLASS<>RM %and
 		  CLASS<>SR %and
 		  CLASS<>LA %and
 		  CLASS<>EL %and
@@ -582,6 +587,8 @@
 		  CLASS<>EM %and
 		  CLASS<>E2 %and
 		  CLASS<>MC %and
+		  CLASS<>NR %and
+		  CLASS<>RM %and
 		  CLASS<>CS)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsrd
@@ -726,7 +733,7 @@
 # 	%unset STEP
 # 
 
-%if CLASS = TI %then                %unset DOMAIN
+%if CLASS = TI %or CLASS = S2 %then                %unset DOMAIN
 %if CLASS = TI %and TYPE = CF %then %set NUMBER=0
 %if CLASS = TI %and TYPE = FC %then %set STREAM=OPER
 %if CLASS = TI %and (%not EXPVER) %then %set EXPVER=PROD
diff --git a/share/metview/etc/MarsRules b/share/metview/etc/MarsRules
index 4a616bf..7a09ed9 100755
--- a/share/metview/etc/MarsRules
+++ b/share/metview/etc/MarsRules
@@ -368,6 +368,8 @@
 	STREAM = EWDA %or
 	STREAM = LWWV %or
 	STREAM = EWLA %or
+	STREAM = EWMM %or
+	STREAM = EWMO %or
 	STREAM = MSWM %then
 
 	%warning "For wave data, LEVTYPE forced to Surface"
@@ -514,6 +516,8 @@
 		  CLASS=MC %or 
 		  CLASS=EM %or 
 		  CLASS=E2 %or 
+		  CLASS=NR %or 
+		  CLASS=RM %or 
 		  CLASS=ME %or 
 		  CLASS=EN) 
 	%and (%not DATABASE) %then
@@ -524,7 +528,8 @@
 	 _VERB = STAGE %or 
 	 _VERB = LIST %or 
 	 _VERB = REMOVE)
-	%and (CLASS=TI)
+	%and (CLASS=TI %or
+	      CLASS=S2)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsth
 
@@ -553,7 +558,7 @@
 	 _VERB = FLUSH %or 
 	 _VERB = LIST %or 
 	 _VERB = REMOVE)
-	%and (CLASS=CO %or CLASS=SR %or CLASS=LA %or CLASS=MS %or CLASS=4M) 
+	%and (CLASS=CO %or CLASS=SR %or CLASS=LA %or CLASS=MS)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsms
 
@@ -573,7 +578,7 @@
 		  CLASS<>DT %and
 		  CLASS<>EN %and
 		  CLASS<>CO %and
-		  CLASS<>4M %and
+		  CLASS<>RM %and
 		  CLASS<>SR %and
 		  CLASS<>LA %and
 		  CLASS<>EL %and
@@ -582,6 +587,8 @@
 		  CLASS<>EM %and
 		  CLASS<>E2 %and
 		  CLASS<>MC %and
+		  CLASS<>NR %and
+		  CLASS<>RM %and
 		  CLASS<>CS)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsrd
@@ -726,7 +733,7 @@
 # 	%unset STEP
 # 
 
-%if CLASS = TI %then                %unset DOMAIN
+%if CLASS = TI %or CLASS = S2 %then                %unset DOMAIN
 %if CLASS = TI %and TYPE = CF %then %set NUMBER=0
 %if CLASS = TI %and TYPE = FC %then %set STREAM=OPER
 %if CLASS = TI %and (%not EXPVER) %then %set EXPVER=PROD
diff --git a/share/metview/etc/MarsTiggeDef b/share/metview/etc/MarsTiggeDef
index 0ebb986..b15ffd4 100644
--- a/share/metview/etc/MarsTiggeDef
+++ b/share/metview/etc/MarsTiggeDef
@@ -94,6 +94,7 @@ V VELOCITY                                         ;      V ;     132
     CLASS
     {
 		TIGGE       ;   TI
+		S2S         ;   S2
 
     } = TI
 
@@ -132,9 +133,36 @@ V VELOCITY                                         ;      V ;     132
 		LFPW
 
 	# TIGGE LAM
+	# old
+#		COSMOLEPS-ARPASIMC-EU
+#		MOGREPS-MO-EUA
+#		AEMET-SREPS-MM-EUAT
+#		SRNWP-PEPS
+#		NORLAMEPS
+#		ALADIN-LAEF
+#		COSMO-DE-EPS
+#		COSMO-SREPS-BO-EU
+#		GLAMEPS
+#		PEARCE
+#		DMI-HIRLAM
+#		OMSZ-ALADIN-EPS
+
+	# new
 		COSMOLEPS-ARPASIMC-EU
+		ALADINLAEF-ZAMG-EU
+		COSMODEEPS-DWD-EU
+		ALADINHUNEPS-OMSZ-EU
+		SRNWPPEPS-DWD-EUA
+		MOGREPS-MO-EUA
+		GLAMEPS-HIRLAMCONS-EU
+		SREPS-AEMET-EUA
+		HIRLAM-DMI-EU
+		AROMEEPS-MF-EU
+
 		/
 		ALL
+
+
 	}
 
     MODEL
@@ -593,6 +621,7 @@ LIST    ;   LIST FDF ENTRIES AND CFS FILES  ;   TIGGE
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
 		OFF         ;   OFF
     } = OFF
     
@@ -1401,6 +1430,7 @@ RETRIEVE_TIGGE    ;   Retrieval of data   ;   TIGGE
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
     } = P
     
     DISP [ java_control = CHOICE,
@@ -1471,6 +1501,11 @@ RETRIEVE_TIGGE    ;   Retrieval of data   ;   TIGGE
 		NEAREST NEIGHBOUR
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
 		OFF
 	} = OFF
 
@@ -1862,6 +1897,11 @@ READ_TIGGE ; X; TIGGEMETVIEW
         NEAREST NEIGHBOUR  
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
         OFF   
 		ANY
     } = ANY
diff --git a/share/metview/etc/MarsTiggeRules b/share/metview/etc/MarsTiggeRules
index 4c13594..b7e07f9 100644
--- a/share/metview/etc/MarsTiggeRules
+++ b/share/metview/etc/MarsTiggeRules
@@ -368,6 +368,8 @@
 	STREAM = EWDA %or
 	STREAM = LWWV %or
 	STREAM = EWLA %or
+	STREAM = EWMM %or
+	STREAM = EWMO %or
 	STREAM = MSWM %then
 
 	%warning "For wave data, LEVTYPE forced to Surface"
@@ -514,6 +516,8 @@
 		  CLASS=MC %or 
 		  CLASS=EM %or 
 		  CLASS=E2 %or 
+		  CLASS=NR %or 
+		  CLASS=RM %or 
 		  CLASS=ME %or 
 		  CLASS=EN) 
 	%and (%not DATABASE) %then
@@ -524,7 +528,8 @@
 	 _VERB = STAGE %or 
 	 _VERB = LIST %or 
 	 _VERB = REMOVE)
-	%and (CLASS=TI)
+	%and (CLASS=TI %or
+	      CLASS=S2)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsth
 
@@ -553,7 +558,7 @@
 	 _VERB = FLUSH %or 
 	 _VERB = LIST %or 
 	 _VERB = REMOVE)
-	%and (CLASS=CO %or CLASS=SR %or CLASS=LA %or CLASS=MS %or CLASS=4M) 
+	%and (CLASS=CO %or CLASS=SR %or CLASS=LA %or CLASS=MS)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsms
 
@@ -573,7 +578,7 @@
 		  CLASS<>DT %and
 		  CLASS<>EN %and
 		  CLASS<>CO %and
-		  CLASS<>4M %and
+		  CLASS<>RM %and
 		  CLASS<>SR %and
 		  CLASS<>LA %and
 		  CLASS<>EL %and
@@ -582,6 +587,8 @@
 		  CLASS<>EM %and
 		  CLASS<>E2 %and
 		  CLASS<>MC %and
+		  CLASS<>NR %and
+		  CLASS<>RM %and
 		  CLASS<>CS)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsrd
@@ -726,7 +733,7 @@
 # 	%unset STEP
 # 
 
-%if CLASS = TI %then                %unset DOMAIN
+%if CLASS = TI %or CLASS = S2 %then                %unset DOMAIN
 %if CLASS = TI %and TYPE = CF %then %set NUMBER=0
 %if CLASS = TI %and TYPE = FC %then %set STREAM=OPER
 %if CLASS = TI %and (%not EXPVER) %then %set EXPVER=PROD
diff --git a/share/metview/etc/ObjectList b/share/metview/etc/ObjectList
index ba59cd6..4339a43 100644
--- a/share/metview/etc/ObjectList
+++ b/share/metview/etc/ObjectList
@@ -22,6 +22,12 @@ database,
 	name  = ECMWF REST API/ECMWF Web API/Web API,
 	visit = false
 
+database,
+	class = apibase,
+	name  = Data Server,
+	datasets = "datasets",
+	visit = false
+
 
 ##############################################
 # Resources definition
@@ -61,9 +67,95 @@ resources,
 	lock_icon 	  = '$METVIEW_DIR_SHARE/icons/lock_icon.icon',
 	bugs_report 	  = '$METVIEW_BIN/BugsReport',
 #	vismod_table      = '$TMPDIR/VisModTable' #VisMod
-	actions           = execute/visualise/edit/examine/save/analyse/duplicate/print/link/delete
+	actions           = execute/visualise/edit/examine/save/analyse/duplicate/print/link/delete/clear/send/compress/extract
 #	actions           = execute/visualise/edit/examine/save/duplicate/print/link/delete
 
+
+
+##################################################################
+# Special folder list
+##################################################################
+
+special_folder,
+    name              = wastebasket,
+    full_name         = '/Wastebasket',
+    class             = WASTEBASKET,
+    x                 = 550,
+    y                 = 450
+
+special_folder,
+    name              = defaults,
+    full_name         = '/System/Defaults',
+    class             = SYSTEM,
+    x                 = 30,
+    y                 = 10
+
+special_folder,
+    name              = temporary,
+    full_name         = '/System/$MV_TMPDIR_LINK',
+    class             = TEMPORARY,
+    x                 = 375,
+    y                 = 200
+
+special_folder,
+    name              = preferences,
+    full_name         = '/System/Preferences',
+    class             = SYSTEM,
+    x                 = 80,
+    y                 = 10
+
+special_folder,
+    name              = general,
+    full_name         = '/System/Preferences/General',
+    class             = GENERAL_PREFERENCES,
+    x                 = 0,
+    y                 = 0
+
+special_folder,
+    name              = templates,
+    full_name         = '/System/Templates',
+    class             = SYSTEM
+
+special_folder,
+    name              = system_templates,
+    full_name         = '/System/System Templates',
+    class             = SYSTEM,
+    linked_to         = '$METVIEW_LINK_DIR/Templates'
+
+special_folder,
+    name              = stationary,
+    full_name         = '/System/Drawers',
+    class             = SYSTEM
+
+special_folder,
+    name              = system_stationary,
+    full_name         = '/System/System Drawers',
+    class             = SYSTEM,
+    linked_to         = '$METVIEW_LINK_DIR/Drawers'
+
+#special_folder,
+#    name              = macrolibrary,
+#    full_name         = '/System/MacroLibrary',
+#    class             = SYSTEM,
+#    linked_to         = '$METVIEW_LINK_DIR/MacroLibrary',
+#    x                 = 160,
+#    y                 = 80
+
+special_folder,
+    name              = macros,
+    full_name         = '/System/Macros',
+    class             = SYSTEM,
+    x                 = 140,
+    y                 = 10
+
+special_folder,
+    name              = products,
+    full_name         = '/System/Products',
+    class             = PRODUCT,
+    x                 = 140,
+    y                 = 
+
+
 ##################################################################
 # Interface item list
 ##################################################################
@@ -271,6 +363,28 @@ object,
 	doubleclick_method = Examine
 
 object,
+	class		   = HOME,
+	default_object	   = False,
+#	definition_file	   = '$METVIEW_DIR_SHARE/etc/GenAppDef',
+#	rules_file	   = '$METVIEW_DIR_SHARE/etc/GenAppRules',
+	default_name	   = Metview Home,
+	type		   = Folder,
+	editor_type	   = NoEditor,
+	pixmap		   = '$METVIEW_DIR_SHARE/icons/HOME.icon',
+	doubleclick_method = Examine
+
+object,
+	class		   = PRODUCT,
+	default_object	   = False,
+#	definition_file	   = '$METVIEW_DIR_SHARE/etc/GenAppDef',
+#	rules_file	   = '$METVIEW_DIR_SHARE/etc/GenAppRules',
+	default_name	   = Product Folder,
+	type		   = Folder,
+	editor_type	   = NoEditor,
+	pixmap		   = '$METVIEW_DIR_SHARE/icons/PRODUCT.icon',
+	doubleclick_method = Examine
+
+object,
 	class		   = TEMPORARY,
 	default_object	   = False,
 	definition_file	   = '$METVIEW_DIR_SHARE/etc/GenAppDef',
@@ -305,7 +419,7 @@ object,
 
 object,
 	class		   = MACRO,
-	icon_box	   = Macros,
+	icon_box	   = Basic,
 	check 		   = False,
 	default_object     = False,
 	can_be_created 	   = True,
@@ -330,7 +444,6 @@ object,
 	pixmap		   = '$METVIEW_DIR_SHARE/icons/SHELL.icon'
 
 
-
 ######################################
 # Mars / GRIB filter objects
 ######################################
@@ -338,6 +451,7 @@ object,
 object,
 	class		   = RETRIEVE,
 	type		   = Data,
+        icon_box	   = Data access,
 	can_be_created	   = '$TRUE_IF_MARS_AVAILABLE',
 	definition_file	   = '$METVIEW_DIR_SHARE/etc/MarsDef',
 	rules_file	   = '$METVIEW_DIR_SHARE/etc/MarsRules',
@@ -382,6 +496,7 @@ object,
 	default_name	   = GRIB Filter,
 	help_page	   = GRIB_Filter,
 	type		   = Data,
+	icon_box	   = Filters,
 	macro 		   = read,
 	editor_type	   = SimpleEditor,
 	expand 		   = 144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
@@ -503,47 +618,17 @@ object,
     doubleclick_method  = Edit
 
 object,
-    class               = MXSECTVIEW,
-    can_be_created      = True,
-    icon_box            = Views,
-    definition_file     = '$METVIEW_DIR_SHARE/etc/MXSectViewDef',
-    rules_file          = '$METVIEW_DIR_SHARE/etc/MXSectViewRules',
-    default_name        = Cross Section View,
-    help_page           = Cross_Section_View,
-    type                = View,
-    macro               = mxsectview,
-    editor_type         = SimpleEditor,
-    pixmap              = '$METVIEW_DIR_SHARE/icons/MXSECTVIEW.icon',
-    expand              = 128, #expand, but not the default values
-    doubleclick_method  = Edit
-
-object,
-    class               = MVERTPROFVIEW,
-    can_be_created      = True,
-    icon_box            = Views,
-    definition_file     = '$METVIEW_DIR_SHARE/etc/MVertProfViewDef',
-    rules_file          = '$METVIEW_DIR_SHARE/etc/MVertProfViewRules',
-    default_name        = Vertical Profile View,
-    help_page           = Vertical_Profile_View,
-    type                = View,
-    macro               = mvertprofview,
-    editor_type         = SimpleEditor,
-    pixmap              = '$METVIEW_DIR_SHARE/icons/MVPROFVIEW.icon',
-    expand              = 128, #expand, but not the default values
-    doubleclick_method  = Edit
-
-object,
-    class               = MAVERAGEVIEW,
+    class               = ANNOTATIONVIEW,
     can_be_created      = True,
     icon_box            = Views,
-    definition_file     = '$METVIEW_DIR_SHARE/etc/MAverageViewDef',
-    rules_file          = '$METVIEW_DIR_SHARE/etc/MAverageViewRules',
-    default_name        = Average View,
-    help_page           = Average_View,
+    definition_file     = '$METVIEW_DIR_SHARE/etc/AnnotationViewDef',
+    rules_file          = '$METVIEW_DIR_SHARE/etc/AnnotationViewRules',
+    default_name        = Annotation View,
+    help_page           = Annotation_View,
     type                = View,
-    macro               = maverageview,
+    macro               = annotationview,
     editor_type         = SimpleEditor,
-    pixmap              = '$METVIEW_DIR_SHARE/icons/MAVERAGEVIEW.icon',
+    pixmap              = '$METVIEW_DIR_SHARE/icons/ANNOTATIONVIEW.icon',
     expand              = 128, #expand, but not the default values
     doubleclick_method  = Edit
 
@@ -575,11 +660,39 @@ object,
 	help_page	   = Coastlines,
 	type		   = Visdef,
 	macro 		   = mcoast,
-	expand 		   = 128, # EXPAND_NO_DEFAULT
+	expand 		   = 144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
 	editor_type	   = SimpleEditor,
 	pixmap 		   = '$METVIEW_DIR_SHARE/icons/MCOAST.icon'
 
 object,
+	class		   = MTEPHI,
+	icon_box	   = Visual definitions,
+	can_be_created 	   = True,
+	definition_file	   = '$METVIEW_DIR_SHARE/etc/MTEPHIDef',
+	rules_file	   = '$METVIEW_DIR_SHARE/etc/MTEPHIRules',
+	default_name	   = Tephigram Grid,
+	help_page   = Tephigram,
+	type		   = Visdef,
+	macro 		   = mtephi,
+	expand 		   = 144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
+	editor_type	   = SimpleEditor,
+	pixmap 		   = '$METVIEW_DIR_SHARE/icons/TEPHIVIEW.icon'
+
+object,
+	class		   = MTAYLOR,
+	icon_box	   = Visual definitions,
+	can_be_created 	   = True,
+	definition_file	   = '$METVIEW_DIR_SHARE/etc/MTAYLORDef',
+	rules_file	   = '$METVIEW_DIR_SHARE/etc/MTAYLORRules',
+	default_name	   = Taylor Grid,
+	help_page   = Taylor,
+	type		   = Visdef,
+	macro 		   = mtaylor,
+	expand 		   = 144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
+	editor_type	   = SimpleEditor,
+	pixmap 		   = '$METVIEW_DIR_SHARE/icons/MTAYLOR.icon'
+
+object,
 	class		   = PTEXT,
 	icon_box	   = Visual definitions,
 	can_be_created 	   = False,
@@ -845,6 +958,7 @@ object,
  	class		   = TABLE,
  	check 		   = False,
  	type		   = File,
+        icon_box	   = Basic,
  	can_be_created = True,
 	default_name   = Table,
 	macro		   = table,
@@ -856,6 +970,7 @@ object,
  	class		   = TABLE_READER,
  	check 		   = False,
  	type		   = Data,
+        icon_box	   = Filters,
  	can_be_created = True,
 	definition_file	   = '$METVIEW_DIR_SHARE/etc/TableReaderDef',
 	rules_file	   = '$METVIEW_DIR_SHARE/etc/TableReaderRules',
@@ -898,7 +1013,7 @@ object,
 
 object,
 	class 		   = MACROPARAM,
-	icon_box	   = Macros,
+	icon_box	   = Basic,
 	default_object     = False,
 	can_be_created 	   = True,
 	definition_file	   = '$METVIEW_DIR_SHARE/etc/MacroParamDef',
@@ -914,7 +1029,7 @@ object,
 
 object,
 	class		   = COMPUTE,
-	icon_box	   = Macros,
+	icon_box	   = Data processing,
 	can_be_created 	   = True,
 	definition_file	   = '$METVIEW_DIR_SHARE/etc/MarsDef',
 	rules_file	   = '$METVIEW_DIR_SHARE/etc/MarsRules',
@@ -927,7 +1042,7 @@ object,
 
 object,
 	class		   = CLEANFILE,
-	icon_box           = To be organised,
+	icon_box           = Filters,
 	can_be_created     = True,
 	definition_file    = '$METVIEW_DIR_SHARE/etc/CleanFileDef',
 	default_name       = Clean File,
@@ -967,7 +1082,7 @@ object,
 object,
 	class		    = OBSFILTER,
 	can_be_created	    = True,
-	icon_box	    = Filters/Observations,
+	icon_box	    = Filters,
 	definition_file	    = '$METVIEW_DIR_SHARE/etc/ObsFilterDef',
 	rules_file	    = '$METVIEW_DIR_SHARE/etc/ObsFilterRules',
 	default_name	    = Observation Filter,
@@ -980,7 +1095,7 @@ object,
 
 object,
 	class               = POTT_FAMILY,
-	icon_box            = To be organised,
+	icon_box            = Data processing,
 	type                = Family,
 	can_be_created      = True,
 	definition_file     = '$METVIEW_DIR_SHARE/etc/PottFDef',
@@ -1058,7 +1173,7 @@ object,
 
 object,
     class            = DIVROT_FAMILY,
-    icon_box         = To be organised,
+    icon_box         = Data processing,
     type             = Family,
     can_be_created   = True,
     definition_file  = '$METVIEW_DIR_SHARE/etc/DivrotDef',
@@ -1110,7 +1225,7 @@ state,
 object,
     class            = VELSTR_FAMILY,
     type             = Family,
-    icon_box         = To be organised,
+    icon_box         = Data processing,
     can_be_created   = True,
     definition_file  = '$METVIEW_DIR_SHARE/etc/VelstrDef',
     rules_file       = '$METVIEW_DIR_SHARE/etc/VelstrRules',
@@ -1146,11 +1261,26 @@ state,
     output_class     = GRIB,
     service          = Velstr
 
+object,
+	class		= RELHUM2,
+	can_be_created 	= True,
+	definition_file	= '$METVIEW_DIR_SHARE/etc/RelHumDef',
+	default_name	= Relative Humidity,
+	type		= Data,
+	macro 		= relhum,
+	editor_type	= SimpleEditor,
+	pixmap 		= '$METVIEW_DIR_SHARE/icons/RELHUM.icon'
+
+
+state,
+	class    = RELHUM2,
+	output_class = GRIB,
+	service  = Relhum
 
 
 object,
 	class               = SIMPLE_FORMULA_FAMILY,
-	icon_box	    = Macros,
+	icon_box	    = Data processing,
 	can_be_created      = True,
 	definition_file     = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
 	rules_file          = '$METVIEW_DIR_SHARE/etc/SimpleFormulaRules',
@@ -1236,7 +1366,7 @@ object,
 
 object,
 	class		    = DATACOVERAGE,
-	icon_box	    = To be organised,
+	icon_box	    = Plotting,
 	definition_file     = '$METVIEW_DIR_SHARE/etc/DatacoverageDef',
 	rules_file	    = '$METVIEW_DIR_SHARE/etc/DatacoverageRules',
 	can_be_created 	    = '$TRUE_IF_ECMWF',
@@ -1274,7 +1404,7 @@ object,
 
 object,
 	class 		   = STATIONS,
-	icon_box	   = To be organised,
+	icon_box	   = Basic,
 	type 		   = Data,
 	can_be_created 	   = True,
 	default_name	   = Stations,
@@ -1334,7 +1464,7 @@ object,
 object,
 	class               = PLOT_SUPERPAGE,
 	can_be_created      = True,
-	icon_box            = PlotMod,
+	icon_box            = Plotting,
 	definition_file     = '$METVIEW_DIR_SHARE/etc/PlotSuperPageDef',
 	rules_file          = '$METVIEW_DIR_SHARE/etc/PlotSuperPageRules',
 	default_name        = Display Window,
@@ -1414,55 +1544,50 @@ object,
 ##################################################################
 # State list
 ##################################################################
-state,
-	action	     = edit/duplicate/delete,
-	service	     = MetviewUI
 
 state,
-	class	     = GEOVIEW/MAPVIEW/CARTESIANVIEW/MXSECTVIEW/MVERTPROFVIEW/MAVERAGEVIEW,
-	action	     = execute/visualise,
-	service	     = uPlotManager
+   action     = edit/duplicate/delete/cut/copy/destroy/clear/send/compress,
+   service    = MetviewUI
 
-#state,
-#	class	     = GRIB,
-#	action	     = analyse,
-#	service	     = DataToolManager
+state,
+   class      = GEOVIEW/MAPVIEW/CARTESIANVIEW/ANNOTATIONVIEW,
+   action     = execute/visualise,
+   service    = uPlotManager
 
 state,
-	class	     = GRIB,
-	action	     = examine,
-	service	     = GribExaminer
+   class      = GRIB,
+   action     = examine,
+   service    = GribExaminer
 
 state,
-	class	     = GRIB/GEOPOINTS/BUFR,
-	action	     = visualise/hardcopy,
-	service	     = uPlotManager
+   class      = GRIB/GEOPOINTS/BUFR,
+   action     = visualise/hardcopy,
+   service    = uPlotManager
 
 state,
-	class	     = GRIB/GEOPOINTS/BUFR/ODB_DB,
-#/IMAGE/VIS5D_FILE/,
-	action	     = save,
-	service	     = savepool
+   class      = GRIB/GEOPOINTS/BUFR/ODB_DB/NETCDF,
+   action     = save,
+   service    = savepool
 
 state,
-	class		= GEOPOINTS,
-	action		= examine,
-	service		= GeopExaminer
+   class      = GEOPOINTS,
+   action     = examine,
+   service    = GeopExaminer
 
 state,
-	class		= BUFR,
-	action		= examine,
-	service		= BufrExaminer
+   class      = BUFR,
+   action     = examine,
+   service    = BufrExaminer
 
 state,
-	class		= NETCDF,
-	action		= examine,
-	service		= NcExaminer
+   class      = NETCDF,
+   action     = examine,
+   service    = NcExaminer
 
 state,
-	class        = LLMATRIX,
-	output_class = GRIB,
-	service      = togrib
+   class        = LLMATRIX,
+   output_class = GRIB,
+   service      = togrib
 
 
 # IS THIS NEEDED?????????????????????????
@@ -1499,7 +1624,7 @@ state,
 state,
 	class	     = RETRIEVE,
 	output_class = GRIB/BUFR/ODB_DB,
-	service	     = mars
+	service      = mars
 
 # for backwards compatibility
 state,
@@ -1590,6 +1715,11 @@ state,
 
 state,
 	class        = TAR,
+	action	     = extract,
+	service      = '(x=\`dirname "%s"\`;cd \"\$x\" ;  y=\`$METVIEW_BIN/mv_uniquename "%s" .tar\`; mkdir \"\$y\"; cd \"\$y\"; tar -xvf \"%s\")'
+
+state,
+	class        = TAR,
 	action	     = examine,
 	service      = '(y=$TMPDIR/\`basename "%s"\`.tar_contents;tar -tvf \"%s\" > \"\$y\";$METVIEW_EDITOR \"\$y\")'
 
@@ -1600,6 +1730,11 @@ state,
 
 state,
 	class        = TAR_GZ,
+	action	     = extract,
+	service      = '(x=\`dirname "%s"\`;cd \"\$x\" ; y=\`$METVIEW_BIN/mv_uniquename "%s" .tar.gz\`; mkdir \"\$y\"; cd \"\$y\"; tar -xzvf \"%s\")'
+
+state,
+	class        = TAR_GZ,
 	action	     = examine,
 	service      = '(y=$TMPDIR/\`basename "%s"\`.tar_contents;tar -tzvf \"%s\" > \"\$y\";$METVIEW_EDITOR \"\$y\")'
 
@@ -1610,6 +1745,11 @@ state,
 
 state,
 	class        = TAR_BZ2,
+	action	     = extract,
+	service      = '(x=\`dirname "%s"\`;cd \"\$x\" ; y=\`$METVIEW_BIN/mv_uniquename "%s" .tar.bz2 \`; mkdir \"\$y\"; cd \"\$y\"; tar -xjvf \"%s\")'
+
+state,
+	class        = TAR_BZ2,
 	action	     = examine,
 	service      = '(y=$TMPDIR/\`basename "%s"\`.tar_contents;tar -tjvf \"%s\" > \"\$y\";$METVIEW_EDITOR \"\$y\")'
 
@@ -1620,6 +1760,11 @@ state,
 
 state,
 	class        = ZIP,
+	action	     = extract,
+	service      = '(x=\`dirname "%s"\`;cd \"\$x\" ; y=\`$METVIEW_BIN/mv_uniquename "%s" .zip\`; mkdir \"\$y\"; cd \"\$y\";  unzip \"%s\")'
+
+state,
+	class        = ZIP,
 	action	     = examine,
 	service      = '(y=$TMPDIR/\`basename "%s"\`.zip_contents;unzip -l \"%s\" > \"\$y\";$METVIEW_EDITOR \"\$y\")'
 
@@ -1678,6 +1823,54 @@ interface_tool,
 #	service		   = stbase,
 #	action		   = STATION
 
+#Interface tools for the new desktop
+desktop_tool,
+	name		   = monitor,
+	label		   = Process Monitor...,
+	service		   = MvMonitor,
+	action		   = MONITOR
+
+desktop_icon_group_tool,
+	name		   = send,
+	service		   = MvMailTo,
+	action		   = SENDMAIL
+
+desktop_icon_group_tool,
+	name		   = compress_tgz,
+        param              = tgz,
+        output             = TAR_GZ,
+	service		   = MvCompress,
+	action		   = COMPRESS
+     
+desktop_icon_group_tool,
+	name		   = compress_tar,
+        param              = tar,
+	output             = TAR,
+        service		   = MvCompress,
+	action		   = COMPRESS
+
+desktop_icon_group_tool,
+	name		   = compress_tbz,
+        param              = tbz,
+	output             = TAR_BZ2,
+        service		   = MvCompress,
+	action		   = COMPRESS
+
+desktop_icon_group_tool,
+	name		   = compress_tzip,
+        param              = tzip,
+	output             = TAR_ZIP,
+        service		   = MvCompress,
+	action		   = COMPRESS
+
+desktop_icon_group_tool,
+	name		   = compress_zip,
+        param              = zip,
+	output             = ZIP,
+        service		   = MvCompress,
+	action		   = COMPRESS
+
+
 ##########################################################################
 ##########################################################################
 ##########################################################################
@@ -2058,65 +2251,70 @@ interface_tool,
 #
 #
 #
-#object,
-#	class		= RELHUM2,
-#	can_be_created 	= True,
-#	definition_file	= '$METVIEW_DIR_SHARE/etc/RelHum2Def',
-#	default_name	= Relative Humidity,
-#	type		= Data,
-#	macro 		= relhum,
-#	editor_type	= SimpleEditor,
-#	pixmap 		= '$METVIEW_DIR_SHARE/icons/RELHUM2.icon'
-#
 ## 4th column
 #
 ################# (new) PlotMod tephigram definition ###################
-#object,
-#    class             = TEPHIDATA_FAMILY,
-#    icon_box          = To be organised,
-#    can_be_created    = True,
-#    definition_file   = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
-#    rules_file        = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
-#    default_name      = Tephigram Data,
-#    help_page         = Tephigram_Data,
-#    type              = Family,
-#    expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
-#    editor_type       = FamilyEditor,
-#    pixmap            = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
-#object,
-#    class             = PM_BUFR_TEPHI,
-#    can_be_created    = False,
-#    definition_file   = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
-#    rules_file        = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
-#    default_name      = BUFR Tephigram Data,
-#    type              = Data,
-#    expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
-#    macro             = pm_bufr_tephi,
-#    editor_type       = SimpleEditor,
-#    pixmap            = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
-#object,
-#    class             = PM_GRIB_TEPHI,
-#    can_be_created    = False,
-#    definition_file   = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
-#    rules_file        = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
-#    default_name      = GRIB Tephigram Data,
-#    type              = Data,
-#    expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
-#    macro             = pm_grib_tephi,
-#    editor_type       = SimpleEditor,
-#    pixmap            = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
-#object,
-#    class             = PM_PRE19950404_GRIB_TEPHI,
-#    can_be_created    = False,
-#    definition_file   = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
-#    rules_file        = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
-#    default_name      = Pre 1995 GRIB Tephigram Data,
-#    type              = Data,
-#    expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
-#    macro             = pre1995gribtephi,
-#    editor_type       = SimpleEditor,
-#    pixmap            = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
-#
+object,
+    class             = TEPHIDATA_FAMILY,
+    icon_box          = To be organised,
+    can_be_created    = True,
+    definition_file   = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
+    rules_file        = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
+    default_name      = Tephigram Data,
+    help_page         = Tephigram_Data,
+    type              = Family,
+    expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
+    editor_type       = FamilyEditor,
+    pixmap            = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
+object,
+    class             = PM_BUFR_TEPHI,
+    can_be_created    = False,
+    definition_file   = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
+    rules_file        = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
+    default_name      = BUFR Tephigram Data,
+    type              = Data,
+    expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
+    macro             = pm_bufr_tephi,
+    editor_type       = SimpleEditor,
+    pixmap            = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
+object,
+    class             = PM_GRIB_TEPHI,
+    can_be_created    = False,
+    definition_file   = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
+    rules_file        = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
+    default_name      = GRIB Tephigram Data,
+    type              = Data,
+    expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
+    macro             = pm_grib_tephi,
+    editor_type       = SimpleEditor,
+    pixmap            = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
+object,
+    class             = PM_PRE19950404_GRIB_TEPHI,
+    can_be_created    = False,
+    definition_file   = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
+    rules_file        = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
+    default_name      = Pre 1995 GRIB Tephigram Data,
+    type              = Data,
+    expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
+    macro             = pre1995gribtephi,
+    editor_type       = SimpleEditor,
+    pixmap            = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
+
+state,
+    class   = TEPHIDATA_FAMILY,
+    action  = visualise/hardcopy/prepare/drop,
+    service = Tephigram
+
+state,
+    class   = PM_GRIB_TEPHI,
+    action  = visualise/hardcopy/prepare/drop,
+    service = PM_Tephigram
+
+state,
+    class   = PM_BUFR_TEPHI,
+    action  = visualise/hardcopy/prepare/drop,
+    service = PM_Tephigram
+
 ################################### End PM Tephigram ############
 #
 ## added macro function although it does not work if dropped into editor (vk 971209)
@@ -2198,60 +2396,6 @@ interface_tool,
 #    editor_type         = SimpleEditor,
 #    pixmap              = '$METVIEW_DIR_SHARE/icons/GRAPH.icon'
 #
-#
-#object,
-#	class		= VECTORS_FAMILY,
-#	can_be_created	= True,
-#	icon_box	= To be organised,
-#	definition_file	= '$METVIEW_DIR_SHARE/etc/VectorsDef',
-#	rules_file	= '$METVIEW_DIR_SHARE/etc/VectorsRules',
-#	default_name	= Vectors,
-#	help_page	= Vectors,
-#	type		= Family,
-#	expand		= 75, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS|EXPAND_LAST_NAME
-#	editor_type	= FamilyEditor,
-#	pixmap 		= '$METVIEW_DIR_SHARE/icons/VECTOR_FIELD.icon'
-#object,
-#    class		= VECTOR_FIELD,
-#    can_be_created 	= False,
-#    default_object 	= False,
-#    definition_file	= '$METVIEW_DIR_SHARE/etc/VectorsDef',
-#    type		= Data,
-#    macro 		= vector_field,
-#    editor_type		= SimpleEditor,
-#    pixmap 		= '$METVIEW_DIR_SHARE/icons/VECTOR_FIELD.icon'
-#object,
-#    class		= POLAR_FIELD,
-#    can_be_created 	= False,
-#    default_object 	= False,
-#    definition_file	= '$METVIEW_DIR_SHARE/etc/VectorsDef',
-#    type		= Data,
-#    macro 		= polar_field,
-#    editor_type		= SimpleEditor,
-#    pixmap 		= '$METVIEW_DIR_SHARE/icons/VECTOR_FIELD.icon'
-#object,
-#    class		= COLOUR_POLAR_FIELD,
-#    can_be_created 	= False,
-#    default_object 	= False,
-#    definition_file	= '$METVIEW_DIR_SHARE/etc/VectorsDef',
-#    rules_file		= '$METVIEW_DIR_SHARE/etc/VectorsRules',
-#    type		= Data,
-#    expand		= 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
-#    macro 		= colour_polar_field,
-#    editor_type		= SimpleEditor,
-#    pixmap 		= '$METVIEW_DIR_SHARE/icons/VECTOR_FIELD.icon'
-#object,
-#    class		= COLOUR_VECTOR_FIELD,
-#    can_be_created 	= False,
-#    default_object 	= False,
-#    definition_file	= '$METVIEW_DIR_SHARE/etc/VectorsDef',
-#    rules_file		= '$METVIEW_DIR_SHARE/etc/VectorsRules',
-#    type		= Data,
-#    expand		= 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
-#    macro 		= colour_vector_field,
-#    editor_type		= SimpleEditor,
-#    pixmap 		= '$METVIEW_DIR_SHARE/icons/VECTOR_FIELD.icon'
-#
 #object,
 #	class               = BUDGET,
 #	icon_box            = To be organised,
@@ -2343,37 +2487,6 @@ interface_tool,
 ## Visdef group
 ###############################################
 #
-##ANNOTATION is an alias for PTEXT. For the user point of view there are
-##2 objects: ANNOTATION and TITLE. For the Magics point of view both
-##objects are PTEXT.
-#object,
-#	class		= ANNOTATION,
-#	icon_box	= Visual definitions,
-#	can_be_created 	= True,
-#	definition_file	= '$METVIEW_DIR_SHARE/etc/AnnotationDef',
-#	rules_file	= '$METVIEW_DIR_SHARE/etc/AnnotationRules',
-#	default_name	= Annotation,
-#	help_page	= Annotation,
-#	type		= Visdef,
-#	macro 		= annotation,
-#	expand 		= 128, # EXPAND_DEFAULT
-#	editor_type	= SimpleEditor,
-#	pixmap 		= '$METVIEW_DIR_SHARE/icons/PTEXTa.icon'
-#
-#object,
-#	class		= PIMPORT,
-#	icon_box	= Visual definitions,
-#	can_be_created 	= True,
-#	definition_file	= '$METVIEW_DIR_SHARE/etc/ImportDef',
-#	rules_file	= '$METVIEW_DIR_SHARE/etc/ImportRules',
-#	default_name	= Import Plot,
-#	help_page	= Import_Plot,
-#	type		= Visdef,
-#	macro 		= pimport,
-#	expand 		= 128, # EXPAND_NO_DEFAULT
-#	editor_type	= SimpleEditor,
-#	pixmap 		= '$METVIEW_DIR_SHARE/icons/PIMPORT.icon'
-#
 #object,
 #	class		= PMIMAGE,
 #	icon_box        = Visual definitions,
@@ -2485,11 +2598,6 @@ interface_tool,
 #	action  = visualise/hardcopy
 #
 #state,
-#	class    = VECTORS_FAMILY/COLOUR_VECTOR_FIELD/COLOUR_POLAR_FIELD,
-#	action   = execute
-#
-#
-#state,
 #	class   = MACRO/WMACRO,
 #	action  = print,
 #	service = '($METVIEW_BIN/beautify "%s\" | $MVPRINTCMD)'
@@ -2580,11 +2688,6 @@ interface_tool,
 #	action   = execute/prepare/drop,
 #	service  = Metgram0
 #
-#state,
-#	class    = RELHUM2,
-#	output_class = GRIB,
-#	action   = visualise/hardcopy/prepare/drop,
-#	service  = Relhum2
 #
 #state,
 #	class    = TOTRAIN,
@@ -2593,16 +2696,6 @@ interface_tool,
 #	service  = totrain
 #
 #state,
-#	class    = COLOUR_VECTOR_FIELD/COLOUR_POLAR_FIELD,
-#	action   = visualise/hardcopy/prepare/drop,
-#	service  = Vectors
-#
-#state,
-#	class    = VECTORS_FAMILY/COLOUR_VECTOR_FIELD/COLOUR_POLAR_FIELD,
-#	action   = execute/hardcopy/visualise,
-#	service  = Vectors
-#
-#state,
 #	class    = SAMPLE,
 #	service  = SampleModule
 #
@@ -2623,19 +2716,6 @@ interface_tool,
 #    service  = VisModTrans
 ###    service  = VisMod
 #
-############# New applications can save it's output ##########
-#state,
-#	class    = PM_VPROF,
-#	output_class = NETCDF,
-#        service  = PM_Xsect
-#
-#state,
-#	class    = GEOTOOLS,
-##	output_class = Window,
-#        service  = GeoTools
-#
-#############################################
-#
 #state,
 #	class    = NEWPAGE,
 #	action   = hardcopy,
@@ -2660,12 +2740,8 @@ interface_tool,
 ##	service  =ToGeoPoints
 #
 #state,
-#	class  = PCOAST,
-#	action = visualise
-#
-#state,
 #	class	= LEOPOINTS/AOF/IMAGE/MATRIX/LIST_OF_POINTS/FILM/
-#		  BAR_GRAPH/DOUBLE_CURVE/VECTOR_FIELD/POLAR_FIELD/PTEPHI,
+#		  BAR_GRAPH/DOUBLE_CURVE/PTEPHI,
 #	action	= visualise/hardcopy,
 ###	service	= PlotMod
 #	service = VisModTrans
@@ -2796,66 +2872,6 @@ interface_tool,
 #    expand              = 75, #EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS|EXPAND_LAST_NAME
 #    doubleclick_method  = Edit
 #
-#object,
-#    class               = EMPTYVIEW,
-#    can_be_created      = True,
-#    icon_box            = Views,
-#    definition_file     = '$METVIEW_DIR_SHARE/etc/EmptyViewDef',
-#    rules_file          = '$METVIEW_DIR_SHARE/etc/EmptyViewRules',
-#    default_name        = Empty View,
-#    help_page           = Empty_View,
-#    type                = View,
-#    macro               = emptyview,
-#    editor_type         = SimpleEditor,
-#    pixmap              = '$METVIEW_DIR_SHARE/icons/EMPTYVIEW.icon',
-#    expand              = 75, #EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS|EXPAND_LAST_NAME
-#    doubleclick_method  = Edit
-#
-#object,
-#    class               = TEXTVIEW,
-#    can_be_created      = True,
-#    icon_box            = Views,
-#    definition_file     = '$METVIEW_DIR_SHARE/etc/TextViewDef',
-#    rules_file          = '$METVIEW_DIR_SHARE/etc/TextViewRules',
-#    default_name        = Text View,
-#    help_page           = Text_View,
-#    type                = View,
-#    macro               = textview,
-#    editor_type         = SimpleEditor,
-#    pixmap              = '$METVIEW_DIR_SHARE/icons/TEXTVIEW.icon',
-#    expand              = 75, #EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS|EXPAND_LAST_NAME
-#    doubleclick_method  = Edit
-#
-# object,
-#    class               = IMPORTVIEW,
-#    can_be_created      = True,
-#    icon_box            = Views,
-#    definition_file     = '$METVIEW_DIR_SHARE/etc/ImportViewDef',
-#    rules_file          = '$METVIEW_DIR_SHARE/etc/ImportViewRules',
-#    default_name        = Import View,
-#    help_page           = Import_View,
-#    type                = View,
-#    macro               = importview,
-#    editor_type         = SimpleEditor,
-#    pixmap              = '$METVIEW_DIR_SHARE/icons/IMPVIEW.icon',
-#    expand              = 75, #EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS|EXPAND_LAST_NAME
-#    doubleclick_method  = Edit
-#
-# object,
-#    class               = HOVMOELLERVIEW,
-#    can_be_created      = True,
-#    icon_box            = Views,
-#    definition_file     = '$METVIEW_DIR_SHARE/etc/HovmoellerViewDef',
-#    rules_file          = '$METVIEW_DIR_SHARE/etc/HovmoellerViewRules',
-#    default_name        = Hovmoeller View,
-#    help_page           = Hovm_oslash_ller_View,
-#    type                = View,
-#    macro               = hovmoellerview,
-#    editor_type         = SimpleEditor,
-#    pixmap              = '$METVIEW_DIR_SHARE/icons/HOVMOELLERVIEW.icon',
-#    expand              = 75, #EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS|EXPAND_LAST_NAME
-#    doubleclick_method  = Edit
-#
 #######FAMI Begin : Remove comments later (Jan/2002)
 ##object,
 ##    class               = MATCHING_INFORMATION,
diff --git a/share/metview/etc/PageFrameDef b/share/metview/etc/PageFrameDef
new file mode 100644
index 0000000..91894c6
--- /dev/null
+++ b/share/metview/etc/PageFrameDef
@@ -0,0 +1,108 @@
+PAGE_FRAME
+{
+   ON      ; ON
+   OFF     ; OFF
+} = ON
+
+PAGE_FRAME_COLOUR [interface = colour]
+{
+   %include MagicsColors.h
+} = BLUE
+
+PAGE_FRAME_LINE_STYLE
+{
+   SOLID       ; SOLID
+   DOT         ; DOT
+   DASH        ; DASH
+   CHAIN_DOT   ; CHAIN_DOT
+   CHAIN_DASH  ; CHAIN_DASH
+} = SOLID
+
+PAGE_FRAME_THICKNESS
+{
+   1   ; 1
+   2   ; 2
+   3   ; 3
+   4   ; 4
+   5   ; 5
+   6   ; 6
+   7   ; 7
+   8   ; 8
+   9   ; 9
+   10  ; 10
+
+} = 2
+
+####
+# In MAGICS, the default for PAGE_ID_LINE (and associate parameters) is ON, 
+# however, in METVIEW is OFF. This is because for the majority of the cases 
+# METVIEW does not need this facility.
+# Also, only the parameter PAGE_ID_LINE_USER_TEXT is available in the user
+# interface, at moment.
+
+   PAGE_ID_LINE
+   {
+      ON          ; ON
+      OFF         ; OFF
+#     ERRORS_ONLY ; ERRORS_ONLY
+   } = OFF
+
+   PAGE_ID_LINE_TYPE [ visible = false ]
+   {
+      BOTH         ; BOTH
+      LOGO_ONLY    ; LOGO_ONLY
+      ID_LINE_ONLY ; ID_LINE_ONLY
+   } = BOTH
+
+   PAGE_ID_LINE_COLOUR [ visible = false, interface = colour]
+   {
+      %include MagicsColors.h
+   } = BLUE
+
+   PAGE_ID_LINE_SYSTEM_PLOT [ visible = false ]
+   {
+      ON   ; ON
+      OFF  ; OFF
+   } = OFF
+
+   PAGE_ID_LINE_DATE_PLOT [ visible = false ]
+   {
+      ON   ; ON
+      OFF  ; OFF
+   } = OFF
+
+   PAGE_ID_LINE_USER_TEXT_PLOT [ visible = false ]
+   {
+      ON   ; ON
+      OFF  ; OFF
+   } = ON
+
+   PAGE_ID_LINE_USER_TEXT
+   {
+      @
+   } = ''
+
+   PAGE_ID_LINE_ERRORS_PLOT [ visible = false ]
+   {
+      ON   ; ON
+      OFF  ; OFF
+   } = OFF
+
+   PAGE_ID_LINE_LOGO_PLOT [ visible = false ]
+   {
+      ON   ; ON
+      OFF  ; OFF
+   } = OFF
+
+   PAGE_ID_LINE_HEIGHT [ visible = false ]
+   {
+      @
+   } = 0.25
+
+   PAGE_ID_LINE_QUALITY [ visible = false ]
+   {
+      LOW       ; LOW
+      MEDIUM    ; MEDIUM
+      HIGH      ; HIGH
+   } = MEDIUM
+####
diff --git a/share/metview/etc/PageFrameRules b/share/metview/etc/PageFrameRules
new file mode 100644
index 0000000..03a1513
--- /dev/null
+++ b/share/metview/etc/PageFrameRules
@@ -0,0 +1,7 @@
+%if PAGE_FRAME = OFF %then
+   %unset PAGE_FRAME_COLOUR
+   %unset PAGE_FRAME_LINE_STYLE
+   %unset PAGE_FRAME_THICKNESS
+
+%if PAGE_ID_LINE = OFF %then
+   %unset PAGE_ID_LINE_USER_TEXT
diff --git a/share/metview/etc/PlotSuperPageDef b/share/metview/etc/PlotSuperPageDef
index 1761368..74404cb 100644
--- a/share/metview/etc/PlotSuperPageDef
+++ b/share/metview/etc/PlotSuperPageDef
@@ -14,11 +14,11 @@ PLOT_SUPERPAGE ; Plot Mod Icon     ; Metview
 
 	CUSTOM_WIDTH {
 		*
-	} = 21
+	} = 29.7
 
 	CUSTOM_HEIGHT {
 		*
-	} = '29.7'
+	} = 21.0
 
 !	SUPER_PAGE_FRAME {
 !		ON
diff --git a/share/metview/etc/RelHumDef b/share/metview/etc/RelHumDef
new file mode 100644
index 0000000..cf7b790
--- /dev/null
+++ b/share/metview/etc/RelHumDef
@@ -0,0 +1,27 @@
+RELHUM2; Relhum Application; One GRIB file
+{
+	DATA
+		[ interface = icon, class = GRIB, exclusive = true,
+		  help = help_data,
+		  help_directory  = '/System/Defaults',
+		  help_name       = Data for Relative Humidity,
+		  help_class      = RETRIEVE,
+		  help_definition = ( RETRIEVE, LEVTYPE = ML,
+						LEVELIST = 1/TO/91,
+    						PARAM = T/Q/LNSP,
+						DATE = '-1',
+    						GRID = 1.5/1.5 )
+		]
+
+	{ @ }
+
+
+# Note: in Metview 3, there was an additional parameter, TITLE.
+# This is not used in Metview 4, so we remove it. However, we could retain
+# it but make it hidden, which the following definition would allow:
+
+#	TITLE
+#	[ visible = false ]
+#	{ @ } = Relative Humidity
+
+}
diff --git a/share/metview/etc/RelHumRules b/share/metview/etc/RelHumRules
new file mode 100644
index 0000000..e69de29
diff --git a/share/metview/etc/Services b/share/metview/etc/Services
index 086e12c..8ebd3a0 100644
--- a/share/metview/etc/Services
+++ b/share/metview/etc/Services
@@ -36,12 +36,30 @@ service,
 	cmd	 = '$METVIEW_BIN/mvmon'
 
 service,
+	name	 = 'MvMonitor',
+	fullname = 'Process monitor',
+	cmd	 = '$METVIEW_BIN/MvMonitor'
+	
+service,
 	name	 = 'stbase',
 	fullname = Station Database,
 	cmd	 = '$METVIEW_BIN/stbase'
 
 service,
 	maximum	 = 0,
+	name	 = 'MvMailTo',
+	fullname = Mail,
+	cmd	 = "$metview_command $METVIEW_BIN/MvMailTo  $METVIEW_QT_APPLICATION_FLAGS",
+	class	 =  application
+
+service,
+	maximum	 = 0,
+	name	 = 'MvCompress',
+	fullname = Compress,
+	cmd	 = "$metview_command $METVIEW_BIN/MvCompress"
+	
+service,
+	maximum	 = 0,
 	name	 = 'mvmail',
 	fullname = Mail,
 	cmd	 = '$METVIEW_BIN/mvmail',
@@ -115,12 +133,16 @@ service,
 	fullname = GRIB Examiner,
 	cmd	 = "$metview_command $METVIEW_BIN/GribExaminer  -maxforks 25 $METVIEW_QT_APPLICATION_FLAGS"
 
+
+# NOTE: we set GFORTRAN_UNBUFFERED_ALL=y because otherwise we see a problem on
+# ecgb, where the I/O buffers from gfortran are not flushed despite our
+# best efforts in the calling C++ code. See JIRA issue METV-458.
 service,
 	name	 = 'BufrExaminer',
 	maximum	 = 0,
 	timeout  = $timeout, # set in script
 	fullname = BUFR Examiner,
-	cmd	 = "$metview_command $METVIEW_BIN/BufrExaminer  -maxforks 25 $METVIEW_QT_APPLICATION_FLAGS"
+	cmd	 = "env GFORTRAN_UNBUFFERED_ALL=y $metview_command $METVIEW_BIN/BufrExaminer  -maxforks 25 $METVIEW_QT_APPLICATION_FLAGS"
 
 service,
 	name	 = ObsExam,
@@ -230,6 +252,12 @@ service,
 	name    = Velstr
 
 service,
+		timeout = $timeout, # set in script
+        name= Relhum,
+		fullname=Relative Humidity,
+        cmd= "$metview_command $METVIEW_BIN/Relhum"
+
+service,
 	name	 = Datacoverage,
 	cmd	 = '$metview_command $METVIEW_BIN/Datacoverage'
 
@@ -514,11 +542,11 @@ service,
 #
 #
 ############################# PlotMod
-#service,
-#	timeout = $timeout, # set in script
-#        name='PM_Tephigram',
-#	fullname=Tephigram,
-#        cmd= "$metview_command $METVIEW_BIN/PM_Tephigram"
+service,
+	timeout = $timeout, # set in script
+       name='PM_Tephigram',
+	fullname=Tephigram,
+      cmd= "$metview_command $METVIEW_BIN/PM_Tephigram"
 #
 #service,
 #	timeout = $timeout, # set in script
diff --git a/share/metview/etc/SubpageFrameDef b/share/metview/etc/SubpageFrameDef
index c860394..5bba56a 100644
--- a/share/metview/etc/SubpageFrameDef
+++ b/share/metview/etc/SubpageFrameDef
@@ -1,157 +1,38 @@
-PAGE_FRAME
-{
-	ON 		; ON
-	OFF 		; OFF
-} = ON
-
-PAGE_FRAME_COLOUR
-{
-  %include MagicsColors.h
-} = BLUE
-
-PAGE_FRAME_LINE_STYLE
-{
-	SOLID		; SOLID
-	DOT		; DOT
-	DASH		; DASH
-	CHAIN_DOT	; CHAIN_DOT
-	CHAIN_DASH	; CHAIN_DASH
-} = SOLID
-
-PAGE_FRAME_THICKNESS
-{
-	1			; 1
-	2			; 2
-	3			; 3
-	4			; 4
-	5			; 5
-    6           ; 6
-    7           ; 7
-    8           ; 8
-    9           ; 9
-   10           ; 10
-
-} = 2
-
-####
-# In MAGICS, the default for PAGE_ID_LINE (and associate parameters) is ON, 
-# however, in METVIEW is OFF. This is because for the majority of the cases 
-# METVIEW does not need this facility.
-# Also, only the parameter PAGE_ID_LINE_USER_TEXT is available in the user
-# interface, at moment.
-
-    PAGE_ID_LINE
-    {
-		ON			; ON
-		OFF			; OFF
-#		ERRORS_ONLY	; ERRORS_ONLY
-    } = OFF
-
-    PAGE_ID_LINE_TYPE
-    [ visible = false ]
-    {
-		BOTH		; BOTH
-		LOGO_ONLY	; LOGO_ONLY
-		ID_LINE_ONLY	; ID_LINE_ONLY
-    } = BOTH
-
-    PAGE_ID_LINE_COLOUR
-    [ visible = false ]
-    {
-  		%include MagicsColors.h
-    } = BLUE
-
-    PAGE_ID_LINE_SYSTEM_PLOT
-    [ visible = false ]
-    {
-        ON          ; ON
-        OFF         ; OFF
-    } = OFF
-
-    PAGE_ID_LINE_DATE_PLOT
-    [ visible = false ]
-    {
-        ON          ; ON
-        OFF         ; OFF
-    } = OFF
-
-    PAGE_ID_LINE_USER_TEXT_PLOT
-    [ visible = false ]
-    {
-        ON          ; ON
-        OFF         ; OFF
-    } = ON
-
-    PAGE_ID_LINE_USER_TEXT
-    {
-        @
-    } = ''
-
-    PAGE_ID_LINE_ERRORS_PLOT
-    [ visible = false ]
-    {
-        ON          ; ON
-        OFF         ; OFF
-    } = OFF
-
-    PAGE_ID_LINE_LOGO_PLOT
-    [ visible = false ]
-    {
-        ON          ; ON
-        OFF         ; OFF
-    } = OFF
-
-    PAGE_ID_LINE_HEIGHT
-    [ visible = false ]
-    {
-		@
-    } = 0.25
-
-    PAGE_ID_LINE_QUALITY
-    [ visible = false ]
-    {
-             LOW        ; LOW
-             MEDIUM     ; MEDIUM
-             HIGH       ; HIGH
-    } = MEDIUM
-####
-
 SUBPAGE_FRAME
 {
-	ON 		; ON
-	OFF 		; OFF
+   ON      ; ON
+   OFF     ; OFF
 } = ON
 
-SUBPAGE_FRAME_COLOUR
+SUBPAGE_FRAME_COLOUR [interface = colour]
 {
-  %include MagicsColors.h
+   %include MagicsColors.h
 } = BLACK
 
 SUBPAGE_FRAME_LINE_STYLE
 {
-	SOLID		; SOLID
-	DOT		; DOT
-	DASH		; DASH
-	CHAIN_DOT	; CHAIN_DOT
-	CHAIN_DASH	; CHAIN_DASH
+   SOLID      ; SOLID
+   DOT        ; DOT
+   DASH       ; DASH
+   CHAIN_DOT  ; CHAIN_DOT
+   CHAIN_DASH ; CHAIN_DASH
 } = SOLID
 
 SUBPAGE_FRAME_THICKNESS
 {
-	1			; 1
-	2			; 2
-	3			; 3
-	4			; 4
-	5			; 5
-    6           ; 6
-    7           ; 7
-    8           ; 8
-    9           ; 9
-   10           ; 10
-
+   1   ; 1
+   2   ; 2
+   3   ; 3
+   4   ; 4
+   5   ; 5
+   6   ; 6
+   7   ; 7
+   8   ; 8
+   9   ; 9
+   10  ; 10
 } = 2
 
-SUBPAGE_BACKGROUND_COLOUR
+SUBPAGE_BACKGROUND_COLOUR [interface = colour]
 {
-  %include MagicsColors.h
+   %include MagicsColors.h
 } = WHITE
diff --git a/share/metview/etc/SubpageFrameRules b/share/metview/etc/SubpageFrameRules
index a767e9d..dca6395 100644
--- a/share/metview/etc/SubpageFrameRules
+++ b/share/metview/etc/SubpageFrameRules
@@ -1,12 +1,4 @@
-%if PAGE_FRAME = OFF %then
-	%unset PAGE_FRAME_COLOUR
-	%unset PAGE_FRAME_LINE_STYLE
-	%unset PAGE_FRAME_THICKNESS
-
 %if SUBPAGE_FRAME = OFF %then
-	%unset SUBPAGE_FRAME_COLOUR
-	%unset SUBPAGE_FRAME_LINE_STYLE
-	%unset SUBPAGE_FRAME_THICKNESS
-
-%if PAGE_ID_LINE = OFF %then
-	%unset PAGE_ID_LINE_USER_TEXT
+   %unset SUBPAGE_FRAME_COLOUR
+   %unset SUBPAGE_FRAME_LINE_STYLE
+   %unset SUBPAGE_FRAME_THICKNESS
diff --git a/share/metview/etc/UiSpec.Bookmarks b/share/metview/etc/UiSpec.Bookmarks
new file mode 100644
index 0000000..1c0cef7
--- /dev/null
+++ b/share/metview/etc/UiSpec.Bookmarks
@@ -0,0 +1,82 @@
+#------------------------------------
+# Icon context menu
+#------------------------------------
+
+icon_menu,
+	cmd		   = open,
+	label		   = 'Open',
+        condition          = 'path!=FOLDERGROUP'
+
+icon_menu,
+	cmd		   = openInTab,
+	label		   = 'Open in new tab',
+        condition          = 'path!=FOLDERGROUP'
+
+icon_menu,
+	cmd		   = openInWin,
+	label		   = 'Open in new window',
+        condition          = 'path=!FOLDERGROUP'
+
+icon_menu,
+	cmd		   = openGroup,
+	label		   = 'Open tabs',
+        condition          = 'path=FOLDERGROUP'
+
+icon_menu,
+	cmd		   = openGroupInWin,
+	label		   = 'Open tabs in new window',
+        condition          = 'path=FOLDERGROUP'
+
+icon_menu,
+	type 		   = separator
+
+
+icon_menu,
+	cmd		   = editEntry,
+	label		   = '&Edit',
+	shortcut	   = Ctrl+E,
+        icon 		   = edit
+	
+icon_menu,
+	cmd		   = duplicateEntry,
+	label		   = '&Duplicate',
+	shortcut	   = Ctrl+D,
+        icon 		   = duplicate
+
+icon_menu,
+        cmd		   = removeEntry,
+	label		   = '&Remove',
+	shortcut	   = Del,
+        icon 		   = remove
+	
+icon_menu,
+	type 		   = separator
+
+icon_menu,
+        cmd		   = empty,
+	label		   = 'Empty &wastebin',
+        shortcut           = 'Ctrl+W',
+	condition	   = 'path=wastebasket'
+
+#------------------------------------
+# Desktop context menu
+#------------------------------------
+
+desktop_menu,
+	cmd		   = addEntry,
+	label		   = 'Bookmark this folder',
+        icon               = 'add_bookmark'
+
+desktop_menu,
+	cmd		   = addTabs,
+	label		   = 'Bookmark these tabs',
+        icon               = 'add_bookmark_group'
+
+desktop_menu,
+	type 		   = separator
+ 
+desktop_menu,
+	cmd		   = addBookmark,
+	label		   = '&New bookmark',
+        icon               = 'add'
+
diff --git a/share/metview/etc/UiSpec.Breadcrumbs b/share/metview/etc/UiSpec.Breadcrumbs
new file mode 100644
index 0000000..48c2fa0
--- /dev/null
+++ b/share/metview/etc/UiSpec.Breadcrumbs
@@ -0,0 +1,20 @@
+#------------------------------------
+# Icon context menu
+#------------------------------------
+
+icon_menu,
+        cmd		   = openInTab,
+	label		   = 'Open in new tab'
+	
+icon_menu,
+        cmd		   = openInWin,
+	label		   = 'Open in new window'
+	
+icon_menu,
+	type 		   = separator
+
+	
+icon_menu,
+	cmd		   = bookmark,
+	label		   = 'Add to &bookmarks',
+        icon 		   = add_bookmark
diff --git a/share/metview/etc/UiSpec.DetailedFolderView b/share/metview/etc/UiSpec.DetailedFolderView
new file mode 100644
index 0000000..38257c7
--- /dev/null
+++ b/share/metview/etc/UiSpec.DetailedFolderView
@@ -0,0 +1,82 @@
+#------------------------------------
+# Icon + icon group context menu
+#------------------------------------
+
+%include UiSpec.FolderView
+
+#------------------------------------
+# Desktop context menu
+#------------------------------------
+
+desktop_menu,
+	id		   = create,
+	type		   = submenu,
+	label		   = 'Create new ...'
+
+desktop_menu,
+	cmd		   = createFolder,
+	label		   = '&Folder',
+	parent_menu 	   = create,
+        icon               = 'folder'
+
+desktop_menu,
+	type 		   = separator,
+        parent_menu 	   = create
+
+desktop_menu,
+	cmd		   = createMacro,
+	label		   = '&Macro',
+	parent_menu 	   = create,
+        icon               = 'macro'
+
+desktop_menu,
+	cmd		   = createIcon,
+	label		   = '&Icon',
+	parent_menu 	   = create,
+        icon               = 'add'
+
+desktop_menu,
+	type 		   = separator,
+        parent_menu 	   = create
+
+desktop_menu,
+	cmd		   = createLink,
+	label		   = '&Link',
+	parent_menu 	   = create,
+        icon               = 'link'
+
+desktop_menu,
+	type 		   = separator
+
+desktop_menu,
+	cmd		   = showLastAction,
+	label		   = Show last icon created,
+        icon 		   = showLastIcon
+
+desktop_menu,
+	cmd		   = sizeDown,
+	label		   = '&Decrease size',
+	shortcut	   = 'Ctrl+-'
+
+desktop_menu,
+	cmd		   = sizeUp,
+	label		   = '&Increase size',
+	shortcut	   = 'Ctrl++'
+
+desktop_menu,
+	type 		   = separator
+
+desktop_menu,
+	cmd		   = bookmarkFolder,
+	label		   = 'Add folder to &bookmarks',
+	icon	   	   = add_bookmark
+
+desktop_menu,
+	type 		   = separator      
+
+desktop_menu,
+	cmd		   = reload,
+	label		   = '&Reload',
+        shortcut	   = reload,
+	icon	   	   = reload
+  
diff --git a/share/metview/etc/UiSpec.DrawerView b/share/metview/etc/UiSpec.DrawerView
new file mode 100644
index 0000000..b0182cd
--- /dev/null
+++ b/share/metview/etc/UiSpec.DrawerView
@@ -0,0 +1,87 @@
+#------------------------------------
+# Icon context menu
+#------------------------------------
+
+icon_menu,
+	cmd		   = edit,
+	label		   = '&Edit',
+	shortcut	   = Ctrl+E,
+        icon 		   = edit
+	
+icon_menu,
+	cmd		   = duplicate,
+	label		   = '&Duplicate',
+	shortcut	   = Ctrl+D,
+        icon 		   = duplicate
+
+icon_menu,
+	id		   = delete,
+        cmd		   = delete,
+	label		   = 'Move to &wastebin',
+	shortcut	   = Del,
+        icon 		   = wastebasket,
+	group		   = true
+
+icon_menu,
+	type 		   = separator
+
+icon_menu,
+        id		   = send,
+        cmd		   = send,
+	label		   = Send,
+        icon 		   = mail_send,
+	service		   = icon_group_tool
+
+
+#------------------------------------
+# Icon group context menu
+#------------------------------------
+
+group_menu,
+        icon_menu_id    = delete
+
+group_menu,
+	type 		= separator
+	
+group_menu,
+        icon_menu_id    = send
+
+
+#------------------------------------
+# Desktop context menu
+#------------------------------------
+
+desktop_menu,
+	id		   = create,
+	type		   = submenu,
+	label		   = 'Create new ...'
+
+desktop_menu,
+	cmd		   = createMacro,
+	label		   = '&Macro',
+	parent_menu 	   = create,
+        icon               = 'macro'
+
+desktop_menu,
+	type 		   = separator,
+        parent_menu 	   = create
+
+desktop_menu,
+	cmd		   = createIcon,
+	label		   = '&Icon',
+	parent_menu 	   = create,
+        icon               = 'add'
+
+desktop_menu,
+	type 		   = separator
+      
+desktop_menu,
+	cmd		   = renameDrawer,
+	label		   = 'Rename drawer'
+       
+desktop_menu,
+	cmd		   = deleteDrawer,
+	label		   = 'Delete drawer',
+        icon               = wastebasket
+       
+
diff --git a/share/metview/etc/UiSpec.FolderDrawerPanel b/share/metview/etc/UiSpec.FolderDrawerPanel
new file mode 100644
index 0000000..bbad4d1
--- /dev/null
+++ b/share/metview/etc/UiSpec.FolderDrawerPanel
@@ -0,0 +1,14 @@
+#------------------------------------
+# Icon context menu
+#------------------------------------
+      
+icon_menu,
+	cmd		   = renameDrawer,
+	label		   = 'Rename drawer'
+       
+icon_menu,
+	cmd		   = deleteDrawer,
+	label		   = 'Delete drawer',
+        icon               = wastebasket
+       
+
diff --git a/share/metview/etc/UiSpec.FolderHistory b/share/metview/etc/UiSpec.FolderHistory
new file mode 100644
index 0000000..48c2fa0
--- /dev/null
+++ b/share/metview/etc/UiSpec.FolderHistory
@@ -0,0 +1,20 @@
+#------------------------------------
+# Icon context menu
+#------------------------------------
+
+icon_menu,
+        cmd		   = openInTab,
+	label		   = 'Open in new tab'
+	
+icon_menu,
+        cmd		   = openInWin,
+	label		   = 'Open in new window'
+	
+icon_menu,
+	type 		   = separator
+
+	
+icon_menu,
+	cmd		   = bookmark,
+	label		   = 'Add to &bookmarks',
+        icon 		   = add_bookmark
diff --git a/share/metview/etc/UiSpec.FolderPanel b/share/metview/etc/UiSpec.FolderPanel
new file mode 100644
index 0000000..63c3f77
--- /dev/null
+++ b/share/metview/etc/UiSpec.FolderPanel
@@ -0,0 +1,35 @@
+#------------------------------------
+# Icon context menu
+#------------------------------------
+ 
+icon_menu,
+	cmd		   = reloadTab,
+	label		   = '&Reload tab',
+        icon		   = reload
+    
+icon_menu,
+	cmd		   = bookmark,
+	label		   = 'Add to &bookmarks',
+        icon 		   = add_bookmark
+
+icon_menu,
+	type 		   = separator
+
+icon_menu,
+	cmd		   = closeOtherTabs,
+	label		   = 'Close &other tabs'
+  
+icon_menu,
+	cmd		   = closeTabs,
+	label		   = '&Close tab',
+        icon_menu          = close
+    
+icon_menu,
+	type 		   = separator
+
+icon_menu,
+	cmd		   = empty,
+	label		   = 'Empty &wastebin',
+        condition	   = 'path=wastebasket'
+       
+
diff --git a/share/metview/etc/UiSpec.FolderView b/share/metview/etc/UiSpec.FolderView
new file mode 100644
index 0000000..b4855bc
--- /dev/null
+++ b/share/metview/etc/UiSpec.FolderView
@@ -0,0 +1,171 @@
+#------------------------------------
+# Icon context menu
+#------------------------------------
+
+icon_menu,
+	cmd		   = execute,
+	label		   = 'E&xecute',
+	shortcut	   = Ctrl+X	
+
+icon_menu,
+	cmd		   = visualise,
+	label		   = '&Visualise',
+	shortcut	   = Ctrl+V,
+        icon 		   = visualise
+
+icon_menu,
+	cmd		   = examine,
+	label		   = 'Exa&mine',
+	shortcut	   = Ctrl+M,
+        icon 		   = examine
+	
+icon_menu,
+	type 		   = separator
+
+icon_menu,
+	cmd		   = save,
+	label		   = Save result,
+	shortcut	   = Ctrl+S,
+        icon 		   = filesave
+
+icon_menu,
+	cmd		   = clear,
+	label		   = Clear result
+	
+icon_menu,
+	type 		   = separator
+
+icon_menu,
+        cmd		   = open,
+	label		   = Open
+	
+icon_menu,
+        cmd		   = openInTab,
+	label		   = 'Open in new tab'
+	
+icon_menu,
+        cmd		   = openInWin,
+	label		   = 'Open in new window'
+	
+icon_menu,
+	type 		   = separator
+
+icon_menu,
+	cmd		   = edit,
+	label		   = '&Edit',
+	shortcut	   = Ctrl+E,
+        icon 		   = edit
+	
+icon_menu,
+	cmd		   = duplicate,
+	label		   = '&Duplicate',
+	shortcut	   = Ctrl+D,
+        icon 		   = duplicate
+
+icon_menu,
+	id		   = delete,
+        cmd		   = delete,
+	label		   = 'Move to &wastebin',
+	shortcut	   = Del,
+        icon 		   = wastebasket,
+	group		   = true
+
+icon_menu,
+	id		   = destroy,
+        cmd		   = destroy,
+	label		   = Delete,
+	shortcut	   = Shift+Del,
+        icon 		   = close
+	
+icon_menu,
+	cmd		   = empty,
+	label		   = 'Empty &watebin',
+	shortcut	   = Ctrl+W,
+        icon 		   = empty
+
+icon_menu,
+	type 		   = separator
+
+icon_menu,
+	cmd		   = log,
+	label		   = '&Log',
+	shortcut	   = Ctrl+L,
+        icon 		   = log
+	
+icon_menu,
+	cmd		   = bookmark,
+	label		   = 'Add to &bookmarks',
+        icon 		   = add_bookmark
+
+
+icon_menu,
+        id		   = send,
+        cmd		   = send,
+	label		   = Send,
+        icon 		   = mail_send,
+	service		   = icon_group_tool
+
+icon_menu,
+        id		   = compress,
+	type		   = submenu,
+        icon               = archive,
+	label		   = 'Archive as ...'
+ 
+icon_menu,
+	cmd		   = compress_tgz,
+	label		   = 'TAR/&GZ',
+	parent_menu 	   = compress,
+        service		   = icon_group_tool
+
+icon_menu,
+	type 		   = separator,
+        parent_menu 	   = compress
+
+icon_menu,
+	cmd		   = compress_tbz,
+	label		   = 'TAR/&BZIP',
+	parent_menu 	   = compress,
+	service		   = icon_group_tool
+	
+icon_menu,
+	cmd		   = compress_tzip,
+	label		   = 'TAR/ZI&P',
+	parent_menu 	   = compress,
+	service		   = icon_group_tool
+
+icon_menu,
+	cmd		   = compress_tar,
+	label		   = '&TAR',
+	parent_menu 	   = compress,
+	service		   = icon_group_tool
+
+icon_menu,
+	cmd		   = compress_zip,
+	label		   = '&ZIP',
+	parent_menu 	   = compress,
+	service		   = icon_group_tool
+
+
+icon_menu,
+	cmd		   = extract,
+	label              = 'Extract'
+
+
+#------------------------------------
+# Icon group context menu
+#------------------------------------
+
+group_menu,
+        icon_menu_id    = delete
+
+group_menu,
+        icon_menu_id    = destroy
+
+group_menu,
+	type 		= separator
+	
+group_menu,
+        icon_menu_id    = send
+
+group_menu,
+        icon_menu_id    = compress
diff --git a/share/metview/etc/UiSpec.IconFolderView b/share/metview/etc/UiSpec.IconFolderView
new file mode 100644
index 0000000..43c8028
--- /dev/null
+++ b/share/metview/etc/UiSpec.IconFolderView
@@ -0,0 +1,102 @@
+#------------------------------------
+# Icon + icon group context menu
+#------------------------------------
+
+%include UiSpec.FolderView
+
+#------------------------------------
+# Desktop context menu
+#------------------------------------
+
+desktop_menu,
+	id		   = create,
+	type		   = submenu,
+	label		   = 'Create new ...'
+
+desktop_menu,
+	cmd		   = createFolder,
+	label		   = '&Folder',
+	parent_menu 	   = create,
+        icon               = 'folder'
+
+desktop_menu,
+	type 		   = separator,
+        parent_menu 	   = create
+
+desktop_menu,
+	cmd		   = createMacro,
+	label		   = '&Macro',
+	parent_menu 	   = create,
+        icon               = 'macro'
+
+desktop_menu,
+	cmd		   = createIcon,
+	label		   = '&Icon',
+	parent_menu 	   = create,
+        icon               = 'add'
+
+desktop_menu,
+	type 		   = separator,
+        parent_menu 	   = create
+
+desktop_menu,
+	cmd		   = createLink,
+	label		   = '&Link',
+	parent_menu 	   = create,
+        icon               = 'link'
+
+desktop_menu,
+	type 		   = separator
+
+desktop_menu,
+	id		   = grid,
+	type		   = submenu,
+	label		   = 'Arrange on grid by ...'
+
+desktop_menu,
+	cmd		   = toGridByName,
+	label		   = '&Name',
+	parent_menu 	   = grid
+        
+desktop_menu,
+	cmd		   = toGridBySize,
+	label		   = '&Size',
+	parent_menu 	   = grid
+
+desktop_menu,
+	cmd		   = toGridByType,
+	label		   = '&Type',
+	parent_menu 	   = grid
+
+desktop_menu,
+	cmd		   = showLastAction,
+	label		   = Show last icon created,
+        icon 		   = showLastIcon
+
+desktop_menu,
+	cmd		   = sizeDown,
+	label		   = '&Decrease size',
+	shortcut	   = 'Ctrl+-'
+
+desktop_menu,
+	cmd		   = sizeUp,
+	label		   = '&Increase size',
+	shortcut	   = 'Ctrl++'
+
+desktop_menu,
+	type 		   = separator
+
+desktop_menu,
+	cmd		   = bookmarkFolder,
+	label		   = 'Add folder to &bookmarks',
+	icon	   	   = add_bookmark
+
+desktop_menu,
+	type 		   = separator      
+
+desktop_menu,
+	cmd		   = reload,
+	label		   = '&Reload',
+        shortcut	   = reload,
+	icon	   	   = reload
+  
diff --git a/share/metview/etc/UiSpec.IconHelpView b/share/metview/etc/UiSpec.IconHelpView
new file mode 100644
index 0000000..12e918a
--- /dev/null
+++ b/share/metview/etc/UiSpec.IconHelpView
@@ -0,0 +1,60 @@
+#------------------------------------
+# Icon context menu
+#------------------------------------
+
+icon_menu,
+	cmd		   = edit,
+	label		   = '&Edit',
+	shortcut	   = Ctrl+E,
+        icon 		   = edit
+	
+icon_menu,
+	cmd		   = duplicate,
+	label		   = '&Duplicate',
+	shortcut	   = Ctrl+D,
+        icon 		   = duplicate
+
+icon_menu,
+	id		   = delete,
+        cmd		   = delete,
+	label		   = 'Move to &wastebin',
+	shortcut	   = Del,
+        icon 		   = wastebasket,
+	group		   = true
+
+icon_menu,
+	type 		   = separator
+
+icon_menu,
+        id		   = send,
+        cmd		   = send,
+	label		   = Send,
+        icon 		   = mail_send,
+	service		   = icon_group_tool
+
+
+#------------------------------------
+# Icon group context menu
+#------------------------------------
+
+group_menu,
+        icon_menu_id    = delete
+
+group_menu,
+	type 		= separator
+	
+group_menu,
+        icon_menu_id    = send
+
+
+#------------------------------------
+# Desktop context menu
+#------------------------------------
+
+desktop_menu,
+	cmd		   = createIcon,
+	label		   = '&Icon',
+        icon               = 'add'
+
+
+
diff --git a/share/metview/etc/UiSpec.IconHolderView b/share/metview/etc/UiSpec.IconHolderView
new file mode 100644
index 0000000..6213710
--- /dev/null
+++ b/share/metview/etc/UiSpec.IconHolderView
@@ -0,0 +1,16 @@
+#------------------------------------
+# Icon context menu
+#------------------------------------
+
+icon_menu,
+        cmd		   = edit,
+	label		   = '&Edit',
+	shortcut	   = 'Ctrl+E',
+	icon               = edit
+	
+icon_menu,
+        cmd		   = remove,
+	label		   = '&Remove',
+	shortcut	   = 'Ctrl+D'
+
+	
\ No newline at end of file
diff --git a/share/metview/etc/UiSpec.TemplateDrawerView b/share/metview/etc/UiSpec.TemplateDrawerView
new file mode 100644
index 0000000..2ba872e
--- /dev/null
+++ b/share/metview/etc/UiSpec.TemplateDrawerView
@@ -0,0 +1,68 @@
+#------------------------------------
+# Icon context menu
+#------------------------------------
+
+icon_menu,
+	cmd		   = edit,
+	label		   = '&Edit',
+	shortcut	   = Ctrl+E,
+        icon 		   = edit
+
+icon_menu,
+	cmd		   = mergeIcon,
+	label		   = '&Merge with icon',
+	shortcut	   = Ctrl+M
+        
+icon_menu,
+	cmd		   = replaceIcon,
+	label		   = '&Replace icon',
+	shortcut	   = Ctrl+M
+	
+icon_menu,
+	cmd		   = duplicate,
+	label		   = '&Duplicate',
+	shortcut	   = Ctrl+D,
+        icon 		   = duplicate
+
+icon_menu,
+	id		   = delete,
+        cmd		   = delete,
+	label		   = 'Move to &wastebin',
+	shortcut	   = Del,
+        icon 		   = wastebasket,
+	group		   = true
+
+icon_menu,
+	type 		   = separator
+
+icon_menu,
+        id		   = send,
+        cmd		   = send,
+	label		   = Send,
+        icon 		   = mail_send,
+	service		   = icon_group_tool
+
+
+#------------------------------------
+# Icon group context menu
+#------------------------------------
+
+group_menu,
+        icon_menu_id    = delete
+
+group_menu,
+	type 		= separator
+	
+group_menu,
+        icon_menu_id    = send
+
+
+#------------------------------------
+# Desktop context menu
+#------------------------------------
+
+desktop_menu,
+	cmd		   = createIcon,
+	label		   = '&Icon',
+        icon               = 'add'
+
diff --git a/share/metview/etc/UiSpec.ViewDrawerView b/share/metview/etc/UiSpec.ViewDrawerView
new file mode 100644
index 0000000..4d99037
--- /dev/null
+++ b/share/metview/etc/UiSpec.ViewDrawerView
@@ -0,0 +1,58 @@
+#------------------------------------
+# Icon context menu
+#------------------------------------
+
+icon_menu,
+	cmd		   = edit,
+	label		   = '&Edit',
+	shortcut	   = Ctrl+E,
+        icon 		   = edit
+
+icon_menu,
+	cmd		   = duplicate,
+	label		   = '&Duplicate',
+	shortcut	   = Ctrl+D,
+        icon 		   = duplicate
+
+icon_menu,
+	id		   = delete,
+        cmd		   = delete,
+	label		   = 'Move to &wastebin',
+	shortcut	   = Del,
+        icon 		   = wastebasket,
+	group		   = true
+
+icon_menu,
+	type 		   = separator
+
+icon_menu,
+        id		   = send,
+        cmd		   = send,
+	label		   = Send,
+        icon 		   = mail_send,
+	service		   = icon_group_tool
+
+
+#------------------------------------
+# Icon group context menu
+#------------------------------------
+
+group_menu,
+        icon_menu_id    = delete
+
+group_menu,
+	type 		= separator
+	
+group_menu,
+        icon_menu_id    = send
+
+
+#------------------------------------
+# Desktop context menu
+#------------------------------------
+
+desktop_menu,
+	cmd		   = createIcon,
+	label		   = '&Icon',
+        icon               = 'add'
+
diff --git a/share/metview/etc/dwd.def b/share/metview/etc/dwd.def
index d0d6488..cf8b6f9 100755
--- a/share/metview/etc/dwd.def
+++ b/share/metview/etc/dwd.def
@@ -687,6 +687,14 @@ LIST ;   list data   ;   DWD
 		/
 	}
 
+	PADDING
+	{
+		AUTOMATIC   ; AUTO
+		NONE        ; N    ; 0
+		OFF
+		*
+	} 
+
 	AREA {
         GLOBE               ;  GLOBE;  G
         EUROPE              ;  EUROPE; E
@@ -1059,3 +1067,171 @@ RETRIEVE ;   Archives data   ;   DWD
 
 } ! END OF ARCHIVE
 
+
+REMOVE ;   Removes data   ;   DWD
+{
+
+    CLASS  { 
+		MS
+	} = MS
+
+	COUNTRY {
+		DE
+		ALL
+	} = DE
+
+	DBASE {
+	   NUMEX
+	   LME
+	   GME
+	   PEGASUS
+	   ALL
+	} = NUMEX
+
+	RKI { 
+		ROUTI
+		MOMIT
+		NOTFA
+		TRAJ
+		75x50
+		150xy
+		RLM01
+		RLM03
+		RLM02
+		COVER
+		MIXED
+		QUALI
+		TEMPO
+		POLAR
+		@
+		ALL
+	} = ROUTI
+
+	RTY [ namespace = dwd, split = 1, type = string ]  {
+		ASSIMILATION; A
+		B
+		C
+		D
+		H
+		HAUPTLAUF; MAIN RUN ; M
+		N
+		P
+		R
+		T
+		V
+		ALL
+
+	} = M
+
+    TY {
+	&GRIB&TY
+	} = R128F
+
+    EXPVER  
+    {
+        *       
+    } 
+    
+    LEVTYPE { 
+		SFC
+		ML
+		PL
+		* 
+		/	
+		ALL
+	} 
+
+    PARAM { 
+		* 
+		/
+		ALL
+	} 
+
+	TIME {
+		*
+		/
+		ALL
+	}
+
+	DATE {
+		*
+		/
+		ALL
+	}
+
+    STEP { 
+		* 
+		/
+		ALL
+	} 
+
+
+    LEVELIST  
+    {
+		TO ; TO
+		BY ; BY 
+        OFF ;   OFF
+        *       
+        /       
+		ALL
+    } 
+    
+
+    SOURCE
+    {
+		@
+		/
+        "   
+    } = ""
+    
+    DISP
+    {
+        NEW ;   N
+        OLD ;   OLD
+		FAIL 
+		REMOVE
+    } = NEW
+    
+	DATABASE
+	{
+		@
+		/
+	} = marsms
+
+	EXPECT [ priority = 0 ]
+	{
+		ANY
+		*
+		OFF ; OFF
+	} = OFF
+
+
+	PASSWORD {
+		@
+	}
+
+	STREAM {
+		@
+	}
+
+	TYPE {
+		@
+	}
+
+	REPRES {
+		@
+	}
+
+	DOMAIN {
+		@
+	}
+
+	GRIB {
+		@
+	}
+
+	DUPLICATE {
+		@
+	}
+
+} ! END OF REMOVE
diff --git a/share/metview/etc/ecmwf.def b/share/metview/etc/ecmwf.def
index c953aca..0f5afb4 100755
--- a/share/metview/etc/ecmwf.def
+++ b/share/metview/etc/ecmwf.def
@@ -121,7 +121,8 @@ DIRECT SOLAR RADIATION                        ;  DSRP  ;  047
 DIVERGENCE                                    ;  D     ;  155
 DOWNWARD UV RADIATION AT THE SURFACE          ;  UVB   ;  057
 DUCT BASE HEIGHT                              ;  DCTB  ;  228017   ; 017.228
-E-W COMPONENT SURFACE STRESS                  ;  EWSS  ;  180
+EASTWARD GRAVITY WAVE SURFACE STRESS          ;  LGWS  ;  195
+EASTWARD TURBULENT SURFACE STRESS             ;  EWSS  ;  180
 E-W OROGRAPHIC VARIANCE.                      ;  EWOV  ;  190
 EQUIVALENT POTENTIAL TEMPERATURE              ;  EQPT  ;  004
 ETA-COORDINATE VERTICAL VELOCITY              ;  ETADOT ; 077
@@ -153,8 +154,8 @@ ICE SURFACE TEMPERATURE LAYER 2               ;  ISTL2 ;  036
 ICE SURFACE TEMPERATURE LAYER 3               ;  ISTL3 ;  037
 ICE SURFACE TEMPERATURE LAYER 4               ;  ISTL4 ;  038
 INSTANT MOISTURE FLUX                         ;  IE    ;  232
-INSTANT X SURFACE STRESS                      ;  IEWS  ;  229
-INSTANT Y SURFACE STRESS                      ;  INSS  ;  230
+INSTANTANEOUS EASTWARD TURBULENT SURFACE STRESS   ;  IEWS  ; 229
+INSTANTANEOUS NORTHWARD TURBULENT SURFACE STRESS   ;  INSS  ; 230
 INSTANTANEOUS SURFACE SENSIBLE HEAT FLUX      ;  ISHF  ;  231
 K INDEX                                       ;  KX    ;  260121
 LAKE COVER                                    ;  CL    ;   26
@@ -170,7 +171,6 @@ LAND SEA MASK                                 ;  LSM   ;  172
 LARGE SCALE PRECIPITATION                     ;  LSP   ;  142
 LARGE SCALE PRECIPITATION FRACTION            ;  LSPF  ;  050
 LARGE SCALE SNOW-FALL                         ;  LSF   ;  240
-LATITUDINAL GRAVITYWAVE STRESS                ;  LGWS  ;  195
 LEAF AREA INDEX LOW VEGETATION                ;  LAILV ;   66
 LEAF AREA INDEX HIGH VEGETATION               ;  LAIHV ;   67
 LN SURFACE PRESSURE                           ;  LNSP  ;  152
@@ -216,7 +216,6 @@ MEAN WAVE PERIOD BASED ON SECOND MOMENT FOR SWELL      ; P2PS  ; 227
 MEAN WAVE PERIOD BASED ON SECOND MOMENT FOR WIND WAVES ; P2WW  ; 224
 MEAN WIND DIRECTION                           ;  MDWI  ;  242
 MEDIUM CLOUD COVER                            ;  MCC   ;  187
-MERIDIONAL GRAVITY WAVE STRESS                ;  MGWS  ;  196
 MINIMUM TEMPERATURE AT 2M                     ;  MN2T  ;  202
 MINIMUM TEMPERATURE AT 2M ANOMALY             ;  MN2TA  ;  202.171
 MINIMUM TEMPERATURE AT 2M IN THE LAST 6 HOURS ANOMALY  ;  MN2T6A  ;  122.171
@@ -225,7 +224,8 @@ MINIMUM TEMPERATURE AT 2M IN THE LAST 3 HOURS  ;  MN2T3 ;  228027 ; 027.228
 MINIMUM TEMPERATURE AT 2M IN THE LAST 24 HOURS ;  MN2T24 ;  52
 MINIMUM VERTICAL GRADIENT OF REFRACTIVITY INSIDE TRAPPING LAYER ; DNDZN ; 228015 ; 015.228
 MONTGOMERY POTENTIAL                          ;  MONT  ;  053
-N-S COMPONENT SURFACE STRESS                  ;  NSSS  ;  181
+NORTHWARD GRAVITY WAVE SURFACE STRESS         ;  MGWS  ;  196
+NORTHWARD TURBULENT SURFACE STRESS            ;  NSSS  ;  181
 N-S OROGRAPHIC VARIANCE                       ;  NSOV  ;  191
 NE-SW OROGRAPHIC VARIANCE                     ;  NWOV  ;  192
 NS GRAVITY WAVE DRAG                          ;  NSGD  ;  221
@@ -420,6 +420,7 @@ VERTICAL DIFFUSION OF ZONAL WIND              ;  VDZW  ;  218
 VERTICAL VELOCITY                             ;  W     ;  135
 VERTICALLY INTEGRATED MERIDIONAL HEAT TRANSPORT    ;  MHT   ;  170
 VERTICALLY INTEGRATED MERIDIONAL VOLUME TRANSPORT  ;  MTR   ;  168
+VERTICALLY INTEGRATED MOISTURE DIVERGENCE     ;  VIMD  ;  213
 VERTICALLY INTEGRATED ZONAL HEAT TRANSPORT         ;  ZHT   ;  169
 VERTICALLY INTEGRATED ZONAL VOLUME TRANSPORT       ;  ZTR   ;  167
 VOLUMETRIC SOIL WATER LAYER 1                 ;  SWVL1 ;  039
@@ -436,7 +437,7 @@ WAVE SPECTRAL PEAKEDNESS                      ;  WSP   ; 254
 WILTING POINT                                 ;  WILT  ; 228171  ; 171.228
 WIND GUST AT 10 METRES                        ;  10FG  ;  049
 WIND GUST AT 10 METRES INDEX                  ;  10FGI ;  049
-WIND GUST AT 10 METRES IN THE LAST 6 HOURS     ;  10FG6 ;  123
+WIND GUST AT 10 METRES IN THE LAST 6 HOURS     ;  10FG6 ;  123.128
 WIND GUST AT 10 METRES IN THE LAST 3 HOURS     ;  10FG3 ;  228028 ; 028.228
 WIND SPEED                                    ;  WS    ;   10
 ZERO DEGREE LEVEL                             ;  DEG0L ; 228024  ; 24.228
@@ -683,7 +684,8 @@ TOTAL AEROSOL OPTICAL DEPTH AT 1240NM         ; AOD1240 ; 216.210
 		ESAT        ; EA
 		EPST        ; EP
 
-        EURO4M      ; 4M
+        EURO4M      ; RM
+        20CR        ; NCEP 20CR ; NR
 
 		! Member stats
 
@@ -790,6 +792,7 @@ TOTAL AEROSOL OPTICAL DEPTH AT 1240NM         ; AOD1240 ; 216.210
 		FCSTDEV
 		ODB FEEDBACK                ; OFB
 		MONDB FEEDBACK              ; MFB
+		ODB ANALYSIS INPUT          ; OAI
 
     } = AN
     
@@ -1031,7 +1034,7 @@ GRIB IMAGES #= (0/1/10/20)
 
 # Extractions
 
-BUFR = (1/3/9/11/13/19/21/22/23/28/61/62/63/82/83/84/85/86/87/91/92/95/96/101/102/103/106/110/140/142/144/145/164)
+BUFR = (1/3/9/11/13/19/21/22/23/28/61/62/63/82/83/84/85/86/87/91/92/95/96/101/102/103/106/110/140/142/144/145/147/164)
 WAVESCAT = (121)
 SCAT = (122)
 RALT = (123)
@@ -1049,6 +1052,7 @@ OSTIA = (26)
 ENVISAT_MERIS = (212)
 ATMS = (201)
 CRIS = (202)
+SMOS = (203)
 
 # FeedBack
 
@@ -1070,7 +1074,7 @@ FBWINDSAT = (156)
 
 # Type LSD (NSD)
 
-	LAND SURFACE DATA         ; LSD = (1/2/3/4/7/140/165/28)
+	LAND SURFACE DATA         ; LSD = (1/2/3/4/7/28/140/147/165)
 
 	SYNOP LAND                ; S   ; 1
 	SYNOP RECORD 2 LAND       ; S2  ; 2
@@ -1078,6 +1082,7 @@ FBWINDSAT = (156)
 	SYNOP AUTO RECORD 2 LAND  ; SA2 ; 4
 	SOIL AND EARTH TEMPERATURE; SET ; 7
 	METAR                     ; METAR ; 140
+	AUTO METAR                ; AMETAR ; 147
 	SNOW COVER                ; SNOWCOVER ; SNOW ; 165
 	SNOW DEPTH                ; SNOWD ; 28
 
@@ -1126,6 +1131,7 @@ VERTICAL SOUNDINGS SATELLITE ; VSS = (51/53/54/55/56/57/59/61/62/63/65/71/72/73/
 	ATOVS PRODUCTS         ;  ATOP  ; 56
 	AIRS                   ;  AIRS  ; 57
 	ADVANCED MICROWAVE SCANNING RADIOMETER  ;  AMSRE ; 59
+	ADVANCED MICROWAVE SCANNING RADIOMETER 2 ;  AMSR2 ; 60
 	SATEM MEAN TEMPERATURE ;  SMT   ; 61
 	SATEM WATER            ;  SW    ; 62
 	SATEM HIGHER LEVEL     ;  SHL   ; 63
@@ -1706,6 +1712,11 @@ ARCHIVE ;   Archives data   ;   MARS
         NEAREST NEIGHBOUR  
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
         OFF   
     } = OFF
 
@@ -2240,6 +2251,7 @@ LIST    ;   LIST FDF ENTRIES AND CFS FILES  ;   MARS
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
 		OFF         ;   OFF
     } = OFF
     
@@ -2269,14 +2281,6 @@ LIST    ;   LIST FDF ENTRIES AND CFS FILES  ;   MARS
     {
         GLOBE               ;  GLOBE;  G
         EUROPE              ;  EUROPE; E
-        NORTHERN HEMISPHERE OCTANT 1    ;   N1
-        NORTHERN HEMISPHERE OCTANT 2    ;   N2
-        NORTHERN HEMISPHERE OCTANT 3    ;   N3
-        NORTHERN HEMISPHERE OCTANT 4    ;   N4
-        SOUTHERN HEMISPHERE OCTANT 1    ;   S1
-        SOUTHERN HEMISPHERE OCTANT 2    ;   S2
-        SOUTHERN HEMISPHERE OCTANT 3    ;   S3
-        SOUTHERN HEMISPHERE OCTANT 4    ;   S4
         *   
         /   
 		OFF; OFF
@@ -2503,6 +2507,9 @@ STAGE    ;   STAGE FIELDS ;    MARS
 		OFF    ; OFF
 	} = OFF
 
+    REPORTYPE { &_DUMMY&REPORTYPE } = OFF
+
+
     PARAM
     {
         ALL             ;   ALL
@@ -3647,6 +3654,7 @@ RETRIEVE    ;   Retrieval of data   ;   MARS
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
     } = P
     
     DISP [ java_control = CHOICE,
@@ -3719,6 +3727,11 @@ RETRIEVE    ;   Retrieval of data   ;   MARS
 		NEAREST NEIGHBOUR
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
 		OFF
 	} = OFF
 
@@ -3732,14 +3745,6 @@ RETRIEVE    ;   Retrieval of data   ;   MARS
     {
         GLOBE                           ;   G
         EUROPE                          ;   E 
-        NORTHERN HEMISPHERE OCTANT 1    ;   N1
-        NORTHERN HEMISPHERE OCTANT 2    ;   N2
-        NORTHERN HEMISPHERE OCTANT 3    ;   N3
-        NORTHERN HEMISPHERE OCTANT 4    ;   N4
-        SOUTHERN HEMISPHERE OCTANT 1    ;   S1
-        SOUTHERN HEMISPHERE OCTANT 2    ;   S2
-        SOUTHERN HEMISPHERE OCTANT 3    ;   S3
-        SOUTHERN HEMISPHERE OCTANT 4    ;   S4
         *   
         /   
 		OFF
@@ -4268,6 +4273,11 @@ READ ; X; METVIEW
         NEAREST NEIGHBOUR  
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
         OFF   
 		ANY
     } = ANY
@@ -5667,6 +5677,7 @@ FETCH    ;   Fetch data   ;   MARS
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
     } = P
     
     RESOL [ java_control = CHOICE_TEXT_2, java_section = DATA, java_hidden = FALSE ]
@@ -5692,14 +5703,6 @@ FETCH    ;   Fetch data   ;   MARS
     {
         GLOBE               ;  GLOBE;  G
         EUROPE              ;  EUROPE; E
-        NORTHERN HEMISPHERE OCTANT 1    ;   N1
-        NORTHERN HEMISPHERE OCTANT 2    ;   N2
-        NORTHERN HEMISPHERE OCTANT 3    ;   N3
-        NORTHERN HEMISPHERE OCTANT 4    ;   N4
-        SOUTHERN HEMISPHERE OCTANT 1    ;   S1
-        SOUTHERN HEMISPHERE OCTANT 2    ;   S2
-        SOUTHERN HEMISPHERE OCTANT 3    ;   S3
-        SOUTHERN HEMISPHERE OCTANT 4    ;   S4
         *   
         /   
     } = G
@@ -6153,6 +6156,7 @@ BROWSE    ;   LIST FDF ENTRIES AND CFS FILES  ;   MARS
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
 		OFF         ;   OFF
     } 
     
@@ -6176,14 +6180,6 @@ BROWSE    ;   LIST FDF ENTRIES AND CFS FILES  ;   MARS
     {
         GLOBE               ;  GLOBE;  G
         EUROPE              ;  EUROPE; E
-        NORTHERN HEMISPHERE OCTANT 1    ;   N1
-        NORTHERN HEMISPHERE OCTANT 2    ;   N2
-        NORTHERN HEMISPHERE OCTANT 3    ;   N3
-        NORTHERN HEMISPHERE OCTANT 4    ;   N4
-        SOUTHERN HEMISPHERE OCTANT 1    ;   S1
-        SOUTHERN HEMISPHERE OCTANT 2    ;   S2
-        SOUTHERN HEMISPHERE OCTANT 3    ;   S3
-        SOUTHERN HEMISPHERE OCTANT 4    ;   S4
         *   
         /   
 		OFF; OFF
@@ -6916,6 +6912,7 @@ ERASE    ;   Erase data   ;   MARS
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
     } = P
     
     DISP
@@ -6961,6 +6958,11 @@ ERASE    ;   Erase data   ;   MARS
 		NEAREST NEIGHBOUR
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
 		OFF
 	} = OFF
 
diff --git a/share/metview/etc/ifsdata/Makefile.in b/share/metview/etc/ifsdata/Makefile.in
index 76982b1..aa20dca 100644
--- a/share/metview/etc/ifsdata/Makefile.in
+++ b/share/metview/etc/ifsdata/Makefile.in
@@ -106,6 +106,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -121,6 +122,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -147,11 +150,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/share/metview/etc/macro_built_in_functions.txt b/share/metview/etc/macro_built_in_functions.txt
index e31bf8c..e140a58 100644
--- a/share/metview/etc/macro_built_in_functions.txt
+++ b/share/metview/etc/macro_built_in_functions.txt
@@ -2,6 +2,7 @@ abs
 accumulate
 acos
 addmonths
+annotationview
 any
 append
 arguments
@@ -13,6 +14,7 @@ attributes
 average
 average_ew
 average_ns
+averageview
 binning
 bitmap
 bufr_picker
@@ -28,7 +30,6 @@ coslat
 count
 covar
 covar_a
-cptec_access
 create_geo
 cross_sect
 datacoverage
@@ -101,6 +102,7 @@ hovmoeller_area
 hovmoeller_expand
 hovmoeller_height
 hovmoeller_line
+hovmoellerview
 icon
 in
 indexes
@@ -137,6 +139,7 @@ maxis
 maxvalue
 mcoast
 mcont
+mcross_sect
 mean
 mean_ew
 menu
@@ -145,15 +148,24 @@ metadata_keys
 metadata_value
 meteogram
 mgraph
+mhovmoeller_area
+mhovmoeller_expand
+mhovmoeller_line
+mhovmoeller_vertical
+mhovmoellerview
 min
 minute
 minvalue
 mlegend
 month
 msymb
+mtaylor
+mtephi
 mtext
+mvert_prof
 mvertprofview
 mwind
+mxs_average
 mxsectview
 name
 nearest_gridpoint
@@ -164,7 +176,6 @@ nobitmap
 now
 number
 obsfilter
-obstat
 odb_filter
 odb_visualiser
 offset
@@ -181,11 +192,14 @@ percentile
 pgraph
 plot_page
 plot_subpage
+pm_bufr_tephi
+pm_grib_tephi
 png_output
 pobs
 polar_vector
 pott_m
 pott_p
+pre1995gribtephi
 precision
 pressure
 print
@@ -197,21 +211,26 @@ putenv
 pwind
 random
 read
+read_ecregrid
 read_g2
 read_table
 read_tigge
 reduce
+relhum
 remove_duplicates
 remove_missing_values
 repeat
 reprojection
 retrieve
+retrieve_ecregrid
 retrieve_g2
 retrieve_odb
 retrieve_tigge
 rmask
 rms
 round
+rttov_run
+rttov_visualiser
 runmode
 scm_run
 scm_visualiser
@@ -291,13 +310,13 @@ velpot
 version_info
 vert_prof
 vertint
-vis5d
+vertprofview
 waitmode
-wcsclient
 webaccess
 wmsclient
 write
 xs_average
+xsectview
 xy_vector
 year
 yymmdd
diff --git a/share/metview/etc/macro_icon_function_help.xml b/share/metview/etc/macro_icon_function_help.xml
index 88ca9bf..c740b3e 100644
--- a/share/metview/etc/macro_icon_function_help.xml
+++ b/share/metview/etc/macro_icon_function_help.xml
@@ -1,4 +1,30 @@
 <macro_icon_functions>
+<function name='annotationview'>
+  <param name='SUBPAGE_X_POSITION' />
+  <param name='SUBPAGE_Y_POSITION' />
+  <param name='SUBPAGE_X_LENGTH' />
+  <param name='SUBPAGE_Y_LENGTH' />
+  <param name='PAGE_FRAME' values = 'ON/OFF' />
+  <param name='PAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
+  <param name='PAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='PAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='PAGE_ID_LINE' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_TYPE' values = 'BOTH/LOGO_ONLY/ID_LINE_ONLY' />
+  <param name='PAGE_ID_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
+  <param name='PAGE_ID_LINE_SYSTEM_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_DATE_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_USER_TEXT_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_USER_TEXT' />
+  <param name='PAGE_ID_LINE_ERRORS_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_LOGO_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_HEIGHT' />
+  <param name='PAGE_ID_LINE_QUALITY' values = 'LOW/MEDIUM/HIGH' />
+  <param name='SUBPAGE_FRAME' values = 'ON/OFF' />
+  <param name='SUBPAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
+  <param name='SUBPAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='SUBPAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='SUBPAGE_BACKGROUND_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
+</function>
 <function name='any'>
   <param name='name' />
   <param name='values' />
@@ -9,6 +35,43 @@
   <param name='input_window' />
   <param name='help_script_command' />
 </function>
+<function name='averageview'>
+  <param name='AREA' />
+  <param name='DIRECTION' values = 'NORTH SOUTH/EAST WEST' />
+  <param name='BOTTOM_PRESSURE' />
+  <param name='TOP_PRESSURE' />
+  <param name='PRESSURE_LEVEL_AXIS' values = 'LINEAR/LOG' />
+  <param name='OVERLAY_CONTROL' />
+  <param name='MATCH_DATE' values = 'YES/NO' />
+  <param name='MATCH_TIME' values = 'YES/NO' />
+  <param name='MATCH_LEVEL' values = 'YES/NO' />
+  <param name='MATCH_AREA' values = 'YES/NO' />
+  <param name='MATCH_VERTICAL_AXIS' values = 'YES/NO' />
+  <param name='SUBPAGE_X_POSITION' />
+  <param name='SUBPAGE_Y_POSITION' />
+  <param name='SUBPAGE_X_LENGTH' />
+  <param name='SUBPAGE_Y_LENGTH' />
+  <param name='PAGE_FRAME' values = 'ON/OFF' />
+  <param name='PAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
+  <param name='PAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='PAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='PAGE_ID_LINE' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_TYPE' values = 'BOTH/LOGO_ONLY/ID_LINE_ONLY' />
+  <param name='PAGE_ID_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
+  <param name='PAGE_ID_LINE_SYSTEM_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_DATE_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_USER_TEXT_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_USER_TEXT' />
+  <param name='PAGE_ID_LINE_ERRORS_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_LOGO_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_HEIGHT' />
+  <param name='PAGE_ID_LINE_QUALITY' values = 'LOW/MEDIUM/HIGH' />
+  <param name='SUBPAGE_FRAME' values = 'ON/OFF' />
+  <param name='SUBPAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
+  <param name='SUBPAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='SUBPAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='SUBPAGE_BACKGROUND_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
+</function>
 <function name='binning'>
 </function>
 <function name='bufr_picker'>
@@ -22,6 +85,7 @@
   <param name='FAIL_ON_ERROR' values = 'YES/NO' />
 </function>
 <function name='cartesianview'>
+  <param name='MAP_PROJECTION' values = 'cartesian/tephigram/taylor' />
   <param name='X_AUTOMATIC' values = 'on/off' />
   <param name='X_AXIS_TYPE' values = 'regular/date/logarithmic/geoline' />
   <param name='X_MIN' />
@@ -32,6 +96,7 @@
   <param name='X_MAX_LONGITUDE' />
   <param name='X_DATE_MIN' />
   <param name='X_DATE_MAX' />
+  <param name='X_AUTOMATIC_REVERSE' values = 'on/off' />
   <param name='Y_AUTOMATIC' values = 'on/off' />
   <param name='Y_AXIS_TYPE' values = 'regular/date/logarithmic/geoline' />
   <param name='Y_MIN' />
@@ -42,9 +107,11 @@
   <param name='Y_MAX_LONGITUDE' />
   <param name='Y_DATE_MIN' />
   <param name='Y_DATE_MAX' />
+  <param name='Y_AUTOMATIC_REVERSE' values = 'on/off' />
   <param name='HORIZONTAL_AXIS' />
   <param name='VERTICAL_AXIS' />
-  <param name='MAP_PROJECTION' values = 'cartesian' />
+  <param name='TEPHIGRAM_GRID' />
+  <param name='TAYLOR_GRID' />
   <param name='SUBPAGE_X_POSITION' />
   <param name='SUBPAGE_Y_POSITION' />
   <param name='SUBPAGE_X_LENGTH' />
@@ -99,15 +166,6 @@
   <param name='ACCURACY' values = 'NORMAL/REDUCED/LOW/OFF/ARCHIVED VALUE' />
   <param name='TARGET' values = 'OFF' />
 </function>
-<function name='cptec_access'>
-  <param name='MODEL' values = 'ETA_15Km_1h/ETA_15Km_3h/ETA_20Km/GLOBAL' />
-  <param name='LEVTYPE' values = 'SURFACE/10_METER/PRESSURE_LEVEL/MODEL_LEVEL' />
-  <param name='LEVELIST' />
-  <param name='PARAM' />
-  <param name='DATE' values = 'JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
-  <param name='TIME' />
-  <param name='STEP' values = 'TO/BY' />
-</function>
 <function name='cross_sect'>
 </function>
 <function name='datacoverage'>
@@ -192,7 +250,7 @@
   <param name='HUMIDITY' />
 </function>
 <function name='flexpart_run'>
-  <param name='FLEXPART_EXE' />
+  <param name='FLEXPART_EXE_PATH' />
   <param name='FLEXPART_INPUT_MODE' values = 'ICON/PATH' />
   <param name='FLEXPART_INPUT_DATA' />
   <param name='FLEXPART_INPUT_PATH' />
@@ -201,7 +259,9 @@
   <param name='FLEXPART_RUN_MODE' values = 'NORMAL/CET/FLIGHT' />
   <param name='FLEXPART_SIMULATION_DIRECTION' values = 'FORWARD/BACKWARD' />
   <param name='FLEXPART_STARTING_DATE' />
+  <param name='FLEXPART_STARTING_TIME' />
   <param name='FLEXPART_ENDING_DATE' />
+  <param name='FLEXPART_ENDING_TIME' />
   <param name='FLEXPART_OUTPUT_INTERVAL' />
   <param name='FLEXPART_OUTPUT_AVERAGING_INTERVAL' />
   <param name='FLEXPART_OUTPUT_SAMPLING_INTERVAL' />
@@ -222,6 +282,29 @@
   <param name='FLEXPART_TRACK_PARTICLES' values = 'ON/OFF' />
   <param name='FLEXPART_NESTED_OUTPUT' values = 'ON/OFF' />
   <param name='FLEXPART_WRITE_INITIAL_CONDITIONS' values = 'NO/MASS/MASS MIXING RATIO' />
+  <param name='FLEXPART_GRID_WEST' />
+  <param name='FLEXPART_GRID_SOUTH' />
+  <param name='FLEXPART_GRID_NX' />
+  <param name='FLEXPART_GRID_NY' />
+  <param name='FLEXPART_GRID_DX' />
+  <param name='FLEXPART_GRID_DY' />
+  <param name='FLEXPART_GRID_LEVELS' />
+  <param name='FLEXPART_RELEASE_SPECIES' />
+  <param name='FLEXPART_RELEASE_NAMES' />
+  <param name='FLEXPART_RELEASE_STARTING_DATES' />
+  <param name='FLEXPART_RELEASE_STARTING_TIMES' />
+  <param name='FLEXPART_RELEASE_ENDING_DATES' />
+  <param name='FLEXPART_RELEASE_ENDING_TIMES' />
+  <param name='FLEXPART_RELEASE_AREAS_WEST' />
+  <param name='FLEXPART_RELEASE_AREAS_SOUTH' />
+  <param name='FLEXPART_RELEASE_AREAS_NORTH' />
+  <param name='FLEXPART_RELEASE_AREAS_EAST' />
+  <param name='FLEXPART_RELEASE_LEVELS_TOP' />
+  <param name='FLEXPART_RELEASE_LEVELS_BOTTOM' />
+  <param name='FLEXPART_RELEASE_LEVELS_UNITS' />
+  <param name='FLEXPART_RELEASE_PARTICLES' />
+  <param name='FLEXPART_RELEASE_MASSES' />
+  <param name='FLEXPART_AGECLASSES' />
 </function>
 <function name='flextra_prepare'>
   <param name='FLEXTRA_PREPARE_MODE' values = 'FORECAST/PERIOD' />
@@ -321,7 +404,7 @@
 </function>
 <function name='geoview'>
   <param name='COASTLINES' />
-  <param name='MAP_PROJECTION' values = 'CYLINDRICAL/POLAR_STEREOGRAPHIC/POLAR_NORTH/LAMBERT/GEOS/GOODE/COLLIGNON/MOLLWEIDE/BONNE/EPSG:32661/EPSG:4326' />
+  <param name='MAP_PROJECTION' values = 'CYLINDRICAL/POLAR_STEREOGRAPHIC/POLAR_NORTH/LAMBERT/LAMBERT_NORTH_ATLANTIC/GEOS/GOODE/COLLIGNON/MOLLWEIDE/ROBINSON/BONNE/EPSG:32661/EPSG:4326' />
   <param name='MAP_AREA_DEFINITION' values = 'CORNERS/CENTRE/FULL' />
   <param name='AREA' />
   <param name='MAP_HEMISPHERE' values = 'NORTH/SOUTH' />
@@ -381,6 +464,38 @@
 <function name='hovmoeller_line'>
   <param name='APPLICATION' values = 'LINE_HOV/AREA_HOV/HEIGHT_HOV/EXPAND_HOV' />
 </function>
+<function name='hovmoellerview'>
+  <param name='OVERLAY_CONTROL' />
+  <param name='MATCH_DATE' values = 'YES/NO' />
+  <param name='MATCH_TIME' values = 'YES/NO' />
+  <param name='MATCH_LEVEL' values = 'YES/NO' />
+  <param name='MATCH_AREA' values = 'YES/NO' />
+  <param name='MATCH_VERTICAL_AXIS' values = 'YES/NO' />
+  <param name='SUBPAGE_X_POSITION' />
+  <param name='SUBPAGE_Y_POSITION' />
+  <param name='SUBPAGE_X_LENGTH' />
+  <param name='SUBPAGE_Y_LENGTH' />
+  <param name='PAGE_FRAME' values = 'ON/OFF' />
+  <param name='PAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
+  <param name='PAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='PAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='PAGE_ID_LINE' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_TYPE' values = 'BOTH/LOGO_ONLY/ID_LINE_ONLY' />
+  <param name='PAGE_ID_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
+  <param name='PAGE_ID_LINE_SYSTEM_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_DATE_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_USER_TEXT_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_USER_TEXT' />
+  <param name='PAGE_ID_LINE_ERRORS_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_LOGO_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_HEIGHT' />
+  <param name='PAGE_ID_LINE_QUALITY' values = 'LOW/MEDIUM/HIGH' />
+  <param name='SUBPAGE_FRAME' values = 'ON/OFF' />
+  <param name='SUBPAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
+  <param name='SUBPAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='SUBPAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='SUBPAGE_BACKGROUND_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
+</function>
 <function name='icon'>
   <param name='name' />
   <param name='class' />
@@ -445,7 +560,7 @@
   <param name='MAP_VERTICAL_LONGITUDE' />
   <param name='MAP_CENTRE_LATITUDE' />
   <param name='MAP_CENTRE_LONGITUDE' />
-  <param name='MAP_PROJ4_DEFINITION' values = 'POLAR_NORTH/LAMBERT/EPSG:32661/EPSG:4326/CYLINDRICAL/GEOS/GOODE/COLLIGNON/MOLLWEIDE/BONNE' />
+  <param name='MAP_PROJ4_DEFINITION' values = 'POLAR_NORTH/LAMBERT/EPSG:32661/EPSG:4326/CYLINDRICAL/GEOS/GOODE/COLLIGNON/MOLLWEIDE/ROBINSON/BONNE' />
   <param name='MAP_PROJ4_GLOBAL' values = 'ON/OFF' />
   <param name='MAP_SCALE' />
   <param name='MAP_STANDARD_LATITUDE_1' />
@@ -486,101 +601,50 @@
   <param name='SUBPAGE_BACKGROUND_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
 </function>
 <function name='maverageview'>
-  <param name='AREA' />
-  <param name='DIRECTION' values = 'NORTH SOUTH/EAST WEST' />
-  <param name='BOTTOM_PRESSURE' />
-  <param name='TOP_PRESSURE' />
-  <param name='PRESSURE_LEVEL_AXIS' values = 'LINEAR/LOG' />
-  <param name='MAP_PROJECTION' values = 'cartesian' />
-  <param name='HORIZONTAL_AXIS' />
-  <param name='VERTICAL_AXIS' />
-  <param name='SUBPAGE_X_POSITION' />
-  <param name='SUBPAGE_Y_POSITION' />
-  <param name='SUBPAGE_X_LENGTH' />
-  <param name='SUBPAGE_Y_LENGTH' />
-  <param name='PAGE_FRAME' values = 'ON/OFF' />
-  <param name='PAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
-  <param name='PAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
-  <param name='PAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
-  <param name='PAGE_ID_LINE' values = 'ON/OFF' />
-  <param name='PAGE_ID_LINE_TYPE' values = 'BOTH/LOGO_ONLY/ID_LINE_ONLY' />
-  <param name='PAGE_ID_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
-  <param name='PAGE_ID_LINE_SYSTEM_PLOT' values = 'ON/OFF' />
-  <param name='PAGE_ID_LINE_DATE_PLOT' values = 'ON/OFF' />
-  <param name='PAGE_ID_LINE_USER_TEXT_PLOT' values = 'ON/OFF' />
-  <param name='PAGE_ID_LINE_USER_TEXT' />
-  <param name='PAGE_ID_LINE_ERRORS_PLOT' values = 'ON/OFF' />
-  <param name='PAGE_ID_LINE_LOGO_PLOT' values = 'ON/OFF' />
-  <param name='PAGE_ID_LINE_HEIGHT' />
-  <param name='PAGE_ID_LINE_QUALITY' values = 'LOW/MEDIUM/HIGH' />
-  <param name='SUBPAGE_FRAME' values = 'ON/OFF' />
-  <param name='SUBPAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
-  <param name='SUBPAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
-  <param name='SUBPAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
-  <param name='SUBPAGE_BACKGROUND_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
 </function>
 <function name='maxis'>
   <param name='AXIS_ORIENTATION' values = 'HORIZONTAL/VERTICAL' />
   <param name='AXIS_POSITION' values = 'BOTTOM/TOP/LEFT/RIGHT/AUTOMATIC' />
   <param name='AXIS_TYPE' values = 'REGULAR/POSITION_LIST/LOGARITHMIC/DATE/GEOLINE' />
-  <param name='AXIS_TICK_INTERVAL' />
-  <param name='AXIS_TICK_POSITION_LIST' />
-  <param name='AXIS_DATE_TYPE' values = 'AUTOMATIC/YEARS/MONTHS/DAYS/HOURS' />
-  <param name='AXIS_YEARS_LABEL' values = 'ON/OFF' />
-  <param name='AXIS_YEARS_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
-  <param name='AXIS_YEARS_LABEL_QUALITY' />
-  <param name='AXIS_YEARS_LABEL_HEIGHT' />
-  <param name='AXIS_MONTHS_LABEL' values = 'ON/OFF' />
-  <param name='AXIS_MONTHS_LABEL_COMPOSITION' values = 'ONE/TWO/THREE' />
-  <param name='AXIS_MONTHS_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_O [...]
-  <param name='AXIS_MONTHS_LABEL_QUALITY' />
-  <param name='AXIS_MONTHS_LABEL_HEIGHT' />
-  <param name='AXIS_DAYS_LABEL' values = 'DAY/NUMBER/BOTH/OFF' />
-  <param name='AXIS_DAYS_LABEL_COMPOSITION' values = 'ONE/THREE/FULL' />
-  <param name='AXIS_DAYS_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORA [...]
-  <param name='AXIS_DAYS_SUNDAY_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDD [...]
-  <param name='AXIS_DAYS_LABEL_QUALITY' />
-  <param name='AXIS_DAYS_LABEL_HEIGHT' />
-  <param name='AXIS_HOURS_LABEL' values = 'ON/OFF' />
-  <param name='AXIS_HOURS_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
-  <param name='AXIS_HOURS_LABEL_QUALITY' />
-  <param name='AXIS_HOURS_LABEL_HEIGHT' />
   <param name='AXIS_LINE' values = 'ON/OFF' />
   <param name='AXIS_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RU [...]
-  <param name='AXIS_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='AXIS_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
   <param name='AXIS_LINE_THICKNESS' />
   <param name='AXIS_GRID' values = 'ON/OFF' />
   <param name='AXIS_GRID_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RU [...]
-  <param name='AXIS_GRID_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='AXIS_GRID_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
   <param name='AXIS_GRID_THICKNESS' />
   <param name='AXIS_GRID_REFERENCE_LEVEL' />
   <param name='AXIS_GRID_REFERENCE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH [...]
-  <param name='AXIS_GRID_REFERENCE_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='AXIS_GRID_REFERENCE_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
   <param name='AXIS_GRID_REFERENCE_THICKNESS' />
   <param name='AXIS_TITLE' values = 'ON/OFF' />
   <param name='AXIS_TITLE_TEXT' />
-  <param name='AXIS_TITLE_ORIENTATION' />
+  <param name='AXIS_TITLE_ORIENTATION' values = 'HORIZONTAL/VERTICAL/PARALLEL' />
   <param name='AXIS_TITLE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
   <param name='AXIS_TITLE_HEIGHT' />
-  <param name='AXIS_TITLE_QUALITY' />
+  <param name='AXIS_TITLE_FONT' values = 'SERIF/SANSSERIF' />
+  <param name='AXIS_TITLE_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
   <param name='AXIS_TICK' values = 'ON/OFF' />
+  <param name='AXIS_TICK_INTERVAL' />
+  <param name='AXIS_TICK_POSITION_LIST' />
   <param name='AXIS_TICK_POSITION' values = 'OUT/IN' />
   <param name='AXIS_TICK_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RU [...]
   <param name='AXIS_TICK_SIZE' />
   <param name='AXIS_TICK_THICKNESS' />
   <param name='AXIS_TICK_LABEL' values = 'ON/OFF' />
   <param name='AXIS_TICK_LABEL_TYPE' values = 'NUMBER/LABEL_LIST/LATITUDE/LONGITUDE' />
-  <param name='AXIS_TICK_LABEL_FORMAT' />
-  <param name='AXIS_TICK_LABEL_LIST' />
   <param name='AXIS_TICK_LABEL_FREQUENCY' />
   <param name='AXIS_TICK_LABEL_FIRST' values = 'ON/OFF' />
   <param name='AXIS_TICK_LABEL_LAST' values = 'ON/OFF' />
   <param name='AXIS_TICK_LABEL_POSITION' values = 'ON_TICK/INTER_TICK' />
   <param name='AXIS_TICK_LABEL_ORIENTATION' values = 'HORIZONTAL/VERTICAL/PARALLEL' />
-  <param name='AXIS_TICK_LABEL_FONT' />
-  <param name='AXIS_TICK_LABEL_FONT_STYLE' />
+  <param name='AXIS_TICK_LABEL_FONT' values = 'SERIF/SANSSERIF' />
+  <param name='AXIS_TICK_LABEL_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
   <param name='AXIS_TICK_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORA [...]
   <param name='AXIS_TICK_LABEL_HEIGHT' />
+  <param name='AXIS_TICK_LABEL_LIST' />
+  <param name='AXIS_TICK_LABEL_FORMAT' />
   <param name='AXIS_MINOR_TICK' values = 'ON/OFF' />
   <param name='AXIS_MINOR_TICK_COUNT' />
   <param name='AXIS_MINOR_TICK_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORA [...]
@@ -590,54 +654,75 @@
   <param name='AXIS_TIP_TITLE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORAN [...]
   <param name='AXIS_TIP_TITLE_HEIGHT' />
   <param name='AXIS_TIP_TITLE_QUALITY' values = 'HIGH/MEDIUM/LOW' />
+  <param name='AXIS_DATE_TYPE' values = 'AUTOMATIC/YEARS/MONTHS/DAYS/HOURS' />
+  <param name='AXIS_YEARS_LABEL' values = 'ON/OFF' />
+  <param name='AXIS_YEARS_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
+  <param name='AXIS_YEARS_LABEL_QUALITY' values = 'HIGH/MEDIUM/LOW' />
+  <param name='AXIS_YEARS_LABEL_HEIGHT' />
+  <param name='AXIS_MONTHS_LABEL' values = 'ON/OFF' />
+  <param name='AXIS_MONTHS_LABEL_COMPOSITION' values = 'ONE/TWO/THREE' />
+  <param name='AXIS_MONTHS_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_O [...]
+  <param name='AXIS_MONTHS_LABEL_QUALITY' values = 'HIGH/MEDIUM/LOW' />
+  <param name='AXIS_MONTHS_LABEL_HEIGHT' />
+  <param name='AXIS_DAYS_LABEL' values = 'DAY/NUMBER/BOTH/OFF' />
+  <param name='AXIS_DAYS_LABEL_COMPOSITION' values = 'ONE/THREE/FULL' />
+  <param name='AXIS_DAYS_LABEL_POSITION' />
+  <param name='AXIS_DAYS_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORA [...]
+  <param name='AXIS_DAYS_SUNDAY_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDD [...]
+  <param name='AXIS_DAYS_LABEL_QUALITY' values = 'HIGH/MEDIUM/LOW' />
+  <param name='AXIS_DAYS_LABEL_HEIGHT' />
+  <param name='AXIS_HOURS_LABEL' values = 'ON/OFF' />
+  <param name='AXIS_HOURS_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
+  <param name='AXIS_HOURS_LABEL_QUALITY' values = 'HIGH/MEDIUM/LOW' />
+  <param name='AXIS_HOURS_LABEL_HEIGHT' />
 </function>
 <function name='mcoast'>
   <param name='MAP_COASTLINE' values = 'ON/OFF' />
   <param name='MAP_COASTLINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
-  <param name='MAP_COASTLINE_RESOLUTION' values = 'AUTOMATIC/LOW/MEDIUM/HIGH' />
-  <param name='MAP_COASTLINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='MAP_COASTLINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
   <param name='MAP_COASTLINE_THICKNESS' />
+  <param name='MAP_COASTLINE_RESOLUTION' values = 'AUTOMATIC/LOW/MEDIUM/HIGH' />
   <param name='MAP_COASTLINE_LAND_SHADE' values = 'ON/OFF' />
   <param name='MAP_COASTLINE_LAND_SHADE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/RE [...]
   <param name='MAP_COASTLINE_SEA_SHADE' values = 'ON/OFF' />
   <param name='MAP_COASTLINE_SEA_SHADE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/RED [...]
   <param name='MAP_BOUNDARIES' values = 'ON/OFF' />
-  <param name='MAP_BOUNDARIES_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
-  <param name='MAP_BOUNDARIES_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORAN [...]
-  <param name='MAP_BOUNDARIES_THICKNESS' />
-  <param name='MAP_DISPUTED_BOUNDARIES' values = 'ON/OFF' />
-  <param name='MAP_DISPUTED_BOUNDARIES_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
-  <param name='MAP_DISPUTED_BOUNDARIES_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/RED [...]
-  <param name='MAP_DISPUTED_BOUNDARIES_THICKNESS' />
-  <param name='MAP_ADMINISTRATIVE_BOUNDARIES' values = 'ON/OFF' />
-  <param name='MAP_ADMINISTRATIVE_BOUNDARIES_COUNTRIES_LIST' />
-  <param name='MAP_ADMINISTRATIVE_BOUNDARIES_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
-  <param name='MAP_ADMINISTRATIVE_BOUNDARIES_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERI [...]
-  <param name='MAP_ADMINISTRATIVE_BOUNDARIES_THICKNESS' />
   <param name='MAP_CITIES' values = 'ON/OFF' />
+  <param name='MAP_RIVERS' values = 'ON/OFF' />
+  <param name='MAP_RIVERS_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+  <param name='MAP_RIVERS_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
+  <param name='MAP_RIVERS_THICKNESS' />
   <param name='MAP_CITIES_UNIT_SYSTEM' values = 'PERCENT/CM' />
-  <param name='MAP_CITIES_FONT_NAME' />
-  <param name='MAP_CITIES_FONT_STYLE' />
+  <param name='MAP_CITIES_FONT_NAME' values = 'SERIF/SANSSERIF' />
+  <param name='MAP_CITIES_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
   <param name='MAP_CITIES_FONT_SIZE' />
   <param name='MAP_CITIES_FONT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORA [...]
   <param name='MAP_CITIES_NAME_POSITION' values = 'ABOVE/BELOW/LEFT/RIGHT' />
   <param name='MAP_CITIES_MARKER' values = 'CIRCLE/BOX/SNOWFLAKE/PLUS' />
   <param name='MAP_CITIES_MARKER_HEIGHT' />
   <param name='MAP_CITIES_MARKER_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_O [...]
-  <param name='MAP_RIVERS' values = 'ON/OFF' />
-  <param name='MAP_RIVERS_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
-  <param name='MAP_RIVERS_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
-  <param name='MAP_RIVERS_THICKNESS' />
+  <param name='MAP_BOUNDARIES_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+  <param name='MAP_BOUNDARIES_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORAN [...]
+  <param name='MAP_BOUNDARIES_THICKNESS' />
+  <param name='MAP_DISPUTED_BOUNDARIES' values = 'ON/OFF' />
+  <param name='MAP_DISPUTED_BOUNDARIES_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+  <param name='MAP_DISPUTED_BOUNDARIES_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/RED [...]
+  <param name='MAP_DISPUTED_BOUNDARIES_THICKNESS' />
+  <param name='MAP_ADMINISTRATIVE_BOUNDARIES' values = 'ON/OFF' />
+  <param name='MAP_ADMINISTRATIVE_BOUNDARIES_COUNTRIES_LIST' values = 'ANGOLA/ALGERIA/EGYPT/BANGLADESH/NAMIBIA/BOLIVIA/GHANA/AUSTRALIA CCK/PAKISTAN/LIBYA/MALAYSIA/KOREA NORTH/TANZANIA/BOTSWANA/PARAGUAY/SAUDI ARABIA/MAURITANIA/CHILE/CHINA/LAOS/UNITED KINGDOM GIB/GUINEA/FINLAND/URUGUAY/NEPAL/AUSTRALIA CXR/MOROCCO/YEMEN/SOUTH AFRICA/TOGO/SYRIA/KAZAKHSTAN/CONGO KINSHASA/NIGERIA/ZIMBABWE/UNITED KINGDOM/GUYANA/MYANMAR/CAMEROON/TURKMENISTAN/AUSTRALIA HMD/CHAD/ROMANIA/MONGOLIA/AFGHANISTAN/AUSTRA [...]
+  <param name='MAP_ADMINISTRATIVE_BOUNDARIES_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+  <param name='MAP_ADMINISTRATIVE_BOUNDARIES_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERI [...]
+  <param name='MAP_ADMINISTRATIVE_BOUNDARIES_THICKNESS' />
   <param name='MAP_GRID' values = 'ON/OFF' />
+  <param name='MAP_GRID_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+  <param name='MAP_GRID_THICKNESS' />
+  <param name='MAP_GRID_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RUS [...]
   <param name='MAP_GRID_LATITUDE_REFERENCE' />
   <param name='MAP_GRID_LATITUDE_INCREMENT' />
   <param name='MAP_GRID_LONGITUDE_REFERENCE' />
   <param name='MAP_GRID_LONGITUDE_INCREMENT' />
-  <param name='MAP_GRID_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
-  <param name='MAP_GRID_THICKNESS' />
-  <param name='MAP_GRID_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RUS [...]
   <param name='MAP_LABEL' values = 'ON/OFF' />
-  <param name='MAP_LABEL_QUALITY' />
+  <param name='MAP_LABEL_QUALITY' values = 'HIGH/MEDIUM/LOW' />
   <param name='MAP_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RU [...]
   <param name='MAP_LABEL_HEIGHT' />
   <param name='MAP_LABEL_LATITUDE_FREQUENCY' />
@@ -652,7 +737,14 @@
   <param name='CONTOUR' values = 'ON/OFF' />
   <param name='CONTOUR_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
   <param name='CONTOUR_LINE_THICKNESS' />
+  <param name='CONTOUR_LINE_COLOUR_RAINBOW' values = 'ON/OFF' />
   <param name='CONTOUR_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
+  <param name='CONTOUR_LINE_COLOUR_RAINBOW_METHOD' values = 'CALCULATE/LIST' />
+  <param name='CONTOUR_LINE_COLOUR_RAINBOW_MAX_LEVEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE [...]
+  <param name='CONTOUR_LINE_COLOUR_RAINBOW_MIN_LEVEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE [...]
+  <param name='CONTOUR_LINE_COLOUR_RAINBOW_DIRECTION' values = 'CLOCKWISE/ANTI-CLOCKWISE' />
+  <param name='CONTOUR_LINE_COLOUR_RAINBOW_COLOUR_LIST' />
+  <param name='CONTOUR_LINE_COLOUR_RAINBOW_COLOUR_LIST_POLICY' values = 'LASTONE/CYCLE' />
   <param name='CONTOUR_HIGHLIGHT' values = 'ON/OFF' />
   <param name='CONTOUR_HIGHLIGHT_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
   <param name='CONTOUR_REFERENCE_LEVEL' />
@@ -664,10 +756,10 @@
   <param name='CONTOUR_MIN_LEVEL' />
   <param name='CONTOUR_SHADE_MAX_LEVEL' />
   <param name='CONTOUR_SHADE_MIN_LEVEL' />
+  <param name='CONTOUR_LEVEL_LIST' />
+  <param name='CONTOUR_INTERVAL' />
   <param name='CONTOUR_LEVEL_COUNT' />
   <param name='CONTOUR_LEVEL_TOLERANCE' />
-  <param name='CONTOUR_INTERVAL' />
-  <param name='CONTOUR_LEVEL_LIST' />
   <param name='CONTOUR_LABEL' values = 'ON/OFF' />
   <param name='CONTOUR_LABEL_TYPE' />
   <param name='CONTOUR_LABEL_TEXT' />
@@ -679,42 +771,38 @@
   <param name='CONTOUR_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
   <param name='CONTOUR_LABEL_FREQUENCY' />
   <param name='CONTOUR_SHADE' values = 'ON/OFF' />
-  <param name='CONTOUR_SHADE_TECHNIQUE' values = 'POLYGON_SHADING/CELL_SHADING/GRID_SHADING/MARKER' />
+  <param name='CONTOUR_SHADE_TECHNIQUE' values = 'POLYGON_SHADING/GRID_SHADING/CELL_SHADING/MARKER' />
+  <param name='CONTOUR_SHADE_COLOUR_METHOD' values = 'CALCULATE/LIST' />
+  <param name='CONTOUR_SHADE_LABEL_BLANKING' values = 'ON/OFF' />
   <param name='CONTOUR_SHADE_METHOD' values = 'AREA_FILL/DOT/HATCH' />
-  <param name='CONTOUR_SHADE_DOT_SIZE' />
-  <param name='CONTOUR_SHADE_MAX_LEVEL_DENSITY' />
-  <param name='CONTOUR_SHADE_MIN_LEVEL_DENSITY' />
-  <param name='CONTOUR_SHADE_ANGLE' />
-  <param name='CONTOUR_SHADE_HATCH_INDEX' />
-  <param name='CONTOUR_SHADE_HATCH_THICKNESS' />
-  <param name='CONTOUR_SHADE_HATCH_DENSITY' />
+  <param name='CONTOUR_SHADE_CELL_RESOLUTION' />
+  <param name='CONTOUR_SHADE_CELL_METHOD' values = 'NEAREST/INTERPOLATE' />
+  <param name='CONTOUR_GRID_SHADING_POSITION' values = 'MIDDLE/BOTTOM_LEFT' />
   <param name='CONTOUR_SHADE_COLOUR_TABLE' />
   <param name='CONTOUR_SHADE_HEIGHT_TABLE' />
   <param name='CONTOUR_SHADE_MARKER_TABLE' />
-  <param name='CONTOUR_SHADE_COLOUR_METHOD' values = 'CALCULATE/LIST' />
   <param name='CONTOUR_SHADE_MAX_LEVEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/RED [...]
   <param name='CONTOUR_SHADE_MIN_LEVEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/RED [...]
   <param name='CONTOUR_SHADE_COLOUR_DIRECTION' values = 'CLOCKWISE/ANTI_CLOCKWISE' />
   <param name='CONTOUR_SHADE_COLOUR_LIST' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
-  <param name='CONTOUR_SHADE_LABEL_BLANKING' values = 'ON/OFF' />
+  <param name='CONTOUR_SHADE_DOT_SIZE' />
+  <param name='CONTOUR_SHADE_MAX_LEVEL_DENSITY' />
+  <param name='CONTOUR_SHADE_MIN_LEVEL_DENSITY' />
+  <param name='CONTOUR_SHADE_HATCH_INDEX' />
+  <param name='CONTOUR_SHADE_HATCH_THICKNESS' />
+  <param name='CONTOUR_SHADE_HATCH_DENSITY' />
+  <param name='CONTOUR_LEGEND_ONLY' values = 'ON/OFF' />
   <param name='CONTOUR_METHOD' values = 'AUTOMATIC/SAMPLE/LINEAR/AKIMA760/AKIMA474' />
-  <param name='CONTOUR_SAMPLE_X_INTERVAL' />
-  <param name='CONTOUR_SAMPLE_Y_INTERVAL' />
   <param name='CONTOUR_AKIMA_X_RESOLUTION' />
   <param name='CONTOUR_AKIMA_Y_RESOLUTION' />
   <param name='CONTOUR_INTERPOLATION_FLOOR' />
   <param name='CONTOUR_INTERPOLATION_CEILING' />
-  <param name='CONTOUR_AUTOMATIC_SETTING' values = 'ON/OFF' />
-  <param name='CONTOUR_AUTOMATIC_LIBRARY_PATH' />
+  <param name='CONTOUR_AUTOMATIC_SETTING' values = 'ON/OFF/ECCHART' />
   <param name='CONTOUR_HILO' values = 'ON/OFF/HI/LO' />
   <param name='CONTOUR_HILO_TYPE' values = 'TEXT/NUMBER/BOTH' />
-  <param name='CONTOUR_HILO_HEIGHT' />
-  <param name='CONTOUR_HILO_QUALITY' values = 'HIGH/MEDIUM/LOW' />
-  <param name='CONTOUR_HI_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
-  <param name='CONTOUR_LO_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
   <param name='CONTOUR_HI_TEXT' />
   <param name='CONTOUR_LO_TEXT' />
-  <param name='CONTOUR_HILO_TEXT_BLANKING' values = 'ON/OFF' />
+  <param name='CONTOUR_HILO_BLANKING' values = 'ON/OFF' />
   <param name='CONTOUR_HILO_FORMAT' />
   <param name='CONTOUR_HILO_WINDOW_SIZE' />
   <param name='CONTOUR_HILO_SUPPRESS_RADIUS' />
@@ -728,8 +816,11 @@
   <param name='CONTOUR_HILO_MARKER_HEIGHT' />
   <param name='CONTOUR_HILO_MARKER_INDEX' />
   <param name='CONTOUR_HILO_MARKER_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH [...]
-  <param name='CONTOUR_HILO_POSITION_WRITE' values = 'ON/OFF' />
   <param name='CONTOUR_HILO_POSITION_FILE_NAME' />
+  <param name='CONTOUR_HILO_HEIGHT' />
+  <param name='CONTOUR_HILO_QUALITY' values = 'HIGH/MEDIUM/LOW' />
+  <param name='CONTOUR_HI_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
+  <param name='CONTOUR_LO_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
   <param name='CONTOUR_GRID_VALUE_PLOT' values = 'ON/OFF' />
   <param name='CONTOUR_GRID_VALUE_TYPE' values = 'NORMAL/REDUCED/AKIMA' />
   <param name='CONTOUR_GRID_VALUE_PLOT_TYPE' values = 'VALUE/MARKER/BOTH' />
@@ -747,6 +838,10 @@
   <param name='CONTOUR_GRID_VALUE_MARKER_INDEX' />
   <param name='GRIB_SCALING_OF_RETRIEVED_FIELDS' values = 'ON/OFF' />
   <param name='GRIB_SCALING_OF_DERIVED_FIELDS' values = 'ON/OFF' />
+  <param name='CONTOUR_SAMPLE_X_INTERVAL' />
+  <param name='CONTOUR_SAMPLE_Y_INTERVAL' />
+</function>
+<function name='mcross_sect'>
 </function>
 <function name='menu'>
   <param name='name' />
@@ -767,67 +862,143 @@
 </function>
 <function name='mgraph'>
   <param name='LEGEND' values = 'ON/OFF' />
-  <param name='GRAPH_TYPE' values = 'CURVE/BAR/AREA' />
+  <param name='LEGEND_USER_TEXT' />
+  <param name='GRAPH_TYPE' values = 'CURVE/BAR/FLAG/ARROW/AREA' />
+  <param name='GRAPH_SHADE' values = 'ON/OFF' />
   <param name='GRAPH_LINE' values = 'ON/OFF' />
+  <param name='GRAPH_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
   <param name='GRAPH_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
-  <param name='GRAPH_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
-  <param name='GRAPH_LINE_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='GRAPH_LINE_THICKNESS' />
   <param name='GRAPH_SYMBOL' values = 'ON/OFF' />
+  <param name='GRAPH_SYMBOL_MARKER_INDEX' />
   <param name='GRAPH_SYMBOL_HEIGHT' />
   <param name='GRAPH_SYMBOL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
-  <param name='GRAPH_SYMBOL_MARKER_INDEX' />
+  <param name='GRAPH_SYMBOL_OUTLINE' values = 'ON/OFF' />
+  <param name='GRAPH_SYMBOL_OUTLINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDIS [...]
+  <param name='GRAPH_SYMBOL_OUTLINE_THICKNESS' />
+  <param name='GRAPH_SYMBOL_OUTLINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+  <param name='GRAPH_X_SUPPRESS_BELOW' />
+  <param name='GRAPH_X_SUPPRESS_ABOVE' />
+  <param name='GRAPH_Y_SUPPRESS_BELOW' />
+  <param name='GRAPH_Y_SUPPRESS_ABOVE' />
   <param name='GRAPH_MISSING_DATA_MODE' values = 'IGNORE/JOIN/DROP' />
-  <param name='GRAPH_MISSING_DATA_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='GRAPH_MISSING_DATA_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
   <param name='GRAPH_MISSING_DATA_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
-  <param name='GRAPH_MISSING_DATA_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
-  <param name='GRAPH_BAR_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RU [...]
+  <param name='GRAPH_MISSING_DATA_THICKNESS' />
+  <param name='GRAPH_FLAG_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
+  <param name='GRAPH_FLAG_LENGTH' />
+  <param name='GRAPH_ARROW_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/ [...]
+  <param name='GRAPH_ARROW_UNIT_VELOCITY' />
   <param name='GRAPH_BAR_WIDTH' />
-  <param name='GRAPH_BAR_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
-  <param name='GRAPH_BAR_LINE_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
-  <param name='GRAPH_SHADE' values = 'ON/OFF' />
+  <param name='GRAPH_BAR_JUSTIFICATION' values = 'LEFT/CENTRE/RIGHT' />
+  <param name='GRAPH_BAR_STYLE' />
+  <param name='GRAPH_BAR_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+  <param name='GRAPH_BAR_LINE_THICKNESS' />
+  <param name='GRAPH_BAR_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORAN [...]
+  <param name='GRAPH_BAR_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RU [...]
+  <param name='GRAPH_BAR_CLIPPING' values = 'ON/OFF' />
+  <param name='GRAPH_BAR_ANNOTATION' />
+  <param name='GRAPH_BAR_ANNOTATION_FONT_SIZE' />
+  <param name='GRAPH_BAR_ANNOTATION_FONT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/R [...]
+  <param name='GRAPH_BAR_MINIMUM_VALUE' />
+  <param name='GRAPH_SHADE_STYLE' values = 'AREA_FILL/HATCH/DOT' />
   <param name='GRAPH_SHADE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/ [...]
-  <param name='GRAPH_SHADE_STYLE' values = 'DOT/HATCH/AREA_FILL' />
-  <param name='GRAPH_SHADE_DENSITY' />
+  <param name='GRAPH_SHADE_DOT_DENSITY' />
   <param name='GRAPH_SHADE_DOT_SIZE' />
   <param name='GRAPH_SHADE_HATCH_INDEX' />
-  <param name='GRAPH_SHADE_HATCH_THICKNESS' />
-  <param name='GRAPH_SHADE_HATCH_DENSITY' />
-  <param name='GRAPH_X_SUPPRESS_BELOW' />
-  <param name='GRAPH_X_SUPPRESS_ABOVE' />
-  <param name='GRAPH_DATE_X_SUPPRESS_BELOW' />
-  <param name='GRAPH_DATE_X_SUPPRESS_ABOVE' />
-  <param name='GRAPH_Y_SUPPRESS_BELOW' />
-  <param name='GRAPH_Y_SUPPRESS_ABOVE' />
+</function>
+<function name='mhovmoeller_area'>
+  <param name='APPLICATION' values = 'LINE_HOVM/AREA_HOVM/VERTICAL_HOVM/EXPAND_HOVM' />
+</function>
+<function name='mhovmoeller_expand'>
+  <param name='APPLICATION' values = 'LINE_HOVM/AREA_HOVM/VERTICAL_HOVM/EXPAND_HOVM' />
+</function>
+<function name='mhovmoeller_line'>
+  <param name='APPLICATION' values = 'LINE_HOVM/AREA_HOVM/VERTICAL_HOVM/EXPAND_HOVM' />
+</function>
+<function name='mhovmoeller_vertical'>
+  <param name='APPLICATION' values = 'LINE_HOVM/AREA_HOVM/VERTICAL_HOVM/EXPAND_HOVM' />
+</function>
+<function name='mhovmoellerview'>
+  <param name='TYPE' values = 'LINE_HOVM/AREA_HOVM/VERTICAL_HOVM' />
+  <param name='LINE' />
+  <param name='AREA' />
+  <param name='AVERAGE_DIRECTION' values = 'EAST_WEST/NORTH_SOUTH' />
+  <param name='DATE_MIN' values = 'AUTOMATIC' />
+  <param name='DATE_MAX' values = 'AUTOMATIC' />
+  <param name='BOTTOM_LEVEL' />
+  <param name='TOP_LEVEL' />
+  <param name='SWAP_AXES' values = 'NO/YES' />
+  <param name='RESOLUTION' />
+  <param name='TIME_AXIS' />
+  <param name='GEO_AXIS' />
+  <param name='VERTICAL_AXIS' />
+  <param name='VERTICAL_LEVEL_TYPE' values = 'AS_IN_DATA/PRESSURE' />
+  <param name='VERTICAL_SCALING' values = 'LINEAR/LOG' />
+  <param name='SUBPAGE_X_POSITION' />
+  <param name='SUBPAGE_Y_POSITION' />
+  <param name='SUBPAGE_X_LENGTH' />
+  <param name='SUBPAGE_Y_LENGTH' />
+  <param name='PAGE_FRAME' values = 'ON/OFF' />
+  <param name='PAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
+  <param name='PAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='PAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='PAGE_ID_LINE' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_TYPE' values = 'BOTH/LOGO_ONLY/ID_LINE_ONLY' />
+  <param name='PAGE_ID_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
+  <param name='PAGE_ID_LINE_SYSTEM_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_DATE_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_USER_TEXT_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_USER_TEXT' />
+  <param name='PAGE_ID_LINE_ERRORS_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_LOGO_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_HEIGHT' />
+  <param name='PAGE_ID_LINE_QUALITY' values = 'LOW/MEDIUM/HIGH' />
+  <param name='SUBPAGE_FRAME' values = 'ON/OFF' />
+  <param name='SUBPAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
+  <param name='SUBPAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='SUBPAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='SUBPAGE_BACKGROUND_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
 </function>
 <function name='mlegend'>
-  <param name='LEGEND_POSITIONING' values = 'AUTOMATIC' />
-  <param name='LEGEND_SUBPAGE_POSITION' values = 'BOTTOM_RIGHT/TOP_RIGHT/TOP_LEFT/BOTTOM_LEFT' />
-  <param name='LEGEND_DISPLAY_TYPE' values = 'DISJOINT/CONTINUOUS/HISTOGRAM' />
-  <param name='LEGEND_ENTRY_PLOT_DIRECTION' values = 'AUTOMATIC/ROW/COLUMN' />
-  <param name='LEGEND_ENTRY_PLOT_ORIENTATION' values = 'BOTTOM_TOP/TOP_BOTTOM' />
-  <param name='LEGEND_ENTRY_TEXT_WIDTH' />
-  <param name='LEGEND_COLUMN_COUNT' />
+  <param name='LEGEND_TEXT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/ [...]
   <param name='LEGEND_TITLE' values = 'ON/OFF' />
   <param name='LEGEND_TITLE_TEXT' />
-  <param name='LEGEND_TITLE_ORIENTATION' values = 'AUTOMATIC/HORIZONTAL/VERTICAL' />
-  <param name='LEGEND_TEXT_COMPOSITION' values = 'AUTOMATIC_TEXT_ONLY/USER_TEXT_ONLY/BOTH' />
-  <param name='LEGEND_USER_LINES' />
-  <param name='LEGEND_TEXT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/ [...]
+  <param name='LEGEND_TITLE_ORIENTATION' values = 'VERTICAL/HORIZONTAL/AUTOMATIC' />
+  <param name='LEGEND_TITLE_FONT_SIZE' />
+  <param name='LEGEND_TITLE_FONT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_O [...]
+  <param name='LEGEND_TITLE_POSITION' values = 'AUTOMATIC/TOP/BOTTOM/LEFT/RIGHT' />
+  <param name='LEGEND_TITLE_POSITION_RATIO' />
+  <param name='LEGEND_UNITS_TEXT' />
+  <param name='LEGEND_USER_MINIMUM' values = 'ON/OFF' />
+  <param name='LEGEND_USER_MINIMUM_TEXT' />
+  <param name='LEGEND_USER_MAXIMUM' values = 'ON/OFF' />
+  <param name='LEGEND_USER_MAXIMUM_TEXT' />
+  <param name='LEGEND_DISPLAY_TYPE' values = 'DISJOINT/CONTINUOUS/HISTOGRAM' />
   <param name='LEGEND_TEXT_FORMAT' />
-  <param name='LEGEND_TEXT_FONT_SIZE' />
-  <param name='LEGEND_LABEL_FREQUENCY' />
-  <param name='LEGEND_ENTRY_BORDER' values = 'ON/OFF' />
-  <param name='LEGEND_ENTRY_BORDER_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH [...]
-  <param name='LEGEND_BOX_BLANKING' values = 'ON/OFF' />
-  <param name='LEGEND_BORDER' values = 'ON/OFF' />
-  <param name='LEGEND_BORDER_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
-  <param name='LEGEND_BORDER_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
-  <param name='LEGEND_BORDER_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
   <param name='LEGEND_BOX_MODE' values = 'AUTOMATIC/POSITIONAL' />
+  <param name='LEGEND_TEXT_FONT' values = 'SERIF/SANSSERIF' />
+  <param name='LEGEND_TEXT_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
+  <param name='LEGEND_TEXT_FONT_SIZE' />
+  <param name='LEGEND_TEXT_ORIENTATION' />
+  <param name='LEGEND_USER_LINES' />
+  <param name='LEGEND_COLUMN_COUNT' />
+  <param name='LEGEND_ENTRY_PLOT_DIRECTION' values = 'AUTOMATIC/ROW/COLUMN' />
+  <param name='LEGEND_ENTRY_PLOT_ORIENTATION' values = 'BOTTOM_TOP/TOP_BOTTOM' />
+  <param name='LEGEND_TEXT_COMPOSITION' values = 'AUTOMATIC_TEXT_ONLY/USER_TEXT_ONLY/BOTH' />
   <param name='LEGEND_BOX_X_POSITION' />
   <param name='LEGEND_BOX_Y_POSITION' />
   <param name='LEGEND_BOX_X_LENGTH' />
   <param name='LEGEND_BOX_Y_LENGTH' />
+  <param name='LEGEND_BOX_BLANKING' values = 'ON/OFF' />
+  <param name='LEGEND_BORDER' values = 'ON/OFF' />
+  <param name='LEGEND_BORDER_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+  <param name='LEGEND_BORDER_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
+  <param name='LEGEND_BORDER_THICKNESS' />
+  <param name='LEGEND_ENTRY_TEXT_WIDTH' />
+  <param name='LEGEND_ENTRY_BORDER' values = 'ON/OFF' />
+  <param name='LEGEND_ENTRY_BORDER_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH [...]
+  <param name='LEGEND_LABEL_FREQUENCY' />
   <param name='LEGEND_HISTOGRAM_BORDER' values = 'ON/OFF' />
   <param name='LEGEND_HISTOGRAM_BORDER_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/RED [...]
   <param name='LEGEND_HISTOGRAM_MEAN_VALUE' values = 'ON/OFF' />
@@ -836,33 +1007,54 @@
   <param name='LEGEND_HISTOGRAM_MEAN_VALUE_MARKER_SIZE' />
   <param name='LEGEND_HISTOGRAM_MAX_VALUE' values = 'ON/OFF' />
   <param name='LEGEND_HISTOGRAM_GRID_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDI [...]
-  <param name='LEGEND_HISTOGRAM_GRID_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='LEGEND_HISTOGRAM_GRID_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
   <param name='LEGEND_HISTOGRAM_GRID_THICKNESS' />
 </function>
 <function name='msymb'>
   <param name='LEGEND' values = 'ON/OFF' />
-  <param name='SYMBOL_TYPE' values = 'NUMBER/TEXT/MARKER' />
-  <param name='SYMBOL_FORMAT' />
+  <param name='SYMBOL_TYPE' values = 'NUMBER/TEXT/MARKER/WIND/BOTH' />
   <param name='SYMBOL_TABLE_MODE' values = 'OFF/ADVANCED/ON' />
-  <param name='SYMBOL_MARKER_MODE' values = 'BY_INDEX/BY_NAME' />
-  <param name='SYMBOL_MARKER_INDEX' />
-  <param name='SYMBOL_MARKER_NAME' />
+  <param name='SYMBOL_FORMAT' />
+  <param name='SYMBOL_OUTLINE' values = 'ON/OFF' />
+  <param name='SYMBOL_OUTLINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORAN [...]
+  <param name='SYMBOL_OUTLINE_THICKNESS' />
+  <param name='SYMBOL_OUTLINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+  <param name='SYMBOL_CONNECT_LINE' values = 'ON/OFF' />
+  <param name='SYMBOL_CONNECT_AUTOMATIC_LINE_COLOUR' values = 'ON/OFF' />
+  <param name='SYMBOL_CONNECT_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH [...]
+  <param name='SYMBOL_CONNECT_LINE_THICKNESS' />
+  <param name='SYMBOL_CONNECT_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+  <param name='LEGEND_USER_TEXT' />
   <param name='SYMBOL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RUST/ [...]
   <param name='SYMBOL_HEIGHT' />
+  <param name='SYMBOL_MARKER_MODE' values = 'INDEX/NAME/IMAGE' />
+  <param name='SYMBOL_MARKER_INDEX' />
+  <param name='SYMBOL_MARKER_NAME' />
+  <param name='SYMBOL_IMAGE_PATH' />
+  <param name='SYMBOL_IMAGE_FORMAT' values = 'AUTOMATIC/PNG/SVG' />
+  <param name='SYMBOL_IMAGE_WIDTH' />
+  <param name='SYMBOL_IMAGE_HEIGHT' />
   <param name='SYMBOL_TEXT_LIST' />
   <param name='SYMBOL_TEXT_POSITION' values = 'RIGHT/LEFT/BOTTOM/TOP' />
-  <param name='SYMBOL_TEXT_FONT_NAME' />
+  <param name='SYMBOL_TEXT_FONT_NAME' values = 'SERIF/SANSSERIF' />
   <param name='SYMBOL_TEXT_FONT_SIZE' />
-  <param name='SYMBOL_TEXT_FONT_STYLE' />
+  <param name='SYMBOL_TEXT_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
   <param name='SYMBOL_TEXT_FONT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
+  <param name='SYMBOL_TEXT_BLANKING' values = 'ON/OFF' />
+  <param name='SYMBOL_MIN_TABLE' />
+  <param name='SYMBOL_MAX_TABLE' />
+  <param name='SYMBOL_MARKER_TABLE' />
+  <param name='SYMBOL_NAME_TABLE' />
+  <param name='SYMBOL_COLOUR_TABLE' />
+  <param name='SYMBOL_HEIGHT_TABLE' />
   <param name='SYMBOL_ADVANCED_TABLE_SELECTION_TYPE' values = 'COUNT/INTERVAL/LIST' />
+  <param name='SYMBOL_ADVANCED_TABLE_MIN_VALUE' />
+  <param name='SYMBOL_ADVANCED_TABLE_MAX_VALUE' />
   <param name='SYMBOL_ADVANCED_TABLE_LEVEL_COUNT' />
   <param name='SYMBOL_ADVANCED_TABLE_LEVEL_TOLERANCE' />
   <param name='SYMBOL_ADVANCED_TABLE_INTERVAL' />
   <param name='SYMBOL_ADVANCED_TABLE_REFERENCE_LEVEL' />
   <param name='SYMBOL_ADVANCED_TABLE_LEVEL_LIST' />
-  <param name='SYMBOL_ADVANCED_TABLE_MIN_VALUE' />
-  <param name='SYMBOL_ADVANCED_TABLE_MAX_VALUE' />
   <param name='SYMBOL_ADVANCED_TABLE_COLOUR_METHOD' values = 'CALCULATE/LIST' />
   <param name='SYMBOL_ADVANCED_TABLE_MAX_LEVEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGE [...]
   <param name='SYMBOL_ADVANCED_TABLE_MIN_LEVEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGE [...]
@@ -878,30 +1070,99 @@
   <param name='SYMBOL_ADVANCED_TABLE_HEIGHT_LIST_POLICY' values = 'LASTONE/CYCLE' />
   <param name='SYMBOL_ADVANCED_TABLE_TEXT_LIST' />
   <param name='SYMBOL_ADVANCED_TABLE_TEXT_LIST_POLICY' values = 'LASTONE/CYCLE' />
-  <param name='SYMBOL_ADVANCED_TABLE_TEXT_FONT_NAME' />
+  <param name='SYMBOL_ADVANCED_TABLE_TEXT_FONT_NAME' values = 'SERIF/SANSSERIF' />
   <param name='SYMBOL_ADVANCED_TABLE_TEXT_FONT_SIZE' />
-  <param name='SYMBOL_ADVANCED_TABLE_TEXT_FONT_STYLE' />
+  <param name='SYMBOL_ADVANCED_TABLE_TEXT_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
   <param name='SYMBOL_ADVANCED_TABLE_TEXT_FONT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGE [...]
   <param name='SYMBOL_ADVANCED_TABLE_TEXT_DISPLAY_TYPE' values = 'CENTRE/NONE/RIGHT/LEFT/TOP/BOTTOM' />
-  <param name='SYMBOL_ADVANCED_TABLE_OUTLAYER_METHOD' values = 'NONE/SIMPLE' />
-  <param name='SYMBOL_MIN_TABLE' />
-  <param name='SYMBOL_MAX_TABLE' />
-  <param name='SYMBOL_MARKER_TABLE' />
-  <param name='SYMBOL_NAME_TABLE' />
-  <param name='SYMBOL_COLOUR_TABLE' />
-  <param name='SYMBOL_HEIGHT_TABLE' />
-  <param name='SYMBOL_OUTLINE' values = 'ON/OFF' />
-  <param name='SYMBOL_OUTLINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORAN [...]
-  <param name='SYMBOL_OUTLINE_THICKNESS' />
-  <param name='SYMBOL_OUTLINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
-  <param name='SYMBOL_CONNECT_LINE' values = 'ON/OFF' />
-  <param name='SYMBOL_CONNECT_AUTOMATIC_LINE_COLOUR' values = 'ON/OFF' />
-  <param name='SYMBOL_CONNECT_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH [...]
-  <param name='SYMBOL_CONNECT_LINE_THICKNESS' />
-  <param name='SYMBOL_CONNECT_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='SYMBOL_ADVANCED_TABLE_OUTLAYER_METHOD' values = 'NONE' />
+</function>
+<function name='mtaylor'>
+  <param name='TAYLOR_LABEL' />
+  <param name='TAYLOR_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
+  <param name='TAYLOR_LABEL_HEIGHT' />
+  <param name='TAYLOR_PRIMARY_GRID_INCREMENT' />
+  <param name='TAYLOR_PRIMARY_GRID_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/RE [...]
+  <param name='TAYLOR_PRIMARY_GRID_LINE_THICKNESS' />
+  <param name='TAYLOR_PRIMARY_GRID_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='TAYLOR_PRIMARY_GRID_REFERENCE' />
+  <param name='TAYLOR_REFERENCE_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDI [...]
+  <param name='TAYLOR_REFERENCE_LINE_THICKNESS' />
+  <param name='TAYLOR_REFERENCE_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='TAYLOR_PRIMARY_LABEL' values = 'ON/OFF' />
+  <param name='TAYLOR_PRIMARY_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDIS [...]
+  <param name='TAYLOR_PRIMARY_LABEL_HEIGHT' />
+  <param name='TAYLOR_SECONDARY_GRID' values = 'ON/OFF' />
+  <param name='TAYLOR_SECONDARY_GRID_REFERENCE' />
+  <param name='TAYLOR_SECONDARY_GRID_INCREMENT' />
+  <param name='TAYLOR_SECONDARY_GRID_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/ [...]
+  <param name='TAYLOR_SECONDARY_GRID_LINE_THICKNESS' />
+  <param name='TAYLOR_SECONDARY_GRID_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='TAYLOR_SECONDARY_LABEL' values = 'ON/OFF' />
+  <param name='TAYLOR_SECONDARY_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDD [...]
+  <param name='TAYLOR_SECONDARY_LABEL_HEIGHT' />
+</function>
+<function name='mtephi'>
+  <param name='TEPHIGRAM_ISOTHERM_GRID' values = 'ON/OFF' />
+  <param name='TEPHIGRAM_ISOTHERM_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
+  <param name='TEPHIGRAM_ISOTHERM_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='TEPHIGRAM_ISOTHERM_THICKNESS' />
+  <param name='TEPHIGRAM_ISOTHERM_INTERVAL' />
+  <param name='TEPHIGRAM_ISOTHERM_REFERENCE' />
+  <param name='TEPHIGRAM_ISOTHERM_REFERENCE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERIN [...]
+  <param name='TEPHIGRAM_ISOTHERM_REFERENCE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='TEPHIGRAM_ISOTHERM_REFERENCE_THICKNESS' />
+  <param name='TEPHIGRAM_ISOTHERM_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/RE [...]
+  <param name='TEPHIGRAM_ISOTHERM_LABEL_FONT_NAME' />
+  <param name='TEPHIGRAM_ISOTHERM_LABEL_FONT_STYLE' />
+  <param name='TEPHIGRAM_ISOTHERM_LABEL_FONT_SIZE' />
+  <param name='TEPHIGRAM_ISOTHERM_LABEL_FREQUENCY' />
+  <param name='TEPHIGRAM_ISOBAR_GRID' values = 'ON/OFF' />
+  <param name='TEPHIGRAM_ISOBAR_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
+  <param name='TEPHIGRAM_ISOBAR_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='TEPHIGRAM_ISOBAR_THICKNESS' />
+  <param name='TEPHIGRAM_ISOBAR_INTERVAL' />
+  <param name='TEPHIGRAM_ISOBAR_REFERENCE' />
+  <param name='TEPHIGRAM_ISOBAR_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDD [...]
+  <param name='TEPHIGRAM_ISOBAR_LABEL_FONT_NAME' />
+  <param name='TEPHIGRAM_ISOBAR_LABEL_FONT_STYLE' />
+  <param name='TEPHIGRAM_ISOBAR_LABEL_FONT_SIZE' />
+  <param name='TEPHIGRAM_ISOBAR_LABEL_FREQUENCY' />
+  <param name='TEPHIGRAM_DRY_ADIABATIC_GRID' values = 'ON/OFF' />
+  <param name='TEPHIGRAM_DRY_ADIABATIC_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/RED [...]
+  <param name='TEPHIGRAM_DRY_ADIABATIC_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='TEPHIGRAM_DRY_ADIABATIC_THICKNESS' />
+  <param name='TEPHIGRAM_DRY_ADIABATIC_REFERENCE' />
+  <param name='TEPHIGRAM_DRY_ADIABATIC_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERI [...]
+  <param name='TEPHIGRAM_DRY_ADIABATIC_LABEL_FONT_NAME' />
+  <param name='TEPHIGRAM_DRY_ADIABATIC_LABEL_FONT_STYLE' />
+  <param name='TEPHIGRAM_DRY_ADIABATIC_LABEL_FONT_SIZE' />
+  <param name='TEPHIGRAM_DRY_ADIABATIC_LABEL_FREQUENCY' />
+  <param name='TEPHIGRAM_DRY_ADIABATIC_INTERVAL' />
+  <param name='TEPHIGRAM_SATURATED_ADIABATIC_GRID' values = 'ON/OFF' />
+  <param name='TEPHIGRAM_SATURATED_ADIABATIC_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERI [...]
+  <param name='TEPHIGRAM_SATURATED_ADIABATIC_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='TEPHIGRAM_SATURATED_ADIABATIC_THICKNESS' />
+  <param name='TEPHIGRAM_SATURATED_ADIABATIC_INTERVAL' />
+  <param name='TEPHIGRAM_SATURATED_ADIABATIC_REFERENCE' />
+  <param name='TEPHIGRAM_SATURATED_ADIABATIC_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/T [...]
+  <param name='TEPHIGRAM_SATURATED_ADIABATIC_LABEL_FONT_NAME' />
+  <param name='TEPHIGRAM_SATURATED_ADIABATIC_LABEL_FONT_STYLE' />
+  <param name='TEPHIGRAM_SATURATED_ADIABATIC_LABEL_FONT_SIZE' />
+  <param name='TEPHIGRAM_SATURATED_ADIABATIC_LABEL_FREQUENCY' />
+  <param name='TEPHIGRAM_MIXING_RATIO_GRID' values = 'ON/OFF' />
+  <param name='TEPHIGRAM_MIXING_RATIO_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDD [...]
+  <param name='TEPHIGRAM_MIXING_RATIO_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='TEPHIGRAM_MIXING_RATIO_THICKNESS' />
+  <param name='TEPHIGRAM_MIXING_RATIO_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERIN [...]
+  <param name='TEPHIGRAM_MIXING_RATIO_LABEL_FONT_NAME' />
+  <param name='TEPHIGRAM_MIXING_RATIO_LABEL_FONT_STYLE' />
+  <param name='TEPHIGRAM_MIXING_RATIO_LABEL_FONT_SIZE' />
+  <param name='TEPHIGRAM_MIXING_RATIO_LABEL_FREQUENCY' />
+  <param name='TEPHIGRAM_MIXING_RATIO_FREQUENCY' />
 </function>
 <function name='mtext'>
-  <param name='TEXT_LINE_COUNT' values = '0/1/2/3/4/5/6/7/8/9/10' />
+  <param name='TEXT_LINE_COUNT' />
   <param name='TEXT_LINE_1' />
   <param name='TEXT_LINE_2' />
   <param name='TEXT_LINE_3' />
@@ -912,11 +1173,12 @@
   <param name='TEXT_LINE_8' />
   <param name='TEXT_LINE_9' />
   <param name='TEXT_LINE_10' />
-  <param name='TEXT_JUSTIFICATION' values = 'CENTRE/LEFT/RIGHT' />
   <param name='TEXT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RUST/PE [...]
   <param name='TEXT_FONT' values = 'SERIF/SANSSERIF' />
   <param name='TEXT_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
   <param name='TEXT_FONT_SIZE' />
+  <param name='TEXT_JUSTIFICATION' values = 'LEFT/CENTRE/RIGHT' />
+  <param name='TEXT_LINES' />
   <param name='TEXT_MODE' values = 'TITLE/POSITIONAL' />
   <param name='TEXT_BOX_X_POSITION' />
   <param name='TEXT_BOX_Y_POSITION' />
@@ -924,20 +1186,30 @@
   <param name='TEXT_BOX_Y_LENGTH' />
   <param name='TEXT_BOX_BLANKING' values = 'ON/OFF' />
   <param name='TEXT_BORDER' values = 'ON/OFF' />
+  <param name='TEXT_BORDER_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
   <param name='TEXT_BORDER_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/ [...]
-  <param name='TEXT_BORDER_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
-  <param name='TEXT_BORDER_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='TEXT_BORDER_THICKNESS' />
 </function>
-<function name='mvertprofview'>
+<function name='mvert_prof'>
+  <param name='DATA' />
   <param name='INPUT_MODE' values = 'POINT/NEAREST_GRIDPOINT/AREA/AREA_2' />
   <param name='POINT' />
   <param name='AREA' />
-  <param name='BOTTOM_PRESSURE' />
-  <param name='TOP_PRESSURE' />
-  <param name='PRESSURE_LEVEL_AXIS' values = 'LINEAR/LOG' />
-  <param name='PRESSURE_AXIS' />
+  <param name='OUTPUT_MODE' values = 'NORMAL/RTTOV' />
+  <param name='WATER_TYPE' values = 'FRESH_WATER/OCEAN_WATER' />
+  <param name='CLOUD_TOP_PRESSURE' />
+  <param name='CLOUD_FRACTION' />
+</function>
+<function name='mvertprofview'>
+  <param name='INPUT_MODE' values = 'POINT/NEAREST_GRIDPOINT/AREA/AREA_2' />
+  <param name='POINT' />
+  <param name='AREA' />
+  <param name='BOTTOM_LEVEL' />
+  <param name='TOP_LEVEL' />
+  <param name='VERTICAL_SCALING' values = 'LINEAR/LOG' />
+  <param name='X_MIN_MAX' values = 'AUTO' />
+  <param name='LEVEL_AXIS' />
   <param name='VALUE_AXIS' />
-  <param name='MAP_OVERLAY_CONTROL' values = 'ALWAYS/BY_DATE/BY_LEVEL/NEVER' />
   <param name='SUBPAGE_X_POSITION' />
   <param name='SUBPAGE_Y_POSITION' />
   <param name='SUBPAGE_X_LENGTH' />
@@ -964,26 +1236,31 @@
   <param name='SUBPAGE_BACKGROUND_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
 </function>
 <function name='mwind'>
-  <param name='WIND_FIELD_TYPE' values = 'FLAGS/ARROWS' />
+  <param name='WIND_FIELD_TYPE' values = 'FLAGS/ARROWS/STREAMLINES' />
+  <param name='WIND_STREAMLINE_MIN_DENSITY' />
+  <param name='WIND_STREAMLINE_MIN_SPEED' />
+  <param name='WIND_STREAMLINE_THICKNESS' />
+  <param name='WIND_STREAMLINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORA [...]
+  <param name='WIND_STREAMLINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+  <param name='WIND_THINNING_FACTOR' />
   <param name='LEGEND' values = 'ON/OFF' />
   <param name='WIND_LEGEND_TEXT' />
-  <param name='WIND_ARROW_LEGEND_TEXT' />
   <param name='WIND_ADVANCED_METHOD' values = 'ON/OFF' />
+  <param name='WIND_ADVANCED_COLOUR_PARAMETER' values = 'SPEED/PARAMETER' />
   <param name='WIND_ADVANCED_COLOUR_SELECTION_TYPE' values = 'COUNT/INTERVAL/LIST' />
-  <param name='WIND_ADVANCED_COLOUR_REFERENCE_LEVEL' />
+  <param name='WIND_ADVANCED_COLOUR_MAX_VALUE' />
+  <param name='WIND_ADVANCED_COLOUR_MIN_VALUE' />
   <param name='WIND_ADVANCED_COLOUR_LEVEL_COUNT' />
   <param name='WIND_ADVANCED_COLOUR_LEVEL_TOLERANCE' />
+  <param name='WIND_ADVANCED_COLOUR_REFERENCE_LEVEL' />
   <param name='WIND_ADVANCED_COLOUR_LEVEL_INTERVAL' />
   <param name='WIND_ADVANCED_COLOUR_LEVEL_LIST' />
-  <param name='WIND_ADVANCED_COLOUR_MAX_VALUE' />
-  <param name='WIND_ADVANCED_COLOUR_MIN_VALUE' />
   <param name='WIND_ADVANCED_COLOUR_TABLE_COLOUR_METHOD' values = 'CALCULATE/LIST' />
   <param name='WIND_ADVANCED_COLOUR_MAX_LEVEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGER [...]
   <param name='WIND_ADVANCED_COLOUR_MIN_LEVEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGER [...]
   <param name='WIND_ADVANCED_COLOUR_DIRECTION' values = 'CLOCKWISE/ANTI_CLOCKWISE' />
-  <param name='WIND_ADVANCED_COLOUR_LIST' />
+  <param name='WIND_ADVANCED_COLOUR_LIST' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
   <param name='WIND_ADVANCED_COLOUR_LIST_POLICY' values = 'LASTONE/CYCLE' />
-  <param name='WIND_ADVANCED_COLOUR_PARAMETER' values = 'SPEED/PARAMETER' />
   <param name='WIND_FLAG_CALM_INDICATOR' values = 'ON/OFF' />
   <param name='WIND_FLAG_CALM_INDICATOR_SIZE' />
   <param name='WIND_FLAG_CALM_BELOW' />
@@ -991,8 +1268,7 @@
   <param name='WIND_FLAG_LENGTH' />
   <param name='WIND_FLAG_MAX_SPEED' />
   <param name='WIND_FLAG_MIN_SPEED' />
-  <param name='WIND_FLAG_MODE' />
-  <param name='WIND_FLAG_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='WIND_FLAG_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
   <param name='WIND_FLAG_ORIGIN_MARKER' values = 'DOT/CIRCLE/OFF' />
   <param name='WIND_FLAG_ORIGIN_MARKER_SIZE' />
   <param name='WIND_FLAG_THICKNESS' />
@@ -1000,26 +1276,35 @@
   <param name='WIND_ARROW_CALM_INDICATOR_SIZE' />
   <param name='WIND_ARROW_CALM_BELOW' />
   <param name='WIND_ARROW_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
-  <param name='WIND_ARROW_CROSS_BOUNDARY' values = 'ON/OFF' />
   <param name='WIND_ARROW_HEAD_SHAPE' />
   <param name='WIND_ARROW_HEAD_RATIO' />
   <param name='WIND_ARROW_MAX_SPEED' />
   <param name='WIND_ARROW_MIN_SPEED' />
-  <param name='WIND_ARROW_ORIGIN_POSITION' values = 'TAIL/CENTRE' />
   <param name='WIND_ARROW_THICKNESS' />
-  <param name='WIND_ARROW_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
+  <param name='WIND_ARROW_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
   <param name='WIND_ARROW_UNIT_VELOCITY' />
-  <param name='WIND_THINNING_FACTOR' />
+  <param name='WIND_ARROW_LEGEND_TEXT' />
+</function>
+<function name='mxs_average'>
+  <param name='DATA' />
+  <param name='INTERPOLATE_VALUES' values = 'YES/NO' />
+  <param name='AREA' />
+  <param name='DIRECTION' values = 'NORTH SOUTH/EAST WEST' />
 </function>
 <function name='mxsectview'>
+  <param name='BOTTOM_LEVEL' />
+  <param name='TOP_LEVEL' />
+  <param name='VERTICAL_SCALING' values = 'LINEAR/LOG' />
+  <param name='INTERPOLATE_VALUES' values = 'YES/NO' />
   <param name='LINE' />
-  <param name='BOTTOM_PRESSURE' />
-  <param name='TOP_PRESSURE' />
   <param name='WIND_PARALLEL' values = 'ON/OFF' />
   <param name='WIND_PERPENDICULAR' values = 'ON/OFF' />
   <param name='WIND_INTENSITY' values = 'ON/OFF' />
   <param name='WIND_HORIZONTAL_COMPONENT' values = 'PERPENDICULAR/PARALLEL/INTENSITY' />
-  <param name='PRESSURE_LEVEL_AXIS' values = 'LINEAR/LOG' />
+  <param name='LNSP_PARAM' />
+  <param name='U_WIND_PARAM' />
+  <param name='V_WIND_PARAM' />
+  <param name='W_WIND_PARAM' />
   <param name='MAP_PROJECTION' values = 'cartesian' />
   <param name='HORIZONTAL_AXIS' />
   <param name='VERTICAL_AXIS' />
@@ -1056,6 +1341,8 @@
   <param name='NETCDF_LONGITUDE_VARIABLE' />
   <param name='NETCDF_X_VARIABLE' />
   <param name='NETCDF_Y_VARIABLE' />
+  <param name='NETCDF_X2_VARIABLE' />
+  <param name='NETCDF_Y2_VARIABLE' />
   <param name='NETCDF_VALUE_VARIABLE' />
   <param name='NETCDF_DIMENSION_SETTING' />
   <param name='NETCDF_X_COMPONENT_VARIABLE' />
@@ -1092,46 +1379,6 @@
   <param name='FAIL_ON_ERROR' values = 'YES/NO' />
   <param name='FAIL_ON_EMPTY_OUTPUT' values = 'YES/NO' />
 </function>
-<function name='obstat'>
-  <param name='first_cycle' />
-  <param name='last_cycle' />
-  <param name='expver_1' />
-  <param name='class_1' />
-  <param name='stream_1' />
-  <param name='expver_2' />
-  <param name='class_2' />
-  <param name='stream_2' />
-  <param name='all_data' values = 'ON/OFF' />
-  <param name='use_ecfs_log' values = 'ON/OFF' />
-  <param name='stat_def' />
-  <param name='user_params' />
-  <param name='user_flags' />
-  <param name='output_grib_dir' />
-  <param name='store_dir' />
-  <param name='exe_dir' />
-  <param name='lib_dir' />
-  <param name='data_dir' />
-  <param name='stdev' values = 'ON/OFF' />
-  <param name='stat_merge' />
-  <param name='stat_calc' values = 'ON/OFF' />
-  <param name='obs_format' values = 'ODB/BUFR/USER' />
-  <param name='odb_file_type' values = 'CCMA/ECMA/ODBCMP/MONDB' />
-  <param name='odb_datalist' values = 'AMSUA/AMSRE/AMSUA/AMSUB/CONV/GEOS/GPSRO/HIRS/IASI/MERIS/MHS/MWHS/MWTS/REO3/SATOB/SCATT/SSMI/SSMIS/SURF_CONV/TMI' />
-  <param name='retireve_odb' values = 'ON/OFF' />
-  <param name='obstat_plot' values = 'ON/OFF' />
-  <param name='coverage' values = 'ON/OFF' />
-  <param name='geogrib_average_period' values = 'ON/OFF' />
-  <param name='fovgrib_average_period' values = 'ON/OFF' />
-  <param name='scat_period' values = 'ON/OFF' />
-  <param name='comment' />
-  <param name='sta_calc' values = 'ON/OFF' />
-  <param name='sta_accum' values = 'ON/OFF' />
-  <param name='update_soft' values = 'ON/OFF' />
-  <param name='feedback_clean' values = 'ON/OFF' />
-  <param name='sta_clean' values = 'ON/OFF' />
-  <param name='sta_plot' values = 'ON/OFF' />
-  <param name='sql_section' />
-</function>
 <function name='odb_filter'>
   <param name='ODB_OUTPUT' values = 'ODB' />
   <param name='ODB_FILENAME' values = 'OFF' />
@@ -1508,6 +1755,10 @@
   <param name='LEFT' />
   <param name='RIGHT' />
 </function>
+<function name='pm_bufr_tephi'>
+</function>
+<function name='pm_grib_tephi'>
+</function>
 <function name='png_output'>
   <param name='OUTPUT_TITLE' />
   <param name='OUTPUT_WIDTH' />
@@ -1663,6 +1914,8 @@
 <function name='pott_p'>
   <param name='TEMPERATURE' />
 </function>
+<function name='pre1995gribtephi'>
+</function>
 <function name='ps_output'>
   <param name='OUTPUT_TITLE' />
   <param name='OUTPUT_WIDTH' />
@@ -1845,13 +2098,78 @@
   <param name='DATA' />
   <param name='CFSPATH' values = 'OFF' />
   <param name='ORDER' values = 'AS IS/SORTED' />
-  <param name='CLASS' values = 'OPERATIONS/RESEARCH/REANALYSE/ECSN/REANALYSE40/ERA INTERIM/DEMETER/PROVOST/ELDAS/TOST/COSMO/ENSEMBLES/MERSEA/SREPS/DTS/LACE/YOTC/MACC/PERMANENT EXPERIMENT/E20CM/E20C/ESAT/EPST/EURO4M/AUSTRIA/BELGIUM/CROATIA/DENMARK/FINLAND/FRANCE/GERMANY/GREECE/HUNGARY/ICELAND/IRELAND/ITALY/NETHERLANDS/NORWAY/PORTUGAL/SLOVENIA/SPAIN/SWEDEN/SWITZERLAND/TURKEY/UNITED KINGDOM/METAPS/TEST/ANY' />
+  <param name='CLASS' values = 'OPERATIONS/RESEARCH/REANALYSE/ECSN/REANALYSE40/ERA INTERIM/DEMETER/PROVOST/ELDAS/TOST/COSMO/ENSEMBLES/MERSEA/SREPS/DTS/LACE/YOTC/MACC/PERMANENT EXPERIMENT/E20CM/E20C/ESAT/EPST/EURO4M/20CR/AUSTRIA/BELGIUM/CROATIA/DENMARK/FINLAND/FRANCE/GERMANY/GREECE/HUNGARY/ICELAND/IRELAND/ITALY/NETHERLANDS/NORWAY/PORTUGAL/SLOVENIA/SPAIN/SWEDEN/SWITZERLAND/TURKEY/UNITED KINGDOM/METAPS/TEST/ANY' />
+  <param name='STREAM' values = 'ANALYSIS FOR MULTIANALYSIS PROJECT/BRACKNELL/CHERNOBYL/DAILY ARCHIVE/DAILY ARCHIVE HINDCASTS/DAILY CLIMATOLOGY/DAILY CLIMATOLOGY WAVE/ENSEMBLE DATA ASSIMILATION/ENSEMBLE DATA ASSIMILATION MONTHLY MEANS/ENSEMBLE DATA ASSIMILATION MONTHLY MEANS OF DAILY MEANS/ENSEMBLE WAVE DATA ASSIMILATION MONTHLY MEANS OF DAILY MEANS/ENSEMBLE WAVE DATA ASSIMILATION MONTHLY MEANS/ENSEMBLE LONG WINDOW DATA ASSIMILATION/ENSEMBLE WAVE LONG WINDOW DATA ASSIMILATION/ENSEMBLE FO [...]
+  <param name='TYPE' values = 'ANY/3D VARIATIONAL ANALYSIS/3D VARIATIONAL GRADIENTS/4D VARIATIONAL ANALYSIS/4D VARIATIONAL INCREMENTS/4D VARIATIONAL GRADIENTS/ADJOINT SINGULAR VECTOR/ANALYSIS BIAS/ANALYSIS INPUT/ANALYSIS FEEDBACK/ANALYSIS/ASSIMILATION RUN/BIAS-CORRECTED FORECAST/CALIBRATION VALIDATION FORECAST/CLIMATE DISTRIBUTION/CLIMATOLOGY/CLUSTERING INFORMATION/CLUSTER MEANS/CLUSTER REPRESENTATIVE/CLUSTER STD DEVIATIONS/CONTROL FORECAST/EMPIRICAL DISTRIBUTION/ENSEMBLE MEAN/ENSEMBLE S [...]
+  <param name='MODEL' values = 'ANY/OFF/ECMF/EDZW/EGRR/LFPW/KWBC/NONE/HRM/LM/IFS/GLOBAL' />
+  <param name='LEVTYPE' values = 'ANY/POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/DEPTH/OCEAN WAVE/LAYER/CATEGORY/ALL' />
+  <param name='LEVELIST' values = 'ANY/TO/BY/OFF' />
+  <param name='PARAM' values = 'ANY/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
+  <param name='DATE' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
+  <param name='VERIFY' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF/OFF' />
+  <param name='REFDATE' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
+  <param name='HDATE' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF/ALL' />
+  <param name='FCMONTH' values = 'TO/BY/OFF' />
+  <param name='FCPERIOD' values = 'TO/BY/OFF' />
+  <param name='TIME' values = 'ANY/TO/BY' />
+  <param name='LEADTIME' values = 'TO/OFF/ANY' />
+  <param name='OPTTIME' values = 'TO/OFF/ANY' />
+  <param name='REFERENCE' values = 'ANY/TO/BY' />
+  <param name='STEP' values = 'ANY/TO/BY' />
+  <param name='ANOFFSET' values = 'ANY/TO/BY/OFF' />
+  <param name='RANGE' values = 'ANY' />
+  <param name='ACCURACY' values = 'ANY/NORMAL/REDUCED/LOW/OFF/ARCHIVED VALUE' />
+  <param name='STYLE' values = 'DISSEMINATION/OFF/ANY' />
+  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/LINEAR/LINEAR FIT/CUBIC/AVERAGE WEIGHTED/AVERAGE/OFF/ANY' />
+  <param name='AREA' values = 'ANY/GLOBE/EUROPE' />
+  <param name='FRAME' values = 'OFF' />
+  <param name='BITMAP' values = 'OFF' />
+  <param name='RESOL' values = 'ARCHIVED VALUE/AUTOMATIC RESOLUTION/319/213/106/ANY' />
+  <param name='ROTATION' values = 'ANY' />
+  <param name='GRID' values = 'ANY' />
+  <param name='GAUSSIAN' values = 'REDUCED/REGULAR/OFF' />
+  <param name='SPECIFICATION' values = 'OFF' />
+  <param name='TARGET' values = 'OFF' />
+  <param name='ENSEMBLE' values = 'ALL/OFF/TO' />
+  <param name='CLUSTER' values = 'ALL/OFF/TO' />
+  <param name='PROBABILITY' values = 'ALL/OFF/TO' />
+  <param name='NUMBER' values = 'ALL/OFF/TO/BY/ANY' />
+  <param name='QUANTILE' values = 'ALL/OFF/TO/BY/ANY' />
+  <param name='FREQUENCY' values = 'ALL/OFF/TO/ANY' />
+  <param name='DIRECTION' values = 'ALL/OFF/TO/ANY' />
+  <param name='DIAGNOSTIC' values = 'ALL/OFF/ANY' />
+  <param name='ITERATION' values = 'ALL/OFF/TO/ANY' />
+  <param name='CHANNEL' values = 'OFF/TO/ALL/ANY' />
+  <param name='IDENT' values = 'METEOSAT 3/METEOSAT 4/METEOSAT 5/METEOSAT 6/METEOSAT 7/METEOSAT 8/GOES 8/GOES 9/GOES 10/GOES 11/GOES 12/DMSP 10/DMSP 13/OFF/ANY' />
+  <param name='INSTRUMENT' values = 'MHS/MVIRI/SEVIRI/GOES IMAGER/AMSU-A/AMSU-B/MSU/HIRS2/HIRS3/SSU/OFF/ANY' />
+  <param name='FILTER' values = 'ANY' />
+  <param name='REPRES' values = 'BUFR/SPHERICAL HARMONICS/LAT LONG GRID/GAUSSIAN GRID/SPACE VIEW/OCEAN GRID/ALL/ANY' />
+  <param name='ORIGIN' values = 'OFF/WASHINGTON/BRACKNELL/FLEET NUMERICAL/OFFENBACH/ECMWF/TOULOUSE/PARIS/MADRID/UNIVERSITY OF VIENNA/KNMI/INGV/CERFACS/IFMK/HADLEY CENTRE/CONSENSUS/MELBOURNE/TOKYO/MONTREAL/BEIJING/SEOUL/CPTEC/CNMC/OSLO/ALL/ANY' />
+  <param name='PADDING' values = 'ANY/AUTOMATIC/NONE/OFF' />
+  <param name='DOMAIN' values = 'GENERAL EUROPEAN AREA/GLOBE/MEDITERRANEAN/NORTHERN HEMISPHERE/SOUTHERN HEMISPHERE/BALTIC AND BLACK SEA/EUROPE/NORTH WEST EUROPE/NORTH EAST EUROPE/SOUTH WEST EUROPE/SOUTH EAST EUROPE/WESTERN ATLANTIC/FASTEX/TROPICS/TROPICS 2/X/ALL/V/H/I/J/K/L/O/P/Q/R/Y/Z/ANY' />
+  <param name='SYSTEM' values = 'ALL/ANY' />
+  <param name='METHOD' values = 'TO/BY/ALL/OFF/ANY' />
+  <param name='PRODUCT' values = 'INSTANTANEOUS/TIME-SERIES/TIME-AVERAGE/TIME-ACCUMULATION/ALL/ANY' />
+  <param name='SECTION' values = 'HORIZONTAL/VERTICAL/ZONAL/MERIDIONAL/ALL/ANY' />
+  <param name='LATITUDE' values = 'ANY' />
+  <param name='LONGITUDE' values = 'ANY' />
+  <param name='EXPVER' values = '1/2/11/12/ANY' />
+</function>
+<function name='read_ecregrid'>
+  <param name='FIELDSET' />
+  <param name='READ_DATA_FROM' values = 'FILE/METVIEW_ICON' />
+  <param name='SOURCE' values = 'OFF' />
+  <param name='LOGSTATS' values = 'OFF' />
+  <param name='DATA' />
+  <param name='CFSPATH' values = 'OFF' />
+  <param name='ORDER' values = 'AS IS/SORTED' />
+  <param name='CLASS' values = 'OPERATIONS/RESEARCH/REANALYSE/ECSN/REANALYSE40/ERA INTERIM/DEMETER/PROVOST/ELDAS/TOST/COSMO/ENSEMBLES/MERSEA/SREPS/DTS/LACE/YOTC/MACC/PERMANENT EXPERIMENT/E20CM/E20C/ESAT/EPST/EURO4M/20CR/AUSTRIA/BELGIUM/CROATIA/DENMARK/FINLAND/FRANCE/GERMANY/GREECE/HUNGARY/ICELAND/IRELAND/ITALY/NETHERLANDS/NORWAY/PORTUGAL/SLOVENIA/SPAIN/SWEDEN/SWITZERLAND/TURKEY/UNITED KINGDOM/METAPS/TEST/ANY' />
   <param name='STREAM' values = 'ANALYSIS FOR MULTIANALYSIS PROJECT/BRACKNELL/CHERNOBYL/DAILY ARCHIVE/DAILY ARCHIVE HINDCASTS/DAILY CLIMATOLOGY/DAILY CLIMATOLOGY WAVE/ENSEMBLE DATA ASSIMILATION/ENSEMBLE DATA ASSIMILATION MONTHLY MEANS/ENSEMBLE DATA ASSIMILATION MONTHLY MEANS OF DAILY MEANS/ENSEMBLE WAVE DATA ASSIMILATION MONTHLY MEANS OF DAILY MEANS/ENSEMBLE WAVE DATA ASSIMILATION MONTHLY MEANS/ENSEMBLE LONG WINDOW DATA ASSIMILATION/ENSEMBLE WAVE LONG WINDOW DATA ASSIMILATION/ENSEMBLE FO [...]
-  <param name='TYPE' values = 'ANY/3D VARIATIONAL ANALYSIS/3D VARIATIONAL GRADIENTS/4D VARIATIONAL ANALYSIS/4D VARIATIONAL INCREMENTS/4D VARIATIONAL GRADIENTS/ADJOINT SINGULAR VECTOR/ANALYSIS BIAS/ANALYSIS INPUT/ANALYSIS FEEDBACK/ANALYSIS/ASSIMILATION RUN/BIAS-CORRECTED FORECAST/CALIBRATION VALIDATION FORECAST/CLIMATE DISTRIBUTION/CLIMATOLOGY/CLUSTERING INFORMATION/CLUSTER MEANS/CLUSTER REPRESENTATIVE/CLUSTER STD DEVIATIONS/CONTROL FORECAST/EMPIRICAL DISTRIBUTION/ENSEMBLE MEAN/ENSEMBLE S [...]
+  <param name='TYPE' values = 'ANY/3D VARIATIONAL ANALYSIS/3D VARIATIONAL GRADIENTS/4D VARIATIONAL ANALYSIS/4D VARIATIONAL INCREMENTS/4D VARIATIONAL GRADIENTS/ADJOINT SINGULAR VECTOR/ANALYSIS BIAS/ANALYSIS INPUT/ANALYSIS FEEDBACK/ANALYSIS/ASSIMILATION RUN/BIAS-CORRECTED FORECAST/CALIBRATION VALIDATION FORECAST/CLIMATE DISTRIBUTION/CLIMATOLOGY/CLUSTERING INFORMATION/CLUSTER MEANS/CLUSTER REPRESENTATIVE/CLUSTER STD DEVIATIONS/CONTROL FORECAST/EMPIRICAL DISTRIBUTION/ENSEMBLE MEAN/ENSEMBLE S [...]
   <param name='MODEL' values = 'ANY/OFF/ECMF/EDZW/EGRR/LFPW/KWBC/NONE/HRM/LM/IFS/GLOBAL' />
   <param name='LEVTYPE' values = 'ANY/POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/DEPTH/OCEAN WAVE/LAYER/CATEGORY/ALL' />
   <param name='LEVELIST' values = 'ANY/TO/BY/OFF' />
-  <param name='PARAM' values = 'ANY/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
+  <param name='PARAM' values = 'ANY/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
   <param name='DATE' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
   <param name='VERIFY' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF/OFF' />
   <param name='REFDATE' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
@@ -1867,7 +2185,7 @@
   <param name='RANGE' values = 'ANY' />
   <param name='ACCURACY' values = 'ANY/NORMAL/REDUCED/LOW/OFF/ARCHIVED VALUE' />
   <param name='STYLE' values = 'DISSEMINATION/OFF/ANY' />
-  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/OFF/ANY' />
+  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/LINEAR/LINEAR FIT/CUBIC/AVERAGE WEIGHTED/AVERAGE/OFF/ANY' />
   <param name='AREA' values = 'ANY/GLOBE/EUROPE' />
   <param name='FRAME' values = 'OFF' />
   <param name='BITMAP' values = 'OFF' />
@@ -1910,7 +2228,7 @@
   <param name='DATA' />
   <param name='CFSPATH' values = 'OFF' />
   <param name='ORDER' values = 'AS IS/SORTED' />
-  <param name='CLASS' values = 'TIGGE/ANY' />
+  <param name='CLASS' values = 'TIGGE/S2S/ANY' />
   <param name='STREAM' values = 'ENFO/DA/ANY' />
   <param name='TYPE' values = 'ANY/CONTROL FORECAST/FORECAST/PERTURBED FORECAST/ALL' />
   <param name='MODEL' values = 'ANY/GLOB/LAM' />
@@ -1923,7 +2241,7 @@
   <param name='ANOFFSET' values = 'ANY/TO/BY/OFF' />
   <param name='ACCURACY' values = 'ANY/NORMAL/REDUCED/LOW/ARCHIVED VALUE' />
   <param name='STYLE' values = 'DISSEMINATION/OFF/ANY' />
-  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/OFF/ANY' />
+  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/LINEAR/LINEAR FIT/CUBIC/AVERAGE WEIGHTED/AVERAGE/OFF/ANY' />
   <param name='AREA' values = 'ANY/GLOBE/EUROPE' />
   <param name='FRAME' values = 'OFF' />
   <param name='BITMAP' values = 'OFF' />
@@ -1935,7 +2253,7 @@
   <param name='TARGET' values = 'OFF' />
   <param name='NUMBER' values = 'ALL/OFF/TO/BY/ANY' />
   <param name='REPRES' values = 'BUFR/SPHERICAL HARMONICS/LAT LONG GRID/GAUSSIAN GRID/SPACE VIEW/OCEAN GRID/ALL/ANY' />
-  <param name='ORIGIN' values = 'KWBC/BABJ/ECMF/EGRR/RJTD/AMMC/CWAO/RKSL/SBSJ/LFPW/COSMOLEPS-ARPASIMC-EU/ALL/ANY' />
+  <param name='ORIGIN' values = 'KWBC/BABJ/ECMF/EGRR/RJTD/AMMC/CWAO/RKSL/SBSJ/LFPW/COSMOLEPS-ARPASIMC-EU/ALADINLAEF-ZAMG-EU/COSMODEEPS-DWD-EU/ALADINHUNEPS-OMSZ-EU/SRNWPPEPS-DWD-EUA/MOGREPS-MO-EUA/GLAMEPS-HIRLAMCONS-EU/SREPS-AEMET-EUA/HIRLAM-DMI-EU/AROMEEPS-MF-EU/ALL/ANY' />
   <param name='PADDING' values = 'ANY/AUTOMATIC/NONE/OFF' />
   <param name='DOMAIN' values = 'GENERAL EUROPEAN AREA/GLOBE/MEDITERRANEAN/NORTHERN HEMISPHERE/SOUTHERN HEMISPHERE/BALTIC AND BLACK SEA/EUROPE/NORTH WEST EUROPE/NORTH EAST EUROPE/SOUTH WEST EUROPE/SOUTH EAST EUROPE/WESTERN ATLANTIC/FASTEX/TROPICS/TROPICS 2/X/ALL/V/H/I/J/K/L/O/P/Q/R/Y/Z/ANY' />
   <param name='EXPVER' values = '1/2/11/12/ANY' />
@@ -1948,7 +2266,7 @@
   <param name='DATA' />
   <param name='CFSPATH' values = 'OFF' />
   <param name='ORDER' values = 'AS IS/SORTED' />
-  <param name='CLASS' values = 'TIGGE/ANY' />
+  <param name='CLASS' values = 'TIGGE/S2S/ANY' />
   <param name='STREAM' values = 'ENFO/DA/ANY' />
   <param name='TYPE' values = 'ANY/CONTROL FORECAST/FORECAST/PERTURBED FORECAST/ALL' />
   <param name='MODEL' values = 'ANY/GLOB/LAM' />
@@ -1961,7 +2279,7 @@
   <param name='ANOFFSET' values = 'ANY/TO/BY/OFF' />
   <param name='ACCURACY' values = 'ANY/NORMAL/REDUCED/LOW/ARCHIVED VALUE' />
   <param name='STYLE' values = 'DISSEMINATION/OFF/ANY' />
-  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/OFF/ANY' />
+  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/LINEAR/LINEAR FIT/CUBIC/AVERAGE WEIGHTED/AVERAGE/OFF/ANY' />
   <param name='AREA' values = 'ANY/GLOBE/EUROPE' />
   <param name='FRAME' values = 'OFF' />
   <param name='BITMAP' values = 'OFF' />
@@ -1973,11 +2291,14 @@
   <param name='TARGET' values = 'OFF' />
   <param name='NUMBER' values = 'ALL/OFF/TO/BY/ANY' />
   <param name='REPRES' values = 'BUFR/SPHERICAL HARMONICS/LAT LONG GRID/GAUSSIAN GRID/SPACE VIEW/OCEAN GRID/ALL/ANY' />
-  <param name='ORIGIN' values = 'KWBC/BABJ/ECMF/EGRR/RJTD/AMMC/CWAO/RKSL/SBSJ/LFPW/COSMOLEPS-ARPASIMC-EU/ALL/ANY' />
+  <param name='ORIGIN' values = 'KWBC/BABJ/ECMF/EGRR/RJTD/AMMC/CWAO/RKSL/SBSJ/LFPW/COSMOLEPS-ARPASIMC-EU/ALADINLAEF-ZAMG-EU/COSMODEEPS-DWD-EU/ALADINHUNEPS-OMSZ-EU/SRNWPPEPS-DWD-EUA/MOGREPS-MO-EUA/GLAMEPS-HIRLAMCONS-EU/SREPS-AEMET-EUA/HIRLAM-DMI-EU/AROMEEPS-MF-EU/ALL/ANY' />
   <param name='PADDING' values = 'ANY/AUTOMATIC/NONE/OFF' />
   <param name='DOMAIN' values = 'GENERAL EUROPEAN AREA/GLOBE/MEDITERRANEAN/NORTHERN HEMISPHERE/SOUTHERN HEMISPHERE/BALTIC AND BLACK SEA/EUROPE/NORTH WEST EUROPE/NORTH EAST EUROPE/SOUTH WEST EUROPE/SOUTH EAST EUROPE/WESTERN ATLANTIC/FASTEX/TROPICS/TROPICS 2/X/ALL/V/H/I/J/K/L/O/P/Q/R/Y/Z/ANY' />
   <param name='EXPVER' values = '1/2/11/12/ANY' />
 </function>
+<function name='relhum'>
+  <param name='DATA' />
+</function>
 <function name='reprojection'>
   <param name='SOURCE' values = 'OFF' />
   <param name='DATA' />
@@ -1990,19 +2311,105 @@
 </function>
 <function name='retrieve'>
   <param name='DATASET' />
-  <param name='CLASS' values = 'OPERATIONS/RESEARCH/REANALYSE/ECSN/REANALYSE40/ERA INTERIM/DEMETER/PROVOST/ELDAS/TOST/COSMO/ENSEMBLES/MERSEA/SREPS/DTS/LACE/YOTC/MACC/PERMANENT EXPERIMENT/E20CM/E20C/ESAT/EPST/EURO4M/AUSTRIA/BELGIUM/CROATIA/DENMARK/FINLAND/FRANCE/GERMANY/GREECE/HUNGARY/ICELAND/IRELAND/ITALY/NETHERLANDS/NORWAY/PORTUGAL/SLOVENIA/SPAIN/SWEDEN/SWITZERLAND/TURKEY/UNITED KINGDOM/METAPS/TEST' />
-  <param name='TYPE' values = '3D VARIATIONAL ANALYSIS/3D VARIATIONAL GRADIENTS/4D VARIATIONAL ANALYSIS/4D VARIATIONAL INCREMENTS/4D VARIATIONAL GRADIENTS/ADJOINT SINGULAR VECTOR/ANALYSIS BIAS/ANALYSIS INPUT/ANALYSIS FEEDBACK/ANALYSIS/ASSIMILATION RUN/BIAS-CORRECTED FORECAST/CALIBRATION VALIDATION FORECAST/CLIMATE DISTRIBUTION/CLIMATOLOGY/CLUSTERING INFORMATION/CLUSTER MEANS/CLUSTER REPRESENTATIVE/CLUSTER STD DEVIATIONS/CONTROL FORECAST/EMPIRICAL DISTRIBUTION/ENSEMBLE MEAN/ENSEMBLE STAND [...]
+  <param name='CLASS' values = 'OPERATIONS/RESEARCH/REANALYSE/ECSN/REANALYSE40/ERA INTERIM/DEMETER/PROVOST/ELDAS/TOST/COSMO/ENSEMBLES/MERSEA/SREPS/DTS/LACE/YOTC/MACC/PERMANENT EXPERIMENT/E20CM/E20C/ESAT/EPST/EURO4M/20CR/AUSTRIA/BELGIUM/CROATIA/DENMARK/FINLAND/FRANCE/GERMANY/GREECE/HUNGARY/ICELAND/IRELAND/ITALY/NETHERLANDS/NORWAY/PORTUGAL/SLOVENIA/SPAIN/SWEDEN/SWITZERLAND/TURKEY/UNITED KINGDOM/METAPS/TEST' />
+  <param name='TYPE' values = '3D VARIATIONAL ANALYSIS/3D VARIATIONAL GRADIENTS/4D VARIATIONAL ANALYSIS/4D VARIATIONAL INCREMENTS/4D VARIATIONAL GRADIENTS/ADJOINT SINGULAR VECTOR/ANALYSIS BIAS/ANALYSIS INPUT/ANALYSIS FEEDBACK/ANALYSIS/ASSIMILATION RUN/BIAS-CORRECTED FORECAST/CALIBRATION VALIDATION FORECAST/CLIMATE DISTRIBUTION/CLIMATOLOGY/CLUSTERING INFORMATION/CLUSTER MEANS/CLUSTER REPRESENTATIVE/CLUSTER STD DEVIATIONS/CONTROL FORECAST/EMPIRICAL DISTRIBUTION/ENSEMBLE MEAN/ENSEMBLE STAND [...]
+  <param name='STREAM' values = 'ANALYSIS FOR MULTIANALYSIS PROJECT/BRACKNELL/CHERNOBYL/DAILY ARCHIVE/DAILY ARCHIVE HINDCASTS/DAILY CLIMATOLOGY/DAILY CLIMATOLOGY WAVE/ENSEMBLE DATA ASSIMILATION/ENSEMBLE DATA ASSIMILATION MONTHLY MEANS/ENSEMBLE DATA ASSIMILATION MONTHLY MEANS OF DAILY MEANS/ENSEMBLE WAVE DATA ASSIMILATION MONTHLY MEANS OF DAILY MEANS/ENSEMBLE WAVE DATA ASSIMILATION MONTHLY MEANS/ENSEMBLE LONG WINDOW DATA ASSIMILATION/ENSEMBLE WAVE LONG WINDOW DATA ASSIMILATION/ENSEMBLE FO [...]
+  <param name='EXPVER' values = '1' />
+  <param name='MODEL' values = 'OFF/ECMF/EDZW/EGRR/LFPW/KWBC/NONE/HRM/LM/IFS/GLOBAL' />
+  <param name='REPRES' values = 'BUFR/SPHERICAL HARMONICS/LAT LONG GRID/GAUSSIAN GRID/SPACE VIEW/OCEAN GRID/ALL' />
+  <param name='OBSGROUP' values = 'SAT/ERS1/TRMM/QSCAT/REO3/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/99/OFF' />
+  <param name='REPORTYPE' values = 'TIROS-N HIRS Radiances/NOAA 6 HIRS Radiances/NOAA 7 HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 12 HIRS Radiances/NOAA 14 HIRS Radiances/NOAA 15 HIRS Radiances/NOAA 16 HIRS Radiances/NOAA 17 HIRS Radiances/NOAA 18 HIRS Radiances/NOAA 19 HIRS Radiances/METOP-A HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 6 HIRS Radiances/NOA [...]
+  <param name='RDBPREFIX' values = 'OFF' />
+  <param name='OBSTYPE' values = 'ALL/NON SATELLITE DATA ALL/SATELLITE DATA ALL/ALL/CONVENTIONAL/SD/GRIB IMAGES/FIRST INFRARED BAND/SECOND INFRARED BAND/FIRST VISIBLE BAND/WATER VAPOR BAND/BUFR/WAVESCAT/SCAT/RALT/TOVH/GRAD/ATOV/AIRS/STORM/IMSSNOW/AMSU_EARS/BALTIC_CI/WAVESAR/IASI/OSTIA/ENVISAT_MERIS/ATMS/CRIS/SMOS/FBCONV/FBSCAT/FBSSMI/FBTMI/FBTOVS/FBRAD1C/FBGEOS/FBTRMR/FBREO3/FBAIRS/FBAMSRE/FBSSMIS/FBGPSRO/FBIASI/FBWINDSAT/LAND SURFACE DATA/SYNOP LAND/SYNOP RECORD 2 LAND/SYNOP AUTO LAND/S [...]
+  <param name='LEVTYPE' values = 'POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/DEPTH/OCEAN WAVE/LAYER/CATEGORY/ALL' />
+  <param name='LEVELIST' values = 'TO/BY/ALL/OFF' />
+  <param name='PARAM' values = 'ALL/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
+  <param name='YEAR' values = 'TO/BY/ALL' />
+  <param name='DECADE' values = 'TO/BY/ALL' />
+  <param name='MONTH' values = 'TO/BY/ALL' />
+  <param name='DATE' values = 'JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
+  <param name='VERIFY' values = 'JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF/OFF' />
+  <param name='REFDATE' values = 'JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF/OFF' />
+  <param name='HDATE' values = 'JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF/ALL/OFF' />
+  <param name='FCMONTH' values = 'TO/BY/OFF' />
+  <param name='FCPERIOD' values = 'TO/BY/OFF' />
+  <param name='TIME' values = 'TO/BY/ALL/12' />
+  <param name='LEADTIME' values = 'TO/OFF/ALL' />
+  <param name='OPTTIME' values = 'TO/OFF/ALL' />
+  <param name='RANGE' values = 'OFF' />
+  <param name='STEP' values = 'ALL/TO/BY' />
+  <param name='ANOFFSET' values = 'ALL/TO/BY/OFF' />
+  <param name='REFERENCE' values = 'ALL/TO/BY/OFF' />
+  <param name='ENSEMBLE' values = 'ALL/TO/OFF' />
+  <param name='CLUSTER' values = 'ALL/TO/OFF' />
+  <param name='PROBABILITY' values = 'ALL/TO/OFF' />
+  <param name='NUMBER' values = 'ALL/OFF/TO/BY' />
+  <param name='QUANTILE' values = 'ALL/OFF/TO/BY' />
+  <param name='DOMAIN' values = 'GENERAL EUROPEAN AREA/GLOBE/MEDITERRANEAN/NORTHERN HEMISPHERE/SOUTHERN HEMISPHERE/BALTIC AND BLACK SEA/EUROPE/NORTH WEST EUROPE/NORTH EAST EUROPE/SOUTH WEST EUROPE/SOUTH EAST EUROPE/WESTERN ATLANTIC/FASTEX/TROPICS/TROPICS 2/X/ALL/V/H/I/J/K/L/O/P/Q/R/Y/Z' />
+  <param name='FREQUENCY' values = 'ALL/OFF/TO' />
+  <param name='DIRECTION' values = 'ALL/OFF/TO' />
+  <param name='DIAGNOSTIC' values = 'ALL/OFF' />
+  <param name='ITERATION' values = 'ALL/OFF/TO' />
+  <param name='CHANNEL' values = 'ALL/OFF/TO/ALL' />
+  <param name='IDENT' values = 'ALL/METEOSAT 3/METEOSAT 4/METEOSAT 5/METEOSAT 6/METEOSAT 7/METEOSAT 8/GOES 8/GOES 9/GOES 10/GOES 11/GOES 12/DMSP 10/DMSP 13/OFF' />
+  <param name='ORIGIN' values = 'OFF/WASHINGTON/BRACKNELL/FLEET NUMERICAL/OFFENBACH/ECMWF/TOULOUSE/PARIS/MADRID/UNIVERSITY OF VIENNA/KNMI/INGV/CERFACS/IFMK/HADLEY CENTRE/CONSENSUS/MELBOURNE/TOKYO/MONTREAL/BEIJING/SEOUL/CPTEC/CNMC/OSLO/ALL' />
+  <param name='SYSTEM' values = 'ALL/OFF' />
+  <param name='METHOD' values = 'TO/BY/ALL/OFF/OFF' />
+  <param name='PRODUCT' values = 'INSTANTANEOUS/TIME-SERIES/TIME-AVERAGE/TIME-ACCUMULATION/ALL/OFF' />
+  <param name='SECTION' values = 'HORIZONTAL/VERTICAL/ZONAL/MERIDIONAL/ALL/OFF' />
+  <param name='LATITUDE' values = 'OFF' />
+  <param name='LONGITUDE' values = 'OFF' />
+  <param name='SOURCE' values = 'OFF' />
+  <param name='TARGET' values = 'OFF' />
+  <param name='LOGSTATS' values = 'OFF' />
+  <param name='TRANSFER' values = 'HANDLE/DATA/OFF' />
+  <param name='FIELDSET' values = 'OFF' />
+  <param name='CFSPATH' />
+  <param name='FORMAT' values = 'PACKED/UNPACKED/GRIB EDITION 1/GRIB EDITION 2/NETCDF' />
+  <param name='DISP' values = 'NEW/OLD/REMOVE/OFF' />
+  <param name='RESOL' values = 'ARCHIVED VALUE/AUTOMATIC RESOLUTION/REDUCED GAUSSIAN 128/REDUCED GAUSSIAN 160/REDUCED GAUSSIAN 200/OFF/319/213/106/63' />
+  <param name='ACCURACY' values = 'NORMAL/REDUCED/LOW/OFF/ARCHIVED VALUE' />
+  <param name='STYLE' values = 'DISSEMINATION/OFF' />
+  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/LINEAR/LINEAR FIT/CUBIC/AVERAGE WEIGHTED/AVERAGE/OFF' />
+  <param name='AREA' values = 'GLOBE/EUROPE/OFF' />
+  <param name='LOCATION' values = 'OFF' />
+  <param name='BLOCK' values = 'OFF' />
+  <param name='INSTRUMENT' values = 'MHS/MVIRI/SEVIRI/GOES IMAGER/AMSU-A/AMSU-B/MSU/HIRS2/HIRS3/SSU/OFF' />
+  <param name='FILTER' values = 'OFF' />
+  <param name='ROTATION' values = 'OFF' />
+  <param name='FRAME' values = 'OFF' />
+  <param name='BITMAP' values = 'OFF' />
+  <param name='GRID' values = 'ARCHIVED VALUE/320/160/80/48/OFF' />
+  <param name='GAUSSIAN' values = 'REDUCED/REGULAR/OFF' />
+  <param name='SPECIFICATION' values = 'OFF' />
+  <param name='PACKING' values = 'SI/CO/SO/AV/OFF' />
+  <param name='PADDING' values = 'AUTOMATIC/NONE/OFF/OFF' />
+  <param name='DUPLICATES' values = 'KEEP/REMOVE' />
+  <param name='LAUNCH' />
+  <param name='JOB' values = 'OFF' />
+  <param name='USE' values = 'FREQUENT/INFREQUENT/NORMAL/BOUNDARY CONDITIONS/COMPARE/MONTHLY RUN' />
+  <param name='PASSWORD' values = 'OFF' />
+  <param name='COSTONLY' values = 'YES/NO' />
+  <param name='PROCESS' values = 'LOCAL/SERVER/OFF' />
+  <param name='BRANCH' values = 'TRUE/FALSE/OFF' />
+  <param name='DATABASE' values = 'OFF' />
+  <param name='EXPECT' values = 'ANY/OFF' />
+</function>
+<function name='retrieve_ecregrid'>
+  <param name='DATASET' />
+  <param name='CLASS' values = 'OPERATIONS/RESEARCH/REANALYSE/ECSN/REANALYSE40/ERA INTERIM/DEMETER/PROVOST/ELDAS/TOST/COSMO/ENSEMBLES/MERSEA/SREPS/DTS/LACE/YOTC/MACC/PERMANENT EXPERIMENT/E20CM/E20C/ESAT/EPST/EURO4M/20CR/AUSTRIA/BELGIUM/CROATIA/DENMARK/FINLAND/FRANCE/GERMANY/GREECE/HUNGARY/ICELAND/IRELAND/ITALY/NETHERLANDS/NORWAY/PORTUGAL/SLOVENIA/SPAIN/SWEDEN/SWITZERLAND/TURKEY/UNITED KINGDOM/METAPS/TEST' />
+  <param name='TYPE' values = '3D VARIATIONAL ANALYSIS/3D VARIATIONAL GRADIENTS/4D VARIATIONAL ANALYSIS/4D VARIATIONAL INCREMENTS/4D VARIATIONAL GRADIENTS/ADJOINT SINGULAR VECTOR/ANALYSIS BIAS/ANALYSIS INPUT/ANALYSIS FEEDBACK/ANALYSIS/ASSIMILATION RUN/BIAS-CORRECTED FORECAST/CALIBRATION VALIDATION FORECAST/CLIMATE DISTRIBUTION/CLIMATOLOGY/CLUSTERING INFORMATION/CLUSTER MEANS/CLUSTER REPRESENTATIVE/CLUSTER STD DEVIATIONS/CONTROL FORECAST/EMPIRICAL DISTRIBUTION/ENSEMBLE MEAN/ENSEMBLE STAND [...]
   <param name='STREAM' values = 'ANALYSIS FOR MULTIANALYSIS PROJECT/BRACKNELL/CHERNOBYL/DAILY ARCHIVE/DAILY ARCHIVE HINDCASTS/DAILY CLIMATOLOGY/DAILY CLIMATOLOGY WAVE/ENSEMBLE DATA ASSIMILATION/ENSEMBLE DATA ASSIMILATION MONTHLY MEANS/ENSEMBLE DATA ASSIMILATION MONTHLY MEANS OF DAILY MEANS/ENSEMBLE WAVE DATA ASSIMILATION MONTHLY MEANS OF DAILY MEANS/ENSEMBLE WAVE DATA ASSIMILATION MONTHLY MEANS/ENSEMBLE LONG WINDOW DATA ASSIMILATION/ENSEMBLE WAVE LONG WINDOW DATA ASSIMILATION/ENSEMBLE FO [...]
   <param name='EXPVER' values = '1' />
   <param name='MODEL' values = 'OFF/ECMF/EDZW/EGRR/LFPW/KWBC/NONE/HRM/LM/IFS/GLOBAL' />
   <param name='REPRES' values = 'BUFR/SPHERICAL HARMONICS/LAT LONG GRID/GAUSSIAN GRID/SPACE VIEW/OCEAN GRID/ALL' />
-  <param name='OBSGROUP' values = 'SAT/ERS1/TRMM/QSCAT/REO3/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/99/OFF' />
-  <param name='REPORTYPE' values = 'TIROS-N HIRS Radiances/NOAA 6 HIRS Radiances/NOAA 7 HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 12 HIRS Radiances/NOAA 14 HIRS Radiances/NOAA 15 HIRS Radiances/NOAA 16 HIRS Radiances/NOAA 17 HIRS Radiances/NOAA 18 HIRS Radiances/NOAA 19 HIRS Radiances/METOP-A HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 6 HIRS Radiances/NOA [...]
+  <param name='OBSGROUP' values = 'SAT/ERS1/TRMM/QSCAT/REO3/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/99/OFF' />
+  <param name='REPORTYPE' values = 'TIROS-N HIRS Radiances/NOAA 6 HIRS Radiances/NOAA 7 HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 12 HIRS Radiances/NOAA 14 HIRS Radiances/NOAA 15 HIRS Radiances/NOAA 16 HIRS Radiances/NOAA 17 HIRS Radiances/NOAA 18 HIRS Radiances/NOAA 19 HIRS Radiances/METOP-A HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 6 HIRS Radiances/NOA [...]
   <param name='RDBPREFIX' values = 'OFF' />
-  <param name='OBSTYPE' values = 'ALL/NON SATELLITE DATA ALL/SATELLITE DATA ALL/ALL/CONVENTIONAL/SD/GRIB IMAGES/FIRST INFRARED BAND/SECOND INFRARED BAND/FIRST VISIBLE BAND/WATER VAPOR BAND/BUFR/WAVESCAT/SCAT/RALT/TOVH/GRAD/ATOV/AIRS/STORM/IMSSNOW/AMSU_EARS/BALTIC_CI/WAVESAR/IASI/OSTIA/ENVISAT_MERIS/ATMS/CRIS/FBCONV/FBSCAT/FBSSMI/FBTMI/FBTOVS/FBRAD1C/FBGEOS/FBTRMR/FBREO3/FBAIRS/FBAMSRE/FBSSMIS/FBGPSRO/FBIASI/FBWINDSAT/LAND SURFACE DATA/SYNOP LAND/SYNOP RECORD 2 LAND/SYNOP AUTO LAND/SYNOP  [...]
+  <param name='OBSTYPE' values = 'ALL/NON SATELLITE DATA ALL/SATELLITE DATA ALL/ALL/CONVENTIONAL/SD/GRIB IMAGES/FIRST INFRARED BAND/SECOND INFRARED BAND/FIRST VISIBLE BAND/WATER VAPOR BAND/BUFR/WAVESCAT/SCAT/RALT/TOVH/GRAD/ATOV/AIRS/STORM/IMSSNOW/AMSU_EARS/BALTIC_CI/WAVESAR/IASI/OSTIA/ENVISAT_MERIS/ATMS/CRIS/SMOS/FBCONV/FBSCAT/FBSSMI/FBTMI/FBTOVS/FBRAD1C/FBGEOS/FBTRMR/FBREO3/FBAIRS/FBAMSRE/FBSSMIS/FBGPSRO/FBIASI/FBWINDSAT/LAND SURFACE DATA/SYNOP LAND/SYNOP RECORD 2 LAND/SYNOP AUTO LAND/S [...]
   <param name='LEVTYPE' values = 'POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/DEPTH/OCEAN WAVE/LAYER/CATEGORY/ALL' />
   <param name='LEVELIST' values = 'TO/BY/ALL/OFF' />
-  <param name='PARAM' values = 'ALL/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
+  <param name='PARAM' values = 'ALL/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
   <param name='YEAR' values = 'TO/BY/ALL' />
   <param name='DECADE' values = 'TO/BY/ALL' />
   <param name='MONTH' values = 'TO/BY/ALL' />
@@ -2044,13 +2451,13 @@
   <param name='TRANSFER' values = 'HANDLE/DATA/OFF' />
   <param name='FIELDSET' values = 'OFF' />
   <param name='CFSPATH' />
-  <param name='FORMAT' values = 'PACKED/UNPACKED/GRIB EDITION 1/GRIB EDITION 2' />
+  <param name='FORMAT' values = 'PACKED/UNPACKED/GRIB EDITION 1/GRIB EDITION 2/NETCDF' />
   <param name='DISP' values = 'NEW/OLD/REMOVE/OFF' />
   <param name='RESOL' values = 'ARCHIVED VALUE/AUTOMATIC RESOLUTION/REDUCED GAUSSIAN 128/REDUCED GAUSSIAN 160/REDUCED GAUSSIAN 200/OFF/319/213/106/63' />
   <param name='ACCURACY' values = 'NORMAL/REDUCED/LOW/OFF/ARCHIVED VALUE' />
   <param name='STYLE' values = 'DISSEMINATION/OFF' />
-  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/OFF' />
-  <param name='AREA' values = 'GLOBE/EUROPE/NORTHERN HEMISPHERE OCTANT 1/NORTHERN HEMISPHERE OCTANT 2/NORTHERN HEMISPHERE OCTANT 3/NORTHERN HEMISPHERE OCTANT 4/SOUTHERN HEMISPHERE OCTANT 1/SOUTHERN HEMISPHERE OCTANT 2/SOUTHERN HEMISPHERE OCTANT 3/SOUTHERN HEMISPHERE OCTANT 4/OFF' />
+  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/LINEAR/LINEAR FIT/CUBIC/AVERAGE WEIGHTED/AVERAGE/OFF' />
+  <param name='AREA' values = 'GLOBE/EUROPE/OFF' />
   <param name='LOCATION' values = 'OFF' />
   <param name='BLOCK' values = 'OFF' />
   <param name='INSTRUMENT' values = 'MHS/MVIRI/SEVIRI/GOES IMAGER/AMSU-A/AMSU-B/MSU/HIRS2/HIRS3/SSU/OFF' />
@@ -2076,7 +2483,7 @@
 </function>
 <function name='retrieve_g2'>
   <param name='DATASET' />
-  <param name='CLASS' values = 'TIGGE' />
+  <param name='CLASS' values = 'TIGGE/S2S' />
   <param name='TYPE' values = 'CONTROL FORECAST/FORECAST/PERTURBED FORECAST/ALL' />
   <param name='STREAM' values = 'ENFO/DA' />
   <param name='EXPVER' values = 'PROD/TEST/ALL' />
@@ -2093,18 +2500,18 @@
   <param name='ANOFFSET' values = 'ALL/TO/BY/OFF' />
   <param name='NUMBER' values = 'ALL/OFF/TO/BY' />
   <param name='DOMAIN' values = 'GENERAL EUROPEAN AREA/GLOBE/MEDITERRANEAN/NORTHERN HEMISPHERE/SOUTHERN HEMISPHERE/BALTIC AND BLACK SEA/EUROPE/NORTH WEST EUROPE/NORTH EAST EUROPE/SOUTH WEST EUROPE/SOUTH EAST EUROPE/WESTERN ATLANTIC/FASTEX/TROPICS/TROPICS 2/X/ALL/V/H/I/J/K/L/O/P/Q/R/Y/Z' />
-  <param name='ORIGIN' values = 'KWBC/BABJ/ECMF/EGRR/RJTD/AMMC/CWAO/RKSL/SBSJ/LFPW/COSMOLEPS-ARPASIMC-EU/ALL' />
+  <param name='ORIGIN' values = 'KWBC/BABJ/ECMF/EGRR/RJTD/AMMC/CWAO/RKSL/SBSJ/LFPW/COSMOLEPS-ARPASIMC-EU/ALADINLAEF-ZAMG-EU/COSMODEEPS-DWD-EU/ALADINHUNEPS-OMSZ-EU/SRNWPPEPS-DWD-EUA/MOGREPS-MO-EUA/GLAMEPS-HIRLAMCONS-EU/SREPS-AEMET-EUA/HIRLAM-DMI-EU/AROMEEPS-MF-EU/ALL' />
   <param name='SOURCE' values = 'OFF' />
   <param name='TARGET' values = 'OFF' />
   <param name='TRANSFER' values = 'HANDLE/DATA/OFF' />
   <param name='FIELDSET' values = 'OFF' />
   <param name='CFSPATH' />
-  <param name='FORMAT' values = 'PACKED/UNPACKED/GRIB EDITION 1/GRIB EDITION 2' />
+  <param name='FORMAT' values = 'PACKED/UNPACKED/GRIB EDITION 1/GRIB EDITION 2/NETCDF' />
   <param name='DISP' values = 'NEW/OLD/REMOVE/OFF' />
   <param name='RESOL' values = 'ARCHIVED VALUE/AUTOMATIC RESOLUTION/REDUCED GAUSSIAN 128/REDUCED GAUSSIAN 200/OFF/319/213/106/63' />
   <param name='ACCURACY' values = 'NORMAL/REDUCED/LOW/ARCHIVED VALUE' />
   <param name='STYLE' values = 'DISSEMINATION/OFF' />
-  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/OFF' />
+  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/LINEAR/LINEAR FIT/CUBIC/AVERAGE WEIGHTED/AVERAGE/OFF' />
   <param name='AREA' values = 'GLOBE/EUROPE/NORTHERN HEMISPHERE OCTANT 1/NORTHERN HEMISPHERE OCTANT 2/NORTHERN HEMISPHERE OCTANT 3/NORTHERN HEMISPHERE OCTANT 4/SOUTHERN HEMISPHERE OCTANT 1/SOUTHERN HEMISPHERE OCTANT 2/SOUTHERN HEMISPHERE OCTANT 3/SOUTHERN HEMISPHERE OCTANT 4' />
   <param name='LOCATION' values = 'OFF' />
   <param name='BLOCK' values = 'OFF' />
@@ -2127,19 +2534,19 @@
 </function>
 <function name='retrieve_odb'>
   <param name='DATASET' />
-  <param name='CLASS' values = 'OPERATIONS/RESEARCH/REANALYSE/ECSN/REANALYSE40/ERA INTERIM/DEMETER/PROVOST/ELDAS/TOST/COSMO/ENSEMBLES/MERSEA/SREPS/DTS/LACE/YOTC/MACC/PERMANENT EXPERIMENT/E20CM/E20C/ESAT/EPST/EURO4M/AUSTRIA/BELGIUM/CROATIA/DENMARK/FINLAND/FRANCE/GERMANY/GREECE/HUNGARY/ICELAND/IRELAND/ITALY/NETHERLANDS/NORWAY/PORTUGAL/SLOVENIA/SPAIN/SWEDEN/SWITZERLAND/TURKEY/UNITED KINGDOM/METAPS/TEST' />
-  <param name='TYPE' values = '3D VARIATIONAL ANALYSIS/3D VARIATIONAL GRADIENTS/4D VARIATIONAL ANALYSIS/4D VARIATIONAL INCREMENTS/4D VARIATIONAL GRADIENTS/ADJOINT SINGULAR VECTOR/ANALYSIS BIAS/ANALYSIS INPUT/ANALYSIS FEEDBACK/ANALYSIS/ASSIMILATION RUN/BIAS-CORRECTED FORECAST/CALIBRATION VALIDATION FORECAST/CLIMATE DISTRIBUTION/CLIMATOLOGY/CLUSTERING INFORMATION/CLUSTER MEANS/CLUSTER REPRESENTATIVE/CLUSTER STD DEVIATIONS/CONTROL FORECAST/EMPIRICAL DISTRIBUTION/ENSEMBLE MEAN/ENSEMBLE STAND [...]
+  <param name='CLASS' values = 'OPERATIONS/RESEARCH/REANALYSE/ECSN/REANALYSE40/ERA INTERIM/DEMETER/PROVOST/ELDAS/TOST/COSMO/ENSEMBLES/MERSEA/SREPS/DTS/LACE/YOTC/MACC/PERMANENT EXPERIMENT/E20CM/E20C/ESAT/EPST/EURO4M/20CR/AUSTRIA/BELGIUM/CROATIA/DENMARK/FINLAND/FRANCE/GERMANY/GREECE/HUNGARY/ICELAND/IRELAND/ITALY/NETHERLANDS/NORWAY/PORTUGAL/SLOVENIA/SPAIN/SWEDEN/SWITZERLAND/TURKEY/UNITED KINGDOM/METAPS/TEST' />
+  <param name='TYPE' values = '3D VARIATIONAL ANALYSIS/3D VARIATIONAL GRADIENTS/4D VARIATIONAL ANALYSIS/4D VARIATIONAL INCREMENTS/4D VARIATIONAL GRADIENTS/ADJOINT SINGULAR VECTOR/ANALYSIS BIAS/ANALYSIS INPUT/ANALYSIS FEEDBACK/ANALYSIS/ASSIMILATION RUN/BIAS-CORRECTED FORECAST/CALIBRATION VALIDATION FORECAST/CLIMATE DISTRIBUTION/CLIMATOLOGY/CLUSTERING INFORMATION/CLUSTER MEANS/CLUSTER REPRESENTATIVE/CLUSTER STD DEVIATIONS/CONTROL FORECAST/EMPIRICAL DISTRIBUTION/ENSEMBLE MEAN/ENSEMBLE STAND [...]
   <param name='STREAM' values = 'ANALYSIS FOR MULTIANALYSIS PROJECT/BRACKNELL/CHERNOBYL/DAILY ARCHIVE/DAILY ARCHIVE HINDCASTS/DAILY CLIMATOLOGY/DAILY CLIMATOLOGY WAVE/ENSEMBLE DATA ASSIMILATION/ENSEMBLE DATA ASSIMILATION MONTHLY MEANS/ENSEMBLE DATA ASSIMILATION MONTHLY MEANS OF DAILY MEANS/ENSEMBLE WAVE DATA ASSIMILATION MONTHLY MEANS OF DAILY MEANS/ENSEMBLE WAVE DATA ASSIMILATION MONTHLY MEANS/ENSEMBLE LONG WINDOW DATA ASSIMILATION/ENSEMBLE WAVE LONG WINDOW DATA ASSIMILATION/ENSEMBLE FO [...]
   <param name='EXPVER' values = '1' />
   <param name='MODEL' values = 'OFF/ECMF/EDZW/EGRR/LFPW/KWBC/NONE/HRM/LM/IFS/GLOBAL' />
   <param name='REPRES' values = 'BUFR/SPHERICAL HARMONICS/LAT LONG GRID/GAUSSIAN GRID/SPACE VIEW/OCEAN GRID/ALL' />
-  <param name='OBSGROUP' values = 'SAT/ERS1/TRMM/QSCAT/REO3/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/99/OFF' />
-  <param name='REPORTYPE' values = 'TIROS-N HIRS Radiances/NOAA 6 HIRS Radiances/NOAA 7 HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 12 HIRS Radiances/NOAA 14 HIRS Radiances/NOAA 15 HIRS Radiances/NOAA 16 HIRS Radiances/NOAA 17 HIRS Radiances/NOAA 18 HIRS Radiances/NOAA 19 HIRS Radiances/METOP-A HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 6 HIRS Radiances/NOA [...]
+  <param name='OBSGROUP' values = 'SAT/ERS1/TRMM/QSCAT/REO3/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/99/OFF' />
+  <param name='REPORTYPE' values = 'TIROS-N HIRS Radiances/NOAA 6 HIRS Radiances/NOAA 7 HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 12 HIRS Radiances/NOAA 14 HIRS Radiances/NOAA 15 HIRS Radiances/NOAA 16 HIRS Radiances/NOAA 17 HIRS Radiances/NOAA 18 HIRS Radiances/NOAA 19 HIRS Radiances/METOP-A HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 6 HIRS Radiances/NOA [...]
   <param name='RDBPREFIX' values = 'OFF' />
-  <param name='OBSTYPE' values = 'ALL/NON SATELLITE DATA ALL/SATELLITE DATA ALL/ALL/CONVENTIONAL/SD/GRIB IMAGES/FIRST INFRARED BAND/SECOND INFRARED BAND/FIRST VISIBLE BAND/WATER VAPOR BAND/BUFR/WAVESCAT/SCAT/RALT/TOVH/GRAD/ATOV/AIRS/STORM/IMSSNOW/AMSU_EARS/BALTIC_CI/WAVESAR/IASI/OSTIA/ENVISAT_MERIS/ATMS/CRIS/FBCONV/FBSCAT/FBSSMI/FBTMI/FBTOVS/FBRAD1C/FBGEOS/FBTRMR/FBREO3/FBAIRS/FBAMSRE/FBSSMIS/FBGPSRO/FBIASI/FBWINDSAT/LAND SURFACE DATA/SYNOP LAND/SYNOP RECORD 2 LAND/SYNOP AUTO LAND/SYNOP  [...]
+  <param name='OBSTYPE' values = 'ALL/NON SATELLITE DATA ALL/SATELLITE DATA ALL/ALL/CONVENTIONAL/SD/GRIB IMAGES/FIRST INFRARED BAND/SECOND INFRARED BAND/FIRST VISIBLE BAND/WATER VAPOR BAND/BUFR/WAVESCAT/SCAT/RALT/TOVH/GRAD/ATOV/AIRS/STORM/IMSSNOW/AMSU_EARS/BALTIC_CI/WAVESAR/IASI/OSTIA/ENVISAT_MERIS/ATMS/CRIS/SMOS/FBCONV/FBSCAT/FBSSMI/FBTMI/FBTOVS/FBRAD1C/FBGEOS/FBTRMR/FBREO3/FBAIRS/FBAMSRE/FBSSMIS/FBGPSRO/FBIASI/FBWINDSAT/LAND SURFACE DATA/SYNOP LAND/SYNOP RECORD 2 LAND/SYNOP AUTO LAND/S [...]
   <param name='LEVTYPE' values = 'POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/DEPTH/OCEAN WAVE/LAYER/CATEGORY/ALL' />
   <param name='LEVELIST' values = 'TO/BY/ALL/OFF' />
-  <param name='PARAM' values = 'ALL/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
+  <param name='PARAM' values = 'ALL/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
   <param name='YEAR' values = 'TO/BY/ALL' />
   <param name='DECADE' values = 'TO/BY/ALL' />
   <param name='MONTH' values = 'TO/BY/ALL' />
@@ -2181,13 +2588,13 @@
   <param name='TRANSFER' values = 'HANDLE/DATA/OFF' />
   <param name='FIELDSET' values = 'OFF' />
   <param name='CFSPATH' />
-  <param name='FORMAT' values = 'PACKED/UNPACKED/GRIB EDITION 1/GRIB EDITION 2' />
+  <param name='FORMAT' values = 'PACKED/UNPACKED/GRIB EDITION 1/GRIB EDITION 2/NETCDF' />
   <param name='DISP' values = 'NEW/OLD/REMOVE/OFF' />
   <param name='RESOL' values = 'ARCHIVED VALUE/AUTOMATIC RESOLUTION/REDUCED GAUSSIAN 128/REDUCED GAUSSIAN 160/REDUCED GAUSSIAN 200/OFF/319/213/106/63' />
   <param name='ACCURACY' values = 'NORMAL/REDUCED/LOW/OFF/ARCHIVED VALUE' />
   <param name='STYLE' values = 'DISSEMINATION/OFF' />
-  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/OFF' />
-  <param name='AREA' values = 'GLOBE/EUROPE/NORTHERN HEMISPHERE OCTANT 1/NORTHERN HEMISPHERE OCTANT 2/NORTHERN HEMISPHERE OCTANT 3/NORTHERN HEMISPHERE OCTANT 4/SOUTHERN HEMISPHERE OCTANT 1/SOUTHERN HEMISPHERE OCTANT 2/SOUTHERN HEMISPHERE OCTANT 3/SOUTHERN HEMISPHERE OCTANT 4/OFF' />
+  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/LINEAR/LINEAR FIT/CUBIC/AVERAGE WEIGHTED/AVERAGE/OFF' />
+  <param name='AREA' values = 'GLOBE/EUROPE/OFF' />
   <param name='LOCATION' values = 'OFF' />
   <param name='BLOCK' values = 'OFF' />
   <param name='INSTRUMENT' values = 'MHS/MVIRI/SEVIRI/GOES IMAGER/AMSU-A/AMSU-B/MSU/HIRS2/HIRS3/SSU/OFF' />
@@ -2213,7 +2620,7 @@
 </function>
 <function name='retrieve_tigge'>
   <param name='DATASET' />
-  <param name='CLASS' values = 'TIGGE' />
+  <param name='CLASS' values = 'TIGGE/S2S' />
   <param name='TYPE' values = 'CONTROL FORECAST/FORECAST/PERTURBED FORECAST/ALL' />
   <param name='STREAM' values = 'ENFO/DA' />
   <param name='EXPVER' values = 'PROD/TEST/ALL' />
@@ -2230,18 +2637,18 @@
   <param name='ANOFFSET' values = 'ALL/TO/BY/OFF' />
   <param name='NUMBER' values = 'ALL/OFF/TO/BY' />
   <param name='DOMAIN' values = 'GENERAL EUROPEAN AREA/GLOBE/MEDITERRANEAN/NORTHERN HEMISPHERE/SOUTHERN HEMISPHERE/BALTIC AND BLACK SEA/EUROPE/NORTH WEST EUROPE/NORTH EAST EUROPE/SOUTH WEST EUROPE/SOUTH EAST EUROPE/WESTERN ATLANTIC/FASTEX/TROPICS/TROPICS 2/X/ALL/V/H/I/J/K/L/O/P/Q/R/Y/Z' />
-  <param name='ORIGIN' values = 'KWBC/BABJ/ECMF/EGRR/RJTD/AMMC/CWAO/RKSL/SBSJ/LFPW/COSMOLEPS-ARPASIMC-EU/ALL' />
+  <param name='ORIGIN' values = 'KWBC/BABJ/ECMF/EGRR/RJTD/AMMC/CWAO/RKSL/SBSJ/LFPW/COSMOLEPS-ARPASIMC-EU/ALADINLAEF-ZAMG-EU/COSMODEEPS-DWD-EU/ALADINHUNEPS-OMSZ-EU/SRNWPPEPS-DWD-EUA/MOGREPS-MO-EUA/GLAMEPS-HIRLAMCONS-EU/SREPS-AEMET-EUA/HIRLAM-DMI-EU/AROMEEPS-MF-EU/ALL' />
   <param name='SOURCE' values = 'OFF' />
   <param name='TARGET' values = 'OFF' />
   <param name='TRANSFER' values = 'HANDLE/DATA/OFF' />
   <param name='FIELDSET' values = 'OFF' />
   <param name='CFSPATH' />
-  <param name='FORMAT' values = 'PACKED/UNPACKED/GRIB EDITION 1/GRIB EDITION 2' />
+  <param name='FORMAT' values = 'PACKED/UNPACKED/GRIB EDITION 1/GRIB EDITION 2/NETCDF' />
   <param name='DISP' values = 'NEW/OLD/REMOVE/OFF' />
   <param name='RESOL' values = 'ARCHIVED VALUE/AUTOMATIC RESOLUTION/REDUCED GAUSSIAN 128/REDUCED GAUSSIAN 200/OFF/319/213/106/63' />
   <param name='ACCURACY' values = 'NORMAL/REDUCED/LOW/ARCHIVED VALUE' />
   <param name='STYLE' values = 'DISSEMINATION/OFF' />
-  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/OFF' />
+  <param name='INTERPOLATION' values = 'NEAREST NEIGHBOUR/NEAREST LSM/BILINEAR/LINEAR/LINEAR FIT/CUBIC/AVERAGE WEIGHTED/AVERAGE/OFF' />
   <param name='AREA' values = 'GLOBE/EUROPE/NORTHERN HEMISPHERE OCTANT 1/NORTHERN HEMISPHERE OCTANT 2/NORTHERN HEMISPHERE OCTANT 3/NORTHERN HEMISPHERE OCTANT 4/SOUTHERN HEMISPHERE OCTANT 1/SOUTHERN HEMISPHERE OCTANT 2/SOUTHERN HEMISPHERE OCTANT 3/SOUTHERN HEMISPHERE OCTANT 4' />
   <param name='LOCATION' values = 'OFF' />
   <param name='BLOCK' values = 'OFF' />
@@ -2262,6 +2669,26 @@
   <param name='DATABASE' />
   <param name='EXPECT' values = 'ANY/OFF' />
 </function>
+<function name='rttov_run'>
+  <param name='RTTOV_EXE_PATH' />
+  <param name='RTTOV_INPUT_DATA' />
+  <param name='RTTOV_INPUT_DATA_PATH' />
+  <param name='RTTOV_SENSOR' values = 'AMSUA/IASI/CUSTOM' />
+  <param name='RTTOV_CHANNELS' />
+  <param name='RTTOV_CHANNELS_PATH' />
+  <param name='RTTOV_COEFFICIENTS' />
+  <param name='RTTOV_COEFFICIENTS_PATH' />
+  <param name='RTTOV_SATELLITE_ZENITH_ANGLE' />
+  <param name='RTTOV_SATELLITE_AZIMUTH_ANGLE' />
+  <param name='RTTOV_SOLAR_ZENITH_ANGLE' />
+  <param name='RTTOV_SOLAR_AZIMUTH_ANGLE' />
+</function>
+<function name='rttov_visualiser'>
+  <param name='RTTOV_PLOT_TYPE' values = 'CHANNEL_TB_GRAPH/JACOBIAN_CHANNEL_CURVE/JACOBIAN_MATRIX' />
+  <param name='RTTOV_DATA' />
+  <param name='RTTOV_FILENAME' values = 'OFF' />
+  <param name='RTTOV_JACOBIAN_CHANNEL' />
+</function>
 <function name='scm_run'>
   <param name='SCM_EXE_PATH' />
   <param name='SCM_INPUT_DATA' />
@@ -2426,18 +2853,45 @@
 </function>
 <function name='vert_prof'>
 </function>
-<function name='wcsclient'>
-  <param name='MODE' values = 'EXPERT/INTERACTIVE' />
-  <param name='SERVER' />
-  <param name='VERSION' />
-  <param name='REQUEST' />
-  <param name='EXTRA_GETCAP_PAR' />
-  <param name='EXTRA_GETMAP_PAR' />
-  <param name='HTTP_USER' />
-  <param name='HTTP_PASSWORD' />
-  <param name='LAYER_DESCRIPTION' />
-  <param name='SERVICE_TITLE' />
-  <param name='TIME_DIMENSIONS' />
+<function name='vertprofview'>
+  <param name='INPUT_MODE' values = 'POINT/NEAREST_GRIDPOINT/AREA/AREA_2' />
+  <param name='POINT' />
+  <param name='AREA' />
+  <param name='BOTTOM_PRESSURE' />
+  <param name='TOP_PRESSURE' />
+  <param name='PRESSURE_LEVEL_AXIS' values = 'LINEAR/LOG' />
+  <param name='PRESSURE_AXIS' />
+  <param name='VALUE_AXIS' />
+  <param name='OVERLAY_CONTROL' />
+  <param name='MATCH_DATE' values = 'YES/NO' />
+  <param name='MATCH_TIME' values = 'YES/NO' />
+  <param name='MATCH_LEVEL' values = 'YES/NO' />
+  <param name='MATCH_AREA' values = 'YES/NO' />
+  <param name='MATCH_VERTICAL_AXIS' values = 'YES/NO' />
+  <param name='SUBPAGE_X_POSITION' />
+  <param name='SUBPAGE_Y_POSITION' />
+  <param name='SUBPAGE_X_LENGTH' />
+  <param name='SUBPAGE_Y_LENGTH' />
+  <param name='PAGE_FRAME' values = 'ON/OFF' />
+  <param name='PAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
+  <param name='PAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='PAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='PAGE_ID_LINE' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_TYPE' values = 'BOTH/LOGO_ONLY/ID_LINE_ONLY' />
+  <param name='PAGE_ID_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
+  <param name='PAGE_ID_LINE_SYSTEM_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_DATE_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_USER_TEXT_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_USER_TEXT' />
+  <param name='PAGE_ID_LINE_ERRORS_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_LOGO_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_HEIGHT' />
+  <param name='PAGE_ID_LINE_QUALITY' values = 'LOW/MEDIUM/HIGH' />
+  <param name='SUBPAGE_FRAME' values = 'ON/OFF' />
+  <param name='SUBPAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
+  <param name='SUBPAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='SUBPAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='SUBPAGE_BACKGROUND_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
 </function>
 <function name='webaccess'>
   <param name='URL' />
@@ -2464,4 +2918,44 @@
 </function>
 <function name='xs_average'>
 </function>
+<function name='xsectview'>
+  <param name='LINE' />
+  <param name='BOTTOM_PRESSURE' />
+  <param name='TOP_PRESSURE' />
+  <param name='WIND_PARALLEL' values = 'ON/OFF' />
+  <param name='WIND_PERPENDICULAR' values = 'ON/OFF' />
+  <param name='WIND_INTENSITY' values = 'ON/OFF' />
+  <param name='WIND_HORIZONTAL_COMPONENT' values = 'PERPENDICULAR/PARALLEL/INTENSITY' />
+  <param name='PRESSURE_LEVEL_AXIS' values = 'LINEAR/LOG' />
+  <param name='OVERLAY_CONTROL' />
+  <param name='MATCH_DATE' values = 'YES/NO' />
+  <param name='MATCH_TIME' values = 'YES/NO' />
+  <param name='MATCH_LEVEL' values = 'YES/NO' />
+  <param name='MATCH_AREA' values = 'YES/NO' />
+  <param name='MATCH_VERTICAL_AXIS' values = 'YES/NO' />
+  <param name='SUBPAGE_X_POSITION' />
+  <param name='SUBPAGE_Y_POSITION' />
+  <param name='SUBPAGE_X_LENGTH' />
+  <param name='SUBPAGE_Y_LENGTH' />
+  <param name='PAGE_FRAME' values = 'ON/OFF' />
+  <param name='PAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
+  <param name='PAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='PAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='PAGE_ID_LINE' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_TYPE' values = 'BOTH/LOGO_ONLY/ID_LINE_ONLY' />
+  <param name='PAGE_ID_LINE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
+  <param name='PAGE_ID_LINE_SYSTEM_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_DATE_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_USER_TEXT_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_USER_TEXT' />
+  <param name='PAGE_ID_LINE_ERRORS_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_LOGO_PLOT' values = 'ON/OFF' />
+  <param name='PAGE_ID_LINE_HEIGHT' />
+  <param name='PAGE_ID_LINE_QUALITY' values = 'LOW/MEDIUM/HIGH' />
+  <param name='SUBPAGE_FRAME' values = 'ON/OFF' />
+  <param name='SUBPAGE_FRAME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
+  <param name='SUBPAGE_FRAME_LINE_STYLE' values = 'SOLID/DOT/DASH/CHAIN_DOT/CHAIN_DASH' />
+  <param name='SUBPAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
+  <param name='SUBPAGE_BACKGROUND_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
+</function>
 </macro_icon_functions>
diff --git a/share/metview/etc/mars.chk b/share/metview/etc/mars.chk
index 4a616bf..7a09ed9 100755
--- a/share/metview/etc/mars.chk
+++ b/share/metview/etc/mars.chk
@@ -368,6 +368,8 @@
 	STREAM = EWDA %or
 	STREAM = LWWV %or
 	STREAM = EWLA %or
+	STREAM = EWMM %or
+	STREAM = EWMO %or
 	STREAM = MSWM %then
 
 	%warning "For wave data, LEVTYPE forced to Surface"
@@ -514,6 +516,8 @@
 		  CLASS=MC %or 
 		  CLASS=EM %or 
 		  CLASS=E2 %or 
+		  CLASS=NR %or 
+		  CLASS=RM %or 
 		  CLASS=ME %or 
 		  CLASS=EN) 
 	%and (%not DATABASE) %then
@@ -524,7 +528,8 @@
 	 _VERB = STAGE %or 
 	 _VERB = LIST %or 
 	 _VERB = REMOVE)
-	%and (CLASS=TI)
+	%and (CLASS=TI %or
+	      CLASS=S2)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsth
 
@@ -553,7 +558,7 @@
 	 _VERB = FLUSH %or 
 	 _VERB = LIST %or 
 	 _VERB = REMOVE)
-	%and (CLASS=CO %or CLASS=SR %or CLASS=LA %or CLASS=MS %or CLASS=4M) 
+	%and (CLASS=CO %or CLASS=SR %or CLASS=LA %or CLASS=MS)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsms
 
@@ -573,7 +578,7 @@
 		  CLASS<>DT %and
 		  CLASS<>EN %and
 		  CLASS<>CO %and
-		  CLASS<>4M %and
+		  CLASS<>RM %and
 		  CLASS<>SR %and
 		  CLASS<>LA %and
 		  CLASS<>EL %and
@@ -582,6 +587,8 @@
 		  CLASS<>EM %and
 		  CLASS<>E2 %and
 		  CLASS<>MC %and
+		  CLASS<>NR %and
+		  CLASS<>RM %and
 		  CLASS<>CS)
 	%and (%not DATABASE) %then
 	%set DATABASE = marsrd
@@ -726,7 +733,7 @@
 # 	%unset STEP
 # 
 
-%if CLASS = TI %then                %unset DOMAIN
+%if CLASS = TI %or CLASS = S2 %then                %unset DOMAIN
 %if CLASS = TI %and TYPE = CF %then %set NUMBER=0
 %if CLASS = TI %and TYPE = FC %then %set STREAM=OPER
 %if CLASS = TI %and (%not EXPVER) %then %set EXPVER=PROD
diff --git a/share/metview/etc/obsgroups.def b/share/metview/etc/obsgroups.def
index ed709d5..ad3dde6 100755
--- a/share/metview/etc/obsgroups.def
+++ b/share/metview/etc/obsgroups.def
@@ -38,4 +38,9 @@
 39 ; WAVE spectra ; WAVE_SP
 40 ; RAINGG ; RAINGG
 41 ; SURFACE MULTISENSOR ; SFC_MS
+42 ; AMSR-2 All-sky ; AMSR2_AS
+43 ; SAPHIR All-sky ; SAPHIR_AS
+44 ; AMSUB All-sky ; AMSUB_AS
+45 ; MHS All-sky ; MHS_AS
+46 ; Doppler Wind Lidar ; DWL
 99 ; TEST ; TEST
diff --git a/share/metview/etc/reportypes.def b/share/metview/etc/reportypes.def
index 5034e82..29bafa3 100755
--- a/share/metview/etc/reportypes.def
+++ b/share/metview/etc/reportypes.def
@@ -111,6 +111,11 @@ NOAA 17 ATOVS ; 5053
 NOAA 18 ATOVS ; 5054
 NOAA 19 ATOVS ; 5055
 METOP-A ATOVS ; 5056
+METOP-B GOME-2 O3 ; 5057
+METEOSAT 10 SEVIRI O3 ; 5058
+NPP OMPS TCO ; 5059
+NPP OMPS Nadir Profile ; 5060
+METOP-B GOME-2 Layer integrated mass density ; 5061
 ENVISAT MERIS TCWV ; 6001
 METOP-A GPSRO ; 7001
 CHAMP GPSRO ; 7002
@@ -239,6 +244,7 @@ High Resolution Conductivity Temperature Depth CTD And XCTD ; 16061
 Undulating Oceanographic Recorder UOR ; 16062
 Autonomous Pinniped Bathythermograph APBT ; 16063
 Underwater Ocean Glider ; 16064
+Automatic METAR ; 16065
 SMOS ; 18001
 CORIOLIS WINDSAT All-sky ; 19001
 DMSP 8 SSMI ; 20001
@@ -259,6 +265,8 @@ METOP-B AMSUA Radiances All-sky ; 21009
 AQUA AMSRE Radiances ; 22001
 TRMM TMI Radiances ; 23001
 DMSP 16 SSMIS Radiances ; 24001
+DMSP 17 SSMIS Radiances ; 24002
+DMSP 18 SSMIS Radiances ; 24003
 Ground-Based Radar ; 25001
 FY-3A MWHS Radiances ; 26001
 FY-3B MWHS Radiances ; 26002
@@ -308,16 +316,19 @@ NOAA 3 VTPR2 Radiances ; 33002
 NOAA 4 VTPR2 Radiances ; 33003
 NOAA 5 VTPR2 Radiances ; 33004
 NPP ATMS Radiances ; 34001
-TERRA MOPITT Layer integrated mass density with Averaging Kernels and a priori profile ; 35001
-ERS-2 GOME Layer integrated mass density with Averaging Kernels ; 35002
-ENVISAT SCIAMACHY Layer integrated mass density with Averaging Kernels ; 35003
-METOP-A GOME-2 Layer integrated mass density with Averaging Kernels ; 35004
-METOP-A IASI Layer volumetric mixing ratio with Averaging Kernels and a priori profile ; 35005
-ENVISAT SCIAMACHY Layer volumetric mixing ratio with Averaging Kernels and a priori profile ; 35006
-METOP-A IASI Layer Integrated mass density with Averaging Kernels and a priori profile ; 35007
-AURA OMI Layer integrated mass density with Averaging Kernels ; 35008
-GOSAT TANSO-FTS Layer volumetric mixing ratio with Averaging Kernels and a priori profile ; 35009
-METOP-A GOME-2 Layer integrated mass density with Averaging Kernels and a priori profile ; 35010
+TERRA MOPITT layer integrated mass density with averaging kernels and a priori profile ; 35001
+ERS-2 GOME layer integrated mass density with averaging kernels ; 35002
+ENVISAT SCIAMACHY layer integrated mass density with averaging kernels ; 35003
+METOP-A GOME-2 layer integrated mass density with averaging kernels ; 35004
+METOP-A IASI layer volumetric mixing ratio with averaging kernels and a priori profile ; 35005
+ENVISAT SCIAMACHY layer volumetric mixing ratio with averaging kernels and a priori profile ; 35006
+METOP-A IASI layer integrated mass density with averaging kernels and a priori profile ; 35007
+AURA OMI layer integrated mass density with averaging kernels ; 35008
+GOSAT TANSO-FTS layer volumetric mixing ratio with averaging kernels and a priori profile ; 35009
+METOP-A GOME-2 layer integrated mass density with averaging kernels and a priori profile ; 35010
+METOP-B IASI layer integrated mass density with averaging kernels and a priori profile ; 35011
+METOP-B GOME-2 layer integrated mass density with averaging kernels ; 35012
+METOP-B GOME-2 layer integrated mass density with averaging kernels and a priori profile ; 35013
 NPP CRIS Radiances ; 36001
 ENVISAT RALT WAVE ; 37001
 JASON 1 RALT WAVE ; 37002
@@ -331,6 +342,17 @@ CRYOSAT 2 RALT WAVE ; 37006
 12h rain gauge accumulation ; 39004
 24h rain gauge accumulation ; 39005
 NESDIS IMS ; 40001
+GCOM-W1 AMSR-2 Radiances All-sky ; 41001
+SAPHIR All-sky ; 42001
+AMSUB NOAA 15 AMSUB Radiances All-sky ; 43001
+AMSUB NOAA 16 AMSUB Radiances All-sky ; 43002
+AMSUB NOAA 17 AMSUB Radiances All-sky ; 43003
+AMSUB NOAA 18 AMSUB Radiances All-sky ; 43004
+MHS NOAA 19 MHS Radiances All-sky ; 44001
+MHS METOP-A MHS Radiances All-sky ; 44002
+MHS NOAA 18 MHS Radiances All-sky ; 44003
+MHS METOP-B MHS Radiances All-sky ; 44004
+AEOLUS HLOS Wind Level 2B ; 45001
 TEST REPORTYPE 1 ; 98001
 TEST REPORTYPE 2 ; 98002
 TEST REPORTYPE 3 ; 98003
diff --git a/share/metview/etc/rt_by_obsgroup.chk b/share/metview/etc/rt_by_obsgroup.chk
index 03d9114..c28f8c6 100755
--- a/share/metview/etc/rt_by_obsgroup.chk
+++ b/share/metview/etc/rt_by_obsgroup.chk
@@ -14,7 +14,7 @@
 	%set REPORTYPE =  4002/4003/4004/4005/4006/4007/4008/4009/4010/4011/4012/4013/4014/4015/4016/4017
 
 %if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  RESAT ) %and %not REPORTYPE %then
-	%set REPORTYPE =  5001/5002/5003/5004/5005/5006/5007/5008/5009/5010/5011/5012/5013/5014/5015/5016/5017/5018/5019/5020/5021/5022/5023/5024/5025/5026/5027/5028/5029/5030/5031/5032/5033/5034/5035/5036/5037/5038/5039/5040/5041/5042/5043/5044/5045/5046/5047/5048/5049/5050/5051/5052/5053/5054/5055/5056
+	%set REPORTYPE =  5001/5002/5003/5004/5005/5006/5007/5008/5009/5010/5011/5012/5013/5014/5015/5016/5017/5018/5019/5020/5021/5022/5023/5024/5025/5026/5027/5028/5029/5030/5031/5032/5033/5034/5035/5036/5037/5038/5039/5040/5041/5042/5043/5044/5045/5046/5047/5048/5049/5050/5051/5052/5053/5054/5055/5056/5057/5058/5059/5060/5061
 
 %if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  MERIS ) %and %not REPORTYPE %then
 	%set REPORTYPE =  6001
@@ -47,7 +47,7 @@
 	%set REPORTYPE =  15001
 
 %if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  CONV ) %and %not REPORTYPE %then
-	%set REPORTYPE =  16001/16002/16003/16004/16005/16006/16007/16008/16009/16010/16011/16012/16013/16014/16015/16016/16017/16018/16019/16020/16021/16022/16023/16024/16025/16026/16027/16028/16029/16030/16031/16032/16037/16038/16039/16040/16041/16042/16043/16044/16045/16046/16047/16048/16049/16050/16051/16052/16053/16054/16055/16056/16057/16058/16059/16060/16061/16062/16063/16064
+	%set REPORTYPE =  16001/16002/16003/16004/16005/16006/16007/16008/16009/16010/16011/16012/16013/16014/16015/16016/16017/16018/16019/16020/16021/16022/16023/16024/16025/16026/16027/16028/16029/16030/16031/16032/16037/16038/16039/16040/16041/16042/16043/16044/16045/16046/16047/16048/16049/16050/16051/16052/16053/16054/16055/16056/16057/16058/16059/16060/16061/16062/16063/16064/16065
 
 %if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  SMOS ) %and %not REPORTYPE %then
 	%set REPORTYPE =  18001
@@ -68,7 +68,7 @@
 	%set REPORTYPE =  23001
 
 %if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  SSMIS ) %and %not REPORTYPE %then
-	%set REPORTYPE =  24001
+	%set REPORTYPE =  24001/24002/24003
 
 %if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  GBRAD ) %and %not REPORTYPE %then
 	%set REPORTYPE =  25001
@@ -101,7 +101,7 @@
 	%set REPORTYPE =  34001
 
 %if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  RESAT_AK ) %and %not REPORTYPE %then
-	%set REPORTYPE =  35001/35002/35003/35004/35005/35006/35007/35008/35009/35010
+	%set REPORTYPE =  35001/35002/35003/35004/35005/35006/35007/35008/35009/35010/35011/35012/35013
 
 %if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  CRIS ) %and %not REPORTYPE %then
 	%set REPORTYPE =  36001
@@ -115,6 +115,21 @@
 %if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  SFC_MS ) %and %not REPORTYPE %then
 	%set REPORTYPE =  40001
 
+%if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  AMSR2_AS ) %and %not REPORTYPE %then
+	%set REPORTYPE =  41001
+
+%if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  SAPHIR_AS ) %and %not REPORTYPE %then
+	%set REPORTYPE =  42001
+
+%if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  AMSUB_AS ) %and %not REPORTYPE %then
+	%set REPORTYPE =  43001/43002/43003/43004
+
+%if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  MHS_AS ) %and %not REPORTYPE %then
+	%set REPORTYPE =  44001/44002/44003/44004
+
+%if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  DWL ) %and %not REPORTYPE %then
+	%set REPORTYPE =  45001
+
 %if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP =  TEST ) %and %not REPORTYPE %then
 	%set REPORTYPE =  98001/98002/98003/98004/98005/98006/98007/98008/98009/98010
 
diff --git a/share/metview/etc/tigge.def b/share/metview/etc/tigge.def
index 3980ae1..7d45f6e 100755
--- a/share/metview/etc/tigge.def
+++ b/share/metview/etc/tigge.def
@@ -94,6 +94,7 @@ V VELOCITY                                         ;      V ;     132
     CLASS
     {
 		TIGGE       ;   TI
+		S2S         ;   S2
 
     } = TI
 
@@ -132,9 +133,36 @@ V VELOCITY                                         ;      V ;     132
 		LFPW
 
 	# TIGGE LAM
+	# old
+#		COSMOLEPS-ARPASIMC-EU
+#		MOGREPS-MO-EUA
+#		AEMET-SREPS-MM-EUAT
+#		SRNWP-PEPS
+#		NORLAMEPS
+#		ALADIN-LAEF
+#		COSMO-DE-EPS
+#		COSMO-SREPS-BO-EU
+#		GLAMEPS
+#		PEARCE
+#		DMI-HIRLAM
+#		OMSZ-ALADIN-EPS
+
+	# new
 		COSMOLEPS-ARPASIMC-EU
+		ALADINLAEF-ZAMG-EU
+		COSMODEEPS-DWD-EU
+		ALADINHUNEPS-OMSZ-EU
+		SRNWPPEPS-DWD-EUA
+		MOGREPS-MO-EUA
+		GLAMEPS-HIRLAMCONS-EU
+		SREPS-AEMET-EUA
+		HIRLAM-DMI-EU
+		AROMEEPS-MF-EU
+
 		/
 		ALL
+
+
 	}
 
     MODEL
@@ -593,6 +621,7 @@ LIST    ;   LIST FDF ENTRIES AND CFS FILES  ;   TIGGE
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
 		OFF         ;   OFF
     } = OFF
     
@@ -1401,6 +1430,7 @@ RETRIEVE    ;   Retrieval of data   ;   TIGGE
         UNPACKED    ;   U
         GRIB EDITION 1 ;   GRIB1
         GRIB EDITION 2 ;   GRIB2
+		NETCDF
     } = P
     
     DISP [ java_control = CHOICE,
@@ -1471,6 +1501,11 @@ RETRIEVE    ;   Retrieval of data   ;   TIGGE
 		NEAREST NEIGHBOUR
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
 		OFF
 	} = OFF
 
@@ -1862,6 +1897,11 @@ READ ; X; TIGGEMETVIEW
         NEAREST NEIGHBOUR  
         NEAREST LSM  
 		BILINEAR
+		LINEAR
+		LINEAR FIT
+		CUBIC
+		AVERAGE WEIGHTED
+		AVERAGE
         OFF   
 		ANY
     } = ANY
diff --git a/share/metview/etc/uPlotTable b/share/metview/etc/uPlotTable
index c1041c2..25e6244 100644
--- a/share/metview/etc/uPlotTable
+++ b/share/metview/etc/uPlotTable
@@ -332,31 +332,62 @@ request,
 #############################################
 
 view,
-	class       = MAPVIEW,
-	name        = MapView
+   class       = ANNOTATIONVIEW,
+   name        = AnnotationView
 
 view,
-    class       = GEOVIEW,
-    name        = MapView
+   class       = MAPVIEW,
+   name        = MapView
 
 view,
-	class       = CARTESIANVIEW,
-	name        = CartesianView
+   class       = GEOVIEW,
+   name        = GeoView
 
 view,
-    class       = MXSECTVIEW,
-    name        = XSectView,
-    service     = XSection
+   class       = CARTESIANVIEW,
+   name        = CartesianView
 
 view,
-    class       = MAVERAGEVIEW,
-    name        = AverageView,
-    service     = XSection
+   class       = MXSECTIONVIEW,
+   name        = XSectionView,
+   service     = XSection
 
 view,
-    class       = MVERTPROFVIEW,
-    name        = VertProfView,
-    service     = XSection
+   class       = MXAVERAGEVIEW,
+   name        = AverageView,
+   service     = XSection
+
+view,
+   class       = MVPROFILEVIEW,
+   name        = VProfileView,
+   service     = XSection
+
+view,
+   class       = MHOVMOELLERVIEW,
+   name        = HovmoellerView,
+   service     = Hovmoeller
+
+# Metview 3 Views for backawards compatibility
+# They should be deleted in the future
+view,
+   class       = XSECTVIEW,
+   name        = XSectM3View,
+   service     = XSection
+
+view,
+   class       = AVERAGEVIEW,
+   name        = AverageM3View,
+   service     = XSection
+
+view,
+   class       = VERTPROFVIEW,
+   name        = VertProfM3View,
+   service     = XSection
+
+view,
+   class       = HOVMOELLERVIEW,
+   name        = HovmoellerM3View,
+   service     = Hovmoeller
 
 #############################################
 #  Data unit list
@@ -387,17 +418,17 @@ dataunit,
 dataunit,
 	class		= NETCDF_GEO_VECTORS,
 	defaultVisDef   = MWIND,
-	listVisDef	= MWIND/MSYMB/MCONT/MGRAPH/PSYMB/PGRAPH/PCONT/PWIND
+	listVisDef	= MWIND/PWIND
 
 dataunit,
 	class		= NETCDF_GEO_MATRIX,
 	defaultVisDef   = MCONT,
-	listVisDef	= MSYMB/MCONT/MWIND/MGRAPH/PSYMB/PGRAPH/PCONT/PWIND
+	listVisDef	= MCONT/PCONT
 
 dataunit,
 	class		= NETCDF_XY_MATRIX,
 	defaultVisDef   = MCONT,
-	listVisDef	= MSYMB/MCONT/MWIND/MGRAPH/PSYMB/PGRAPH/PCONT/PWIND
+	listVisDef	= MCONT/PCONT
 
 dataunit,
      class          = NETCDF_XY_POINTS,
@@ -588,6 +619,9 @@ visdef,
 	class		= PAXIS
 
 visdef,
+	class		= MTEPHI
+
+visdef,
 	class		= PSYMB
 
 visdef,
@@ -776,36 +810,12 @@ graphics_engine,
 #	view		= ImportView
 #
 #request,
-#	class		= PM_VPROF,
-#	action 		= Drop,
-#	builder		= ApplicationBuilder,
-#	view		= VertProfView
-#
-#request,
-#	class		= PM_XSECT,
-#	action 		= Drop,
-#	builder		= ApplicationBuilder,
-#	view		= XSectView
-#
-#request,
-#	class		= PM_AVERAGE,
-#	action 		= Drop,
-#	builder		= ApplicationBuilder,
-#	view		= AverageView
-#
-#request,
 #	class		= TEPHIGRAM,
 #	action 		= Drop,
 #	builder		= ApplicationBuilder,
 #	view		= TephigramView
 #
 #request,
-#	class		= Hovmoeller,
-#	action 		= Drop,
-#	builder		= ApplicationBuilder,
-#	view		= HovmoellerView
-#
-#request,
 #	class		= DEVICE,
 #	action		= Device,
 #	builder		= Default,
@@ -1033,11 +1043,6 @@ visdef,
 #	class		= EMPTYVIEW,
 #	name		= EmptyView
 #
-#view,
-#	class		= HOVMOELLERVIEW,
-#	name		= HovmoellerView,
-#	service		= Hovmoeller
-#
 
 ############################################
 ##
diff --git a/share/metview/icons/ANNOTATIONVIEW.xpm b/share/metview/icons/ANNOTATIONVIEW.xpm
new file mode 100644
index 0000000..6414503
--- /dev/null
+++ b/share/metview/icons/ANNOTATIONVIEW.xpm
@@ -0,0 +1,90 @@
+/* XPM */
+static char * ANNOTATIONVIEW_xpm[] = {
+"32 32 55 1",
+" 	c None",
+".	c #333333",
+"+	c #FFFFFF",
+"@	c #7E7E7E",
+"#	c #E5E5E5",
+"$	c #2C92FA",
+"%	c #007FFF",
+"&	c #81B8F0",
+"*	c #2B92FA",
+"=	c #2690FA",
+"-	c #B3CFEA",
+";	c #2D93F9",
+">	c #2C93F9",
+",	c #B0CDEB",
+"'	c #57A5F5",
+")	c #8ABCEF",
+"!	c #88BBEF",
+"~	c #54A4F5",
+"{	c #D7DFE6",
+"]	c #0883FD",
+"^	c #0B84FD",
+"/	c #DAE0E6",
+"(	c #D9DFE6",
+"_	c #0A83FD",
+":	c #0882FE",
+"<	c #D6DEE6",
+"[	c #84BAEF",
+"}	c #5DA8F4",
+"|	c #5AA7F4",
+"1	c #83B9F0",
+"2	c #2991FA",
+"3	c #B8D1E9",
+"4	c #B7D0EA",
+"5	c #2891FA",
+"6	c #B2CEEA",
+"7	c #2F94F9",
+"8	c #B1CEEA",
+"9	c #56A5F5",
+"0	c #8CBDEF",
+"a	c #0C84FD",
+"b	c #DBE0E6",
+"c	c #84B9F0",
+"d	c #5FA9F4",
+"e	c #BAD2E9",
+"f	c #55A5F5",
+"g	c #0983FD",
+"h	c #D8DFE6",
+"i	c #5EA9F4",
+"j	c #58A6F4",
+"k	c #85BAEF",
+"l	c #2790FA",
+"m	c #B4CFEA",
+"n	c #B0CDEA",
+"o	c #3094F9",
+"p	c #2A91FA",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+@##########################@+.",
+".+@##########################@+.",
+".+@#####$%%%%%%%%&###########@+.",
+".+@#####*%%%%%%%%=###########@+.",
+".+@##########-%;>%,##########@+.",
+".+@##########'%)!%~##########@+.",
+".+@#########{]^/(_:<#########@+.",
+".+@#########[%}##|%1#########@+.",
+".+@#########2%3##4%5#########@+.",
+".+@########6%7####>%8########@+.",
+".+@########9%0####!%9########@+.",
+".+@#######{:ab####(_]{#######@+.",
+".+@#######c%d######|%c#######@+.",
+".+@#######5%e######4%2#######@+.",
+".+@######8%%%%%%%%%%%%6######@+.",
+".+@######f%%%%%%%%%%%%'######@+.",
+".+@#####<:ab########(g]h#####@+.",
+".+@#####1%i##########j%k#####@+.",
+".+@#####l%e##########m%*#####@+.",
+".+@####n%o############2%m####@+.",
+".+@####~%0############[%j####@+.",
+".+@#$%%%%%%$########p%%%%%%$#@+.",
+".+@#>%%%%%%>########*%%%%%%>#@+.",
+".+@##########################@+.",
+".+@##########################@+.",
+".+@##########################@+.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".++++++++++++++++++++++++++++++.",
+"................................"};
diff --git a/share/metview/icons/AVERAGE.xpm b/share/metview/icons/AVERAGE.xpm
new file mode 100755
index 0000000..008efd3
--- /dev/null
+++ b/share/metview/icons/AVERAGE.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static char * AVERAGE_xpm[] = {
+"32 32 8 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #BABABA",
+"@	c #E9E9FB",
+"#	c #EC92EB",
+"$	c #7F7F7F",
+"%	c #92BEEC",
+"&	c #E4D8C2",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+".........++++++++++++++.........",
+".....++++@@@@@@@@@@@@@@++++.....",
+"..+++@@@@@@@@@@@@@@@@@@@@@@+++..",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+"+@@@@@@@@@@#@@@@@@@@#@@@@@@@@@@+",
+"@@@@@@@@@++##++++++##++@@@@@@@@@",
+"@@@@@++++@@###@@@@###@@++++@@@@@",
+"@@#############@@#############+@",
+"@+@@@@@@@@@###@@@@###@@@@@@@@@+@",
+"+@@@@@@@@@@##@@@@@@##@@@@@@@@@@+",
+"@@@@@@@@@++#++++++++#++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@++++++++++++++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@$$$$$$$$$$$$$$@@@@@@@@@",
+"@@@@@$$$$%%%%%%&&&&&&&&$$$$$@@@@",
+"@@$$$%%%%%%%%%&&&&&&&&&&&&&$$$@@",
+"@$%%%%%%%%%%&&&&&&&&&&&&&&&&&&$@",
+"$%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&$"};
diff --git a/share/metview/icons/AVERAGEVIEW.xpm b/share/metview/icons/AVERAGEVIEW.xpm
new file mode 100755
index 0000000..a533ddc
--- /dev/null
+++ b/share/metview/icons/AVERAGEVIEW.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char * AVERAGEVIEW_xpm[] = {
+"32 32 10 1",
+" 	c None",
+".	c #989898",
+"+	c #FFFFFF",
+"@	c #BCBCBC",
+"#	c #BABABA",
+"$	c #E9E9FB",
+"%	c #EC92EB",
+"&	c #7F7F7F",
+"*	c #92BEEC",
+"=	c #E4D8C2",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++##############++++++ at +.",
+".+ at ++####$$$$$$$$$$$$$$####++ at +.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$%$$$$$$$$%$$$$$$$$@+.",
+".+@$$$$$$##%%######%%##$$$$$$@+.",
+".+@$$####$$%%%$$$$%%%$$####$$@+.",
+".+@%%%%%%%%%%%%$$%%%%%%%%%%%%@+.",
+".+@$$$$$$$$%%%$$$$%%%$$$$$$$$@+.",
+".+@$$$$$$$$%%$$$$$$%%$$$$$$$$@+.",
+".+@$$$$$$##%########%##$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$##############$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$&&&&&&&&&&&&&&$$$$$$@+.",
+".+@$$&&&&******========&&&&&$@+.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".++++++++++++++++++++++++++++++.",
+"................................"};
diff --git a/share/metview/icons/GRIB_TO_GEO.xpm b/share/metview/icons/GRIB_TO_GEO.xpm
index 456879f..296aa98 100644
--- a/share/metview/icons/GRIB_TO_GEO.xpm
+++ b/share/metview/icons/GRIB_TO_GEO.xpm
@@ -1,40 +1,175 @@
 /* XPM */
-static char *GRIB_TO_GEO[]={
-"32 32 5 1",
-"a c #0000ff",
-". c #303030",
-"# c #dcdcdc",
-"c c #ff0000",
-"b c #ffffc0",
-"................................",
-".####a####a####..bbbbbbbbbbbbbb.",
-".####a####a####..bbcbbbbbbcbbbb.",
-".####a####a####..bcccbbbbcccbbb.",
-".####aa####a###..bbcbbbbbbcbbbb.",
-".#####a#####aa#..bbbbbbbbbbbbbb.",
-".######a######a..bbbbbbbbbbbbbb.",
-".#######a######..bbbbbbbbbbbbbb.",
-".########aaa###..bbbbbbbbbbbbbb.",
-".a##########aaa..bbbbbbbbbbbbbb.",
-".#a#############bbbbcbbbbbbcbbb.",
-".##a###########b#bbcccbbbbcccbb.",
-".###a##########abbbbcbbbbbbcbbb.",
-".###a####aaa###baabbbbbbbbbbbbb.",
-".###a#####aaaaaaaaaabbbbbbbbbbb.",
-".###a######aaaaaaaaaaabbbbbbbbb.",
-".###a######aaaaaaaaaaabbbbbbbbb.",
-".###a#####aaaaaaaaaabbbbbbbbbbb.",
-".##a#####aaa###baabbbcbbbbbbcbb.",
-".##a###########abbbbcccbbbbcccb.",
-".##a###########b#bbbbcbbbbbbcbb.",
-".#a#############bbbbbbbbbbbbbbb.",
-".#a############..bbbbbbbbbbbbbb.",
-".a##########aaa..bbbbbbbbbbbbbb.",
-".#######aaaa###..bbbbbbbbbbbbbb.",
-".####aaa#######..bbbbbbbbbbbbbb.",
-".###a##########..bbbbbcbbbbbbcb.",
-".#aa#########aa..bbbbcccbbbbccc.",
-".a########aaa##..bbbbbcbbbbbbcb.",
-".#######aa#####..bbbbbbbbbbbbbb.",
-".######a#######..bbbbbbbbbbbbbb.",
-"................................"};
+static char *GRIB_TO_GEO[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 137 2",
+"   c #000000",
+".  c #161A23",
+"X  c #23272F",
+"o  c #37372C",
+"O  c #39392E",
+"+  c #2B2E33",
+"@  c #2F3134",
+"#  c #313335",
+"$  c #3D3D31",
+"%  c #35373A",
+"&  c #37393C",
+"*  c #424235",
+"=  c #3A3C40",
+"-  c #230D62",
+";  c #261063",
+":  c #271369",
+">  c #291468",
+",  c #2D1A6C",
+"<  c #2A1672",
+"1  c #2B1870",
+"2  c #251279",
+"3  c #28167C",
+"4  c #2A3D6E",
+"5  c #2E4171",
+"6  c #314474",
+"7  c #364977",
+"8  c #364978",
+"9  c #3A4D7A",
+"0  c #4A4C56",
+"q  c #50535E",
+"w  c #545661",
+"e  c #585B64",
+"r  c #5C5E68",
+"t  c #40527F",
+"y  c #5E6067",
+"u  c #5E6068",
+"i  c #F41215",
+"p  c #F41618",
+"a  c #F41A1B",
+"s  c #F42726",
+"d  c #F42927",
+"f  c #F42B29",
+"g  c #F43D35",
+"h  c #F44039",
+"j  c #F55347",
+"k  c #F56453",
+"l  c #F6725F",
+"z  c #F57965",
+"x  c #F5846D",
+"c  c #F68D74",
+"v  c #F69176",
+"b  c #F5977A",
+"n  c #F5997C",
+"m  c #1F1094",
+"M  c #261583",
+"N  c #22128D",
+"B  c #180BA8",
+"V  c #5E4F81",
+"C  c #435581",
+"Z  c #465883",
+"A  c #485A85",
+"S  c #4D5D88",
+"D  c #685B88",
+"F  c #665B9C",
+"G  c #53648D",
+"H  c #596991",
+"J  c #75698C",
+"K  c #6E639E",
+"L  c #607096",
+"P  c #657499",
+"I  c #68779C",
+"U  c #7168A0",
+"Y  c #6E7DA1",
+"T  c #717FA2",
+"R  c #0B03C6",
+"E  c #0201F6",
+"W  c #0000FD",
+"Q  c #817691",
+"!  c #847A93",
+"~  c #7583A5",
+"^  c #7986A8",
+"/  c #7C89AA",
+"(  c #8C8295",
+")  c #928898",
+"_  c #988F9A",
+"`  c #818EAE",
+"'  c #999EA7",
+"]  c #838FB0",
+"[  c #938FB6",
+"{  c #8591B0",
+"}  c #8A96B4",
+"|  c #8F9BB8",
+" . c #9894BA",
+".. c #919DBA",
+"X. c #95A0BC",
+"o. c #B6B1A5",
+"O. c #F6A283",
+"+. c #F6A888",
+"@. c #F7B18F",
+"#. c #F6BA96",
+"$. c #F6BE98",
+"%. c #C0BDAB",
+"&. c #C0C29B",
+"*. c #CBCCA3",
+"=. c #CAC6AF",
+"-. c #D2D0B4",
+";. c #F6CDA4",
+":. c #F6D9AE",
+">. c #E3E4B5",
+",. c #E6E7B8",
+"<. c #E7E8B9",
+"1. c #EAECBC",
+"2. c #F7E2B4",
+"3. c #F6EABA",
+"4. c #9BA5C0",
+"5. c #9DA8C2",
+"6. c #A2ACC6",
+"7. c #A5AFC8",
+"8. c #AAB4CC",
+"9. c #AEB8CF",
+"0. c #B3BBCD",
+"q. c #B2BBD2",
+"w. c #BDC3CE",
+"e. c #B8C1D6",
+"r. c #BBC4D9",
+"t. c #C4CBDC",
+"y. c #C9CEDC",
+"u. c #CBD0DE",
+"i. c #E9E9C0",
+"p. c #F6F6C3",
+"a. c #F6F8C5",
+"s. c #C6CDE0",
+"d. c #CDD4E5",
+"f. c #D0D6E6",
+"g. c #D1D7E8",
+"h. c #D4DAEA",
+"j. c #D8DEED",
+/* pixels */
+"0 r u u r u r e r y r u e w r 0 0 y y y y y y y y y y y y y y 0 ",
+"e j.j.j.j.j.h.5 f.j.j.` 7 9.f.  o a.a.a.a.a.a.a.a.a.a.a.a.a.a.u ",
+"e j.j.j.j.j.{ P j.h.H H d.j.d.  O a.a.n g @.a.a.a.a.a.a.a.a.a.u ",
+"e j.j.j.j.7.8 d.d.A T j.j.j.f.  O a.a.a i g a.a.a.a.a.a.a.a.a.u ",
+"e j.j.j...8 r.h.9 } h.j.j.j.t.  O a.a.l a v a.a.a.a.a.a.a.a.a.u ",
+"e 6.P 5 G s.j.Y ~ j.j.j.j.5.5   O a.a.a.p.a.a.a.a.a.;.j x a.a.u ",
+"w H 4.g.j.j.9.9 h.j.h.d.H S 0.  * a.a.a.p.a.a.a.a.a.k i i :.a.u ",
+"r j.j.j.j.h.9 q.j.j.d.t | h.u.  $ a.a.a.a.a.a.a.a.a.+.a h a.a.u ",
+"e j.j.j.j...P j.j.g.C | j.j.u.  * a.a.a.a.a.a.a.a.a.a.3.a.a.a.u ",
+"e j.j.j.j.9 r.j.j.Y ^ j.j.j.u.  * a.a.a.a.a.a.a.a.a.a.a.a.a.a.u ",
+"e j.j.j.5.H j.j.r.8 h.j.j.j.y.  * a.a.a.a.a.a.a.a.a.a.a.a.a.a.u ",
+"e j.j.j.A q.j.j.H 4.j.j.j.h.t.  * a.=.-.a.a.a.a.a.a.a.a.a.a.a.u ",
+"e j.j.q.Z j.j.r.8 j.j. .[  .h.' &.a.; , _ a.a.a.a.a.a.a.a.a.a.u ",
+"e j.j.P X.j.j./ ` j.j.- B : j.h.a.a.> E 3 ) a.a.a.a.a.2.;.a.a.u ",
+"e j.d.8 h.j.j.G q.j.j.: W - , , , , - W E M ( a.a.a.2.a p O.a.u ",
+"e j.T ^ j.j.j.5 h.j.j.: W W W W E W W W W E M ! a.a.;.i i x a.u ",
+"e } Z g.j.j.j.6 g.j.j.: W W W W W W W W W W m V p.a.a.O.x 3.a.r ",
+"q 9 d.j.j.j.j.H 5.j.j.: W 2 < < , 1 2 W W N D a.a.a.a.a.a.a.a.u ",
+"w g.j.j.j.j.j.4.I j.j.- R : d.d.i.1.> W M J a.a.a.a.a.a.a.a.a.u ",
+"e j.j.j.j.j.j.g.6 g.j.K F U j.w.*.a.- 3 Q a.a.a.a.a.a.a.a.a.a.u ",
+"e j.j.j.j.j.j.j.Y ] j.j.j.j.j.@   p.o.%.a.a.a.a.a.a.a.a.a.a.a.u ",
+"e j.j.j.j.h.j.j.t.8 ] j.j.j.j.#   1.a.p.3.a.a.a.a.a.a.a.a.a.a.u ",
+"e j.j.t.Z 4 9 4.j.d.G H d.j.j.#   1.3.s a #.a.a.a.a.a.a.a.a.a.u ",
+"e j.9.8 5.j.q.G Z 9.j.] 9 } 7.+   1.$.i i x a.a.a.a.a.a.a.a.a.u ",
+"e 8.8 9.j.j.j.j.8.9 L s.q./ P .   1.a.z k 2.a.a.a.a.a.a.a.a.a.u ",
+"w 6 e.j.j.h.r.s.j.j.{ 8 | j.j.%   1.a.a.a.a.a.a.a.a.a.v d b a.u ",
+"q 8.j.j.| 8 Z 9 9 | h.t.H S t.&   <.a.a.a.a.3.2.a.a.a.d i f a.u ",
+"e j.h.Y Z s.j.j.e.L 8 7.j...8 +   ,.a.a.a.2.a p $.a.a.v f b a.u ",
+"e j.A P h.j.j.j.j.j.r.6 r.j.r.X   ,.a.a.a.#.i i c a.a.a.a.a.a.r ",
+"e q.A j.j.j.j.j.j.j.j.8.7 g.j.=   >.a.a.a.p.x l 3.a.a.a.a.a.a.u ",
+"e / { j.j.j.j.j.j.j.j.j.^ ~ j.&   >.a.a.a.a.a.a.a.a.a.a.a.a.a.u ",
+"0 r r r r r r r r r r r r e r e e r y r u u y u y y u y u u u 0 "
+};
diff --git a/share/metview/icons/HOVMOELLERDATA.xpm b/share/metview/icons/HOVMOELLERDATA.xpm
index 5fd516b..7cd27fb 100755
--- a/share/metview/icons/HOVMOELLERDATA.xpm
+++ b/share/metview/icons/HOVMOELLERDATA.xpm
@@ -1,42 +1,43 @@
 /* XPM */
-static char *HOVMOELLERDATA[]={
-"32 32 7 1",
-"c c #000000",
-"d c #007fff",
-"a c #777777",
-"b c #ccccff",
-"e c #d9b777",
-"# c #ff00ff",
-". c #ffffff",
+static char * HOVMOELLERDATA_xpm[] = {
+"32 32 8 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #EC92EB",
+"@	c #BABABA",
+"#	c #E9E9FB",
+"$	c #7F7F7F",
+"%	c #92BEEC",
+"&	c #E4D8C2",
 "................................",
 "................................",
 "................................",
 "................................",
-".....###........................",
-"......###.......................",
-"........###.....................",
-".........###aaaaaaaaaaa.........",
-".....aaaabb###bbbbbbbbbaaaa.....",
-"..aaabbbbbbbb##bbbbbbbbbbbbaaa..",
-".abbbbbbbbbbbb##bbbbbbbbbbbbbba.",
-"abbbbbbbbbbbbbb##bbbbbbbbbbbbbba",
-"bbbbbbbbbaaaaaaa##aaaaabbbbbbbbb",
-"bbbbbaaaabbbbbbbb##bbbbaaaabbbbb",
-"bbaaabbbbbbbbbbbbb##bbbbbbbaaabb",
-"babbbbbbbbbbbbbbbbb##bbbbbbbbbab",
-"abbbbbbbbbbbbbbbbbbb##bbbbbbbbba",
-"bbbbbbbbbaaaaaaaaaaaa#abbbbbbbbb",
-"bbbbbaaaabbbbbbbbbbbb##aaaabbbbb",
-"bbaaabbbbbbbbbbbbbbbbb##bbbaaabb",
-"babbbbbbbbbbbbbbbbbbbbb##bb#bbab",
-"abbbbbbbbbbbbbbbbbbbbbb##b##bbba",
-"bbbbbbbbbaaaaaaaaaaaaaa#####bbbb",
-"bbbbbaaaabbbbbbbbbbbbbbb####bbbb",
-"bbaaabbbbbbbbbbbbbbbbbb#####aabb",
-"babbbbbbbbbbbbbbbbbbbb######bbab",
-"abbbbbbbbbbbbbbbbbbbb#######bbba",
-"bbbbbbbbbccccccccccccccbbbbbbbbb",
-"bbbbbccccddddddeeeeeeeecccccbbbb",
-"bbcccdddddddddeeeeeeeeeeeeecccbb",
-"bcddddddddddeeeeeeeeeeeeeeeeeecb",
-"cddddddddddeeeeeeeeeeeeeeeeeeeec"};
+".....+++........................",
+"......+++.......................",
+"........+++.....................",
+".........+++@@@@@@@@@@@.........",
+".....@@@@##+++#########@@@@.....",
+"..@@@########++############@@@..",
+".@############++##############@.",
+"@##############++##############@",
+"#########@@@@@@@++@@@@@#########",
+"#####@@@@########++####@@@@#####",
+"##@@@#############++#######@@@##",
+"#@#################++#########@#",
+"@###################++#########@",
+"#########@@@@@@@@@@@@+@#########",
+"#####@@@@############++@@@@#####",
+"##@@@#################++###@@@##",
+"#@#####################++##+##@#",
+"@######################++#++###@",
+"#########@@@@@@@@@@@@@@+++++####",
+"#####@@@@###############++++####",
+"##@@@##################+++++@@##",
+"#@####################++++++##@#",
+"@####################+++++++###@",
+"#########$$$$$$$$$$$$$$#########",
+"#####$$$$%%%%%%&&&&&&&&$$$$$####",
+"##$$$%%%%%%%%%&&&&&&&&&&&&&$$$##",
+"#$%%%%%%%%%%&&&&&&&&&&&&&&&&&&$#",
+"$%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&$"};
diff --git a/share/metview/icons/HOVMOELLERVIEW.xpm b/share/metview/icons/HOVMOELLERVIEW.xpm
new file mode 100755
index 0000000..894b943
--- /dev/null
+++ b/share/metview/icons/HOVMOELLERVIEW.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char * HOVMOELLERVIEW_xpm[] = {
+"32 32 10 1",
+" 	c None",
+".	c #989898",
+"+	c #FFFFFF",
+"@	c #BEBEBE",
+"#	c #EC92EB",
+"$	c #BABABA",
+"%	c #E9E9FB",
+"&	c #7F7F7F",
+"*	c #92BEEC",
+"=	c #E4D8C2",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+ at +####+++++++++++++++++++++ at +.",
+".+ at +++###++++++++++++++++++++ at +.",
+".+ at +++++###++++++++++++++++++ at +.",
+".+ at ++++++###@$$$$$$$$$$++++++ at +.",
+".+ at ++$$$$%%###%%%%%%%%%$$$$++ at +.",
+".+@$$%%%%%%%%##%%%%%%%%%%%%$$@+.",
+".+@%%%%%%%%%%%##%%%%%%%%%%%%%@+.",
+".+@%%%%%%%%%%%%##%%%%%%%%%%%%@+.",
+".+@%%%%%%$$$$$$$##$$$$$%%%%%%@+.",
+".+@%%$$$$%%%%%%%%##%%%%$$$$%%@+.",
+".+@$$%%%%%%%%%%%%%##%%%%%%%$$@+.",
+".+@%%%%%%%%%%%%%%%%##%%%%%%%%@+.",
+".+@%%%%%%%%%%%%%%%%%##%%%%%%%@+.",
+".+@%%%%%%$$$$$$$$$$$@#$%%%%%%@+.",
+".+@%%$$$$%%%%%%%%%%%%##$$$$%%@+.",
+".+@$$%%%%%%%%%%%%%%%%%##%%%$$@+.",
+".+@%%%%%%%%%%%%%%%%%%%%##%%#%@+.",
+".+@%%%%%%%%%%%%%%%%%%%%##%##%@+.",
+".+@%%%%%%$$$$$$$$$$$$$$#####%@+.",
+".+@%%$$$$%%%%%%%%%%%%%%%####%@+.",
+".+@$$%%%%%%%%%%%%%%%%%%#####$@+.",
+".+@%%%%%%%%%%%%%%%%%%%######%@+.",
+".+@%%%%%%%%%%%%%%%%%%#######%@+.",
+".+@%%%%%%&&&&&&&&&&&&&&%%%%%%@+.",
+".+@%%&&&&******========&&&&&%@+.",
+".+@&&*********=============&&@+.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".++++++++++++++++++++++++++++++.",
+"................................"};
diff --git a/share/metview/icons/Interpolation.xpm b/share/metview/icons/Interpolation.xpm
new file mode 100644
index 0000000..8812ad1
--- /dev/null
+++ b/share/metview/icons/Interpolation.xpm
@@ -0,0 +1,133 @@
+/* XPM */
+static char *Interpolation[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 95 2",
+"   c #FF74BF",
+".  c #FF7CC3",
+"X  c #7EA0C3",
+"o  c #CF81BF",
+"O  c #BE9DCA",
+"+  c #82A4C5",
+"@  c #8EACCB",
+"#  c #90AECB",
+"$  c #95B1CD",
+"%  c #9FB8D2",
+"&  c #BEA9CF",
+"*  c #A3BCD4",
+"=  c #A8BFD6",
+"-  c #BBB6D5",
+";  c #C788C1",
+":  c #CB8CC3",
+">  c #DE8CC6",
+",  c #C293C6",
+"<  c #C893C6",
+"1  c #C899C9",
+"2  c #DA97CB",
+"3  c #DC9CCD",
+"4  c #E08DC7",
+"5  c #FF83C6",
+"6  c #FF87C8",
+"7  c #FF8ECB",
+"8  c #EF99CE",
+"9  c #FF94CE",
+"0  c #F59ED1",
+"q  c #FE9DD2",
+"w  c #C2A4CD",
+"e  c #D7A2CF",
+"r  c #DCA1CF",
+"t  c #C0ABD0",
+"y  c #D7A4D0",
+"u  c #DCA6D2",
+"i  c #D4ADD4",
+"p  c #DDA8D3",
+"a  c #D4B3D7",
+"s  c #DAB2D7",
+"d  c #D7B5D8",
+"f  c #D3B9D9",
+"g  c #D8BEDC",
+"h  c #EDA5D4",
+"j  c #EDAED7",
+"k  c #FFA4D5",
+"l  c #F4ABD7",
+"z  c #FFA8D7",
+"x  c #FEABD8",
+"c  c #EBB2D9",
+"v  c #EABEDE",
+"b  c #F3B4DB",
+"n  c #FEB3DC",
+"m  c #FFB9DF",
+"M  c #FFBEE1",
+"N  c #ADC4DA",
+"B  c #B3C6DB",
+"V  c #B5C9DD",
+"C  c #BACCDF",
+"Z  c #BECFE0",
+"A  c #BDD1E1",
+"S  c #D0C5DE",
+"D  c #D3C8E0",
+"F  c #C4D4E3",
+"G  c #CBD7E6",
+"H  c #CBDAE7",
+"J  c #CFDCE9",
+"K  c #D0DCE9",
+"L  c #EBC4E1",
+"P  c #E9C9E4",
+"I  c #FFC2E3",
+"U  c #F2CBE5",
+"Y  c #FECBE7",
+"T  c #E8D7EA",
+"R  c #E9D8EA",
+"E  c #F2D0E7",
+"W  c #FED4EB",
+"Q  c #F1DFEE",
+"!  c #FFDAEE",
+"~  c #FFDFF0",
+"^  c #D3E0EB",
+"/  c #DAE4EE",
+"(  c #DFE7F0",
+")  c #E6EDF3",
+"_  c #E8EAF2",
+"`  c #FEE3F2",
+"'  c #FFEBF6",
+"]  c #E7F0F5",
+"[  c #EDF2F6",
+"{  c #EFF6F8",
+"}  c #F0F3F7",
+"|  c #F2F6F9",
+" . c #FDF4FA",
+".. c #F6F9FB",
+"X. c #FFFFFF",
+/* pixels */
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X./ ..X.X.X.| / X.X.X.X.) ) X.X.X.X./ | X.X.X.X.X.X.X.",
+"X.X.X.X.X...B } X.X.X.) B X.X.X.X.H J X.X.X.X.B ) X.X.X.X.X.X.X.",
+"X.X.X.X.X...B | X.X.X._ B X.X.X.X.H J X.X.X.X.V ) X.X.X.X.X.X.X.",
+"X.X.X.X.X...B { ! ` X.) B X.~ ! X.H J X.' Y X.V ) X.' Y X.X.X.X.",
+"X...F N N N X = , O N % X B O , B @ @ N & ; N X G X.` z X.X.X.X.",
+"X.X.) ) ) ( * / c v ] J * ] v c ) B Z ] P h ] * / X.` x X.X.X.X.",
+"X.X.X.X.X...B } M Y X._ B X.Y M X.G K X.! n X.B _ X.~ k X.X.X.X.",
+"X.X.X.X.I 0 o 0 . 5 k 8 o z 5 . k > 4 k 7   k o 8 k 7 . ' X.X.X.",
+"X.X.X.X. .` - Q n m ' T - ' M x ' S D ' I k ' - R ' Y q X.X.X.X.",
+"X.X.X.X.X...V { I Y X.) B X.Y I X.H J X.! n X.B ) X.` x X.X.X.X.",
+"X.X.X.X.X...B | I Y X.) B X.Y I X.H K X.! n X.B ) X.` z X.X.X.X.",
+"X.X./ J K H $ F p s ^ A $ ^ s u ^ = N K g 3 ^ $ K X.` x X.X.X.X.",
+"X.X./ G H G @ A y i H B # H a e H * = H f 2 H # J X.` x X.X.X.X.",
+"X.X.X.X.X...V { I Y X.) B X.Y I X.H J X.! n X.B ) X.` x X.X.X.X.",
+"X.X.X.X.' W & E k x ! P t ! x k ! f f ! m 9 ! & P ! I 9  .X.X.X.",
+"X.X.X.X.W x : l 6 7 n h : n 9 6 n 2 3 n q . n : h n q . ' X.X.X.",
+"X.X.X.X.X.| V { I Y X.) B X.Y I X.H J X.! n X.V ) X.` x X.X.X.X.",
+"X.X.X.X.X...B | I Y X.) B X.Y I X.H K X.! n X.V ) X.` x X.X.X.X.",
+"X.X.H B V N + N 1 w C = + V w 1 B $ $ V t < V + G X.` z X.X.X.X.",
+"X.X.[ _ ) ( * ^ c v ) J * ] v c ) C Z ) P h ] * / X.` x X.X.X.X.",
+"X.X.X.X.X...V { I Y X.) B X.Y M X.H J X.! n X.B ) X.` x X.X.X.X.",
+"X.X.X.X.` Y & U k k W L w W x q W a d W n 9 W w L W M 7  .X.X.X.",
+"X.X.X.X.W m < b 9 9 M j < M q 7 M 3 r M q 5 M < j M k 5 ' X.X.X.",
+"X.X.X.X.X...V { I Y X._ V X.Y I X.H J X.! n X.V ) X.` x X.X.X.X.",
+"X.X.X.X.X...A | I Y X.) F X.Y M X.^ ^ X.! n X.F [ X.` z X.X.X.X.",
+"X.X.X.X.X.X...X.I Y X.X...X.Y I X...X.X.! n X...X.X.` z X.X.X.X.",
+"X.X.X.X.X.X.X.X.I Y X.X.X.X.Y M X.X.X.X.! n X.X.X.X.` x X.X.X.X.",
+"X.X.X.X.X.X.X.X.I Y X.X.X.X.W I X.X.X.X.! n X.X.X.X.` x X.X.X.X.",
+"X.X.X.X.X.X.X.X.' ' X.X.X.X.' ' X.X.X.X. .` X.X.X.X. .` X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X."
+};
diff --git a/share/metview/icons/MCOAST.xpm b/share/metview/icons/MCOAST.xpm
index f9bf008..ade634e 100644
--- a/share/metview/icons/MCOAST.xpm
+++ b/share/metview/icons/MCOAST.xpm
@@ -1,49 +1,217 @@
 /* XPM */
-static char * PCOAST_icon[] = {
-/* width height ncolors chars_per_pixel */
-"32 32 11 1",
-/* colors */
-" 	c white",
-".	c #FFFFB0B00000",
-"X	c #FFFFCC",
-"o	c blue",
-"O	c #25250000FFFF",
-"+	c black",
-"@	c #FFFF0000DADA",
-"#	c yellow",
-"$	c #D9D9B7B77777",
-"%	c #FFFFE2E2ABAB",
-"&	c #E0E06C6C0000",
+static char *MCOAST[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 179 2",
+"   c #0D0B06",
+".  c #0D0C09",
+"X  c #14120C",
+"o  c #1D1A09",
+"O  c #1B1912",
+"+  c #282513",
+"@  c #2B2817",
+"#  c #28261D",
+"$  c #302A15",
+"%  c #36331B",
+"&  c #38341C",
+"*  c #2D2927",
+"=  c #312C21",
+"-  c #353127",
+";  c #3C3523",
+":  c #36322C",
+">  c #3F3C2F",
+",  c #2E2A35",
+"<  c #383534",
+"1  c #403824",
+"2  c #413D31",
+"3  c #494714",
+"4  c #585510",
+"5  c #5B5810",
+"6  c #6C690B",
+"7  c #7B770F",
+"8  c #6B6810",
+"9  c #747010",
+"0  c #53472F",
+"q  c #4C4A33",
+"w  c #46443D",
+"e  c #4D4839",
+"r  c #5A4D31",
+"t  c #514B3B",
+"y  c #545138",
+"u  c #605433",
+"i  c #353346",
+"p  c #2C2750",
+"a  c #221D79",
+"s  c #332D69",
+"d  c #5D5442",
+"f  c #5E5D46",
+"g  c #5E5448",
+"h  c #4B4752",
+"j  c #4D4A5D",
+"k  c #5A5753",
+"l  c #605845",
+"z  c #685E48",
+"x  c #666445",
+"c  c #6E6D4C",
+"v  c #74684D",
+"b  c #7D6C4B",
+"n  c #72705A",
+"m  c #78775B",
+"M  c #7B795A",
+"N  c #8D7A45",
+"B  c #87734D",
+"V  c #907D43",
+"C  c #817252",
+"Z  c #82755B",
+"A  c #927C56",
+"S  c #A5A20B",
+"D  c #B5B108",
+"F  c #98813C",
+"G  c #A1902A",
+"H  c #FDB003",
+"J  c #FBB10B",
+"K  c #F0AF1C",
+"L  c #F9B311",
+"P  c #F5B41E",
+"I  c #F4B521",
+"U  c #D6CF16",
+"Y  c #D2CF19",
+"T  c #EEEA16",
+"R  c #EAE61B",
+"E  c #EBE818",
+"W  c #F1EC13",
+"Q  c #FCC02F",
+"!  c #FFC435",
+"~  c #938141",
+"^  c #9B855B",
+"/  c #89876C",
+"(  c #928468",
+")  c #959475",
+"_  c #9B9A77",
+"`  c #999879",
+"'  c #BA9F6C",
+"]  c #A59270",
+"[  c #C5AB46",
+"{  c #C4A66C",
+"}  c #C7AB76",
+"|  c #D5B371",
+" . c #D8B676",
+".. c #D8B779",
+"X. c #DCBA79",
+"o. c #FBCA4A",
+"O. c #FFD45D",
+"+. c #FFDF7A",
+"@. c #1A129B",
+"#. c #221B9D",
+"$. c #2C2597",
+"%. c #27209F",
+"&. c #2B249F",
+"*. c #2D25A0",
+"=. c #312AA0",
+"-. c #3730A1",
+";. c #3932A2",
+":. c #3F38A3",
+">. c #423BA3",
+",. c #4E4989",
+"<. c #4640A5",
+"1. c #4943A5",
+"2. c #4E48A7",
+"3. c #544EA8",
+"4. c #5651A8",
+"5. c #5B55A9",
+"6. c #5F59AA",
+"7. c #615CAA",
+"8. c #6661AB",
+"9. c #6A64AC",
+"0. c #6E69AD",
+"q. c #736FAF",
+"w. c #7D78A5",
+"e. c #7671AE",
+"r. c #7A75AF",
+"t. c #7A75B0",
+"y. c #7D79B0",
+"u. c #827EB1",
+"i. c #B8B791",
+"p. c #BBBB95",
+"a. c #8783B2",
+"s. c #8985B3",
+"d. c #8D89B3",
+"f. c #918EB4",
+"g. c #9591B5",
+"h. c #9996B6",
+"j. c #9C99B7",
+"k. c #9D9AB8",
+"l. c #A19EB8",
+"z. c #A5A2B9",
+"x. c #A9A6BA",
+"c. c #ACAABA",
+"v. c #B1AEBB",
+"b. c #B9B7BD",
+"n. c #BDBBBE",
+"m. c #C1AA82",
+"M. c #D2B683",
+"N. c #D6B883",
+"B. c #DDBD81",
+"V. c #CDBA9B",
+"C. c #D1BC96",
+"Z. c #C0BDBF",
+"A. c #C3C39B",
+"S. c #E0C28A",
+"D. c #E7CB97",
+"F. c #E8CB95",
+"G. c #CAC9A1",
+"H. c #DEDEB2",
+"J. c #EDD2A2",
+"K. c #F1DCA4",
+"L. c #F1D7A8",
+"P. c #F4DBAB",
+"I. c #F9DEAB",
+"U. c #E3E3B6",
+"Y. c #F3E0B1",
+"T. c #C5C3C0",
+"R. c #C8C6C0",
+"E. c #CDCCC1",
+"W. c #D0CEC2",
+"Q. c #D4D3C3",
+"!. c #DCDAC4",
+"~. c #E3E2C6",
+"^. c #EBEAC8",
+"/. c #F0EFC8",
+"(. c #F4F3C5",
+"). c #F8F8C6",
+"_. c #F3F3C9",
+"`. c #FEFECB",
+"'. c #FFFFFF",
 /* pixels */
-"    ............................",
-"   ..XXXXXXXoXOOOOXXXXXXXXXXXXX.",
-"  ...XXXXXXoXOXXOXXXXXXXXXXXXXX.",
-" ....XXXXXXoXOXOXXXXXXXXXXXXXXX.",
-".....XXXXXXXOOXOOOOOXXXXXXXXXXX.",
-".XXXXXXXXXXXOXXXXXOXXXXXXXXXXXX.",
-".XXXXXXXXXXXOXXXXOXXXXXXXXXXXXX.",
-".XXXXXXXXXXXXOXXXOXXXXXXXXXXXXX.",
-".XXXXXXXXXXXXOOXOXXXXXXXXXX+++X.",
-".XXXXXXXXXXXXOOXOOOXXXXXXX+@@+X.",
-".XXXXXXXXXOXXXOXXXXOXXXXX+#+ at +X.",
-".XXXXXXXOOXOOXXOXXXOXXXX+#$++XX.",
-".XXXXXXOXXXXOXXOOOXXOXX+#$++XXX.",
-".XXXXOOOXXXXOXXXXOX++++#$++XXXX.",
-".XXXOXXXXXXOXXXXXX+%$+#$++XXXXX.",
-".XXXOXXXXXXOXXXXX+%$+#$++XXXXXX.",
-".XXXXOXXXXXOXXXX+%$+#$++$+XXXXX.",
-".XXXXXOXXXXOXXX+%$+#$++$$%+XXXX.",
-".XXXXOOXXXXOXX+%$+#$+++$%%%+XXX.",
-".XXOOOXXXXOOXX+$+#$++X+&%%%%+++.",
-".XXOXXXOOOXXXXX+#+++++X%%%%%$++.",
-".XXXOOOXXXXXXX+#+X%%%%%%%%%%$++.",
-".XXXXXXXXXXXXX+$+++$$$%%%%%%$++.",
-".XXXXXXXXXXXX+++XXX+++$$$$%%$++.",
-".XXXXXXXXXXXX+XXXOOOOO++++$$$++.",
-".XXXXXXXXXXXOXOOOXXXXXXXXO+++++.",
-".XXXXXXXXXXXOOXXXXXXXXXXXOXXX++.",
-".XXXXXXXXXXXXXXXXXXXXXXXOXXXXXX.",
-".XXXXXXXXXXXXXXXXXOOXXXOXXXXXXX.",
-".XXXXXXXXXXXXXXXXXOXOOOXXXXXXXX.",
-".XXXXXXXXXXXXXXXXXXOXXXXXXXXXXX.",
-"................................"};
+"'.'.'.Y.J L L L L L L L L L L L L L L L L L L L L L L L L L L J ",
+"'.'.P.H o.`.`.`.`.`.`.`.`.d.=.*.>.`.`.`.`.`.`.`.`.`.`.`.`.`.`.L ",
+"'.P.H H O.`.`.`.`.`.`.`.E.=.!.k.3.`.`.`.`.`.`.`.`.`.`.`.`.`.`.L ",
+"K.H H H O.`.`.`.`.`.`.`.x.0.`.1.s.j.f.c.`.`.`.`.`.`.`.`.`.`.`.L ",
+"J Q ! ! +.`.`.`.`.`.`.`.8.f.`.8.<.t.7.5.`.`.`.`.`.`.`.`.`.`.`.L ",
+"P `.`.`.`.`.`.`.`.`.`._.#._.`.`.`.`.v.7.`.`.`.`.`.`.`.`.`.`.`.L ",
+"P `.`.`.`.`.`.`.`.`.`._.#.^.`.`.`.`.g.y.`.`.`.`.`.`.`.`.`.`.`.L ",
+"P `.`.`.`.`.`.`.`.`.`.`.g.>.`.`.`.E.*.E.`.`.`.`.`.`.`.`.`.`.`.L ",
+"P `.`.`.`.`.`.`.`.`.`.`.`. at .`.`.`.2.z.`.`.`.`.`.`.`.).`.`.`.`.L ",
+"P `.`.`.`.`.`.`.`.`.`.`.`.*.1._.Z. at .#.G.`.`.`.`.`.c + i.`.`.`.L ",
+"P `.`.`.`.`.`.`.`.`.`.`.`.W.;.`.T.R.h.4.`.`.`.`.x 8 Y ; H.`.`.L ",
+"I `.`.`.`.`._.e.5.3.k._.`.d.y.^.Z.`.).1.h.`.`.l 9 R N r ` `.`.L ",
+"P `.`.`.`.`.T.:.b.n.6.5.`.g.>.%.6.`.`.b.a w.y 7 R N u m `.`.`.L ",
+"I `.`.`.k.e.;.u.`.`.`.:.v.`.t.x.>.`.n d Z . 6 E N u M `.`.`.`.L ",
+"P `.`.). at .j.E.`.`.`.!.=.v.`.`._.$.w ] B.b 5 E ~ r h /.`.`.`.`.L ",
+"I `.`.Q.;.`.`.`.`.`.6.f.`.`.`.U.: m. .^ 4 T V 1 : 0.*.Z.`.`.`.L ",
+"I `.`.^.=.W.`.`.`.`.>.Q.`.`.H.2 M.| B 5 T V 1 z ( / v.1.`.`.`.L ",
+"I `.`.`.j.9.`.`.`.`.;.!.`.H.> N.| 0 7 T F 2 b F.P.l i.*.~.`.`.L ",
+"I `.`.`.d.a.`.`.`.`.8.c.`.m } { ; S W ~ u f ' J.P.L.e s W.`.`.L ",
+"I `.`.E.=.c.`.`.`.`.f.r.`.) t @ D W F r i 2 M.P.P.I.P.g k ) ` L ",
+"I `.`.t.e.`.`.W.h.9.#.h.`.(.% D 3 = * * f C.L.P.P.I.I.I.2   X L ",
+"I `.`.!.*.l.6.-.r.x.^.`.`._ G U ; V.M.B.B.S.D.L.I.I.I.I.l . X L ",
+"I `.`.`.d.e.j.).`.`.`.`.`.& V [ ; - e e v | | | F.P.I.I.d   X L ",
+"I `.`.`.`.`.`.`.`.`.`.`.A.o $ q p.`.`.`.U.f Z ..| | X.X.A   X L ",
+"I `.`.`.`.`.`.`.`.`.`.`.j p H.`.^.e.f.v.9.#.,.< ^  .| | ^   X L ",
+"I `.`.`.`.`.`.`.`.`.`.f.&.u.d.!.q.7.y.6.j._.`.`.p., t C #   X L ",
+"I `.`.`.`.`.`.`.`.`.d. at .@.7.y.=.;._.`.`.`.`.`.`.v.:./.U.V.X O L ",
+"I `.`.`.`.`.`.`.`.`.n.x.~.`.`.`.^.`.`.`.`.`.`.^.*.W.`.`.`.`.`.L ",
+"I `.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.e.8.z.T.Q.3.a.`.`.`.`.`.`.L ",
+"I `.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.=.f.9.2.>.9.`.`.`.`.`.`.`.L ",
+"I `.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.8.k.`.`.`.`.`.`.`.`.`.`.`.L ",
+"J I P P P P P I P P P P P P P P P P K K P P P P P P P P P P K J "
+};
diff --git a/share/metview/icons/MCONT.xpm b/share/metview/icons/MCONT.xpm
index 41cf9f8..2c7d6eb 100644
--- a/share/metview/icons/MCONT.xpm
+++ b/share/metview/icons/MCONT.xpm
@@ -1,49 +1,201 @@
 /* XPM */
-static char * PCONT_icon[] = {
-/* width height ncolors chars_per_pixel */
-"32 32 11 1",
-/* colors */
-" 	c white",
-".	c #777777777777",
-"X	c #DDDDDD",
-"o	c #25250000FFFF",
-"O	c black",
-"+	c #FFFF0000DADA",
-"@	c yellow",
-"#	c #D9D9B7B77777",
-"$	c #FFFFE2E2ABAB",
-"%	c #FFFF4F4F0000",
-"&	c #FFFFCC",
+static char *MCONT[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 163 2",
+"   c #0D0B06",
+".  c #121007",
+"X  c #13120D",
+"o  c #221F0E",
+"O  c #282615",
+"+  c #24221D",
+"@  c #2A251A",
+"#  c #322F1C",
+"$  c #1E182C",
+"%  c #26222D",
+"&  c #2A242E",
+"*  c #312E23",
+"=  c #363121",
+"-  c #3C3423",
+";  c #39332A",
+":  c #332F33",
+">  c #3E3930",
+",  c #423D33",
+"<  c #403C3C",
+"1  c #424014",
+"2  c #66620F",
+"3  c #69650E",
+"4  c #76730C",
+"5  c #726C11",
+"6  c #4C422B",
+"7  c #5B512E",
+"8  c #464334",
+"9  c #43413C",
+"0  c #4B493A",
+"q  c #544532",
+"w  c #584C32",
+"e  c #52493B",
+"r  c #5D5034",
+"t  c #1D0F54",
+"y  c #2B1E5E",
+"u  c #3B3255",
+"i  c #2E1E64",
+"p  c #484542",
+"a  c #4F4D49",
+"s  c #56534F",
+"d  c #5A5854",
+"f  c #5C5A5B",
+"g  c #615645",
+"h  c #736242",
+"j  c #73664E",
+"k  c #7B6A4B",
+"l  c #796D57",
+"z  c #776C5B",
+"x  c #686662",
+"c  c #737167",
+"v  c #74736D",
+"b  c #797775",
+"n  c #7C7A74",
+"m  c #837F12",
+"M  c #847133",
+"N  c #8B7747",
+"B  c #8C7A45",
+"V  c #89754B",
+"C  c #907D41",
+"Z  c #83755B",
+"A  c #8B7C5E",
+"S  c #8A7C63",
+"D  c #99950A",
+"F  c #8B8711",
+"G  c #B6B109",
+"H  c #9E8C30",
+"J  c #DBD813",
+"K  c #EEE916",
+"L  c #E9E51B",
+"P  c #EBE818",
+"I  c #E2D722",
+"U  c #968058",
+"Y  c #BEA544",
+"T  c #A58F64",
+"R  c #B39966",
+"E  c #B69D6D",
+"W  c #A79572",
+"Q  c #A99775",
+"!  c #B09D79",
+"~  c #BCA06A",
+"^  c #CAAD78",
+"/  c #D0AF70",
+"(  c #CFB177",
+")  c #D6B370",
+"_  c #D8B574",
+"`  c #DBBA7C",
+"'  c #321F87",
+"]  c #361BAF",
+"[  c #5B47BD",
+"{  c #310ED2",
+"}  c #3413D2",
+"|  c #3817D2",
+" . c #3718D3",
+".. c #3B1CD2",
+"X. c #3E21D3",
+"o. c #4225D3",
+"O. c #4729D4",
+"+. c #492CD3",
+"@. c #4D32D3",
+"#. c #5135D4",
+"$. c #553BD4",
+"%. c #583ED4",
+"&. c #5B42D4",
+"*. c #5F48D5",
+"=. c #6047D5",
+"-. c #624AD5",
+";. c #6750D5",
+":. c #6B54D6",
+">. c #6E59D6",
+",. c #715CD6",
+"<. c #7662D6",
+"1. c #7A66D6",
+"2. c #7B68D7",
+"3. c #816FD7",
+"4. c #8A79D7",
+"5. c #8473D8",
+"6. c #8A7AD8",
+"7. c #858382",
+"8. c #898987",
+"9. c #929191",
+"0. c #9C9B9B",
+"q. c #AD9D83",
+"w. c #9693A7",
+"e. c #9895A6",
+"r. c #9D9CA5",
+"t. c #938BB6",
+"y. c #A2A2A2",
+"u. c #A9A9A9",
+"i. c #CDB386",
+"p. c #D4B784",
+"a. c #D6B984",
+"s. c #DCC69F",
+"d. c #E2C48C",
+"f. c #EACF9C",
+"g. c #EDD2A0",
+"h. c #F1D4A0",
+"j. c #F0D7AC",
+"k. c #F5DBAC",
+"l. c #F9DEAA",
+"z. c #988FC7",
+"x. c #8F80D8",
+"c. c #9485D8",
+"v. c #9688D9",
+"b. c #9A8DD9",
+"n. c #9E91D9",
+"m. c #A195D9",
+"M. c #A59AD9",
+"N. c #ABA2DA",
+"B. c #B1A8DA",
+"V. c #BAB3DB",
+"C. c #BEB8DB",
+"Z. c #C2BCDB",
+"A. c #C6C6C6",
+"S. c #C8C8C7",
+"D. c #CDCDCD",
+"F. c #C4C0DA",
+"G. c #C9C5DC",
+"H. c #CCC9DC",
+"J. c #D1CEDC",
+"K. c #D4D4D4",
+"L. c #D4D3DC",
+"P. c #DCDCDC",
+"I. c #FFFFFF",
 /* pixels */
-"    ............................",
-"   ..XXXXXXXXXXXXXXXXXXXXXXXXXX.",
-"  ...XXXXXXXXXXXXXXXXXXXXXXXXXX.",
-" ....XXXXXXXXXXXXXXXXXXXXXXXXXX.",
-".....XXXXXXoooooooXXXXXXXXXXXXX.",
-".XXXXXXXXooXXXXXXXooooooXXXOOOX.",
-".XXXXXXooXXXXXXXXXXXXXXXooO++OX.",
-".XXXXooXXXXXXXXXXXXXXXXXXO at O+OX.",
-".XXooXXXXXXXXXXXXXXXXXXXO@#OOXX.",
-".XoXXXXXXXXXXXXXXXXXXXXO@#OOoXX.",
-".oXXXXXXXXXXXXXXXXXOOOO@#OOXXoX.",
-".XXXXXXXXXXXXXXXXXO$#O@#OOXXXoX.",
-".XXXXXXXXXXXXXXXXO$#O@#OOXXXXoX.",
-".XXXXXXXXXXXXXXXO$#O@#OO#OXXXoX.",
-".XXXXXXXXooooXXO$#O@#OO##$OXXXo.",
-".XXXXXoooXXXXXO$#O@#OOO#$$$OXXo.",
-".XXXooXXXXXXXXO#O@#OOXO%$$$$OOOO",
-".XXooXXXXXXXXXXO at OOOOO&$$$$$#OOO",
-".XoXXXXXXXXXXXO at O&$$$$$$$$$$#OOO",
-".oXXXXXXXXXXXXO#OOO###$$$$$$#OOO",
-".XXXXXooooXXXOOOXXXOOO####$$#OOO",
-".XXXooXXXXooOOXXXXXXoXOOOO###OOO",
-".XXoXXXXXXXXXoXXXXXXoXXXXXOOOOOO",
-".XoXXXXXXXXXXoXXXXXXXoXXXXXXXOOO",
-".oXXXXXXXXXXXoXXXXXXXoXXXXXXXXo.",
-".oXXXXXXXXXXXXoXXXXXXoXXXXXXXXo.",
-".oXXXXXXXXXXXXoXXXXXoXXXXXXXXoX.",
-".oXXXXXXXXXXXoXXXXXXoXXXXXXXXoX.",
-".oXXXXXXXXXXXoXXXXXXoXXXXXXXXoX.",
-".oXXXXXXXXXXXoXXXXXoXXXXXXXXoXX.",
-".XoXXXXXXXXXoXXXXXXoXXXXXXXXoXX.",
-"................................"};
+"I.I.I.P.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.",
+"I.I.K.y.u.K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.y.",
+"I.K.y.u.y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.y.",
+"K.y.u.0.y.P.P.P.P.P.P.P.P.P.P.P.H.L.P.P.P.P.P.P.P.P.P.P.P.P.P.y.",
+"y.u.y.y.y.P.P.P.P.P.P.M.5.;.+.{ ..| | &.<.b.L.P.P.P.P.P.P.P.P.y.",
+"y.P.K.P.K.P.P.P.G.5.| $.5.m.C.P.P.P.H.N.6.-.| 2.J.P.S.P.P.P.P.y.",
+"y.P.P.P.P.P.B.*. .<.Z.P.P.P.P.P.P.P.P.P.P.P.H.<...p o c P.P.P.y.",
+"y.P.P.P.L.,...c.L.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.< 5 L 7 0.P.P.y.",
+"y.P.P.N...>.L.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.0 m L N r n P.P.y.",
+"y.K.<...N.P.P.P.P.P.P.P.P.P.P.P.P.P.P.0.8.u.8 F L N w i P.P.P.y.",
+"y.%.&.J.P.P.P.P.P.P.P.P.P.P.P.P.P.P.d l W X 4 L N r v $.b.P.P.y.",
+"r.2.P.P.P.P.P.P.P.P.P.P.P.P.P.P.D.< ! ` V 3 L B w v P.B.o.P.P.y.",
+"y.P.P.P.P.P.P.P.P.V.,.$.o.X.#.[ : i._ U 2 P B - + K.P.P.#.B.P.y.",
+"y.P.P.P.P.P.P.M.$...5.N.Z.F.t.: a.) h 3 K C - j i.a P.P.1.4.P.y.",
+"y.P.P.P.P.V.o.#.n.P.P.P.P.S.> a./ 6 D K B 6 k d.j.S v P.m.-.P.y.",
+"y.P.P.P.6.| m.P.P.P.P.P.P.b E E = G K B q f T f.k.k.Z f Z.X.P.y.",
+"y.P.L.$.$.G.P.P.P.P.P.P.P.u.s X G J M r u & p.k.k.k.l.Q 9 t f y.",
+"y.P.*.>.P.P.P.P.P.P.P.P.P.K.# J 1 , ; , z s.j.j.k.k.l.l.Z     y.",
+"y.2.%.P.P.P.P.L.b.>.o.}  .' H I @ q.p.` ` ` d.g.k.k.l.l.A     y.",
+"r.o.J.P.P.L.5. .=.c.Z.H.H.* M Y - 9 p p 9 ~ ) ) d.h.l.l.A     0.",
+"e.N.P.P.L.#.;.Z.P.P.P.P.C.. O p ] L.P.P.P.7.e ^ ) ) _ ) ~     y.",
+"y.P.P.L.$.1.P.P.P.P.P.P.9.9.K.P.-.n.P.P.P.P.D.y g ( _ ) R     y.",
+"y.P.P.%.<.P.P.P.P.P.P.P.P.P.P.P.v.:.P.P.P.P.P.&.z.x > 0 ;     y.",
+"y.P.V.o.P.P.P.P.P.P.P.P.P.P.P.P.B.$.P.P.P.P.P.:.n.P.P.P.A.$ % y.",
+"y.P.2.3.P.P.P.P.P.P.P.P.P.P.P.P.M.*.P.P.P.P.P.&.M.P.P.P.P.O.V.y.",
+"y.P. .Z.P.P.P.P.P.P.P.P.P.P.P.P.6.,.P.P.P.P.P.{ H.P.P.P.L.} P.y.",
+"y.H.} P.P.P.P.P.P.P.P.P.P.P.P.P.+.N.P.P.P.P.B. at .P.P.P.P.M.$.P.y.",
+"y.P.{ L.P.P.P.P.P.P.P.P.P.P.P.V...P.P.P.P.P.&.5.P.P.P.P. at .m.P.y.",
+"y.P.+.V.P.P.P.P.P.P.P.P.P.P.L.o.b.P.P.P.P.x. at .P.P.P.P.M.+.P.P.y.",
+"y.P.-.b.P.P.P.P.P.P.P.P.P.P.*.<.P.P.P.P.V.| F.P.P.P.P.#.n.P.P.y.",
+"y.P.v.-.P.P.P.P.P.P.P.P.P.;.&.P.P.P.P.F...m.P.P.P.P.N.O.P.P.P.y.",
+"y.y.y.r.y.y.y.u.y.y.y.y.r.w.y.y.y.y.y.r.r.y.y.y.y.y.r.r.y.y.y.y."
+};
diff --git a/share/metview/icons/MGRAPH.xpm b/share/metview/icons/MGRAPH.xpm
index d822515..e26f4cf 100644
--- a/share/metview/icons/MGRAPH.xpm
+++ b/share/metview/icons/MGRAPH.xpm
@@ -1,500 +1,201 @@
 /* XPM */
-static char * MGRAPH_xpm[] = {
-"32 32 465 2",
-"  	c None",
-". 	c #FFFFFF",
-"+ 	c #7F00FF",
-"@ 	c #8CC2FE",
-"# 	c #88BEFA",
-"$ 	c #86BCF8",
-"% 	c #91C5FF",
-"& 	c #8FC3FD",
-"* 	c #92C5FE",
-"= 	c #99CAFF",
-"- 	c #9FCCFF",
-"; 	c #9FCAFF",
-"> 	c #A0C9FD",
-", 	c #A1CCFF",
-"' 	c #9BC9FD",
-") 	c #95C4F8",
-"! 	c #94C3F9",
-"~ 	c #99CBFF",
-"{ 	c #9CCDFF",
-"] 	c #96C7FF",
-"^ 	c #97C8FF",
-"/ 	c #A4D3FF",
-"( 	c #9ECDFF",
-"_ 	c #000000",
-": 	c #FF00DA",
-"< 	c #CCCCFF",
-"[ 	c #8DC3FF",
-"} 	c #89BFFD",
-"| 	c #8CC0FC",
-"1 	c #90C4FE",
-"2 	c #93C6FF",
-"3 	c #93C4FC",
-"4 	c #98C5FC",
-"5 	c #9DCBFF",
-"6 	c #A0CBFE",
-"7 	c #9EC9FC",
-"8 	c #96C5F9",
-"9 	c #93C2F8",
-"0 	c #95C7FC",
-"a 	c #9ACBFF",
-"b 	c #98CBFF",
-"c 	c #95C8FF",
-"d 	c #94C7FE",
-"e 	c #9DCFFF",
-"f 	c #FFFF00",
-"g 	c #8AC0FF",
-"h 	c #87BDFB",
-"i 	c #93C7FF",
-"j 	c #8EC1F8",
-"k 	c #9CCAFE",
-"l 	c #A0CEFF",
-"m 	c #9BC9FB",
-"n 	c #97C6FA",
-"o 	c #90C2F7",
-"p 	c #92C4F9",
-"q 	c #96C9FF",
-"r 	c #92C5FC",
-"s 	c #D9B777",
-"t 	c #8CC3FF",
-"u 	c #89C0FF",
-"v 	c #87BEFE",
-"w 	c #84BCF9",
-"x 	c #8EC4FF",
-"y 	c #9BCAFE",
-"z 	c #9DCBFD",
-"A 	c #99C8FC",
-"B 	c #91C3F8",
-"C 	c #8FC1F6",
-"D 	c #94C9FF",
-"E 	c #87BAFC",
-"F 	c #86B9FB",
-"G 	c #85BAFC",
-"H 	c #88BFFF",
-"I 	c #8BC2FF",
-"J 	c #8AC1FF",
-"K 	c #87BEFF",
-"L 	c #83BAFA",
-"M 	c #8AC2FF",
-"N 	c #8FC6FF",
-"O 	c #90C4FD",
-"P 	c #90C3FA",
-"Q 	c #96C8FD",
-"R 	c #9CCBFF",
-"S 	c #9DCCFF",
-"T 	c #99CBFE",
-"U 	c #93C5FA",
-"V 	c #88BAFF",
-"W 	c #84B6FB",
-"X 	c #82B7FB",
-"Y 	c #88C1FF",
-"Z 	c #86C0FF",
-"` 	c #7FB9F9",
-" .	c #84BBFB",
-"..	c #8AC2FD",
-"+.	c #90C7FF",
-"@.	c #91C6FC",
-"#.	c #90C3F8",
-"$.	c #93C6FB",
-"%.	c #9BCDFF",
-"&.	c #9ACCFF",
-"*.	c #FFE2AB",
-"=.	c #89BBFF",
-"-.	c #81B6FA",
-";.	c #87C0FF",
-">.	c #86BFFF",
-",.	c #7EB7FA",
-"'.	c #7EB8F8",
-").	c #87BFFC",
-"!.	c #90C8FF",
-"~.	c #8BBFF8",
-"{.	c #8EC3F9",
-"].	c #99CCFF",
-"^.	c #91C3FF",
-"/.	c #86BBFF",
-"(.	c #7DB2F6",
-"_.	c #85BEFF",
-":.	c #81BCFF",
-"<.	c #82BDFF",
-"[.	c #78B3F5",
-"}.	c #79B3F3",
-"|.	c #93CBFF",
-"1.	c #90C6FF",
-"2.	c #8BC2FB",
-"3.	c #8DC1FA",
-"4.	c #92C4FF",
-"5.	c #8ABFFF",
-"6.	c #80B7FA",
-"7.	c #80B9FE",
-"8.	c #7FBAFF",
-"9.	c #84BFFF",
-"0.	c #7CB7FB",
-"a.	c #FF00FF",
-"b.	c #82BBFE",
-"c.	c #8BC5FF",
-"d.	c #92C5FF",
-"e.	c #8FC4FF",
-"f.	c #85BCFF",
-"g.	c #7AB3F8",
-"h.	c #7BB6FC",
-"i.	c #7BB7FF",
-"j.	c #83BFFF",
-"k.	c #77B3F9",
-"l.	c #8BC4FF",
-"m.	c #90C3FF",
-"n.	c #91C7FF",
-"o.	c #77B2F6",
-"p.	c #79B8FF",
-"q.	c #7EBCFF",
-"r.	c #76B2FB",
-"s.	c #79B3FC",
-"t.	c #88C2FF",
-"u.	c #FF4F00",
-"v.	c #8DC1FD",
-"w.	c #8FC5FF",
-"x.	c #78B3F7",
-"y.	c #78B6FF",
-"z.	c #78B7FF",
-"A.	c #72B0FD",
-"B.	c #6BA9F6",
-"C.	c #87C2FF",
-"D.	c #FFFFCC",
-"E.	c #8AC1FA",
-"F.	c #8BC1FD",
-"G.	c #89C4FF",
-"H.	c #7BB8FB",
-"I.	c #73B2FF",
-"J.	c #75B4FF",
-"K.	c #73B0FF",
-"L.	c #6EABFB",
-"M.	c #70AAFC",
-"N.	c #8BC2FA",
-"O.	c #88C3FF",
-"P.	c #7FBCFD",
-"Q.	c #76B2FA",
-"R.	c #72B1FE",
-"S.	c #6EABFE",
-"T.	c #8FC3FC",
-"U.	c #86BDF6",
-"V.	c #82BFFF",
-"W.	c #6BABF3",
-"X.	c #71B3FF",
-"Y.	c #75B6FF",
-"Z.	c #6DABFE",
-"`.	c #63A1F6",
-" +	c #7BB4FF",
-".+	c #EBEBFF",
-"++	c #94C7FF",
-"@+	c #8BBFF9",
-"#+	c #86BCFA",
-"$+	c #79BAFE",
-"%+	c #63A6ED",
-"&+	c #6AAEF9",
-"*+	c #6BAEFC",
-"=+	c #6EB3FF",
-"-+	c #72B6FF",
-";+	c #70B2FF",
-">+	c #6BADFF",
-",+	c #6FB0FF",
-"'+	c #74B5FF",
-")+	c #77B5FF",
-"!+	c #79B7FF",
-"~+	c #7AB8FF",
-"{+	c #97CAFF",
-"]+	c #90C2FD",
-"^+	c #85BBF7",
-"/+	c #7EBFFF",
-"(+	c #6BAEF4",
-"_+	c #67ABF4",
-":+	c #66ABF6",
-"<+	c #6AAFFD",
-"[+	c #6DB4FF",
-"}+	c #6EB2FF",
-"|+	c #69ADFF",
-"1+	c #67A9FF",
-"2+	c #6FB3FF",
-"3+	c #74B3FF",
-"4+	c #76B4FF",
-"5+	c #77B2FF",
-"6+	c #78B1FE",
-"7+	c #72ABFA",
-"8+	c #6FAAFA",
-"9+	c #9ACDFF",
-"0+	c #96C8FF",
-"a+	c #87C4FF",
-"b+	c #85C4FF",
-"c+	c #76B9FF",
-"d+	c #66AAF3",
-"e+	c #63A8F3",
-"f+	c #66ABF9",
-"g+	c #6DB1FF",
-"h+	c #6CAEFF",
-"i+	c #66A6FD",
-"j+	c #62A4FA",
-"k+	c #6CB0FF",
-"l+	c #70B3FF",
-"m+	c #74B2FF",
-"n+	c #76B1FF",
-"o+	c #75B0FE",
-"p+	c #73AEFE",
-"q+	c #6EABFC",
-"r+	c #6AA8FB",
-"s+	c #87C3FF",
-"t+	c #87C7FF",
-"u+	c #7FC0FF",
-"v+	c #6BAEF5",
-"w+	c #67AAF8",
-"x+	c #6FB2FF",
-"y+	c #75B8FF",
-"z+	c #69AAFE",
-"A+	c #63A4F8",
-"B+	c #6AACFF",
-"C+	c #72B4FF",
-"D+	c #75B2FF",
-"E+	c #74B1FF",
-"F+	c #70AFFE",
-"G+	c #6BACFC",
-"H+	c #67A9FD",
-"I+	c #66A8FC",
-"J+	c #65A9FE",
-"K+	c #91C4FD",
-"L+	c #87C1FF",
-"M+	c #82C2FF",
-"N+	c #72B3F7",
-"O+	c #69ACF2",
-"P+	c #68AAF4",
-"Q+	c #70B2FE",
-"R+	c #77B8FF",
-"S+	c #6EACFF",
-"T+	c #66A7FB",
-"U+	c #76B5FF",
-"V+	c #76B3FF",
-"W+	c #6EAFFF",
-"X+	c #6BAEFD",
-"Y+	c #68ABFC",
-"Z+	c #65A9FC",
-"`+	c #8CBDF7",
-" @	c #95C7FF",
-".@	c #96CAFF",
-"+@	c #89C1FE",
-"@@	c #85C1FF",
-"#@	c #85C2FF",
-"$@	c #78B7FA",
-"%@	c #6FB0F4",
-"&@	c #70B0FA",
-"*@	c #71B0FF",
-"=@	c #6CADFF",
-"-@	c #65A7FB",
-";@	c #69ABFF",
-">@	c #6EB0FF",
-",@	c #73B4FF",
-"'@	c #6FAEFD",
-")@	c #6CAFFD",
-"!@	c #67ACFA",
-"~@	c #88B9F1",
-"{@	c #8FC2FB",
-"]@	c #9ACEFF",
-"^@	c #8AC2FB",
-"/@	c #87BFFA",
-"(@	c #8AC5FF",
-"_@	c #82BEFD",
-":@	c #78B5F6",
-"<@	c #72AEF4",
-"[@	c #72B1F8",
-"}@	c #78B5FF",
-"|@	c #66A8FE",
-"1@	c #63A5F9",
-"2@	c #72B3FF",
-"3@	c #6FB1FF",
-"4@	c #6DAFFB",
-"5@	c #74B6FF",
-"6@	c #76B8FF",
-"7@	c #73B7FF",
-"8@	c #6FB3FE",
-"9@	c #87B8F0",
-"0@	c #8BBEF5",
-"a@	c #9DD0FF",
-"b@	c #8CC3FB",
-"c@	c #88BFF8",
-"d@	c #8FC7FF",
-"e@	c #7FBBFA",
-"f@	c #78B3F9",
-"g@	c #7BB5FE",
-"h@	c #7CB7FF",
-"i@	c #61A2F4",
-"j@	c #63A4F6",
-"k@	c #6DAEFF",
-"l@	c #77B9FF",
-"m@	c #75B7FF",
-"n@	c #6AACF8",
-"o@	c #6EB0FC",
-"p@	c #78BAFF",
-"q@	c #71B5FC",
-"r@	c #6CAFF6",
-"s@	c #8CBFF6",
-"t@	c #8DC0F7",
-"u@	c #94C7FC",
-"v@	c #9ED3FF",
-"w@	c #96CBFF",
-"x@	c #7FB6F6",
-"y@	c #79B2F5",
-"z@	c #7BB4FB",
-"A@	c #7EB8FF",
-"B@	c #81BAFF",
-"C@	c #7BBAFF",
-"D@	c #65A4F4",
-"E@	c #62A3F3",
-"F@	c #6FB1FD",
-"G@	c #7ABDFF",
-"H@	c #7DC0FF",
-"I@	c #78B9FD",
-"J@	c #8EC1F6",
-"K@	c #83C2FF",
-"L@	c #7EBDFF",
-"M@	c #91C4FB",
-"N@	c #95C7FA",
-"O@	c #A1D3FF",
-"P@	c #9FD1FF",
-"Q@	c #9BCDFE",
-"R@	c #93C6FD",
-"S@	c #8CBEF9",
-"T@	c #86B9F8",
-"U@	c #83B8FA",
-"V@	c #87BDFF",
-"W@	c #86BEFF",
-"X@	c #8FC9FF",
-"Y@	c #78B4FC",
-"Z@	c #6EAAF2",
-"`@	c #6BA9F2",
-" #	c #71B1F9",
-".#	c #7CBCFF",
-"+#	c #84C4FF",
-"@#	c #7EBEFF",
-"##	c #76B6FD",
-"$#	c #73B3FA",
-"%#	c #84C1FF",
-"&#	c #86C1FF",
-"*#	c #95C8FD",
-"=#	c #94C6FB",
-"-#	c #96C8FB",
-";#	c #A2D2FF",
-">#	c #A5D5FF",
-",#	c #9FCFFF",
-"'#	c #98CAFD",
-")#	c #91C2FC",
-"!#	c #8BBDF8",
-"~#	c #88BBFC",
-"{#	c #86BBFD",
-"]#	c #88BDFF",
-"^#	c #89BFFF",
-"/#	c #94CBFF",
-"(#	c #8DC6FF",
-"_#	c #84BDFF",
-":#	c #70ACF2",
-"<#	c #71B0F5",
-"[#	c #83C4FF",
-"}#	c #86C5FF",
-"|#	c #7AB9FE",
-"1#	c #74B3F8",
-"2#	c #89C3FF",
-"3#	c #97C9FE",
-"4#	c #97C9FA",
-"5#	c #9CCCFC",
-"6#	c #A3D2FF",
-"7#	c #A8D7FF",
-"8#	c #ABDAFF",
-"9#	c #A3D1FF",
-"0#	c #9FCDFF",
-"a#	c #98C7FF",
-"b#	c #90C1FB",
-"c#	c #8ABCFB",
-"d#	c #89BEFF",
-"e#	c #92C8FF",
-"f#	c #8EC6FF",
-"g#	c #83BDFC",
-"h#	c #78B4F3",
-"i#	c #74B1F2",
-"j#	c #79B6F9",
-"k#	c #8BC8FF",
-"l#	c #7AB7FA",
-"m#	c #7CB7F9",
-"n#	c #81BBFB",
-"o#	c #8BC1FF",
-"p#	c #9BCEFF",
-"q#	c #9BCBFC",
-"r#	c #9DCBFC",
-"s#	c #A1D0FC",
-"t#	c #A9D5FF",
-"u#	c #AFDBFF",
-"v#	c #A8D4FF",
-"w#	c #A5D1FF",
-"x#	c #9ECBFF",
-"y#	c #96C4FF",
-"z#	c #8DBDFB",
-"A#	c #8ABBFD",
-"B#	c #8ABCFF",
-"C#	c #8CBFFF",
-"D#	c #81BCF8",
-"E#	c #79B5F4",
-"F#	c #7AB7F8",
-"G#	c #88C5FF",
-"H#	c #83BEFF",
-"I#	c #7DB7F7",
-"J#	c #8EC1FF",
-"K#	c #9ED1FF",
-"L#	c #9ED0FF",
-"M#	c #9DCDFD",
-"N#	c #9CCBF9",
-"O#	c #A1CDFA",
-"P#	c #A9D4FF",
-"Q#	c #AFDAFF",
-"R#	c #ADD8FF",
-"S#	c #AAD6FF",
-"T#	c #9AC9FF",
-"U#	c #90C1FC",
-"V#	c #8CBEFD",
-"W#	c #95C9FB",
-"X#	c #99CEFF",
-"Y#	c #7FBAF6",
-"Z#	c #7AB6F4",
-"`#	c #7AB6F5",
-" $	c #8DC8FF",
-".$	c #81B8F9",
-"+$	c #7EB4F4",
-"@$	c #8ABDFC",
-"#$	c #93C5FF",
-". . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
-". . . + + @ # $ % & * = - ; > , ' ) ! ~ { = ] ^ / ( _ : : _ < + ",
-". . + + + [ } $ | 1 2 3 4 5 6 7 5 8 9 0 a b c d e _ f _ : _ < + ",
-". + + + + [ g h h % i j 9 k l m ( n o p q b c r _ f s _ _ < < + ",
-"+ + + + + t u v w x i j o y l z ( A B C r D D _ f s _ _ < < < + ",
-"+ E F G H I J K L M N O P Q R S S T U _ _ _ _ f s _ _ < < < < + ",
-"+ V W X + u Y Z `  ...+. at .#.$.%.&.%._ *.s _ f s _ _ < < < < < + ",
-"+ =.-.+ + + ;.>.,.'.).!.+.~.{.].b _ *.s _ f s _ _ < < < < < < + ",
-"+ ^./.(.+ _.;.:.<.[.}.u |.1.2.3._ *.s _ f s _ _ s _ < < < < < + ",
-"+ 4.5.6.+ 7.:.8.9.0.a.b.c.N J _ *.s _ f s _ _ s s *._ < < < < + ",
-"+ d.e.f.+ g.h.i.j.a.k.a.:.l._ *.s _ f s _ _ _ s *.*.*._ < < < + ",
-"+ m.n.u + o.k.p.q.a.r.a.s.t._ s _ f s _ _ *._ u.*.*.*.*._ _ _ + ",
-"+ v.w.I + x.k.y.: z.A.B.a.:.C._ f _ _ _ _ _ D.*.*.*.*.*.s _ _ + ",
-"+ E.F.G.+ H.k.a.I.J.K.L.M.a._ f _ *.*.*.*.*.*.*.*.*.*.*.s _ _ + ",
-"+ N.# O.+ P.Q.a.R.I.J.I.S.a._ s _ _ _ s s s *.*.*.*.*.*.s _ _ + ",
-"+ T.U.M + V.a.W.I.X.Y.Y.Z.`.a._  +a..+_ _ _ s s s s *.*.s _ _ + ",
-"+ ++ at +#++ a.$+%+&+*+=+-+;+>+a.,+'+J.a.)+!+~+_ _ _ _ s s s _ _ + ",
-"+ {+]+^++ a./+(+_+:+<+[+}+|+1+a.2+2+a.X.3+4+5+6+7+8+_ _ _ _ _ + ",
-"+ 9+0+^+a.a+b+c+d+e+f+g+X.h+i+j+k+g+l+a.I.m+n+5+o+p+q+r+i+_ _ + ",
-"+ b &.# + s+t+u+v+d+w+x+y+X.z+A+B+g+C+a.'+J.D+4+a.E+F+G+H+I+J++ ",
-"+ K+&.x + L+a+M+N+O+P+Q+R+'+S+T+I+|+;+y+a.U+I.a.V+a.a.W+X+Y+Z++ ",
-"+ `+ @. at + +@@@#@$@%@W.&@U+J.*@=@- at J+;@>@a., at a.'@I.3+C+a.x+)@!@+ ",
-"+ ~@{@]@+ ^@/@(@_@:@<@[@)+)+}@z.=@|@1 at I+W+a.2@3 at 4@Q+5 at 6@7 at 8@&++ ",
-"+ 9 at 0@a at + b at c@d@(@e@[.f at g@h at 8.V.'+;@i at j@k at Y.l@m at n@o at 5@p at l@q at r@+ ",
-"+ s at t@u at + v at w@b at N ).x at y@z at A@B@:.C at W+D@E at G+5@p at l@F at 5@6 at + G at H@I at + ",
-"+ j J at + + + + + + + + + + + + + + + + + + + + + + + + + + K at L@+ ",
-"+ M at B N at + O at P@Q@&.R at S@T at U@f.V at W@X at Z Y at Z@`@ #.#+#@###$#+ %#a+&#+ ",
-"+ *#=#-#+ ;#>#>#,#'#)#!#~#{#]#^#/#(#_#x.:#<#C@[#}#|#1#H.9.t.2#+ ",
-"+ b 3#4#5#6#7#8#9#0#a#b#c#~#]#d#e#e#f#g#h#i#j#L at k#V.l#m#n#v o#+ ",
-"+ p#%.q#r#s#t#u#v#w#x#y#z#A#B#C#1 D /#f#D#E#h#F#G#G.H#I#x at h J#+ ",
-"+ K#L#M#N#O#P#Q#R#S#9#T#U#V#C#J#P W#X#/#..Y#Z#`#H# $(#.$+$@$#$+ ",
-"+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "};
+static char *MGRAPH[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 163 2",
+"   c #0D0B06",
+".  c #1C190C",
+"X  c #31300E",
+"o  c #262312",
+"O  c #26241D",
+"+  c #29261F",
+"@  c #2F2A1A",
+"#  c #302E11",
+"$  c #312E1B",
+"%  c #353312",
+"&  c #2D2B24",
+"*  c #313126",
+"=  c #3A3226",
+"-  c #34332B",
+";  c #3F3828",
+":  c #373632",
+">  c #3E3B34",
+",  c #413C1C",
+"<  c #423F39",
+"1  c #4B490E",
+"2  c #55530D",
+"3  c #524A1B",
+"4  c #67660F",
+"5  c #464135",
+"6  c #444338",
+"7  c #4B463B",
+"8  c #4F493B",
+"9  c #665C20",
+"0  c #66543C",
+"q  c #763273",
+"w  c #4A4C4C",
+"e  c #515447",
+"r  c #575C53",
+"t  c #5A5F56",
+"y  c #595F5E",
+"u  c #665941",
+"i  c #665E4D",
+"p  c #6B624E",
+"a  c #746243",
+"s  c #786448",
+"d  c #716755",
+"f  c #5D6264",
+"g  c #6B7374",
+"h  c #8B7C5E",
+"j  c #8D8A10",
+"k  c #ADA911",
+"l  c #AF983C",
+"z  c #BFB42F",
+"x  c #B7AB35",
+"c  c #BCB130",
+"v  c #C0B62E",
+"b  c #C3B82C",
+"n  c #DDDA14",
+"m  c #E1DD12",
+"M  c #E5E113",
+"N  c #E9E511",
+"B  c #F2EE10",
+"V  c #998256",
+"C  c #8E8169",
+"Z  c #988560",
+"A  c #9C8A67",
+"S  c #928468",
+"D  c #A38C62",
+"F  c #A99265",
+"G  c #A69168",
+"H  c #B19869",
+"J  c #AB9976",
+"K  c #BCA06C",
+"L  c #BFA576",
+"P  c #D0B547",
+"I  c #C1A571",
+"U  c #C9AB70",
+"Y  c #D5B371",
+"T  c #D8B575",
+"R  c #DCBB7C",
+"E  c #771BDD",
+"W  c #7215E4",
+"Q  c #7418E2",
+"!  c #7114EA",
+"~  c #731DEE",
+"^  c #6C0DF1",
+"/  c #6D11F1",
+"(  c #7016F1",
+")  c #721BF0",
+"_  c #7A2DEF",
+"`  c #7D35ED",
+"'  c #7F38ED",
+"]  c #B73BAD",
+"[  c #C227B3",
+"{  c #C229B3",
+"}  c #C234B6",
+"|  c #C23AB7",
+" . c #C23EB9",
+".. c #C342BA",
+"X. c #C24CBB",
+"o. c #C254BE",
+"O. c #C259BE",
+"+. c #8519E1",
+"@. c #803BED",
+"#. c #8950EB",
+"$. c #976FE7",
+"%. c #9162E8",
+"&. c #9468E9",
+"*. c #C25DC0",
+"=. c #C264C2",
+"-. c #C26AC3",
+";. c #C275C5",
+":. c #C279C6",
+">. c #7A8486",
+",. c #7C8589",
+"<. c #828C8E",
+"1. c #8A8697",
+"2. c #879397",
+"3. c #899495",
+"4. c #8D999B",
+"5. c #BDAA8E",
+"6. c #919DA1",
+"7. c #96A4AA",
+"8. c #9AA8AE",
+"9. c #9FACB3",
+"0. c #A1AFB5",
+"q. c #A2B0B7",
+"w. c #A8B8BF",
+"e. c #D5BA88",
+"r. c #D9BE8B",
+"t. c #DFC38F",
+"y. c #E3C48A",
+"u. c #E6CA95",
+"i. c #E5CC9F",
+"p. c #EED29F",
+"a. c #EDD3A4",
+"s. c #F1D7A9",
+"d. c #F5DAAB",
+"f. c #F9DEAA",
+"g. c #BA84C2",
+"h. c #AFBFC6",
+"j. c #BBB8CF",
+"k. c #A99AE3",
+"l. c #ADA3E2",
+"z. c #AFA8E2",
+"x. c #B1ACE1",
+"c. c #B9BFE0",
+"v. c #C285C9",
+"b. c #C28ECC",
+"n. c #C293CD",
+"m. c #C299CE",
+"M. c #C89ED7",
+"N. c #C2A2D0",
+"B. c #C3ABD2",
+"V. c #CBA3D9",
+"C. c #CFABDD",
+"Z. c #C3B3D5",
+"A. c #C3BAD6",
+"S. c #B0C0C7",
+"D. c #B4C5CC",
+"F. c #BCCDD4",
+"G. c #BCC5DE",
+"H. c #BECADE",
+"J. c #BFD1D9",
+"K. c #C3C3D9",
+"L. c #C1CDDC",
+"P. c #C2D4DC",
+"I. c #FFFFFF",
+/* pixels */
+"I.I.I.C.W W W W W W W ! W W W W ! W W W Q W W W W W W W ! W W ^ ",
+"I.I.V.W ~ H.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6 w.P.P.P.W ",
+"I.V.W ~ / L.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.4.# k @ S.P.P.W ",
+"M.Q ~ ^ ^ L.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.% n x a y P.P.W ",
+"( ~ ^ / ^ H.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.<.% m x s * D.P.P.W ",
+"W L.H.H.H.P.P.P.P.P.P.P.P.P.P.P.P.P.7.- 6 & X m c s * D.P.P.P.W ",
+"W P.P.x._ c.P.P.P.P.P.P.P.P.P.P.P.,.7 t.L o M c s - D.P.P.P.P.W ",
+"W P.P.#./ %.P.P.P.b.P.P.P.P.P.P.f d t.Y @ m z 0 O D.P.P.P.P.P.W ",
+"W P.P.G.) P.P.P.n.[ A.P.P.P.P.w S R U $ m v 0 + i ,.P.P.P.P.P.W ",
+"W P.P.G.) P.P.B.} O.v.P.P.J.w J T V % N b 0 ; r.s.7 q.P.P.P.P.W ",
+"W P.P.G.) P.L.| N.N.X.P.P.2.A Y a 1 B b s & D u.d.i.> 8.P.P.P.W ",
+"Q P.P.H.~ P.b.=.P.P.} A.P.g u 5 2 B b s - y L s.d.d.a.7 ,.0.0.W ",
+"W P.P.H.) P.o.m.P.P.-.v.P.P.t 4 j , = + : C a.d.d.f.f.f.8     ! ",
+"W P.P.H.( L.} L.P.P.N.X.P.0.9 B @ 5.5.e.t.u.a.d.d.f.f.f.h     W ",
+"Q P.P.H./ n.=.P.P.P.P.} A.e l P ; @ p h G T Y R p.d.f.f.h     W ",
+"Q J.P.L.( *.n.P.P.P.P.=.g.. 3 , r F.w.h.1.< H T Y R y.y.F     W ",
+"W P.P.H.! } L.P.P.P.P.m.q * ,.F.P.P.P.N.{ ;.>.5 I T Y Y H     W ",
+"W P.P.L.+.*.P.P.P.P.P.P.] N.P.P.P.P.A.| N.O.X.j.g 8 Z K 0     W ",
+"Q P.P.L./ P.P.P.P.P.P.P.Z.} A.P.P.K. .n.P.P.v.| P.F.9.,.2.    W ",
+"Q P.P.P./ P.P.P.P.P.P.P.P.v...A.P.o.:.P.P.P.P.X.B.P.P.P.F.8.9.W ",
+"Q P.P.P./ P.P.P.P.P.P.P.P.P.n.} X.O.P.P.P.P.P.:.:.P.P.P.P.P.P.W ",
+"Q P.P.P./ P.P.P.P.P.P.P.P.P.P.K.-.L.P.P.P.P.P.Z.} B.n.B.P.P.P.W ",
+"W P.P.P.^ P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.N.} } A.P.P.P.W ",
+"W P.P.P./ P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.N.n.P.P.P.P.W ",
+"Q P.P.P.^ P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.W ",
+"Q P.P.P.^ P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.W ",
+"Q P.P.P.^ P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.k.P.P.P.W ",
+"Q P.l. at .^ @. at .@. at .@.' ' @. at .' ' ' ' ` ` ` ' ' ' ` ` ~ _ P.P.P.W ",
+"W P.G.l./ k.z.z.z.z.z.x.z.z.z.x.z.x.x.z.x.x.x.x.x.x.%.$.P.P.P.W ",
+"Q P.P.P.&.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.W ",
+"Q P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.W ",
+"/ E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E / "
+};
diff --git a/share/metview/icons/HOVMOELLERDATA.xpm b/share/metview/icons/MHOVMOELLERDATA.xpm
similarity index 100%
copy from share/metview/icons/HOVMOELLERDATA.xpm
copy to share/metview/icons/MHOVMOELLERDATA.xpm
diff --git a/share/metview/icons/MHOVMOELLERVIEW.xpm b/share/metview/icons/MHOVMOELLERVIEW.xpm
new file mode 100755
index 0000000..f29675e
--- /dev/null
+++ b/share/metview/icons/MHOVMOELLERVIEW.xpm
@@ -0,0 +1,44 @@
+/* XPM */
+static char *test[]={
+"32 32 9 1",
+"e c #000000",
+"f c #007fff",
+". c #333333",
+"c c #777777",
+"a c #7e7e7e",
+"d c #ccccff",
+"g c #d9b777",
+"b c #ff00ff",
+"# c #ffffff",
+"................................",
+".##############################.",
+".#aaaaaaaaaaaaaaaaaaaaaaaaaaaa#.",
+".#a#bbbb#####################a#.",
+".#a###bbb####################a#.",
+".#a#####bbb##################a#.",
+".#a######bbbacccccccccc######a#.",
+".#a##ccccddbbbdddddddddcccc##a#.",
+".#accddddddddbbddddddddddddcca#.",
+".#adddddddddddbbddddddddddddda#.",
+".#addddddddddddbbdddddddddddda#.",
+".#addddddcccccccbbcccccdddddda#.",
+".#addccccddddddddbbddddccccdda#.",
+".#accdddddddddddddbbdddddddcca#.",
+".#addddddddddddddddbbdddddddda#.",
+".#adddddddddddddddddbbddddddda#.",
+".#addddddcccccccccccabcdddddda#.",
+".#addccccddddddddddddbbccccdda#.",
+".#accdddddddddddddddddbbdddcca#.",
+".#addddddddddddddddddddbbddbda#.",
+".#addddddddddddddddddddbbdbbda#.",
+".#addddddccccccccccccccbbbbbda#.",
+".#addccccdddddddddddddddbbbbda#.",
+".#accddddddddddddddddddbbbbbca#.",
+".#adddddddddddddddddddbbbbbbda#.",
+".#addddddddddddddddddbbbbbbbda#.",
+".#addddddeeeeeeeeeeeeeedddddda#.",
+".#addeeeeffffffggggggggeeeeeda#.",
+".#aeefffffffffgggggggggggggeea#.",
+".#aaaaaaaaaaaaaaaaaaaaaaaaaaaa#.",
+".##############################.",
+"................................"};
diff --git a/share/metview/icons/MSYMB.xpm b/share/metview/icons/MSYMB.xpm
index 57f653f..b5350be 100644
--- a/share/metview/icons/MSYMB.xpm
+++ b/share/metview/icons/MSYMB.xpm
@@ -1,50 +1,207 @@
 /* XPM */
-static char * PSYMB_icon[] = {
-/* width height ncolors chars_per_pixel */
-"32 32 12 1",
-/* colors */
-" 	c white",
-".	c #000073734B4B",
-"X	c black",
-"o	c #1C1CB8B8A6A6",
-"O	c #FFFF0000DADA",
-"+	c yellow",
-"@	c #D9D9B7B77777",
-"#	c #FFFFE2E2ABAB",
-"$	c #FFFF4F4F0000",
-"%	c #FFFFCC",
-"&	c blue",
-"*	c red",
+static char *MSYMB[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 169 2",
+"   c #0C0A05",
+".  c #171F0F",
+"X  c #171A16",
+"o  c #201F17",
+"O  c #152512",
+"+  c #1B2F1A",
+"@  c #242A0C",
+"#  c #332E1D",
+"$  c #1F322B",
+"%  c #193F2C",
+"&  c #103B32",
+"*  c #1C3931",
+"=  c #2E2E20",
+"-  c #23352C",
+";  c #3B3524",
+":  c #3F3B22",
+">  c #213A31",
+",  c #2A3E32",
+"<  c #333F31",
+"1  c #1A432D",
+"2  c #184137",
+"3  c #194934",
+"4  c #124238",
+"5  c #1C443A",
+"6  c #204036",
+"7  c #5F5F0E",
+"8  c #4C4914",
+"9  c #554A1E",
+"0  c #61610C",
+"q  c #686E0F",
+"w  c #7B7E0E",
+"e  c #727710",
+"r  c #46402B",
+"t  c #4E472D",
+"y  c #4D4639",
+"u  c #494A3E",
+"i  c #554D31",
+"p  c #554E3D",
+"a  c #5B5135",
+"s  c #5D553B",
+"d  c #736736",
+"f  c #1B2279",
+"g  c #1B4E44",
+"h  c #195B47",
+"j  c #185B4B",
+"k  c #204F44",
+"l  c #205146",
+"z  c #1C6E45",
+"x  c #19614F",
+"c  c #1D7446",
+"v  c #1D7648",
+"b  c #1E7A48",
+"n  c #1B6454",
+"m  c #1A7465",
+"M  c #187B6C",
+"N  c #157371",
+"B  c #6F664C",
+"V  c #726241",
+"C  c #706C56",
+"Z  c #79695F",
+"A  c #7F7653",
+"S  c #76735E",
+"D  c #766C62",
+"F  c #6A776B",
+"G  c #677A6E",
+"H  c #767768",
+"J  c #B53533",
+"K  c #B23836",
+"L  c #D91618",
+"P  c #D6191B",
+"I  c #EB0B0C",
+"U  c #FD0000",
+"Y  c #CC2121",
+"T  c #C32929",
+"R  c #BE4135",
+"E  c #837338",
+"W  c #9B5C4E",
+"Q  c #A45547",
+"!  c #A95144",
+"~  c #A25649",
+"^  c #8D7A45",
+"/  c #907D43",
+"(  c #8F7C54",
+")  c #877D58",
+"_  c #8B7E69",
+"`  c #168D7C",
+"'  c #5D8376",
+"]  c #518D7E",
+"[  c #588F7C",
+"{  c #949409",
+"}  c #ADAB09",
+"|  c #BCB907",
+" . c #B8A13F",
+".. c #C4C00F",
+"X. c #EEEA16",
+"o. c #EAE61B",
+"O. c #ECE818",
+"+. c #F1EC14",
+"@. c #E2D02E",
+"#. c #938142",
+"$. c #9C875C",
+"%. c #AC9563",
+"&. c #AE986C",
+"*. c #B69F6E",
+"=. c #A89975",
+"-. c #AE9E7C",
+";. c #B9A47D",
+":. c #CCAE77",
+">. c #C0AA7E",
+",. c #D5B371",
+"<. c #D9B775",
+"1. c #D4B57A",
+"2. c #D9B678",
+"3. c #DBBA7A",
+"4. c #231FA1",
+"5. c #2225A1",
+"6. c #232AA1",
+"7. c #223CA2",
+"8. c #1D5596",
+"9. c #2153A3",
+"0. c #205CA3",
+"q. c #1F68A3",
+"w. c #1F73A3",
+"e. c #1F7BA4",
+"r. c #2068A3",
+"t. c #179684",
+"y. c #189F8D",
+"u. c #3E9E8D",
+"i. c #18A08D",
+"p. c #18A390",
+"a. c #1AAD99",
+"s. c #1BB39E",
+"d. c #2DAC98",
+"f. c #3AA591",
+"g. c #30A997",
+"h. c #26B49E",
+"j. c #2BB09B",
+"k. c #1F82A4",
+"l. c #1E8CA5",
+"z. c #1E93A4",
+"x. c #1E9AA5",
+"c. c #1DA2A5",
+"v. c #1CADA5",
+"b. c #1CB4A3",
+"n. c #1CBBA5",
+"m. c #20B9A3",
+"M. c #4B9885",
+"N. c #459D8A",
+"B. c #519481",
+"V. c #BBA882",
+"C. c #C3AC81",
+"Z. c #C9B183",
+"A. c #CFB98E",
+"S. c #D2B785",
+"D. c #DFBF84",
+"F. c #95CCAA",
+"G. c #9ACFAE",
+"H. c #9FD0B1",
+"J. c #A4D3B5",
+"K. c #DDC69C",
+"L. c #E1C38A",
+"P. c #E9CB97",
+"I. c #ECCF98",
+"U. c #E0CAA3",
+"Y. c #F6DBA6",
+"T. c #F0D7AC",
+"R. c #F4DAAB",
+"E. c #F9DEAB",
+"W. c #FFFFFF",
 /* pixels */
-"    .......................XXX..",
-"   ..oooooooOoooooooooooooXOOXo.",
-"  ...oooooooOooooooooooooX+XOXo.",
-" ....oooooooOoooooooooooX+ at XXoo.",
-".....ooooOOOOOOOoooooooX+ at XXooo.",
-".oooooooooooOooooooXXXX+ at XXoooo.",
-".oooooooooooOoooooX#@X+ at XXooooo.",
-".oooooooooooOooooX#@X+ at XXoooooo.",
-".oooooooooooooooX#@X+ at XX@Xooooo.",
-".ooooooooooooooX#@X+ at XX@@#Xoooo.",
-".oooooooooooooX#@X+ at XXX@###Xooo.",
-".oooooooooooooX at X+@XXoX$####XXX.",
-".ooooooooooooooX+XXXXX%#####@XX.",
-".oooooooo&ooooX+X%##########@XX.",
-".ooooooooo&oooX at XXX@@@######@XX.",
-".oooooooooo&oXXXoooXXX@@@@##@XX.",
-".ooooooooooo&XooooooooXXXX@@@XX.",
-".ooooooooooo&&ooooooooooooXXXXX.",
-".oooooooooo&oo&ooooooooooooooXX.",
-".ooooooooo&oooo&ooooooooooooooo.",
-".oooooooo&oooooo&ooo***oooooooo.",
-".oooooooooooooooooo*****ooooooo.",
-".ooooooooooooooooo*******oooooo.",
-".ooooooooooooooooo*******oooooo.",
-".ooooooooooooooooo*******oooooo.",
-".oooooooooooooooooo*****ooooooo.",
-".ooooooooooooooooooo***oooooooo.",
-".oooooooooooooooooooooooooooooo.",
-".oooooooooooooooooooooooooooooo.",
-".oooooooooooooooooooooooooooooo.",
-".oooooooooooooooooooooooooooooo.",
-"................................"};
+"W.W.W.J.c c v v b v v v v v v v v v v v c v v v v v v v v v v z ",
+"W.W.H.v v n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.v ",
+"W.G.v v z b.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.t.n.n.n.n.c ",
+"F.v v z z n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.3 @ % s.n.n.c ",
+"c v z c z n.n.n.f.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.3 q o.d n n.n.c ",
+"c n.s.n.b.n.n.n.R j.n.n.n.n.n.n.n.n.n.n.n.n.n.1 e o.^ a x n.n.c ",
+"c n.n.n.n.n.n.n.R j.n.n.n.n.n.n.n.n.n.M n M % w o.^ a h n.n.n.c ",
+"c n.n.n.n.N.] B.R [ M.f.n.n.n.n.n.n.g C C.o 0 O.^ a j n.n.n.n.v ",
+"v n.n.n.n.S ~ Q R ! ! H n.n.n.n.a.* =.3.( 7 O.^ i x n.n.n.n.n.b ",
+"v n.n.n.n.n.n.n.R j.n.n.n.n.n.p.$ Z.<.$.7 X./ ; X i.n.n.n.n.n.v ",
+"v n.n.n.n.n.n.n.R j.n.n.n.n.i.- S.,.V 0 X./ ; B K.$ n.n.n.n.n.v ",
+"v n.n.n.n.n.n.n.W h.n.n.n.s.- 1.:.r { +./ i s L.R.V.5 s.n.n.n.v ",
+"v n.n.n.n.n.n.n.n.n.n.n.n.` $.%.= } +.#.i j A P.R.E.-.% a.n.n.c ",
+"v n.n.n.n.n.n.n.n.n.n.n.n.y.h O } ..E t 4 - Z.R.R.E.E.A.- & 4 c ",
+"v n.n.n.n.n.n.n.n.n.n.n.n.s.+ | 8 p y u S U.T.T.R.R.E.E.;.    c ",
+"v n.n.n.n.n.n.n.n.n.n.n.n.` #. at .# _ >.2.2.2.D.P.R.R.E.E.;.    z ",
+"v n.n.n.n.n.n.n.n.n.n.n.n.1 9  .: 2 k l > ) 2.,.3.I.Y.Y.>.    z ",
+"v n.n.n.v.7.x.n.n.n.n.n.8.  . h i.n.n.n.n.` , &.,.,.,.,.,.    z ",
+"b n.n.n.n.r.5.x.n.n.n.r.f N n.n.n.n.n.n.n.n.n.m 6 *.3.,.,.    z ",
+"v n.n.n.n.n.w.5.l.n.w.6.x.n.n.n.n.n.n.n.n.n.n.n.m.m 6 < >     c ",
+"v n.n.n.n.n.n.k.5.0.5.x.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.& & v ",
+"b n.n.n.n.n.n.n.r.4.0.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.v ",
+"v n.n.n.n.n.n.z.5.w.6.r.n.n.n.n.n.n.n.n.m.' D g.n.n.n.n.n.n.n.v ",
+"b n.n.n.n.n.x.5.e.n.c.6.0.n.n.n.n.n.n.d.Y P L P G n.n.n.n.n.n.c ",
+"v n.n.n.n.x.6.e.n.n.n.s.7.8.b.n.n.n.n.Z L U U I T n.n.n.n.n.n.v ",
+"b n.n.n.n.e.q.n.n.n.n.n.v.9.b.n.n.n.n.K I U U U L g.n.n.n.n.n.v ",
+"v n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.F L U U I J n.n.n.n.n.n.c ",
+"b n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.h.K P P Y ] n.n.n.n.n.n.c ",
+"b n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.u.[ m.n.n.n.n.n.n.n.v ",
+"v n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.c ",
+"b n.n.n.n.n.n.n.m.n.s.h.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.c ",
+"z b b b b b b b b b b c ` b b b b b b b b b b b b b b b b b b z "
+};
diff --git a/share/metview/icons/MTAYLOR.xpm b/share/metview/icons/MTAYLOR.xpm
new file mode 100644
index 0000000..08bed47
--- /dev/null
+++ b/share/metview/icons/MTAYLOR.xpm
@@ -0,0 +1,242 @@
+/* XPM */
+static char *MTAYLOR[] = {
+/* width height num_colors chars_per_pixel */
+"    32    32      203            2",
+/* colors */
+".. c #040204",
+".# c #84860c",
+".a c #d4ca14",
+".b c #44423c",
+".c c #b4c2a4",
+".d c #746e14",
+".e c #ccea8c",
+".f c #b4ae0c",
+".g c #2c2a1c",
+".h c #44426c",
+".i c #646664",
+".j c #d4e2cc",
+".k c #1c226c",
+".l c #84867c",
+".m c #e4f2cc",
+".n c #e4c28c",
+".o c #b49e7c",
+".p c #5c5a14",
+".q c #b4b69c",
+".r c #b4e264",
+".s c #443a24",
+".t c #9ca294",
+".u c #ece61c",
+".v c #d4b274",
+".w c #c4d2c4",
+".x c #8c7e64",
+".y c #34362c",
+".z c #f4fad4",
+".A c #847e14",
+".B c #ccee64",
+".C c #0c126c",
+".D c #545244",
+".E c #e4e6d4",
+".F c #2c3284",
+".G c #645634",
+".H c #949694",
+".I c #ecfad4",
+".J c #ccba94",
+".K c #aca60c",
+".L c #4c4a3c",
+".M c #141a74",
+".N c #94823c",
+".O c #bcc2bc",
+".P c #ecf2cc",
+".Q c #ecd2a4",
+".R c #dcba7c",
+".S c #d4f664",
+".T c #3c321c",
+".U c #5c629c",
+".V c #7c86ac",
+".W c #acb294",
+".X c #ccdac4",
+".Y c #e4eecc",
+".Z c #54422c",
+".0 c #64625c",
+".1 c #b4b6bc",
+".2 c #bccabc",
+".3 c #8c7a44",
+".4 c #34321c",
+".5 c #242a74",
+".6 c #bcea6c",
+".7 c #dcb674",
+".8 c #d4ee6c",
+".9 c #343a8c",
+"#. c #ecf2dc",
+"## c #f4d6ac",
+"#a c #b4beb4",
+"#b c #4c4234",
+"#c c #dceacc",
+"#d c #3c3e14",
+"#e c #fcfefc",
+"#f c #14126c",
+"#g c #7476a4",
+"#h c #1c1e6c",
+"#i c #545a4c",
+"#j c #848ea4",
+"#k c #342e24",
+"#l c #444a94",
+"#m c #6c6e64",
+"#n c #dce2cc",
+"#o c #c4ae84",
+"#p c #9ca2ac",
+"#q c #dcf674",
+"#r c #d4b684",
+"#s c #7c7e94",
+"#t c #3c3624",
+"#u c #f4fed4",
+"#v c #5c5a44",
+"#w c #e4e6dc",
+"#x c #c4c6cc",
+"#y c #ecf6cc",
+"#z c #646aa4",
+"#A c #acaeac",
+"#B c #d4dabc",
+"#C c #847654",
+"#D c #bcea74",
+"#E c #d4f26c",
+"#F c #3c3e9c",
+"#G c #545a9c",
+"#H c #f4deac",
+"#I c #14167c",
+"#J c #747ea4",
+"#K c #1c1a7c",
+"#L c #444634",
+"#M c #7c760c",
+"#N c #e4fe8c",
+"#O c #c4aa44",
+"#P c #848e74",
+"#Q c #e4f6cc",
+"#R c #e4ca94",
+"#S c #c4a66c",
+"#T c #f4ee14",
+"#U c #d4b674",
+"#V c #d4e2c4",
+"#W c #dcdecc",
+"#X c #9c8e2c",
+"#Y c #c4ceac",
+"#Z c #5c5e7c",
+"#0 c #9496b4",
+"#1 c #6c5e44",
+"#2 c #3c3e4c",
+"#3 c #a4aab4",
+"#4 c #0c0a04",
+"#5 c #8c8a8c",
+"#6 c #3c3e7c",
+"#7 c #d4d21c",
+"#8 c #343234",
+"#9 c #bc9e6c",
+"a. c #5c5234",
+"a# c #6c624c",
+"aa c #bce65c",
+"ab c #4c3e2c",
+"ac c #d4be9c",
+"ad c #9c865c",
+"ae c #947e44",
+"af c #ccd6c4",
+"ag c #6c6ea4",
+"ah c #acb2bc",
+"ai c #5c5e9c",
+"aj c #242684",
+"ak c #9c9ab4",
+"al c #d4f674",
+"am c #6c6e74",
+"an c #8c7654",
+"ao c #fcdeac",
+"ap c #3c3e8c",
+"aq c #b4b204",
+"ar c #ecea14",
+"as c #e4eacc",
+"at c #bcc6bc",
+"au c #dcbe84",
+"av c #545654",
+"aw c #b4bab4",
+"ax c #14166c",
+"ay c #747aac",
+"az c #dce6cc",
+"aA c #3c3a2c",
+"aB c #acb2b4",
+"aC c #746644",
+"aD c #2c2e8c",
+"aE c #8486a4",
+"aF c #c4cebc",
+"aG c #4c4e3c",
+"aH c #84724c",
+"aI c #54462c",
+"aJ c #8c7e44",
+"aK c #ecf6dc",
+"aL c #f4daac",
+"aM c #4c4634",
+"aN c #1c1a14",
+"aO c #ccd6b4",
+"aP c #1c1e7c",
+"aQ c #4c4e9c",
+"aR c #d4decc",
+"aS c #2c2a24",
+"aT c #e4f2d4",
+"aU c #d4b27c",
+"aV c #f4fadc",
+"aW c #ccee6c",
+"aX c #ecfadc",
+"aY c #bcc2c4",
+"aZ c #ecf2d4",
+"a0 c #dcba84",
+"a1 c #d4f66c",
+"a2 c #5c62a4",
+"a3 c #e4eed4",
+"a4 c #d4ee74",
+"a5 c #b4bebc",
+"a6 c #1c1e74",
+"a7 c #848eac",
+"a8 c #dce2d4",
+"a9 c #3c362c",
+"b. c #f4fedc",
+"b# c #ecf6d4",
+"ba c #bcea7c",
+"bb c #d4f274",
+"bc c #44463c",
+"bd c #6c5e4c",
+"be c #5c523c",
+"bf c #5c5a54",
+"bg c #e4ead4",
+"bh c #b4babc",
+"bi c #141674",
+/* pixels */
+"#e#e#ebaa1#Ebb.8bb.8a1bb#Ebb#Ebb#Ebbbbbbbb#q#qalbbbbbbbbbb#q#qbb",
+"#e#e#Da4.r#.b#b##.b##.b#aKaZaKaZaKb#b##.b##.b##..zaKaZaKaKaZ#w#E",
+"#e#Dala1.BaKaVb.aVb.aVb.aVb.b.aVb.aVb.aVb.aVb.aVaVaVb.aVaVb.aZ#E",
+".6bb#E#N.BaVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.b.aVb.#.#E",
+"#qaa#E.S.e#uaVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aZ#E",
+"bba3.z.IaVaVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb#bb",
+"bbaKaVb.aKbh#g.VakaY.Eb#aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.#.#E",
+"bbaZb.aVaVaDa7#sai.9bi#K#G#xaXaVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb##E",
+"#EaKaVb.aVax#yaX#u.z.Ibh#g.5aP#0#.aVb.aVb.aVb.aVb.aVaTaVb.aVaK#E",
+"#Eb#b.aVaXbi.P.I#u.I.Iaw.1.I.OapaP#xaVb.aVb.aVb.b#av#4.taVaVb##E",
+"#EaKaVb.aV.F.V#paEaF.2.I.I#u.I.I#p#I#JaVaVb.aVb#.D.d#7.saFb.aK#E",
+"#Eb#b.aV.I#K#c#c.j.O#zag#3.I#u#u.I#Baj.UaKb.aKaG.d.u.3.Z.laVb##E",
+"a1aVaVaVaVax#y#u#u.I.OahazaQaF.I.Ia5#F#6#Z#Bbc.Aar.3.G.0aVaVaK#E",
+"#Eb#aVb.aX.M#y.I.I#u.I#u.I#c#caQb#.Pava#.x..#M.u.3.G.iaKb.aVb#bb",
+"#EaKb.aVaVaxb#.I#u#jaB.I#u#u.IaB#z#2.oauaH.par.3.G.iaVaVb.aVaK.8",
+"alaZb.aVaXax#y.I#u.X#V#u.I#u.IaO#8#o.7ad.p.uaJ.s#8aZb.aVb.aVb##E",
+"#EaKaVb.aV#f#z.way.Y.m#u.I.Y#sa9#r#UaH.parae.sbd.x#maVaVb.aVaK#E",
+"#Eb#b.aVaV.CazasaQa2ag#Vb##Y.y#r.vaI.#ar.NabaC#RaLbe.taVb.aVb#bb",
+"bbaKb.aVaX#f#y.I.m.m.I#gay.DaU#S#t.Karae.G.D#9.QaL.Q.L#5aKaVaZal",
+".8b#aVb.aV#f#Q.Y.I.I#u.m#l.haG.g.f#T.Na.bfaM#raLaLaoaLa#avamambb",
+"bbb#b.aVaX.Cb#.Ubh.zaR#u.I#a.gaq#d.T.gaS#v.J.QaLaLaLaoao#b#4#4bb",
+"#EaVb.aVaV.C#y.I.I#QaD#Q.z#P#X.aa9ac#r.Ra0.n#R##aL#H#Haoa##4#4bb",
+"#EaKaVb.aV.Cbhas.I.z.I.z.I.4ae#O#kaSaA.LaCaU#U.7#RaLaoaoa##4#4bb",
+"#Eb#b.aVaX#fai.2aD#c#u.I.q#4.T#L.W.I#uaX#Y#2an#U.7.v.R.Rad#4#4#E",
+"#EaKb.aVaVbi#y.z.m.I#u.I#m#i#Bat.I#u.I#u.Ia5.c.bad#U.v.vad#4#4bb",
+"a1b#aVb.aXaj#lafb#.I#y.I#y.I#yaQas.I.z.I.IaEaB.P.H.y#1#CaN#4#4#E",
+"bbaVb.aVaVaPa6#h#h#h#h#h.k#h.k#h#h#h#h#h#h.M#h#h.5#G#W#B#AaNaN#E",
+"#Eb#aVb.aVazaRa8#na8.ja8a8#W#na8.ja8azbg#c.E#caz.Ea3aVb.#uaKbg#E",
+"#EaVb.aVb.aVb.aVb.aVb.aVb.b.aVaVaVb.aVb.b.aVb.aVb.aVb.aVaVb.aK#E",
+"#EaKb.aVb.aVb.aVb.aVb.aVb.aVb.b.b.aVb.aVb.aVb.aVb.aVb.aVb.aVb#bb",
+"#Ea3aKb#aKaKb#.I.zb#aKb#aKb#aKb#b#aKb#aKb#aKaKb#aKb#aKaKb#aKbgbb",
+"bb#E.8#E.B.8#EaW.8.B#EaW#EaW#EaW.8#E.8aW.8#E.B.8.8#EaW.8#E.8#E#E"
+};
diff --git a/share/metview/icons/MTEXT.xpm b/share/metview/icons/MTEXT.xpm
index be08cfe..a456940 100644
--- a/share/metview/icons/MTEXT.xpm
+++ b/share/metview/icons/MTEXT.xpm
@@ -1,47 +1,195 @@
 /* XPM */
-static char * PTEXT_icon[] = {
-"32 32 12 1",
-" 	c #FFFFFFFFFFFF",
-".	c #7E7E7E7E7E7E",
-"X	c #E5E5E5E5E5E5",
-"o	c #00007F7FFFFF",
-"O	c #000000006666",
-"+	c #000000000000",
-"@	c #FFFF0000DADA",
-"#	c #FFFFFFFF0000",
-"$	c #D9D9B7B77777",
-"%	c #FFFFE2E2ABAB",
-"&	c #FFFF4F4F0000",
-"*	c #FFFFFFFFCCCC",
-"    ............................",
-"   ..XXXXXXXXXXXXXXXXXXXXXXXXXX.",
-"  ...XXXXXXXXXXXXXXXXXXXXXXXXXX.",
-" ....XXXXXXXXXXXXXXXXXXXXXXXXXX.",
-".....                   XXXXXXX.",
-".XXX oooooooooooooooooooOXX+++X.",
-".XXX oooooooooooooooooooOX+@@+X.",
-".XXX oooooooooooooooooooO+#+ at +X.",
-".XXX oOOOOOO oooOOOOOOoo+#$++XX.",
-".XXX OXXXXXX oooOXXXXXX+#$++XXX.",
-".XXXXXXXXXXX oooOXX++++#$++XXXX.",
-".XXXXXXXXXXX oooOX+%$+#$++XXXXX.",
-".XXXXXXXXXXX oooO+%$+#$++XXXXXX.",
-".XXXXXXXXXXX ooo+%$+#$++$+XXXXX.",
-".XXXXXXXXXXX oo+%$+#$++$$%+XXXX.",
-".XXXXXXXXXXX o+%$+#$+++$%%%+XXX.",
-".XXXXXXXXXXX o+$+#$++X+&%%%%++++",
-".XXXXXXXXXXX oo+#+++++*%%%%%$+++",
-".XXXXXXXXXXX o+#+*%%%%%%%%%%$+++",
-".XXXXXXXXXXX o+$+++$$$%%%%%%$+++",
-".XXXXXXXXXXX +++OXX+++$$$$%%$+++",
-".XXXXXXXXXXX++ooOXXXXX++++$$$+++",
-".XXXXXXXXXXX oooOXXXXXXXXX++++++",
-".XXXXXXXXXXX oooOXXXXXXXXXXXX+++",
-".XXXXXXXXXXX oooOXXXXXXXXXXXXXX.",
-".XXXXXXXXXXX oooOXXXXXXXXXXXXXX.",
-".XXXXXXXXXXoooooooXXXXXXXXXXXXX.",
-".XXXXXXXXoooooooooooOXXXXXXXXXX.",
-".XXXXXXXXOOOOOOOOOOOOXXXXXXXXXX.",
-".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
-".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
-"................................"};
+static char *MTEXT[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 157 2",
+"   c #0D0B06",
+".  c #14170E",
+"X  c #171612",
+"o  c #1C1A15",
+"O  c #151B1F",
+"+  c #1B1D1A",
+"@  c #221F18",
+"#  c #2E2E13",
+"$  c #2B2B1E",
+"%  c #343115",
+"&  c #3A3B14",
+"*  c #132228",
+"=  c #1D2032",
+"-  c #1A2239",
+";  c #172B3A",
+":  c #2A2824",
+">  c #303122",
+",  c #383326",
+"<  c #292937",
+"1  c #423C2D",
+"2  c #413D33",
+"3  c #3E4212",
+"4  c #59590B",
+"5  c #444812",
+"6  c #40401F",
+"7  c #51491B",
+"8  c #68690A",
+"9  c #7A7B0D",
+"0  c #5A5320",
+"q  c #444237",
+"w  c #4C4330",
+"e  c #49463C",
+"r  c #504837",
+"t  c #594C34",
+"y  c #51493B",
+"u  c #665C30",
+"i  c #67573B",
+"p  c #6A5B3E",
+"a  c #1A2643",
+"s  c #172F40",
+"d  c #1B2E52",
+"f  c #212F40",
+"g  c #293249",
+"h  c #203849",
+"j  c #373744",
+"k  c #3C3D46",
+"l  c #34384A",
+"z  c #24375B",
+"x  c #1B396A",
+"c  c #19416C",
+"v  c #184474",
+"b  c #1A467E",
+"n  c #344769",
+"m  c #214471",
+"M  c #464444",
+"N  c #4C4B44",
+"B  c #504F4B",
+"V  c #5B5241",
+"C  c #57534E",
+"Z  c #444551",
+"A  c #45495B",
+"S  c #4B4D59",
+"D  c #5B5853",
+"F  c #5E5C5B",
+"G  c #6E614A",
+"H  c #726042",
+"J  c #61635F",
+"K  c #706655",
+"L  c #736853",
+"P  c #6C6C75",
+"I  c #757472",
+"U  c #787672",
+"Y  c #807D12",
+"T  c #8E7C5B",
+"R  c #82820D",
+"E  c #9B912B",
+"W  c #918336",
+"Q  c #A5963C",
+"!  c #A7983B",
+"~  c #AB9C39",
+"^  c #AFA237",
+"/  c #B1A434",
+"(  c #C9C60D",
+")  c #E8E516",
+"_  c #EDE914",
+"`  c #F0EC14",
+"'  c #F4F011",
+"]  c #D8C13D",
+"[  c #B29A40",
+"{  c #A1895A",
+"}  c #9D8962",
+"|  c #9C8C6E",
+" . c #AB966F",
+".. c #B09D7C",
+"X. c #C2A56E",
+"o. c #C7AA71",
+"O. c #D5B371",
+"+. c #D8B677",
+"@. c #DAB877",
+"#. c #D5B579",
+"$. c #DBBA7B",
+"%. c #1B4A8D",
+"&. c #1B4D93",
+"*. c #16509F",
+"=. c #1C59AC",
+"-. c #1C60BC",
+";. c #3061A6",
+":. c #6A7885",
+">. c #747988",
+",. c #1D64C3",
+"<. c #1C67CA",
+"1. c #1C68CC",
+"2. c #2067C6",
+"3. c #286AC1",
+"4. c #2A70CC",
+"5. c #7491BB",
+"6. c #578CD3",
+"7. c #5A8FD4",
+"8. c #828484",
+"9. c #878989",
+"0. c #898B8B",
+"q. c #8C908F",
+"w. c #8E8E95",
+"e. c #939399",
+"r. c #A5A4A3",
+"t. c #ABAAAA",
+"y. c #B1B0AF",
+"u. c #AFAFB3",
+"i. c #B4B4B6",
+"p. c #C2AC82",
+"a. c #DEBE81",
+"s. c #D3BE9A",
+"d. c #E2C388",
+"f. c #E4C791",
+"g. c #E8CB92",
+"h. c #E2CA9E",
+"j. c #E8CFA3",
+"k. c #EFD7AC",
+"l. c #F3D7A4",
+"z. c #F7DAA5",
+"x. c #F8DBA4",
+"c. c #F4DAAB",
+"v. c #F8DDAB",
+"b. c #92B1DB",
+"n. c #A6BEDD",
+"m. c #B0C4DE",
+"M. c #BACAE0",
+"N. c #C5C5C5",
+"B. c #C9C9C9",
+"V. c #C9D2DF",
+"C. c #D2D4D3",
+"Z. c #D7D9D8",
+"A. c #DBDBDB",
+"S. c #D9DDE3",
+"D. c #DEE1E4",
+"F. c #E4E4E4",
+"G. c #FFFFFF",
+/* pixels */
+"G.G.G.Z.9.9.0.0.0.9.0.0.0.0.0.0.0.0.0.9.0.0.0.0.0.0.9.0.0.0.9.8.",
+"G.G.Z.0.0.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.0.",
+"G.C.0.0.8.D.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.0.",
+"C.0.0.9.8.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.i.F.F.F.F.0.",
+"0.0.8.8.8.V.m.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.:.# > N.F.F.0.",
+"0.D.F.A.A.b.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.v & ) W q F.F.0.",
+"0.F.F.F.F.b.1.1.1.&.a l Z S ,.1.1.%.j S A n =.c 3 ) Q H e D.F.0.",
+"0.F.F.F.F.b.1.1.&.< u.F.F.F.4.1.1.%.e.y.U 8.J 5 _ ! H e D.F.F.0.",
+"0.F.F.F.F.b.1.-.= i.F.F.F.F.4.1.1.%.F y p.r % ` ! H + F.F.F.F.9.",
+"0.F.F.F.F.b.1.x P F.F.F.F.F.4.1.1.f L a.X.% ` ~ p ; g F.F.F.F.9.",
+"0.F.F.F.F.b.2.= C.F.F.F.F.F.4.,.a | $.o.% ` ^ t X b g F.F.F.F.0.",
+"0.F.F.F.F.D.>.P F.F.F.F.F.F.3.; ..O.{ & _ ^ t 1 j.2 k F.F.F.F.0.",
+"0.F.F.F.F.F.F.F.F.F.F.F.F.F.< p.O.p 4 ' ^ H , $.c.h.2 B.F.F.F.0.",
+"0.F.F.F.F.F.F.F.F.F.F.F.F.B.V X.1 8 ' / H N y d.c.z.s.2 i.F.F.0.",
+"0.F.F.F.F.F.F.F.F.F.F.F.F.Z.m * 9 ( E i 2 N  .k.c.c.v.j.w V C 8.",
+"0.F.F.F.F.F.F.F.F.F.F.F.F.F.h R Y r y y K s.k.k.c.v.v.v.z..   5.",
+"q.F.F.F.F.F.F.F.F.F.F.F.F.Z.6 ] 0 L ..#.#.+.a.f.k.v.v.v.v.o   8.",
+"0.F.F.F.F.F.F.F.F.F.F.F.F.8.7 [ u O M F B G O.O. at .g.l.z.x.@   8.",
+"q.F.F.F.F.F.F.F.F.F.F.F.F.$ . s *.%.e.F.F.B.C T +.+.O.O.O.@   U ",
+"0.F.F.F.F.F.F.F.F.F.F.F.B.8.3.1.<.%.e.F.F.F.F.t.2 } @.+.$.@   8.",
+"0.F.F.F.F.F.F.F.F.F.F.F.F.F.4.1.<.%.e.F.F.F.F.F.F.r.D e 2 :   8.",
+"q.F.F.F.F.F.F.F.F.F.F.F.F.F.4.1.<.%.e.F.F.F.F.F.F.F.F.F.F.I B 8.",
+"0.F.F.F.F.F.F.F.F.F.F.F.F.F.4.1.<.%.e.F.F.F.F.F.F.F.F.F.F.F.F.w.",
+"q.F.F.F.F.F.F.F.F.F.F.F.F.F.4.1.<.&.e.F.F.F.F.F.F.F.F.F.F.F.F.9.",
+"0.F.F.F.F.F.F.F.F.F.F.F.F.F.4.1.1.%.e.F.F.F.F.F.F.F.F.F.F.F.F.0.",
+"0.F.F.F.F.F.F.F.F.F.F.F.F.D.1.1.1.=.w.F.F.F.F.F.F.F.F.F.F.F.F.0.",
+"0.F.F.F.F.F.F.F.F.F.F.D.M.7.1.1.1.1.;.M.S.F.F.F.F.F.F.F.F.F.F.0.",
+"q.F.F.F.F.F.F.F.F.F.6.1.1.1.1.1.1.1.1.1.1.5.A.F.F.F.F.F.F.F.F.0.",
+"q.F.F.F.F.F.F.F.F.F.M.z d d d d d d d d d - N.F.F.F.F.F.F.F.F.0.",
+"q.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.0.",
+"0.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.0.",
+"9.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.w.0.q.q.q.q.q.q.q.q.q.0.w.8."
+};
diff --git a/share/metview/icons/VPROFILE.xpm b/share/metview/icons/MVPROFILE.xpm
similarity index 100%
copy from share/metview/icons/VPROFILE.xpm
copy to share/metview/icons/MVPROFILE.xpm
diff --git a/share/metview/icons/MVPROFVIEW.xpm b/share/metview/icons/MVPROFILEVIEW.xpm
old mode 100644
new mode 100755
similarity index 100%
copy from share/metview/icons/MVPROFVIEW.xpm
copy to share/metview/icons/MVPROFILEVIEW.xpm
diff --git a/share/metview/icons/MWIND.xpm b/share/metview/icons/MWIND.xpm
index 1bc51b6..a193121 100644
--- a/share/metview/icons/MWIND.xpm
+++ b/share/metview/icons/MWIND.xpm
@@ -1,49 +1,188 @@
 /* XPM */
-static char * PWIND_icon[] = {
-/* width height ncolors chars_per_pixel */
-"32 32 11 1",
-/* colors */
-" 	s c1	c white",
-".	c #9D9D6868F0F0",
-"X	c black",
-"o	c #CCCCFF",
-"O	c #DADA0000FFFF",
-"+	c yellow",
-"@	c #D9D9B7B77777",
-"#	c red",
-"$	c #FFFFE2E2ABAB",
-"%	c #FFFF4F4F0000",
-"&	c #FFFFCC",
+static char *MWIND[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 150 2",
+"   c #0D0B06",
+".  c #1F1D0F",
+"X  c #1A1715",
+"o  c #1A1816",
+"O  c #211D17",
+"+  c #2D2B17",
+"@  c #262118",
+"#  c #2C2919",
+"$  c #312D13",
+"%  c #322E1A",
+"&  c #353310",
+"*  c #383311",
+"=  c #3E391B",
+"-  c #282422",
+";  c #2C2A24",
+":  c #353026",
+">  c #3E3725",
+",  c #2F2E33",
+"<  c #343132",
+"1  c #3D3A34",
+"2  c #3B383B",
+"3  c #423926",
+"4  c #454213",
+"5  c #434018",
+"6  c #5C5620",
+"7  c #4E473F",
+"8  c #786A27",
+"9  c #796932",
+"0  c #3E3C41",
+"q  c #48464E",
+"w  c #4A484E",
+"e  c #554B41",
+"r  c #5C544B",
+"t  c #535155",
+"y  c #64594C",
+"u  c #695D4C",
+"i  c #715D46",
+"p  c #74624D",
+"a  c #79634A",
+"s  c #766752",
+"d  c #7C6E56",
+"f  c #7C6F5C",
+"g  c #7D715C",
+"h  c #5D5B6B",
+"j  c #636173",
+"k  c #F60809",
+"l  c #F50E10",
+"z  c #ED191E",
+"x  c #F51113",
+"c  c #F3181D",
+"v  c #F21C22",
+"b  c #F0232A",
+"n  c #EF2C35",
+"m  c #EF2F39",
+"M  c #ED303B",
+"N  c #EB3D4A",
+"B  c #867559",
+"V  c #EA404E",
+"C  c #E94353",
+"Z  c #E84A5C",
+"A  c #E84E60",
+"S  c #E75164",
+"D  c #E45B70",
+"F  c #E36179",
+"G  c #AFAA0D",
+"H  c #BFBC0D",
+"J  c #BAB610",
+"K  c #C6C20D",
+"L  c #CBC70F",
+"P  c #D8D30D",
+"I  c #CECB10",
+"U  c #E6DA1F",
+"Y  c #E8E40D",
+"T  c #CCC42A",
+"R  c #D4CC24",
+"E  c #D0C828",
+"W  c #9C8C6E",
+"Q  c #9E8D70",
+"!  c #A38D66",
+"~  c #B39763",
+"^  c #A09074",
+"/  c #A8997F",
+"(  c #B9A47E",
+")  c #CAA854",
+"_  c #CAAC75",
+"`  c #D5B372",
+"'  c #D8B573",
+"]  c #D4B478",
+"[  c #D9B779",
+"{  c #DDBD7F",
+"}  c #706E85",
+"|  c #78768C",
+" . c #757490",
+".. c #7C7B93",
+"X. c #DF738F",
+"o. c #DE7693",
+"O. c #DD7D9B",
+"+. c #E16A84",
+"@. c #E16E88",
+"#. c #E0708B",
+"$. c #994FD7",
+"%. c #9D4CDF",
+"&. c #9E52DC",
+"*. c #A055DD",
+"=. c #A15CDC",
+"-. c #9D4AE0",
+";. c #A156E2",
+":. c #83829C",
+">. c #8B8AAA",
+",. c #908FB1",
+"<. c #9594B7",
+"1. c #B795BA",
+"2. c #C1AC89",
+"3. c #D7BC8A",
+"4. c #DC82A2",
+"5. c #DB87A8",
+"6. c #DA8CAE",
+"7. c #D894B9",
+"8. c #D799BF",
+"9. c #D898BD",
+"0. c #DEC18A",
+"q. c #E3C58F",
+"w. c #EBD09E",
+"e. c #E4CCA2",
+"r. c #F1D6A9",
+"t. c #F4DAAB",
+"y. c #F9DDAB",
+"u. c #9D9CC3",
+"i. c #A7A6CF",
+"p. c #A6A6D0",
+"a. c #ABAAD5",
+"s. c #ADADD8",
+"d. c #B1B1DE",
+"f. c #B4B4E1",
+"g. c #BCBCEB",
+"h. c #D69CC3",
+"j. c #D4A2CB",
+"k. c #D4A9D3",
+"l. c #D3AFDA",
+"z. c #D2B2DE",
+"x. c #CFBDEC",
+"c. c #D1B4E1",
+"v. c #D0BAE8",
+"b. c #D7C6E9",
+"n. c #DACAEB",
+"m. c #C2C2F3",
+"M. c #CEC1F2",
+"N. c #CAC5FC",
+"B. c #CBCBFE",
+"V. c #FFFFFF",
 /* pixels */
-"    .......................XXX..",
-"   ..oooooooooooooooooooooXOOXo.",
-"  ...ooooooooooooooooooooX+XOXo.",
-" ....oooooooooooooooooooX+ at XXoo.",
-".....ooooooooooooooooooX+ at XXooo.",
-".oooooo#oooooooooooXXXX+ at XXoooo.",
-".oooooo#o#ooooooooX$@X+ at XXooooo.",
-".oooooo#o#oooooooX$@X+ at XXoooooo.",
-".ooo#oo#o#ooooooX$@X+ at XX@Xooooo.",
-".oooo#o#o#oooooX$@X+ at XX@@$Xoooo.",
-".ooooo##o#ooooX$@X+ at XXX@$$$Xooo.",
-".oooooo#o#ooooX at X+@XXoX%$$$$XXX.",
-".ooooooo##oooooX+XXXXX&$$$$$@XX.",
-".oooooooo#ooooX+X&$$$$$$$$$$@XX.",
-".ooooooooo#oooX at XXX@@@$$$$$$@XX.",
-".oooooooooo#oXXXoooXXX@@@@$$@XX.",
-".ooooooooooo#XooooooooXXXX@@@XX.",
-".oooooooooooo#ooooooooooooXXXXX.",
-".ooooooooooooo#ooooooooooooooXX.",
-".oooooooooooooo#ooooooooooooooo.",
-".ooooooooooooooo#oooooooooooooo.",
-".oooooooooooooooo#o###ooooooooo.",
-".ooooooooooooooooo#####oooooooo.",
-".oooooooooooooooo#######ooooooo.",
-".oooooooooooooooo#######ooooooo.",
-".oooooooooooooooo#######ooooooo.",
-".ooooooooooooooooo#####oooooooo.",
-".oooooooooooooooooo###ooooooooo.",
-".oooooooooooooooooooooooooooooo.",
-".oooooooooooooooooooooooooooooo.",
-".oooooooooooooooooooooooooooooo.",
-"................................"};
+"V.V.V.n.*.*.*.*.&.&.&.=.&.&.=.&.&.=.&.=.&.&.&.&.=.&.&.&.=.&.&.;.",
+"V.V.n.*.;.N.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.d.; ..B.B.B.&.",
+"V.n.*.;.-.N.B.z.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.d.+ J 6 | B.B.&.",
+"b.*.;.%.-.B.z.k 7.B.B.B.B.B.B.B.B.B.B.B.B.B.B.a.+ L T p - B.B.&.",
+";.;.-.-.-.N.4.k M.B.B.B.B.B.B.B.B.B.B.N.g.m.i.+ I E a : s.B.B.&.",
+"&.N.N.N.N.B.A M B.B.o.c.B.B.B.B.B.B.d.2 r ; . I E a : s.B.B.B.&.",
+"*.B.B.B.B.B.v F B.k.k 8.B.B.B.B.B.u.1 0.3.@ L E p : d.B.B.B.B.&.",
+"*.B.B.B.B.l.k 7.B.o.l N.B.B.B.B.:.7 0.' > K R i O u.B.B.B.B.B.&.",
+"*.B.M.6.B.O.k M.B.C N B.B.B.B.} y { ` 3 H R i @ W 0 B.B.B.B.B.&.",
+"*.B.z.b #.Z M B.B.c @.B.B.B.} f [ ~ % P R a # _ t.^ h B.B.B.B.&.",
+"&.B.B.v.n x F B.j.k j.B.B.g.y ` ! $ Y R a : 7 { t.t.g h B.B.B.&.",
+"*.B.B.B.M.M A B.#.x M.B.N.p.7 e & Y R a :  .W w.t.t.y.Q w <.,.&.",
+"=.B.B.B.B.M.V C V V B.B.B.B.:.4 G 5 + o < g e.t.t.y.y.y.( o   $.",
+"&.B.B.B.B.B.B.A c X.B.B.B.N.= U * / 2.0.0.0.w.r.t.y.y.y.w.o   $.",
+"*.B.B.B.B.B.B.B.D m b.B.B.>.8 ) 9 @ 1 r s _ ` ` q.t.y.y.w.o   $.",
+"=.B.B.B.B.B.B.B.B.+.b c.B.1 & = t d.B.B.g.j p ` ` ` { 0.{ o   $.",
+"=.B.B.B.B.B.B.B.B.B.4.v 1.: ..m.B.B.B.B.B.B.f.q B ] ` ` ` X   $.",
+"=.B.B.B.B.B.B.B.B.B.B.5.z j.B.B.B.B.B.B.B.B.B.B.p.w u ! d o   $.",
+"=.B.B.B.B.B.B.B.B.B.B.B.7.c 9.B.B.B.B.B.B.B.B.B.B.B.m.u.a.,   $.",
+"=.B.B.B.B.B.B.B.B.B.B.B.B.j.c 6.B.B.B.B.B.B.B.B.B.B.B.B.B.g.g.&.",
+"*.B.B.B.B.B.B.B.B.B.B.B.B.B.l.c 4.B.B.B.B.B.B.B.B.B.B.B.B.B.B.&.",
+"=.B.B.B.B.B.B.B.B.B.B.B.B.B.B.b.b X.B.B.B.B.B.B.B.B.B.B.B.B.B.&.",
+"*.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.v.n F B.B.M.x.B.B.B.B.B.B.B.B.&.",
+"=.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.b.M Z D l k S l.B.B.B.B.B.B.&.",
+"*.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.M.v k k k k b B.B.B.B.B.B.=.",
+"=.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.z.k k k k k k 9.B.B.B.B.B.&.",
+"*.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.5.k k k k k k @.B.B.B.B.B.=.",
+"=.M.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.b.k k k k k k z.B.B.B.B.B.&.",
+"=.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.D k k k k V B.B.B.B.B.B.*.",
+"=.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.h.Z V 7.B.B.B.B.B.B.B.*.",
+"=.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.*.",
+"&.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.%."
+};
diff --git a/share/metview/icons/XAVERAGE.xpm b/share/metview/icons/MXAVERAGE.xpm
similarity index 100%
copy from share/metview/icons/XAVERAGE.xpm
copy to share/metview/icons/MXAVERAGE.xpm
diff --git a/share/metview/icons/MAVERAGEVIEW.xpm b/share/metview/icons/MXAVERAGEVIEW.xpm
old mode 100644
new mode 100755
similarity index 100%
copy from share/metview/icons/MAVERAGEVIEW.xpm
copy to share/metview/icons/MXAVERAGEVIEW.xpm
diff --git a/share/metview/icons/XSECTION.xpm b/share/metview/icons/MXSECTION.xpm
similarity index 100%
copy from share/metview/icons/XSECTION.xpm
copy to share/metview/icons/MXSECTION.xpm
diff --git a/share/metview/icons/MXSECTVIEW.xpm b/share/metview/icons/MXSECTIONVIEW.xpm
old mode 100644
new mode 100755
similarity index 100%
copy from share/metview/icons/MXSECTVIEW.xpm
copy to share/metview/icons/MXSECTIONVIEW.xpm
diff --git a/share/metview/icons/Makefile.am b/share/metview/icons/Makefile.am
index 682f621..4466851 100644
--- a/share/metview/icons/Makefile.am
+++ b/share/metview/icons/Makefile.am
@@ -1,28 +1,33 @@
 svg_icons = \
-	BINNING.svg \
-	BUFR.svg \
-	BUFRPICKER.svg \
-	CARTESIANVIEW.svg \
-	FOLDER.svg \
-	GEO_TO_GRIB.svg \
-	INPUTVISUALISER.svg \
-	KML.svg \
-	MLEGEND.svg \
-	NAMELIST.svg \
-	NOTES.svg  NETCDF.svg NETCDFPLUS.svg \
-	OBSFILTER.svg \
-	POBS.svg \
-	PDF.svg PNG.svg PSFILE.svg \
-	READ_TIGGE.svg RETRIEVE_TIGGE.svg \
-	SCM_INPUT_DATA.svg SCM_OUTPUT_DATA.svg SCM_RUN.svg SCM_VIS.svg \
-	SQL.svg SVG.svg SYSTEM.svg \
-	TABLE.svg TABLEREADER.svg TABLEVISUALISER.svg \
-	WASTEBASKET.svg
+        BINNING.svg \
+        BUFR.svg \
+        BUFRPICKER.svg \
+        FLEXTRA_PREPARE.svg FLEXTRA_RUN.svg FLEXTRA_FILE.svg FLEXTRA_VISUALISER.svg \
+        FOLDER.svg \
+        GEO_TO_GRIB.svg GRIB_TO_GEO.svg \
+        INPUTVISUALISER.svg \
+        KML.svg \
+        MCOAST.svg MCONT.svg MGRAPH.svg MLEGEND.svg MSYMB.svg MTEXT.svg MWIND.svg \
+        NAMELIST.svg \
+        NOTES.svg  NETCDF.svg NETCDFPLUS.svg \
+        NETCDF_RTTOV_INPUT.svg \
+        OBSFILTER.svg \
+        ODB_DB.svg ODB_FILTER.svg ODB_VISUALISER.svg \
+        POBS.svg \
+        PDF.svg PNG.svg PSFILE.svg \
+        READ_TIGGE.svg RETRIEVE_TIGGE.svg \
+        RTTOV_OUTPUT_FILE.svg RTTOV_RUN.svg RTTOV_VISUALISER.svg \
+        SCM_INPUT_DATA.svg SCM_OUTPUT_DATA.svg SCM_RUN.svg SCM_VIS.svg \
+        SQL.svg SVG.svg SYSTEM.svg \
+        TABLE.svg TABLEREADER.svg TABLEVISUALISER.svg \
+        WASTEBASKET.svg
 
 icons =  ALIGN_BOTTOM.xpm \
          ALIGN_LEFT.xpm \
          ALIGN_RIGHT.xpm \
          ALIGN_TOP.xpm \
+         ANNOTATIONVIEW.xpm \
+         AVERAGE.xpm AVERAGEVIEW.xpm \
          BINARY.xpm \
          BINNING.xpm \
          BUFR.xpm \
@@ -35,7 +40,7 @@ icons =  ALIGN_BOTTOM.xpm \
          DRAWING_PRIORITY.xpm \
          ECFS.xpm \
          FLEXTRA_PREPARE.xpm FLEXTRA_RUN.xpm FLEXTRA_FILE.xpm FLEXTRA_VISUALISER.xpm \
-	 FOLDER.xpm \
+         FOLDER.xpm \
          GDDRIVER.xpm \
          GEOPOINTS.xpm \
          GEOVIEW.xpm \
@@ -50,7 +55,7 @@ icons =  ALIGN_BOTTOM.xpm \
          help_map.xpm \
          help_point.xpm \
          help_station.xpm \
-         HOVMOELLERDATA.xpm \
+         HOVMOELLERDATA.xpm HOVMOELLERVIEW.xpm \
          INPUTVISUALISER.xpm \
          JPEG.xpm \
          LLMATRIX.xpm \
@@ -59,23 +64,24 @@ icons =  ALIGN_BOTTOM.xpm \
          MACROPARAM.xpm \
          MAGML.xpm \
          MAPVIEW.xpm \
-         MAVERAGEVIEW.xpm \
          MCOAST.xpm \
          MCONT.xpm \
          MGRAPH.xpm \
+         MHOVMOELLERDATA.xpm MHOVMOELLERVIEW.xpm \
          MLEGEND.xpm \
          MTEXT.xpm \
          MSYMB.xpm \
-         MVPROFVIEW.xpm \
-         MXSECTVIEW.xpm \
+         MXAVERAGE.xpm MXAVERAGEVIEW.xpm \
+         MVPROFILE.xpm MVPROFILEVIEW.xpm \
+         MXSECTION.xpm MXSECTIONVIEW.xpm \
          MWIND.xpm \
          NAMELIST.xpm \
-         NETCDF.xpm \
+         NETCDF.xpm NETCDF_RTTOV_INPUT.xpm \
          NETCDFPLUS.xpm \
          NEWS.xpm \
          NOTE.xpm \
          OBSFILTER.xpm \
-         ODB_DB.xpm \
+         ODB_DB.xpm ODB_FILTER.xpm ODB_VISUALISER.xpm \
          BUFRPICKER.xpm \
          OVERLAY_CONTROL.xpm \
          PAXIS.xpm \
@@ -98,10 +104,12 @@ icons =  ALIGN_BOTTOM.xpm \
          PWIND.xpm \
          READ.xpm \
          READ_TIGGE.xpm \
+         RELHUM.xpm \
          RETRIEVE.xpm \
          RETRIEVE_TIGGE.xpm \
+         RTTOV_OUTPUT_FILE.xpm RTTOV_RUN.xpm RTTOV_VISUALISER.xpm \
          SCM_INPUT_DATA.xpm  SCM_OUTPUT_DATA.xpm SCM_RUN.xpm SCM_VIS.xpm \
-	 SERVICE.xpm \
+         SERVICE.xpm \
          SHELL.xpm \
          SIMPLE_FORMULA.xpm \
          SQL.xpm \
@@ -115,11 +123,11 @@ icons =  ALIGN_BOTTOM.xpm \
          TABLEREADER.xpm \
          TABLEVISUALISER.xpm \
          TAR.xpm \
+         MTAYLOR.xpm \
          TIFF.xpm \
          VELSTR.xpm \
-         VPROFILE.xpm \
-         XAVERAGE.xpm \
-         XSECTION.xpm \
+         VPROF.xpm VPROFVIEW.xpm \
+         XSECT.xpm XSECTVIEW.xpm \
          WASTEBASKET.xpm
 
 
@@ -132,8 +140,9 @@ if !METVIEW_EXTERNAL
 endif
 endif
 
-if METVIEW_ODB
-    icons += ODB_FILTER.xpm ODB_VISUALISER.xpm
+if METVIEW_ECREGRID
+    icons += Interpolation.xpm RETRIEVE_ECREGRID.xpm READ_ECREGRID.xpm
+    svg_icons += Interpolation.svg RETRIEVE_ECREGRID.svg READ_ECREGRID.svg
 endif
 
 if METVIEW_MARS_ODB
diff --git a/share/metview/icons/Makefile.in b/share/metview/icons/Makefile.in
index 30319a8..c825443 100644
--- a/share/metview/icons/Makefile.in
+++ b/share/metview/icons/Makefile.in
@@ -39,12 +39,13 @@ target_triplet = @target@
 #  ---------- start of module-specific icons -------------
 @METVIEW_MAGICS_TRUE at am__append_1 = KML.xpm REPROJECTION.xpm
 @METVIEW_EXTERNAL_FALSE@@METVIEW_MAGICS_TRUE at am__append_2 = MetPlus.xpm
- at METVIEW_ODB_TRUE@am__append_3 = ODB_FILTER.xpm ODB_VISUALISER.xpm
- at METVIEW_MARS_ODB_TRUE@am__append_4 = ODB_MARS.xpm
- at METVIEW_OBSTAT_TRUE@am__append_5 = OBSTAT_SCATTER.xpm OBSTAT_CURVE.xpm OBSTAT.xpm
- at METVIEW_OPERA_TRUE@am__append_6 = OPERA_RADAR_FILTER.xpm
- at METVIEW_QT_TRUE@am__append_7 = WMS_CLIENT.xpm WCS_CLIENT.xpm
- at METVIEW_GUI_TRUE@am__append_8 = WEBACCESS.xpm
+ at METVIEW_ECREGRID_TRUE@am__append_3 = Interpolation.xpm RETRIEVE_ECREGRID.xpm READ_ECREGRID.xpm
+ at METVIEW_ECREGRID_TRUE@am__append_4 = Interpolation.svg RETRIEVE_ECREGRID.svg READ_ECREGRID.svg
+ at METVIEW_MARS_ODB_TRUE@am__append_5 = ODB_MARS.xpm
+ at METVIEW_OBSTAT_TRUE@am__append_6 = OBSTAT_SCATTER.xpm OBSTAT_CURVE.xpm OBSTAT.xpm
+ at METVIEW_OPERA_TRUE@am__append_7 = OPERA_RADAR_FILTER.xpm
+ at METVIEW_QT_TRUE@am__append_8 = WMS_CLIENT.xpm WCS_CLIENT.xpm
+ at METVIEW_GUI_TRUE@am__append_9 = WEBACCESS.xpm
 subdir = share/metview/icons
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -116,6 +117,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -131,6 +133,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -157,11 +161,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -289,55 +296,52 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-svg_icons = \
-	BINNING.svg \
-	BUFR.svg \
-	BUFRPICKER.svg \
-	CARTESIANVIEW.svg \
-	FOLDER.svg \
-	GEO_TO_GRIB.svg \
-	INPUTVISUALISER.svg \
-	KML.svg \
-	MLEGEND.svg \
-	NAMELIST.svg \
-	NOTES.svg  NETCDF.svg NETCDFPLUS.svg \
-	OBSFILTER.svg \
-	POBS.svg \
-	PDF.svg PNG.svg PSFILE.svg \
-	READ_TIGGE.svg RETRIEVE_TIGGE.svg \
+svg_icons = BINNING.svg BUFR.svg BUFRPICKER.svg FLEXTRA_PREPARE.svg \
+	FLEXTRA_RUN.svg FLEXTRA_FILE.svg FLEXTRA_VISUALISER.svg \
+	FOLDER.svg GEO_TO_GRIB.svg GRIB_TO_GEO.svg INPUTVISUALISER.svg \
+	KML.svg MCOAST.svg MCONT.svg MGRAPH.svg MLEGEND.svg MSYMB.svg \
+	MTEXT.svg MWIND.svg NAMELIST.svg NOTES.svg NETCDF.svg \
+	NETCDFPLUS.svg NETCDF_RTTOV_INPUT.svg OBSFILTER.svg ODB_DB.svg \
+	ODB_FILTER.svg ODB_VISUALISER.svg POBS.svg PDF.svg PNG.svg \
+	PSFILE.svg READ_TIGGE.svg RETRIEVE_TIGGE.svg \
+	RTTOV_OUTPUT_FILE.svg RTTOV_RUN.svg RTTOV_VISUALISER.svg \
 	SCM_INPUT_DATA.svg SCM_OUTPUT_DATA.svg SCM_RUN.svg SCM_VIS.svg \
-	SQL.svg SVG.svg SYSTEM.svg \
-	TABLE.svg TABLEREADER.svg TABLEVISUALISER.svg \
-	WASTEBASKET.svg
-
+	SQL.svg SVG.svg SYSTEM.svg TABLE.svg TABLEREADER.svg \
+	TABLEVISUALISER.svg WASTEBASKET.svg $(am__append_4)
 icons = ALIGN_BOTTOM.xpm ALIGN_LEFT.xpm ALIGN_RIGHT.xpm ALIGN_TOP.xpm \
-	BINARY.xpm BINNING.xpm BUFR.xpm CARTESIANVIEW.xpm \
-	CLEANFILE.xpm COMPUTE.xpm DATACOVERAGE.xpm DISTR_HCENTER.xpm \
+	ANNOTATIONVIEW.xpm AVERAGE.xpm AVERAGEVIEW.xpm BINARY.xpm \
+	BINNING.xpm BUFR.xpm CARTESIANVIEW.xpm CLEANFILE.xpm \
+	COMPUTE.xpm DATACOVERAGE.xpm DISTR_HCENTER.xpm \
 	DISTR_VCENTER.xpm DRAWING_PRIORITY.xpm ECFS.xpm \
 	FLEXTRA_PREPARE.xpm FLEXTRA_RUN.xpm FLEXTRA_FILE.xpm \
 	FLEXTRA_VISUALISER.xpm FOLDER.xpm GDDRIVER.xpm GEOPOINTS.xpm \
 	GEOVIEW.xpm GEO_TO_GRIB.xpm GIF.xpm GRIB.xpm GRIB_TO_GEO.xpm \
 	GRIBVECTORS.xpm GeoToKML.xpm help_area.xpm help_line.xpm \
 	help_map.xpm help_point.xpm help_station.xpm \
-	HOVMOELLERDATA.xpm INPUTVISUALISER.xpm JPEG.xpm LLMATRIX.xpm \
-	lock_icon.xpm MACRO.xpm MACROPARAM.xpm MAGML.xpm MAPVIEW.xpm \
-	MAVERAGEVIEW.xpm MCOAST.xpm MCONT.xpm MGRAPH.xpm MLEGEND.xpm \
-	MTEXT.xpm MSYMB.xpm MVPROFVIEW.xpm MXSECTVIEW.xpm MWIND.xpm \
-	NAMELIST.xpm NETCDF.xpm NETCDFPLUS.xpm NEWS.xpm NOTE.xpm \
-	OBSFILTER.xpm ODB_DB.xpm BUFRPICKER.xpm OVERLAY_CONTROL.xpm \
+	HOVMOELLERDATA.xpm HOVMOELLERVIEW.xpm INPUTVISUALISER.xpm \
+	JPEG.xpm LLMATRIX.xpm lock_icon.xpm MACRO.xpm MACROPARAM.xpm \
+	MAGML.xpm MAPVIEW.xpm MCOAST.xpm MCONT.xpm MGRAPH.xpm \
+	MHOVMOELLERDATA.xpm MHOVMOELLERVIEW.xpm MLEGEND.xpm MTEXT.xpm \
+	MSYMB.xpm MXAVERAGE.xpm MXAVERAGEVIEW.xpm MVPROFILE.xpm \
+	MVPROFILEVIEW.xpm MXSECTION.xpm MXSECTIONVIEW.xpm MWIND.xpm \
+	NAMELIST.xpm NETCDF.xpm NETCDF_RTTOV_INPUT.xpm NETCDFPLUS.xpm \
+	NEWS.xpm NOTE.xpm OBSFILTER.xpm ODB_DB.xpm ODB_FILTER.xpm \
+	ODB_VISUALISER.xpm BUFRPICKER.xpm OVERLAY_CONTROL.xpm \
 	PAXIS.xpm MAXIS.xpm PCOAST.xpm PCONT.xpm PDF.xpm \
 	PERCENTILE.xpm PGRAPH.xpm PLOTPAGE.xpm PLOTSUBPAGE.xpm PNG.xpm \
 	POBS.xpm POTTF.xpm DIVROT.xpm PSOUTPUT.xpm PSFILE.xpm \
 	PSYMB.xpm PTEXT.xpm PWIND.xpm READ.xpm READ_TIGGE.xpm \
-	RETRIEVE.xpm RETRIEVE_TIGGE.xpm SCM_INPUT_DATA.xpm \
-	SCM_OUTPUT_DATA.xpm SCM_RUN.xpm SCM_VIS.xpm SERVICE.xpm \
-	SHELL.xpm SIMPLE_FORMULA.xpm SQL.xpm STATIONS.xpm \
+	RELHUM.xpm RETRIEVE.xpm RETRIEVE_TIGGE.xpm \
+	RTTOV_OUTPUT_FILE.xpm RTTOV_RUN.xpm RTTOV_VISUALISER.xpm \
+	SCM_INPUT_DATA.xpm SCM_OUTPUT_DATA.xpm SCM_RUN.xpm SCM_VIS.xpm \
+	SERVICE.xpm SHELL.xpm SIMPLE_FORMULA.xpm SQL.xpm STATIONS.xpm \
 	SUBPAGEDETAILS.xpm SUPERPAGE.xpm SVG.xpm SVGOUTPUT.xpm \
 	SYSTEM.xpm TABLE.xpm TABLEREADER.xpm TABLEVISUALISER.xpm \
-	TAR.xpm TIFF.xpm VELSTR.xpm VPROFILE.xpm XAVERAGE.xpm \
-	XSECTION.xpm WASTEBASKET.xpm $(am__append_1) $(am__append_2) \
-	$(am__append_3) $(am__append_4) $(am__append_5) \
-	$(am__append_6) $(am__append_7) $(am__append_8)
+	TAR.xpm MTAYLOR.xpm TIFF.xpm VELSTR.xpm VPROF.xpm \
+	VPROFVIEW.xpm XSECT.xpm XSECTVIEW.xpm WASTEBASKET.xpm \
+	$(am__append_1) $(am__append_2) $(am__append_3) \
+	$(am__append_5) $(am__append_6) $(am__append_7) \
+	$(am__append_8) $(am__append_9)
 
 #  ---------- end of module-specific icons -------------
 icons_dot_icon = $(icons:.xpm=.icon)      # e.g. FOLDER.xpm -> FOLDER.icon
diff --git a/share/metview/icons/NETCDF_RTTOV_INPUT.xpm b/share/metview/icons/NETCDF_RTTOV_INPUT.xpm
new file mode 100644
index 0000000..fe87b3c
--- /dev/null
+++ b/share/metview/icons/NETCDF_RTTOV_INPUT.xpm
@@ -0,0 +1,221 @@
+/* XPM */
+static char *NETCDF_RTTOV_INPUT[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 183 2",
+"   c #213F46",
+".  c #324D55",
+"X  c #334E56",
+"o  c #355057",
+"O  c #38535A",
+"+  c #3D575D",
+"@  c #215C6B",
+"#  c #2B6472",
+"$  c #2D6573",
+"%  c #326977",
+"&  c #356B78",
+"*  c #376C7A",
+"=  c #465E65",
+"-  c #41497B",
+";  c #656060",
+":  c #797474",
+">  c #7D7878",
+",  c #7E7A7A",
+"<  c #827D7D",
+"1  c #837F7F",
+"2  c #457783",
+"3  c #566091",
+"4  c #5A6291",
+"5  c #5D6695",
+"6  c #51659F",
+"7  c #5E6999",
+"8  c #5A699F",
+"9  c #6A7E83",
+"0  c #6E759E",
+"q  c #4F6AAB",
+"w  c #5568A1",
+"e  c #576AA4",
+"r  c #586BA1",
+"t  c #5E71A8",
+"y  c #5E76B2",
+"u  c #5C78B7",
+"i  c #5E79B7",
+"p  c #5E7AB9",
+"a  c #5F7BBB",
+"s  c #6471A1",
+"d  c #6373A7",
+"f  c #6473A7",
+"g  c #6B75A1",
+"h  c #6D77A3",
+"j  c #6877A7",
+"k  c #767FA9",
+"l  c #5D7EC3",
+"z  c #53818C",
+"x  c #6A929C",
+"c  c #6B929D",
+"v  c #6E959F",
+"b  c #7C9FA8",
+"n  c #7EA1A9",
+"m  c #5E81C6",
+"M  c #5B81CA",
+"N  c #5D83CC",
+"B  c #5E84CC",
+"V  c #5C85D0",
+"C  c #5F8EDE",
+"Z  c #6090E0",
+"A  c #6191E3",
+"S  c #6295E7",
+"D  c #6498EC",
+"F  c #6599EE",
+"G  c #679EF4",
+"H  c #689FF5",
+"J  c #68A0F7",
+"K  c #69A3FA",
+"L  c #6AA4FC",
+"P  c #6BA6FF",
+"I  c #888484",
+"U  c #8B8787",
+"Y  c #8E8B8B",
+"T  c #908C8C",
+"R  c #829F99",
+"E  c #939090",
+"W  c #979393",
+"Q  c #9A9696",
+"!  c #9F9B9B",
+"~  c #A09C9C",
+"^  c #A29E9E",
+"/  c #87A39E",
+"(  c #8288AB",
+")  c #8F9EA2",
+"_  c #838BB0",
+"`  c #8E95B5",
+"'  c #989AB4",
+"]  c #8BA7A1",
+"[  c #8CA7A1",
+"{  c #8CA7A2",
+"}  c #8FAAA5",
+"|  c #97A5A8",
+" . c #92AFB6",
+".. c #99A0BD",
+"X. c #9AA1BE",
+"o. c #A6A2A2",
+"O. c #AAA7A7",
+"+. c #ADAAAA",
+"@. c #A1B7B2",
+"#. c #A6BBB6",
+"$. c #A7BCB8",
+"%. c #A8BCB8",
+"&. c #A8BCB9",
+"*. c #AABEB9",
+"=. c #B3B1B1",
+"-. c #B5B3B3",
+";. c #B6B4B4",
+":. c #B9B7B7",
+">. c #BDBCBC",
+",. c #ACC0BC",
+"<. c #A1A6C1",
+"1. c #A3A8C2",
+"2. c #A6AAC2",
+"3. c #ACAEC2",
+"4. c #AEB1C8",
+"5. c #B4C5C2",
+"6. c #B9C9C6",
+"7. c #B9CAC6",
+"8. c #BECCC9",
+"9. c #BFC1D1",
+"0. c #C2C0C0",
+"q. c #C5C3C3",
+"w. c #C7C4C4",
+"e. c #C9C7C7",
+"r. c #CBC9C9",
+"t. c #CDCBCB",
+"y. c #CECCCC",
+"u. c #C4C7D7",
+"i. c #CCCDDA",
+"p. c #C5D2D0",
+"a. c #C0D1D5",
+"s. c #CAD6D4",
+"d. c #C7D6D9",
+"f. c #CFD0DC",
+"g. c #D4D2D2",
+"h. c #D7D6D6",
+"j. c #D0DCD9",
+"k. c #D9D8D8",
+"l. c #DAD8D8",
+"z. c #DBD9D9",
+"x. c #DCDADA",
+"c. c #DCDBDB",
+"v. c #DEDDDD",
+"b. c #D5D7E2",
+"n. c #D2DEE1",
+"m. c #D8D9E3",
+"M. c #D9E1E0",
+"N. c #DBE4E2",
+"B. c #DFE6E4",
+"V. c #E2E0E0",
+"C. c #E4E3E3",
+"Z. c #E0E7E5",
+"A. c #E5E4E4",
+"S. c #E7E7E7",
+"D. c #E1E8E6",
+"F. c #E1E8E7",
+"G. c #E6E6ED",
+"H. c #E4EAEA",
+"J. c #E6EBEA",
+"K. c #E7EDEB",
+"L. c #E8E8E8",
+"P. c #E9E9EF",
+"I. c #E9EAEF",
+"U. c #E8EEEC",
+"Y. c #E9EEED",
+"T. c #EDEDED",
+"R. c #EEEEEE",
+"E. c #EBF0EF",
+"W. c #EFEFF3",
+"Q. c #EDF2F1",
+"!. c #F3F3F3",
+"~. c #F1F1F4",
+"^. c #F1F5F4",
+"/. c #F7F6F6",
+"(. c #F6F6F8",
+"). c #F6F8F8",
+"_. c #F7F9F9",
+"`. c #F9F9FB",
+"'. c #FBFCFB",
+"]. c #FBFCFD",
+"[. c #FDFCFC",
+"{. c #FCFCFD",
+"}. c #FFFFFF",
+/* pixels */
+"}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.",
+"}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.",
+"}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.",
+"P.3 f f f d j h b.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.",
+"G.a L L H L L L r G.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.",
+"G.a L B 0 k a L Z <.}.}.) 9 9 9 | }.d.c x x v ~.).,.#.#.#.7.}.}.",
+"G.a L B 3.9.t L C 1.}.}..       O }.b @ @ @ # a.E.] R R R ] }.}.",
+"G.a L D m V K K 8 P.}.}.o       O }.b @ @ @ $ 8.E.{ R R R ] }.}.",
+"G.i L S l L A + f.[.[.}..       O }.b @ @ @ $ a.E.{ / R R { }.}.",
+"G.a L B ' y L G f [.}.}.+ . . . = }. .$ % % # n.^./ { / / } }.}.",
+"P.a L B i._ F L l u.}.}.}.).`.`.}.}.}.}.}.}.}.}.}.}.`.'.`.}.}.}.",
+"G.a L B i.Q.t L L s }.}.c 2 2 2  .}.M.5.5.5.5.J.}.Y.D.D.D.E.}.}.",
+"Y.5 s 7 b.}...s s 4 m.}.& @ @ @ 2 }.8. at .@. at .@.j.}.Z.N.N.N.Z.}.}.",
+"}.}.}.}.}.}.}.}.}.}.}.}.& @ @ @ z }.8. at .@. at .@.j.}.Z.N.N.N.D.}.}.",
+"].2.1.2.1.2.1.1.2.4.}.}.& @ @ @ z }.8. at .@. at .@.j.}.Z.N.N.N.Z.}.}.",
+"/.w A A A A A A Z 8 }.}.z & & * n }.s.&.%.$.#.M.}.K.B.B.B.K.}.}.",
+"(.e S S J L H S S 8 }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.'.).).).).}.}.",
+"].....( M L i ` ..<.}.`.#.&.$.$.&.}.Q.B.B.B.N.'.}.J.H.J.P.B.}.}.",
+"}.}.}.f.M L i P.}.}.}./.&. at .@. at .$.}.Q.B.N.N.B.'.}.H.B.D.Z.B.}.}.",
+"}.}.}.f.N L a Y.}.}.}._.&. at .@. at .$.}.Q.N.N.N.B.`.}.H.B.Z.Z.B.}.}.",
+"}.}.}.f.M L a P.}.}.}.).$. at .@. at .$.}.Q.N.N.N.B.`.}.J.Z.B.D.J.}.}.",
+"}.}.}.f.M L i P.}.}.}.].8.7.7.6.p.}.).Y.Y.K.Y.}.}.).^.^.^.^.}.}.",
+"}.}.}.f.M L i P.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.",
+"}.}.}.f.q N 6 P.}.}.}.}.}.}.}.}.}.t.}.z.U Y S.q.1 1 ;.}.E I I k.",
+"}.}.}.~.9.4.u.}.}.}.v.e.T.}.z.V./.: L., }.!.O.;.h.}.Y C.Y }.}.}.",
+"}.}.}.}.}.}.}.}.}.}.; y.Y t.+.! v.1 x.~ }.}.}.;.h.}.q.>., Q Q }.",
+"}.}.}.}.}.}.}.}.}.}.Y }.T Q W T e.E !.W }.}.z.-.h.}.0.0.U T.Y.}.",
+"}.}.}.}.}.}.}.}.}.}.E }.W >.w.t.x.T _.1 C.e.! -.q.v.> !.Y }.}.}.",
+"}.}.}.}.}.}.}.}.}.}.e.}.w.}.:.=.}.w.g.T.o.-.`.z.~ o.V.}.q.}.}.}.",
+"}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.",
+"}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.",
+"}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}."
+};
diff --git a/share/metview/icons/ODB_DB.xpm b/share/metview/icons/ODB_DB.xpm
index 4319c67..7e15fda 100755
--- a/share/metview/icons/ODB_DB.xpm
+++ b/share/metview/icons/ODB_DB.xpm
@@ -1,558 +1,172 @@
 /* XPM */
-static char * ODB_DB_xpm[] = {
-"32 32 523 2",
-"  	c None",
-". 	c #FFFFFF",
-"+ 	c #F4F5FA",
-"@ 	c #D4D9EC",
-"# 	c #B4BDDD",
-"$ 	c #95A3CF",
-"% 	c #8A98CA",
-"& 	c #8191C6",
-"* 	c #7888C2",
-"= 	c #7083BF",
-"- 	c #7082BF",
-"; 	c #7183BF",
-"> 	c #798AC3",
-", 	c #8392C7",
-"' 	c #8E9CCC",
-") 	c #98A4D1",
-"! 	c #B5BDDE",
-"~ 	c #D6DAEC",
-"{ 	c #FEFEFE",
-"] 	c #D1D6EA",
-"^ 	c #8694C8",
-"/ 	c #697BBB",
-"( 	c #6F81BD",
-"_ 	c #7E91C1",
-": 	c #8BA1C5",
-"< 	c #9CB2CC",
-"[ 	c #A4BBD0",
-"} 	c #ABC4D3",
-"| 	c #B4CCD6",
-"1 	c #BAD4DA",
-"2 	c #BDD7DC",
-"3 	c #BFDADE",
-"4 	c #C1DBDF",
-"5 	c #BFD7DD",
-"6 	c #BAD0DA",
-"7 	c #B5CAD9",
-"8 	c #B0C2D6",
-"9 	c #9DAFCE",
-"0 	c #899AC8",
-"a 	c #7384BF",
-"b 	c #6C7EBD",
-"c 	c #8C9ACB",
-"d 	c #D5DAEC",
-"e 	c #B6BEDE",
-"f 	c #6A7CBC",
-"g 	c #788BBE",
-"h 	c #94AAC5",
-"i 	c #A8BDCC",
-"j 	c #AAC0CE",
-"k 	c #ACC3D0",
-"l 	c #AFC6D1",
-"m 	c #B1C9D3",
-"n 	c #B4CCD5",
-"o 	c #B6CFD7",
-"p 	c #B9D2D9",
-"q 	c #BBD5DB",
-"r 	c #BDD8DD",
-"s 	c #C0DBDF",
-"t 	c #C2DBDF",
-"u 	c #C4DCDF",
-"v 	c #C7DCE0",
-"w 	c #C9DDE0",
-"x 	c #CCDEE0",
-"y 	c #CEDEE0",
-"z 	c #D0DFE1",
-"A 	c #D3DFE1",
-"B 	c #D4E0E1",
-"C 	c #BAC5D7",
-"D 	c #8795C6",
-"E 	c #7282BF",
-"F 	c #BFC6E2",
-"G 	c #C3CAE4",
-"H 	c #7183BB",
-"I 	c #9DB2C6",
-"J 	c #A4B9C9",
-"K 	c #A6BBCA",
-"L 	c #A8BECC",
-"M 	c #ABC1CE",
-"N 	c #ADC4D0",
-"O 	c #B0C7D2",
-"P 	c #B2CAD4",
-"Q 	c #B4CDD6",
-"R 	c #B7D0D8",
-"S 	c #B9D3DA",
-"T 	c #BCD6DC",
-"U 	c #BED9DD",
-"V 	c #C3DBDF",
-"W 	c #C5DCDF",
-"X 	c #C8DDE0",
-"Y 	c #CADDE0",
-"Z 	c #CFDEE1",
-"` 	c #D1DFE1",
-" .	c #D6E0E2",
-"..	c #D8E1E2",
-"+.	c #DAE1E2",
-"@.	c #D4DAE0",
-"#.	c #7C8BC2",
-"$.	c #CFD4E9",
-"%.	c #5F71B7",
-"&.	c #97ACC3",
-"*.	c #A2B6C7",
-"=.	c #A7BCCB",
-"-.	c #A9BFCD",
-";.	c #ACC2CF",
-">.	c #AEC5D1",
-",.	c #B0C8D3",
-"'.	c #B3CBD5",
-").	c #B5CED6",
-"!.	c #B8D1D8",
-"~.	c #BCD7DC",
-"{.	c #C6DCDF",
-"].	c #CBDDE0",
-"^.	c #CDDEE0",
-"/.	c #D2DFE1",
-"(.	c #D9E1E2",
-"_.	c #DBE1E2",
-":.	c #DDE2E3",
-"<.	c #CAD0DC",
-"[.	c #6878BB",
-"}.	c #5568B4",
-"|.	c #6175B5",
-"1.	c #97AAC5",
-"2.	c #A5BACA",
-"3.	c #A7BDCC",
-"4.	c #ACC3CF",
-"5.	c #B8D2D9",
-"6.	c #C7DCDF",
-"7.	c #D5E0E1",
-"8.	c #D7E0E2",
-"9.	c #DCE2E2",
-"0.	c #C4CBD9",
-"a.	c #6476B6",
-"b.	c #5F70B6",
-"c.	c #596DB3",
-"d.	c #7691B2",
-"e.	c #5A6FB3",
-"f.	c #6377B7",
-"g.	c #879CC3",
-"h.	c #AFC7D2",
-"i.	c #BCD6DB",
-"j.	c #CEDEE1",
-"k.	c #D0DADF",
-"l.	c #A3AECE",
-"m.	c #6376B6",
-"n.	c #5A6CAF",
-"o.	c #868DA9",
-"p.	c #5D6FB4",
-"q.	c #5B6FB5",
-"r.	c #8EB0B3",
-"s.	c #98B8BB",
-"t.	c #87A2BC",
-"u.	c #6F86BB",
-"v.	c #5D70B5",
-"w.	c #5C70B6",
-"x.	c #687BBA",
-"y.	c #768DBF",
-"z.	c #8AA1C7",
-"A.	c #95ACCC",
-"B.	c #A2BBD1",
-"C.	c #B1CBD8",
-"D.	c #BFD9DD",
-"E.	c #C5DADE",
-"F.	c #BACFDB",
-"G.	c #AEC1D5",
-"H.	c #A3B5D0",
-"I.	c #97A9CC",
-"J.	c #8292C3",
-"K.	c #677BB9",
-"L.	c #586DB3",
-"M.	c #596DB2",
-"N.	c #6277AE",
-"O.	c #687FA0",
-"P.	c #8B979E",
-"Q.	c #A5A4A4",
-"R.	c #8FB0B4",
-"S.	c #A2C0C3",
-"T.	c #ABC8CA",
-"U.	c #B5D0D2",
-"V.	c #B7D0D7",
-"W.	c #A7BED4",
-"X.	c #91A7CE",
-"Y.	c #7E94C5",
-"Z.	c #7289C0",
-"`.	c #697EBB",
-" +	c #6075B7",
-".+	c #5A70B6",
-"++	c #576DB4",
-"@+	c #5A6FB5",
-"#+	c #5F74B5",
-"$+	c #647BB8",
-"%+	c #6B82B9",
-"&+	c #6F89BA",
-"*+	c #7C95BA",
-"=+	c #86A5B8",
-"-+	c #8BAAB2",
-";+	c #84A1A9",
-">+	c #7A95A0",
-",+	c #738C98",
-"'+	c #8D989E",
-")+	c #A7A4A4",
-"!+	c #8FB1B4",
-"~+	c #99B9BC",
-"{+	c #A2C1C3",
-"]+	c #ACC9CB",
-"^+	c #B5D1D3",
-"/+	c #BFD8DA",
-"(+	c #C8E0E2",
-"_+	c #D0E7E8",
-":+	c #CCE4E5",
-"<+	c #C9E2E2",
-"[+	c #C5DFDF",
-"}+	c #C1DCDD",
-"|+	c #BDD9DA",
-"1+	c #BAD6D7",
-"2+	c #B6D3D4",
-"3+	c #B2D0D1",
-"4+	c #AECECE",
-"5+	c #ABCBCB",
-"6+	c #A7C8C8",
-"7+	c #A3C5C5",
-"8+	c #9FC2C2",
-"9+	c #97B8BB",
-"0+	c #8DACB1",
-"a+	c #83A0A8",
-"b+	c #79949F",
-"c+	c #768D99",
-"d+	c #90999F",
-"e+	c #A9A6A5",
-"f+	c #5D70B4",
-"g+	c #90B1B5",
-"h+	c #9AB9BC",
-"i+	c #A3C1C4",
-"j+	c #B6D1D3",
-"k+	c #BFD9DB",
-"l+	c #C9E1E2",
-"m+	c #C8E1E2",
-"n+	c #C5DEDF",
-"o+	c #C1DCDC",
-"p+	c #BDD9D9",
-"q+	c #B9D6D6",
-"r+	c #AECDCE",
-"s+	c #AACBCB",
-"t+	c #96B8BA",
-"u+	c #8CABB1",
-"v+	c #829FA7",
-"w+	c #78939E",
-"x+	c #788E99",
-"y+	c #919A9F",
-"z+	c #ABA6A5",
-"A+	c #556AB3",
-"B+	c #8EAEB5",
-"C+	c #9ABABD",
-"D+	c #A4C2C4",
-"E+	c #ADCACC",
-"F+	c #B6D2D4",
-"G+	c #C0DADB",
-"H+	c #C9E1E3",
-"I+	c #C4DEDF",
-"J+	c #C1DBDC",
-"K+	c #B5D3D3",
-"L+	c #B2D0D0",
-"M+	c #AECDCD",
-"N+	c #AACACB",
-"O+	c #A6C7C8",
-"P+	c #95B7B9",
-"Q+	c #8BABB0",
-"R+	c #819FA7",
-"S+	c #77929E",
-"T+	c #798F9A",
-"U+	c #939BA0",
-"V+	c #ABA5A6",
-"W+	c #596BB2",
-"X+	c #5468B1",
-"Y+	c #647DB3",
-"Z+	c #96B6BD",
-"`+	c #A4C2C5",
-" @	c #AECACD",
-".@	c #B7D2D4",
-"+@	c #C1DADC",
-"@@	c #CAE2E3",
-"#@	c #CFE7E8",
-"$@	c #C0DBDC",
-"%@	c #BDD8D9",
-"&@	c #B1D0D0",
-"*@	c #AACACA",
-"=@	c #A6C7C7",
-"-@	c #A2C4C5",
-";@	c #95B6B9",
-">@	c #8BAAAF",
-",@	c #819EA6",
-"'@	c #76929D",
-")@	c #7B909A",
-"!@	c #9098A2",
-"~@	c #6D79AF",
-"{@	c #5B6DB3",
-"]@	c #5A6DB5",
-"^@	c #6D87B4",
-"/@	c #576DB3",
-"(@	c #768EBA",
-"_@	c #A6C2CB",
-":@	c #B8D3D5",
-"<@	c #CBE3E4",
-"[@	c #CFE6E7",
-"}@	c #CBE4E4",
-"|@	c #BCD8D9",
-"1@	c #B9D5D6",
-"2@	c #B5D2D3",
-"3@	c #ADCDCD",
-"4@	c #A2C4C4",
-"5@	c #9EC1C1",
-"6@	c #94B5B8",
-"7@	c #8AA9AF",
-"8@	c #809DA6",
-"9@	c #728B9F",
-"0@	c #6376A9",
-"a@	c #586BB0",
-"b@	c #7B85AA",
-"c@	c #5A6EB5",
-"d@	c #94B4BB",
-"e@	c #7D96BB",
-"f@	c #5D73B6",
-"g@	c #6076B7",
-"h@	c #788EC1",
-"i@	c #9BB1D2",
-"j@	c #B8CFDD",
-"k@	c #C7E0E1",
-"l@	c #C4DEDE",
-"m@	c #B8D5D6",
-"n@	c #B1CFD0",
-"o@	c #A9CACA",
-"p@	c #A0C1C3",
-"q@	c #8EAEBE",
-"r@	c #7794B4",
-"s@	c #647AB1",
-"t@	c #586DB0",
-"u@	c #576CB0",
-"v@	c #657AA2",
-"w@	c #8A979E",
-"x@	c #A6A4A4",
-"y@	c #99B8BC",
-"z@	c #ABC8CB",
-"A@	c #ADC7D0",
-"B@	c #9DB6CE",
-"C@	c #8CA1C9",
-"D@	c #7286C0",
-"E@	c #5F74B7",
-"F@	c #5D71B7",
-"G@	c #5E71B8",
-"H@	c #6178B9",
-"I@	c #687EBB",
-"J@	c #6E83BB",
-"K@	c #6C83BB",
-"L@	c #657BB9",
-"M@	c #5F74B6",
-"N@	c #596EB3",
-"O@	c #5B70B4",
-"P@	c #667EB6",
-"Q@	c #7590B6",
-"R@	c #7C9AB2",
-"S@	c #7F9DAA",
-"T@	c #79959F",
-"U@	c #748C98",
-"V@	c #8E989E",
-"W@	c #A7A5A5",
-"X@	c #90B1B4",
-"Y@	c #BFD9DA",
-"Z@	c #BBD5D9",
-"`@	c #AFCBD4",
-" #	c #A6C1D1",
-".#	c #A3BFCE",
-"+#	c #A7C4CD",
-"@#	c #A8C8CD",
-"##	c #8CACB1",
-"$#	c #82A0A8",
-"%#	c #78949F",
-"&#	c #778D99",
-"*#	c #909A9F",
-"=#	c #AAA6A5",
-"-#	c #90B2B5",
-";#	c #ADC9CC",
-">#	c #C0D9DB",
-",#	c #96B7BA",
-"'#	c #8CABB0",
-")#	c #77939E",
-"!#	c #929BA0",
-"~#	c #ACA7A6",
-"{#	c #5D71B6",
-"]#	c #84A2B5",
-"^#	c #9BBABD",
-"/#	c #8BAAB0",
-"(#	c #77929D",
-"_#	c #7A8F9A",
-":#	c #949BA0",
-"<#	c #9A99A9",
-"[#	c #5367B2",
-"}#	c #566CB3",
-"|#	c #6D84B7",
-"1#	c #A1BEC3",
-"2#	c #AECBCD",
-"3#	c #CAE2E4",
-"4#	c #CFE7E7",
-"5#	c #CBE4E5",
-"6#	c #76919D",
-"7#	c #798D9C",
-"8#	c #6877AC",
-"9#	c #5669B0",
-"0#	c #86A5B3",
-"a#	c #6D86B5",
-"b#	c #576CB3",
-"c#	c #687DB8",
-"d#	c #869DC4",
-"e#	c #B0C9D6",
-"f#	c #C7E1E1",
-"g#	c #7F9DAE",
-"h#	c #6780AC",
-"i#	c #5A70AF",
-"j#	c #5468AF",
-"k#	c #6A7CAB",
-"l#	c #9B9CA5",
-"m#	c #9AB9C1",
-"n#	c #8BA5C1",
-"o#	c #7990BF",
-"p#	c #667ABB",
-"q#	c #778DC1",
-"r#	c #7E94C4",
-"s#	c #879EC6",
-"t#	c #8FA7C8",
-"u#	c #98B2CB",
-"v#	c #94B0C9",
-"w#	c #89A1C3",
-"x#	c #7C95BF",
-"y#	c #738CBB",
-"z#	c #6C85B9",
-"A#	c #667DB7",
-"B#	c #5D74B5",
-"C#	c #556BB2",
-"D#	c #5C72B1",
-"E#	c #6981AF",
-"F#	c #6C86A6",
-"G#	c #708899",
-"H#	c #8C989E",
-"I#	c #BED8DA",
-"J#	c #C5DEE0",
-"K#	c #B6CCDD",
-"L#	c #A1B8D3",
-"M#	c #97AFCF",
-"N#	c #8DA5C9",
-"O#	c #8399C5",
-"P#	c #798FC0",
-"Q#	c #6F86BD",
-"R#	c #6E85BD",
-"S#	c #768DBE",
-"T#	c #7C93BD",
-"U#	c #819BBF",
-"V#	c #85A0BF",
-"W#	c #87A4BF",
-"X#	c #91B0BF",
-"Y#	c #8DADB2",
-"Z#	c #83A1A9",
-"`#	c #5D72B5",
-" $	c #88A7B6",
-".$	c #A4A0A7",
-"+$	c #6172B7",
-"@$	c #CDD2E8",
-"#$	c #6275B6",
-"$$	c #86A4BB",
-"%$	c #A5C3C5",
-"&$	c #7C8F9A",
-"*$	c #818BA5",
-"=$	c #6475B5",
-"-$	c #CACFE8",
-";$	c #D4D8EB",
-">$	c #7D8CC3",
-",$	c #677AB8",
-"'$	c #8DA5C3",
-")$	c #AEC8D1",
-"!$	c #C2DBDC",
-"~$	c #8AA9AE",
-"{$	c #7A96A7",
-"]$	c #6780A5",
-"^$	c #5F72B3",
-"/$	c #8391C6",
-"($	c #D9DEED",
-"_$	c #DFE4F1",
-":$	c #96A3D0",
-"<$	c #6F7FBE",
-"[$	c #6377BA",
-"}$	c #7D8FC4",
-"|$	c #95ABCE",
-"1$	c #A6BDD5",
-"2$	c #ACC4D6",
-"3$	c #B0CAD6",
-"4$	c #B5D0D7",
-"5$	c #B9D4D7",
-"6$	c #B4D2D3",
-"7$	c #AECCCF",
-"8$	c #A3C1CA",
-"9$	c #9BB9C6",
-"0$	c #91B0C2",
-"a$	c #89A7BE",
-"b$	c #7B94B9",
-"c$	c #6C82B8",
-"d$	c #5E72B5",
-"e$	c #6D7EBD",
-"f$	c #99A6D1",
-"g$	c #E6E8F3",
-"h$	c #F9F9FC",
-"i$	c #D6DBED",
-"j$	c #B1BBDC",
-"k$	c #96A3D1",
-"l$	c #8A97CA",
-"m$	c #7D8DC4",
-"n$	c #677ABA",
-"o$	c #6175B7",
-"p$	c #6275B9",
-"q$	c #687BBB",
-"r$	c #7182BF",
-"s$	c #7C8EC3",
-"t$	c #8796C9",
-"u$	c #94A2CE",
-"v$	c #B3BDDC",
-"w$	c #DBDEEE",
-"x$	c #FBFBFD",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . + @ # $ % & * = - = ; > , ' ) ! ~ + . . . . . . . ",
-". . . { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d . . . . ",
-". . e f g h i j k l m n o p q r s t u v w x y z A B C D E F . . ",
-". G H I J K L M N O P Q R S T U s V W X Y x Z ` A  ...+. at .#.$.. ",
-"{ %.&.*.J =.-.;.>.,.'.).!.1 ~.3 4 u {.X ].^.Z /.B  .(._.:.<.[.. ",
-". }.|.1.2.3.j 4.l m n o 5.q r s t u 6.w ].y z /.7.8.(.9.0.a.b.. ",
-". c.d.e.f.g.3.N h.P Q R S i.U s V W v Y x j.` A  .k.l.m.n.o.p.. ",
-". q.r.s.t.u.v.w.x.y.z.A.B.C.D.4 V E.F.G.H.I.J.K.L.M.N.O.P.Q.p.. ",
-". q.R.s.S.T.U.V.W.X.Y.Z.`. +.+++++ at +#+$+%+&+*+=+-+;+>+,+'+)+p.. ",
-". q.!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+. ",
-". q.g+h+i+]+j+k+l+_+:+m+n+o+p+q+2+3+r+s+6+7+8+t+u+v+w+x+y+z+f+. ",
-". A+B+C+D+E+F+G+H+_+:+m+I+J+p+q+K+L+M+N+O+7+8+P+Q+R+S+T+U+V+W+. ",
-". X+Y+Z+`+ @. at +@@@#@:+m+I+$@%@q+K+&@M+*@=@- at 8+;@>@,@'@)@!@~@{@. ",
-". ]@^@/@(@_@:@J+<@[@}@m+I+$@|@1 at 2@&@3@*@=@4 at 5@6 at 7@8 at 9@0 at a@b at p.. ",
-". c at r.d@e at f@g at h@i at j@H+k at l@$@|@m at 2@n at 3@o@=@p at q@r at s@t at u@v at w@x at p.. ",
-". c@!+y at S.z@A at B@C at D@E at F@G at H@I at J@K at L@M@@+N at O@P at Q@R at S@T at U@V at W@p.. ",
-". c at X@~+i+]+j+Y at m+_+:+m+I+Z@`@ #.#+#@#N+6+7+8+t+##$#%#&#*#=#f+. ",
-". c at -#C+i+;#j+>#l+_+:+m+I+o+p+q+K+3+r+N+6+7+8+,#'#v+)#x+!#~#f+. ",
-". {#]#^#`+E+. at G+@@#@:+m+I+$@%@q+K+&@M+*@O+7+8+;@/#,@(#_#:#<#b.. ",
-". [#}#|#1#2#. at +@3#4#5#m+I+$@|@1 at K+&@3@*@=@4 at 8+6@7 at 8@6#7#8#9#p.. ",
-". ]@0#a#b#c#d#e#<@[@<@f#I+$@|@m at 2@&@3 at o@=@4 at 5@6 at g#h#i#j#k#l#p.. ",
-". c at r.s.m#n#o#f.]@p#D at q#r#s#t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#x at p.. ",
-". c at R.s.S.T.U.I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#9+Y#Z#T at U@V at W@p.. ",
-". c at X@~+i+]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+. ",
-". c at -#C+i+;#j+>#l+_+:+m+I+o+p+q+K+3+r+s+6+7+8+t+u+v+w+x+y+z+f+. ",
-". `# $^#`+E+. at G+@@#@:+m+I+$@%@q+K+&@M+*@O+7+8+;@/#,@(#_#:#.$+$. ",
-". @$#$$$%$2#. at +@3#4#5#m+I+$@|@1 at K+&@3@*@=@4 at 8+6@7 at 8@6#&$*$=$-$. ",
-". . ;$>$,$'$)$!$<@[@<@f#I+$@|@m at 2@&@3 at o@=@4 at 5@6@~${$]$^$/$($. . ",
-". . . . _$:$<$[$}$|$1$2$3$4$5$m at 6$7$8$9$0$a$b$c$d$e$f$g$. . . . ",
-". . . . . . . h$i$j$k$l$m$; n$o$p$q$r$s$t$u$v$w$x$. . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
+static char *ODB_DB[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 134 2",
+"   c #576CAF",
+".  c #5C71AE",
+"X  c #5367B3",
+"o  c #5569B2",
+"O  c #5B6EB4",
+"+  c #5D72B6",
+"@  c #5F72B8",
+"#  c #647CA2",
+"$  c #6277A9",
+"%  c #6278AE",
+"&  c #6B7AAD",
+"*  c #6174B6",
+"=  c #657DB3",
+"-  c #6276B9",
+";  c #667BB9",
+":  c #697CBB",
+">  c #748C99",
+",  c #788E9A",
+"<  c #77929D",
+"1  c #79929D",
+"2  c #6982A4",
+"3  c #6881AC",
+"4  c #728CA0",
+"5  c #7A85AA",
+"6  c #7995A1",
+"7  c #7F9CAF",
+"8  c #6C84B4",
+"9  c #6D88B3",
+"0  c #6D82BB",
+"q  c #7084BD",
+"w  c #748CBB",
+"e  c #788BBF",
+"r  c #7894B5",
+"t  c #7D9AB2",
+"y  c #7C96BC",
+"u  c #7284C0",
+"i  c #758BC0",
+"p  c #7B8CC3",
+"a  c #7C91C2",
+"s  c #8A979F",
+"d  c #8D989E",
+"f  c #909A9F",
+"g  c #808BA6",
+"h  c #858EAA",
+"j  c #819EA6",
+"k  c #929AA0",
+"l  c #9B9DA5",
+"z  c #9A9AA8",
+"x  c #83A0A8",
+"c  c #8AA9AF",
+"v  c #85A4B4",
+"b  c #8CABB1",
+"n  c #86A3BA",
+"m  c #88A4BE",
+"M  c #8FAFBE",
+"N  c #8FB0B4",
+"B  c #90B1B4",
+"V  c #95B6B9",
+"C  c #98B6BD",
+"Z  c #96B8BA",
+"A  c #99B9BC",
+"S  c #A5A3A5",
+"D  c #A9A6A5",
+"F  c #8392C5",
+"G  c #859CC4",
+"H  c #8494C8",
+"J  c #8A9ACA",
+"K  c #85A1C0",
+"L  c #8BA3C4",
+"P  c #8DA4CA",
+"I  c #96AAC5",
+"U  c #98ACC4",
+"Y  c #93A5CE",
+"T  c #95ACCD",
+"R  c #98ACCD",
+"E  c #91B0C1",
+"W  c #9EB2C6",
+"Q  c #9BB9C4",
+"!  c #94B0C9",
+"~  c #9BB4CC",
+"^  c #96A3D0",
+"/  c #99A5D1",
+"(  c #9DB1D0",
+")  c #A3AFCF",
+"_  c #A1BEC4",
+"`  c #A2B7C8",
+"'  c #A6BBCA",
+"]  c #A8BECC",
+"[  c #A3B5D1",
+"{  c #A3BBD3",
+"}  c #A8BFD5",
+"|  c #B4BDDD",
+" . c #9EC1C1",
+".. c #A2C3C4",
+"X. c #A4C2CA",
+"o. c #AAC1CE",
+"O. c #A6C8C8",
+"+. c #ACCBCC",
+"@. c #A6C2D1",
+"#. c #ADC5D2",
+"$. c #AEC8D1",
+"%. c #B0C3D6",
+"&. c #BAC6D7",
+"*. c #B2CBD4",
+"=. c #B4CCD9",
+"-. c #BBCFDB",
+";. c #B4D1D2",
+":. c #B9D5D6",
+">. c #B7D0D8",
+",. c #BAD4DB",
+"<. c #BDD9DA",
+"1. c #C4CCD9",
+"2. c #CAD0DC",
+"3. c #C1DBDD",
+"4. c #D0DADF",
+"5. c #C0C7E3",
+"6. c #C4CBE5",
+"7. c #CBD0E7",
+"8. c #C5DDE0",
+"9. c #CBDDE0",
+"0. c #CDD3E9",
+"q. c #D1DEE0",
+"w. c #D0D6EA",
+"e. c #D5DAEC",
+"r. c #DADEEE",
+"t. c #CAE2E3",
+"y. c #CFE7E8",
+"u. c #D4E0E2",
+"i. c #DAE1E2",
+"p. c #D0E8E9",
+"a. c #E0E4F1",
+"s. c #E6E9F4",
+"d. c #F4F5FA",
+"f. c #FFFFFF",
+/* pixels */
+"f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.",
+"f.f.f.f.f.f.f.d.e.| Y J p p u u u u p a J / | e.d.f.f.f.f.f.f.f.",
+"f.f.f.f.w.H : 0 a L ~ { #.*.,.<.,.8.,.-.=.%.[ J u : J e.f.f.f.f.",
+"f.f.| : p I ] ] o.#.*.>.-.,.,.<.3.8.8.8.9.9.9.q.q.u.&.J u 5.f.f.",
+"f.6.q W ` ] ] o.$.$.=.*.=.,.<.<.3.8.8.8.9.9.t.q.u.u.i.i.q.h w.f.",
+"f.* U ` ` ] ] #.$.$.*.=.,.,.,.3.3.8.8.9.9.9.q.u.u.i.i.i.r.2.- f.",
+"f.X * U ' ] o.#.$.*.=.=.,.,.<.3.3.8.0.8.9.9.q.q.u.i.r.i.1.- @ f.",
+"f.O r O * G ] #.$.*.=.=.,.,.<.3.3.8.8.8.9.q.q.u.4.4.) * O h O f.",
+"f.O b Z n q + @ : e G R @.$.3.3.8.8.=.$.[ I F : . . % 2 d S + f.",
+"f.O N A _ +.;.;.} Y a e 0 @ + o o + @ 0 0 w y n b x 1 > d S O f.",
+"f.O B A ..O.;.1.t.p.y.t.8.3.<.:.>.;.+.+.O... .Z b x 1 > f D O f.",
+"f.+ B A ..+.;.3.9.y.t.t.8.3.<.:.:.+.+.+.O... .Z b x 6 , f D O f.",
+"f.o M A ..+.;.3.t.y.t.t.8.<.<.:.;.+.+.+.O... .Z b j 1 , f D O f.",
+"f.X = V O.+.:.3.t.y.t.t.t.3.<.:.:.;.+.+.O... .Z b j 1 , k & O f.",
+"f.O 9 O w X.:.3.t.y.t.t.3.<.<.:.;.;.+.+.O...A V c j 4 $   5 O f.",
+"f.O b V y + * e ( ,.t.8.8.<.<.:.;.;.+.+.X...C r =     # s S O f.",
+"f.O B A  .+.$.~ P i + + + @ 0 0 9 0 @ O + + 8 w t 7 1 < f D . d.",
+"f.O B A ..+.;.<.t.p.t.t.8.,.$. at .@. .+.O.O.O. .Z N 7 < < f D . f.",
+"f.O B A ..+.>.<.t.y.y.t.t.<.<.:.;.;.+.+.O. . .Z 7 6 6 < f D . f.",
+"f.@ n A _ +.>.3.t.y.t.t.3.3.<.:.;.;.+.+.O. . .Z B 7 6 1 f z * f.",
+"f.X o 8  .$.:.3.t.y.t.t.t.<.<.:.;.;.+.+.O. . .B b j < , & O O f.",
+"f.O v 9 o 0 K *.t.y.t.t.8.3.<.:.;.;.;.+.O.O. .N 7 3 . o & l O f.",
+"f.O B A Q L a @ O : u i a K P ~ ! y y a 9 0 + X + & 2 > s S O f.",
+"f.O N A  .+.;.<.8.,.( T ! a a w u i y y y E E  .N x 1 > f D O f.",
+"f.O N A ..+.*.3.t.y.t.t.3.3.<.:.;.;.+.+.O.O. .Z b x 1 > f D * f.",
+"f.O V A ..+.;.3.t.y.y.t.t.<.<.:.;.;.;.+.O... .Z c x 1 , f D O f.",
+"f.@ v A _ +.;.3.t.y.t.t.3.8.<.:.;.;.+.+.O... .V b x < , f S * f.",
+"f.0.- n ..+.;.3.t.p.t.t.8.<.:.:.:.+.+.+.O... .V c x < 1 g * 7.f.",
+"f.f.e.p : m &.3.t.p.t.t.8.<.<.:.;.;.+.+.O... .V b 6 # * F r.f.f.",
+"f.f.f.f.a./ q * p T } %.$.>.>.:.;.+. . .I m y 8 * : / s.f.f.f.f.",
+"f.f.f.f.f.f.f.d.e.| ^ J a u ; - @ ; u a J Y | e.f.f.f.f.f.f.f.f.",
+"f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f."
+};
diff --git a/share/metview/icons/ODB_FILTER.xpm b/share/metview/icons/ODB_FILTER.xpm
old mode 100755
new mode 100644
index 361d945..1b5908d
--- a/share/metview/icons/ODB_FILTER.xpm
+++ b/share/metview/icons/ODB_FILTER.xpm
@@ -1,590 +1,233 @@
 /* XPM */
-static char * ODB_FILTER_xpm[] = {
-"32 32 555 2",
-"  	c None",
-". 	c #FFFFFF",
-"+ 	c #F4F5FA",
-"@ 	c #D4D9EC",
-"# 	c #B4BDDD",
-"$ 	c #95A3CF",
-"% 	c #8A98CA",
-"& 	c #8191C6",
-"* 	c #7888C2",
-"= 	c #7083BF",
-"- 	c #7082BF",
-"; 	c #7183BF",
-"> 	c #798AC3",
-", 	c #8392C7",
-"' 	c #8E9CCC",
-") 	c #98A4D1",
-"! 	c #B5BDDE",
-"~ 	c #D6DAEC",
-"{ 	c #FEFEFE",
-"] 	c #D1D6EA",
-"^ 	c #8694C8",
-"/ 	c #697BBB",
-"( 	c #6F81BD",
-"_ 	c #7E91C1",
-": 	c #8BA1C5",
-"< 	c #9CB2CC",
-"[ 	c #A4BBD0",
-"} 	c #ABC4D3",
-"| 	c #B4CCD6",
-"1 	c #BAD4DA",
-"2 	c #BDD7DC",
-"3 	c #BFDADE",
-"4 	c #C1DBDF",
-"5 	c #BFD7DD",
-"6 	c #BAD0DA",
-"7 	c #B5CAD9",
-"8 	c #B0C2D6",
-"9 	c #9DAFCE",
-"0 	c #899AC8",
-"a 	c #7384BF",
-"b 	c #6C7EBD",
-"c 	c #8C9ACB",
-"d 	c #D5DAEC",
-"e 	c #B6BEDE",
-"f 	c #6A7CBC",
-"g 	c #788BBE",
-"h 	c #94AAC5",
-"i 	c #A8BDCC",
-"j 	c #AAC0CE",
-"k 	c #ACC3D0",
-"l 	c #AFC6D1",
-"m 	c #B1C9D3",
-"n 	c #B4CCD5",
-"o 	c #B6CFD7",
-"p 	c #B9D2D9",
-"q 	c #BBD5DB",
-"r 	c #BDD8DD",
-"s 	c #C0DBDF",
-"t 	c #C2DBDF",
-"u 	c #C4DCDF",
-"v 	c #C7DCE0",
-"w 	c #C9DDE0",
-"x 	c #CCDEE0",
-"y 	c #CEDEE0",
-"z 	c #D0DFE1",
-"A 	c #D3DFE1",
-"B 	c #D4E0E1",
-"C 	c #BAC5D7",
-"D 	c #8795C6",
-"E 	c #7282BF",
-"F 	c #BFC6E2",
-"G 	c #C3CAE4",
-"H 	c #7183BB",
-"I 	c #9DB2C6",
-"J 	c #A4B9C9",
-"K 	c #A6BBCA",
-"L 	c #A8BECC",
-"M 	c #ABC1CE",
-"N 	c #ADC4D0",
-"O 	c #B0C7D2",
-"P 	c #B2CAD4",
-"Q 	c #B4CDD6",
-"R 	c #B7D0D8",
-"S 	c #B9D3DA",
-"T 	c #BCD6DC",
-"U 	c #BED9DD",
-"V 	c #C3DBDF",
-"W 	c #C5DCDF",
-"X 	c #C8DDE0",
-"Y 	c #CADDE0",
-"Z 	c #CFDEE1",
-"` 	c #D1DFE1",
-" .	c #D6E0E2",
-"..	c #D8E1E2",
-"+.	c #DAE1E2",
-"@.	c #D4DAE0",
-"#.	c #7C8BC2",
-"$.	c #CFD4E9",
-"%.	c #5F71B7",
-"&.	c #97ACC3",
-"*.	c #A2B6C7",
-"=.	c #A7BCCB",
-"-.	c #A9BFCD",
-";.	c #ACC2CF",
-">.	c #AEC5D1",
-",.	c #B0C8D3",
-"'.	c #B3CBD5",
-").	c #B5CED6",
-"!.	c #B8D1D8",
-"~.	c #BCD7DC",
-"{.	c #C6DCDF",
-"].	c #CBDDE0",
-"^.	c #CDDEE0",
-"/.	c #D2DFE1",
-"(.	c #D9E1E2",
-"_.	c #DBE1E2",
-":.	c #DDE2E3",
-"<.	c #CAD0DC",
-"[.	c #6878BB",
-"}.	c #5568B4",
-"|.	c #6175B5",
-"1.	c #97AAC5",
-"2.	c #A5BACA",
-"3.	c #A7BDCC",
-"4.	c #ACC3CF",
-"5.	c #B8D2D9",
-"6.	c #C7DCDF",
-"7.	c #D5E0E1",
-"8.	c #D7E0E2",
-"9.	c #DCE2E2",
-"0.	c #C4CBD9",
-"a.	c #6476B6",
-"b.	c #5F70B6",
-"c.	c #596DB3",
-"d.	c #7691B2",
-"e.	c #5A6FB3",
-"f.	c #6377B7",
-"g.	c #879CC3",
-"h.	c #AFC7D2",
-"i.	c #BCD6DB",
-"j.	c #CEDEE1",
-"k.	c #D0DADF",
-"l.	c #A3AECE",
-"m.	c #6376B6",
-"n.	c #5A6CAF",
-"o.	c #868DA9",
-"p.	c #5D6FB4",
-"q.	c #5B6FB5",
-"r.	c #8EB0B3",
-"s.	c #98B8BB",
-"t.	c #87A2BC",
-"u.	c #6F86BB",
-"v.	c #5D70B5",
-"w.	c #5C70B6",
-"x.	c #687BBA",
-"y.	c #768DBF",
-"z.	c #8AA1C7",
-"A.	c #95ACCC",
-"B.	c #A2BBD1",
-"C.	c #B1CBD8",
-"D.	c #BFD9DD",
-"E.	c #C5DADE",
-"F.	c #BACFDB",
-"G.	c #AEC1D5",
-"H.	c #A3B5D0",
-"I.	c #97A9CC",
-"J.	c #8292C3",
-"K.	c #677BB9",
-"L.	c #586DB3",
-"M.	c #596DB2",
-"N.	c #6277AE",
-"O.	c #687FA0",
-"P.	c #8B979E",
-"Q.	c #A5A4A4",
-"R.	c #8FB0B4",
-"S.	c #A2C0C3",
-"T.	c #ABC8CA",
-"U.	c #B5D0D2",
-"V.	c #B7D0D7",
-"W.	c #A7BED4",
-"X.	c #91A7CE",
-"Y.	c #7E94C5",
-"Z.	c #7289C0",
-"`.	c #697EBB",
-" +	c #6075B7",
-".+	c #5A70B6",
-"++	c #576DB4",
-"@+	c #5A6FB5",
-"#+	c #5F74B5",
-"$+	c #647BB8",
-"%+	c #6B82B9",
-"&+	c #6F89BA",
-"*+	c #7C95BA",
-"=+	c #86A5B8",
-"-+	c #8BAAB2",
-";+	c #84A1A9",
-">+	c #7A95A0",
-",+	c #738C98",
-"'+	c #8D989E",
-")+	c #A7A4A4",
-"!+	c #8FB1B4",
-"~+	c #99B9BC",
-"{+	c #A2C1C3",
-"]+	c #ACC9CB",
-"^+	c #B5D1D3",
-"/+	c #BFD8DA",
-"(+	c #C8E0E2",
-"_+	c #D0E7E8",
-":+	c #CCE4E5",
-"<+	c #C9E2E2",
-"[+	c #C5DFDF",
-"}+	c #C1DCDD",
-"|+	c #BDD9DA",
-"1+	c #BAD6D7",
-"2+	c #B6D3D4",
-"3+	c #B2D0D1",
-"4+	c #AECECE",
-"5+	c #ABCBCB",
-"6+	c #A7C8C8",
-"7+	c #A3C5C5",
-"8+	c #9FC2C2",
-"9+	c #97B8BB",
-"0+	c #8DACB1",
-"a+	c #83A0A8",
-"b+	c #79949F",
-"c+	c #768D99",
-"d+	c #90999F",
-"e+	c #A9A6A5",
-"f+	c #5D70B4",
-"g+	c #90B1B5",
-"h+	c #9AB9BC",
-"i+	c #A3C1C4",
-"j+	c #B6D1D3",
-"k+	c #BFD9DB",
-"l+	c #C9E1E2",
-"m+	c #C8E1E2",
-"n+	c #C5DEDF",
-"o+	c #C1DCDC",
-"p+	c #BDD9D9",
-"q+	c #B9D6D6",
-"r+	c #899FA6",
-"s+	c #6E7F89",
-"t+	c #6D7E88",
-"u+	c #6B7C86",
-"v+	c #697B84",
-"w+	c #647580",
-"x+	c #556472",
-"y+	c #5A6876",
-"z+	c #546272",
-"A+	c #54606F",
-"B+	c #616672",
-"C+	c #6F6C76",
-"D+	c #464F7D",
-"E+	c #F2F2F3",
-"F+	c #556AB3",
-"G+	c #8EAEB5",
-"H+	c #9ABABD",
-"I+	c #A4C2C4",
-"J+	c #ADCACC",
-"K+	c #B6D2D4",
-"L+	c #C0DADB",
-"M+	c #C9E1E3",
-"N+	c #C4DEDF",
-"O+	c #C1DBDC",
-"P+	c #B5D3D3",
-"Q+	c #B2D0D0",
-"R+	c #626C79",
-"S+	c #71717D",
-"T+	c #8D8D96",
-"U+	c #39394C",
-"V+	c #84848E",
-"W+	c #3C3C52",
-"X+	c #E4E4E6",
-"Y+	c #5468B1",
-"Z+	c #647DB3",
-"`+	c #96B6BD",
-" @	c #A4C2C5",
-".@	c #AECACD",
-"+@	c #B7D2D4",
-"@@	c #C1DADC",
-"#@	c #CAE2E3",
-"$@	c #CFE7E8",
-"%@	c #B9D3D4",
-"&@	c #B6D0D1",
-"*@	c #B1D0D0",
-"=@	c #A9A9AF",
-"-@	c #DBDBDB",
-";@	c #454557",
-">@	c #CACACC",
-",@	c #4B4C62",
-"'@	c #5A6DB5",
-")@	c #6D87B4",
-"!@	c #576DB3",
-"~@	c #768EBA",
-"{@	c #A6C2CB",
-"]@	c #B8D3D5",
-"^@	c #CBE3E4",
-"/@	c #CFE6E7",
-"(@	c #CBE4E4",
-"_@	c #AAC3C2",
-":@	c #303A32",
-"<@	c #A7C0C0",
-"[@	c #B5D2D3",
-"}@	c #616C79",
-"|@	c #464658",
-"1@	c #C9C9CB",
-"2@	c #4B4C61",
-"3@	c #5A6EB5",
-"4@	c #94B4BB",
-"5@	c #7D96BB",
-"6@	c #5D73B6",
-"7@	c #6076B7",
-"8@	c #788EC1",
-"9@	c #9BB1D2",
-"0@	c #B8CFDD",
-"a@	c #C7E0E1",
-"b@	c #C4DEDE",
-"c@	c #121B10",
-"d@	c #1F2D1D",
-"e@	c #96AEAD",
-"f@	c #B1CFD0",
-"g@	c #474759",
-"h@	c #C8C8CB",
-"i@	c #99B8BC",
-"j@	c #ABC8CB",
-"k@	c #ADC7D0",
-"l@	c #9DB6CE",
-"m@	c #8CA1C9",
-"n@	c #7286C0",
-"o@	c #5F74B7",
-"p@	c #5D71B7",
-"q@	c #5E71B8",
-"r@	c #576CA4",
-"s@	c #1A2F17",
-"t@	c #38AD14",
-"u@	c #172517",
-"v@	c #4C5D85",
-"w@	c #454D70",
-"x@	c #313144",
-"y@	c #343447",
-"z@	c #343448",
-"A@	c #353549",
-"B@	c #2B2B40",
-"C@	c #36364A",
-"D@	c #3A3A4D",
-"E@	c #3C3C4E",
-"F@	c #3D3D50",
-"G@	c #313247",
-"H@	c #90B1B4",
-"I@	c #98B4B6",
-"J@	c #869D9D",
-"K@	c #91A6A7",
-"L@	c #9AB0B0",
-"M@	c #A5BBB9",
-"N@	c #AFC2C2",
-"O@	c #AFC4C4",
-"P@	c #AFC6C6",
-"Q@	c #AFC6C7",
-"R@	c #96ACAE",
-"S@	c #1E3318",
-"T@	c #48EA16",
-"U@	c #3FC514",
-"V@	c #1C2E17",
-"W@	c #3D4749",
-"X@	c #DADADA",
-"Y@	c #48485A",
-"Z@	c #C4C4C6",
-"`@	c #D6D6D7",
-" #	c #D4D4D5",
-".#	c #D2D2D3",
-"+#	c #494A5F",
-"@#	c #90B2B5",
-"##	c #7A9191",
-"$#	c #1A2A15",
-"%#	c #28521D",
-"&#	c #294D1C",
-"*#	c #274B1E",
-"=#	c #27471E",
-"-#	c #25441D",
-";#	c #24401C",
-">#	c #223B1C",
-",#	c #21381B",
-"'#	c #245016",
-")#	c #43D815",
-"!#	c #1D3D14",
-"~#	c #4E564C",
-"{#	c #D8D8D8",
-"]#	c #4A4A5B",
-"^#	c #C6C6C8",
-"/#	c #5D71B6",
-"(#	c #84A2B5",
-"_#	c #9BBABD",
-":#	c #7B9191",
-"<#	c #2A5B1C",
-"[#	c #47E415",
-"}#	c #275B18",
-"|#	c #434E3F",
-"1#	c #D1D1D1",
-"2#	c #49495B",
-"3#	c #C5C5C8",
-"4#	c #5367B2",
-"5#	c #566CB3",
-"6#	c #6D84B7",
-"7#	c #798E90",
-"8#	c #3BB914",
-"9#	c #141D10",
-"0#	c #373846",
-"a#	c #3F3F51",
-"b#	c #3E3E51",
-"c#	c #2C2C41",
-"d#	c #38384C",
-"e#	c #37374A",
-"f#	c #38394E",
-"g#	c #86A5B3",
-"h#	c #6D86B5",
-"i#	c #435384",
-"j#	c #25561A",
-"k#	c #3CBE15",
-"l#	c #1A2616",
-"m#	c #A5A6A5",
-"n#	c #D3D3D4",
-"o#	c #D4D4D4",
-"p#	c #C0C0C3",
-"q#	c #D9D9D9",
-"r#	c #748B8F",
-"s#	c #1D3B15",
-"t#	c #318F13",
-"u#	c #319312",
-"v#	c #329712",
-"w#	c #339B13",
-"x#	c #359E13",
-"y#	c #35A313",
-"z#	c #36A713",
-"A#	c #38AA13",
-"B#	c #39B113",
-"C#	c #3DC214",
-"D#	c #162312",
-"E#	c #838486",
-"F#	c #4C4C5D",
-"G#	c #C3C3C6",
-"H#	c #8DA8A9",
-"I#	c #576862",
-"J#	c #586860",
-"K#	c #57685E",
-"L#	c #54675C",
-"M#	c #4D5D57",
-"N#	c #42544F",
-"O#	c #3D4E49",
-"P#	c #374843",
-"Q#	c #31433E",
-"R#	c #12190F",
-"S#	c #3FC614",
-"T#	c #182716",
-"U#	c #3E4557",
-"V#	c #A6A6AC",
-"W#	c #4D4D5E",
-"X#	c #131910",
-"Y#	c #3FC915",
-"Z#	c #1C2C17",
-"`#	c #839998",
-" $	c #2C2C40",
-".$	c #323246",
-"+$	c #38384B",
-"@$	c #36364B",
-"#$	c #ADC9CC",
-"$$	c #C0D9DB",
-"%$	c #141C10",
-"&$	c #809693",
-"*$	c #4E4E5F",
-"=$	c #C1C1C4",
-"-$	c #D5D5D6",
-";$	c #4A4B5F",
-">$	c #5D72B5",
-",$	c #88A7B6",
-"'$	c #C0DBDC",
-")$	c #1B2319",
-"!$	c #7F9490",
-"~$	c #CDD2E8",
-"{$	c #6275B6",
-"]$	c #86A4BB",
-"^$	c #A5C3C5",
-"/$	c #AECBCD",
-"($	c #CAE2E4",
-"_$	c #CFE7E7",
-":$	c #CBE4E5",
-"<$	c #879C9B",
-"[$	c #B9D5D6",
-"}$	c #757581",
-"|$	c #92929B",
-"1$	c #3F3F52",
-"2$	c #82828C",
-"3$	c #424255",
-"4$	c #D4D8EB",
-"5$	c #7D8CC3",
-"6$	c #677AB8",
-"7$	c #8DA5C3",
-"8$	c #AEC8D1",
-"9$	c #C2DBDC",
-"0$	c #C7E1E1",
-"a$	c #BCD8D9",
-"b$	c #B8D5D6",
-"c$	c #869CA2",
-"d$	c #6A7A84",
-"e$	c #697883",
-"f$	c #677781",
-"g$	c #657680",
-"h$	c #60707C",
-"i$	c #4C5565",
-"j$	c #525E71",
-"k$	c #4B5773",
-"l$	c #485079",
-"m$	c #585F82",
-"n$	c #808394",
-"o$	c #93939D",
-"p$	c #F1F1F2",
-"q$	c #DFE4F1",
-"r$	c #96A3D0",
-"s$	c #6F7FBE",
-"t$	c #6377BA",
-"u$	c #7D8FC4",
-"v$	c #95ABCE",
-"w$	c #A6BDD5",
-"x$	c #ACC4D6",
-"y$	c #B0CAD6",
-"z$	c #B5D0D7",
-"A$	c #B9D4D7",
-"B$	c #B4D2D3",
-"C$	c #AECCCF",
-"D$	c #A3C1CA",
-"E$	c #9BB9C6",
-"F$	c #91B0C2",
-"G$	c #89A7BE",
-"H$	c #7B94B9",
-"I$	c #6C82B8",
-"J$	c #5E72B5",
-"K$	c #6D7EBD",
-"L$	c #99A6D1",
-"M$	c #E6E8F3",
-"N$	c #F9F9FC",
-"O$	c #D6DBED",
-"P$	c #B1BBDC",
-"Q$	c #96A3D1",
-"R$	c #8A97CA",
-"S$	c #7D8DC4",
-"T$	c #677ABA",
-"U$	c #6175B7",
-"V$	c #6275B9",
-"W$	c #687BBB",
-"X$	c #7182BF",
-"Y$	c #7C8EC3",
-"Z$	c #8796C9",
-"`$	c #94A2CE",
-" %	c #B3BDDC",
-".%	c #DBDEEE",
-"+%	c #FBFBFD",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . + @ # $ % & * = - = ; > , ' ) ! ~ + . . . . . . . ",
-". . . { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d . . . . ",
-". . e f g h i j k l m n o p q r s t u v w x y z A B C D E F . . ",
-". G H I J K L M N O P Q R S T U s V W X Y x Z ` A  ...+. at .#.$.. ",
-"{ %.&.*.J =.-.;.>.,.'.).!.1 ~.3 4 u {.X ].^.Z /.B  .(._.:.<.[.. ",
-". }.|.1.2.3.j 4.l m n o 5.q r s t u 6.w ].y z /.7.8.(.9.0.a.b.. ",
-". c.d.e.f.g.3.N h.P Q R S i.U s V W v Y x j.` A  .k.l.m.n.o.p.. ",
-". q.r.s.t.u.v.w.x.y.z.A.B.C.D.4 V E.F.G.H.I.J.K.L.M.N.O.P.Q.p.. ",
-". q.R.s.S.T.U.V.W.X.Y.Z.`. +.+++++ at +#+$+%+&+*+=+-+;+>+,+'+)+p.. ",
-". q.!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+. ",
-". q.g+h+i+]+j+k+l+_+:+m+n+o+p+q+2+3+r+s+t+u+v+w+x+y+z+A+B+C+D+E+",
-". F+G+H+I+J+K+L+M+_+:+m+N+O+p+q+P+Q+R+S+T+T+T+T+U+V+T+T+T+T+W+X+",
-". Y+Z+`+ @. at +@@@#@$@:+m+N+%@&@q+P+*@R+=@- at -@- at -@;@>@- at -@- at -@, at X+",
-". '@)@!@~@{@]@O+^@/@(@m+N+_@:@<@[@*@}@=@- at -@- at -@|@1 at -@- at -@- at 2@X+",
-". 3 at r.4@5 at 6@7 at 8@9 at 0@M+a at b@_ at c@d at e@f@}@=@- at -@- at -@g at h@- at -@- at -@2 at X+",
-". 3@!+i at S.j@k at l@m at n@o at p@q at r@s at t@u at v@w at x@y at y@z at A@B at C@U+D at E@F at G@X+",
-". 3 at H@~+I at J@K at L@M at N@O at P@Q at R@S at T@U at V@W@=@- at -@- at X@Y at Z@`@ # #.#+#X+",
-". 3@@#H+##$#%#&#*#=#-#;#>#,#'#T at T@)#!#~#{#- at -@-@]#^#- at -@- at -@2 at X+",
-". /#(#_#:#<#T at T@T at T@T at T@T at T@T at T@T at T@[#}#|#1#- at -@2#3#- at -@- at -@2 at X+",
-". 4#5#6#7#<#T at T@T at T@T at T@T at T@T at T@T at T@T at 8#9#0#a#b#c#U+D at d#e#A at f#X+",
-". '@g#h#i#j#T at T@T at T@T at T@T at T@T at T@T at T@k#l#m#n#o# #]#p#{#q#q#X at 2@X+",
-". 3 at r.s.r#s#t#u#v#w#x#y#z#A#B#T at T@C#D#E#- at -@- at -@F#G#- at -@- at -@2 at X+",
-". 3 at R.s.H#I#J#K#L#M#N#O#P#Q#R#T at S#T#U#V#q#- at -@- at W#G#- at -@- at -@2 at X+",
-". 3 at H@~+i+]+^+/+(+_+:+<+[+}+X#Y#Z#`#R+z at A@z at y@y@ $.$A at +$D at E@@$X+",
-". 3@@#H+i+#$j+$$l+_+:+m+N+o+%$V@&$3+R+=@- at -@- at -@*$=$X@{#-$ #;$X+",
-". >$,$_# @J++ at L+#@$@:+m+N+'$)$!$P+*@R+=@- at -@- at -@*$p#- at -@- at -@2 at X+",
-". ~${$]$^$/$+@@@($_$:$m+N+'$<$[$P+*@}@}$|$|$|$|$1$2$|$|$|$|$3$X+",
-". . 4$5$6$7$8$9$^@/@^@0$N+'$a$b$[@*@c$d$e$f$g$h$i$j$k$l$m$n$o$p$",
-". . . . q$r$s$t$u$v$w$x$y$z$A$b$B$C$D$E$F$G$H$I$J$K$L$M$. . . . ",
-". . . . . . . N$O$P$Q$R$S$; T$U$V$W$X$Y$Z$`$ %.%+%. . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
+static char *ODB_FILTER[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 195 2",
+"   c #12190F",
+".  c #131B10",
+"X  c #162312",
+"o  c #192616",
+"O  c #1B2C16",
+"+  c #1D3C14",
+"@  c #1E3218",
+"#  c #21391B",
+"$  c #303A32",
+"%  c #25421C",
+"&  c #28471E",
+"*  c #274B1E",
+"=  c #284E1D",
+"-  c #245017",
+";  c #275B17",
+":  c #26561B",
+">  c #29521D",
+",  c #2A5B1C",
+"<  c #32433F",
+"1  c #444F3F",
+"2  c #2B2B40",
+"3  c #323346",
+"4  c #373846",
+"5  c #353549",
+"6  c #39394C",
+"7  c #3D3E51",
+"8  c #374844",
+"9  c #3D4B48",
+"0  c #3F4658",
+"q  c #42544F",
+"w  c #4E564C",
+"e  c #434356",
+"r  c #464658",
+"t  c #4B4B5C",
+"y  c #4C5E57",
+"u  c #57695F",
+"i  c #4A4C61",
+"p  c #4C5566",
+"a  c #454D70",
+"s  c #464F7E",
+"d  c #4C5773",
+"f  c #48517A",
+"g  c #525E71",
+"h  c #586962",
+"j  c #54606F",
+"k  c #5A6876",
+"l  c #616673",
+"z  c #6F6D76",
+"x  c #626C79",
+"c  c #60707C",
+"v  c #71717D",
+"b  c #308F12",
+"n  c #319512",
+"m  c #339C13",
+"M  c #35A513",
+"N  c #37AA13",
+"B  c #38AD13",
+"V  c #3CBB14",
+"C  c #3EC414",
+"Z  c #3FC915",
+"A  c #43D815",
+"S  c #46E316",
+"D  c #48EA16",
+"F  c #445485",
+"G  c #4C5E84",
+"H  c #595F82",
+"J  c #687782",
+"K  c #6A7A84",
+"L  c #757581",
+"P  c #586BA4",
+"I  c #5367B3",
+"U  c #5569B3",
+"Y  c #5A6EB4",
+"T  c #5D71B6",
+"R  c #5F72B8",
+"E  c #6278AE",
+"W  c #6176B6",
+"Q  c #657EB4",
+"!  c #6376B9",
+"~  c #667BB9",
+"^  c #697CBB",
+"/  c #758B8F",
+"(  c #798E91",
+")  c #748C99",
+"_  c #7B9191",
+"`  c #6980A0",
+"'  c #7995A0",
+"]  c #6E86B7",
+"[  c #6D88B3",
+"{  c #6D82BB",
+"}  c #7084BD",
+"|  c #7793B3",
+" . c #7C96BB",
+".. c #7284C0",
+"X. c #758AC0",
+"o. c #7B8CC3",
+"O. c #7E91C4",
+"+. c #838486",
+"@. c #83838D",
+"#. c #818395",
+"$. c #8D8D96",
+"%. c #809592",
+"&. c #849B9A",
+"*. c #8C999D",
+"=. c #92929B",
+"-. c #858EAA",
+";. c #869CA3",
+":. c #83A1A9",
+">. c #8DA9AA",
+",. c #91A6A7",
+"<. c #96ADAE",
+"1. c #85A4B4",
+"2. c #8BAAB3",
+"3. c #86A3BA",
+"4. c #88A4BE",
+"5. c #8FB0B4",
+"6. c #90B1B4",
+"7. c #99B2B3",
+"8. c #95B5BB",
+"9. c #99B9BC",
+"0. c #A5A5A5",
+"q. c #A9A6A5",
+"w. c #A6A6AC",
+"e. c #A9A9AF",
+"r. c #A6BBB9",
+"t. c #8393C5",
+"y. c #879DC3",
+"u. c #8494C8",
+"i. c #8A9ACA",
+"p. c #8CA3C5",
+"a. c #8CA2CB",
+"s. c #96AAC5",
+"d. c #98ACC4",
+"f. c #93A5CE",
+"g. c #95ACCD",
+"h. c #9EB2C6",
+"j. c #9BB9C6",
+"k. c #9DB4CD",
+"l. c #96A3D0",
+"z. c #99A5D1",
+"x. c #9DB1D0",
+"c. c #A3AFCF",
+"v. c #A2B7C8",
+"b. c #A6BBCA",
+"n. c #A8BECC",
+"m. c #A3B5D1",
+"M. c #A8BFD5",
+"N. c #B4BDDD",
+"B. c #A3C2C4",
+"V. c #AAC3C2",
+"C. c #A5C1CA",
+"Z. c #ABC2CD",
+"A. c #A7C8C9",
+"S. c #ADCACC",
+"D. c #B0C5C5",
+"F. c #ADC5D2",
+"G. c #AEC8D1",
+"H. c #B0C3D6",
+"J. c #BAC6D7",
+"K. c #B2CBD4",
+"L. c #B4CCD8",
+"P. c #BBCFDB",
+"I. c #B4D1D2",
+"U. c #B9D5D5",
+"Y. c #B7D0D8",
+"T. c #BAD4DB",
+"R. c #BED9DC",
+"E. c #C1C1C4",
+"W. c #C5C5C8",
+"Q. c #C9C9CB",
+"!. c #C4CCD9",
+"~. c #CAD0DC",
+"^. c #C2DBDD",
+"/. c #D3D3D4",
+"(. c #D0DADF",
+"). c #DADADA",
+"_. c #C0C7E3",
+"`. c #C4CBE5",
+"'. c #C5DDE0",
+"]. c #CBDDE0",
+"[. c #CDD3E9",
+"{. c #D1DEE0",
+"}. c #D0D6EA",
+"|. c #D5DAEC",
+" X c #DBDFEF",
+".X c #CAE2E3",
+"XX c #D4E0E2",
+"oX c #DAE1E2",
+"OX c #D0E7E8",
+"+X c #D0E8E9",
+"@X c #E4E4E7",
+"#X c #E0E4F1",
+"$X c #F2F2F3",
+"%X c #F4F5FA",
+"&X c #FFFFFF",
+/* pixels */
+"&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X",
+"&X&X&X&X&X&X&X%X|.N.f.i.t.X.....{ ..o.t.i.z.N.|.%X&X&X&X&X&X&X&X",
+"&X&X&X&X}.u.^ { O.p.k.n.F.L.T.R.R.'.T.P.L.H.m.i...^ i.|.&X&X&X&X",
+"&X&XN.^ X.s.n.Z.F.G.G.L.L.T.T.R.R.'.'.'.].].].{.{.XXJ.i..._.&X&X",
+"&X`.} h.b.b.n.Z.G.H.K.L.Y.T.R.R.'.'.'.].].]..X{.XXXXoXoX{.-.[.&X",
+"&XT d.v.b.b.n.F.G.G.K.Y.T.T.T.R.R.'.'.'.].].{.XXXXoXoXoX X~.~ &X",
+"&XU W d.b.n.n.F.G.L.L.Y.Y.T.R.^.^.'.'.'.].{.{.XXXXoX X).!.! R &X",
+"&XY | Y W y.n.H.G.G.L.Y.T.T.R.^.'.'.'.[.].].{.{.XX(.c.W Y -.Y &X",
+"&XY 2.9.3.{ T Y ~ X.p.g.k.L.R.^.'.'.P.G.k.g.O.{ Y Y E ` *.0.T &X",
+"&XY 5.9.B.S.I.U.M.f.O.X.{ Q T U U Y R Q { ]  .3.>.:.' ) *.q.Y &X",
+"&XY 5.9.B.D.K.R..X+X.X.X'.^.^.U.U.I.S.S.A.A.B.9.2.:.) ) *.q.T &X",
+"&XT 6.9.B.S.I.^..X+X.X.X'.^.R.U.I.I.;.K / K K v j k k j l z s $X",
+"&XU 5.9.B.S.I.^..XOX.X.X'.^.U.U.I.I.k L $.$.$.$.6 #.$.$.$.$.7 @X",
+"&XI Q 8.B.S.Y.R..XOX.X.X'.U.I.U.I.I.k e.).).).).r Q.).).).).i @X",
+"&XY [ Y  .n.U.^..XOX.X.X'.V.$ b.I.I.x e.).).).).r Q.).).).).i @X",
+"&XY 2.8. .T T  .x.T..X'..XB.  @ <.I.x e.).).).).r Q.).).).).i @X",
+"&XY 5.9.B.S.G.v.a...W W T P O B o G a 3 4 4 3 5 2 5 7 6 6 7 3 @X",
+"&XY 6.9.7.;.,.<.r.D.V.D.S.<.@ D Z O 8 e.).).).).t E././././.i @X",
+"&XY 5.9._ O > = * & % # # # - D D A + w /.).).).t W.).).).).i @X",
+"&XT 1.9.( , D D D D D D D D D D D D S ; 1 /.).).r W.).).).).i @X",
+"&XI U ] ( , D D D D D D D D D D D D D V . 4 7 7 $ 7 6 6 5 3 6 @X",
+"&XY 1.] F : D D D D D D D D D D D D V o 0./././.t n./.).).).i @X",
+"&XY 5.9./ + b n n m m M M N B D D C X +.).).).).t W.).).).).i @X",
+"&XY 5.9.>.h h h u y q 9 8 <   S Z o 0 w.).).).).t W.).).).).i @X",
+"&XY 6.9.B.S.L.^..XOX.X.X.XR.. A O &.x 4 5 5 5 4 2 3 5 6 6 7 5 @X",
+"&XY 6.9.B.S.I.R..XOX.X.X.XR.. @ _ I.x e.).).).).t E.)./././.t @X",
+"&XT 2.9.V.S.I.^..XOX.X.X^.^.o %.U.I.x e.).).).).i E.).).).).i @X",
+"&X[.W 3.B.S.I.^..X+X.X.X^.^.&.U.U.S.x L =.=.=.=.7 @.=.=.=.=.e @X",
+"&X&X|.o.^ p.K.^..X+X.X.X^.R.R.U.I.I.;.K J J c c p g d f H #.=.$X",
+"&X&X&X&X#Xl.{ W o.g.M.H.L.L.U.U.I.S.C.j.s.4. .{ R ^ z.#X&X&X&X&X",
+"&X&X&X&X&X&X&X%X|.N.l.i.o...~ ! ! ~ { O.u.l.N. X&X&X&X&X&X&X&X&X",
+"&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X"
+};
diff --git a/share/metview/icons/PAXIS.xpm b/share/metview/icons/PAXIS.xpm
index 39b9026..f10dede 100644
--- a/share/metview/icons/PAXIS.xpm
+++ b/share/metview/icons/PAXIS.xpm
@@ -1,44 +1,45 @@
 /* XPM */
-static char * PAXIS_icon[] = {
-"32 32 9 1",
-" 	c #FFFFFFFFFFFF",
-".	c #FFFFFFFF0000",
-"X	c #FFFFFFFFCCCC",
-"o	c #00000000FFFF",
-"O	c #000000000000",
-"+	c #FFFF0000DADA",
-"@	c #D9D9B7B77777",
-"#	c #FFFFE2E2ABAB",
-"$	c #E0E06C6C0000",
-"   .............................",
-"  ..XXXXXXXXXXXXXXXXXXXXXXXXXXX.",
-" ...XXXXXXXXXXXXXXXXXXXXXXXXXXX.",
-"....oXXXXXXXXXXXXXXXXXXXXXXOOOX.",
-".XXoooXXXXXXXXXXXXXXXXXXXXO++OX.",
-".XXXoXXXXXXXXXXXXXXXXXXXXO.O+OX.",
-".XXXoXXXXXXXXXXXXXXXXXXXO. at OOXX.",
-".XXXoXXXXXXXXXXXXXXXXXXO. at OOXXX.",
-".XXoooXXXoXXXXXoXXXOOOO. at OOXoXX.",
-".XXXoXXXXXXXXXXXXXO#@O. at OOXXXXX.",
-".XXXoXXXXXXXXXXXXO#@O. at OOXXXXXX.",
-".XXXoXXXXXXXXXXXO#@O. at OO@OXXXXX.",
-".XXXoXXXXXXXXXXO#@O. at OO@@#OXXXX.",
-".XXXoXXXXXXXXXO#@O. at OOO@###OXXX.",
-".XXoooXXXoXXXXO at O.@OOXO$####OOO.",
-".XXXoXXXXXXXXXXO.OOOOOX#####@OO.",
-".XXXoXXXXXXXXXO.OX##########@OO.",
-".XXXoXXXXXXXXXO at OOO@@@######@OO.",
-".XXXoXXXXXXXXOOOXXXOOO@@@@##@OO.",
-".XXoooXXXoXXXXXXoXXXXXOOOO@@@OO.",
-".XXXoXXXXXXXXXXXXXXXXXXXXXOOOOO.",
-".XXXoXXXXXXXXXXXXXXXXXXXXXXXXOO.",
-".XXXoXXXXXXXXXXXXXXXXXXXXXXXXXX.",
-".XXXoXXXXXXXXXXXXXXXXXXXXXXXXXX.",
-".XXXoXXXXoXXXXXXoXXXXXoXXXXXoXX.",
-".XXXooooooooooooooooooooooooooX.",
-".XXXoXXXXoXXXXXXoXXXXXoXXXXXoXX.",
-".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
-".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
-".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
-"................................",
-"                                "};
+static char * PAXIS_xpm[] = {
+"32 32 10 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #F4F4C8",
+"@	c #FCFDF3",
+"#	c #C8C8F4",
+"$	c #BEBEBE",
+"%	c #F4C8EE",
+"&	c #F1EBDF",
+"*	c #FBF6EB",
+"=	c #F3D9C1",
+"...+++++++++++++++++++++++++++++",
+"..++@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+".+++@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"++++#@@@@@@@@@@@@@@@@@@@@@@$$$@+",
+"+@@###@@@@@@@@@@@@@@@@@@@@$%%$@+",
+"+@@@#@@@@@@@@@@@@@@@@@@@@$+$%$@+",
+"+@@@#@@@@@@@@@@@@@@@@@@@$+&$$@@+",
+"+@@@#@@@@@@@@@@@@@@@@@@$+&$$@@@+",
+"+@@###@@@#@@@@@#@@@$$$$+&$$@#@@+",
+"+@@@#@@@@@@@@@@@@@$*&$+&$$@@@@@+",
+"+@@@#@@@@@@@@@@@@$*&$+&$$@@@@@@+",
+"+@@@#@@@@@@@@@@@$*&$+&$$&$@@@@@+",
+"+@@@#@@@@@@@@@@$*&$+&$$&&*$@@@@+",
+"+@@@#@@@@@@@@@$*&$+&$$$&***$@@@+",
+"+@@###@@@#@@@@$&$+&$$@$=****$$$+",
+"+@@@#@@@@@@@@@@$+$$$$$@*****&$$+",
+"+@@@#@@@@@@@@@$+$@**********&$$+",
+"+@@@#@@@@@@@@@$&$$$&&&******&$$+",
+"+@@@#@@@@@@@@$$$@@@$$$&&&&**&$$+",
+"+@@###@@@#@@@@@@#@@@@@$$$$&&&$$+",
+"+@@@#@@@@@@@@@@@@@@@@@@@@@$$$$$+",
+"+@@@#@@@@@@@@@@@@@@@@@@@@@@@@$$+",
+"+@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"+@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"+@@@#@@@@#@@@@@@#@@@@@#@@@@@#@@+",
+"+@@@##########################@+",
+"+@@@#@@@@#@@@@@@#@@@@@#@@@@@#@@+",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"++++++++++++++++++++++++++++++++",
+"................................"};
diff --git a/share/metview/icons/PGRAPH.xpm b/share/metview/icons/PGRAPH.xpm
index bf1f84e..5d79700 100644
--- a/share/metview/icons/PGRAPH.xpm
+++ b/share/metview/icons/PGRAPH.xpm
@@ -1,47 +1,48 @@
 /* XPM */
-static char * PGRAPH_icon[] = {
-"32 32 12 1",
-" 	c #FFFFFFFFFFFF",
-".	c #7F7F0000FFFF",
-"X	c #CCCCCCCCFFFF",
-"o	c #000000000000",
-"O	c #FFFF0000DADA",
-"+	c #FFFFFFFF0000",
-"@	c #D9D9B7B77777",
-"#	c #FFFFE2E2ABAB",
-"$	c #FFFF0000FFFF",
-"%	c #FFFF4F4F0000",
-"&	c #FFFFFFFFCCCC",
-"*	c #EBEBEBEBFFFF",
-"    ............................",
-"   ..XXXXXXXXXXXXXXXXXXXXXoOOoX.",
-"  ...XXXXXXXXXXXXXXXXXXXXo+oOoX.",
-" ....XXXXXXXXXXXXXXXXXXXo+ at ooXX.",
-".....XXXXXXXXXXXXXXXXXXo+ at ooXXX.",
-".XXXXXXXXXXXXXXXXXXoooo+ at ooXXXX.",
-".XXX.XXXXXXXXXXXXXo#@o+ at ooXXXXX.",
-".XX...XXXXXXXXXXXo#@o+ at ooXXXXXX.",
-".XXX.XXXXXXXXXXXo#@o+ at oo@oXXXXX.",
-".XXX.XXXXX$XXXXo#@o+ at oo@@#oXXXX.",
-".XXX.XXXX$X$XXo#@o+ at ooo@###oXXX.",
-".XXX.XXXX$X$XXo at o+@oo#o%####ooo.",
-".XXX.XXXOXXX$XXo+ooooo&#####@oo.",
-".XXX.XX$XXXXX$o+o###########@oo.",
-".XXX.XX$XXXXX$o at ooo@@@######@oo.",
-".XXX.X$XXXXXXX$oX$*ooo@@@@##@oo.",
-".XXX.$XXXXXXXX$XXX$XXXoooo@@@oo.",
-".XXX.$XXXXXXXXX$XX$XXXXXXXooooo.",
-".XXX$XXXXXXXXXXXXXX$XXXXXXXXXoo.",
-".XXX.XXXXXXXXXXXXXX$XXXX$XXXXXX.",
-".XXX.XXXXXXXXXXXXXXX$XX$X$$XXXX.",
-".XXX.XXXXXXXXXXXXXXX$X$XXXX$XXX.",
-".XXX.XXXXXXXXXXXXXXXX$XXXXXXXXX.",
-".XXX.XXXXXXXXXXXXXXXXXXXXXXXXXX.",
-".XXX.XXXXXXXXXXXXXXXXXXXXXX.XXX.",
-".XX..........................XX.",
-".XXX.XXXXXXXXXXXXXXXXXXXXXX.XXX.",
-".XXX.XXXXXXXXXXXXXXXXXXXXXXXXXX.",
-".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
-".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
-".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
-"................................"};
+static char * PGRAPH_xpm[] = {
+"32 32 13 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #B6A4C8",
+"@	c #ECECF4",
+"#	c #6D6D6D",
+"$	c #C8A4C2",
+"%	c #C7C8A4",
+"&	c #D4CFC6",
+"*	c #ECE8E0",
+"=	c #C8A4C7",
+"-	c #C8AFA4",
+";	c #F3F4EC",
+">	c #F8F8FA",
+"....++++++++++++++++++++++++++++",
+"...++@@@@@@@@@@@@@@@@@@@@@#$$#@+",
+"..+++@@@@@@@@@@@@@@@@@@@@#%#$#@+",
+".++++@@@@@@@@@@@@@@@@@@@#%&##@@+",
+"+++++@@@@@@@@@@@@@@@@@@#%&##@@@+",
+"+@@@@@@@@@@@@@@@@@@####%&##@@@@+",
+"+@@@+@@@@@@@@@@@@@#*&#%&##@@@@@+",
+"+@@+++@@@@@@@@@@@#*&#%&##@@@@@@+",
+"+@@@+@@@@@@@@@@@#*&#%&##&#@@@@@+",
+"+@@@+@@@@@=@@@@#*&#%&##&&*#@@@@+",
+"+@@@+@@@@=@=@@#*&#%&###&***#@@@+",
+"+@@@+@@@@=@=@@#&#%&##*#-****###+",
+"+@@@+@@@$@@@=@@#%#####;*****&##+",
+"+@@@+@@=@@@@@=#%#***********&##+",
+"+@@@+@@=@@@@@=#&###&&&******&##+",
+"+@@@+@=@@@@@@@=#@=>###&&&&**&##+",
+"+@@@+=@@@@@@@@=@@@=@@@####&&&##+",
+"+@@@+=@@@@@@@@@=@@=@@@@@@@#####+",
+"+@@@=@@@@@@@@@@@@@@=@@@@@@@@@##+",
+"+@@@+@@@@@@@@@@@@@@=@@@@=@@@@@@+",
+"+@@@+@@@@@@@@@@@@@@@=@@=@==@@@@+",
+"+@@@+@@@@@@@@@@@@@@@=@=@@@@=@@@+",
+"+@@@+@@@@@@@@@@@@@@@@=@@@@@@@@@+",
+"+@@@+@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"+@@@+@@@@@@@@@@@@@@@@@@@@@@+@@@+",
+"+@@++++++++++++++++++++++++++@@+",
+"+@@@+@@@@@@@@@@@@@@@@@@@@@@+@@@+",
+"+@@@+@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"++++++++++++++++++++++++++++++++"};
diff --git a/share/metview/icons/READ_ECREGRID.xpm b/share/metview/icons/READ_ECREGRID.xpm
new file mode 100755
index 0000000..4006dec
--- /dev/null
+++ b/share/metview/icons/READ_ECREGRID.xpm
@@ -0,0 +1,186 @@
+/* XPM */
+static char *READ_ECREGRID[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 148 2",
+"   c #000000",
+".  c #070000",
+"X  c #120000",
+"o  c #160000",
+"O  c #1B0000",
+"+  c #380000",
+"@  c #3F3A26",
+"#  c #670000",
+"$  c #6A0000",
+"%  c #7F0101",
+"&  c #7F0707",
+"*  c #750906",
+"=  c #720C08",
+"-  c #7F0F0F",
+";  c #67160E",
+":  c #681A09",
+">  c #7D1205",
+",  c #751616",
+"<  c #7E1010",
+"1  c #7E1818",
+"2  c #7E1A1A",
+"3  c #7E1F1F",
+"4  c #423824",
+"5  c #6E2323",
+"6  c #682F2F",
+"7  c #7D2323",
+"8  c #7D2525",
+"9  c #7D2929",
+"0  c #643838",
+"q  c #623D3D",
+"w  c #7D3030",
+"e  c #7C3131",
+"r  c #7B3E3E",
+"t  c #34531C",
+"y  c #1F5739",
+"u  c #36422B",
+"i  c #32462E",
+"p  c #34452D",
+"a  c #0E7D2B",
+"s  c #147628",
+"d  c #206924",
+"f  c #404618",
+"g  c #146140",
+"h  c #106542",
+"j  c #00734B",
+"k  c #5B4A4A",
+"l  c #555555",
+"z  c #7B4242",
+"x  c #7B4646",
+"c  c #7B4848",
+"v  c #7A4E4E",
+"b  c #7A5151",
+"n  c #795555",
+"m  c #795A5A",
+"M  c #795D5D",
+"N  c #796161",
+"B  c #796565",
+"V  c #786969",
+"C  c #786A6A",
+"Z  c #786C6C",
+"A  c #786F6F",
+"S  c #777373",
+"D  c #777474",
+"F  c #777777",
+"G  c #787070",
+"H  c #800000",
+"J  c #810303",
+"K  c #820606",
+"L  c #820A0A",
+"P  c #840F0F",
+"I  c #841010",
+"U  c #861515",
+"Y  c #871818",
+"T  c #881C1C",
+"R  c #8C1C1C",
+"E  c #892222",
+"W  c #8B2626",
+"Q  c #912929",
+"!  c #972F2F",
+"~  c #8F3737",
+"^  c #973737",
+"/  c #903838",
+"(  c #903B3B",
+")  c #913C3C",
+"_  c #924040",
+"`  c #9E4747",
+"'  c #954B4B",
+"]  c #975353",
+"[  c #985353",
+"{  c #985656",
+"}  c #995A5A",
+"|  c #9A5E5E",
+" . c #A04B4B",
+".. c #9B6161",
+"X. c #9C6262",
+"o. c #9D6767",
+"O. c #9E6A6A",
+"+. c #9F6F6F",
+"@. c #AE6D6D",
+"#. c #A07171",
+"$. c #A17575",
+"%. c #A27A7A",
+"&. c #A37D7D",
+"*. c #A47F7F",
+"=. c #B07171",
+"-. c #B27676",
+";. c #B57E7E",
+":. c #BF7F7F",
+">. c #06862E",
+",. c #008C30",
+"<. c #6CA631",
+"1. c #3D8585",
+"2. c #329B9B",
+"3. c #24B8B8",
+"4. c #06F3F3",
+"5. c #00FFFF",
+"6. c #A48080",
+"7. c #A58585",
+"8. c #A78989",
+"9. c #A88C8C",
+"0. c #A88F8F",
+"q. c #B68080",
+"w. c #BA8A8A",
+"e. c #AA9494",
+"r. c #AA9696",
+"t. c #AA9797",
+"y. c #AC9A9A",
+"u. c #AC9C9C",
+"i. c #AC9E9E",
+"p. c #BE9393",
+"a. c #BF9595",
+"s. c #AEA1A1",
+"d. c #AFA7A7",
+"f. c #B0AAAA",
+"g. c #B0ACAC",
+"h. c #B2B2B2",
+"j. c #C58B8B",
+"k. c #CB9797",
+"l. c #C09898",
+"z. c #C6A6A6",
+"x. c #CEB9B9",
+"c. c #D8B0B0",
+"v. c #D8D1D1",
+"b. c #DCD9D9",
+"n. c #DDDDDD",
+"m. c #EBD7D7",
+"M. c #ECD8D8",
+"N. c #FFFFFF",
+/* pixels */
+"N.                                                      N.N.N.N.",
+"  d.6.6.n 6.6.n F F F Z n v B F F F F F F F F F n.h.h.F   N.N.N.",
+"  8.H H H H H & F F z K % % H w F       F F F F n.h.h.h.F   N.N.",
+"  8.H ..F h.h.F F m % 8 B G 9 H O h.h.h.n.F F F n.h.h.h.h.F   N.",
+"  8.H _ v $.$.M F w % m F F S S   h.h.h.n.F F F n.h.h.h.h.h.F   ",
+"  8.H K & L L w F 8 H S F F F F   h.h.h.n.F F F n.h.h.h.h.h.h.  ",
+"  8.H ..F h.h.F F w H n F F B b . h.h.h.n.F F F n.h.h.h.h.h.h.  ",
+"  8.H | S g.g.S F n % 7 C Z 3 & o h.h.h.n.F F F n.h.h.h.h.h.h.  ",
+"  8.H H H H H H C F x & % H K x   h.h.h.n.F F F n.h.h.h.h.h.h.  ",
+"  r.] [ z 6.7.r c c c B n v x N F n.a.w.$.C F N z.i.+.#.0.h.h.  ",
+"  *.H H H ( h.E H H % N F - H H v F - H % & C o. .&.H H H $.h.  ",
+"  *.Y %.} H b.Q @.l.l.v.;.P w.` ^ n.R -.p.R ;.;. .&.Y $.~ W h.  ",
+"  *.E h.g.H s.E 6.h.h.h.~ } h.i.] g.U 0.h.' { ..( &.E h.i.% f.  ",
+"  *.T 0.o.P h.E ) } } h.E $.h.h.h.h.U +.7.U $.O.( &.W h.h.K y.  ",
+"  *.H H H ..l # H H H l P M M 2 2 C - H H 1 Z x 9 b 1 h.h.P 0.  ",
+"  *.U ' & . 5.6 i g g 5.$ 0 8.U H i.U ] P +.h.o.( &.W n.h.K e.  ",
+"  &.E   5 4 <.! 3.N.j 5.k @   h.H i.U 8.X.P h...( *.W n.d.H d.  ",
+"  6.$ j 1.> ,.! 2.m.s 4.j.= y + H i.U 8.s.H %.o.( &.T x.[ T h.  ",
+"  q ; <.a H d : H H H c.>.* H H , f.Y 0.h.( ( o.( *.H H % O.h.  ",
+"h.X p <.,.t d k.f f :.M.,.h 4 u . h.o.y.h.0.| 0.$.r.} =.&.h.h.  ",
+"l 5.j <.,.,.N.,.,.,.5.N.5.,.5.N.5.l h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  5.j <.,.,.,.,.5.N.N.N.5.5.j j j   h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  5.j <.,.,.,.,.N.N.5.N.5.<.j j j   h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  5.j <.,.,.,.,.5.N.N.N.5.<.j j j   h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  5.5.N.,.,.,.N.,.,.5.N.5.j j j j   h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"l 5.5.5.N.,.,.N.5.N.N.5.N.5.j j j l h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"h.  5.N.5.N.,.,.,.,.,.N.5.N.5.5.  h.h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  l 5.5.N.5.j j j j j 5.N.5.5.5.l h.h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  h.  5.5.N.5.j j j 5.5.5.5.5.  h.h.h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  h.h.  5.5.N.j j j 5.5.5.5.  h.h.h.h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  h.h.h.l   5.j j j 5.5.  l h.h.h.h.h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"N.        h.l         l h.                                    N."
+};
diff --git a/share/metview/icons/RELHUM.xpm b/share/metview/icons/RELHUM.xpm
new file mode 100644
index 0000000..98493db
--- /dev/null
+++ b/share/metview/icons/RELHUM.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char * RELHUM_icon[] = {
+"32 32 3 1",
+" 	c white",
+".	c black",
+"X	c red",
+"                                ",
+"        .           .           ",
+"       . .         . .          ",
+"       . . ...     . . ...      ",
+"       . .         . .          ",
+"       . .         . .          ",
+"       . . ...     . . ...      ",
+"       . .         . .          ",
+"       . .         . .          ",
+"       .X. ...     . . ...      ",
+"       .X.         . .          ",
+"       .X.         . .          ",
+"       .X. ...     . . ...      ",
+"       .X.         . .          ",
+"       .X.         . .          ",
+"       .X. ...     . . ...      ",
+"       .X.         . .          ",
+"       .X.         .X.          ",
+"       .X. ...     .X. ...      ",
+"       .X.         .X.          ",
+"       .X.         .X.          ",
+"       .X. ...     .X. ...      ",
+"       .X.         .X.          ",
+"       .X.         .X.          ",
+"       .X.         .X.          ",
+"      .XXX.       .XXX.         ",
+"     .XXXXX.     .XXXXX.        ",
+"     .X XXX.     .X XXX.        ",
+"     .X  XX.     .X  XX.        ",
+"      .XXX.       .XXX.         ",
+"       ...         ...          ",
+"                                "};
diff --git a/share/metview/icons/RETRIEVE_ECREGRID.xpm b/share/metview/icons/RETRIEVE_ECREGRID.xpm
new file mode 100755
index 0000000..43cef8e
--- /dev/null
+++ b/share/metview/icons/RETRIEVE_ECREGRID.xpm
@@ -0,0 +1,216 @@
+/* XPM */
+static char *RETRIEVE_ECREGRID[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 178 2",
+"   c #1D202C",
+".  c #20232E",
+"X  c #2D242F",
+"o  c #222531",
+"O  c #262935",
+"+  c #2B2D39",
+"@  c #322834",
+"#  c #2E313C",
+"$  c #30333E",
+"%  c #571821",
+"&  c #622831",
+"*  c #383A45",
+"=  c #3B3E48",
+"-  c #7D135C",
+";  c #4D3E48",
+":  c #3D404B",
+">  c #41444E",
+",  c #434650",
+"<  c #464953",
+"1  c #494C58",
+"2  c #4E505A",
+"3  c #52555E",
+"4  c #59505B",
+"5  c #595C65",
+"6  c #5C5F68",
+"7  c #62656F",
+"8  c #666A73",
+"9  c #696B73",
+"0  c #7A6B73",
+"q  c #70737B",
+"w  c #B41518",
+"e  c #8D1C22",
+"r  c #861E28",
+"t  c #CE0708",
+"y  c #D40202",
+"u  c #D50B0B",
+"i  c #D61212",
+"p  c #D81616",
+"a  c #D81B1B",
+"s  c #D92424",
+"d  c #D62E2F",
+"f  c #DB2D2D",
+"g  c #DB2F30",
+"h  c #D63334",
+"j  c #DC3333",
+"k  c #DE3A3A",
+"l  c #AB3B40",
+"z  c #B33355",
+"x  c #994049",
+"c  c #BE4D6A",
+"v  c #C6464A",
+"b  c #D74546",
+"n  c #DD4343",
+"m  c #D34C4F",
+"M  c #DE5356",
+"N  c #E04646",
+"B  c #E04B4B",
+"V  c #E15353",
+"C  c #E35A5A",
+"Z  c #C86A6F",
+"A  c #E56363",
+"S  c #E66C6C",
+"D  c #E77272",
+"F  c #E87575",
+"G  c #E87A7A",
+"H  c #2924B4",
+"J  c #7B7780",
+"K  c #757982",
+"L  c #797B83",
+"P  c #4B43BC",
+"I  c #1329CB",
+"U  c #182DCC",
+"Y  c #1D32CD",
+"T  c #2837CA",
+"R  c #2539CF",
+"E  c #273BD0",
+"W  c #293DD0",
+"Q  c #2D40D1",
+"!  c #3648D3",
+"~  c #3A4CD3",
+"^  c #4354D5",
+"/  c #505ED5",
+"(  c #5262D9",
+")  c #5B6ADA",
+"_  c #616FDC",
+"`  c #6977DE",
+"'  c #6A78DE",
+"]  c #707EE0",
+"[  c #A179B2",
+"{  c #D47F83",
+"}  c #7F8BE3",
+"|  c #818289",
+" . c #868991",
+".. c #8A8C93",
+"X. c #929197",
+"o. c #90939B",
+"O. c #B5979D",
+"+. c #999CA5",
+"@. c #A0A1A6",
+"#. c #A3A5A9",
+"$. c #A8A9AE",
+"%. c #B5A0A8",
+"&. c #A5A8B0",
+"*. c #AAACB5",
+"=. c #BEABB3",
+"-. c #B3B5BA",
+";. c #D0868B",
+":. c #CD8D92",
+">. c #C8979D",
+",. c #EA8282",
+"<. c #E58D8F",
+"1. c #EB8A8A",
+"2. c #E69192",
+"3. c #EC9191",
+"4. c #EE9A9A",
+"5. c #C19EA5",
+"6. c #C1A7AE",
+"7. c #DFA4A7",
+"8. c #C5B3BA",
+"9. c #C1B8BF",
+"0. c #D6B1B5",
+"q. c #EFA0A0",
+"w. c #EBABAD",
+"e. c #F0A4A4",
+"r. c #F1ABAB",
+"t. c #F2B4B4",
+"y. c #F3BCBC",
+"u. c #A990C7",
+"i. c #B4B7C0",
+"p. c #B6B9C1",
+"a. c #BBBDC4",
+"s. c #828EE3",
+"d. c #8B96E6",
+"f. c #8F99E6",
+"g. c #939DE7",
+"h. c #959EE8",
+"j. c #97A1E8",
+"k. c #A1A9EA",
+"l. c #ABB3EC",
+"z. c #B1B1E6",
+"x. c #B4BBEE",
+"c. c #D1AEC8",
+"v. c #BFC0C3",
+"b. c #BDC1C9",
+"n. c #C2C6CE",
+"m. c #D0C6CD",
+"M. c #DECACE",
+"N. c #C5C8D1",
+"B. c #CCCED3",
+"V. c #D3D5DB",
+"C. c #D7D9DF",
+"Z. c #DBDBDD",
+"A. c #E2CACE",
+"S. c #F5C3C3",
+"D. c #F4C6C8",
+"F. c #F6CBCB",
+"G. c #E4CCDB",
+"H. c #F8D4D4",
+"J. c #F0D8D9",
+"K. c #F9DBDB",
+"L. c #DBDDE1",
+"P. c #C3C9F2",
+"I. c #D0D4F4",
+"U. c #D6DAF6",
+"Y. c #E1E2E4",
+"T. c #E5E6E9",
+"R. c #E9EAED",
+"E. c #FAE4E4",
+"W. c #FBEBEB",
+"Q. c #EEEEF3",
+"!. c #E0E3F8",
+"~. c #EAECFA",
+"^. c #F1EBF3",
+"/. c #EEF0FB",
+"(. c #F3F3F4",
+"). c #FDF3F3",
+"_. c #F5F5FA",
+"`. c #FEFEFE",
+/* pixels */
+"`.`.`.`.`.`.`.`.`.`.(.-.q 2 = o + , 5 ..V.`.`.`.`.`.`.`.`.`.`.`.",
+"`.`.`.`.`.`.`.`.L.8 O O K &.-.b.a.-.+.3   : @.`.`.`.`.`.`.`.`.`.",
+"`.`.`.`.`.`.(.| o 7 b.N.L.R.(._.(.Q.T.V.b.*.$ : a.`.`.`.`.`.`.`.",
+"`.`.`.`.`.Y.> < a.V.J.A B V K.`.`.`.`.`.W.n >.+.. ..`.`.`.`.`.`.",
+"`.`.`.`.B.# q N.(.W.s n r.B w.`.`.`.`.`.S i i b =.+ 9 `.`.`.`.`.",
+"`.`.`.Y.# o.B._.`.e.y ).`.`.`.`.`.`.`.F.y 4.).A i 8.= L `.`.`.`.",
+"`.`.(.< q B.`.`.`.q.y W.`.`.H.D.`.`.`.j y B F.H.y w.b.O #.`.`.`.",
+"`.`.| 1 N._.`.`.`.K.y G `.`.n S `.`.1.y S.N u y M ).R.i.o T.`.`.",
+"`.T.. p.(.`.`.`.`.`.G y A M u [ j.I.g F `.3.s `.`.`.`.C.8 q `.`.",
+"`.q 6 { N `.`.`.`.`.`.w.z - H I I I T z.`.q.y ).`.`.`.(.b.  Z.`.",
+"_.O a.s 4.).j W.`.).!.~ I ^ h.P.x.s.R I ' D.y E.`.`.`.`.Z.8 ..`.",
+"n.+ :.p `.1.k `.S.p / I s.`.`.`.`.`.~.( I j.E.).`.`.`.F.2.v ; `.",
+"q [ h j F.a w.`.V c I ` `.`.`.`.`.`.`._.Q Y !.F.S j y y p u % L.",
+"2 #.<.d y y 4.F.y P R ~.`.`.`.`.`.`.`.`.x.I s.r.u G G s `.m e a.",
+"= v.(.`.F.A u y C I ) `.`.`.`.`.`.`.`.`.`.I ( E.y ).E.y W.;.w $.",
+"o v.`.`.`.`.).4.c.I s.`.`.`.`.`.`.`.`.`.`.~ W `.a t.`.s w.y.t X.",
+"O b.`.`.`.`.`.`.U.I } `.`.`.`.`.`.`.`.`.`.! W `.C G `.S.E.T.J o.",
+": a._.`.`.F.e.H.`.U ( `.`.`.`.`.`.`.`.`._.I ) `.K.K.`.`.`.L.5 $.",
+"3 -.(.S.f y i y { ^ Y !.`.`.`.`.`.`.`.`.k.I d.`.`.`.`.`.`.C.: v.",
+"J  .A.u B H.`.H.y c.I ( `.`.`.`.`.`.`.~.R E ~.`.K.K.`.`.`.n.O Y.",
+"v.* ;.a `.`.`.`.C A _ I ) /.`.`.`.`.I.! I l.K.j y y k H._.-.> `.",
+"_.O 5.u W.`.r.B y s ~.) I W ] k.g.) U U f.).a A E.t.k a M.K ..`.",
+"`.q q d n p y V t.`.`.D u.Q I I I U ^ I.`.4.p `.S.`.W.p Z O Z.`.",
+"`.T.O Z s 1.E.`.`.`.1.y F.E.G.x.P.^.S.).`.G u S i E.`.h l q `.`.",
+"`.`.| 5 B.`.`.`.`.H.y 1.`.3.y S.`.H.y F.`.).A y y.W.4.t @ T.`.`.",
+"`.`.(., ..L.`.`._.g k `.`.`.B p W.H.y F.`.`.`.K.H.y i & #.`.`.`.",
+"`.`.`.Y.# &.L.`.G u K.`.`.`.W.s s C y S.`.`.`.`.(.8.4 J `.`.`.`.",
+"`.`.`.`.B.# o.m.a 4.`.`.`.`.f n ,.G y S.`.`.`.Q.n., 9 `.`.`.`.`.",
+"`.`.`.`.`.Y., 8 c.Y._.`.`.H.y t.`.W.y y.`._.V.-.$ ..`.`.`.`.`.`.",
+"`.`.`.`.`.`.(.| O ..b.C.Q.`.N y u i y 7.B.a.1 @ & x x x x x x x ",
+"`.`.`.`.`.`.`.`.Z.9 O 1 +.p.a.9.6.6.%.q * X & r r r r r r r r r ",
+"`.`.`.`.`.`.`.`.`.`.(.-.q 3 * . + > 6 0 O.0.0.0.0.0.0.0.0.0.0.0."
+};
diff --git a/share/metview/icons/RTTOV_OUTPUT_FILE.xpm b/share/metview/icons/RTTOV_OUTPUT_FILE.xpm
new file mode 100644
index 0000000..0db136b
--- /dev/null
+++ b/share/metview/icons/RTTOV_OUTPUT_FILE.xpm
@@ -0,0 +1,184 @@
+/* XPM */
+static char *RTTOV_OUTPUT_FILE[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 146 2",
+"   c #565271",
+".  c #5F5B7A",
+"X  c #58608F",
+"o  c #4C619D",
+"O  c #5A6291",
+"+  c #5A6596",
+"@  c #5B689B",
+"#  c #5D6999",
+"$  c #5E6A9C",
+"%  c #696584",
+"&  c #6A6983",
+"*  c #6E6D87",
+"=  c #706F8A",
+"-  c #736E8D",
+";  c #72718C",
+":  c #74738E",
+">  c #656B94",
+",  c #67719E",
+"<  c #6A739D",
+"1  c #767690",
+"2  c #797793",
+"3  c #7B7994",
+"4  c #7F7F95",
+"5  c #7C7798",
+"6  c #7F7E99",
+"7  c #5B6EA6",
+"8  c #5D6FA6",
+"9  c #5C72AB",
+"0  c #5E72AA",
+"q  c #5D73AE",
+"w  c #5B73B0",
+"e  c #5D77B5",
+"r  c #5E7BBC",
+"t  c #606FA4",
+"y  c #6270A1",
+"u  c #6373A7",
+"i  c #6776A6",
+"p  c #6876A6",
+"a  c #6C79A7",
+"s  c #777FA6",
+"d  c #5478C1",
+"f  c #557AC4",
+"g  c #7F8099",
+"h  c #7982A9",
+"j  c #7C84AA",
+"k  c #5D80C6",
+"l  c #5E81C6",
+"z  c #5E84CB",
+"x  c #5A83CF",
+"c  c #5A83D0",
+"v  c #5F88D3",
+"b  c #5E8AD6",
+"n  c #5F8CD8",
+"m  c #6084CA",
+"M  c #608CD9",
+"N  c #618EDD",
+"B  c #6292E4",
+"V  c #6295E7",
+"C  c #6296E8",
+"Z  c #6498ED",
+"A  c #669CF1",
+"S  c #689FF5",
+"D  c #68A1F8",
+"F  c #69A2F9",
+"G  c #6BA6FF",
+"H  c #828297",
+"J  c #82819C",
+"K  c #83829D",
+"L  c #87889D",
+"P  c #8581A1",
+"I  c #898AA2",
+"U  c #8C8BA6",
+"Y  c #8187AA",
+"T  c #8389AC",
+"R  c #838AAE",
+"E  c #8F8BAA",
+"W  c #918FAA",
+"Q  c #9293A6",
+"!  c #9395A7",
+"~  c #9291AC",
+"^  c #9594AF",
+"/  c #9798AA",
+"(  c #9B9CAD",
+")  c #9B9DAD",
+"_  c #9E9FAE",
+"`  c #8990B2",
+"'  c #8D93B3",
+"]  c #9894B4",
+"[  c #949AB9",
+"{  c #999EBB",
+"}  c #A29DBD",
+"|  c #9FA0B1",
+" . c #9CA1BB",
+".. c #99A0BD",
+"X. c #A3A3B3",
+"o. c #A3A4B3",
+"O. c #A4A4B4",
+"+. c #A6A6B4",
+"@. c #A6A6B5",
+"#. c #A7A7B7",
+"$. c #A7A8B6",
+"%. c #A8A8B7",
+"&. c #A8A9B8",
+"*. c #AAAAB9",
+"=. c #ABACBA",
+"-. c #ACADBC",
+";. c #ADAEBC",
+":. c #ABA7C7",
+">. c #A8AEC6",
+",. c #A9AFC6",
+"<. c #B5B5C2",
+"1. c #B9B9C5",
+"2. c #BEBFC8",
+"3. c #BBBECF",
+"4. c #B5B0D1",
+"5. c #BFC0CA",
+"6. c #BFC0D0",
+"7. c #C1C2CB",
+"8. c #C2C3CC",
+"9. c #C3C4CC",
+"0. c #C4C5CD",
+"q. c #C6C6CF",
+"w. c #C7C8D0",
+"e. c #CDCDD6",
+"r. c #C7CAD9",
+"t. c #D0D0D8",
+"y. c #D1D2D9",
+"u. c #D3D3DB",
+"i. c #D4D4DC",
+"p. c #D4D5DC",
+"a. c #D6D7DE",
+"s. c #D9DAE3",
+"d. c #DEDEE7",
+"f. c #E4E4E6",
+"g. c #E2E2E9",
+"h. c #E4E4EB",
+"j. c #E6E6ED",
+"k. c #E9EAEB",
+"l. c #EAEBF0",
+"z. c #F2F2F2",
+"x. c #F4F4F7",
+"c. c #F7F7F8",
+"v. c #F9F9FB",
+"b. c #FBFBFC",
+"n. c #FBFCFD",
+"m. c #FFFFFF",
+/* pixels */
+"m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.",
+"m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.",
+"m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.",
+"m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.",
+"m.< i i i i p a s ,.m.m.m.m.x.x.x.x.x.x.x.x.x.x.x.x.x.x.m.m.m.m.",
+"m.u G G G G G G G z h m.m.m.L X.o.X.o.o.o.+.o.o.+.o.+.X._ m.m.m.",
+"m.u G G m 8 q n G G w l.m.m.( z.z.z.z.z.z.z.z.z.z.z.z.z.p./ c.m.",
+"m.u G G 0 n.x., G G x 3.m.m.( z.z.z.z.z.z.z.z.z.z.z.z.z.z.a.Q x.",
+"m.u G G 0 { ` 8 G G e h.m.m.( z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.q.e.",
+"m.u G G A V A G G M s m.m.m.( z.8.+.+.%.%.%.*.*.=.=.;.;.1.z.w.e.",
+"m.u G G N b G F o > m.m.m.m.( z.4   . % ; 5 P E ] } :.4.I z.w.e.",
+"m.u G G 0  .r G G q r.m.m.m.( z.H & * ; 1 3 6 K L U W ^ g z.w.e.",
+"m.u G G 0 n.s A G G $ m.m.m.( z.k.f.f.f.f.f.f.f.f.f.f.f.h.z.q.t.",
+"m.u G G 0 n.j.q G G v ,.m.m.( z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.q.t.",
+"m.t S S 7 b.m.R B S S @ b.m.( z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.q.t.",
+"m.' j j Y m.m.l.j j j j d.m.( z.k.f.f.f.f.f.f.f.f.f.f.f.f.z.9.t.",
+"m.m.m.m.m.m.m.m.m.m.m.m.m.m.( z.H . = ; ; 2 3 K P U E ^ g z.9.y.",
+"m.b.v.v.v.v.v.v.v.v.v.b.m.m.( z.g   . & - 5 P W ] } :.4.I z.9.y.",
+"m.X 9 9 9 9 0 9 9 9 0 O m.m.( z.8.+.+.$.&.*.$.*.=.;.-.;.1.z.9.y.",
+"m.t G G G G G G G G G u m.m.( z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.8.u.",
+"m.+ l l l S G D k l l # m.m.( z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.9.y.",
+"m.s.u.y.R C G Z j y.u.s.m.m.( z.k.f.f.f.f.f.f.f.f.f.f.f.h.z.8.p.",
+"m.m.m.m...C G Z [ m.m.m.m.m.( z.H & * = ; 3 4 K L U E ~ 6 z.8.u.",
+"m.m.m.m...C G Z [ m.m.m.m.m.( z.6   . & - 5 P E ] } :.4.I z.5.a.",
+"m.m.m.m...V G Z [ m.m.m.m.m.( z.2._ | | | X.X.X.+.+.#.&.<.z.2.p.",
+"m.m.m.m...V G Z [ m.m.m.m.m.( z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.8.u.",
+"m.m.m.m...C G Z [ m.m.m.m.m.( z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.8.u.",
+"m.m.m.m...C G Z [ m.m.m.m.m.( z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.2.s.",
+"m.m.m.m...d c f [ m.m.m.m.m._ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ! f.",
+"m.m.m.m.h.6.6.6.g.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.",
+"m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.",
+"m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m."
+};
diff --git a/share/metview/icons/RTTOV_RUN.xpm b/share/metview/icons/RTTOV_RUN.xpm
new file mode 100644
index 0000000..1a965fb
--- /dev/null
+++ b/share/metview/icons/RTTOV_RUN.xpm
@@ -0,0 +1,205 @@
+/* XPM */
+static char *RTTOV_RUN[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 167 2",
+"   c #7A7A7A",
+".  c #7C7C7C",
+"X  c #7E7E7E",
+"o  c #4C5484",
+"O  c #48568D",
+"+  c #4E5B91",
+"@  c #5B6A9D",
+"#  c #4F719D",
+"$  c #49789E",
+"%  c #626B99",
+"&  c #636E9D",
+"*  c #67729F",
+"=  c #576BA4",
+"-  c #596BA2",
+";  c #5A6DA3",
+":  c #5D6CA1",
+">  c #5D6EA4",
+",  c #5D6FA6",
+"<  c #5D70A5",
+"1  c #5478A1",
+"2  c #5C72AB",
+"3  c #5E74AF",
+"4  c #5C75B1",
+"5  c #5C77B6",
+"6  c #5F78B2",
+"7  c #5D79BB",
+"8  c #5E7ABC",
+"9  c #616FA1",
+"0  c #6170A1",
+"q  c #6776A6",
+"w  c #6B75A1",
+"e  c #6C76A2",
+"r  c #6876A6",
+"t  c #667EA2",
+"y  c #6E7AA7",
+"u  c #727AA2",
+"i  c #737CA6",
+"p  c #777EA5",
+"a  c #6079B7",
+"s  c #3D74C7",
+"d  c #3771C8",
+"f  c #4679C5",
+"g  c #4F7DC1",
+"h  c #4F7DC3",
+"j  c #4A7BC4",
+"k  c #5F7EC1",
+"l  c #4F8CA5",
+"z  c #5881A6",
+"x  c #6B83A3",
+"c  c #7C84AA",
+"v  c #7D85AB",
+"b  c #619AAD",
+"n  c #718BB1",
+"m  c #738CB2",
+"M  c #758FB7",
+"N  c #708DB9",
+"B  c #669DB0",
+"V  c #7492BF",
+"C  c #7892B9",
+"Z  c #5782C2",
+"A  c #5E81C5",
+"S  c #5A83D0",
+"D  c #5B86D4",
+"F  c #658AC1",
+"G  c #648BC6",
+"H  c #7092C6",
+"J  c #7D9AC5",
+"K  c #618AD4",
+"L  c #608FDF",
+"P  c #6392E3",
+"I  c #6295E7",
+"U  c #659AEE",
+"Y  c #669CF0",
+"T  c #689EF5",
+"R  c #689FF5",
+"E  c #68A0F6",
+"W  c #6AA4FC",
+"Q  c #6BA5FE",
+"!  c #6BA6FF",
+"~  c #848484",
+"^  c #858585",
+"/  c #888888",
+"(  c #8A8A8A",
+")  c #8F8F8F",
+"_  c #909090",
+"`  c #919191",
+"'  c #929292",
+"]  c #959595",
+"[  c #979797",
+"{  c #999999",
+"}  c #9C9C9C",
+"|  c #8289AB",
+" . c #858AAA",
+".. c #8088AD",
+"X. c #858CAE",
+"o. c #8993A5",
+"O. c #8D97A6",
+"+. c #8F98A4",
+"@. c #8393A9",
+"#. c #959BA3",
+"$. c #929AA8",
+"%. c #8499B9",
+"&. c #839BBF",
+"*. c #9298B6",
+"=. c #959DBC",
+"-. c #97A0AD",
+";. c #9BA3AE",
+":. c #9CA3AE",
+">. c #8EA0BA",
+",. c #98A2B2",
+"<. c #9AA5B5",
+"1. c #93A2B9",
+"2. c #9CA1BE",
+"3. c #A0A0A0",
+"4. c #A3A3A3",
+"5. c #A4A4A4",
+"6. c #A7A7A7",
+"7. c #A0A4AC",
+"8. c #A8A8A8",
+"9. c #A9A9A9",
+"0. c #ABABAB",
+"q. c #AFAFAF",
+"w. c #A6AAB1",
+"e. c #A9ACB2",
+"r. c #A1ABB9",
+"t. c #A4ADBA",
+"y. c #B1B1B1",
+"u. c #B0B3B7",
+"i. c #B4B4B4",
+"p. c #B6B6B6",
+"a. c #B0B4B9",
+"s. c #B8B8B8",
+"d. c #B9B9B9",
+"f. c #BDBDBD",
+"g. c #92A6C3",
+"h. c #8BB2C2",
+"j. c #98BAC8",
+"k. c #B7BBC1",
+"l. c #BEC0D3",
+"z. c #C1C1C1",
+"x. c #C5C5C5",
+"c. c #CCCCCC",
+"v. c #CFCFCF",
+"b. c #C2C3D2",
+"n. c #C5C6D5",
+"m. c #C6C9D8",
+"M. c #D3D3D3",
+"N. c #D7D7D7",
+"B. c #D1D3DF",
+"V. c #DADADA",
+"C. c #DCDCDC",
+"Z. c #D8D9E3",
+"A. c #DCDDE6",
+"S. c #E5E5E5",
+"D. c #E3E3EA",
+"F. c #EBEBEB",
+"G. c #EEEEF2",
+"H. c #F3F3F3",
+"J. c #F0F0F4",
+"K. c #F1F2F5",
+"L. c #F3F4F6",
+"P. c #F4F4F4",
+"I. c #FBFBFB",
+"U. c #FCFCFD",
+"Y. c #FDFDFE",
+"T. c #FFFFFF",
+"R. c #FFFFFF",
+/* pixels */
+"R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.",
+"R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.",
+"R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.",
+"R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.",
+"L.% q q q q r y p l.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.",
+"K.4 ! ! ! ! ! ! ! 7 =.R.R.R.R.R.R.R.R.R.R.R.F.x.z.M.S.L.R.R.R.R.",
+"K.4 ! ! 8 , 4 P ! ! : R.R.R.R.R.R.R.R.L.v.9.{ } } 4.4.9.y.z.V.R.",
+"K.a ! ! q R.G.0 ! ! 5 A.R.R.R.R.R.V.y.' ' [ { } } 4.6.6.y.d.p.R.",
+"G.3 Q Q @ 2...a ! ! , U.R.R.R.N.{ ( ) ) ' [ { } 4.4.6.q.} 4.p.R.",
+"K.a ! ! U I R ! ! A *.R.R.R.R.z.9.y.y.4.} { { } } 6.[ ' { 9.p.R.",
+"P.4 ! ! K L ! U O  .R.R.R.R.R.k.9.9.q.q.y.p.d.d.6.X ( ) { 4.d.R.",
+"G.a ! ! 0 X.K ! ! - D.R.R.R.R.G j N ,.q.y.p.p.p.{ X ( ' { 6.d.R.",
+"K.4 Q Q r R.& W ! R e R.R.R.R.g.g d d f Z F V &.+.X ^ ' } 6.p.R.",
+"J.a Q W q R.m.k ! ! 8 B.R.R.R.z.9.:.C Z j s d d n X ^ ' { 6.d.R.",
+"J.3 E E 0 R.R.* U R U * R.R.R.J M ;.q.q.y.p.u.t.#.X ^ ' { 6.d.R.",
+"P.| c c *.R.R.A.c c c | K.R.R.H d d g N %.1.r.a.} X ^ ' { 4.d.R.",
+"R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.z.-.N g d d d d d n . ^ ` { 4.d.R.",
+"R.n.n.n.n.n.n.n.n.n.n.Z.R.R.R.z.9.9.e.w.<.=.&.V @.. ^ _ { 4.d.R.",
+"R.+ S S S S S S S S S e R.R.R.z.9.9.y.q.y.i.p.d.} . ^ _ { 4.f.R.",
+"R.- ! ! ! ! ! ! ! ! ! y R.R.R.z.9.9.6.:.y.i.p.d.4.. ^ _ { 4.f.R.",
+"U.o > < = ! ! P , < < u R.R.R.z.9.+.1 $ x p.p.d.{   ~ ) [ 4.f.R.",
+"R.R.R.R.i ! ! D b.R.R.R.R.R.R.z.6.t h.b $ e.p.p.4.  ~ ) [ 4.f.R.",
+"R.R.R.R.i ! ! D b.R.R.R.R.R.R.z.6.t j.b $ 7.p.d.4.  ~ ) [ 4.f.R.",
+"R.R.R.R.i ! ! D b.R.R.R.R.R.R.z.9.o.z l # p.p.d.4.  ^ ) [ 4.z.R.",
+"R.R.R.R.i ! ! D b.R.R.R.R.R.R.z.9.9.$.x q.i.p.p.}   ~ ) [ x.I.R.",
+"R.R.R.R.i ! ! D b.R.R.R.R.R.R.z.9.9.9.q.q.i.p.d.4.  ~ [ V.R.R.R.",
+"R.R.R.R.i ! ! D b.R.R.R.R.R.R.S.z.9.q.q.y.i.p.d.4.  4.J.R.R.R.R.",
+"R.R.R.R.i ! ! D b.R.R.R.R.R.R.R.R.U.C.c.x.f.p.d.6.z.R.R.R.R.R.R.",
+"R.R.R.R.p 2 2 + b.R.R.R.R.R.R.R.R.R.R.R.R.R.R.L.P.R.R.R.R.R.R.R.",
+"R.R.R.R.I.K.L.L.I.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.",
+"R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.",
+"R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R."
+};
diff --git a/share/metview/icons/RTTOV_VISUALISER.xpm b/share/metview/icons/RTTOV_VISUALISER.xpm
new file mode 100644
index 0000000..1e75ef0
--- /dev/null
+++ b/share/metview/icons/RTTOV_VISUALISER.xpm
@@ -0,0 +1,179 @@
+/* XPM */
+static char *RTTOV_VISUALISER[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 141 2",
+"   c #485467",
+".  c #565C64",
+"X  c #5B616A",
+"o  c #566379",
+"O  c #5A677C",
+"+  c #5C697D",
+"@  c #626971",
+"#  c #6F747B",
+"$  c #ED1F2D",
+"%  c #CE2330",
+"&  c #C52934",
+"*  c #D72835",
+"=  c #DB2935",
+"-  c #D42D38",
+";  c #E92432",
+":  c #E3313E",
+">  c #B75259",
+",  c #AD7379",
+"<  c #B87A7F",
+"1  c #DC4D58",
+"2  c #C7515A",
+"3  c #D5565F",
+"4  c #DA555E",
+"5  c #D85B64",
+"6  c #C8636B",
+"7  c #D56068",
+"8  c #CE757C",
+"9  c #E4656F",
+"0  c #525A89",
+"q  c #495A93",
+"w  c #535F93",
+"e  c #5C6A81",
+"r  c #52649C",
+"t  c #5F6C9B",
+"y  c #5D769F",
+"u  c #67758C",
+"i  c #6A778A",
+"p  c #6C7A8F",
+"a  c #707682",
+"s  c #797E85",
+"d  c #636F9E",
+"f  c #6E7B91",
+"g  c #68719B",
+"h  c #707D93",
+"j  c #5A6DA4",
+"k  c #5E70A6",
+"l  c #5C71A9",
+"z  c #5D78B6",
+"x  c #606FA4",
+"c  c #6473A5",
+"v  c #6975A4",
+"b  c #637BA1",
+"n  c #6D79A6",
+"m  c #757CA3",
+"M  c #757FA8",
+"N  c #5D7EC2",
+"B  c #79818E",
+"V  c #738095",
+"C  c #778398",
+"Z  c #788599",
+"A  c #7E8A9D",
+"S  c #6C84AA",
+"D  c #7285A1",
+"F  c #7E8DA4",
+"G  c #7C84AA",
+"H  c #5F83C9",
+"J  c #5A83D0",
+"K  c #5F8DDD",
+"L  c #6086D0",
+"P  c #618FDE",
+"I  c #6397EB",
+"U  c #6498EC",
+"Y  c #669CF2",
+"T  c #689FF5",
+"R  c #68A0F6",
+"E  c #6AA5FE",
+"W  c #868E9C",
+"Q  c #9B9495",
+"!  c #A29697",
+"~  c #A39D9E",
+"^  c #808CA0",
+"/  c #818AAE",
+"(  c #8390A4",
+")  c #8D98A8",
+"_  c #939DAD",
+"`  c #858CB0",
+"'  c #8990B2",
+"]  c #9196B4",
+"[  c #909FB6",
+"{  c #96A1AF",
+"}  c #9BA4B2",
+"|  c #9FA9B6",
+" . c #A7A3A4",
+".. c #A9A6A8",
+"X. c #A2A9B6",
+"o. c #A4AEB9",
+"O. c #A6B1BC",
+"+. c #A9B3BD",
+"@. c #B2B2B5",
+"#. c #BCBBBC",
+"$. c #D48E94",
+"%. c #D8979C",
+"&. c #E38C93",
+"*. c #D89CA1",
+"=. c #D2A2A7",
+"-. c #D3A9AD",
+";. c #DDADB1",
+":. c #D4B3B7",
+">. c #ADB6C0",
+",. c #A3B3CB",
+"<. c #AEB1C8",
+"1. c #B4BBC5",
+"2. c #B5B9CE",
+"3. c #ACBAD0",
+"4. c #BCC3CD",
+"5. c #BAC5D7",
+"6. c #C2C4C4",
+"7. c #C5C7CA",
+"8. c #DEC6C9",
+"9. c #C3C5D4",
+"0. c #C4C9D2",
+"q. c #C9CED6",
+"w. c #C4CDDE",
+"e. c #CACBD8",
+"r. c #CBD2D6",
+"t. c #CFD7DA",
+"y. c #DCD0D2",
+"u. c #D9D6D8",
+"i. c #D5DBDC",
+"p. c #DADADC",
+"a. c #C6D0E0",
+"s. c #D5D6E1",
+"d. c #D7DCE1",
+"f. c #D8DDE0",
+"g. c #DAE1E2",
+"h. c #E3E6EC",
+"j. c #E9EAEF",
+"k. c #E5E9F1",
+"l. c #F2F3F5",
+"z. c #F4F5F8",
+"x. c #FFFFFF",
+/* pixels */
+"x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.",
+"x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.",
+"x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.",
+"x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.",
+"x.t v v v v v n M 2.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.",
+"x.l E E E E E E E N ' x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.",
+"x.j E E N j l P E E j z.x.x.l.0.{ h Z } 0.h.x.x.x.x.x.x.x.x.x.x.",
+"x.k E E c x.l.k E E N t.x.x.4.e p h f h p f Z _ } X.o.O.>.1.1.r.",
+"x.l E E j [ ' c E E x z.x.x.4.+.t.| Z V u p h h h f f f f h h s ",
+"z.l E E Y I Y E E J ` x.x.x.4.>.g.g.g.g.7.+._ ( Z C Z C C h + # ",
+"x.l E E L K E T q m x.x.x.x.5.+.g.g.g.g.~ p.g.g.g.g.g.g.g.i.O # ",
+"x.l E E x ] H E E l s.x.x.x.7.+.g.g.g.g.~ 1 4 g.g.g.g.g.g.i.+ # ",
+"x.k E E l x.v R E R d x.x.x.0.O.g.g.g.g.2 4 * u.g.g.g.g.g.g.O # ",
+"x.k E E c x.s.z E E N 9.x.x.0.O.g.g.g.;.= u.5 *.g.g.g.g.g.f.O # ",
+"x.j Y Y j x.x.m U T T t x.x.0.O.8.&.p.: < f.*.7 g.g.:.g.g.g.+ # ",
+"x.G G G ' x.x.h.G G G G j.x.0.o.y.$ 9 9 ..i.u.- i.;.& =.g.g.+ # ",
+"x.x.x.x.x.x.x.x.x.x.x.x.x.x.q.O.6.4 ; y...i.g.3 $.- 8 6 g.g.O # ",
+"x.e.9.9.9.9.9.9.9.9.9.s.x.x.q.o.p.#.!  .Q t.g.%.% %.g.& i.g.+ # ",
+"x.w J J J J J J J J H c x.x.q._ g.g.g.i.Q Q ~ ~ ! ~ ~ > , g.+ # ",
+"x.j E E E E E E E E E v x.x.z.| V { t.g. at .i.g.g.g.g.g.:.-.g.+ # ",
+"x.0 j l j R E I j j l g x.x.x.x.x.d.[ Z i O.4.t.d.g.g.g.g.g.+ @.",
+"x.x.x.x./ R E K <.x.x.x.x.x.x.x.x.x.z.a.X     o f A A A A A X.x.",
+"x.x.x.x./ R E K <.x.x.x.x.x.x.x.x.,.b C X . X B { k.x.x.x.x.x.x.",
+"x.x.x.x./ R E K <.x.x.x.x.x.x.x.x.b _ _ @ . X B [ b ,.x.x.x.x.x.",
+"x.x.x.x./ R E K <.x.x.x.x.x.x.x.x.5.k [ ) B a W _ _ y x.x.x.x.x.",
+"x.x.x.x./ T E K <.x.x.x.x.x.x.x.x.x.g.F b D F ^ ^ D S x.x.x.x.x.",
+"x.x.x.x./ R E K <.x.x.x.x.x.x.x.x.x.x.x.x.w.3.,.,.w.x.x.x.x.x.x.",
+"x.x.x.x./ R E K <.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.",
+"x.x.x.x./ j l r <.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.",
+"x.x.x.x.x.l.l.l.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.",
+"x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.",
+"x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x."
+};
diff --git a/share/metview/icons/VPROF.xpm b/share/metview/icons/VPROF.xpm
new file mode 100755
index 0000000..7684199
--- /dev/null
+++ b/share/metview/icons/VPROF.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static char * VPROF_xpm[] = {
+"32 32 8 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #EC92EB",
+"@	c #BABABA",
+"#	c #E9E9FB",
+"$	c #7F7F7F",
+"%	c #92BEEC",
+"&	c #E4D8C2",
+".........+......................",
+"..........+.....................",
+"...........+....................",
+"............++..................",
+"..............+.................",
+"..............++................",
+"...............+++..............",
+".........@@@@@@@@+@@@@@.........",
+".....@@@@########+#####@@@@.....",
+"..@@@############+#########@@@..",
+".@###############+############@.",
+"@################+#############@",
+"#########@@@@@@+++@@@@@#########",
+"#####@@@@#####++#######@@@@#####",
+"##@@@######++++############@@@##",
+"#@#########+##################@#",
+"@##########+###################@",
+"#########@@+@@@@@@@@@@@#########",
+"#####@@@@##++##########@@@@#####",
+"##@@@#######+++############@@@##",
+"#@#############++++###########@#",
+"@#################+++##########@",
+"#########@@@@@@@@@@@+++#########",
+"#####@@@@#############++@@@#####",
+"##@@@##################++##@@@##",
+"#@######################+#####@#",
+"@#######################+######@",
+"#########$$$$$$$$$$$$$$#+#######",
+"#####$$$$%%%%%%&&&&&&&&$$$$$####",
+"##$$$%%%%%%%%%&&&&&&&&&&&&&$$$##",
+"#$%%%%%%%%%%&&&&&&&&&&&&&&&&&&$#",
+"$%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&$"};
diff --git a/share/metview/icons/VPROFVIEW.xpm b/share/metview/icons/VPROFVIEW.xpm
new file mode 100755
index 0000000..8ef00e8
--- /dev/null
+++ b/share/metview/icons/VPROFVIEW.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char * VPROFVIEW_xpm[] = {
+"32 32 7 1",
+" 	c None",
+".	c #9F9F9F",
+"+	c #FFFFFF",
+"@	c #7F7F7F",
+"#	c #EC92EB",
+"$	c #BABABA",
+"%	c #E9E9FB",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+............................+.",
+".+@@@+++++++##+++++++++++++++.+.",
+".+. at ++++++++++#++++++++++++++.+.",
+".+. at ++++++++++##+++++++++++++.+.",
+".+@@@++++++++++###+++++++++++.+.",
+".+. at +++++$$$$$$$$#$$$$$++++++.+.",
+".+. at +$$$$%%%%%%%%#%%%%%$$$$++.+.",
+".+@@@%%%%%%%%%%%%#%%%%%%%%%$$.+.",
+".+.@%%%%%%%%%%%%%#%%%%%%%%%%%.+.",
+".+.@%%%%%%%%%%%%%#%%%%%%%%%%%.+.",
+".+.@@%%%%$$$$$$###$$$$$%%%%%%.+.",
+".+.@%$$$$%%%%%##%%%%%%%$$$$%%.+.",
+".+.@$%%%%%%####%%%%%%%%%%%%$$.+.",
+".+@@@%%%%%%#%%%%%%%%%%%%%%%%%.+.",
+".+.@%%%%%%%#%%%%%%%%%%%%%%%%%.+.",
+".+.@%%%%%$$#$$$$$$$$$$$%%%%%%.+.",
+".+@@@$$$$%%##%%%%%%%%%%$$$$%%.+.",
+".+.@$%%%%%%%###%%%%%%%%%%%%$$.+.",
+".+.@%%%%%%%%%%%####%%%%%%%%%%.+.",
+".+@@@%%%%%%%%%%%%%###%%%%%%%%.+.",
+".+.@%%%%%$$$$$$$$$$$###%%%%%%.+.",
+".+.@%$$$$%%%%%%%%%%%%%##$$$%%.+.",
+".+@@@%%%%%%%%%%%%%%%%%%##%%$$.+.",
+".+.@%%%%%%%%%%%%%%%%%%%%#%%%%.+.",
+".+.@%%@%%@%%@%%@%%@%%@%%@%%@%.+.",
+".+.@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+.... at ..@.. at ..@.. at ..@.. at ..@..+.",
+".++++++++++++++++++++++++++++++.",
+".++++++++++++++++++++++++++++++.",
+"@..............................."};
diff --git a/share/metview/icons/XSECT.xpm b/share/metview/icons/XSECT.xpm
new file mode 100755
index 0000000..e8dbb6d
--- /dev/null
+++ b/share/metview/icons/XSECT.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char * XSECT_xpm[] = {
+"32 32 7 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #BABABA",
+"@	c #E9E9FB",
+"#	c #7F7F7F",
+"$	c #92BEEC",
+"%	c #E4D8C2",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+".........++++++++++++++.........",
+".....++++@@@@@@@@@@@@@@++++.....",
+"..+++@@@@@@@@@@@@@@@@@@@@@@+++..",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@++++++++++++++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@++++++++++++++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@++++++++++++++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@##############@@@@@@@@@",
+"@@@@@####$$$$$$%%%%%%%%#####@@@@",
+"@@###$$$$$$$$$%%%%%%%%%%%%%###@@",
+"@#$$$$$$$$$$%%%%%%%%%%%%%%%%%%#@",
+"#$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%#"};
diff --git a/share/metview/icons/XSECTVIEW.xpm b/share/metview/icons/XSECTVIEW.xpm
new file mode 100755
index 0000000..25ac071
--- /dev/null
+++ b/share/metview/icons/XSECTVIEW.xpm
@@ -0,0 +1,44 @@
+/* XPM */
+static char * XSECTVIEW_xpm[] = {
+"32 32 9 1",
+" 	c None",
+".	c #989898",
+"+	c #FFFFFF",
+"@	c #BEBEBE",
+"#	c #BABABA",
+"$	c #E9E9FB",
+"%	c #7F7F7F",
+"&	c #92BEEC",
+"*	c #E4D8C2",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++##############++++++ at +.",
+".+ at ++####$$$$$$$$$$$$$$####++ at +.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$##############$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$##############$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$##############$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$%%%%%%%%%%%%%%$$$$$$@+.",
+".+@$$%%%%&&&&&&********%%%%%$@+.",
+".+@%%&&&&&&&&&*************%%@+.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".++++++++++++++++++++++++++++++.",
+"................................"};
diff --git a/share/metview/icons_mv5/ALIGN_BOTTOM.xpm b/share/metview/icons_mv5/ALIGN_BOTTOM.xpm
new file mode 100644
index 0000000..6e0c9a5
--- /dev/null
+++ b/share/metview/icons_mv5/ALIGN_BOTTOM.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * ALIGN_BOTTOM_xpm[] = {
+"16 16 4 1",
+" 	c #FFFFFFFFFFFF",
+".	c #000000000000",
+"X	c #FFFFCCCC9999",
+"o	c #00000000FFFF",
+"                ",
+"      ....      ",
+"      .XX.      ",
+"      .XX.      ",
+"      .XX. .... ",
+"      .XX. .XX. ",
+"      .XX. .XX. ",
+" .... .XX. .XX. ",
+" .XX. .XX. .XX. ",
+" .XX. .XX. .XX. ",
+" .XX. .XX. .XX. ",
+" .XX. .XX. .XX. ",
+" .XX. .XX. .XX. ",
+" oooooooooooooo ",
+" oooooooooooooo ",
+"                "};
diff --git a/share/metview/icons_mv5/ALIGN_LEFT.xpm b/share/metview/icons_mv5/ALIGN_LEFT.xpm
new file mode 100644
index 0000000..40efe64
--- /dev/null
+++ b/share/metview/icons_mv5/ALIGN_LEFT.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * ALIGN_LEFT_xpm[] = {
+"16 16 4 1",
+" 	c #FFFFFFFFFFFF",
+".	c #00000000FFFF",
+"X	c #000000000000",
+"o	c #FFFFCCCC9999",
+"                ",
+" ..XXXXXX       ",
+" ..oooooX       ",
+" ..oooooX       ",
+" ..XXXXXX       ",
+" ..             ",
+" ..XXXXXXXXXXXX ",
+" ..oooooooooooX ",
+" ..oooooooooooX ",
+" ..XXXXXXXXXXXX ",
+" ..             ",
+" ..XXXXXXXXX    ",
+" ..ooooooooX    ",
+" ..ooooooooX    ",
+" ..XXXXXXXXX    ",
+"                "};
diff --git a/share/metview/icons_mv5/ALIGN_RIGHT.xpm b/share/metview/icons_mv5/ALIGN_RIGHT.xpm
new file mode 100644
index 0000000..16b6140
--- /dev/null
+++ b/share/metview/icons_mv5/ALIGN_RIGHT.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * ALIGN_RIGHT_xpm[] = {
+"16 16 4 1",
+" 	c #FFFFFFFFFFFF",
+".	c #000000000000",
+"X	c #00000000FFFF",
+"o	c #FFFFCCCC9999",
+"                ",
+"       ......XX ",
+"       .oooooXX ",
+"       .oooooXX ",
+"       ......XX ",
+"             XX ",
+" ............XX ",
+" .oooooooooooXX ",
+" .oooooooooooXX ",
+" ............XX ",
+"             XX ",
+"    .........XX ",
+"    .ooooooooXX ",
+"    .ooooooooXX ",
+"    .........XX ",
+"                "};
diff --git a/share/metview/icons_mv5/ALIGN_TOP.xpm b/share/metview/icons_mv5/ALIGN_TOP.xpm
new file mode 100644
index 0000000..7fe57ff
--- /dev/null
+++ b/share/metview/icons_mv5/ALIGN_TOP.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * ALIGN_TOP[] = {
+"16 16 4 1",
+" 	c #FFFFFFFFFFFF",
+".	c #00000000FFFF",
+"X	c #000000000000",
+"o	c #FFFFCCCC9999",
+"                ",
+"                ",
+" .............. ",
+" .............. ",
+" XooX XooX XooX ",
+" XooX XooX XooX ",
+" XooX XooX XooX ",
+" XooX XooX XooX ",
+" XXXX XooX XooX ",
+"      XooX XooX ",
+"      XooX XooX ",
+"      XooX XXXX ",
+"      XooX      ",
+"      XXXX      ",
+"                ",
+"                "};
diff --git a/share/metview/icons_mv5/ANNOTATIONVIEW.xpm b/share/metview/icons_mv5/ANNOTATIONVIEW.xpm
new file mode 100644
index 0000000..6414503
--- /dev/null
+++ b/share/metview/icons_mv5/ANNOTATIONVIEW.xpm
@@ -0,0 +1,90 @@
+/* XPM */
+static char * ANNOTATIONVIEW_xpm[] = {
+"32 32 55 1",
+" 	c None",
+".	c #333333",
+"+	c #FFFFFF",
+"@	c #7E7E7E",
+"#	c #E5E5E5",
+"$	c #2C92FA",
+"%	c #007FFF",
+"&	c #81B8F0",
+"*	c #2B92FA",
+"=	c #2690FA",
+"-	c #B3CFEA",
+";	c #2D93F9",
+">	c #2C93F9",
+",	c #B0CDEB",
+"'	c #57A5F5",
+")	c #8ABCEF",
+"!	c #88BBEF",
+"~	c #54A4F5",
+"{	c #D7DFE6",
+"]	c #0883FD",
+"^	c #0B84FD",
+"/	c #DAE0E6",
+"(	c #D9DFE6",
+"_	c #0A83FD",
+":	c #0882FE",
+"<	c #D6DEE6",
+"[	c #84BAEF",
+"}	c #5DA8F4",
+"|	c #5AA7F4",
+"1	c #83B9F0",
+"2	c #2991FA",
+"3	c #B8D1E9",
+"4	c #B7D0EA",
+"5	c #2891FA",
+"6	c #B2CEEA",
+"7	c #2F94F9",
+"8	c #B1CEEA",
+"9	c #56A5F5",
+"0	c #8CBDEF",
+"a	c #0C84FD",
+"b	c #DBE0E6",
+"c	c #84B9F0",
+"d	c #5FA9F4",
+"e	c #BAD2E9",
+"f	c #55A5F5",
+"g	c #0983FD",
+"h	c #D8DFE6",
+"i	c #5EA9F4",
+"j	c #58A6F4",
+"k	c #85BAEF",
+"l	c #2790FA",
+"m	c #B4CFEA",
+"n	c #B0CDEA",
+"o	c #3094F9",
+"p	c #2A91FA",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+@##########################@+.",
+".+@##########################@+.",
+".+@#####$%%%%%%%%&###########@+.",
+".+@#####*%%%%%%%%=###########@+.",
+".+@##########-%;>%,##########@+.",
+".+@##########'%)!%~##########@+.",
+".+@#########{]^/(_:<#########@+.",
+".+@#########[%}##|%1#########@+.",
+".+@#########2%3##4%5#########@+.",
+".+@########6%7####>%8########@+.",
+".+@########9%0####!%9########@+.",
+".+@#######{:ab####(_]{#######@+.",
+".+@#######c%d######|%c#######@+.",
+".+@#######5%e######4%2#######@+.",
+".+@######8%%%%%%%%%%%%6######@+.",
+".+@######f%%%%%%%%%%%%'######@+.",
+".+@#####<:ab########(g]h#####@+.",
+".+@#####1%i##########j%k#####@+.",
+".+@#####l%e##########m%*#####@+.",
+".+@####n%o############2%m####@+.",
+".+@####~%0############[%j####@+.",
+".+@#$%%%%%%$########p%%%%%%$#@+.",
+".+@#>%%%%%%>########*%%%%%%>#@+.",
+".+@##########################@+.",
+".+@##########################@+.",
+".+@##########################@+.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".++++++++++++++++++++++++++++++.",
+"................................"};
diff --git a/share/metview/icons_mv5/AVERAGE.xpm b/share/metview/icons_mv5/AVERAGE.xpm
new file mode 100755
index 0000000..008efd3
--- /dev/null
+++ b/share/metview/icons_mv5/AVERAGE.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static char * AVERAGE_xpm[] = {
+"32 32 8 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #BABABA",
+"@	c #E9E9FB",
+"#	c #EC92EB",
+"$	c #7F7F7F",
+"%	c #92BEEC",
+"&	c #E4D8C2",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+".........++++++++++++++.........",
+".....++++@@@@@@@@@@@@@@++++.....",
+"..+++@@@@@@@@@@@@@@@@@@@@@@+++..",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+"+@@@@@@@@@@#@@@@@@@@#@@@@@@@@@@+",
+"@@@@@@@@@++##++++++##++@@@@@@@@@",
+"@@@@@++++@@###@@@@###@@++++@@@@@",
+"@@#############@@#############+@",
+"@+@@@@@@@@@###@@@@###@@@@@@@@@+@",
+"+@@@@@@@@@@##@@@@@@##@@@@@@@@@@+",
+"@@@@@@@@@++#++++++++#++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@++++++++++++++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@$$$$$$$$$$$$$$@@@@@@@@@",
+"@@@@@$$$$%%%%%%&&&&&&&&$$$$$@@@@",
+"@@$$$%%%%%%%%%&&&&&&&&&&&&&$$$@@",
+"@$%%%%%%%%%%&&&&&&&&&&&&&&&&&&$@",
+"$%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&$"};
diff --git a/share/metview/icons_mv5/AVERAGEVIEW.xpm b/share/metview/icons_mv5/AVERAGEVIEW.xpm
new file mode 100755
index 0000000..a533ddc
--- /dev/null
+++ b/share/metview/icons_mv5/AVERAGEVIEW.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char * AVERAGEVIEW_xpm[] = {
+"32 32 10 1",
+" 	c None",
+".	c #989898",
+"+	c #FFFFFF",
+"@	c #BCBCBC",
+"#	c #BABABA",
+"$	c #E9E9FB",
+"%	c #EC92EB",
+"&	c #7F7F7F",
+"*	c #92BEEC",
+"=	c #E4D8C2",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++##############++++++ at +.",
+".+ at ++####$$$$$$$$$$$$$$####++ at +.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$%$$$$$$$$%$$$$$$$$@+.",
+".+@$$$$$$##%%######%%##$$$$$$@+.",
+".+@$$####$$%%%$$$$%%%$$####$$@+.",
+".+@%%%%%%%%%%%%$$%%%%%%%%%%%%@+.",
+".+@$$$$$$$$%%%$$$$%%%$$$$$$$$@+.",
+".+@$$$$$$$$%%$$$$$$%%$$$$$$$$@+.",
+".+@$$$$$$##%########%##$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$##############$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$&&&&&&&&&&&&&&$$$$$$@+.",
+".+@$$&&&&******========&&&&&$@+.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".++++++++++++++++++++++++++++++.",
+"................................"};
diff --git a/share/metview/icons_mv5/BINARY.xpm b/share/metview/icons_mv5/BINARY.xpm
new file mode 100644
index 0000000..7d35212
--- /dev/null
+++ b/share/metview/icons_mv5/BINARY.xpm
@@ -0,0 +1,37 @@
+/* XPM */
+static char * BINARY_icon[] = {
+"32 32 2 1",
+" 	c #000000000000",
+".	c #FFFFFFFFFFFF",
+"                                ",
+" .............................. ",
+" .............................. ",
+" .. ... ... ... ... ... ... ... ",
+" . . .  .. . . . .  .. . . . .. ",
+" . . .. .. . . . .. .. . . . .. ",
+" . . .. .. . . . .. .. . . . .. ",
+" .. ..   .. ... ..   .. ... ... ",
+" .............................. ",
+" .............................. ",
+" .............................. ",
+" .............................. ",
+" .............................. ",
+" .............................. ",
+" .. ... ... ... ... ... ... ... ",
+" .  .. . .  .. . . . .  .. . .. ",
+" .. .. . .. .. . . . .. .. . .. ",
+" .. .. . .. .. . . . .. .. . .. ",
+" .   .. ..   .. ... ..   .. ... ",
+" .............................. ",
+" .............................. ",
+" .............................. ",
+" .............................. ",
+" .............................. ",
+" .............................. ",
+" .. ... ... ... ... ... ... ... ",
+" .  .. . . . . . .  .. . .  ... ",
+" .. .. . . . . . .. .. . .. ... ",
+" .. .. . . . . . .. .. . .. ... ",
+" .   .. ... ... ..   .. ..   .. ",
+" .............................. ",
+"                                "};
diff --git a/share/metview/icons_mv5/BINNING.svg b/share/metview/icons_mv5/BINNING.svg
new file mode 100644
index 0000000..b56d264
--- /dev/null
+++ b/share/metview/icons_mv5/BINNING.svg
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64"
+   height="64"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="BINNING.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   style="display:inline">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective3035" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="14.106061"
+     inkscape:cx="19.654327"
+     inkscape:cy="21.591383"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     width="64px"
+     height="64px"
+     inkscape:window-width="1536"
+     inkscape:window-height="1134"
+     inkscape:window-x="2005"
+     inkscape:window-y="-11"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2848"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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">
+    <rect
+       style="fill:#e6eaec;fill-opacity:1;stroke:#696e78;stroke-width:1.80000007;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3833"
+       width="62.467182"
+       height="62.242748"
+       x="0.85069817"
+       y="0.90655333" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="bg"
+     style="display:inline">
+    <rect
+       style="opacity:0.38172045;fill:#74a9d1;fill-opacity:1;stroke:none;display:inline"
+       id="rect3822"
+       width="26.138727"
+       height="15.967694"
+       x="17.730919"
+       y="46.233124" />
+    <rect
+       style="opacity:0.38172045;fill:#2161c7;fill-opacity:1;stroke:none;display:inline"
+       id="rect3826"
+       width="26.123205"
+       height="26.743126"
+       x="17.943594"
+       y="19.010782"
+       rx="0" />
+    <rect
+       rx="0"
+       y="19.081675"
+       x="44.315235"
+       height="27.097662"
+       width="18.411552"
+       id="rect3828"
+       style="opacity:0.38172045;fill:#74a9d1;fill-opacity:1;stroke:none;display:inline" />
+    <rect
+       style="opacity:0.38172045;fill:#74a9d1;fill-opacity:1;stroke:none;display:inline"
+       id="rect3830"
+       width="18.411552"
+       height="16.960176"
+       x="44.17345"
+       y="1.8550371"
+       rx="0" />
+    <rect
+       rx="0"
+       ry="0"
+       y="46.516689"
+       x="1.7803285"
+       height="15.684128"
+       width="16.143023"
+       id="rect3835"
+       style="opacity:0.38172045;fill:#74a9d1;fill-opacity:1;stroke:none;display:inline" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="circle"
+     style="display:inline">
+    <path
+       style="fill:none;stroke:#3a5bcb;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 18.044576,1.7748251 c 0,60.4503469 0,60.4503469 0,60.4503469 l 0,0"
+       id="path2173" />
+    <path
+       style="fill:none;stroke:#3a5bcb;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 44.116542,1.7757744 c 0,60.5902336 0,60.5902336 0,60.5902336"
+       id="path2179" />
+    <path
+       inkscape:transform-center-y="-7.6505747"
+       inkscape:transform-center-x="20.422423"
+       id="path3793"
+       d="m 1.6845705,46.039889 c 60.8100435,0 60.8100435,0 60.8100435,0"
+       style="fill:none;stroke:#3a5bcb;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:none;stroke:#3a5bcb;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 1.7534714,19.030221 c 60.6722416,0 60.6722416,0 60.6722416,0"
+       id="path3795"
+       inkscape:transform-center-x="20.376143"
+       inkscape:transform-center-y="-7.6505747" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/BUFR.svg b/share/metview/icons_mv5/BUFR.svg
new file mode 100644
index 0000000..afda533
--- /dev/null
+++ b/share/metview/icons_mv5/BUFR.svg
@@ -0,0 +1,335 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="64"
+   height="64"
+   id="svg3688"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="BUFR.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/tmp/cgr/PERFORCE/development/metview/share/metview/icons/BUFR.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"
+   version="1.1"
+   style="display:inline">
+  <defs
+     id="defs3690">
+    <linearGradient
+       id="linearGradient3841">
+      <stop
+         id="stop3843"
+         offset="0"
+         style="stop-color:#ce979b;stop-opacity:1;" />
+      <stop
+         id="stop3845"
+         offset="1"
+         style="stop-color:#e4c9cd;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3669">
+      <stop
+         style="stop-color:#f80a20;stop-opacity:1;"
+         offset="0"
+         id="stop3671" />
+      <stop
+         style="stop-color:#d2a7ae;stop-opacity:1;"
+         offset="1"
+         id="stop3673" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4275">
+      <stop
+         style="stop-color:#c5e9eb;stop-opacity:1;"
+         offset="0"
+         id="stop4277" />
+      <stop
+         style="stop-color:#c5e9eb;stop-opacity:0;"
+         offset="1"
+         id="stop4279" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4229">
+      <stop
+         style="stop-color:#63a1d0;stop-opacity:1;"
+         offset="0"
+         id="stop4231" />
+      <stop
+         style="stop-color:#adc1af;stop-opacity:1;"
+         offset="1"
+         id="stop4233" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4229"
+       id="linearGradient3684"
+       x1="14.5655"
+       y1="32.444443"
+       x2="61.434502"
+       y2="32.444443"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0003011,0,0,1.02,0.74429032,-1.12)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4229"
+       id="linearGradient4227"
+       x1="7.4365482"
+       y1="14.912783"
+       x2="17.436548"
+       y2="14.912783"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(2.063452,-4.412783)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4229"
+       id="linearGradient4235"
+       x1="2.3853252"
+       y1="34.659901"
+       x2="8.3853254"
+       y2="34.659901"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.8853253,0.618821)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4275"
+       id="linearGradient4283"
+       x1="7.75"
+       y1="34.875"
+       x2="34.875"
+       y2="34.875"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3669"
+       id="linearGradient3675"
+       x1="53.5"
+       y1="52"
+       x2="38.5"
+       y2="53"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-8,1)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3841"
+       id="radialGradient3848"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3497297,-0.00262664,0.0082791,2.1706551,-25.042772,-59.056407)"
+       cx="46.368687"
+       cy="51.512447"
+       fx="46.368687"
+       fy="51.512447"
+       r="2.7461929" />
+    <linearGradient
+       id="linearGradient4229-9">
+      <stop
+         style="stop-color:#63a1d0;stop-opacity:1;"
+         offset="0"
+         id="stop4231-2" />
+      <stop
+         style="stop-color:#adc1af;stop-opacity:1;"
+         offset="1"
+         id="stop4233-2" />
+    </linearGradient>
+    <linearGradient
+       y2="14.912783"
+       x2="17.436548"
+       y1="14.912783"
+       x1="7.4365482"
+       gradientTransform="matrix(0.23670681,-0.22287726,0.21345541,0.24715496,18.127973,13.459736)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4166"
+       xlink:href="#linearGradient4229-9"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.5625"
+     inkscape:cx="5.7081084"
+     inkscape:cy="32"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1593"
+     inkscape:window-height="1001"
+     inkscape:window-x="1988"
+     inkscape:window-y="0"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3709" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="-20.22335,27.77665"
+       id="guide3751" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer4"
+     inkscape:label="inner"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient4283);fill-opacity:1;stroke:none;display:inline"
+       id="path4257"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="m 34.875,34.875 a 13.5625,22.28125 0 1 1 -27.125,0 13.5625,22.28125 0 1 1 27.125,0 z"
+       transform="matrix(2.1986858,0.02524672,0,1.3464236,-15.779742,-15.494592)" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="map"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3684);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:0.86900002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 44.757538,5 0,3.0600001 -1.000302,0 -2.000601,0 c 0,0 0,0 -1.000301,-1.0200001 C 39.756031,6.0200001 37.75543,8.0600001 37.75543,8.0600001 l -1.000301,1.02 c 0,0 -2.000602,-1.02 -4.001204,3.0599999 -2.000602,4.08 1.000301,1.020001 1.000301,1.020001 L 35.754829,12.14 l 0,2.040001 L 34.754527,16.22 33.754226,17.240001 31.753624,16.22 l -2.000603,-1.019999 -1.000301,0 0,1.019999 -2.000601,1.020001 -1.000302,0 -2.000601,1.019999 1.0003,2.039999 c 0,0 -1.0003,0 -2.000603,0 -1.0003 [...]
+       id="path3662" />
+    <path
+       style="fill:url(#linearGradient4227);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="m 16,6 -4,3 -2,5 1,1 1,0 2,-1 2,-1 2,-2 1,-2 0,-1 0,-1 -3,-1 z"
+       id="path3656"
+       sodipodi:nodetypes="cccccccccccc" />
+    <path
+       style="fill:url(#linearGradient4235);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 3.9375,30.5625 C 3.4003906,30.61133 3,31 3,31 L 2,35 4,40 4,39 5,37 6,36 7,34 7,33 6,32 C 6,32 6,32 5,31 4.625,30.625 4.2597656,30.533203 3.9375,30.5625 z"
+       id="path3660"
+       sodipodi:nodetypes="ccccccccccsc" />
+    <path
+       style="fill:url(#linearGradient4166);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 23.649513,12.927166 -0.306461,1.632974 0.593864,1.68153 0.450162,0.02428 0.236706,-0.222877 0.259959,-0.69291 0.259959,-0.692909 0.0465,-0.940065 L 25,13 24.786545,12.752845 24.573089,12.50569 23.649513,12.927167 z"
+       id="path3656-4"
+       sodipodi:nodetypes="cccccccccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:#3d6689;stroke-width:1.14283538;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path2883"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="m 34.875,34.875 a 13.5625,22.28125 0 1 1 -27.125,0 13.5625,22.28125 0 1 1 27.125,0 z"
+       transform="matrix(2.2119815,0.02524672,0,1.3464236,-15.142857,-15.494593)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="thermo"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3675);fill-opacity:1;fill-rule:evenodd;stroke:#000006;stroke-width:2.0999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="M 39.5,6 C 37.567003,6 36,7.6842778 36,9.7619398 L 36,46 c -1.801162,1.086862 -3,2.981171 -3,5.143277 0,3.376201 2.910149,6.113152 6.5,6.113152 3.589851,0 6.5,-2.736951 6.5,-6.113152 C 46,48.981171 44.801162,47.086862 43,46 L 43,9.7619398 C 43,7.6842778 41.432997,6 39.5,6 z"
+       id="rect3626" />
+    <rect
+       style="fill:#fdfafb;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect3717-4"
+       width="5"
+       height="25"
+       x="37"
+       y="9" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#fdfafb;fill-opacity:1;fill-rule:evenodd;stroke:#101125;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path3749"
+       sodipodi:cx="2.5532994"
+       sodipodi:cy="7.3299494"
+       sodipodi:rx="3.4467006"
+       sodipodi:ry="0.67005074"
+       d="m 6,7.3299494 a 3.4467006,0.67005074 0 1 1 -6.89340115,-1e-7 l 3.44670055,1e-7 z"
+       sodipodi:start="0"
+       sodipodi:end="3.1415927"
+       transform="matrix(0.72533136,0,0,-4.4772721,37.648012,42.818177)" />
+    <path
+       style="fill:url(#radialGradient3848);fill-opacity:1;fill-rule:evenodd;stroke:#101125;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="m 39,52 c 1.377427,1.137741 3.059391,0.08521 2.675514,2.235834 -0.261597,1.465567 -4.309581,0.503158 -5.688359,-0.63453 C 34.608379,52.463618 34.758413,50.757457 36.322267,49.79049 37.886124,48.823523 37.621222,50.862313 39,52 z"
+       id="path3831"
+       sodipodi:nodetypes="csssc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 37,34 c 5,0 5,0 5,0"
+       id="path3974" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer8"
+     inkscape:label="thermo inner"
+     style="display:inline">
+    <path
+       style="fill:none;stroke:#2a2934;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 45.999998,9 C 55,9 55,9 55,9"
+       id="path3753" />
+    <path
+       style="fill:none;stroke:#2a2934;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 46,17 c 9.000002,0 9.000002,0 9.000002,0"
+       id="path3753-5" />
+    <path
+       style="fill:none;stroke:#2a2934;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 46,25 c 9.000002,0 9.000002,0 9.000002,0"
+       id="path3753-0" />
+    <path
+       style="fill:none;stroke:#2a2934;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 46,32 c 9.000002,0 9.000002,0 9.000002,0"
+       id="path3753-7" />
+    <path
+       style="fill:none;stroke:#2a2934;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 46,40 c 9.000002,0 9.000002,0 9.000002,0"
+       id="path3753-90" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/BUFRPICKER.svg b/share/metview/icons_mv5/BUFRPICKER.svg
new file mode 100644
index 0000000..52cd649
--- /dev/null
+++ b/share/metview/icons_mv5/BUFRPICKER.svg
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="BUFRPICKER.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="24.3125"
+     inkscape:cx="-6.4575835"
+     inkscape:cy="15.753213"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1713"
+     inkscape:window-height="1095"
+     inkscape:window-x="2017"
+     inkscape:window-y="35"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0"
+     inkscape:snap-grids="true"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3697">
+      <stop
+         id="stop3699"
+         offset="0"
+         style="stop-color:#2376b8;stop-opacity:1;" />
+      <stop
+         id="stop3701"
+         offset="1"
+         style="stop-color:#353ed7;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3642">
+      <stop
+         style="stop-color:#b87f7f;stop-opacity:1;"
+         offset="0"
+         id="stop3644" />
+      <stop
+         style="stop-color:#fa1511;stop-opacity:1;"
+         offset="1"
+         id="stop3646" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3631">
+      <stop
+         style="stop-color:#e0e0e0;stop-opacity:1;"
+         offset="0"
+         id="stop3633" />
+      <stop
+         style="stop-color:#e0e0e0;stop-opacity:0;"
+         offset="1"
+         id="stop3635" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3623">
+      <stop
+         id="stop3625"
+         style="stop-color:#fcfeff;stop-opacity:1;"
+         offset="0" />
+      <stop
+         id="stop3629"
+         style="stop-color:#bbbfc6;stop-opacity:1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3623"
+       id="linearGradient3220"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9018866,0,0,0.41386165,-6.0812367,8.2564501)"
+       x1="6.3181248"
+       y1="23.55978"
+       x2="42.042122"
+       y2="24.921354" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3631"
+       id="linearGradient3637"
+       x1="-6.451505"
+       y1="7.5"
+       x2="15.451505"
+       y2="7.5"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3642"
+       id="linearGradient3648"
+       x1="7.55"
+       y1="6.5"
+       x2="18.45"
+       y2="6.5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0333333,0,0,1.0330578,2.5000002,-1.2975212)" />
+    <linearGradient
+       y2="6.5"
+       x2="18.450001"
+       y1="6.5"
+       x1="7.5500002"
+       gradientTransform="matrix(0.68888887,0,0,0.77479335,6.9999997,20.276859)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3675"
+       xlink:href="#linearGradient3697"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3697"
+       id="linearGradient3747"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.68888887,0,0,0.77479335,16,18.276859)"
+       x1="7.5500002"
+       y1="6.5"
+       x2="18.450001"
+       y2="6.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3697"
+       id="linearGradient3751"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.68888887,0,0,0.77479335,-2.4000003,18.252066)"
+       x1="7.5500002"
+       y1="6.5"
+       x2="18.450001"
+       y2="6.5" />
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="arrow 2">
+    <path
+       style="fill:url(#linearGradient3675);fill-opacity:1;stroke:#0728c2;stroke-width:0.89999991999999984;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 14,22 4.666666,0 0,1.5 -1.333333,0 0,3.75 2.066667,0 0,0.774793 L 16,31 l -3.333334,-3 0,-0.75 2,0 0,-3.75 -1.333333,0 0,-1.5 L 14,22 z"
+       id="path3640-2"
+       sodipodi:nodetypes="ccccccccccccccc" />
+    <path
+       sodipodi:nodetypes="ccccccccccccccc"
+       id="path3745"
+       d="m 23,20 4.666666,0 0,1.5 -1.333333,0 0,3.75 2.066667,0 0,0.774793 L 25,29 l -3.333334,-3 0,-0.75 2,0 0,-3.75 -1.333333,0 0,-1.5 L 23,20 z"
+       style="fill:url(#linearGradient3747);fill-opacity:1;stroke:#0728c2;stroke-width:0.89999991999999984;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+    <path
+       sodipodi:nodetypes="ccccccccccccccc"
+       id="path3749"
+       d="m 4.6,19.975207 4.666666,0 0,1.5 -1.333333,0 0,3.75 2.066667,0 L 10,26 l -3.4,2.975207 -3.333334,-3 0,-0.75 2,0 0,-3.75 -1.333333,0 0,-1.5 0.666667,0 z"
+       style="fill:url(#linearGradient3751);fill-opacity:1;stroke:#0728c2;stroke-width:0.89999991999999984;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="front"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3637);fill-opacity:1;fill-rule:evenodd;stroke:#525975;stroke-width:0.90300994999999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path2219"
+       sodipodi:cx="4.5"
+       sodipodi:cy="7.5"
+       sodipodi:rx="10.5"
+       sodipodi:ry="6.5"
+       d="m 15,7.5 a 10.5,6.5 0 1 1 -21,0 10.5,6.5 0 1 1 21,0 z"
+       transform="matrix(1.2655513,0,0,0.6142733,10.305019,9.1501738)" />
+    <path
+       style="fill:url(#linearGradient3220);fill-opacity:1;fill-rule:evenodd;stroke:#525975;stroke-width:0.88592643;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 2.7403401,14.637355 0,5.112645 c 0.056694,0.35217 0.3213807,0.706116 0.8737032,1.071029 0.6253711,0.413177 1.5828728,0.814287 2.7902117,1.151861 2.4146761,0.675147 5.819682,1.111446 9.582543,1.111446 3.762862,0 7.16787,-0.436299 9.582543,-1.111446 1.20734,-0.337574 2.193022,-0.738685 2.818396,-1.151861 0.46903,-0.309881 0.740336,-0.609592 0.84552,-0.909363 l 0,-5.274311 c -0.02905,0.02004 -0.05465,0.04087 -0.08455,0.06062 -0.77795,0.513983 -1.827101,0.949674 -3.128418,1.31352 [...]
+       id="path3218" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="arrow">
+    <path
+       style="fill:url(#linearGradient3648);fill-opacity:1;stroke:#c92222;stroke-width:0.89999992;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 13,1 7,0 0,2 -2,0 0,5 3.1,0 0,1.033058 L 16,13 11,9 l 0,-1 3,0 0,-5 -2,0 0,-2 1,0 z"
+       id="path3640"
+       sodipodi:nodetypes="ccccccccccccccc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/Broken.svg b/share/metview/icons_mv5/Broken.svg
new file mode 100644
index 0000000..1d11d6e
--- /dev/null
+++ b/share/metview/icons_mv5/Broken.svg
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg2985"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="Broken.svg"
+   inkscape:export-filename="C:\Documents and Settings\ecmwf\Desktop\icons\Broken.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <title
+     id="title2993">Metview icon</title>
+  <defs
+     id="defs2987">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3753">
+      <stop
+         style="stop-color:#ffef7c;stop-opacity:1"
+         offset="0"
+         id="stop3755" />
+      <stop
+         style="stop-color:#ffef8a;stop-opacity:0;"
+         offset="1"
+         id="stop3757" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3753"
+       id="linearGradient3759"
+       x1="34.628284"
+       y1="31.149206"
+       x2="50.475296"
+       y2="0.15746903"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.32"
+     inkscape:cx="30.358789"
+     inkscape:cy="42.900539"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1024"
+     inkscape:window-height="712"
+     inkscape:window-x="-4"
+     inkscape:window-y="-4"
+     inkscape:window-maximized="1"
+     inkscape:snap-from-guide="false"
+     objecttolerance="2"
+     gridtolerance="2"
+     guidetolerance="2">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2995"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:url(#linearGradient3759);stroke:#000000;stroke-width:0.83999999999999986;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;stroke-dasharray:none;fill-opacity:1"
+       d="M 15.531362,11.998912 16.976919,5.5182096 28.37233,9 30.43396,5.8226493 38.972958,8.0616765 38.671296,12.136653 c 7.115656,2.240319 10.313004,2.66407 18.13331,4.623069 L 48.936092,59.259536 9.0106991,39.787286 6.1226651,9.3527425 24.064686,14.964187 23.921249,18.013366 34.123444,21.349705 35,18.224967 l 12.38789,3.623497 1.611953,37.057865"
+       id="rect2984"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccccc" />
+    <path
+       style="fill:#0056c8;fill-opacity:1;stroke:#0056c8;stroke-width:0.83999997;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="M 30.853995,6.5619834 38.292012,8.4903581 37.878789,11.933884 29.201102,9.292113 z"
+       id="rect3761"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:12.84325027px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0;word-spacing:0;fill:#ff0000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="-20.490294"
+       y="47.162266"
+       id="text2990"
+       sodipodi:linespacing="125%"
+       transform="matrix(0.82813672,-0.55483277,0.54578344,0.84186759,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan2992"
+         x="-20.490294"
+         y="47.162266">BROKEN</tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/CARTESIANVIEW.svg b/share/metview/icons_mv5/CARTESIANVIEW.svg
new file mode 100644
index 0000000..a06fea8
--- /dev/null
+++ b/share/metview/icons_mv5/CARTESIANVIEW.svg
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="90"
+   inkscape:export-xdpi="90"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="CARTESIANVIEW.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/CARTESIANVIEW.png">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="24.3125"
+     inkscape:cx="8.7293969"
+     inkscape:cy="16.123163"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1789"
+     inkscape:window-height="1096"
+     inkscape:window-x="1956"
+     inkscape:window-y="33"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false"
+     inkscape:snap-nodes="false"
+     inkscape:snap-bbox="true">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849"
+       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>
+  <defs
+     id="defs3">
+    <inkscape:path-effect
+       effect="skeletal"
+       id="path-effect6220"
+       is_visible="true"
+       pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 z"
+       copytype="single_stretched"
+       prop_scale="1"
+       scale_y_rel="false"
+       spacing="0"
+       normal_offset="0"
+       tang_offset="0"
+       prop_units="false"
+       vertical_pattern="false"
+       fuse_tolerance="0" />
+    <inkscape:path-effect
+       effect="skeletal"
+       id="path-effect6216"
+       is_visible="true"
+       pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 z"
+       copytype="single_stretched"
+       prop_scale="1"
+       scale_y_rel="false"
+       spacing="0"
+       normal_offset="0"
+       tang_offset="0"
+       prop_units="false"
+       vertical_pattern="false"
+       fuse_tolerance="0" />
+    <inkscape:path-effect
+       effect="spiro"
+       id="path-effect6214"
+       is_visible="true" />
+    <linearGradient
+       id="linearGradient6204">
+      <stop
+         style="stop-color:#b5d1de;stop-opacity:1;"
+         offset="0"
+         id="stop6206" />
+      <stop
+         style="stop-color:#dee0fa;stop-opacity:0;"
+         offset="1"
+         id="stop6208" />
+    </linearGradient>
+    <inkscape:path-effect
+       effect="spiro"
+       id="path-effect4753"
+       is_visible="true" />
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mstart"
+       style="overflow:visible">
+      <path
+         id="path3713"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path3716"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;">
+      <path
+         id="path3698"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lend"
+       style="overflow:visible;">
+      <path
+         id="path3692"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.8) rotate(180) translate(12.5,0)" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective48" />
+    <linearGradient
+       id="linearGradient3869">
+      <stop
+         style="stop-color:#fffa02;stop-opacity:1;"
+         offset="0"
+         id="stop3871" />
+      <stop
+         style="stop-color:#dddb31;stop-opacity:1;"
+         offset="1"
+         id="stop3873" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3889-8-5">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-0-0" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-2-6" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3889-7-1-2">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-7-1-5" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-5-0-8" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective2896"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4713"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend-6"
+       style="overflow:visible">
+      <path
+         id="path3716-9"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mstart-2"
+       style="overflow:visible">
+      <path
+         id="path3713-2"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(0.6,0.6)" />
+    </marker>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6204"
+       id="linearGradient6210"
+       x1="2.6553979"
+       y1="16.128649"
+       x2="29.344112"
+       y2="16.128649"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0419315,0,0,1.0482504,-0.52693556,-0.71651692)" />
+    <inkscape:perspective
+       id="perspective6244"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective6266"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="outer frame"
+     style="display:inline">
+    <path
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.89999998000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="m 31.547559,0.41131106 0,31.15167094 -31.13624794,0 L 0.49357328,0.43958918 31.547559,0.41131106 z"
+       id="rect2911"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient6210);fill-opacity:1.0;stroke:#101010;stroke-width:0.67256468999999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       d="m 29.657007,2.5883631 0,27.2039709 -27.026595,0 0.071411,-27.1792763 26.955192,-0.024704 z"
+       id="rect2911-4"
+       sodipodi:nodetypes="ccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="Axes">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.0160768px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Mstart);display:inline"
+       d="M 6.6299581,5.2378044 C 6.670915,25.962621 6.670915,25.962621 6.670915,25.962621"
+       id="path3682" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.00682557px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend);display:inline"
+       d="m 6.180924,25.929364 20.258021,-0.08211 0,0 0,0"
+       id="path3684" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Curve">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.03562117;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.07124225, 1.03562112;stroke-dashoffset:0"
+       d="m 7.1943809,16.658097 12.8811611,0"
+       id="path6222" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.98848516;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.97697031, 0.98848516;stroke-dashoffset:0"
+       d="m 19.819436,15.788587 0.09377,10.294291"
+       id="path6226" />
+    <path
+       style="fill:none;stroke:#d40000;stroke-width:0.82767403;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.65534811, 0.82767405;stroke-dashoffset:0;display:inline"
+       d="m 7.0121767,12.421593 8.2275763,0"
+       id="path6222-9" />
+    <path
+       style="fill:none;stroke:#d40000;stroke-width:1.00454426;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.00908852, 1.00454426;stroke-dashoffset:0;display:inline"
+       d="m 14.809471,12.73235 0.07772,12.828362"
+       id="path6226-5" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/CLEANFILE.xpm b/share/metview/icons_mv5/CLEANFILE.xpm
new file mode 100644
index 0000000..81620ce
--- /dev/null
+++ b/share/metview/icons_mv5/CLEANFILE.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char * Washing_xpm[] = {
+"32 32 7 1",
+" 	c #FFFFFFFFFFFF",
+".	c #777777777777",
+"X	c #DDDDDDDDDDDD",
+"o	c #000000000000",
+"O	c #B2B2B2B2B2B2",
+"+	c #00000000FFFF",
+"@	c #0000FFFFFFFF",
+"    ...........................X",
+"   ...........................X.",
+"  ..........................X...",
+" ..........................X....",
+".XXXXXXXXXXXXXXXXXXXXXXXX.......",
+"X........................X......",
+"X.XXXXXXXXoXXXXXXXXXXoXX.X......",
+"X.XoooXXXoooXXXoooXXoooX.X......",
+"X.XXXXXXXXoXXXXXXXXXXoXX.X......",
+"X........................X......",
+"XOOOOOOOOOOOOOOOOOOOOOOOOX......",
+"XOOOOOOOOOOOOOOOOOOOOOOOOX......",
+"XOOOOOOOOoooooooOOOOOOOOOX......",
+"XOOOOOOooooooooooooOOOOOOX......",
+"XOOOOOooooooooooooooOOOOOX......",
+"XOOOOOooooooooooooooOOOOOX......",
+"XOOOOooooooooooooooooOOOOX......",
+"XOOOOooooooooooooooooOOOOX......",
+"XOOOOoooooooooooooo+oOOOOX......",
+"XOOOOooo+ at ooooooooo@oOOOOX......",
+"XOOOOo at +++++oooo+@++oOOOOX......",
+"XOOOOo++ at +++++@+++++oOOOOX......",
+"XOOOOOo++++ at ++++++@oOOOOOX......",
+"XOOOOOo++++++++++++oOOOOOX......",
+"XOOOOOOo++++++++++oOOOOOOX......",
+"XOOOOOOOo+++++++ooOOOOOOOX......",
+"XOOOOOOOOoooooooOOOOOOOOOX..... ",
+"XOOOOOOOOOOOOOOOOOOOOOOOOX....  ",
+"XOOOOOOOOOOOOOOOOOOOOOOOOX...   ",
+"XOOOOOOOOOOOOOOOOOOOOOOOOX..    ",
+"XXXXXXXXXXXXXXXXXXXXXXXXXX.     ",
+"  ......................        "};
diff --git a/share/metview/icons_mv5/COMPUTE.xpm b/share/metview/icons_mv5/COMPUTE.xpm
new file mode 100644
index 0000000..e742809
--- /dev/null
+++ b/share/metview/icons_mv5/COMPUTE.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char * COMPUTE_icon[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 16 1",
+/* colors */
+" 	c white",
+".	c #B2B2B2B2B2B2",
+"X	c #555555",
+"o	c black",
+"O	c #CCCCCCCCFFFF",
+"+	c #DDDDDDDDDDDD",
+"@	c #FFFFF6F60000",
+"#	c #FFFFB0B00000",
+"$	c #FFFF4F4F0000",
+"%	c #FFFF25250000",
+"&	c gray70",
+"*	c cyan",
+"=	c #000073734B4B",
+"-	c #6C6CA6A63131",
+";	c #7373A3A3FFFF",
+":	c blue",
+/* pixels */
+"         ...................... ",
+"        .......................X",
+"        ...oooooooooooooooooo..X",
+"        ...oOOOOOOOOOOOOOOOOo..X",
+"        ...oOOOOOOOOOOOOOOOOo..X",
+"        ...oOOOOOOOOOOOOOOOOo..X",
+"        ...oooooooooooooooooo..X",
+"        .......................X",
+"        .......................X",
+"        .......................X",
+"        .......................X",
+"        .......................X",
+"        ........++X..@@#..$$%..X",
+"        ........++X..@@#..$$%..X",
+"     &XooooX....XXX..###..%%%..X",
+"    Xo**===*oX.................X",
+"   o*=- * =**=o................X",
+"  o=*-= * =* ==oX+X..++X..++X..X",
+" X=-= ==  * -===X+X..++X..++X..X",
+"&o=-=== ==  -===oXX..XXX..XXX..X",
+"X*=-== ===* *-* *X.............X",
+"o*=-====*   **===o.............X",
+"o*=-====  * *-===oX..++X..;;:..X",
+"o*=-====*   *-===oX..++X..;;:..X",
+"o** === ==* *====oX..XXX..:::..X",
+"X*** == *  * *===X.............X",
+"&o* * ===== * **o..............X",
+" X** *=====* ***X+X..++X..;;:..X",
+"  o** *===*****o++X..++X..;;:..X",
+"   o** ===****o.XXX..XXX..:::..X",
+"    &X*===**oX.................X",
+"     &XooooXXXXXXXXXXXXXXXXXXXX "};
diff --git a/share/metview/icons_mv5/DATACOVERAGE.xpm b/share/metview/icons_mv5/DATACOVERAGE.xpm
new file mode 100644
index 0000000..300db49
--- /dev/null
+++ b/share/metview/icons_mv5/DATACOVERAGE.xpm
@@ -0,0 +1,40 @@
+/* XPM */
+static char * DATACOVERAGE_icon[] = {
+"32 32 5 1",
+" 	c #FFFFFFFFFFFF",
+".	c #B3B3FFFFFFFF",
+"X	c #6C6CA5A56767",
+"o	c #FFFF00000000",
+"O	c #00000000FFFF",
+"           ..........           ",
+"         ..............         ",
+"       X............XoooX       ",
+"      XXX..........XXoooXX      ",
+"     XXX..........XXXoooXX.     ",
+"    XXXXX.........XXXXXXXXXX    ",
+"   XXXXX...........XXXXXXXXXX   ",
+"  XXXX.........X...XXXXXX....X  ",
+"  XXX.........XoooXXXXXXX...XX  ",
+" XX.........XXXoooXXXXXX....X.X ",
+" ...........XXXoooXXXXXX....XXX ",
+"......XX....XXXXXXXXXXXXXX..XXXX",
+".......X....XXXXXXXXXXXXXXXX.XXX",
+"...........XXX.XXXXXXXXXXXX.XXXX",
+"...........XXX..XXXXXXXXXXoooXXX",
+"XXX........XXX.XXXXXX.XXXXoooXXX",
+"..XX....XX.....XXXXXX...XXooo..X",
+"...X.....XX.X.XXXXXX....XX.....X",
+".........X...XXXXXXXX..........X",
+"............XXXXXXXXXX.........X",
+".....OOO....XXXXXX.XXXX........X",
+".....OOO...XXXXXXX..XXXXX......X",
+" ....OOO..XXXXXXXXX...XXXX....XX",
+" ...........XXXXXXX....XX....XX ",
+"  ..........XXXXXX..X..X.....XX ",
+"  ...........XXXX...OOOX.....X  ",
+"   ...........XX....OOO.....XX  ",
+"    ..........XXXX..OOO....XX   ",
+"     ........XXXXX.......XXX    ",
+"      .......XXXXX....XXXXX     ",
+"        ......XXX....XXXX       ",
+"          .....X...XXXX         "};
diff --git a/share/metview/icons_mv5/DISTR_HCENTER.xpm b/share/metview/icons_mv5/DISTR_HCENTER.xpm
new file mode 100644
index 0000000..efb5555
--- /dev/null
+++ b/share/metview/icons_mv5/DISTR_HCENTER.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * DISTR_HCENTER_xpm[] = {
+"16 16 4 1",
+" 	c #FFFFFFFFFFFF",
+".	c #000000000000",
+"X	c #FFFFCCCC9999",
+"o	c #00000000FFFF",
+"                ",
+"....        ....",
+".XX.        .XX.",
+".XX.        .XX.",
+".XX.        .XX.",
+".XX.        .XX.",
+".XX.  o  o  .XX.",
+".XX. oo  oo .XX.",
+".XX.oooooooo.XX.",
+".XX. oo  oo .XX.",
+".XX.  o  o  .XX.",
+".XX.        .XX.",
+".XX.        .XX.",
+".XX.        .XX.",
+"....        ....",
+"                "};
diff --git a/share/metview/icons_mv5/DISTR_VCENTER.xpm b/share/metview/icons_mv5/DISTR_VCENTER.xpm
new file mode 100644
index 0000000..1ed0181
--- /dev/null
+++ b/share/metview/icons_mv5/DISTR_VCENTER.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * DISTR_VCENTER_xpm[] = {
+"16 16 4 1",
+" 	c #FFFFFFFFFFFF",
+".	c #000000000000",
+"X	c #FFFFCCCC9999",
+"o	c #00000000FFFF",
+" .............. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .............. ",
+"       o        ",
+"      ooo       ",
+"     ooooo      ",
+"       o        ",
+"       o        ",
+"     ooooo      ",
+"      ooo       ",
+"       o        ",
+" .............. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .............. "};
diff --git a/share/metview/icons_mv5/DIVROT.svg b/share/metview/icons_mv5/DIVROT.svg
new file mode 100644
index 0000000..0f158f3
--- /dev/null
+++ b/share/metview/icons_mv5/DIVROT.svg
@@ -0,0 +1,956 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="DIVROT.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="13.28125"
+     inkscape:cx="28.659552"
+     inkscape:cy="16.527546"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1366"
+     inkscape:window-height="706"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="1"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849"
+       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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3901">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3903" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3905" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3642">
+      <stop
+         style="stop-color:#e14848;stop-opacity:1;"
+         offset="0"
+         id="stop3644" />
+      <stop
+         style="stop-color:#fa1511;stop-opacity:1;"
+         offset="1"
+         id="stop3646" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       id="filter3897">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.58403735"
+         id="feGaussianBlur3899" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3907"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="25.957588"
+       y2="3.7863109"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.75294117,-0.22588235)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3033"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.37647062,-8.4329411)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-7"
+       id="linearGradient3033-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.45176467,-7.6047059)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3901-7">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3903-4" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3905-0" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-7"
+       id="linearGradient3050"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.45176467,-7.6047059)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3052">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3054" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3056" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-7"
+       id="linearGradient3058"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.45176467,-7.6047059)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3060">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3062" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3064" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       id="filter3888">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.55334703"
+         id="feGaussianBlur3890" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3912"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.90352941,-15.058823)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3922"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-23.004635,-34.416627)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3926"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.30117647,-14.908235)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3934"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91976073,0,0,0.91976074,24.614192,-15.789587)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3938"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.6023529,-17.317647)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3950"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-14.54273,-50.680156)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3952"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(12.724706,-2.8611767)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3956"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96425119,0,0,0.96425119,15.346526,-0.94383193)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3964"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(9.1858826,-17.468235)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient3964-8"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(31.782035,-2.5775897)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3901-2">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3903-45" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3905-5" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient3984"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(9.1858826,-17.468235)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3986">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3988" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3990" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient3992"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(9.1858826,-17.468235)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3994">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3996" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3998" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient3956-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96425122,0,0,0.96425122,38.780414,13.41449)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4001">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4003" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4005" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4007"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96425119,0,0,0.96425119,15.346526,-0.94383193)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4009">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4011" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4013" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient3950-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-37.138883,-65.570801)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4016">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4018" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4020" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4022"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-14.54273,-50.680156)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4024">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4026" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4028" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient3934-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91976073,0,0,0.91976074,49.181617,-2.093757)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4031">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4033" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4035" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4037"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91976073,0,0,0.91976074,24.614192,-15.789587)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4039">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4041" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4043" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4045"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91976073,0,0,0.91976074,24.614192,-15.789587)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4047">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4049" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4051" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient3922-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-45.600788,-49.307272)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4054">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4056" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4058" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4060"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-23.004635,-34.416627)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4062">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4064" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4066" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient3938-5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.6023529,-17.317647)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4069">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4071" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4073" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4075"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.6023529,-17.317647)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4077">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4079" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4081" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4083"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.6023529,-17.317647)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4085">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4087" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4089" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4091"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.6023529,-17.317647)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4093">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4095" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4097" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4099"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.6023529,-17.317647)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4101">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4103" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4105" />
+    </linearGradient>
+    <linearGradient
+       y2="10.638075"
+       x2="32.884647"
+       y1="28.708662"
+       x1="3.7705307"
+       gradientTransform="translate(23.198505,-2.4270017)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4126"
+       xlink:href="#linearGradient3901-2"
+       inkscape:collect="always" />
+    <filter
+       inkscape:collect="always"
+       id="filter4645"
+       x="-0.12713787"
+       width="1.2542757"
+       y="-0.12079295"
+       height="1.2415859">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4647" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4649">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4651" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4653">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4655" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4657">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4659" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4661">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4663" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4665"
+       x="-0.08488758"
+       width="1.1697752"
+       y="-0.22302175"
+       height="1.4460435">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4667" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4669"
+       x="-0.12038486"
+       width="1.2407697"
+       y="-0.072920709"
+       height="1.1458414">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4671" />
+    </filter>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="shadow">
+    <text
+       sodipodi:linespacing="125%"
+       id="text3845-2"
+       y="13.008294"
+       x="1.2126235"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;filter:url(#filter4669);font-family:Arial;-inkscape-font-specification:Arial"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan3916-7"
+         x="1.2126235"
+         y="13.008294"
+         style="fill:#000000"><tspan
+           style="font-size:12px;fill:#000000"
+           id="tspan3936-6"><tspan
+             style="font-size:14px;fill:#000000"
+             id="tspan3966-1"><tspan
+               style="font-size:12px;fill:#000000"
+               id="tspan3968-4">k </tspan></tspan></tspan></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:8px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;filter:url(#filter4665);font-family:Sans"
+       x="25.934084"
+       y="17.681778"
+       id="text3906-2"
+       sodipodi:linespacing="125%"
+       transform="matrix(0.9056962,0,0,1.104123,-22.061177,-14.531765)"><tspan
+         sodipodi:role="line"
+         id="tspan3910-3"
+         x="25.934084"
+         y="17.681778">→</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;filter:url(#filter4661);font-family:Arial;-inkscape-font-specification:Arial"
+       x="-45.525494"
+       y="-19.340216"
+       id="text3918-2"
+       sodipodi:linespacing="125%"
+       transform="matrix(-1,0,0,-1,-22.061177,-14.531765)"><tspan
+         id="tspan3920-2"
+         sodipodi:role="line"
+         style="font-size:12px;fill:#000000"
+         x="-45.525494"
+         y="-19.340216">∆</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.03712845px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;filter:url(#filter4657);font-family:Arial;-inkscape-font-specification:Arial"
+       x="49.25087"
+       y="25.468767"
+       id="text3928-1"
+       sodipodi:linespacing="125%"
+       transform="matrix(0.91976072,0,0,1.0872393,-22.061177,-14.531765)"><tspan
+         style="font-size:11.03712845px;fill:#000000"
+         y="25.468767"
+         x="49.25087"
+         id="tspan3930-6"
+         sodipodi:role="line"><tspan
+           id="tspan3932-8"
+           style="font-size:11.03712845px;fill:#000000">Ψ </tspan></tspan></text>
+    <text
+       transform="matrix(-1,0,0,-1,-22.061177,-14.531765)"
+       sodipodi:linespacing="125%"
+       id="text3940-5"
+       y="-35.603745"
+       x="-37.063587"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;filter:url(#filter4653);font-family:Arial;-inkscape-font-specification:Arial"
+       xml:space="preserve"><tspan
+         y="-35.603745"
+         x="-37.063587"
+         style="font-size:12px;fill:#000000"
+         sodipodi:role="line"
+         id="tspan3942-7">∆</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3944-6"
+       y="42.310265"
+       x="38.853016"
+       style="font-size:11.5710144px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;filter:url(#filter4649);font-family:Arial;-inkscape-font-specification:Arial"
+       xml:space="preserve"
+       transform="matrix(0.96425116,0,0,1.0370742,-22.061177,-14.531765)"><tspan
+         sodipodi:role="line"
+         id="tspan3954-1"
+         x="38.853016"
+         y="42.310265"
+         style="font-size:11.5710144px;fill:#000000">Φ</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;filter:url(#filter4645);font-family:Arial;-inkscape-font-specification:Arial"
+       x="9.796154"
+       y="12.857707"
+       id="text3958-8"
+       sodipodi:linespacing="125%"><tspan
+         style="font-size:10px;fill:#000000"
+         y="12.857707"
+         x="9.796154"
+         id="tspan3960-9"
+         sodipodi:role="line"><tspan
+           id="tspan3962-2"
+           style="font-size:10px;fill:#000000">x </tspan></tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <text
+       sodipodi:linespacing="125%"
+       id="text3845"
+       y="12.649412"
+       x="0.67764723"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3938);fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan3916"
+         x="0.67764723"
+         y="12.649412"
+         style="fill:url(#linearGradient3938)"><tspan
+           style="font-size:12px;fill:url(#linearGradient3938)"
+           id="tspan3936"><tspan
+             style="font-size:14px;fill:url(#linearGradient3938)"
+             id="tspan3966"><tspan
+               style="font-size:12px;fill:url(#linearGradient3938)"
+               id="tspan3968">k </tspan></tspan></tspan></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:8px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#999999;fill-opacity:1;stroke:none;font-family:Sans"
+       x="0.98515171"
+       y="4.1953769"
+       id="text3906"
+       sodipodi:linespacing="125%"
+       transform="scale(0.9056962,1.104123)"><tspan
+         sodipodi:role="line"
+         id="tspan3910"
+         x="0.98515171"
+         y="4.1953769">→</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3922);fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+       x="-22.92934"
+       y="-4.4495707"
+       id="text3918"
+       sodipodi:linespacing="125%"
+       transform="scale(-1,-1)"><tspan
+         id="tspan3920"
+         sodipodi:role="line"
+         style="font-size:12px;fill:url(#linearGradient3922)"
+         x="-22.92934"
+         y="-4.4495707">∆</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.03712845px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3934);fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+       x="24.683443"
+       y="11.772938"
+       id="text3928"
+       sodipodi:linespacing="125%"
+       transform="scale(0.91976072,1.0872393)"><tspan
+         style="font-size:11.03712845px;fill:url(#linearGradient3934)"
+         y="11.772938"
+         x="24.683443"
+         id="tspan3930"
+         sodipodi:role="line"><tspan
+           id="tspan3932"
+           style="font-size:11.03712845px;fill:url(#linearGradient3934)">Ψ </tspan></tspan></text>
+    <text
+       transform="scale(-1,-1)"
+       sodipodi:linespacing="125%"
+       id="text3940"
+       y="-20.7131"
+       x="-14.467436"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3950);fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+       xml:space="preserve"><tspan
+         y="-20.7131"
+         x="-14.467436"
+         style="font-size:12px;fill:url(#linearGradient3950)"
+         sodipodi:role="line"
+         id="tspan3942">∆</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3944"
+       y="27.951942"
+       x="15.419129"
+       style="font-size:11.5710144px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3956);fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+       xml:space="preserve"
+       transform="scale(0.96425119,1.0370742)"><tspan
+         sodipodi:role="line"
+         id="tspan3954"
+         x="15.419129"
+         y="27.951942"
+         style="font-size:11.5710144px;fill:url(#linearGradient3956)">Φ</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3964);fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+       x="9.2611771"
+       y="12.498825"
+       id="text3958"
+       sodipodi:linespacing="125%"><tspan
+         style="font-size:10px;fill:url(#linearGradient3964)"
+         y="12.498825"
+         x="9.2611771"
+         id="tspan3960"
+         sodipodi:role="line"><tspan
+           id="tspan3962"
+           style="font-size:10px;fill:url(#linearGradient3964)">x </tspan></tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/DRAWING_PRIORITY.xpm b/share/metview/icons_mv5/DRAWING_PRIORITY.xpm
new file mode 100644
index 0000000..17dbe1c
--- /dev/null
+++ b/share/metview/icons_mv5/DRAWING_PRIORITY.xpm
@@ -0,0 +1,71 @@
+/* XPM */
+static char * DRAWING_PRIORITY_xpm[] = {
+"32 32 36 1",
+" 	c #FFFFFFFFFFFF",
+".	c #E5E5E5E5E5E5",
+"X	c #7E7E7E7E7E7E",
+"o	c #B2B2B2B2B2B2",
+"O	c #FFFFE2E2ABAB",
+"+	c #FFFFB0B00000",
+"@	c #F0F0E6E68C8C",
+"#	c #BFBFA4A46868",
+"$	c #777777777777",
+"%	c #FFFFFFFFCCCC",
+"&	c #9D9D6868F0F0",
+"*	c #CCCCCCCCCCCC",
+"=	c #BEBEBEBEBEBE",
+"-	c #B0B0C4C4DEDE",
+";	c #7F7F0000FFFF",
+":	c #7B7B1212B2B2",
+">	c #666654543333",
+",	c #7F7F00002C2C",
+"<	c #BFBF93931313",
+"1	c #333333333333",
+"2	c #6C6C7B7B8B8B",
+"3	c #94947A7A4A4A",
+"4	c #999964640000",
+"5	c #000000000000",
+"6	c #66663B3B2020",
+"7	c #FFFF7F7F0000",
+"8	c #F0F079796161",
+"9	c #FFFF4F4F0000",
+"0	c #CCCCCCCCFFFF",
+"q	c #D9D9B7B77777",
+"w	c #E5E55C5C6969",
+"e	c #A7A761613636",
+"r	c #E5E54A4A3939",
+"t	c #999916160808",
+"y	c #25250000FFFF",
+"u	c #FFFF00000000",
+" .XooooooooooooX O+@@@#$$@@@@@@+",
+".$o............oO+@%%&&**%%%%%%@",
+"Xo=.-&&&&&&&.o$o+ at O%%%;*&;%%%%%@",
+"o.-&-.......:>,o@%%%%%&%&%%%%%%@",
+"o&-........o<12o@%%%%%&&;*%%%$1@",
+"2........$1<1o&o@%%%&&*&%&%%3>$@",
+"o.......$#<1>.&o@%*;%%&*;o1331%@",
+"o..&&&-$#<1>O$.:@%&%%&%%o#>31%%@",
+"o-;....>411#OO15@%**%&%o#>31#o%@",
+"2-.....>1#@OOO>5@*;*%;%>>316O#$<",
+"o.&&&&1$.o1>>@>5@*&&&%%3333OOO>4",
+"o&....&...&..$15@%%%%%o1$3>@@O>4",
+":.....--..&....:@%%%%%2&&&&$1>14",
+":.....--..&...&o@%%%%%&%%%%%&%o<",
+":.....&..--...&o@%%%%%%%%;&&%%%@",
+"X2oooo2oo2oooo2X+@@@@@@@@#@@@@@+",
+" O78888888888,17 .&----------:1&",
+"O98OOOOOOOOO3>>8.&-0000000003>:-",
+"78qOOOOOO#3331O8&-0=00000o23310-",
+"8OOOOOOO##>31OO8-00ww000o#>3100-",
+"8OOOOOO##>31##O8-0www00o#>31#o0-",
+"8OOOOOO>>316O#3e-00rw00>>316O#22",
+"8&=&OOO3333OOO>t-000r003333OOO>1",
+"8&=;OO#13>>@@O>t-0000wo12$>@@O>1",
+"8OOOO;:&OOO33>1t-00000e000022>11",
+"8OOO&y&O&OOOOO#e-000000w000000o2",
+"8OOO&yyy;&&&&yy8-0000000w=w0000-",
+"8OOOO;y;OOOOO=y8-0000000=uur000-",
+"8&=&OOOOOOOOOO=8-0000000wuuu000-",
+"8&=&OOOOOOOOOOO8-00000000ru=000-",
+"8OOOOOOOOOOOOOO8-00000000000000-",
+"7888888888888887&--------------&"};
diff --git a/share/metview/icons_mv5/ECFS.xpm b/share/metview/icons_mv5/ECFS.xpm
new file mode 100644
index 0000000..e3a146b
--- /dev/null
+++ b/share/metview/icons_mv5/ECFS.xpm
@@ -0,0 +1,44 @@
+/* XPM */
+static char * ECFS_xpm[] = {
+"32 32 9 1",
+" 	c #FFFFFFFFFFFF",
+".	c #555555555555",
+"X	c #B2B2B2B2B2B2",
+"o	c #FFFF00000000",
+"O	c #CCCCCCCCFFFF",
+"+	c #7373A3A3FFFF",
+"@	c #25250000FFFF",
+"#	c #00000000FFFF",
+"$	c #999915150707",
+"                                ",
+"             .......            ",
+"          ...XXXXXXX...         ",
+"        ..XXXX     XXXX..       ",
+"       .XX             XX.      ",
+"      .X                 X.     ",
+"     .X                   X.    ",
+"    .X                     X.   ",
+"   .X                       X.  ",
+"   .X                       X.  ",
+"  .X                         X. ",
+"  .X          ooooo          X. ",
+"  .X         ooooooo         X. ",
+" .XX        ooo   ooo         X.",
+" .X        ooo     ooo        X.",
+" .X        oo       oo        X.",
+" .X        oo       oo        X.",
+" .X        oo       oo        X.",
+" .X        ooo     ooo        X.",
+" .X         ooo   ooo         X.",
+"  .X         ooooooo         X. ",
+"  .O++O  O++O ooooo          X. ",
+" O@####@@####@O              X. ",
+" ###++####++###             X.  ",
+"+#@.X  ##    @#+            X.  ",
+"O+O .X OO    O+O           X.   ",
+"+###+.X                   X.    ",
+"O+O   .OO    O+O         X.     ",
+"+#@    ##X   @#O       XX.      ",
+" ###++####++###     XXX..$$$$$$$",
+" O@####@@####@OXXXXX...$$$$$$$$$",
+"   O++O  O++O ......            "};
diff --git a/share/metview/icons_mv5/FLEXTRA_FILE.svg b/share/metview/icons_mv5/FLEXTRA_FILE.svg
new file mode 100644
index 0000000..5633dce
--- /dev/null
+++ b/share/metview/icons_mv5/FLEXTRA_FILE.svg
@@ -0,0 +1,334 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="FLEXTRA_FILE.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_FILE_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3622">
+      <stop
+         style="stop-color:#c6cee3;stop-opacity:1;"
+         offset="0"
+         id="stop3624" />
+      <stop
+         style="stop-color:#eaeef9;stop-opacity:0;"
+         offset="1"
+         id="stop3626" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.3066713,0,0,0.3021982,10.941242,6.7385814)"
+       inkscape:collect="always"
+       xlink:href="#linearGradient4229"
+       id="linearGradient4235"
+       x1="2.3853252"
+       y1="34.659901"
+       x2="8.3853254"
+       y2="34.659901"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4229">
+      <stop
+         style="stop-color:#69c5b5;stop-opacity:1"
+         offset="0"
+         id="stop4231" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4233" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.3066713,0,0,0.3021982,10.769814,6.7385814)"
+       inkscape:collect="always"
+       xlink:href="#linearGradient4221"
+       id="linearGradient4227"
+       x1="7.4365482"
+       y1="14.912783"
+       x2="17.436548"
+       y2="14.912783"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4221">
+      <stop
+         style="stop-color:#7cc1b3;stop-opacity:1"
+         offset="0"
+         id="stop4223" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4225" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient3684"
+       x1="14.5655"
+       y1="32.444443"
+       x2="61.434502"
+       y2="32.444443"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.30368994,0,0,0.3021982,10.941902,6.9274553)" />
+    <linearGradient
+       id="linearGradient3678">
+      <stop
+         style="stop-color:#d9dce6;stop-opacity:1;"
+         offset="0"
+         id="stop3680" />
+      <stop
+         style="stop-color:#324060;stop-opacity:1;"
+         offset="1"
+         id="stop3682" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4275">
+      <stop
+         style="stop-color:#c5e9eb;stop-opacity:1;"
+         offset="0"
+         id="stop4277" />
+      <stop
+         style="stop-color:#c5e9eb;stop-opacity:0;"
+         offset="1"
+         id="stop4279" />
+    </linearGradient>
+    <linearGradient
+       y2="34.875"
+       x2="34.875"
+       y1="34.875"
+       x1="7.75"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4339"
+       xlink:href="#linearGradient4275"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3622-95">
+      <stop
+         style="stop-color:#c6cee3;stop-opacity:1;"
+         offset="0"
+         id="stop3624-5" />
+      <stop
+         style="stop-color:#eaeef9;stop-opacity:0;"
+         offset="1"
+         id="stop3626-7" />
+    </linearGradient>
+    <linearGradient
+       y2="26.883516"
+       x2="31.124725"
+       y1="26.883516"
+       x1="2.7741759"
+       gradientTransform="matrix(1.1199495,0,0,1.0481927,-2.9473662,-33.190098)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3173"
+       xlink:href="#linearGradient3622-95"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3622"
+       id="linearGradient3975"
+       x1="-0.0076923072"
+       y1="15.982418"
+       x2="32.11319"
+       y2="15.982418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0033899,0,0,1.006795,-0.07199851,-0.07343596)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="28.4375"
+     inkscape:cx="14.709653"
+     inkscape:cy="15.388584"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer7"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1620"
+     inkscape:window-height="1096"
+     inkscape:window-x="2044"
+     inkscape:window-y="0"
+     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 />
+        <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="layer1"
+     inkscape:label="box"
+     style="display:inline">
+    <rect
+       style="fill:url(#linearGradient3975);fill-opacity:1;stroke:#87a0d2;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3195"
+       width="31.226377"
+       height="31.261541"
+       x="0.42197803"
+       y="0.38681322" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="box#1"
+     style="display:inline">
+    <rect
+       style="fill:url(#linearGradient3173);fill-opacity:1;fill-rule:evenodd;stroke:#4e7ac6;stroke-width:0.80000000999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       id="rect2924"
+       width="31.191208"
+       height="9.1780224"
+       x="0.43955833"
+       y="-9.5999994"
+       transform="matrix(0,1,-1,0,0,0)" />
+  </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>    <text
+       xml:space="preserve"
+       style="font-size:8.22735882px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:85.00000238%;writing-mode:lr-tb;text-anchor:start;fill:#216778;fill-opacity:1;stroke:none;display:inline;font-family:Arial Black;-inkscape-font-specification:'Arial Black, Bold'"
+       x="1.9132091"
+       y="42.483063"
+       id="text4681"
+       transform="scale(0.96637605,1.0347939)"
+       sodipodi:linespacing="85.000002%"><tspan
+         sodipodi:role="line"
+         id="tspan2907"
+         x="1.9132091"
+         y="42.483063">T</tspan><tspan
+         sodipodi:role="line"
+         id="tspan2909"
+         x="1.9132091"
+         y="49.476318">R</tspan><tspan
+         sodipodi:role="line"
+         id="tspan2911"
+         x="1.9132091"
+         y="56.469574">A</tspan><tspan
+         sodipodi:role="line"
+         id="tspan2913"
+         x="1.9132091"
+         y="63.462826" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:8.34053326px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:94.99999881%;writing-mode:lr-tb;text-anchor:start;fill:#3737c8;fill-opacity:1;stroke:none;display:inline;font-family:Arial Black;-inkscape-font-specification:'Arial Black, Bold'"
+       x="9.8165455"
+       y="60.536304"
+       id="text4681-7"
+       transform="scale(0.97692808,1.0236168)"
+       sodipodi:linespacing="94.999999%"><tspan
+         sodipodi:role="line"
+         id="tspan2915"
+         x="9.8165455"
+         y="60.536304" /></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="map"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient4339);fill-opacity:1;stroke:none;display:inline"
+       id="path4257"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="m 34.875,34.875 a 13.5625,22.28125 0 1 1 -27.125,0 13.5625,22.28125 0 1 1 27.125,0 z"
+       transform="matrix(0.65605309,0.00737823,0,0.39348584,6.5660679,2.6024876)" />
+    <path
+       style="fill:url(#linearGradient3684);fill-opacity:1;fill-rule:evenodd;stroke:#2f642a;stroke-width:0.86899996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 24.304259,8.7406445 0,0.9065946 -0.303691,0 -0.607378,0 c 0,0 0,0 -0.30369,-0.3021985 -0.303689,-0.3021975 -0.91107,0.3021985 -0.91107,0.3021985 l -0.30369,0.3021986 c 0,0 -0.60738,-0.3021986 -1.21476,0.9065943 -0.607379,1.208793 0.30369,0.302198 0.30369,0.302198 l 0.60738,-0.302198 0,0.604397 -0.30369,0.604396 -0.30369,0.3022 -0.60738,-0.3022 -0.607379,-0.302198 -0.30369,0 0,0.302198 -0.60738,0.3022 -0.30369,0 -0.60738,0.302198 0.303691,0.604394 c 0,0 -0.303691,0 -0.607381,0 [...]
+       id="path3662" />
+    <path
+       style="fill:url(#linearGradient4227);fill-opacity:1;fill-rule:evenodd;stroke:#19691e;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="m 15.043755,9.8853064 -1.226686,0.9065946 -0.613343,1.510992 0.306672,0.302197 0.306671,0 0.613342,-0.302197 0.613344,-0.302199 0.613342,-0.604397 0.306671,-0.604396 0,-0.302198 0,-0.302199 -0.920013,-0.3021976 z"
+       id="path3656"
+       sodipodi:nodetypes="cccccccccccc" />
+    <path
+       style="fill:url(#linearGradient4235);fill-opacity:1;fill-rule:evenodd;stroke:#2a611e;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="m 12.420266,15.787508 c -0.164717,0.01476 -0.287506,0.132213 -0.287506,0.132213 l -0.306672,1.208791 0.613343,1.510991 0,-0.302198 0.306671,-0.604395 0.306673,-0.3022 0.30667,-0.604395 0,-0.302198 -0.30667,-0.302199 c 0,0 0,0 -0.306673,-0.302197 -0.115001,-0.113326 -0.227008,-0.141066 -0.325836,-0.132213 z"
+       id="path3660"
+       sodipodi:nodetypes="ccccccccccsc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:#3d6689;stroke-width:1.96818519;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path2883"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="m 34.875,34.875 a 13.5625,22.28125 0 1 1 -27.125,0 13.5625,22.28125 0 1 1 27.125,0 z"
+       transform="matrix(0.65605309,0.00737823,0,0.39348584,6.6546571,2.6289229)" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/FLEXTRA_PREPARE.svg b/share/metview/icons_mv5/FLEXTRA_PREPARE.svg
new file mode 100644
index 0000000..8a2f056
--- /dev/null
+++ b/share/metview/icons_mv5/FLEXTRA_PREPARE.svg
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="FLEXTRA_PREPARE.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_PREP_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient4292-4">
+      <stop
+         style="stop-color:#e4a312;stop-opacity:1"
+         offset="0"
+         id="stop4294-6" />
+      <stop
+         id="stop4308-9"
+         offset="0.5"
+         style="stop-color:#dfae71;stop-opacity:1" />
+      <stop
+         style="stop-color:#ccd6c8;stop-opacity:1;"
+         offset="1"
+         id="stop4296-2" />
+    </linearGradient>
+    <linearGradient
+       y2="47.827412"
+       x2="22.57868"
+       y1="19.313492"
+       x1="22.578678"
+       gradientTransform="matrix(0.88453851,0,0,0.86708783,0.91305835,18.590212)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2974"
+       xlink:href="#linearGradient4292-4"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3622-95">
+      <stop
+         style="stop-color:#c6cee3;stop-opacity:1;"
+         offset="0"
+         id="stop3624-5" />
+      <stop
+         style="stop-color:#eaeef9;stop-opacity:0;"
+         offset="1"
+         id="stop3626-7" />
+    </linearGradient>
+    <linearGradient
+       y2="26.883516"
+       x2="31.124725"
+       y1="26.883516"
+       x1="2.7741759"
+       gradientTransform="matrix(1.1199495,0,0,1.0481927,-3.0022529,-33.1544)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5000"
+       xlink:href="#linearGradient3622-95"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3622-955">
+      <stop
+         style="stop-color:#c6cee3;stop-opacity:1;"
+         offset="0"
+         id="stop3624-7" />
+      <stop
+         style="stop-color:#eaeef9;stop-opacity:0;"
+         offset="1"
+         id="stop3626-3" />
+    </linearGradient>
+    <linearGradient
+       y2="15.982418"
+       x2="32.11319"
+       y1="15.982418"
+       x1="-0.0076923072"
+       gradientTransform="matrix(1.0033899,0,0,1.006795,-0.12272693,31.92454)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5039"
+       xlink:href="#linearGradient3622-955"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="28.340063"
+     inkscape:cx="11.589162"
+     inkscape:cy="15.20477"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer6"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1620"
+     inkscape:window-height="1096"
+     inkscape:window-x="235"
+     inkscape:window-y="35"
+     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 />
+        <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)">
+    <rect
+       style="fill:url(#linearGradient5039);fill-opacity:1;stroke:#87a0d2;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.37125027"
+       y="32.384792" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="box">
+    <rect
+       style="fill:url(#linearGradient5000);fill-opacity:1;fill-rule:evenodd;stroke:#4e7ac6;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="rect2924"
+       width="31.191208"
+       height="9.1780224"
+       x="0.3846719"
+       y="-9.5643015"
+       transform="matrix(0,1,-1,0,0,0)" />
+  </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>    <text
+       xml:space="preserve"
+       style="font-size:8.22735882px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:85.00000238%;writing-mode:lr-tb;text-anchor:start;fill:#216778;fill-opacity:1;stroke:none;display:inline;font-family:Arial Black;-inkscape-font-specification:'Arial Black, Bold'"
+       x="1.8615597"
+       y="42.352486"
+       id="text4681"
+       transform="scale(0.96637601,1.0347939)"
+       sodipodi:linespacing="85.000002%"><tspan
+         sodipodi:role="line"
+         id="tspan2907"
+         x="1.8615597"
+         y="42.352486">T</tspan><tspan
+         sodipodi:role="line"
+         id="tspan2909"
+         x="1.8615597"
+         y="49.345741">R</tspan><tspan
+         sodipodi:role="line"
+         id="tspan2911"
+         x="1.8615597"
+         y="56.338997">A</tspan><tspan
+         sodipodi:role="line"
+         id="tspan2913"
+         x="1.8615597"
+         y="63.332253" /></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="item"
+     transform="translate(0,-32)"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient2974);fill-opacity:1;fill-rule:evenodd;stroke:#8e6f2a;stroke-width:1.34681761px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="m 17.610313,39.309525 -0.01692,8.762009 -3.446973,0 6.724813,8.726574 6.751876,-8.726574 -3.419914,0 0,-8.832884 -6.592888,0.07088 z"
+       id="path4290"
+       sodipodi:nodetypes="cccccccc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/FLEXTRA_RUN.svg b/share/metview/icons_mv5/FLEXTRA_RUN.svg
new file mode 100644
index 0000000..c2c6be8
--- /dev/null
+++ b/share/metview/icons_mv5/FLEXTRA_RUN.svg
@@ -0,0 +1,353 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="FLEXTRA_RUN.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_RUN_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3749">
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:1;"
+         offset="0"
+         id="stop3751" />
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:0;"
+         offset="1"
+         id="stop3753" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3741">
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:1;"
+         offset="0"
+         id="stop3743" />
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:0;"
+         offset="1"
+         id="stop3745" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3733">
+      <stop
+         style="stop-color:#2f528a;stop-opacity:1"
+         offset="0"
+         id="stop3735" />
+      <stop
+         style="stop-color:#3f5e91;stop-opacity:0;"
+         offset="1"
+         id="stop3737" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3733"
+       id="linearGradient3739"
+       x1="78.128151"
+       y1="102.62679"
+       x2="110.16354"
+       y2="102.62679"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3741"
+       id="linearGradient3747"
+       x1="98.523994"
+       y1="99.79335"
+       x2="127.85975"
+       y2="99.79335"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3749"
+       id="linearGradient3755"
+       x1="88.325951"
+       y1="84.507774"
+       x2="119.71897"
+       y2="63.179432"
+       gradientUnits="userSpaceOnUse" />
+    <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
+       y2="15.982418"
+       x2="32.11319"
+       y1="15.982418"
+       x1="-0.0076923072"
+       gradientTransform="matrix(1.0033899,0,0,1.006795,-0.04875293,31.924568)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4163"
+       xlink:href="#linearGradient3622-8"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3622-95">
+      <stop
+         style="stop-color:#c6cee3;stop-opacity:1;"
+         offset="0"
+         id="stop3624-5" />
+      <stop
+         style="stop-color:#eaeef9;stop-opacity:0;"
+         offset="1"
+         id="stop3626-7" />
+    </linearGradient>
+    <linearGradient
+       y2="26.883516"
+       x2="31.124725"
+       y1="26.883516"
+       x1="2.7741759"
+       gradientTransform="matrix(1.1199495,0,0,1.0481927,-2.9669388,-33.174238)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4236"
+       xlink:href="#linearGradient3622-95"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="27.026333"
+     inkscape:cx="9.4025213"
+     inkscape:cy="14.763428"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1620"
+     inkscape:window-height="1171"
+     inkscape:window-x="204"
+     inkscape:window-y="0"
+     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 />
+        <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)">
+    <rect
+       style="fill:url(#linearGradient4163);fill-opacity:1;stroke:#87a0d2;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.44522339"
+       y="32.384819" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="box">
+    <rect
+       style="fill:url(#linearGradient4236);fill-opacity:1;fill-rule:evenodd;stroke:#4e7ac6;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="rect2924"
+       width="31.191208"
+       height="9.1780224"
+       x="0.41998568"
+       y="-9.5841379"
+       transform="matrix(0,1,-1,0,0,0)" />
+  </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>    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+       x="8.2637367"
+       y="6.0483518"
+       id="text2893"
+       transform="translate(0,32)"><tspan
+         sodipodi:role="line"
+         id="tspan2895"
+         x="8.2637367"
+         y="6.0483518" /><tspan
+         sodipodi:role="line"
+         id="tspan2897"
+         x="8.2637367"
+         y="21.048351" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+       x="7.7362638"
+       y="6.0131869"
+       id="text2899"
+       transform="translate(0,32)"><tspan
+         sodipodi:role="line"
+         id="tspan2903"
+         x="7.7362638"
+         y="6.0131869" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:8.22735882px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:85.00000238%;writing-mode:lr-tb;text-anchor:start;fill:#216778;fill-opacity:1;stroke:none;display:inline;font-family:Arial Black;-inkscape-font-specification:'Arial Black, Bold'"
+       x="1.8785396"
+       y="42.424026"
+       id="text4681"
+       transform="scale(0.96637601,1.0347939)"
+       sodipodi:linespacing="85.000002%"><tspan
+         sodipodi:role="line"
+         id="tspan2907"
+         x="1.8785396"
+         y="42.424026">T</tspan><tspan
+         sodipodi:role="line"
+         id="tspan2909"
+         x="1.8785396"
+         y="49.417282">R</tspan><tspan
+         sodipodi:role="line"
+         id="tspan2911"
+         x="1.8785396"
+         y="56.410538">A</tspan><tspan
+         sodipodi:role="line"
+         id="tspan2913"
+         x="1.8785396"
+         y="63.403793" /></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="server"
+     style="display:inline">
+    <g
+       id="g4388"
+       transform="matrix(0.1517954,0,0,0.1444919,-3.6601239,-0.37919708)"
+       style="display:inline">
+      <g
+         id="g4572"
+         transform="matrix(3.2881343,0,0,3.2881343,-142.60085,-210.03517)">
+        <path
+           id="path4582"
+           d="m 78.12815,120.177 0,-35.100414 21.09672,0 0,35.100414 -21.09672,0 z"
+           style="fill:url(#linearGradient3739);fill-opacity:1" />
+        <path
+           id="path4596"
+           d="M 85.777742,78.679005 76.886261,84.507778 98.799667,84.420458 107.77827,78.59168 85.777742,78.679 z"
+           style="fill:url(#linearGradient3755);fill-opacity:1"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           id="path4600"
+           d="m 107.56892,115.25014 -9.044924,5.71268 0.08732,-36.750184 8.957604,-5.588749 0,36.626253 z"
+           style="fill:url(#linearGradient3747);fill-opacity:1"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           id="path4604"
+           d="m 107.29929,78.615545 0,36.711945"
+           style="fill:#000000;stroke:#76769d;stroke-width:1.64281785;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <path
+           style="fill:#000000;stroke:#000000;stroke-width:3.0802834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 80.975225,91.767747 c 13.18592,0 13.18592,0 13.18592,0"
+           id="path4666" />
+        <path
+           style="fill:#000000;stroke:#000000;stroke-width:3.0802834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+           d="m 80.967985,99.626076 c 13.11308,0 13.11308,0 13.11308,0"
+           id="path4666-2" />
+        <path
+           id="path4584"
+           d="m 77.373321,120.27806 0,-35.890473 21.26287,0 0,35.890473 -21.26287,0"
+           style="fill:none;stroke:#76769d;stroke-width:1.64281785;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+        <path
+           style="fill:none;stroke:#76769d;stroke-width:2.05352211px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 77.265046,84.433308 c 8.818789,-5.850087 8.906104,-5.937402 8.906104,-5.937402"
+           id="path4712" />
+        <path
+           style="fill:none;stroke:#76769d;stroke-width:1.64281785;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 98.744473,84.520623 c 8.469537,-5.500829 8.469537,-5.500829 8.469537,-5.500829"
+           id="path4714" />
+        <path
+           style="fill:none;stroke:#76769d;stroke-width:1.64281785;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 85.559948,78.495906 c 22.701832,-0.17463 22.701832,-0.17463 22.701832,-0.17463"
+           id="path4718" />
+        <path
+           style="fill:none;stroke:#76769d;stroke-width:1.64281785;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 99.050573,120.34641 c 8.643177,-5.92978 8.643177,-5.92978 8.643177,-5.92978"
+           id="path4722" />
+        <rect
+           style="fill:#74f030;fill-opacity:1;fill-rule:evenodd;stroke:#2e9c41;stroke-width:1.02676105;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect4724"
+           width="5.9374022"
+           height="5.5881438"
+           x="81.456161"
+           y="107.22245" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/FLEXTRA_VISUALISER.svg b/share/metview/icons_mv5/FLEXTRA_VISUALISER.svg
new file mode 100644
index 0000000..760b6d6
--- /dev/null
+++ b/share/metview/icons_mv5/FLEXTRA_VISUALISER.svg
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="FLEXTRA_VISUALISER.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_VISUALISER_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3622-95-9">
+      <stop
+         style="stop-color:#c6cee3;stop-opacity:1;"
+         offset="0"
+         id="stop3624-5-5" />
+      <stop
+         style="stop-color:#eaeef9;stop-opacity:0;"
+         offset="1"
+         id="stop3626-7-4" />
+    </linearGradient>
+    <linearGradient
+       y2="26.883516"
+       x2="31.124725"
+       y1="26.883516"
+       x1="2.7741759"
+       gradientTransform="matrix(1.1199495,0,0,1.0481927,-2.9825284,-33.172517)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4551"
+       xlink:href="#linearGradient3622-95-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3622-3">
+      <stop
+         style="stop-color:#c6cee3;stop-opacity:1;"
+         offset="0"
+         id="stop3624-9" />
+      <stop
+         style="stop-color:#eaeef9;stop-opacity:0;"
+         offset="1"
+         id="stop3626-4" />
+    </linearGradient>
+    <linearGradient
+       y2="15.982418"
+       x2="32.11319"
+       y1="15.982418"
+       x1="-0.0076923072"
+       gradientTransform="matrix(1.0033899,0,0,1.006795,-0.10716526,-0.12618471)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4590"
+       xlink:href="#linearGradient3622-3"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="28.4375"
+     inkscape:cx="13.89257"
+     inkscape:cy="15.440296"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer6"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1620"
+     inkscape:window-height="1171"
+     inkscape:window-x="275"
+     inkscape:window-y="0"
+     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 />
+        <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="layer4"
+     inkscape:label="frame">
+    <rect
+       style="fill:url(#linearGradient4590);fill-opacity:1;stroke:#87a0d2;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.38681135"
+       y="0.33406448" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="box"
+     style="display:inline">
+    <rect
+       style="fill:url(#linearGradient4551);fill-opacity:1;fill-rule:evenodd;stroke:#4e7ac6;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="rect2924"
+       width="31.191208"
+       height="9.1780224"
+       x="0.40439612"
+       y="-9.5824175"
+       transform="matrix(0,1,-1,0,0,0)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="text1">
+    <text
+       xml:space="preserve"
+       style="font-size:8.22735882px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:85.00000238%;writing-mode:lr-tb;text-anchor:start;fill:#216778;fill-opacity:1;stroke:none;display:inline;font-family:Arial Black;-inkscape-font-specification:'Arial Black, Bold'"
+       x="1.8805583"
+       y="11.413416"
+       id="text4681"
+       transform="scale(0.96637601,1.0347939)"
+       sodipodi:linespacing="85.000002%"><tspan
+         sodipodi:role="line"
+         id="tspan2907"
+         x="1.8805583"
+         y="11.413416">T</tspan><tspan
+         sodipodi:role="line"
+         id="tspan2909"
+         x="1.8805583"
+         y="18.406672">R</tspan><tspan
+         sodipodi:role="line"
+         id="tspan2911"
+         x="1.8805583"
+         y="25.399927">A</tspan><tspan
+         sodipodi:role="line"
+         id="tspan2913"
+         x="1.8805583"
+         y="32.393181" /></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="item"
+     transform="translate(0,-32)"
+     style="display:inline">
+    <rect
+       style="fill:#e7e4e0;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:1.00858581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4231"
+       width="15.596395"
+       height="11.160296"
+       x="12.705956"
+       y="40.864311"
+       ry="1.1240586" />
+    <rect
+       style="fill:#b6c6cc;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.95900005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4233"
+       width="14.461813"
+       height="2.4989576"
+       x="13.368137"
+       y="53.497963"
+       ry="1.1285614" />
+    <rect
+       style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.8581652;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4235"
+       width="3.0842593"
+       height="1.3806968"
+       x="19.132833"
+       y="52.001503"
+       ry="0.69034839"
+       rx="0" />
+    <path
+       style="fill:none;stroke:#e52626;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+       d="m 16.784314,48.258214 2.884772,-5.400974 0.986897,4.111189 2.163579,-1.934678 c 0.847718,0.76581 1.450869,1.271924 2.543154,2.29743"
+       id="path5224"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#1f283c;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="m 14.506864,42.413877 c 0.03794,7.617789 0.03794,7.698401 0.03794,7.698401"
+       id="path5226" />
+    <path
+       style="fill:none;stroke:#1f283c;stroke-width:1.00666595px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="m 14.130118,50.230192 12.748068,-0.0343"
+       id="path5228" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/FOLDER.svg b/share/metview/icons_mv5/FOLDER.svg
new file mode 100644
index 0000000..fb5a7ce
--- /dev/null
+++ b/share/metview/icons_mv5/FOLDER.svg
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg2985"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="FOLDER.svg"
+   sodipodi:version="0.32"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <title
+     id="title2993">Metview icon</title>
+  <defs
+     id="defs2987">
+    <linearGradient
+       id="linearGradient3753">
+      <stop
+         style="stop-color:#e2c36e;stop-opacity:1;"
+         offset="0"
+         id="stop3755" />
+      <stop
+         style="stop-color:#ffef8a;stop-opacity:0.34210527;"
+         offset="1"
+         id="stop3757" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3753"
+       id="linearGradient3759"
+       x1="20.381924"
+       y1="25.776665"
+       x2="36.550461"
+       y2="-0.56834435"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0942429,0,0,1.0732344,-1.9950829,-1.8776448)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="10.27"
+     inkscape:cx="14.271484"
+     inkscape:cy="29.889877"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1672"
+     inkscape:window-height="973"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:snap-from-guide="false"
+     objecttolerance="2"
+     gridtolerance="2"
+     guidetolerance="2">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2995"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:url(#linearGradient3759);fill-opacity:1;stroke:#000000;stroke-width:0.91029769000000005;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="m 15,11 1.581791,-6.9553125 12.469348,3.7367772 2.255924,-3.4100421 9.343738,2.403001 -0.330091,4.3734044 c 7.786256,2.404387 11.284931,2.859172 19.842246,4.961637 L 51.55289,61.721726 7.8648109,40.823438 4.7046001,8.1600399 24.33753,14.182435 l -0.156955,3.272483 11.16368,3.580674 0.959165,-3.353576 13.555361,3.888862 1.763869,39.771774"
+       id="rect2984"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccccc" />
+    <path
+       style="fill:#0056c8;fill-opacity:1;stroke:#0056c8;stroke-width:0.89524412;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="M 31.5222,5.3369036 39.610516,7.4558961 39.486855,11 30,8 31.5222,5.3369036 z"
+       id="rect3761"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/GDDRIVER.xpm b/share/metview/icons_mv5/GDDRIVER.xpm
new file mode 100644
index 0000000..79e8fb8
--- /dev/null
+++ b/share/metview/icons_mv5/GDDRIVER.xpm
@@ -0,0 +1,82 @@
+/* XPM */
+static char * GDDRIVER_xpm[] = {
+"32 32 47 1",
+" 	c #FFFFFFFFFFFF",
+".	c #00008B8B0000",
+"X	c #E5E5E5E5E5E5",
+"o	c #999999999999",
+"O	c #E8E8E8E8E8E8",
+"+	c #E0E0E0E0E8E8",
+"@	c #D0D0D0D0E0E0",
+"#	c #C8C8C8C8D8D8",
+"$	c #C0C0C0C0D0D0",
+"%	c #B8B8B8B8C8C8",
+"&	c #F8F8F8F8F8F8",
+"*	c #C0C0C8C8D8D8",
+"=	c #C0C0C0C0D8D8",
+"-	c #F0F0F0F0F0F0",
+";	c #E0E0E0E0F0F0",
+":	c #D8D8E0E0F0F0",
+">	c #D8D8D8D8E8E8",
+",	c #C8C8C8C8D0D0",
+"<	c #E0E0E0E0F8F8",
+"1	c #E0E0E8E8F8F8",
+"2	c #D0D0D0D0D8D8",
+"3	c #E8E8E8E8F0F0",
+"4	c #D8D8D8D8E0E0",
+"5	c #D0D0D8D8E8E8",
+"6	c #D0D0D8D8D8D8",
+"7	c #E0E0E8E8F0F0",
+"8	c #D0D0D0D0E8E8",
+"9	c #C0C0C0C0C8C8",
+"0	c #F0F0F0F0F8F8",
+"q	c #909090909898",
+"w	c #A0A0A8A8A8A8",
+"e	c #888890909090",
+"r	c #C8C8D8D8E8E8",
+"t	c #C0C0D0D0E8E8",
+"y	c #D8D8D8D8F0F0",
+"u	c #F0F0F8F8F8F8",
+"i	c #9898FBFB9898",
+"p	c #0000CDCD0000",
+"a	c #D0D0D8D8F0F0",
+"s	c #E8E8F0F0F8F8",
+"d	c #0000FFFF0000",
+"f	c #C8C8D0D0E8E8",
+"g	c #C0C0C8C8E8E8",
+"h	c #9090EEEE9090",
+"j	c #E8E8E8E8F8F8",
+"k	c #D0D0D8D8E0E0",
+"l	c #C8C8D0D0E0E0",
+"           ......X.....         ",
+"           ......X..X..         ",
+"         oo..OXOOX..+O..        ",
+"        o@@..XXOOX..XX..        ",
+"       o#$@..O...X..  ..ooooooo ",
+"      o%@O&..O...&..  ..#**=*ooo",
+"     o%+-&&..&&..&..&&..;;;;:>>o",
+"    o,O&&&&..&&.. ..&...<<<11;>o",
+"   o23&&&&&...... .....<;;<<<:>o",
+"  o4-&&&&&&...... .....X;;;;;5>o",
+" o4-&&&&&&&&&&&&&&&&&&67;::;;8>o",
+"o%O&&&&&&&&&&&&&&&&&&&91:::::>oo",
+"oo40&&&&&&&&&&&&&&&qwe:rtry:y>o ",
+" o#3&&&&&&&&uuuuuu0ipppp.pa:y>o ",
+" o#@0&uuuuuuuuuiiisd.....pffg>o ",
+"  o#+0uuuuuu00ip.pdd.ddp.pp..p  ",
+"  o##300u000sip......ddp......h ",
+"   o#>000sjjdp.pdddddddppppp..h ",
+"   o##7sj111dp.pddddddddddddp..h",
+"    o#kj1<<:dpp.dddddddddddp...h",
+"    o##;1;;d.pppddiiiiiidddp..hh",
+"     o#@;;:d.dpdddihpppidddp..hh",
+"     o##:<:d.pddddip  pidddp....",
+"      o#8;yd.pddddip  pidddddd..",
+"      o#*:yd...pddipppiidddddd.h",
+"       o#5yd...pddiiiiiiddp....d",
+"       o##yddd.pddddddddddp....d",
+"        o#>yd..pdddddddddp....h ",
+"        o#l:d..ppppppppdp...hd  ",
+"         o#*d...............d   ",
+"         o##&ddh..........h&    ",
+"          oo0&uhh.hhhh..hd      "};
diff --git a/share/metview/icons_mv5/GEOPOINTS.svg b/share/metview/icons_mv5/GEOPOINTS.svg
new file mode 100644
index 0000000..e50a239
--- /dev/null
+++ b/share/metview/icons_mv5/GEOPOINTS.svg
@@ -0,0 +1,559 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="64"
+   height="64"
+   id="svg3688"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="GEOPOINTS.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="GEOPOINTS.png"
+   inkscape:export-xdpi="45"
+   inkscape:export-ydpi="45"
+   version="1.1"
+   style="display:inline">
+  <defs
+     id="defs3690">
+    <linearGradient
+       id="linearGradient3899">
+      <stop
+         style="stop-color:#e3b574;stop-opacity:1;"
+         offset="0"
+         id="stop3901" />
+      <stop
+         style="stop-color:#e9e2d7;stop-opacity:1;"
+         offset="1"
+         id="stop3903" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3640">
+      <stop
+         id="stop3642"
+         offset="0"
+         style="stop-color:#a5c3ea;stop-opacity:1;" />
+      <stop
+         id="stop3644"
+         offset="1"
+         style="stop-color:#c5e9eb;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3841">
+      <stop
+         id="stop3843"
+         offset="0"
+         style="stop-color:#ce979b;stop-opacity:1;" />
+      <stop
+         id="stop3845"
+         offset="1"
+         style="stop-color:#e4c9cd;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3669">
+      <stop
+         style="stop-color:#f80a20;stop-opacity:1;"
+         offset="0"
+         id="stop3671" />
+      <stop
+         style="stop-color:#d2a7ae;stop-opacity:1;"
+         offset="1"
+         id="stop3673" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4292">
+      <stop
+         style="stop-color:#e4a312;stop-opacity:1"
+         offset="0"
+         id="stop4294" />
+      <stop
+         id="stop4308"
+         offset="0.5"
+         style="stop-color:#dfae71;stop-opacity:1" />
+      <stop
+         style="stop-color:#ccd6c8;stop-opacity:1;"
+         offset="1"
+         id="stop4296" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4267">
+      <stop
+         style="stop-color:#2760b3;stop-opacity:1;"
+         offset="0"
+         id="stop4269" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4271" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4229">
+      <stop
+         style="stop-color:#8866da;stop-opacity:1;"
+         offset="0"
+         id="stop4231" />
+      <stop
+         style="stop-color:#a7cedb;stop-opacity:1;"
+         offset="1"
+         id="stop4233" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3678">
+      <stop
+         style="stop-color:#d9dce6;stop-opacity:1;"
+         offset="0"
+         id="stop3680" />
+      <stop
+         style="stop-color:#324060;stop-opacity:1;"
+         offset="1"
+         id="stop3682" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4229"
+       id="linearGradient3684"
+       x1="14.5655"
+       y1="32.444443"
+       x2="61.434502"
+       y2="32.444443"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0003011,0,0,1.02,0.74429032,-1.12)" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="10.11052 : 23.16572 : 1"
+       inkscape:vp_y="2578.4206 : 1488.6518 : 0"
+       inkscape:vp_z="-97.407027 : 27.144512 : 1"
+       inkscape:persp3d-origin="54.253548 : 40.091112 : 1"
+       id="perspective3696" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4229"
+       id="linearGradient4227"
+       x1="7.4365482"
+       y1="14.912783"
+       x2="17.436548"
+       y2="14.912783"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(2.063452,-4.412783)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4229"
+       id="linearGradient4235"
+       x1="2.3853252"
+       y1="34.659901"
+       x2="8.3853254"
+       y2="34.659901"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.8853253,0.618821)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3640"
+       id="linearGradient4283"
+       x1="7.75"
+       y1="34.875"
+       x2="34.875"
+       y2="34.875"
+       gradientUnits="userSpaceOnUse" />
+    <inkscape:perspective
+       id="perspective3647"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3687"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3669-2"
+       id="linearGradient3675-3"
+       x1="43"
+       y1="51"
+       x2="52"
+       y2="33"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3669-2">
+      <stop
+         style="stop-color:#0e23f7;stop-opacity:1;"
+         offset="0"
+         id="stop3671-9" />
+      <stop
+         style="stop-color:#91cadc;stop-opacity:1;"
+         offset="1"
+         id="stop3673-5" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective3735"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763-5"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763-7"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763-9"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763-72"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763-2"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763-50"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4146"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3812"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3835"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3885"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3899"
+       id="linearGradient3905"
+       x1="69.632378"
+       y1="47"
+       x2="12.383186"
+       y2="49"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.80324023,0,0,1.6046556,67.312512,-55.767603)" />
+    <inkscape:perspective
+       id="perspective3682"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3899-6"
+       id="linearGradient3905-4"
+       x1="69.632378"
+       y1="47"
+       x2="12.383186"
+       y2="49"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.80324023,0,0,1.6046556,12.312512,-40.767603)" />
+    <linearGradient
+       id="linearGradient3899-6">
+      <stop
+         style="stop-color:#e3b574;stop-opacity:1;"
+         offset="0"
+         id="stop3901-9" />
+      <stop
+         style="stop-color:#e9e2d7;stop-opacity:1;"
+         offset="1"
+         id="stop3903-2" />
+    </linearGradient>
+    <linearGradient
+       y2="49"
+       x2="12.383186"
+       y1="47"
+       x1="69.632378"
+       gradientTransform="matrix(0.80324023,0,0,1.6046556,14.312516,-45.228938)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3691"
+       xlink:href="#linearGradient3899-6"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       id="perspective3734"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       y2="49"
+       x2="12.383186"
+       y1="47"
+       x1="69.632378"
+       gradientTransform="matrix(0.80324023,0,0,1.6046556,14.312516,-45.228938)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3691-4"
+       xlink:href="#linearGradient3899-6-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3899-6-7">
+      <stop
+         style="stop-color:#e3b574;stop-opacity:1;"
+         offset="0"
+         id="stop3901-9-7" />
+      <stop
+         style="stop-color:#e9e2d7;stop-opacity:1;"
+         offset="1"
+         id="stop3903-2-5" />
+    </linearGradient>
+    <linearGradient
+       y2="49"
+       x2="12.383186"
+       y1="47"
+       x1="69.632378"
+       gradientTransform="matrix(0.80324023,0,0,1.6046556,12.312516,-45.586554)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3743"
+       xlink:href="#linearGradient3899-6-7"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4229"
+       id="linearGradient3876"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.26347355,-0.26497911,0.26497911,0.26347355,17.717064,13.161987)"
+       x1="7.4365482"
+       y1="14.912783"
+       x2="17.436548"
+       y2="14.912783" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.5625"
+     inkscape:cx="23.640775"
+     inkscape:cy="34.154381"
+     inkscape:current-layer="layer11"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1593"
+     inkscape:window-height="1066"
+     inkscape:window-x="2239"
+     inkscape:window-y="12"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3709" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="-20.22335,27.77665"
+       id="guide3751" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3693">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="inner"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient4283);fill-opacity:1;stroke:none;display:inline"
+       id="path4257"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="m 34.875,34.875 a 13.5625,22.28125 0 1 1 -27.125,0 13.5625,22.28125 0 1 1 27.125,0 z"
+       transform="matrix(2.1986858,0.02524672,0,1.3464236,-15.779742,-15.494592)" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="map"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3684);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:0.86900002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 44.757538,5 0,3.0600001 -1.000302,0 -2.000601,0 c 0,0 0,0 -1.000301,-1.0200001 C 39.756031,6.0200001 37.75543,8.0600001 37.75543,8.0600001 l -1.000301,1.02 c 0,0 -2.000602,-1.02 -4.001204,3.0599999 -2.000602,4.08 1.000301,1.020001 1.000301,1.020001 L 35.754829,12.14 l 0,2.040001 L 34.754527,16.22 33.754226,17.240001 31.753624,16.22 l -2.000603,-1.019999 -1.000301,0 0,1.019999 -2.000601,1.020001 -1.000302,0 -2.000601,1.019999 1.0003,2.039999 c 0,0 -1.0003,0 -2.000603,0 -1.0003 [...]
+       id="path3662" />
+    <path
+       style="fill:url(#linearGradient4227);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="m 16,6 -4,3 -2,5 1,1 1,0 2,-1 2,-1 2,-2 1,-2 0,-1 0,-1 -3,-1 z"
+       id="path3656"
+       sodipodi:nodetypes="cccccccccccc" />
+    <path
+       style="fill:url(#linearGradient4235);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 3.9375,30.5625 C 3.4003906,30.61133 3,31 3,31 L 2,35 4,40 4,39 5,37 6,36 7,34 7,33 6,32 C 6,32 6,32 5,31 4.625,30.625 4.2597656,30.533203 3.9375,30.5625 z"
+       id="path3660"
+       sodipodi:nodetypes="ccccccccccsc" />
+    <path
+       sodipodi:nodetypes="cccccccccccc"
+       id="path3874"
+       d="m 24.148146,12.212586 -0.258957,1.850337 0.797948,1.847326 0.528453,-0.0015 0.263474,-0.26498 0.261968,-0.793431 L 26.003,14.056906 26,13 l -0.266485,-0.791926 -0.264979,-0.263473 -0.264979,-0.263474 -1.0554,0.531464 z"
+       style="fill:url(#linearGradient3876);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:#5162bc;stroke-width:1.14283538;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path2883"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="m 34.875,34.875 a 13.5625,22.28125 0 1 1 -27.125,0 13.5625,22.28125 0 1 1 27.125,0 z"
+       transform="matrix(2.2119815,0.02524672,0,1.3464236,-15.142857,-15.494593)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="tect"
+     style="display:inline">
+    <rect
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:43.99999976%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:0.70588235;fill-rule:evenodd;stroke:#1b1d35;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Arial;-inkscape-font-specification:Arial Bold"
+       id="rect3878"
+       width="18.999998"
+       height="48"
+       x="-61"
+       y="8"
+       transform="matrix(0,-1,1,0,0,0)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer11"
+     inkscape:label="points"
+     style="display:inline">
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3919"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+       transform="translate(-26.605469,-29.812823)"><flowRegion
+         id="flowRegion3921"><rect
+           id="rect3923"
+           width="30.010811"
+           height="15.394594"
+           x="64"
+           y="36.583782" /></flowRegion><flowPara
+         id="flowPara3925"
+         style="font-family:Arial;-inkscape-font-specification:Arial" /></flowRoot>    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+       x="46.702702"
+       y="46.270271"
+       id="text3938"><tspan
+         sodipodi:role="line"
+         id="tspan3940"
+         x="46.702702"
+         y="46.270271" /><tspan
+         sodipodi:role="line"
+         id="tspan3942"
+         x="46.702702"
+         y="61.270271" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+       x="105.08108"
+       y="-37.18919"
+       id="text3837"><tspan
+         sodipodi:role="line"
+         id="tspan3839"
+         x="105.08108"
+         y="-37.18919" /><tspan
+         sodipodi:role="line"
+         id="tspan3841"
+         x="105.08108"
+         y="-22.18919" /><tspan
+         sodipodi:role="line"
+         id="tspan3843"
+         x="105.08108"
+         y="-7.1891899" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:9px;font-style:normal;font-weight:bold;fill:#182e45;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Arial Bold"
+       x="13"
+       y="58"
+       id="text5442"><tspan
+         sodipodi:role="line"
+         id="tspan5444"
+         x="13"
+         y="58"
+         style="font-size:18px;font-weight:bold;fill:#182e45;font-family:Arial;-inkscape-font-specification:Arial Bold">GPT</tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/GEOVIEW.xpm b/share/metview/icons_mv5/GEOVIEW.xpm
new file mode 100644
index 0000000..da434ed
--- /dev/null
+++ b/share/metview/icons_mv5/GEOVIEW.xpm
@@ -0,0 +1,40 @@
+/* XPM */
+static char * MAPVIEW_xpm[] = {
+"32 32 5 1",
+" 	c #333333333333",
+".	c #FFFFFFFFFFFF",
+"X	c #7E7E7E7E7E7E",
+"o	c #DADAF6F6FFFF",
+"O	c #7C7CBDBD7676",
+"                                ",
+" .............................. ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .X..........................X. ",
+" .X..oooooOOOooooooooooooOo..X. ",
+" .X..ooooooOOOooooooooooOOO..X. ",
+" .X..oooooooOOOoooooooooOOO..X. ",
+" .X..ooOOOoooOOOooooooooOOO..X. ",
+" .X..oOOOOoooOOOoooooooOOOO..X. ",
+" .X..oOOOOooOOOOOOooOoOOOOO..X. ",
+" .X..oOoooooOOOOOooOOOOOOOO..X. ",
+" .X..ooooooOOooooOOOOOOOOOO..X. ",
+" .X..oooooooooooOOOOOOOOOOO..X. ",
+" .X..oooooooooOOOOOOOOOOOOO..X. ",
+" .X..oooooooOOOOOOOOOOOOOOO..X. ",
+" .X..oooooooooOOOOOOOOOOOOO..X. ",
+" .X..oooooooooOOOOOOOOOOOOO..X. ",
+" .X..ooooooooOOOOOOOOOOOOOO..X. ",
+" .X..oooOOOOOOOOOOOOOOOOoOO..X. ",
+" .X..ooOOOOOOOOOOOOOOOooooo..X. ",
+" .X..oOOOOOOOOOOOOooooooOoo..X. ",
+" .X..oOOOOOOOOOOOoooooooooo..X. ",
+" .X..oOOOOOOOOOOooooooooOoo..X. ",
+" .X..oOOOOOOOOOOooOoooooooo..X. ",
+" .X..ooOOOOOOOOoooOOOOOOOOo..X. ",
+" .X..oooOOOOOOoooOOOOOOOOOo..X. ",
+" .X..oooooOooooOOOOOOOOOOOo..X. ",
+" .X..oooOOOOOOOOOOOOOOOOOOo..X. ",
+" .X..........................X. ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .............................. ",
+"                                "};
diff --git a/share/metview/icons_mv5/GEO_TO_GRIB.svg b/share/metview/icons_mv5/GEO_TO_GRIB.svg
new file mode 100644
index 0000000..05f9770
--- /dev/null
+++ b/share/metview/icons_mv5/GEO_TO_GRIB.svg
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="GEO_TO_GRIB.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="24.3125"
+     inkscape:cx="6.0462726"
+     inkscape:cy="16.297918"
+     inkscape:current-layer="layer9"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1789"
+     inkscape:window-height="1124"
+     inkscape:window-x="2017"
+     inkscape:window-y="47"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3642">
+      <stop
+         style="stop-color:#e14848;stop-opacity:1;"
+         offset="0"
+         id="stop3644" />
+      <stop
+         style="stop-color:#fa1511;stop-opacity:1;"
+         offset="1"
+         id="stop3646" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3642"
+       id="linearGradient3648"
+       x1="7.55"
+       y1="6.5"
+       x2="18.45"
+       y2="6.5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.78084533,1.0330578,0,8.48397,26.065756)" />
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="arrow 2" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="front"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="yellow">
+    <rect
+       style="opacity:0.53603599;fill:#f1f494;fill-opacity:1;stroke:none"
+       id="rect3686"
+       width="15.259641"
+       height="30.560413"
+       x="0.8637532"
+       y="0.69922882" />
+    <rect
+       y="0.65809768"
+       x="15.958869"
+       height="30.724937"
+       width="15.21851"
+       id="rect3689"
+       style="opacity:0.53603599;fill:#b8c4df;fill-opacity:1;stroke:none" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="dots">
+    <path
+       sodipodi:type="arc"
+       style="fill:#f41215;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.60028875000000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path3692"
+       sodipodi:cx="4.3393316"
+       sodipodi:cy="13.840617"
+       sodipodi:rx="1.5424165"
+       sodipodi:ry="1.4601543"
+       d="m 5.8817481,13.840617 a 1.5424165,1.4601543 0 1 1 -3.0848329,0 1.5424165,1.4601543 0 1 1 3.0848329,0 z"
+       transform="matrix(0.97250001,0,0,1.0272887,0.03578404,-7.5743504)" />
+    <path
+       transform="matrix(0.97250001,0,0,1.0272887,7.3571208,-10.618052)"
+       d="m 5.8817481,13.840617 a 1.5424165,1.4601543 0 1 1 -3.0848329,0 1.5424165,1.4601543 0 1 1 3.0848329,0 z"
+       sodipodi:ry="1.4601543"
+       sodipodi:rx="1.5424165"
+       sodipodi:cy="13.840617"
+       sodipodi:cx="4.3393316"
+       id="path3694"
+       style="fill:#f41215;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.60028875000000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       sodipodi:type="arc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#f41215;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.60028875000000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path3696"
+       sodipodi:cx="4.3393316"
+       sodipodi:cy="13.840617"
+       sodipodi:rx="1.5424165"
+       sodipodi:ry="1.4601543"
+       d="m 5.8817481,13.840617 a 1.5424165,1.4601543 0 1 1 -3.0848329,0 1.5424165,1.4601543 0 1 1 3.0848329,0 z"
+       transform="matrix(0.97250001,0,0,1.0272887,-0.37552701,0.93978862)" />
+    <path
+       transform="matrix(0.97250001,0,0,1.0272887,-0.70457586,12.291974)"
+       d="m 5.8817481,13.840617 a 1.5424165,1.4601543 0 1 1 -3.0848329,0 1.5424165,1.4601543 0 1 1 3.0848329,0 z"
+       sodipodi:ry="1.4601543"
+       sodipodi:rx="1.5424165"
+       sodipodi:cy="13.840617"
+       sodipodi:cx="4.3393316"
+       id="path3698"
+       style="fill:#f41215;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#f41215;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="path3700"
+       sodipodi:cx="4.3393316"
+       sodipodi:cy="13.840617"
+       sodipodi:rx="1.5424165"
+       sodipodi:ry="1.4601543"
+       d="m 5.8817481,13.840617 a 1.5424165,1.4601543 0 1 1 -3.0848329,0 1.5424165,1.4601543 0 1 1 3.0848329,0 z"
+       transform="matrix(0.97250001,0,0,1.0272887,4.683599,14.01948)" />
+    <path
+       transform="matrix(0.97250001,0,0,1.0272887,7.6450386,9.0837473)"
+       d="m 5.8817481,13.840617 a 1.5424165,1.4601543 0 1 1 -3.0848329,0 1.5424165,1.4601543 0 1 1 3.0848329,0 z"
+       sodipodi:ry="1.4601543"
+       sodipodi:rx="1.5424165"
+       sodipodi:cy="13.840617"
+       sodipodi:cx="4.3393316"
+       id="path3702"
+       style="fill:#f41215;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer8"
+     inkscape:label="waves">
+    <path
+       style="fill:none;stroke:#1a2f63;stroke-width:0.9;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 24.185089,0.71979432 c 0,0 0.271561,1.34883138 0.699229,1.85089968 0.625247,0.7340203 1.757864,2.2674114 2.63239,2.6735219 1.260335,0.585272 3.7018,1.1516709 3.7018,1.1516709"
+       id="path3705-4"
+       sodipodi:nodetypes="cssc" />
+    <path
+       style="fill:none;stroke:#1a2f63;stroke-width:0.9;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 18.426735,0.61696658 c 0,0 4.084177,2.79040042 4.935733,3.94858612 0.836897,1.1382481 1.462972,2.0132654 2.179948,3.2082262 0.716976,1.1949608 1.09683,2.3307631 1.645245,3.4961441 0,0 0.917594,2.866251 1.850899,4.359897 0.933305,1.493646 2.550129,2.550129 2.550129,2.550129"
+       id="path3729"
+       sodipodi:nodetypes="czzczz" />
+    <path
+       style="fill:none;stroke:#1a2f63;stroke-width:0.9;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 16.082262,4.6478149 c 0,0 2.600946,1.3253495 3.825193,2.4678663 1.224247,1.1425168 2.740452,2.6538562 3.290488,4.4010288 0,0 1.428658,2.742601 1.398458,4.442159 -0.0302,1.699558 -1.8509,5.22365 -1.8509,5.22365 0,0 -2.446036,2.26994 -3.619537,2.755784 -1.173501,0.485844 -3.043702,0.411311 -3.043702,0.411311"
+       id="path3731"
+       sodipodi:nodetypes="czszzzc" />
+    <path
+       style="fill:none;stroke:#1a2f63;stroke-width:0.9;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 16.370181,28.380464 c 0,0 4.2025,-3.293548 5.96401,-3.989718 1.76151,-0.69617 3.715453,-2.670231 4.935732,-1.8509 0,0 1.606583,1.462508 2.426735,2.056556 0.820152,0.594048 1.768637,1.974293 1.768637,1.974293"
+       id="path3733"
+       sodipodi:nodetypes="czszc" />
+    <path
+       style="fill:none;stroke:#1a2f63;stroke-width:0.9;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 18.59126,31.25964 c 0,0 1.335297,-2.809377 2.591259,-3.578406 1.668604,-1.021692 4.27648,-2.133114 5.799486,-0.904884 0,0 1.943819,1.148317 2.550129,2.056555 0.460085,0.689196 0.699228,2.385604 0.699228,2.385604"
+       id="path3735"
+       sodipodi:nodetypes="csssc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="blue" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer9"
+     inkscape:label="separator">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 15.867316,0.28743873 C 15.803634,12.29868 15.803634,12.29868 15.803634,12.29868"
+       id="path3738" />
+    <path
+       id="path3740"
+       d="m 15.867317,19.824236 c -0.06368,11.394275 -0.06368,11.394275 -0.06368,11.394275"
+       style="fill:none;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="arrow">
+    <path
+       style="fill:url(#linearGradient3648);fill-opacity:1;stroke:#6d2020;stroke-width:0.89999991999999984;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 10.781491,18.131359 0,-5.289597 2,0 0,1.511313 5,0 0,-2.342536 1.033058,0 3.966942,3.85385 -4,3.778284 -1,0 0,-2.26697 -5,0 0,1.511313 -2,0 0,-0.755657 z"
+       id="path3640"
+       sodipodi:nodetypes="ccccccccccccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame">
+    <rect
+       style="opacity:1;fill:none;stroke:#494b55;stroke-width:0.89999998000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect2911"
+       width="31.136248"
+       height="31.15167"
+       x="0.41131106"
+       y="0.41131106" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/GIF.xpm b/share/metview/icons_mv5/GIF.xpm
new file mode 100644
index 0000000..1837387
--- /dev/null
+++ b/share/metview/icons_mv5/GIF.xpm
@@ -0,0 +1,629 @@
+/* XPM */
+static char * GIF_xpm[] = {
+"32 32 594 2",
+"  	c None",
+". 	c #FFFFFF",
+"+ 	c #E2E2E2",
+"@ 	c #EDEDED",
+"# 	c #ECECEC",
+"$ 	c #EBEBEB",
+"% 	c #EAEAEA",
+"& 	c #E9E9E9",
+"* 	c #E8E8E8",
+"= 	c #D6D6D6",
+"- 	c #FBFBFB",
+"; 	c #E1E1E1",
+"> 	c #BDCEFF",
+", 	c #AFC4FF",
+"' 	c #889BCD",
+") 	c #7787B7",
+"! 	c #7E92C9",
+"~ 	c #778BC3",
+"{ 	c #7388C3",
+"] 	c #93AFFF",
+"^ 	c #8EACFF",
+"/ 	c #8AA8FF",
+"( 	c #85A5FF",
+"_ 	c #80A2FF",
+": 	c #7C9EFF",
+"< 	c #779BFF",
+"[ 	c #7297FF",
+"} 	c #6E93FF",
+"| 	c #6C92FF",
+"1 	c #6C92FE",
+"2 	c #6C91FE",
+"3 	c #D5D7DE",
+"4 	c #F1F1F1",
+"5 	c #B8CBFF",
+"6 	c #AAC0FF",
+"7 	c #7383B3",
+"8 	c #8397D2",
+"9 	c #6A7CAF",
+"0 	c #6273A7",
+"a 	c #7189C9",
+"b 	c #8CAAFF",
+"c 	c #87A6FF",
+"d 	c #82A2FF",
+"e 	c #7D9FFF",
+"f 	c #789CFF",
+"g 	c #7398FF",
+"h 	c #6E94FF",
+"i 	c #6A90FF",
+"j 	c #648CFF",
+"k 	c #638BFF",
+"l 	c #D4D7DE",
+"m 	c #7181AF",
+"n 	c #7081B4",
+"o 	c #5D6D9A",
+"p 	c #687AB1",
+"q 	c #8EABFC",
+"r 	c #E0E0E0",
+"s 	c #F2F5FF",
+"t 	c #EFF3FF",
+"u 	c #E9EDFA",
+"v 	c #DBDFEC",
+"w 	c #E5EAF8",
+"x 	c #E4E9F8",
+"y 	c #EAF0FF",
+"z 	c #E9EFFF",
+"A 	c #E8EEFF",
+"B 	c #E7EDFF",
+"C 	c #E5ECFE",
+"D 	c #E4EAFD",
+"E 	c #E2E9FC",
+"F 	c #E0E7FB",
+"G 	c #DFE6FB",
+"H 	c #DDE4FA",
+"I 	c #DCE3F9",
+"J 	c #DBE2F8",
+"K 	c #DAE2F8",
+"L 	c #D9E1F7",
+"M 	c #D9E0F6",
+"N 	c #D8DFF5",
+"O 	c #D7DFF4",
+"P 	c #D6DEF4",
+"Q 	c #D5DDF3",
+"R 	c #D4DCF2",
+"S 	c #DBDCDD",
+"T 	c #F0F2EF",
+"U 	c #C2C9C0",
+"V 	c #C1CAC0",
+"W 	c #C1CDC0",
+"X 	c #C0D1C0",
+"Y 	c #C2D7C0",
+"Z 	c #C6DCC2",
+"` 	c #CAE1C4",
+" .	c #D6E6C6",
+"..	c #E9EAC8",
+"+.	c #F8EBCA",
+"@.	c #F9E1C8",
+"#.	c #F9D6C6",
+"$.	c #F8CCC4",
+"%.	c #F4CBC4",
+"&.	c #EFCBC4",
+"*.	c #EBCBC5",
+"=.	c #E4CBC6",
+"-.	c #DACCCA",
+";.	c #D8CBD7",
+">.	c #D6CAE6",
+",.	c #D4C9F3",
+"'.	c #D5CFF4",
+").	c #D6D5F3",
+"!.	c #D7DCF2",
+"~.	c #E0E6EC",
+"{.	c #DCDCDC",
+"].	c #092804",
+"^.	c #082E03",
+"/.	c #063A02",
+"(.	c #054E01",
+"_.	c #116507",
+":.	c #217A0E",
+"<.	c #349015",
+"[.	c #77A320",
+"}.	c #C4B62B",
+"|.	c #ECAC2F",
+"1.	c #EF832A",
+"2.	c #F25A25",
+"3.	c #EE3F23",
+"4.	c #E04126",
+"5.	c #D1442A",
+"6.	c #C0472E",
+"7.	c #9E4D37",
+"8.	c #855159",
+"9.	c #814F96",
+"0.	c #7C4DD2",
+"a.	c #7B55FC",
+"b.	c #8271FD",
+"c.	c #898EFB",
+"d.	c #92B4F9",
+"e.	c #BFE0EC",
+"f.	c #DFDFDF",
+"g.	c #092A04",
+"h.	c #073403",
+"i.	c #044501",
+"j.	c #0A5B04",
+"k.	c #1A710B",
+"l.	c #298612",
+"m.	c #539B1A",
+"n.	c #A1AE26",
+"o.	c #E2B72F",
+"p.	c #EE962C",
+"q.	c #F06D27",
+"r.	c #F24723",
+"s.	c #E74025",
+"t.	c #D84229",
+"u.	c #C8452C",
+"v.	c #B04A32",
+"w.	c #8C5043",
+"x.	c #82507A",
+"y.	c #7E4EB7",
+"z.	c #7A4EF0",
+"A.	c #7E63FE",
+"B.	c #8681FC",
+"C.	c #8D9FFA",
+"D.	c #99D2F7",
+"E.	c #C1EDE8",
+"F.	c #063C02",
+"G.	c #055002",
+"H.	c #126608",
+"I.	c #227C0F",
+"J.	c #389116",
+"K.	c #7DA521",
+"L.	c #CAB72C",
+"M.	c #EDA92E",
+"N.	c #EF802A",
+"O.	c #F25725",
+"P.	c #ED3F23",
+"Q.	c #DF4127",
+"R.	c #CF442A",
+"S.	c #BE472F",
+"T.	c #9B4E38",
+"U.	c #85505E",
+"V.	c #804E9B",
+"W.	c #7B4DD7",
+"X.	c #7B56FD",
+"Y.	c #8273FD",
+"Z.	c #8991FB",
+"`.	c #93B8F8",
+" +	c #9FEEF2",
+".+	c #BDEDD8",
+"++	c #DEDEDE",
+"@+	c #C1CBC0",
+"#+	c #073503",
+"$+	c #044601",
+"%+	c #0B5C04",
+"&+	c #1B720C",
+"*+	c #2A8812",
+"=+	c #599C1B",
+"-+	c #A7AF27",
+";+	c #E5B62F",
+">+	c #EE932C",
+",+	c #F16A27",
+"'+	c #F24523",
+")+	c #E64025",
+"!+	c #D64229",
+"~+	c #C7462D",
+"{+	c #AD4A33",
+"]+	c #8A5046",
+"^+	c #82507E",
+"/+	c #7E4DBB",
+"(+	c #7A4EF3",
+"_+	c #7F66FD",
+":+	c #8683FC",
+"<+	c #8EA3FA",
+"[+	c #9AD6F7",
+"}+	c #9BF9DB",
+"|+	c #B6EAC3",
+"1+	c #DDDDDD",
+"2+	c #C1CCC0",
+"3+	c #063D02",
+"4+	c #065202",
+"5+	c #146808",
+"6+	c #237E0F",
+"7+	c #3C9317",
+"8+	c #84A622",
+"9+	c #CFB82D",
+"0+	c #EDA62E",
+"a+	c #F07D29",
+"b+	c #F25424",
+"c+	c #EC3F23",
+"d+	c #DD4127",
+"e+	c #CE442B",
+"f+	c #BC482F",
+"g+	c #984E39",
+"h+	c #845062",
+"i+	c #804F9F",
+"j+	c #7B4DDC",
+"k+	c #7C58FE",
+"l+	c #8376FC",
+"m+	c #8A93FB",
+"n+	c #94BCF8",
+"o+	c #9FF1F0",
+"p+	c #8DF2B2",
+"q+	c #ABE4A1",
+"r+	c #C1CEC0",
+"s+	c #044801",
+"t+	c #0C5E05",
+"u+	c #1C740C",
+"v+	c #2C8A13",
+"w+	c #5F9E1C",
+"x+	c #AEB028",
+"y+	c #E8B42F",
+"z+	c #EF902B",
+"A+	c #F16627",
+"B+	c #F14323",
+"C+	c #E44025",
+"D+	c #D54329",
+"E+	c #C6462D",
+"F+	c #AA4B34",
+"G+	c #895049",
+"H+	c #824F83",
+"I+	c #7D4DC0",
+"J+	c #7A4FF6",
+"K+	c #8068FD",
+"L+	c #8786FB",
+"M+	c #8EA6FA",
+"N+	c #9CDBF6",
+"O+	c #9AF8D6",
+"P+	c #79E778",
+"Q+	c #A7DF94",
+"R+	c #075402",
+"S+	c #156A09",
+"T+	c #247F10",
+"U+	c #409517",
+"V+	c #8AA823",
+"W+	c #D4B82D",
+"X+	c #EDA22E",
+"Y+	c #F07929",
+"Z+	c #F25124",
+"`+	c #EB3F24",
+" @	c #DC4128",
+".@	c #CD442B",
+"+@	c #BA4830",
+"@@	c #954F3A",
+"#@	c #845067",
+"$@	c #804EA4",
+"%@	c #7B4CE1",
+"&@	c #7C5BFE",
+"*@	c #8378FC",
+"=@	c #8B95FA",
+"-@	c #95C0F8",
+";@	c #9FF3ED",
+">@	c #8BF1AB",
+",@	c #6ADB4B",
+"'@	c #A7D990",
+")@	c #C0D4BF",
+"!@	c #0E6005",
+"~@	c #1D760C",
+"{@	c #2E8B13",
+"]@	c #659F1D",
+"^@	c #B4B228",
+"/@	c #EAB32F",
+"(@	c #EF8C2B",
+"_@	c #F16326",
+":@	c #F14223",
+"<@	c #E34026",
+"[@	c #D44329",
+"}@	c #C4462D",
+"|@	c #A74C34",
+"1@	c #88514D",
+"2@	c #814F88",
+"3@	c #7D4DC5",
+"4@	c #7A50F8",
+"5@	c #806AFD",
+"6@	c #8788FB",
+"7@	c #8FA9F9",
+"8@	c #9CE0F6",
+"9@	c #98F8D1",
+"0@	c #76E570",
+"a@	c #66CF3C",
+"b@	c #A7D28B",
+"c@	c #166C09",
+"d@	c #268110",
+"e@	c #449618",
+"f@	c #90A924",
+"g@	c #D8B92E",
+"h@	c #EE9F2D",
+"i@	c #F07628",
+"j@	c #F24E24",
+"k@	c #EA3F24",
+"l@	c #DB4228",
+"m@	c #CC452B",
+"n@	c #B84830",
+"o@	c #924F3C",
+"p@	c #84506C",
+"q@	c #7F4EA9",
+"r@	c #7B4DE5",
+"s@	c #7D5DFE",
+"t@	c #847AFC",
+"u@	c #8B98FA",
+"v@	c #96C5F8",
+"w@	c #9FF5EB",
+"x@	c #88EFA2",
+"y@	c #69D947",
+"z@	c #65C232",
+"A@	c #A6CB86",
+"B@	c #C4DAC1",
+"C@	c #1E770D",
+"D@	c #308D14",
+"E@	c #6CA11E",
+"F@	c #B9B32A",
+"G@	c #EBB02F",
+"H@	c #EF892A",
+"I@	c #F16026",
+"J@	c #F04123",
+"K@	c #E24026",
+"L@	c #D3432A",
+"M@	c #C3462E",
+"N@	c #A44C35",
+"O@	c #875151",
+"P@	c #814F8D",
+"Q@	c #7D4DCA",
+"R@	c #7A51FA",
+"S@	c #816DFD",
+"T@	c #888AFB",
+"U@	c #90ADF9",
+"V@	c #9DE4F5",
+"W@	c #96F7CB",
+"X@	c #74E368",
+"Y@	c #66CE3B",
+"Z@	c #63B226",
+"`@	c #A6C27F",
+" #	c #C6DCC1",
+".#	c #268311",
+"+#	c #499819",
+"@#	c #96AB24",
+"##	c #DCB82E",
+"$#	c #EE9C2D",
+"%#	c #F07328",
+"&#	c #F24B23",
+"*#	c #E93F24",
+"=#	c #DA4228",
+"-#	c #CB452C",
+";#	c #B54931",
+">#	c #90503E",
+",#	c #835071",
+"'#	c #7F4EAE",
+")#	c #7A4DE9",
+"!#	c #7D5FFE",
+"~#	c #847CFC",
+"{#	c #8C9AFA",
+"]#	c #97C9F7",
+"^#	c #9EF7E7",
+"/#	c #85EE9A",
+"(#	c #68D844",
+"_#	c #64C030",
+":#	c #61A019",
+"<#	c #A5B979",
+"[#	c #DBDBDB",
+"}#	c #BFD6BA",
+"|#	c #328E15",
+"1#	c #72A21F",
+"2#	c #BFB52A",
+"3#	c #ECAE2F",
+"4#	c #EF862A",
+"5#	c #F25D26",
+"6#	c #EF4023",
+"7#	c #E14126",
+"8#	c #D2442A",
+"9#	c #C2472E",
+"0#	c #A14D36",
+"a#	c #865155",
+"b#	c #814F92",
+"c#	c #7C4DCF",
+"d#	c #7B53FB",
+"e#	c #816FFD",
+"f#	c #888CFB",
+"g#	c #91B0F9",
+"h#	c #9EE8F4",
+"i#	c #94F6C5",
+"j#	c #71E160",
+"k#	c #66CC39",
+"l#	c #62AF24",
+"m#	c #5F8E0B",
+"n#	c #A5B777",
+"o#	c #C1D9BB",
+"p#	c #4E991A",
+"q#	c #9CAC26",
+"r#	c #E0B82F",
+"s#	c #EE992D",
+"t#	c #F07028",
+"u#	c #F24923",
+"v#	c #E84025",
+"w#	c #D94228",
+"x#	c #C9452C",
+"y#	c #B34931",
+"z#	c #8E5041",
+"A#	c #835075",
+"B#	c #7E4EB2",
+"C#	c #7A4DED",
+"D#	c #7E61FE",
+"E#	c #857FFC",
+"F#	c #8C9DFA",
+"G#	c #98CEF7",
+"H#	c #9DF8E4",
+"I#	c #82EC91",
+"J#	c #68D642",
+"K#	c #64BD2E",
+"L#	c #609D16",
+"M#	c #5D8202",
+"N#	c #A6B777",
+"O#	c #C8DCBD",
+"P#	c #78A420",
+"Q#	c #C5B62B",
+"R#	c #ECAB2F",
+"S#	c #EF822A",
+"T#	c #D0442A",
+"U#	c #9D4D37",
+"V#	c #85515A",
+"W#	c #804F96",
+"X#	c #7C4DD4",
+"Y#	c #7B55FD",
+"Z#	c #9FEBF3",
+"`#	c #92F5BF",
+" $	c #6FE05A",
+".$	c #66CA38",
+"+$	c #62AD22",
+"@$	c #5E8B09",
+"#$	c #5D8000",
+"$$	c #A6B778",
+"%$	c #DADADA",
+"&$	c #E2E9D9",
+"*$	c #C4CE8B",
+"=$	c #E7D590",
+"-$	c #EFC68F",
+";$	c #F1B18C",
+">$	c #F29D8A",
+",$	c #ED988B",
+"'$	c #E59A8C",
+")$	c #DE9B8E",
+"!$	c #D39D91",
+"~$	c #C0A098",
+"{$	c #BAA0B2",
+"]$	c #B89FD0",
+"^$	c #B69FEE",
+"/$	c #B7A8F7",
+"($	c #BBB7F7",
+"_$	c #BFC6F6",
+":$	c #C4DEF4",
+"<$	c #C8F4EC",
+"[$	c #BBEFC5",
+"}$	c #ACE49A",
+"|$	c #ABD890",
+"1$	c #A9C884",
+"2$	c #A7BA7A",
+"3$	c #A7B878",
+"4$	c #CCD4B4",
+"5$	c #F4F4F4",
+"6$	c #F2F2F2",
+"7$	c #DDDEEB",
+"8$	c #AEB0DC",
+"9$	c #A1A4D8",
+"0$	c #B7B9DF",
+"a$	c #E5E6EE",
+"b$	c #B9BBE0",
+"c$	c #EFEFF1",
+"d$	c #BCBDE1",
+"e$	c #B6B8DF",
+"f$	c #DADBEA",
+"g$	c #F0F0F0",
+"h$	c #D9D9D9",
+"i$	c #F5F5F5",
+"j$	c #F3F3F3",
+"k$	c #ABADDC",
+"l$	c #5C61C2",
+"m$	c #A0A2D8",
+"n$	c #B1B3DE",
+"o$	c #9396D4",
+"p$	c #5D62C3",
+"q$	c #F0F0F2",
+"r$	c #3C42B8",
+"s$	c #ECECF0",
+"t$	c #484DBC",
+"u$	c #9295D4",
+"v$	c #9DA0D7",
+"w$	c #D2D3E8",
+"x$	c #D5D5D5",
+"y$	c #D2D2D2",
+"z$	c #D0D0D0",
+"A$	c #CECECE",
+"B$	c #CCCCCC",
+"C$	c #CACACA",
+"D$	c #B0B0B0",
+"E$	c #F8F8F8",
+"F$	c #F6F6F6",
+"G$	c #DFDFED",
+"H$	c #4D52BE",
+"I$	c #E4E5EF",
+"J$	c #EAEAF0",
+"K$	c #EDEDF1",
+"L$	c #4A4FBD",
+"M$	c #DEDFED",
+"N$	c #CDCDCD",
+"O$	c #FDFDFD",
+"P$	c #FEFEFE",
+"Q$	c #F7F7F7",
+"R$	c #AFB1DE",
+"S$	c #7B7FCD",
+"T$	c #EEEEF2",
+"U$	c #484EBC",
+"V$	c #9EA1D8",
+"W$	c #ABAEDD",
+"X$	c #ADAFDD",
+"Y$	c #EEEFF2",
+"Z$	c #FAFAFA",
+"`$	c #F9F9F9",
+" %	c #FCFCFC",
+".%	c #D8D8D8",
+"+%	c #A5A8DB",
+"@%	c #8589D1",
+"#%	c #6367C5",
+"$%	c #4F54BF",
+"%%	c #D8D9EC",
+"&%	c #EFEFF3",
+"*%	c #9EA1D9",
+"=%	c #ADAFDE",
+"-%	c #EFF0F3",
+";%	c #D7D7D7",
+">%	c #C3C5E5",
+",%	c #6569C6",
+"'%	c #565BC1",
+")%	c #D4D5EB",
+"!%	c #E0E1EE",
+"~%	c #C8C8C8",
+"{%	c #EEEEEE",
+"]%	c #D3D3D3",
+"^%	c #F4F4F6",
+"/%	c #6165C5",
+"(%	c #A9ABDD",
+"_%	c #F1F1F5",
+":%	c #5156C0",
+"<%	c #D6D7EC",
+"[%	c #F0F1F5",
+"}%	c #E2E2F0",
+"|%	c #C9C9C9",
+"1%	c #E9E9F3",
+"2%	c #878BD2",
+"3%	c #6368C6",
+"4%	c #696DC7",
+"5%	c #989AD7",
+"6%	c #5E62C4",
+"7%	c #696EC8",
+"8%	c #E6E6F1",
+"9%	c #F7F7F9",
+"0%	c #F4F4F8",
+"a%	c #F8F8F9",
+"b%	c #D4D4D4",
+"c%	c #C5C5C5",
+". + @ @ @ @ # # # # $ $ $ $ % % % % % & & & & * * * * * = - . . ",
+". ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | | 1 1 1 1 1 1 1 2 3 4 . . ",
+". ; 5 6 7 8 9 0 a b c d e f g h i j k k k k k k k k k k l 4 . . ",
+". ; 5 6 m n o p q b c d e f g h i j k k k k k k k k k k l 4 . . ",
+". r s t u v w x y z A B C D E F G H I J K L M N O P Q R S 4 . . ",
+". r T U V W X Y Z `  ...+. at .#.$.%.&.*.=.-.;.>.,.'.).!.~.{.4 . . ",
+". r U ].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.{.4 . . ",
+". f.U g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.{.4 . . ",
+". f.U ^.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+{.4 . . ",
+". ++ at +#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+4 . . ",
+". ++2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+1+4 . . ",
+". ++r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+1+4 . . ",
+". 1+X R+S+T+U+V+W+X+Y+Z+`+ @. at +@@@#@$@%@&@*@=@-@;@>@,@'@1+4 . . ",
+". 1+)@!@~@{@]@^@/@(@_@:@<@[@}@|@1 at 2@3 at 4@5 at 6@7 at 8@9 at 0@a at b@1+4 . . ",
+". {.Y c at d@e at f@g at h@i at j@k at l@m at n@o at p@q at r@s at t@u at v@w at x@y at z@A at ++4 . . ",
+". {.B at C@D at E@F at G@H at I@J at K@L at M@N at O@P at Q@R at S@T at U@V at W@X at Y@Z@`@++4 . . ",
+". {. #.#+#@###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#^#/#(#_#:#<#++4 . . ",
+". [#}#|#1#2#3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j#k#l#m#n#++4 . . ",
+". [#o#p#q#r#s#t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#++4 . . ",
+". [#O#P#Q#R#S#2.3.Q.T#6.U#V#W#X#Y#b.c.d.Z#`# $.$+$@$#$$$++4 . . ",
+". %$&$*$=$-$;$>$,$'$)$!$~${$]$^$/$($_$:$<$[$}$|$1$2$3$4$++4 . . ",
+". %$5$6$6$7$8$9$0$a$6$6$b$c$6$d$e$e$e$f$4 g$g$g$g$g$g$g$1+4 . . ",
+". h$i$j$k$l$m$n$o$p$q$j$r$s$j$t$u$v$v$w$x$y$z$A$B$C$C$C$D$E$. . ",
+". h$F$G$H$I$5$5$5$J$j$5$r$K$5$L$M$5$5$5$N$O$O$P$. . . 1+r . . . ",
+". h$Q$R$S$i$i$5$5$5$i$i$r$T$i$U$V$W$X$Y$B$Z$E$`$Z$ %{.r . . . . ",
+". .%E$+%@%F$F$R$#%$%%%F$r$&%F$U$*%W$=%-%C$Q$j$5$i$;%r . . . . . ",
+". .%E$>%,%i$F$F$F$'%)%F$r$&%F$L$!%F$F$F$~%j$@ {%]%f.. . . . . . ",
+". .%E$^%/%(%^%E$_%:%<%E$r$[%E$L$}%E$E$E$|%g$* A$f.. . . . . . . ",
+". .%`$E$1%2%3%4%4%5%[%E$6%_%E$7%8%E$E$E$|%@ |%f.. . . . . . . . ",
+". .%Z$Z$Z$Z$9%0%a%Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$C$y$f.. . . . . . . . . ",
+". b%++++++++++++++++++++++++++++++++++++c%r . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
diff --git a/share/metview/icons_mv5/GRIB.svg b/share/metview/icons_mv5/GRIB.svg
new file mode 100644
index 0000000..95acf51
--- /dev/null
+++ b/share/metview/icons_mv5/GRIB.svg
@@ -0,0 +1,462 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="64"
+   height="64"
+   id="svg3688"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="GRIB.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="GRIB.png"
+   inkscape:export-xdpi="45"
+   inkscape:export-ydpi="45"
+   version="1.1"
+   style="display:inline">
+  <defs
+     id="defs3690">
+    <linearGradient
+       id="linearGradient4749">
+      <stop
+         id="stop4751"
+         offset="0"
+         style="stop-color:#2f7c0a;stop-opacity:1;" />
+      <stop
+         id="stop4753"
+         offset="1"
+         style="stop-color:#bfdcb5;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3841">
+      <stop
+         id="stop3843"
+         offset="0"
+         style="stop-color:#ce979b;stop-opacity:1;" />
+      <stop
+         id="stop3845"
+         offset="1"
+         style="stop-color:#e4c9cd;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3669">
+      <stop
+         style="stop-color:#f80a20;stop-opacity:1;"
+         offset="0"
+         id="stop3671" />
+      <stop
+         style="stop-color:#d2a7ae;stop-opacity:1;"
+         offset="1"
+         id="stop3673" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4292">
+      <stop
+         style="stop-color:#e4a312;stop-opacity:1"
+         offset="0"
+         id="stop4294" />
+      <stop
+         id="stop4308"
+         offset="0.5"
+         style="stop-color:#dfae71;stop-opacity:1" />
+      <stop
+         style="stop-color:#ccd6c8;stop-opacity:1;"
+         offset="1"
+         id="stop4296" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4275">
+      <stop
+         style="stop-color:#c5e9eb;stop-opacity:1;"
+         offset="0"
+         id="stop4277" />
+      <stop
+         style="stop-color:#c5e9eb;stop-opacity:0;"
+         offset="1"
+         id="stop4279" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4267">
+      <stop
+         style="stop-color:#2760b3;stop-opacity:1;"
+         offset="0"
+         id="stop4269" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4271" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4229">
+      <stop
+         style="stop-color:#63a1d0;stop-opacity:1;"
+         offset="0"
+         id="stop4231" />
+      <stop
+         style="stop-color:#adc1af;stop-opacity:1;"
+         offset="1"
+         id="stop4233" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3678">
+      <stop
+         style="stop-color:#d9dce6;stop-opacity:1;"
+         offset="0"
+         id="stop3680" />
+      <stop
+         style="stop-color:#324060;stop-opacity:1;"
+         offset="1"
+         id="stop3682" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4749"
+       id="linearGradient3684"
+       x1="14.5655"
+       y1="32.444443"
+       x2="61.434502"
+       y2="32.444443"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0003011,0,0,1.02,0.74429032,-1.12)" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="10.11052 : 23.16572 : 1"
+       inkscape:vp_y="2578.4206 : 1488.6518 : 0"
+       inkscape:vp_z="-97.407027 : 27.144512 : 1"
+       inkscape:persp3d-origin="54.253548 : 40.091112 : 1"
+       id="perspective3696" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4749"
+       id="linearGradient4227"
+       x1="7.4365482"
+       y1="14.912783"
+       x2="17.436548"
+       y2="14.912783"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(2.063452,-4.412783)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4749"
+       id="linearGradient4235"
+       x1="2.3853252"
+       y1="34.659901"
+       x2="8.3853254"
+       y2="34.659901"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.8853253,0.618821)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4275"
+       id="linearGradient4283"
+       x1="7.75"
+       y1="34.875"
+       x2="34.875"
+       y2="34.875"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4292"
+       id="linearGradient4298"
+       x1="22.578678"
+       y1="19.313492"
+       x2="22.57868"
+       y2="47.827412"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.6692699,0,0,1.4331683,9.6998665,-1.8254253)" />
+    <inkscape:perspective
+       id="perspective3647"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3669"
+       id="linearGradient3675"
+       x1="53.5"
+       y1="52"
+       x2="38.5"
+       y2="53"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-8,1)" />
+    <inkscape:perspective
+       id="perspective3687"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3669-2"
+       id="linearGradient3675-3"
+       x1="43"
+       y1="51"
+       x2="52"
+       y2="33"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3669-2">
+      <stop
+         style="stop-color:#0e23f7;stop-opacity:1;"
+         offset="0"
+         id="stop3671-9" />
+      <stop
+         style="stop-color:#91cadc;stop-opacity:1;"
+         offset="1"
+         id="stop3673-5" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective3735"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763-5"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763-7"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763-9"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763-72"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763-2"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3763-50"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3841"
+       id="radialGradient3848"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3497297,-0.00262664,0.0082791,2.1706551,-25.042772,-59.056407)"
+       cx="46.368687"
+       cy="51.512447"
+       fx="46.368687"
+       fy="51.512447"
+       r="2.7461929" />
+    <inkscape:perspective
+       id="perspective3982"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4013"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4229-4"
+       id="linearGradient3876"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.26347355,-0.26497911,0.26497911,0.26347355,17.717064,13.161987)"
+       x1="7.4365482"
+       y1="14.912783"
+       x2="17.436548"
+       y2="14.912783" />
+    <linearGradient
+       id="linearGradient4229-4">
+      <stop
+         style="stop-color:#8866da;stop-opacity:1;"
+         offset="0"
+         id="stop4231-6" />
+      <stop
+         style="stop-color:#a7cedb;stop-opacity:1;"
+         offset="1"
+         id="stop4233-9" />
+    </linearGradient>
+    <linearGradient
+       y2="14.912783"
+       x2="17.436548"
+       y1="14.912783"
+       x1="7.4365482"
+       gradientTransform="matrix(0.26347355,-0.26497911,0.26497911,0.26347355,17.714064,13.105081)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4022"
+       xlink:href="#linearGradient4749"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.5625"
+     inkscape:cx="6.4162634"
+     inkscape:cy="29.094922"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1593"
+     inkscape:window-height="1001"
+     inkscape:window-x="2212"
+     inkscape:window-y="100"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3709" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="-20.22335,27.77665"
+       id="guide3751" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3693">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="inner"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient4283);fill-opacity:1;stroke:none;display:inline"
+       id="path4257"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="m 34.875,34.875 a 13.5625,22.28125 0 1 1 -27.125,0 13.5625,22.28125 0 1 1 27.125,0 z"
+       transform="matrix(2.1986858,0.02524672,0,1.3464236,-15.779742,-15.494592)" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="map"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3684);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:0.86900002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 44.757538,5 0,3.0600001 -1.000302,0 -2.000601,0 c 0,0 0,0 -1.000301,-1.0200001 C 39.756031,6.0200001 37.75543,8.0600001 37.75543,8.0600001 l -1.000301,1.02 c 0,0 -2.000602,-1.02 -4.001204,3.0599999 -2.000602,4.08 1.000301,1.020001 1.000301,1.020001 L 35.754829,12.14 l 0,2.040001 L 34.754527,16.22 33.754226,17.240001 31.753624,16.22 l -2.000603,-1.019999 -1.000301,0 0,1.019999 -2.000601,1.020001 -1.000302,0 -2.000601,1.019999 1.0003,2.039999 c 0,0 -1.0003,0 -2.000603,0 -1.0003 [...]
+       id="path3662" />
+    <path
+       style="fill:url(#linearGradient4227);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="m 16,6 -4,3 -2,5 1,1 1,0 2,-1 2,-1 2,-2 1,-2 0,-1 0,-1 -3,-1 z"
+       id="path3656"
+       sodipodi:nodetypes="cccccccccccc" />
+    <path
+       style="fill:url(#linearGradient4235);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 3.9375,30.5625 C 3.4003906,30.61133 3,31 3,31 L 2,35 4,40 4,39 5,37 6,36 7,34 7,33 6,32 C 6,32 6,32 5,31 4.625,30.625 4.2597656,30.533203 3.9375,30.5625 z"
+       id="path3660"
+       sodipodi:nodetypes="ccccccccccsc" />
+    <path
+       sodipodi:nodetypes="cccccccccccc"
+       id="path3874"
+       d="m 24.145146,12.15568 -0.258957,1.850337 0.797948,1.847326 0.528453,-0.0015 0.263474,-0.26498 0.261968,-0.793431 L 26,14 l -0.003,-1.056906 -0.266485,-0.791926 -0.264979,-0.263473 -0.264979,-0.263474 -1.0554,0.531464 z"
+       style="fill:url(#linearGradient4022);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:#3d6689;stroke-width:1.14283538;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path2883"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="m 34.875,34.875 a 13.5625,22.28125 0 1 1 -27.125,0 13.5625,22.28125 0 1 1 27.125,0 z"
+       transform="matrix(2.2119815,0.02524672,0,1.3464236,-15.142857,-15.494593)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="box"
+     style="display:inline">
+    <rect
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:43.99999976%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:0.70588235;fill-rule:evenodd;stroke:#1b1d35;stroke-width:0.89999992;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;font-family:Arial;-inkscape-font-specification:Arial Bold"
+       id="rect3878"
+       width="18.999998"
+       height="50"
+       x="-61"
+       y="7.0000005"
+       transform="matrix(0,-1,1,0,0,0)" />
+    <text
+       xml:space="preserve"
+       style="font-size:9px;font-style:normal;font-weight:normal;fill:#182e45;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+       x="10"
+       y="58"
+       id="text4687"><tspan
+         sodipodi:role="line"
+         id="tspan4689"
+         x="10"
+         y="58"
+         style="font-size:18px;font-weight:bold;fill:#182e45;font-family:Arial;-inkscape-font-specification:Arial Bold">GRIB</tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/GRIBVECTORS.xpm b/share/metview/icons_mv5/GRIBVECTORS.xpm
new file mode 100755
index 0000000..d47693e
--- /dev/null
+++ b/share/metview/icons_mv5/GRIBVECTORS.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * VECTORS_icon[] = {
+"32 32 12 1",
+" 	c #FFFFFFFFFFFF",
+".	c #00000000DDDD",
+"X	c #9999FFFFFFFF",
+"o	c #00009999FFFF",
+"O	c #555555555555",
+"+	c #EEEEEEEEEEEE",
+"@	c #3333FFFF9999",
+"#	c #333399996666",
+"$	c #0000BBBB0000",
+"%	c #FFFFCCCC9999",
+"&	c #FFFF66663333",
+"*	c #DDDD00000000",
+"    .                           ",
+"   Xo.                          ",
+"  XXo..OOOOOOOOOOOOOOOOOOOOOOO  ",
+" XXooo..+++++++++++++++++++++O  ",
+"XXooooo..++++++++++++++++++++O  ",
+" O+Xo.++++++++++++++@@@@@@#++O  ",
+" O+Xo.+++++++++++++++@@@$$#++O  ",
+" O+Xo.++++++++++++++++$$$$#++O  ",
+" O+Xo.++++++++++++++++@$$##++O  ",
+" O+Xo.+++++++++++++++@$#$##++O  ",
+" O+Xo.++++++++++++++@$#++##++O  ",
+" O+Xo.+++++++++++++@$#++++#++O  ",
+" O+Xo.++++++++++++@$#++++++++O  ",
+" O+Xo.+++++++++++@$#+++++++++O  ",
+" O+Xo.++++++++++@$#++++++++++O  ",
+" O+Xo.+++++++++@$#+++++++++++O  ",
+" O+Xo.++++++++@$#++++++++++++O  ",
+" O+Xo.+++++++@$#+++++++++++++O  ",
+" O+Xo.++++++@$#++++++++++++++O  ",
+" O+Xo.+++++@$#+++++++++++++++O  ",
+" O+Xo.++++@$#++++++++++++++++O  ",
+" O+Xo.+++@$#+++++++++++++++++O  ",
+" O+Xo.++@$#++++++++++++++++++O  ",
+" O+Xo.+@$#+++++++++++++++++%+O  ",
+" O+Xo.@$#++++++++++++++++++%%O  ",
+" O+Xo@$#+++++++++++++++++++&%%  ",
+"%%%%@$#%%%%%%%%%%%%%%%%%%%%&&%% ",
+"&&&@$#&&&&&&&&&&&&&&&&&&&&&&&&&*",
+"**@$#**********************&&** ",
+" @$#o.+++++++++++++++++++++&**  ",
+"@$#Xo.OOOOOOOOOOOOOOOOOOOOO**   ",
+"$# Xo.                     *    "};
diff --git a/share/metview/icons_mv5/GRIB_TO_GEO.svg b/share/metview/icons_mv5/GRIB_TO_GEO.svg
new file mode 100644
index 0000000..b9243f8
--- /dev/null
+++ b/share/metview/icons_mv5/GRIB_TO_GEO.svg
@@ -0,0 +1,280 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="GEO_TO_GRIB.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="13.28125"
+     inkscape:cx="4.2541176"
+     inkscape:cy="16"
+     inkscape:current-layer="layer5"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1102"
+     inkscape:window-height="614"
+     inkscape:window-x="190"
+     inkscape:window-y="24"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849" />
+  </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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3642">
+      <stop
+         style="stop-color:#e14848;stop-opacity:1;"
+         offset="0"
+         id="stop3644" />
+      <stop
+         style="stop-color:#fa1511;stop-opacity:1;"
+         offset="1"
+         id="stop3646" />
+    </linearGradient>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="arrow 2" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="front"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="yellow">
+    <rect
+       style="opacity:0.53603599;fill:#f1f494;fill-opacity:1;stroke:none"
+       id="rect3686"
+       width="15.259641"
+       height="30.560413"
+       x="-31.136248"
+       y="0.69922882"
+       transform="scale(-1,1)" />
+    <rect
+       y="0.65809768"
+       x="-16.041132"
+       height="30.724937"
+       width="15.21851"
+       id="rect3689"
+       style="opacity:0.53603599;fill:#b8c4df;fill-opacity:1;stroke:none"
+       transform="scale(-1,1)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="dots">
+    <path
+       sodipodi:type="arc"
+       style="fill:#f41215;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="path3692"
+       sodipodi:cx="4.3393316"
+       sodipodi:cy="13.840617"
+       sodipodi:rx="1.5424165"
+       sodipodi:ry="1.4601543"
+       d="m 5.8817481,13.840617 a 1.5424165,1.4601543 0 1 1 -3.0848329,0 1.5424165,1.4601543 0 1 1 3.0848329,0 z"
+       transform="matrix(-0.97250001,0,0,1.0272887,31.964216,-7.5743504)" />
+    <path
+       transform="matrix(-0.97250001,0,0,1.0272887,24.642879,-10.618052)"
+       d="m 5.8817481,13.840617 a 1.5424165,1.4601543 0 1 1 -3.0848329,0 1.5424165,1.4601543 0 1 1 3.0848329,0 z"
+       sodipodi:ry="1.4601543"
+       sodipodi:rx="1.5424165"
+       sodipodi:cy="13.840617"
+       sodipodi:cx="4.3393316"
+       id="path3694"
+       style="fill:#f41215;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#f41215;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="path3696"
+       sodipodi:cx="4.3393316"
+       sodipodi:cy="13.840617"
+       sodipodi:rx="1.5424165"
+       sodipodi:ry="1.4601543"
+       d="m 5.8817481,13.840617 a 1.5424165,1.4601543 0 1 1 -3.0848329,0 1.5424165,1.4601543 0 1 1 3.0848329,0 z"
+       transform="matrix(-0.97250001,0,0,1.0272887,32.375527,0.93978862)" />
+    <path
+       transform="matrix(-0.97250001,0,0,1.0272887,32.704576,12.291974)"
+       d="m 5.8817481,13.840617 a 1.5424165,1.4601543 0 1 1 -3.0848329,0 1.5424165,1.4601543 0 1 1 3.0848329,0 z"
+       sodipodi:ry="1.4601543"
+       sodipodi:rx="1.5424165"
+       sodipodi:cy="13.840617"
+       sodipodi:cx="4.3393316"
+       id="path3698"
+       style="fill:#f41215;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#f41215;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="path3700"
+       sodipodi:cx="4.3393316"
+       sodipodi:cy="13.840617"
+       sodipodi:rx="1.5424165"
+       sodipodi:ry="1.4601543"
+       d="m 5.8817481,13.840617 a 1.5424165,1.4601543 0 1 1 -3.0848329,0 1.5424165,1.4601543 0 1 1 3.0848329,0 z"
+       transform="matrix(-0.97250001,0,0,1.0272887,27.316401,14.01948)" />
+    <path
+       transform="matrix(-0.97250001,0,0,1.0272887,24.354961,9.0837473)"
+       d="m 5.8817481,13.840617 a 1.5424165,1.4601543 0 1 1 -3.0848329,0 1.5424165,1.4601543 0 1 1 3.0848329,0 z"
+       sodipodi:ry="1.4601543"
+       sodipodi:rx="1.5424165"
+       sodipodi:cy="13.840617"
+       sodipodi:cx="4.3393316"
+       id="path3702"
+       style="fill:#f41215;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer8"
+     inkscape:label="waves">
+    <path
+       style="fill:none;stroke:#1a2f63;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 7.8149111,0.71979432 c 0,0 -0.271561,1.34883138 -0.699229,1.85089968 -0.625247,0.7340203 -1.757864,2.2674114 -2.63239,2.6735219 -1.260335,0.585272 -3.70180004,1.1516709 -3.70180004,1.1516709"
+       id="path3705-4"
+       sodipodi:nodetypes="cssc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#1a2f63;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 13.573265,0.61696658 c 0,0 -4.0841769,2.79040042 -4.9357329,3.94858612 -0.836897,1.1382481 -1.462972,2.0132654 -2.179948,3.2082262 -0.716976,1.1949608 -1.09683,2.3307631 -1.645245,3.4961441 0,0 -0.917594,2.866251 -1.850899,4.359897 -0.933305,1.493646 -2.55012904,2.550129 -2.55012904,2.550129"
+       id="path3729"
+       sodipodi:nodetypes="czzczz"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#1a2f63;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 15.917738,4.6478149 c 0,0 -2.600946,1.3253495 -3.825193,2.4678663 -1.224247,1.1425168 -2.7404519,2.6538562 -3.2904879,4.4010288 0,0 -1.428658,2.742601 -1.398458,4.442159 0.0302,1.699558 1.8509,5.22365 1.8509,5.22365 0,0 2.4460359,2.26994 3.6195369,2.755784 1.173501,0.485844 3.043702,0.411311 3.043702,0.411311"
+       id="path3731"
+       sodipodi:nodetypes="czszzzc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#1a2f63;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 15.629819,28.380464 c 0,0 -4.2025,-3.293548 -5.9640099,-3.989718 -1.76151,-0.69617 -3.715453,-2.670231 -4.935732,-1.8509 0,0 -1.606583,1.462508 -2.426735,2.056556 -0.820152,0.594048 -1.76863704,1.974293 -1.76863704,1.974293"
+       id="path3733"
+       sodipodi:nodetypes="czszc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#1a2f63;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 13.40874,31.25964 c 0,0 -1.335297,-2.809377 -2.591259,-3.578406 C 9.1488771,26.659542 6.5410011,25.54812 5.0179951,26.77635 c 0,0 -1.943819,1.148317 -2.550129,2.056555 -0.460085,0.689196 -0.699228,2.385604 -0.699228,2.385604"
+       id="path3735"
+       sodipodi:nodetypes="csssc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="blue" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer9"
+     inkscape:label="separator">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 15.867316,0.28743873 C 15.803634,12.29868 15.803634,12.29868 15.803634,12.29868"
+       id="path3738" />
+    <path
+       id="path3740"
+       d="m 16.132683,19.824236 c 0.06368,11.394275 0.06368,11.394275 0.06368,11.394275"
+       style="fill:none;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="arrow">
+    <path
+       style="fill:#0000ff;fill-opacity:1;stroke:#210a5b;stroke-width:0.89999991999999984;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 11.477333,18.357241 0,-5.289597 2,0 0,1.511313 5,0 0,-2.342536 1.033058,0 3.966942,3.85385 -4,3.778284 -1,0 0,-2.26697 -5,0 0,1.511313 -2,0 0,-0.755657 z"
+       id="path3640"
+       sodipodi:nodetypes="ccccccccccccccc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame">
+    <rect
+       style="fill:none;stroke:#494b55;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect2911"
+       width="31.136248"
+       height="31.15167"
+       x="-31.58869"
+       y="0.41131106"
+       transform="scale(-1,1)" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/GeoToKML.xpm b/share/metview/icons_mv5/GeoToKML.xpm
new file mode 100755
index 0000000..557d24f
--- /dev/null
+++ b/share/metview/icons_mv5/GeoToKML.xpm
@@ -0,0 +1,446 @@
+/* XPM */
+static char * GeoToKML_xpm[] = {
+"32 32 411 2",
+"  	c #FFFFFF",
+". 	c #003400",
+"+ 	c #253F8A",
+"@ 	c #3144A1",
+"# 	c #375184",
+"$ 	c #000000",
+"% 	c #FFF7F7",
+"& 	c #C3BFD9",
+"* 	c #BFB9D3",
+"= 	c #C3BDD3",
+"- 	c #BEB7CF",
+"; 	c #B1B3D0",
+"> 	c #979BC4",
+", 	c #727AB5",
+"' 	c #3D4AA3",
+") 	c #263893",
+"! 	c #253C72",
+"~ 	c #7CBAD2",
+"{ 	c #4082B8",
+"] 	c #8585BE",
+"^ 	c #9997C5",
+"/ 	c #BAB4CE",
+"( 	c #D4D3DE",
+"_ 	c #E9E6E5",
+": 	c #EEEAE5",
+"< 	c #E0DDDC",
+"[ 	c #B6B6C9",
+"} 	c #6169A6",
+"| 	c #2F3C96",
+"1 	c #2E4568",
+"2 	c #84C1D6",
+"3 	c #145AAB",
+"4 	c #145AA9",
+"5 	c #155AA8",
+"6 	c #363EA0",
+"7 	c #434FA7",
+"8 	c #787FB8",
+"9 	c #BBBCD0",
+"0 	c #E8E3E0",
+"a 	c #E4E0DD",
+"b 	c #D7D3D5",
+"c 	c #AAAAC0",
+"d 	c #3D4794",
+"e 	c #243791",
+"f 	c #00F76C",
+"g 	c #175DAE",
+"h 	c #1A55AB",
+"i 	c #2939A6",
+"j 	c #23339C",
+"k 	c #213095",
+"l 	c #636BAA",
+"m 	c #BCBCCD",
+"n 	c #E0DBD9",
+"o 	c #DDD8D8",
+"p 	c #D0CBCE",
+"q 	c #7276A2",
+"r 	c #233176",
+"s 	c #175EB2",
+"t 	c #1B57B0",
+"u 	c #2B3CAD",
+"v 	c #2839A4",
+"w 	c #27369D",
+"x 	c #223092",
+"y 	c #394596",
+"z 	c #B4B3C6",
+"A 	c #DDD8D7",
+"B 	c #D9D4D4",
+"C 	c #D3CECF",
+"D 	c #696D9A",
+"E 	c #212F70",
+"F 	c #FF0000",
+"G 	c #5B9AC5",
+"H 	c #2A70B9",
+"I 	c #1A5BB3",
+"J 	c #2C41B3",
+"K 	c #2A3CAC",
+"L 	c #2939A4",
+"M 	c #26359A",
+"N 	c #233191",
+"O 	c #2D3A8C",
+"P 	c #A0A0BB",
+"Q 	c #DAD5D4",
+"R 	c #D5D0D0",
+"S 	c #D0CACB",
+"T 	c #6F729A",
+"U 	c #1E2D77",
+"V 	c #7DB9CE",
+"W 	c #7DB8CD",
+"X 	c #6AA7C8",
+"Y 	c #04360B",
+"Z 	c #2B44B9",
+"` 	c #2B3DB1",
+" .	c #2A3AA9",
+"..	c #27379E",
+"+.	c #253496",
+"@.	c #1F2D89",
+"#.	c #37418C",
+"$.	c #CEC9CD",
+"%.	c #D6D1D0",
+"&.	c #D3CDCD",
+"*.	c #C7C1C4",
+"=.	c #383F7E",
+"-.	c #22319F",
+";.	c #7BB6CB",
+">.	c #6AA8C6",
+",.	c #4A6CC2",
+"'.	c #2A3EB6",
+").	c #2B3CAE",
+"!.	c #2838A3",
+"~.	c #23318F",
+"{.	c #1C2983",
+"].	c #696E9E",
+"^.	c #D1CBCD",
+"/.	c #D1CBCC",
+"(.	c #CEC8C8",
+"_.	c #9C9AAA",
+":.	c #252E71",
+"<.	c #7BB6CC",
+"[.	c #7AB5CB",
+"}.	c #7AB5C9",
+"|.	c #87B1CD",
+"1.	c #4256BD",
+"2.	c #283BB0",
+"3.	c #2939A5",
+"4.	c #27369C",
+"5.	c #243291",
+"6.	c #212E88",
+"7.	c #293481",
+"8.	c #9F9EB5",
+"9.	c #CBC5C6",
+"0.	c #C0BBBC",
+"a.	c #555883",
+"b.	c #1D217A",
+"c.	c #7BB7CC",
+"d.	c #79B4CA",
+"e.	c #78B3C9",
+"f.	c #82B8CA",
+"g.	c #ACBFD3",
+"h.	c #5E6ABD",
+"i.	c #2637A7",
+"j.	c #27369E",
+"k.	c #243393",
+"l.	c #222F89",
+"m.	c #1C297C",
+"n.	c #2E377D",
+"o.	c #BCB8C0",
+"p.	c #CBC5C5",
+"q.	c #C4BFBE",
+"r.	c #9F9BA6",
+"s.	c #1A2370",
+"t.	c #64A5D0",
+"u.	c #73B0CB",
+"v.	c #7AB5CA",
+"w.	c #77B2C8",
+"x.	c #76B1C6",
+"y.	c #8FBBCA",
+"z.	c #C7CAD6",
+"A.	c #515EB3",
+"B.	c #24349E",
+"C.	c #1F2B7E",
+"D.	c #192473",
+"E.	c #545988",
+"F.	c #BDB8BD",
+"G.	c #C2BDBC",
+"H.	c #BBB5B5",
+"I.	c #272E66",
+"J.	c #0000FF",
+"K.	c #63A2C8",
+"L.	c #76B1C8",
+"M.	c #77B2C6",
+"N.	c #76B0C5",
+"O.	c #FE0505",
+"P.	c #F06968",
+"Q.	c #D2D1D5",
+"R.	c #777EB6",
+"S.	c #243293",
+"T.	c #202E89",
+"U.	c #1D2774",
+"V.	c #172167",
+"W.	c #383E72",
+"X.	c #9593A1",
+"Y.	c #77768B",
+"Z.	c #131A52",
+"`.	c #1F2986",
+" +	c #4C8EC3",
+".+	c #74AFC5",
+"++	c #FA1F1F",
+"@+	c #E1BBBB",
+"#+	c #D6D1D4",
+"$+	c #787DAF",
+"%+	c #243189",
+"&+	c #1E2A7D",
+"*+	c #1C2773",
+"=+	c #192268",
+"-+	c #151D5D",
+";+	c #1D2358",
+">+	c #181E52",
+",+	c #131950",
+"'+	c #172066",
+")+	c #286FBD",
+"!+	c #3075BB",
+"~+	c #ED6464",
+"{+	c #D7D2D2",
+"]+	c #D8D2D1",
+"^+	c #A8A6BC",
+"/+	c #353E85",
+"(+	c #1A2570",
+"_+	c #192266",
+":+	c #171F5D",
+"<+	c #141A51",
+"[+	c #13194E",
+"}+	c #13194F",
+"|+	c #131A56",
+"1+	c #2A71BE",
+"2+	c #256CBB",
+"3+	c #1E65B7",
+"4+	c #1C63B4",
+"5+	c #91B8C6",
+"6+	c #D6D0D1",
+"7+	c #D4CECF",
+"8+	c #D4CECE",
+"9+	c #ADABBA",
+"0+	c #505689",
+"a+	c #131D61",
+"b+	c #151D5A",
+"c+	c #141A50",
+"d+	c #121850",
+"e+	c #77B5D2",
+"f+	c #286EBC",
+"g+	c #2369B9",
+"h+	c #1F65B7",
+"i+	c #1960B4",
+"j+	c #175DB0",
+"k+	c #1B5FA9",
+"l+	c #578BB4",
+"m+	c #C8C4CB",
+"n+	c #D0C9CA",
+"o+	c #CBC4C5",
+"p+	c #C8C2C1",
+"q+	c #818098",
+"r+	c #343969",
+"s+	c #10174D",
+"t+	c #12184E",
+"u+	c #2E74BC",
+"v+	c #1C63B5",
+"w+	c #1960B3",
+"x+	c #165CAD",
+"y+	c #155BA8",
+"z+	c #1459A4",
+"A+	c #19529E",
+"B+	c #4D579D",
+"C+	c #A7A5BA",
+"D+	c #CFC8C8",
+"E+	c #C7C2C2",
+"F+	c #C1BBBC",
+"G+	c #BCB6B6",
+"H+	c #A5A1A7",
+"I+	c #66667F",
+"J+	c #343861",
+"K+	c #191E51",
+"L+	c #131954",
+"M+	c #175EB0",
+"N+	c #175DAF",
+"O+	c #165CAC",
+"P+	c #1358A1",
+"Q+	c #164C98",
+"R+	c #202D87",
+"S+	c #1D297D",
+"T+	c #454C87",
+"U+	c #918FA5",
+"V+	c #B1ADB2",
+"W+	c #B9B3B2",
+"X+	c #B3ADAD",
+"Y+	c #AFA9A8",
+"Z+	c #ABA6A4",
+"`+	c #6B6A7E",
+" @	c #171E5F",
+".@	c #165BAA",
+"+@	c #155AA7",
+"@@	c #13579D",
+"#@	c #174894",
+"$@	c #202C82",
+"%@	c #1D2978",
+"&@	c #19246F",
+"*@	c #20286A",
+"=@	c #3D4272",
+"-@	c #78778C",
+";@	c #9D999F",
+">@	c #ACA7A3",
+",@	c #585973",
+"'@	c #192376",
+")@	c #145AA4",
+"!@	c #1458A2",
+"~@	c #1357A0",
+"{@	c #12569C",
+"]@	c #125599",
+"^@	c #16458E",
+"/@	c #1E2A7A",
+"(@	c #1C2771",
+"_@	c #1A246A",
+":@	c #182061",
+"<@	c #151C58",
+"[@	c #0E154D",
+"}@	c #141B4F",
+"|@	c #31355F",
+"1@	c #4B4D6D",
+"2@	c #252A59",
+"3@	c #1358A0",
+"4@	c #13579E",
+"5@	c #115598",
+"6@	c #115495",
+"7@	c #144489",
+"8@	c #1D2773",
+"9@	c #1A246B",
+"0@	c #192164",
+"a@	c #161E5B",
+"b@	c #141B53",
+"c@	c #12194E",
+"d@	c #141B59",
+"e@	c #3072AB",
+"f@	c #12569A",
+"g@	c #115496",
+"h@	c #105393",
+"i@	c #105290",
+"j@	c #134282",
+"k@	c #182163",
+"l@	c #171F5C",
+"m@	c #141B54",
+"n@	c #18215C",
+"o@	c #5E9DC1",
+"p@	c #145797",
+"q@	c #105394",
+"r@	c #105392",
+"s@	c #0F518F",
+"t@	c #0E508C",
+"u@	c #B40C23",
+"v@	c #151C55",
+"w@	c #11174D",
+"x@	c #0F154C",
+"y@	c #171C50",
+"z@	c #7DBAD0",
+"A@	c #417FA8",
+"B@	c #236497",
+"C@	c #1A5B92",
+"D@	c #13558C",
+"E@	c #9B0F2B",
+"F@	c #19205C",
+"G@	c #181E55",
+"H@	c #181F52",
+"I@	c #1E2354",
+"J@	c #292D5A",
+"K@	c #444768",
+"L@	c #666679",
+"M@	c #2E325D",
+"N@	c #16216D",
+"O@	c #74B0C5",
+"P@	c #5F99B1",
+"Q@	c #5792AC",
+"R@	c #4E89A6",
+"S@	c #C13B45",
+"T@	c #79788C",
+"U@	c #777688",
+"V@	c #7B7A88",
+"W@	c #85838C",
+"X@	c #8E8B90",
+"Y@	c #969392",
+"Z@	c #606075",
+"`@	c #131B51",
+" #	c #639EB2",
+".#	c #5E98AD",
+"+#	c #5D96AC",
+"@#	c #6798A9",
+"##	c #B9908E",
+"$#	c #A7A2A0",
+"%#	c #A19D9B",
+"&#	c #959293",
+"*#	c #848289",
+"=#	c #51526D",
+"-#	c #181F5A",
+";#	c #609CB5",
+">#	c #508BA4",
+",#	c #598DA3",
+"'#	c #80919E",
+")#	c #928E95",
+"!#	c #88868F",
+"~#	c #717181",
+"{#	c #595A73",
+"]#	c #383B62",
+"^#	c #232756",
+"/#	c #151C59",
+"(#	c #508EAF",
+"_#	c #0A4475",
+":#	c #102E61",
+"<#	c #141B50",
+"[#	c #12184D",
+"}#	c #0F164C",
+"|#	c #0E144B",
+"1#	c #12184F",
+"2#	c #151D52",
+"3#	c #1E517E",
+"4#	c #102256",
+"5#	c #1B2270",
+"6#	c #80BDD3",
+"7#	c #395D87",
+"8#	c #131A4F",
+"9#	c #12194F",
+"0#	c #151C5A",
+"a#	c #18215B",
+"b#	c #536E5F",
+"c#	c #151D5E",
+"d#	c #1C2578",
+"                        . . . . . + @ # $ $                     ",
+"                  . . . % & * = - ; > , ' ) ! $                 ",
+"              . . . . . ~ { ] ^ / ( _ : < [ } | 1 $             ",
+"            . . . . 2 . . 3 4 5 6 7 8 9 0 a b c d e $           ",
+"          . . f . 2 2 . . . . g h i j k l m n o p q r $         ",
+"        . f . . 2 2 2 . f . . s t u v w x y z A B C D E $       ",
+"      . . . . F F . . . . . G H I J K L M N O P Q R S T U $     ",
+"    . . % . F F F F . . . V W X Y Z `  ...+. at .#.$.%.&.*.=.-.    ",
+"    . % . . F F F F . . V . . ;.>.,.'.).!.M ~.{.].^./.(._.:.$   ",
+"  . . % . . . F F f f . . . <.[.}.|.1.2.3.4.5.6.7.8.&.9.0.a.b.  ",
+"  . . . % . . f . f . . . c.[.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.$ ",
+"  . 2 . . . . . f . f . t.u.v.e.w.x.y.z.A.B.k.l.C.D.E.F.G.H.I.$ ",
+". 2 2 . . . . . . . . . J.J.K.L.M.N.O.P.Q.R.S.T.C.U.V.W.X.Y.Z.`.",
+". 2 2 2 . . . 2 2 2 2 J.J.J.J. +.+F F ++ at +#+$+%+&+*+=+-+;+>+,+'+",
+". 2 2 2 2 . . 2 2 2 2 J.J.J.J.)+!+F F F ~+{+]+^+/+(+_+:+<+[+}+|+",
+". 2 J.J.2 2 . . 2 2 2 2 J.J.1+2+3+4+F F 5+6+7+8+9+0+a+b+c+[+[+d+",
+". J.J.J.J.2 2 . . . . . e+f+g+h+i+j+3 k+l+m+8+n+o+p+q+r+[+s+t+d+",
+". J.J.J.J.. . . . . . . . u+v+w+j+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+",
+". 2 J.J.2 . . % . . f . . . M+N+O+y+z+P+Q+R+S+T+U+V+W+X+Y+Z+`+ @",
+". 2 2 2 2 . . % . . . . f . . . at +@z+P+@@#@$@%@&@*@=@-@;@Z+>@,@'@",
+"  . 2 2 2 2 . . % . . . f . . )@!@~@{@]@^@/@(@_@:@<@[@}@|@1 at 2@$ ",
+"  . 2 2 2 2 2 2 . % . . f . . 3 at 4@{@5 at 6@7 at 8@9 at 0@a at b@[+c at s+s+d@$ ",
+"  . 2 2 2 2 F F . . % . . . e at f@5 at g@h at i@j at 9@k at l@m@}+[+[+[+[+n@  ",
+"    . 2 2 F F F F . % . . . o at p@q at r@s at t@u at 0@l at v@}+[+w at x@y at t+$   ",
+"    . . 2 F F F F . % . . 2 z at A@B at C@D at F E at F@G at H@I at J@K at L@M at N@    ",
+"      . 2 2 F F 2 . . . 2 2 2 O at P@Q at R@F S at T@U at V@W at X@Y at Z@`@$     ",
+"        . 2 2 2 2 . . 2 2 J.J.c. #.#+#@###Z+$#%#&#*#=#-#$       ",
+"          . 2 2 2 . . 2 J.J.J.J.;#>#,#'#)#!#~#{#]#^#/#$         ",
+"            . . 2 2 . 2 J.J.J.J.(#_#:#<#[#}#|#x at 1#2#$           ",
+"              . . 2 2 2 2 J.J.2 z at 3#4#c@[+[+[+t+5#$             ",
+"                  . . . 2 2 2 2 6#7#8#[+9#0#a#$                 ",
+"                        . . . . . b#c#d#$ $                     "};
diff --git a/share/metview/icons_mv5/HOME.svg b/share/metview/icons_mv5/HOME.svg
new file mode 100644
index 0000000..a794454
--- /dev/null
+++ b/share/metview/icons_mv5/HOME.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="home.svg"
+   style="display:inline">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3753">
+      <stop
+         style="stop-color:#539ec0;stop-opacity:1;"
+         offset="0"
+         id="stop3755" />
+      <stop
+         id="stop3713"
+         offset="0.5"
+         style="stop-color:#6798c4;stop-opacity:1;" />
+      <stop
+         style="stop-color:#5391d7;stop-opacity:1;"
+         offset="1"
+         id="stop3757" />
+    </linearGradient>
+    <linearGradient
+       y2="-0.56834435"
+       x2="36.550461"
+       y1="25.776665"
+       x1="20.381924"
+       gradientTransform="matrix(0.55845763,0,0,0.55794702,-1.3287357,-1.8666085)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2910"
+       xlink:href="#linearGradient3753"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="12.46875"
+     inkscape:cx="1.5704858"
+     inkscape:cy="19.139085"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1651"
+     inkscape:window-height="1068"
+     inkscape:window-x="2159"
+     inkscape:window-y="103"
+     inkscape:window-maximized="0"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)"
+     style="display:inline">
+    <path
+       sodipodi:nodetypes="ccccccccccccccc"
+       inkscape:connector-curvature="0"
+       id="path3715"
+       d="m 5.2413216,1050.9903 0.133129,-18.308 -4.2264311,0 12.5644495,-9.0077 2.228061,-1.5976 6.339645,4.3196 8.765878,6.5227 -3.949479,0 -0.02429,18.0705 -4.91255,5e-4 0,-10.8423 -8.886327,0 0,10.8423 -8.0320799,-5e-4 -1.6e-6,5e-4 z"
+       style="fill:#87aade;fill-opacity:1;stroke:#2c2e6d;stroke-width:1.29999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+</svg>
diff --git a/share/metview/icons/HOVMOELLERDATA.xpm b/share/metview/icons_mv5/HOVMOELLERDATA.xpm
similarity index 100%
copy from share/metview/icons/HOVMOELLERDATA.xpm
copy to share/metview/icons_mv5/HOVMOELLERDATA.xpm
diff --git a/share/metview/icons_mv5/INPUTVISUALISER.svg b/share/metview/icons_mv5/INPUTVISUALISER.svg
new file mode 100755
index 0000000..c95b8e0
--- /dev/null
+++ b/share/metview/icons_mv5/INPUTVISUALISER.svg
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64"
+   height="64"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="INPUTVISUALISER.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   style="display:inline">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective5543" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.796875"
+     inkscape:cx="13.462069"
+     inkscape:cy="31.587265"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     width="64px"
+     height="64px"
+     inkscape:window-width="1322"
+     inkscape:window-height="1040"
+     inkscape:window-x="2169"
+     inkscape:window-y="70"
+     showgrid="false"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="circle"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="2.6482759"
+       y="14.271264"
+       id="text6928"><tspan
+         sodipodi:role="line"
+         id="tspan6930"
+         x="2.6482759"
+         y="14.271264">4/8/15/16</tspan><tspan
+         sodipodi:role="line"
+         x="2.6482759"
+         y="30.521263"
+         id="tspan6932">6/7/8/9/9</tspan><tspan
+         sodipodi:role="line"
+         x="2.6482759"
+         y="46.771263"
+         id="tspan6934">3/5/6/8/4</tspan><tspan
+         sodipodi:role="line"
+         x="2.6482759"
+         y="63.021263"
+         id="tspan6936">23/42/10</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="text"
+     style="display:inline">
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3142"
+       style="font-family:Bitstream Vera Sans"><flowRegion
+         id="flowRegion3144"><rect
+           id="rect3146"
+           width="24.422989"
+           height="14.565517"
+           x="21.333334"
+           y="26.188505"
+           style="font-family:Bitstream Vera Sans" /></flowRegion><flowPara
+         id="flowPara3148">SassdfsfdffsSQ</flowPara></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3150"
+       style="font-family:Bitstream Vera Sans Mono"><flowRegion
+         id="flowRegion3152"><rect
+           id="rect3154"
+           width="18.096552"
+           height="12.8"
+           x="23.834482"
+           y="27.954023"
+           style="font-family:Bitstream Vera Sans Mono" /></flowRegion><flowPara
+         id="flowPara3156">SQ</flowPara></flowRoot>    <g
+       style="display:inline"
+       id="g6326"
+       transform="matrix(2.1061635,0,0,2.1061635,-2.6698689,-2.7501989)">
+      <rect
+         rx="0"
+         ry="0.76569498"
+         y="25.690905"
+         x="20.200878"
+         height="1.53139"
+         width="3.6325176"
+         id="rect4235"
+         style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.85816514;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         ry="1.2517357"
+         y="27.350697"
+         x="13.411453"
+         height="2.7717004"
+         width="17.032545"
+         id="rect4233"
+         style="fill:#b6c6cc;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.95899999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <g
+         id="g6294">
+        <rect
+           style="fill:#e7e4e0;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:1.00858581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect4231"
+           width="18.368809"
+           height="12.378362"
+           x="12.631559"
+           y="13.338168"
+           ry="1.2467414" />
+        <path
+           style="fill:none;stroke:#e52626;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+           d="m 17.43489,21.539066 3.397568,-5.990449 1.162327,4.559894 2.548176,-2.145833 c 0.998408,0.849393 1.708776,1.410744 2.995225,2.548177"
+           id="path5224"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           style="fill:none;stroke:#1f283c;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 14.752598,15.056863 c 0.0447,8.449216 0.0447,8.538626 0.0447,8.538626"
+           id="path5226" />
+        <path
+           style="fill:none;stroke:#1f283c;stroke-width:1.00666595px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 14.308883,23.726271 15.014163,-0.03804"
+           id="path5228" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/Interpolation.svg b/share/metview/icons_mv5/Interpolation.svg
new file mode 100755
index 0000000..9696c6e
--- /dev/null
+++ b/share/metview/icons_mv5/Interpolation.svg
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64"
+   height="64"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="Interpolation.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   style="display:inline">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.796875"
+     inkscape:cx="-15.448276"
+     inkscape:cy="31.565804"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     width="64px"
+     height="64px"
+     inkscape:window-width="1571"
+     inkscape:window-height="884"
+     inkscape:window-x="170"
+     inkscape:window-y="45"
+     showgrid="false"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="grid"
+     style="display:inline">
+    <g
+       id="g3867"
+       transform="translate(-1.1770115,-2.0597701)"
+       stroke="#FF0000"
+       style="stroke:#165493;stroke-opacity:1">
+      <path
+         id="path2173"
+         d="m 14.295572,7.0941005 c 0,48.7819135 0,48.7819135 0,48.7819135 l 0,0"
+         style="fill:none;stroke-width:0.82181877000000003px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke:#165493"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path2175"
+         d="m 25.717705,7.0941005 c 0,48.7819135 0,48.7819135 0,48.7819135 l 0,0"
+         style="fill:none;stroke-width:0.82181877000000003px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke:#165493"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path2177"
+         d="m 37.139839,7.0941005 c 0,48.7819135 0,48.7819135 0,48.7819135"
+         style="fill:none;stroke-width:0.82181877000000003px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke:#165493"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path2179"
+         d="m 48.561972,7.0941005 c 0,48.7819135 0,48.7819135 0,48.7819135"
+         style="fill:none;stroke-width:0.82200002999999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke:#165493"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path2207"
+         d="m 5.5952994,15.454821 c 44.5780246,0 44.5780246,0 44.5780246,0"
+         style="fill:none;stroke-width:0.86943780999999998px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke:#165493" />
+      <path
+         id="path5221"
+         d="m 5.6628904,30.114882 c 44.7012406,0 44.7012406,0 44.7012406,0"
+         style="fill:none;stroke-width:0.82181877000000003px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke:#165493"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:transform-center-y="-7.6505747"
+         inkscape:transform-center-x="19.714943"
+         id="path5223"
+         d="m 5.6628903,43.686143 c 44.7012407,0 44.7012407,0 44.7012407,0"
+         style="fill:none;stroke-width:0.82181877000000003px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke:#165493"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="g3044-2"
+       transform="matrix(0.81248607,0,0,0.90872491,6.1448467,6.5989633)"
+       style="stroke:#ff008a;stroke-opacity:1;fill:#ffdd55">
+      <path
+         id="path2173-3"
+         d="m 14.5,4.5 c 0,55 0,55 0,55 l 0,0"
+         style="fill:#ffdd55;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke:#ff008a"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path2175-7"
+         d="m 29.5,4.5 c 0,55 0,55 0,55 l 0,0"
+         style="fill:#ffdd55;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke:#ff008a"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path2177-5"
+         d="m 44.5,4.5 c 0,55 0,55 0,55"
+         style="fill:#ffdd55;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke:#ff008a"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path2179-9"
+         d="m 59.5,4.5 c 0,55 0,55 0,55"
+         style="fill:#ffdd55;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke:#ff008a"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path2207-2"
+         d="m 3.0744551,13.926437 c 58.5416369,0 58.5416369,0 58.5416369,0"
+         style="fill:#ffdd55;stroke-width:1.05794345999999995px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke:#ff008a" />
+      <path
+         id="path5221-2"
+         d="m 3.1632183,30.455172 c 58.7034487,0 58.7034487,0 58.7034487,0"
+         style="fill:#ffdd55;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke:#ff008a"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:transform-center-y="-7.6505747"
+         inkscape:transform-center-x="19.714943"
+         id="path5223-8"
+         d="m 3.1632182,45.756322 c 58.7034488,0 58.7034488,0 58.7034488,0"
+         style="fill:#ffdd55;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke:#ff008a"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/JPEG.xpm b/share/metview/icons_mv5/JPEG.xpm
new file mode 100644
index 0000000..652250c
--- /dev/null
+++ b/share/metview/icons_mv5/JPEG.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * JPEG_xpm[] = {
+"32 32 44 1",
+" 	c #FFFFFFFFFFFF",
+".	c #FCFCFDFDFFFF",
+"X	c #FAFAFBFBFFFF",
+"o	c #F8F8FAFAFFFF",
+"O	c #F6F6F8F8FFFF",
+"+	c #F4F4F6F6FFFF",
+"@	c #F2F2F5F5FFFF",
+"#	c #F0F0F3F3FFFF",
+"$	c #EEEEF1F1FFFF",
+"%	c #ECECF0F0FFFF",
+"&	c #EAEAEEEEFFFF",
+"*	c #E8E8ECECFFFF",
+"=	c #E6E6EBEBFFFF",
+"-	c #E4E4E9E9FFFF",
+";	c #E2E2E7E7FFFF",
+":	c #E0E0E6E6FFFF",
+">	c #DEDEE4E4FFFF",
+",	c #DCDCE2E2FFFF",
+"<	c #DADAE1E1FFFF",
+"1	c #D8D8DFDFFFFF",
+"2	c #D6D6DDDDFFFF",
+"3	c #D4D4DCDCFFFF",
+"4	c #D2D2DADAFFFF",
+"5	c #D0D0D8D8FFFF",
+"6	c #CECED7D7FFFF",
+"7	c #CCCCD5D5FFFF",
+"8	c #C8C8D2D2FFFF",
+"9	c #C6C6D0D0FFFF",
+"0	c #C4C4CECEFFFF",
+"q	c #000000000000",
+"w	c #C0C0CBCBFFFF",
+"e	c #C2C2CDCDFFFF",
+"r	c #CACAD3D3FEFE",
+"t	c #BABAC6C6FFFF",
+"y	c #BEBEC9C9FFFF",
+"u	c #B8B8C4C4FFFF",
+"i	c #B4B4C1C1FFFF",
+"p	c #BCBCC8C8FFFF",
+"a	c #B0B0BEBEFFFF",
+"s	c #ACACBABAFFFF",
+"d	c #AAAAB9B9FFFF",
+"f	c #A6A6B5B5FFFF",
+"g	c #A2A2B2B2FFFF",
+"h	c #B2B2BFBFFFFF",
+"                                ",
+"           .XooOOOooX.          ",
+"         XoO+@@###@@+OoX        ",
+"       .oO@#$%%&&&%%$#@Oo.      ",
+"      XO+#%&*==---==*&%#+OX     ",
+"     XO@$&*-;:>>>>>:;-*&$@OX    ",
+"    XO@$&=;>,<11111<,>;=&$@OX   ",
+"   .O@$*-:,<234444432<,:-*$@O.  ",
+"   o+$&-:,1356777776531,:-&$+o  ",
+"  XO#&=:,246789909987642,:=&#OX ",
+"  o@%qqq14qqqqqqqwwe9r6qqqq*%@o ",
+" .O#&qqq36qqqqqqqqtyeqqqqqqqq#O.",
+" X+$*qqq57qqquiqqqqupqqq52qqq$+X",
+" o@%=qqq68qqqiasqqqiqqq863<qqq at o",
+" o@%=qqq79qqqadfqqqaqqq9741qqq at o",
+" O#&-qqq79qqqsfqqqqsqqq9741>-&#O",
+" O#&-qqq70qqqqqqqqfsqqq0741>-&#O",
+" O#&-qqq79qqqqqqqgfsqqq97qqqqq#O",
+" o@%=qqq79qqqadfffdaqqq97qqqqq at o",
+" qqq=qqq68qqqiasssaiqqq863<qqq at o",
+" qqq*qqq57qqquihhhiuqqq752,qqq+X",
+" qqq&qqq36qqqytuuutyeqqq3<qqqqO.",
+" qqqqqqq14qqqewwywwe9qqqqqqqqqo ",
+"  qqqqq:,2qqq8990998764qqqq&qqX ",
+"   o+$&-:,1356777776531,:-&$+o  ",
+"   .O@$*-:,<234444432<,:-*$@O.  ",
+"    XO@$&=;>,<11111<,>;=&$@OX   ",
+"     XO@$&*-;:>>>>>:;-*&$@OX    ",
+"      XO+#%&*==---==*&%#+OX     ",
+"       .oO@#$%%&&&%%$#@Oo.      ",
+"         XoO+@@###@@+OoX        ",
+"           .XooOOOooX.          "};
diff --git a/share/metview/icons_mv5/KML.svg b/share/metview/icons_mv5/KML.svg
new file mode 100644
index 0000000..8191618
--- /dev/null
+++ b/share/metview/icons_mv5/KML.svg
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4537"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="KML.svg">
+  <defs
+     id="defs4539" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.7781746"
+     inkscape:cx="-5.821768"
+     inkscape:cy="33.638942"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1032"
+     inkscape:window-x="-4"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1"
+     objecttolerance="14"
+     gridtolerance="10">
+    <inkscape:grid
+       type="xygrid"
+       id="grid4547"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g3668"
+       transform="translate(1.498962,0.43807)">
+      <rect
+         y="29.611233"
+         x="9.3853531"
+         height="24.301182"
+         width="43.858448"
+         id="rect5443"
+         style="fill:#ffffff;fill-opacity:1;stroke:#2b2ba8;stroke-width:0.66900003;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5576"
+         d="m 12.00147,34.970442 c -0.901277,-0.05985 1.752843,-0.339164 2.234407,0.130003 0.957567,0.712661 1.18984,2.123 2.13165,2.923832 0.260503,1.453921 1.968929,1.967219 2.828948,2.97109 0.432381,1.625124 1.23279,3.184249 1.033099,4.902818 -0.677044,1.141376 1.766426,3.365573 1.34802,1.181024 0.103719,-1.819029 2.706961,-1.629955 2.999127,-3.430637 0.808487,-1.451529 -1.269877,-2.797441 -2.442059,-3.271322 -1.385722,0.174453 -4.225816,-0.619643 -3.190689,-2.449816 1.553179,0.195877 [...]
+         style="fill:none;stroke:#000000;stroke-width:0.69800001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccccccccccc"
+         id="path5580"
+         d="m 48.022923,37.312399 c -1.447924,0.979175 -1.722092,2.195614 -2.793349,3.585786 -1.035917,1.182681 -2.990513,-0.663653 -3.892025,-1.305233 -0.214816,0.703369 0.199566,1.869871 -1.107975,1.305233 0.02768,-1.360363 -1.740647,-2.467806 -2.840924,-1.177239 -0.806036,0.592788 0.915949,1.316352 -0.197641,2.001955 -1.207275,1.173552 -1.450466,2.959611 -2.60083,4.067118 C 32.692987,45.683081 33.110177,42.954644 32.001764,41.875226 30.899018,41.25442 29.251246,40.554302 30,39 c 0.137 [...]
+         style="fill:none;stroke:#000000;stroke-width:0.698;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5582"
+         d="m 46.898621,43.332135 c -1.266227,-0.338229 -3.499668,-0.580426 -2.977416,1.445146 0.68862,1.043044 2.567723,1.153239 3.705953,1.120904 1.326702,-1.285802 -0.491603,-2.221759 -1.200981,-3.037823 -0.762861,-0.784879 -0.941411,-0.249985 0.01964,0.151196 l 0.268353,0.179799 0.184449,0.140778 0,0 z"
+         style="fill:none;stroke:#000000;stroke-width:0.59799999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5584"
+         d="m 10.229574,51.12737 c 1.947437,-0.856815 4.140833,-0.539369 6.18976,-0.871832 1.562548,0.30785 3.119744,-0.141064 4.708935,-0.0011 1.595266,-0.05391 3.256219,0.214598 4.756516,-0.438115 1.685034,-0.577797 3.519762,-0.20353 5.274435,-0.310161 1.508353,-0.109211 2.940498,0.123817 4.411483,0.250368 1.95049,0.0915 3.843565,-0.196223 5.788598,-0.132875 2.156658,0.02072 4.289417,-0.233492 6.444845,-0.241463 1.738245,-0.417075 2.519849,1.560464 4.308833,1.121697 l 0.09638,0 0.02022,0"
+         style="fill:none;stroke:#000000;stroke-width:0.70700002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5586"
+         d="m 22.924607,33.663415 c 0.820143,0.973176 0.333546,3.407153 2.304967,2.23477 0.174915,-0.996066 1.970806,-2.004208 1.095151,-2.916865 -1.255015,0.224146 -2.695228,-0.32281 -3.803043,0.438531 -0.221264,-0.849196 -0.305912,-0.55997 -0.303598,-0.01255 -1.07997,0.153218 0.493715,0.09155 0.706523,0.256114 z"
+         style="fill:none;stroke:#000000;stroke-width:0.69800001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5598"
+         d="m 34.061454,45.018667 c -0.26543,-0.247948 -0.409767,-0.556921 -0.720095,-1.541467 -0.304995,-0.967624 -0.620483,-1.643108 -0.883364,-1.89135 -0.09888,-0.09338 -0.438482,-0.317866 -0.754658,-0.498858 -1.00628,-0.576037 -1.339483,-0.910464 -1.33292,-1.337811 0.0076,-0.497621 0.202136,-0.764731 1.008493,-1.385026 0.443577,-0.341224 0.610022,-0.5847 0.610022,-0.892339 0,-0.272267 -0.303831,-0.65784 -0.603872,-0.766336 l -0.214615,-0.07761 0.152114,-0.224152 c 0.16888,-0.248859 0 [...]
+         style="fill:#ffffff;fill-opacity:1;stroke:#2b2ba8;stroke-width:0.07056933;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5602"
+         d="m 34.154448,45.002201 c -0.231841,-0.182366 -0.422031,-0.572625 -0.719561,-1.476493 -0.327589,-0.995188 -0.675838,-1.725378 -0.939152,-1.969171 -0.119643,-0.110772 -0.525586,-0.393314 -0.902097,-0.627871 -0.826663,-0.514991 -1.147484,-0.841052 -1.147484,-1.166227 0,-0.379447 0.221344,-0.703128 0.841524,-1.230595 0.611703,-0.520258 0.765537,-0.728438 0.765537,-1.035987 0,-0.241726 -0.232168,-0.583559 -0.526228,-0.774796 l -0.232826,-0.151414 0.129503,-0.219493 c 0.102855,-0.17 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5604"
+         d="m 24.230234,35.561984 c -0.04165,-0.0667 -0.167082,-0.434852 -0.278731,-0.818123 -0.111649,-0.383271 -0.258678,-0.805998 -0.326732,-0.939393 l -0.123733,-0.242538 1.254814,0 c 0.690148,0 1.254814,0.02413 1.254814,0.05363 0,0.05571 -0.28094,0.467668 -0.779905,1.143616 -0.159845,0.216541 -0.327296,0.482239 -0.372115,0.59044 -0.05128,0.123794 -0.15429,0.222108 -0.277857,0.265184 -0.256983,0.08958 -0.262109,0.08881 -0.350555,-0.05281 l 0,0 z"
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5606"
+         d="M 18.033801,39.357638 C 17.377213,38.860256 16.889705,38.232859 16.883972,37.877866 16.883195,37.829786 16.744979,37.63992 16.576825,37.455933 16.408671,37.271945 16.03985,36.721754 15.757224,36.233286 15.189309,35.25175 14.729645,34.722418 14.254347,34.502632 13.98526,34.3782 13.842291,34.365018 12.714985,34.360699 c -1.329615,-0.0051 -1.357573,-0.012 -1.35973,-0.335913 -0.0016,-0.247651 0.173415,-0.503735 0.426444,-0.623805 0.220818,-0.104785 0.425067,-0.111047 2.525917,-0. [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5608"
+         d="m 20.840889,46.911832 -0.183477,-0.310116 0.08029,-0.654121 c 0.08686,-0.707611 0.02854,-1.497669 -0.166913,-2.261181 -0.238292,-0.93085 -0.88144,-2.908789 -1.000177,-3.075945 l -0.130158,-0.183234 0.151335,0.04674 c 0.08323,0.02571 0.223652,0.08315 0.312041,0.127651 0.271499,0.136689 1.106714,0.29532 1.645726,0.312569 0.415477,0.0133 0.580772,0.05115 0.875891,0.200581 0.866647,0.438824 1.669753,1.20445 1.758253,1.676199 0.06376,0.339867 -0.198868,1.08946 -0.493749,1.40926 -0 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5610"
+         d="m 46.51175,45.324255 c -0.740476,-0.05646 -1.466124,-0.2732 -1.82246,-0.544351 -0.228793,-0.174098 -0.264099,-0.235435 -0.280728,-0.487704 -0.01577,-0.239286 0.0086,-0.314529 0.142863,-0.440643 0.20513,-0.19271 0.883619,-0.249841 1.584352,-0.133407 0.46625,0.07747 0.48743,0.0893 0.906151,0.505913 0.235809,0.234623 0.448807,0.506698 0.47333,0.604612 0.06356,0.253776 -0.0774,0.563734 -0.250976,0.551873 -0.07526,-0.0051 -0.413899,-0.03048 -0.752532,-0.05629 l 0,0 z"
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5614"
+         d="m 10.229574,52.334879 0,-0.961759 0.226787,-0.06296 c 0.710699,-0.197299 3.701138,-0.410335 6.002292,-0.427597 3.84908,-0.02887 7.284703,-0.0845 7.574877,-0.122645 0.537541,-0.07066 0.962438,-0.166836 1.45602,-0.329568 0.981671,-0.323652 1.283677,-0.347071 4.537701,-0.351877 2.657757,-0.0039 3.211433,0.01288 4.483634,0.136054 1.177395,0.114 1.679803,0.133212 2.660966,0.101758 0.66524,-0.02133 2.420571,-0.06817 3.900733,-0.104087 1.480162,-0.03592 3.575673,-0.108425 4.65669,-0 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <path
+       style="fill:none;fill-opacity:1;stroke:#2b2b2c;stroke-width:0.57099999999999995;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 60,51.300138 -12.314168,-0.25713 -0.128565,10.776012 -42.5384548,0 0,-59.2887954 54.9811858,0 0,48.6413484 -12.314166,10.647447"
+       id="rect5379-7"
+       sodipodi:nodetypes="cccccccs" />
+    <text
+       xml:space="preserve"
+       style="font-size:22.55941390999999996px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#0000ad;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="10.299904"
+       y="25.461548"
+       id="text5099"
+       transform="scale(0.97088284,1.0299904)"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2837"
+         x="10.299904"
+         y="25.461548">KML</tspan></text>
+    <rect
+       style="fill:#0100d4;fill-opacity:1;stroke:#000000;stroke-width:0.43404418000000000;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3650"
+       width="55.136364"
+       height="2.4505296"
+       x="4.931819"
+       y="2.7349412" />
+    <path
+       style="fill:#d6d6ce;fill-opacity:1;stroke:none"
+       d="m 47.826131,51.255752 10.631091,0.130176 -10.631091,10.255519 0,-10.385695 z"
+       id="rect3652"
+       sodipodi:nodetypes="cccc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/LLMATRIX.xpm b/share/metview/icons_mv5/LLMATRIX.xpm
new file mode 100644
index 0000000..16339ca
--- /dev/null
+++ b/share/metview/icons_mv5/LLMATRIX.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char * LLMATRIX_icon[] = {
+"32 32 3 1",
+" 	c #00000000FFFF",
+".	c #FFFFFFFFFFFF",
+"X	c #000000000000",
+"                                ",
+" ......X....X.. ....... X...... ",
+" ......X....X.. ....... X...... ",
+" ......X....X.. ....... X...... ",
+" .....X ....X.. ....... .X.....X",
+" .....X .....X. ....... .X.....X",
+" .....X .....X. ....... ..XX.XX ",
+" .....X .....X. ....... ....X.. ",
+" .....X .....X. ....... ....... ",
+" ......X......X ....... ....... ",
+" ......X......X ....... ....... ",
+"                                ",
+" ......X.......X....... ....... ",
+" ......X....... X...... ....... ",
+" ...... X...... .X..... ....... ",
+" ...... X...... ..X.... ....... ",
+" ...... .X..... ...XX.. ....... ",
+" ...... .X..... .....XX ....... ",
+" ...... ..X.... ....... XXX...XX",
+" ...... ..X.... ....... ...XXX. ",
+" ...... ...X... ....... ....... ",
+"                                ",
+" ...... ....X.. ....... ....... ",
+" ...... .....X. ....... ....... ",
+" ...... ......XX....... ....... ",
+" ...... ....... X...... ....... ",
+" ...... ....... .XX.... ....... ",
+" ...... ....... ...XX.. ....... ",
+" ...... ....... .....XX ....... ",
+" ...... ....... ....... XXXX... ",
+" ...... ....... ....... ....XXXX",
+"                                "};
diff --git a/share/metview/icons_mv5/MACRO.svg b/share/metview/icons_mv5/MACRO.svg
new file mode 100644
index 0000000..02c0b57
--- /dev/null
+++ b/share/metview/icons_mv5/MACRO.svg
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg2160"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="macro.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/tmp/cgr/work/icons/metview/macro.png"
+   inkscape:export-xdpi="45"
+   inkscape:export-ydpi="45"
+   version="1.1">
+  <defs
+     id="defs2162">
+    <linearGradient
+       id="linearGradient3143">
+      <stop
+         style="stop-color:#ec6a4e;stop-opacity:1"
+         offset="0"
+         id="stop3145" />
+      <stop
+         style="stop-color:#f1a394;stop-opacity:1"
+         offset="1"
+         id="stop3147" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3143"
+       id="linearGradient3152"
+       x1="12.037533"
+       y1="15.457104"
+       x2="50.160858"
+       y2="45.912868"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0026322,0,0,0.7350282,-8.4226285e-2,8.0357927)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.65625"
+     inkscape:cx="32"
+     inkscape:cy="33.418031"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1166"
+     inkscape:window-height="956"
+     inkscape:window-x="2072"
+     inkscape:window-y="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="bg">
+    <path
+       style="fill:url(#linearGradient3152);fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:0.94039041px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 2.4701952,49.529805 L 61.529803,49.529805 L 61.529803,12.470196 L 18.674981,12.619931 L 2.4701952,24.598794 L 2.4701952,49.529805 z "
+       id="path2169"
+       sodipodi:nodetypes="cccccc" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="holes"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3151"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,6.5395477,15.213011)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3156"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,6.5395477,23.773008)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3158"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,25.486737,23.773008)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3160"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,6.5395477,32.333006)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3162"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,36.456161,15.213011)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3164"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,45.431144,15.213011)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3166"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,25.486737,32.333006)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3168"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,25.486737,7.9427495)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3170"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,16.054581,23.773008)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3172"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,25.486737,15.213011)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3174"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,36.456161,32.333006)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3176"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,45.431144,23.773008)" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/MACROPARAM.xpm b/share/metview/icons_mv5/MACROPARAM.xpm
new file mode 100644
index 0000000..5318617
--- /dev/null
+++ b/share/metview/icons_mv5/MACROPARAM.xpm
@@ -0,0 +1,44 @@
+/* XPM */
+static char * MACROPARAM_icon[] = {
+"32 32 9 1",
+" 	c #FFFFFFFFFFFF",
+".	c #000000000000",
+"X	c #DADA0000FFFF",
+"o	c #FFFFFFFF0000",
+"O	c #D9D9B7B77777",
+"+	c #FFFFE2E2ABAB",
+"@	c #FFFF4F4F0000",
+"#	c #FFFFFFFFCCCC",
+"$	c #B8B8F0F0B9B9",
+"                                ",
+"                            ... ",
+"                           .XX. ",
+"                          .o.X. ",
+"                         .oO..  ",
+"                        .oO..   ",
+"                    ....oO..    ",
+"                   .+O.oO..     ",
+"                  .+O.oO..      ",
+"                 .+O.oO..O.     ",
+"                .+O.oO..OO+.    ",
+"               .+O.oO...O+++.   ",
+"               .O.oO.. . at ++++...",
+"     ............o.....#+++++O..",
+"    .$$$$$$$$$$.o.#++++++++++O..",
+"   .$$$$$$$$$$$.O...OOO++++++O..",
+"  .$$$$$$$$$$$$........OOOO++O..",
+" .$$$$$$$$$$$$.$$$$$$$$....OOO..",
+".$$$.$$$$$$$.$$$$$$$$$$$$$......",
+".$$$$$$$$$$$$$$.$$$$$$$$$$.   ..",
+".$$$$$$$$$$$$$$$$$$$$$$$$$.     ",
+".$$$$$$$$$$$$$$$$$$$$$$$$$.     ",
+".$$$.$$$.$$$.$$$$$$$.$$$.$.     ",
+".$$$$$$$$$$$$$$$$$$$$$$$$$.     ",
+".$$$$$$.$$$$$$$$$$$$$$$$$$.     ",
+".$$$$$$$$$$$$$$$$$$$$$$$$$.     ",
+".$$$.$$$$$$$$$$$.$$$$$$$.$.     ",
+".$$$$$$$$$$$$$$$$$$$$$$$$$.     ",
+"...........................     ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/share/metview/icons_mv5/MAGML.xpm b/share/metview/icons_mv5/MAGML.xpm
new file mode 100755
index 0000000..695ecbe
--- /dev/null
+++ b/share/metview/icons_mv5/MAGML.xpm
@@ -0,0 +1,268 @@
+/* XPM */
+static char *MAGML[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 230 2",
+"   c gray20",
+".  c #343434",
+"X  c gray22",
+"o  c #393939",
+"O  c #3C3C3C",
+"+  c gray24",
+"@  c gray25",
+"#  c gray26",
+"$  c #434343",
+"%  c #444444",
+"&  c #464646",
+"*  c gray28",
+"=  c #494949",
+"-  c #4C4C4C",
+";  c gray30",
+":  c #4E4E4E",
+">  c #505050",
+",  c gray32",
+"<  c #535353",
+"1  c gray33",
+"2  c #555555",
+"3  c #565656",
+"4  c #585858",
+"5  c gray35",
+"6  c #5A5A5A",
+"7  c #5B5B5B",
+"8  c gray36",
+"9  c #5D5D5D",
+"0  c gray37",
+"q  c #5F5F5F",
+"w  c #626262",
+"e  c gray39",
+"r  c #646464",
+"t  c #656565",
+"y  c gray40",
+"u  c #676767",
+"i  c #686868",
+"p  c DimGray",
+"a  c #6A6A6A",
+"s  c gray42",
+"d  c #6C6C6C",
+"f  c #6F6F6F",
+"g  c gray44",
+"h  c #717171",
+"j  c #747474",
+"k  c gray46",
+"l  c #767676",
+"z  c #777777",
+"x  c #797979",
+"c  c gray49",
+"v  c #7F7F7F",
+"b  c #B31200",
+"n  c #B41605",
+"m  c #B51907",
+"M  c #B71E0F",
+"N  c #BA2518",
+"B  c #BA2D1D",
+"V  c #BB2E1E",
+"C  c #BD2D22",
+"Z  c #BC3122",
+"A  c #BC3324",
+"S  c #BF382B",
+"D  c #C0342B",
+"F  c #C23C35",
+"G  c #C24034",
+"H  c #C5473D",
+"J  c #C84D45",
+"K  c #C8504A",
+"L  c #C9544E",
+"P  c #D26A69",
+"I  c #D26B6A",
+"U  c #D26F6A",
+"Y  c #D4716F",
+"T  c #D77477",
+"R  c #D77E7B",
+"E  c #D87F7D",
+"W  c #D87D7E",
+"Q  c #D87B80",
+"!  c #808080",
+"~  c #818181",
+"^  c gray51",
+"/  c #838383",
+"(  c #848484",
+")  c gray52",
+"_  c gray53",
+"`  c #888888",
+"'  c #898989",
+"]  c gray54",
+"[  c #8B8B8B",
+"{  c #8E8E8E",
+"}  c #909090",
+"|  c gray57",
+" . c gray58",
+".. c #959595",
+"X. c gray59",
+"o. c #979797",
+"O. c #989898",
+"+. c #9A9A9A",
+"@. c #9B9B9B",
+"#. c #9D9D9D",
+"$. c #9F9F9F",
+"%. c gray63",
+"&. c #A2A2A2",
+"*. c gray64",
+"=. c #A4A4A4",
+"-. c #A5A5A5",
+";. c gray65",
+":. c #A7A7A7",
+">. c gray66",
+",. c #AAAAAA",
+"<. c #ACACAC",
+"1. c gray68",
+"2. c #AEAEAE",
+"3. c gray69",
+"4. c #B2B2B2",
+"5. c #B4B4B4",
+"6. c gray71",
+"7. c #B6B6B6",
+"8. c #B7B7B7",
+"9. c gray72",
+"0. c #B9B9B9",
+"q. c gray73",
+"w. c #BBBBBB",
+"e. c #BCBCBC",
+"r. c gray74",
+"t. c gray",
+"y. c gray75",
+"u. c #D98482",
+"i. c #DB8188",
+"p. c #DC8889",
+"a. c #DC8C89",
+"s. c #DD8C8D",
+"d. c #DD8C90",
+"f. c #DE8D91",
+"g. c #E1919A",
+"h. c #E2969D",
+"j. c #E29E9D",
+"k. c #E399A1",
+"l. c #DEB3AE",
+"z. c #E4A2A4",
+"x. c #E5A1A8",
+"c. c #E5A3A9",
+"v. c #E6A0AB",
+"b. c #E5A4A9",
+"n. c #E5A6A8",
+"m. c #E0B2AD",
+"M. c #E1B3AE",
+"N. c #E2B4AF",
+"B. c #E8ABB2",
+"V. c #E9ABB4",
+"C. c #E3B5B0",
+"Z. c #E4B6B1",
+"A. c #E5B7B2",
+"S. c #E6B9B4",
+"D. c #E7BBB7",
+"F. c #E9B4B8",
+"G. c #E8BDBA",
+"H. c #E9C1BE",
+"J. c #EDBAC2",
+"K. c #C0C0C0",
+"L. c #C1C1C1",
+"P. c gray76",
+"I. c gray77",
+"U. c #C5C5C5",
+"Y. c gray78",
+"T. c #C8C8C8",
+"R. c #CACACA",
+"E. c #CBCBCB",
+"W. c gray80",
+"Q. c gray81",
+"!. c #D0D0D0",
+"~. c gray82",
+"^. c #D2D2D2",
+"/. c #D5D5D5",
+"(. c gray84",
+"). c #D7D7D7",
+"_. c #D8D8D8",
+"`. c gray85",
+"'. c #DADADA",
+"]. c gray86",
+"[. c gainsboro",
+"{. c #DDDDDD",
+"}. c gray87",
+"|. c #DFDFDF",
+" X c #EBC4C1",
+".X c #EDC7C5",
+"XX c #EEC9C8",
+"oX c #EFCCCB",
+"OX c #F0CECE",
+"+X c #EFCDD3",
+"@X c #F1D0D1",
+"#X c #F1D3D8",
+"$X c #F3D7D9",
+"%X c #F4D8D9",
+"&X c #F4D9DB",
+"*X c #F4DADB",
+"=X c #F5DBDE",
+"-X c #F6DDE1",
+";X c gray88",
+":X c #E1E1E1",
+">X c #E2E2E2",
+",X c gray89",
+"<X c #E4E4E4",
+"1X c gray90",
+"2X c #E6E6E6",
+"3X c #E7E7E7",
+"4X c gray91",
+"5X c #E9E9E9",
+"6X c #EAEAEA",
+"7X c gray92",
+"8X c #ECECEC",
+"9X c gray93",
+"0X c #EEEEEE",
+"qX c #EFEFEF",
+"wX c #F7EDEF",
+"eX c gray94",
+"rX c #F1F1F1",
+"tX c gray95",
+"yX c #F3F3F3",
+"uX c #F4F4F4",
+"iX c gray96",
+"pX c #F6F6F6",
+"aX c gray97",
+"sX c #F8F8F8",
+"dX c #F9F9F9",
+"fX c gray98",
+"gX c #FBFBFB",
+"hX c gray99",
+"jX c #FDFDFD",
+"kX c gray100",
+/* pixels */
+"kX6X3X3X2X2X2X1X1X1X1X<X<X<X,X,X,X>X>X>X>X:X:X:X;X;X;X;X;X~.kXkX",
+"kX3X#XV.k.h.i.Q T p.I E U L J H G S Z V V V V V V V B B A :XkXkX",
+"kX3X+XJ.B.c.F.f.z.s.j.u.R F D C N M n b b b b b b b b b m :XkXkX",
+"kX2X+Xv.g.x.b.d.n.W P Y a.K D C N M n b b b b b b b b b m :XkXkX",
+"kX2XwX-X=X&X$X%X*X at XOXoXXX.X XH.G.D.S.A.Z.Z.C.N.N.M.M.m.l.;XkXkX",
+"kX2XsX3X;X{.5X}.}.pXdX].2X2X,X`.[.8X2XaXaXpXiXuXyXtXrXrX8X;XkXkX",
+"kX1XdX>X}.4X>X`.|.>X`.6X4X<X|.9XdXdXsXaXpXiXuXuXyXtXrXeX5X;XkXkX",
+"kX1XtX`.5XkXkXkXjX`.,XjXhXhXgXfXdXsXaXpXpXiXuXyXtXrXrX0X4X;XkXkX",
+"kX1X/.  2 iXtXeXe.  i uX9XeX9XuXeX,XuX8X7X5X0X0X<X7X0X6X5X;XkXkX",
+"kX1X/.o 4 R.sXqXk w s 8XsX7X}.'.qX4X6X6XtX5X~.1X|.:X7X5X6X;XkXkX",
+"kX<X/.o $.) hX2X% $.d rXpX7 3 < # w.1X0Xy.@ : = j c <X6X7X;XkXkX",
+"kX<X(.o 3X& pX*.! >.i 0XrX{.yX3X>.> 7X2X; X.1X].% v 7X7X8X;XkXkX",
+"kX<X(.o rXg 9.0 W.>.u 9XtX).,.^ j . }.^.. {.0X>Xh x <X8X9X;XkXkX",
+"kX,X(.X tX6.5 , tX&.i tX9X* { 8.r.  {.Q.X ,X4XqX( v 9X9X9X;XkXkX",
+"kX,X(.o kXhXw <.jX,.d fXK.9 sXaX0.  3XqXO L.eX0X2 v 0X0X0X;XkXkX",
+"kX,X(.X sXdXtXtXeX%.d fX4XO :.=.e . 3XyX at .@ ' q 5 ! qXqXqX;XkXkX",
+"kX>X5XX.uXsXrXrX0XE.,.pXyXI._ | ).} _.:X(.4...t.f [ 7XeXeX;XkXkX",
+"kX>XfXtXyXpXqXuXsXh 8 W.0X8XtXQ.6 r 2X6X .f [.5.+ P.1X0XrX;XkXkX",
+"kX>XdX}.0X7XuX7X8Xt 9 ' 5X}.;X .7 5 ,X3X~ - $ > #.;X|.qXtX;XkXkX",
+"kX>XdXrXtXtXtXtXtXt o.3 8XtXrXq O.5 tXtX%.a tXrXeXtXtXtXtX;XkXkX",
+"kX:XfX_.:X2X0X3X2Xw -.j 6.yXU.y t.5 yXyX&.a yXyXyXyXyXyXyX;XkXkX",
+"kX:XfXuXuXuXuXyXuXt 1.7.z uX` =.y.5 uXuX&.a uXuXuXuXuXuXuX;XkXkX",
+"kX:XfX{.).;X].2X3Xw %.~.2 U.1 {.3.4 8X9XO.t }.;X`.>X<X8X8X'.kXkX",
+"kX;XgX).<X5X;X:X,Xt $.,X/ p k 1Xq.5 :X9Xo.w /.~.!.[.}.}.[.8.kXkX",
+"kX;XhX7X5X;X,XqX5Xr ;.6XP.8 2.1X7.5 6X,X+.t 3X7X7XuXkXjX!.jXkXkX",
+"kX;XhX`.tXyX4X2X5Xr 2.iXaXpXaXaXL.5 aXaX=.8 e.e.r.r.[.Q.jXkXkXkX",
+"kX;XhXsXsXsXsXsXsX] L.sXsXsXsXsXQ.~ sXsX0.f l l l l $.jXkXkXkXkX",
+"kX;XhX/.(.3XrX5X9XsXsXsXsXsXsXsXsXsXsXsXsX(.9X7X7XE.jXkXkXkXkXkX",
+"kX;XhXaXsXsXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdX(.4X1XT.jXkXkXkXkXkXkX",
+"kX;XhXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdX).,XU.jXkXkXkXkXkXkXkX",
+"kX;XjXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX/.I.jXkXkXkXkXkXkXkXkX",
+"kX5X|.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.Y.gXkXkXkXkXkXkXkXkXkX"
+};
diff --git a/share/metview/icons_mv5/MAPVIEW.xpm b/share/metview/icons_mv5/MAPVIEW.xpm
new file mode 100644
index 0000000..ac3963e
--- /dev/null
+++ b/share/metview/icons_mv5/MAPVIEW.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char * MAPVIEW_xpm[] = {
+"32 32 6 1",
+" 	c None",
+".	c #989898",
+"+	c #FFFFFF",
+"@	c #BEBEBE",
+"#	c #EBFAFF",
+"$	c #B9E3B5",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++#####$$$############$#++ at +.",
+".+ at ++######$$$##########$$$++ at +.",
+".+ at ++#######$$$#########$$$++ at +.",
+".+ at ++##$$$###$$$########$$$++ at +.",
+".+ at ++#$$$$###$$$#######$$$$++ at +.",
+".+ at ++#$$$$##$$$$$$##$#$$$$$++ at +.",
+".+ at ++#$#####$$$$$##$$$$$$$$++ at +.",
+".+ at ++######$$####$$$$$$$$$$++ at +.",
+".+ at ++###########$$$$$$$$$$$++ at +.",
+".+ at ++#########$$$$$$$$$$$$$++ at +.",
+".+ at ++#######$$$$$$$$$$$$$$$++ at +.",
+".+ at ++#########$$$$$$$$$$$$$++ at +.",
+".+ at ++#########$$$$$$$$$$$$$++ at +.",
+".+ at ++########$$$$$$$$$$$$$$++ at +.",
+".+ at ++###$$$$$$$$$$$$$$$$#$$++ at +.",
+".+ at ++##$$$$$$$$$$$$$$$#####++ at +.",
+".+ at ++#$$$$$$$$$$$$######$##++ at +.",
+".+ at ++#$$$$$$$$$$$##########++ at +.",
+".+ at ++#$$$$$$$$$$########$##++ at +.",
+".+ at ++#$$$$$$$$$$##$########++ at +.",
+".+ at ++##$$$$$$$$###$$$$$$$$#++ at +.",
+".+ at ++###$$$$$$###$$$$$$$$$#++ at +.",
+".+ at ++#####$####$$$$$$$$$$$#++ at +.",
+".+ at ++###$$$$$$$$$$$$$$$$$$#++ at +.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".++++++++++++++++++++++++++++++.",
+"................................"};
diff --git a/share/metview/icons/MAVERAGEVIEW.xpm b/share/metview/icons_mv5/MAVERAGEVIEW.xpm
similarity index 100%
copy from share/metview/icons/MAVERAGEVIEW.xpm
copy to share/metview/icons_mv5/MAVERAGEVIEW.xpm
diff --git a/share/metview/icons/PAXIS.xpm b/share/metview/icons_mv5/MAXIS.xpm
similarity index 100%
copy from share/metview/icons/PAXIS.xpm
copy to share/metview/icons_mv5/MAXIS.xpm
diff --git a/share/metview/icons_mv5/MCOAST.svg b/share/metview/icons_mv5/MCOAST.svg
new file mode 100644
index 0000000..534620b
--- /dev/null
+++ b/share/metview/icons_mv5/MCOAST.svg
@@ -0,0 +1,305 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="MCOAST.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.15625"
+     inkscape:cx="4.7027759"
+     inkscape:cy="20.373308"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1179"
+     inkscape:window-x="1916"
+     inkscape:window-y="-4"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="1"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3869">
+      <stop
+         style="stop-color:#fffa02;stop-opacity:1;"
+         offset="0"
+         id="stop3871" />
+      <stop
+         style="stop-color:#dddb31;stop-opacity:1;"
+         offset="1"
+         id="stop3873" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3869"
+       id="linearGradient3875"
+       x1="19.671978"
+       y1="7.6915169"
+       x2="22.446272"
+       y2="10.200515"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.29895327,7.792246)" />
+    <linearGradient
+       y2="11.078368"
+       x2="22.297274"
+       y1="8.1580601"
+       x1="7.6711636"
+       gradientTransform="translate(-1.1496607,7.5109628)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4175-46"
+       xlink:href="#linearGradient3889-7-1-2-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3889-7-1-2-9">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-7-1-5-2" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-5-0-8-24" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3889-8-5-7"
+       id="linearGradient4197-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.47134263,7.7987819)"
+       x1="8.2786636"
+       y1="12.442157"
+       x2="29.438562"
+       y2="12.071977" />
+    <linearGradient
+       id="linearGradient3889-8-5-7">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-0-0-5" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-2-6-4" />
+    </linearGradient>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline">
+    <path
+       style="fill:#ffffcc;fill-opacity:1;stroke:#bbc7be;stroke-width:0.89999998000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="m 4.5449877,0.41131106 27.0025713,0 0,31.15167094 -31.13624794,0 L 0.45244217,4.4293064 4.5449877,0.41131106 z"
+       id="rect2911"
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffb000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="M 4.5512958,0.13221218 4.54329,4.7628311 -0.02205053,4.7234594 4.5512958,0.13221218 z"
+       id="path4199"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer17"
+     inkscape:label="wmo"
+     style="display:inline">
+    <path
+       style="fill:none;stroke:#18109b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 5.0135397,19.249516 -1.1866872,0.924165 0.8153139,1.923031 1.4854932,0 1.4854932,-0.866538 2.2901354,-0.433269 1.2998068,-0.680851 -0.595524,-2.716261 0.162255,-1.925905 L 12.069633,14.05029 11.017408,12.317215 9.3462282,11.698259 7.3655706,11.945838 7.0560928,13.493226 5.941973,13.8646 4.5183753,14.050286 4.2707935,15.969048 5.1992268,17.454541 c -0.6559394,0.458641 0.1950676,1.118076 -0.1856871,1.794975 z"
+       id="path3829"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccccccccc" />
+    <path
+       style="fill:none;stroke:#18109b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 12.688588,25.129594 -2.166346,1.980657 1.918763,-0.495166 1.609285,-0.742749 2.166344,0.742747 1.176015,-1.733075 2.340717,0.34241 1.620599,-0.713784 6.622824,-1.980657 -0.354174,-5.154029 -0.69805,-1.592587 L 20.611219,12.564797 19.311412,10.831721 18.692456,9.5319149 17.145068,9.7794971 18.135396,7.860735 C 19.806592,6.7092815 18.771647,5.7825219 19.249517,4.0232108 18.474014,3.5813956 15.845261,4.4564797 15.845261,4.4564797 15.398181,3.4883045 15.679407,3.274652 16.27853,2 [...]
+       id="path3831"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccc" />
+    <path
+       style="fill:none;stroke:#18109b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 19.249517,31.44294 -0.680852,-1.733075 0.247583,-1.052225 1.980657,0.55706 2.413927,0.123791 0.804642,-0.990329 1.980658,-2.970986 1.237911,-1.609284 2.475822,-0.433269"
+       id="path3833"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer13"
+     inkscape:label="pencil"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3875);fill-opacity:1;stroke:#030000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 26.148348,9.355228 14.302589,20.830806 12.904131,24.28582 16.523669,22.84623 28.122641,11.329521 c 0,0 -0.401184,-0.894757 -0.74036,-1.233933 -0.339176,-0.339176 -1.233933,-0.74036 -1.233933,-0.74036 z"
+       id="path3867"
+       sodipodi:nodetypes="cccccsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#6c5353;fill-opacity:1;stroke:none"
+       d="m 27.793593,11.198287 -11.600494,11.565681 -0.533183,-0.587254 11.635949,-11.752077 0.497728,0.77365 z"
+       id="path3877"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#c8a656;fill-opacity:1;stroke:none"
+       d="m 14.549376,21.118724 -0.781491,2.262211 2.385605,-0.699229 -1.604114,-1.562982 z"
+       id="path3883"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 14.179196,20.830806 0,0 z"
+       id="path3885"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#050505;fill-opacity:1;stroke:none"
+       d="m 13.973938,22.229264 -0.411311,1.48072 1.357326,-0.452442 -0.946015,-1.028278 z"
+       id="path3887"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="hand"
+     style="display:inline">
+    <rect
+       style="opacity:0.53603599;fill:none;stroke:none;display:inline"
+       id="rect2939"
+       width="2.2622108"
+       height="7.7326479"
+       x="28.70981"
+       y="19.224838" />
+    <path
+       style="fill:url(#linearGradient4197-7);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 22.076897,17.539428 -0.01309,1.314107 c 0,0 -0.279375,0.695239 -0.498394,0.842143 -0.583486,0.391362 -1.682438,0.804466 -1.682438,0.804466 l -1.190713,-10e-7 c -0.520389,-0.02751 0.340234,-0.122332 -1.842144,-0.110299 l -0.542738,0.447381 c -0.176833,0.145764 -0.193333,0.469266 -0.123393,0.6875 0.08204,0.255999 0.596717,0.743084 0.596717,0.743084 0.01713,0.213098 1.145554,0.158656 1.615606,0.258523 l 1.113512,-0.06997 0.866726,0.176814 1.00482,0.516549 1.021369,0.5625 0.78125 [...]
+       id="path3960-0-4"
+       sodipodi:nodetypes="ccscccssccccccccssccccsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient4175-46);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 20.856323,13.097207 c 0,0 -0.864273,-0.248926 -1.443927,0.04434 -0.70956,0.358986 -2.635122,2.190954 -2.635122,2.190954 l -1.389702,1.256427 c 0,0 -1.104461,0.780354 -1.329048,1.292738 -0.140325,0.320144 -0.692423,1.042346 -0.434287,1.278035 0,0 0.242673,0.235308 0.772976,0.309047 0.530303,0.07374 1.389701,-0.638095 1.389701,-0.638095 l 1.53125,-1.374999 1.269762,-0.741726 0.491726,-0.355239 0.278036,-0.217142 2.443099,-2.642618 C 21.018619,13.13548 20.856323,13.097207 20.856 [...]
+       id="path3983-4"
+       sodipodi:nodetypes="csccscsccccccc"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:#0d0b06;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       id="rect4212"
+       width="2.2210789"
+       height="7.4035988"
+       x="28.750942"
+       y="19.553888" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.09999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 18.132272,20.958997 -0.110147,1.037779 -0.734318,-0.01777 c 0,0 -0.389617,-0.174751 -0.477307,-0.328567 -0.07209,-0.126452 0,-0.418174 0,-0.418174 0,-0.155527 0.200218,-0.282651 0.367159,-0.358436 0.07557,-0.0343 0.25701,-0.02987 0.25701,-0.02987 l 0.697603,0.115036 z"
+       id="path4268"
+       sodipodi:nodetypes="cccssscc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;fill-opacity:1;stroke:none;display:inline"
+       d="m 28.545287,24.818666 0,-1.686372 -2.467866,0.04113 -1.398458,-0.452442 c 0,0 -0.964908,-0.709613 -1.521851,-0.904884 -0.470245,-0.164874 -1.033801,-0.288768 -1.562982,-0.37018 l -1.069409,-0.164524 -0.987146,0 -1.316196,0.04113 0.08226,0.658097 0.946016,0.08226 0.987147,0.04113 1.028277,0.493573 c 0,0 0.584391,0.442159 0.904885,0.616967 0.339801,0.185339 1.069408,0.452442 1.069408,0.452442 l 1.231113,0.745142 c 0.388462,0.23512 0.810343,0.414981 1.236754,0.571053 0.387323,0.14 [...]
+       id="path4270"
+       sodipodi:nodetypes="ccccsscccccccscsscsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 14.766366,19.22484 c -0.287918,-0.109683 -0.575835,-0.219366 -0.863753,-0.329049 0.594291,-0.536642 1.20232,-1.058563 1.766868,-1.627073 0.444514,-0.42915 0.918257,-0.706724 1.394946,-1.100871 0.281295,-0.253216 0.653857,-0.536296 0.965672,-0.751322 0.400107,-0.287782 0.660647,-0.723125 1.092134,-0.964017 0.186134,-0.106708 0.365481,-0.235485 0.555742,-0.328776 0.268538,-0.01343 0.66047,0.01428 0.929008,8.5e-4 0.06855,0.08226 0.01371,0 0.08226,0.08226 -0.67532,0.662346 -1.139 [...]
+       id="path4274"
+       sodipodi:nodetypes="cccsssccccsscc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 22.745803,17.373939 0.658096,-0.699228 c 0,0 0.02532,1.169685 -0.123393,1.727506 -0.113731,0.426608 -0.575836,1.192802 -0.575836,1.192802 l -1.110539,0.575836 c 0,0 0.682272,-0.768009 0.822621,-1.275065 0.140349,-0.507056 -0.08226,-1.11054 -0.08226,-1.11054 l 0.411311,-0.411311 z"
+       id="path3659-8"
+       sodipodi:nodetypes="ccscczcc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="top frame">
+    <path
+       style="fill:none;stroke:#ffb000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+       d="m 4.4915743,0.46375148 27.0025707,0 0,31.15167152 -31.13624765,0 0.04113,-27.1336762 4.09254595,-4.01799532 z"
+       id="rect2911-2"
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/MCONT.svg b/share/metview/icons_mv5/MCONT.svg
new file mode 100644
index 0000000..f83c2d6
--- /dev/null
+++ b/share/metview/icons_mv5/MCONT.svg
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="MCONT.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.15625"
+     inkscape:cx="10.709474"
+     inkscape:cy="13.505245"
+     inkscape:current-layer="layer17"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1179"
+     inkscape:window-x="1916"
+     inkscape:window-y="-4"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="1"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3869">
+      <stop
+         style="stop-color:#fffa02;stop-opacity:1;"
+         offset="0"
+         id="stop3871" />
+      <stop
+         style="stop-color:#dddb31;stop-opacity:1;"
+         offset="1"
+         id="stop3873" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3869"
+       id="linearGradient3875"
+       x1="19.671978"
+       y1="7.6915169"
+       x2="22.446272"
+       y2="10.200515"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.18568665,4.6421663)" />
+    <linearGradient
+       y2="11.078368"
+       x2="22.297274"
+       y1="8.1580601"
+       x1="7.6711636"
+       gradientTransform="translate(-1.0363941,4.3608831)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4175-46"
+       xlink:href="#linearGradient3889-7-1-2-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3889-7-1-2-9">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-7-1-5-2" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-5-0-8-24" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3889-8-5-7"
+       id="linearGradient4197-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.35807601,4.6487022)"
+       x1="8.2786636"
+       y1="12.442157"
+       x2="29.438562"
+       y2="12.071977" />
+    <linearGradient
+       id="linearGradient3889-8-5-7">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-0-0-5" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-2-6-4" />
+    </linearGradient>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline">
+    <path
+       style="fill:#dddddd;fill-opacity:1;stroke:#a2a2a2;stroke-width:0.89999998000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="m 4.5449877,0.41131106 27.0025713,0 0,31.15167094 -31.13624794,0 L 0.45244217,4.4293064 4.5449877,0.41131106 z"
+       id="rect2911"
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#a2a2a2;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="M 2.2778942,1.4589838 2.271022,6.1828486 -1.6478691,6.1426841 2.2778942,1.4589838 z"
+       id="path4199"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       transform="matrix(1.1649572,0,0,0.98026068,2.3928109,-0.98849455)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer17"
+     inkscape:label="wmo"
+     style="display:inline">
+    <path
+       style="fill:none;stroke:#2804d2;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 12.872457,31.606784 c 0,0 2.530407,-2.167454 3.280464,-3.610097 0.780426,-1.501054 1.324282,-3.272938 1.11412,-4.951646 -0.16964,-1.355027 -0.763201,-2.971451 -1.856867,-3.651837 -2.666146,-1.658647 -6.5833853,-0.794643 -9.222437,0.804643 -2.0248839,1.227096 -3.6209596,3.768682 -3.8221027,5.987053 -0.2011432,2.218371 1.0986985,5.216041 1.0986985,5.216041"
+       id="path3931-0-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="caasasc" />
+    <path
+       style="fill:none;stroke:#2804d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 26.829905,31.443704 c 0,0 1.934073,-3.204194 2.441021,-4.982935 0.713214,-2.502472 1.061256,-4.755755 0.777548,-7.767547 C 29.59807,13.911819 28.442145,10.236861 25.530097,7.4282326 23.33643,5.3124723 19.972142,4.4491429 16.926616,4.3334534 13.440333,4.201021 9.9841172,5.6116421 6.8376401,7.1187534 4.5447657,8.2170029 0.64808479,11.575235 0.64808479,11.575235"
+       id="path3931-9-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="casaaac" />
+    <path
+       style="fill:none;stroke:#2604d2;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 0.49516441,21.044488 c 0,0 0.52381959,-2.067826 3.03288199,-4.208898 1.5932672,-1.359591 4.4465125,-3.278894 7.0560926,-3.961315 1.636771,-0.428025 3.381836,-0.317117 5.075435,-1e-6 1.693599,0.317116 3.468339,1.12397 4.642167,2.413927 2.142791,2.354783 3.881036,5.654063 3.589942,8.851064 -0.12902,1.416988 -0.350597,2.190544 -0.839512,3.167189 -0.810486,1.61901 -3.369386,4.260276 -3.369386,4.260276"
+       id="path4072"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csazasac" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer13"
+     inkscape:label="pencil"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3875);fill-opacity:1;stroke:#030000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 26.261614,6.2051483 14.415855,17.680726 13.017397,21.13574 16.636935,19.69615 28.235907,8.1794413 c 0,0 -0.401184,-0.8947574 -0.74036,-1.2339332 C 27.156371,6.6063323 26.261614,6.2051483 26.261614,6.2051483 z"
+       id="path3867"
+       sodipodi:nodetypes="cccccsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#6c5353;fill-opacity:1;stroke:none"
+       d="M 27.906859,8.048207 16.306365,19.613888 15.773182,19.026634 27.409131,7.2745571 27.906859,8.048207 z"
+       id="path3877"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#c8a656;fill-opacity:1;stroke:none"
+       d="m 14.662642,17.968644 -0.781491,2.262211 2.385605,-0.699229 -1.604114,-1.562982 z"
+       id="path3883"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 14.292462,17.680726 0,0 z"
+       id="path3885"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#050505;fill-opacity:1;stroke:none"
+       d="m 13.963413,19.079184 -0.411311,1.48072 1.357326,-0.452442 -0.946015,-1.028278 z"
+       id="path3887"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="hand"
+     style="display:inline">
+    <rect
+       style="opacity:0.53603599;fill:none;stroke:none;display:inline"
+       id="rect2939"
+       width="2.2622108"
+       height="7.7326479"
+       x="28.823078"
+       y="16.074759" />
+    <path
+       style="fill:url(#linearGradient4197-7);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 22.190163,14.389349 -0.01309,1.314106 c 0,0 -0.279375,0.695239 -0.498394,0.842143 -0.583486,0.391362 -1.682438,0.804466 -1.682438,0.804466 l -1.190713,-1e-6 c -0.520389,-0.02751 0.340234,-0.122332 -1.842144,-0.110299 l -0.542738,0.447381 c -0.176833,0.145764 -0.193333,0.469266 -0.123393,0.6875 0.08204,0.255999 0.596717,0.743084 0.596717,0.743084 0.01713,0.213098 1.145554,0.158656 1.615606,0.258523 l 1.113512,-0.06997 0.866726,0.176814 1.00482,0.516549 1.021369,0.5625 0.78125, [...]
+       id="path3960-0-4"
+       sodipodi:nodetypes="ccscccssccccccccssccccsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient4175-46);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 20.969589,9.9471269 c 0,0 -0.864273,-0.2489256 -1.443927,0.044344 -0.70956,0.3589861 -2.635122,2.1909541 -2.635122,2.1909541 l -1.389702,1.256428 c 0,0 -1.104461,0.780354 -1.329048,1.292737 -0.140325,0.320144 -0.692423,1.042346 -0.434287,1.278035 0,0 0.242673,0.235308 0.772976,0.309047 0.530303,0.07374 1.389701,-0.638095 1.389701,-0.638095 l 1.53125,-1.374998 1.269762,-0.741726 0.491726,-0.355239 0.278036,-0.217143 2.443099,-2.642618 C 21.131885,9.9854001 20.969589,9.9471269  [...]
+       id="path3983-4"
+       sodipodi:nodetypes="csccscsccccccc"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:#0d0b06;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       id="rect4212"
+       width="2.2210789"
+       height="7.4035988"
+       x="28.86421"
+       y="16.403809" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.09999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 18.245538,17.808917 -0.110147,1.037779 -0.734318,-0.01777 c 0,0 -0.389617,-0.174751 -0.477307,-0.328567 -0.07209,-0.126452 0,-0.418174 0,-0.418174 0,-0.155527 0.200218,-0.282651 0.367159,-0.358436 0.07557,-0.0343 0.25701,-0.02987 0.25701,-0.02987 l 0.697603,0.115036 z"
+       id="path4268"
+       sodipodi:nodetypes="cccssscc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;fill-opacity:1;stroke:none;display:inline"
+       d="m 28.658553,21.668586 0,-1.686372 -2.467866,0.04113 -1.398458,-0.452442 c 0,0 -0.964908,-0.709613 -1.521851,-0.904884 -0.470245,-0.164874 -1.033801,-0.288768 -1.562982,-0.37018 l -1.069409,-0.164524 -0.987146,0 -1.316196,0.04113 0.08226,0.658097 0.946016,0.08226 0.987147,0.04113 1.028277,0.493573 c 0,0 0.584391,0.442159 0.904885,0.616967 0.339801,0.185339 1.069408,0.452442 1.069408,0.452442 l 1.231113,0.745142 c 0.388462,0.23512 0.810343,0.414981 1.236754,0.571053 0.387323,0.14 [...]
+       id="path4270"
+       sodipodi:nodetypes="ccccsscccccccscsscsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 14.879632,16.07476 c -0.287918,-0.109683 -0.575835,-0.219366 -0.863753,-0.329049 0.594291,-0.536642 1.20232,-1.058562 1.766868,-1.627072 0.444514,-0.42915 0.918257,-0.706724 1.394946,-1.100872 0.281295,-0.253216 0.653857,-0.536296 0.965672,-0.751322 0.400107,-0.287782 0.660647,-0.723125 1.092134,-0.964017 0.186134,-0.106708 0.365481,-0.235485 0.555742,-0.328776 0.268538,-0.01343 0.66047,0.01428 0.929008,8.5e-4 0.06855,0.08226 0.01371,0 0.08226,0.08226 -0.67532,0.662346 -1.139 [...]
+       id="path4274"
+       sodipodi:nodetypes="cccsssccccsscc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 22.859069,14.22386 0.658096,-0.699228 c 0,0 0.02532,1.169685 -0.123393,1.727505 -0.113731,0.426608 -0.575836,1.192802 -0.575836,1.192802 l -1.110539,0.575836 c 0,0 0.682272,-0.768009 0.822621,-1.275065 0.140349,-0.507056 -0.08226,-1.110539 -0.08226,-1.110539 l 0.411311,-0.411311 z"
+       id="path3659-8"
+       sodipodi:nodetypes="ccscczcc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="top frame">
+    <path
+       style="fill:none;stroke:#a2a2a2;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+       d="m 4.544988,0.45511225 27.002571,0 0,31.15167175 -31.136248,0 0.04113,-27.1336764 4.092546,-4.01799535 z"
+       id="rect2911-2"
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/MGRAPH.svg b/share/metview/icons_mv5/MGRAPH.svg
new file mode 100644
index 0000000..8b7ab08
--- /dev/null
+++ b/share/metview/icons_mv5/MGRAPH.svg
@@ -0,0 +1,315 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="MGRAPGH.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.65625"
+     inkscape:cx="16.239624"
+     inkscape:cy="16"
+     inkscape:current-layer="layer17"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="920"
+     inkscape:window-height="631"
+     inkscape:window-x="416"
+     inkscape:window-y="55"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849" />
+  </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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3869">
+      <stop
+         style="stop-color:#fffa02;stop-opacity:1;"
+         offset="0"
+         id="stop3871" />
+      <stop
+         style="stop-color:#dddb31;stop-opacity:1;"
+         offset="1"
+         id="stop3873" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3869"
+       id="linearGradient3875"
+       x1="19.671978"
+       y1="7.6915169"
+       x2="22.446272"
+       y2="10.200515"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.18763917,0.0461593)" />
+    <linearGradient
+       y2="11.078368"
+       x2="22.297274"
+       y1="8.1580601"
+       x1="7.6711636"
+       gradientTransform="translate(-1.0383466,-0.2351239)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4175-46"
+       xlink:href="#linearGradient3889-7-1-2-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3889-7-1-2-9">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-7-1-5-2" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-5-0-8-24" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3889-8-5-7"
+       id="linearGradient4197-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.36002853,0.0526952)"
+       x1="8.2786636"
+       y1="12.442157"
+       x2="29.438562"
+       y2="12.071977" />
+    <linearGradient
+       id="linearGradient3889-8-5-7">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-0-0-5" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-2-6-4" />
+    </linearGradient>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline">
+    <path
+       style="fill:#c3d5dd;fill-opacity:1;stroke:#ac5959;stroke-width:0.89999998000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="m 4.5449877,0.41131106 27.0025713,0 0,31.15167094 -31.13624794,0 L 0.45244217,4.4293064 4.5449877,0.41131106 z"
+       id="rect2911"
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#6c0df2;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="M 2.2778942,1.4589838 2.271022,6.1828486 -1.6478691,6.1426841 2.2778942,1.4589838 z"
+       id="path4199"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       transform="matrix(1.1649572,0,0,0.98026068,2.3928109,-0.98849455)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer17"
+     inkscape:label="wmo"
+     style="display:inline">
+    <path
+       style="fill:#800080;stroke:#6c0df2;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 4.4071857,6.1317365 4.5349302,29.572854"
+       id="path3038"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3808"
+       d="M 27.880239,27.688623 2.6506985,27.752495"
+       style="fill:#800080;stroke:#6c0df2;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#c227b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 5.0459082,17.884232 7.3453094,10.858283 9.5169661,8.1756487 11.0499,12.902196 l 1.40519,4.279441 1.724551,2.363273 2.363274,1.596807 1.98004,-2.427147 1.98004,-2.363273 2.938123,2.171657 0.766467,2.682635 1.852295,1.916168 1.149701,-1.596807"
+       id="path3810"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccc" />
+    <path
+       style="fill:none;stroke:#6c0df2;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 26.954092,26.443114 0,2.427145"
+       id="path3814"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3816"
+       d="m 5.6846305,7.3453092 -2.427145,0"
+       style="fill:none;stroke:#6c0df2;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer13"
+     inkscape:label="pencil"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3875);fill-opacity:1;stroke:#030000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 26.259661,1.6091413 14.413902,13.084719 13.015444,16.539733 16.634982,15.100143 28.233954,3.5834343 c 0,0 -0.401184,-0.8947574 -0.74036,-1.2339332 C 27.154418,2.0103253 26.259661,1.6091413 26.259661,1.6091413 z"
+       id="path3867"
+       sodipodi:nodetypes="cccccsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#6c5353;fill-opacity:1;stroke:none"
+       d="M 27.904906,3.4522 16.304412,15.017881 15.771229,14.430627 27.407178,2.6785501 27.904906,3.4522 z"
+       id="path3877"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#c8a656;fill-opacity:1;stroke:none"
+       d="m 14.660689,13.372637 -0.781491,2.262211 2.385605,-0.699229 -1.604114,-1.562982 z"
+       id="path3883"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 14.290509,13.084719 0,0 z"
+       id="path3885"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#050505;fill-opacity:1;stroke:none"
+       d="m 13.96146,14.483177 -0.411311,1.48072 1.357326,-0.452442 -0.946015,-1.028278 z"
+       id="path3887"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="hand"
+     style="display:inline">
+    <rect
+       style="opacity:0.53603599;fill:none;stroke:none;display:inline"
+       id="rect2939"
+       width="2.2622108"
+       height="7.7326479"
+       x="28.821125"
+       y="11.478751" />
+    <path
+       style="fill:url(#linearGradient4197-7);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 22.18821,9.793342 -0.01309,1.314106 c 0,0 -0.279375,0.695239 -0.498394,0.842143 -0.583486,0.391362 -1.682438,0.804466 -1.682438,0.804466 l -1.190713,-10e-7 c -0.520389,-0.02751 0.340234,-0.122332 -1.842144,-0.110299 l -0.542738,0.447381 c -0.176833,0.145764 -0.193333,0.469266 -0.123393,0.6875 0.08204,0.255999 0.596717,0.743084 0.596717,0.743084 0.01713,0.213098 1.145554,0.158656 1.615606,0.258523 l 1.113512,-0.06997 0.866726,0.176814 1.00482,0.516549 1.021369,0.5625 0.78125,0 [...]
+       id="path3960-0-4"
+       sodipodi:nodetypes="ccscccssccccccccssccccsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient4175-46);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 20.967636,5.3511199 c 0,0 -0.864273,-0.2489256 -1.443927,0.044344 C 18.814149,5.75445 16.888587,7.586418 16.888587,7.586418 l -1.389702,1.256428 c 0,0 -1.104461,0.780354 -1.329048,1.292737 -0.140325,0.320144 -0.692423,1.042346 -0.434287,1.278035 0,0 0.242673,0.235308 0.772976,0.309047 0.530303,0.07374 1.389701,-0.638095 1.389701,-0.638095 L 17.429477,9.709572 18.699239,8.967846 19.190965,8.612607 19.469001,8.395464 21.9121,5.752846 C 21.129932,5.3893931 20.967636,5.3511199 20 [...]
+       id="path3983-4"
+       sodipodi:nodetypes="csccscsccccccc"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:#0d0b06;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       id="rect4212"
+       width="2.2210789"
+       height="7.4035988"
+       x="28.862257"
+       y="11.807801" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.09999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 18.243585,13.21291 -0.110147,1.037779 -0.734318,-0.01777 c 0,0 -0.389617,-0.174751 -0.477307,-0.328567 -0.07209,-0.126452 0,-0.418174 0,-0.418174 0,-0.155527 0.200218,-0.282651 0.367159,-0.358436 0.07557,-0.0343 0.25701,-0.02987 0.25701,-0.02987 l 0.697603,0.115036 z"
+       id="path4268"
+       sodipodi:nodetypes="cccssscc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;fill-opacity:1;stroke:none;display:inline"
+       d="m 28.6566,17.072579 0,-1.686372 -2.467866,0.04113 -1.398458,-0.452442 c 0,0 -0.964908,-0.709613 -1.521851,-0.904884 -0.470245,-0.164874 -1.033801,-0.288768 -1.562982,-0.37018 l -1.069409,-0.164524 -0.987146,0 -1.316196,0.04113 0.08226,0.658097 0.946016,0.08226 0.987147,0.04113 1.028277,0.493573 c 0,0 0.584391,0.442159 0.904885,0.616967 0.339801,0.185339 1.069408,0.452442 1.069408,0.452442 l 1.231113,0.745142 c 0.388462,0.23512 0.810343,0.414981 1.236754,0.571053 0.387323,0.1417 [...]
+       id="path4270"
+       sodipodi:nodetypes="ccccsscccccccscsscsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 14.877679,11.478753 c -0.287918,-0.109683 -0.575835,-0.219366 -0.863753,-0.329049 0.594291,-0.536642 1.20232,-1.058562 1.766868,-1.627072 0.444514,-0.42915 0.918257,-0.706724 1.394946,-1.100872 0.281295,-0.253216 0.653857,-0.536296 0.965672,-0.751322 0.400107,-0.287782 0.660647,-0.723125 1.092134,-0.964017 0.186134,-0.106708 0.365481,-0.235485 0.555742,-0.328776 0.268538,-0.01343 0.66047,0.01428 0.929008,8.5e-4 0.06855,0.08226 0.01371,0 0.08226,0.08226 -0.67532,0.662346 -1.13 [...]
+       id="path4274"
+       sodipodi:nodetypes="cccsssccccsscc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 22.857116,9.627853 0.658096,-0.699228 c 0,0 0.02532,1.169685 -0.123393,1.727505 -0.113731,0.426608 -0.575836,1.192802 -0.575836,1.192802 l -1.110539,0.575836 c 0,0 0.682272,-0.768009 0.822621,-1.275065 0.140349,-0.507056 -0.08226,-1.110539 -0.08226,-1.110539 l 0.411311,-0.411311 z"
+       id="path3659-8"
+       sodipodi:nodetypes="ccscczcc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="top frame">
+    <path
+       style="fill:none;stroke:#6c0df2;stroke-width:0.89999998000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+       d="m 4.544988,0.45511225 27.002571,0 0,31.15167175 -31.136248,0 0.04113,-27.1336764 4.092546,-4.01799535 z"
+       id="rect2911-2"
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/MLEGEND.svg b/share/metview/icons_mv5/MLEGEND.svg
new file mode 100644
index 0000000..1b8e74d
--- /dev/null
+++ b/share/metview/icons_mv5/MLEGEND.svg
@@ -0,0 +1,528 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="MLEGEND.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="24.3125"
+     inkscape:cx="4.5216609"
+     inkscape:cy="15.260101"
+     inkscape:current-layer="layer10"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1789"
+     inkscape:window-height="1096"
+     inkscape:window-x="1956"
+     inkscape:window-y="57"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3744">
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="0"
+         id="stop3746" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:0;"
+         offset="1"
+         id="stop3748" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3736">
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="0"
+         id="stop3738" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:0;"
+         offset="1"
+         id="stop3740" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3728">
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="0"
+         id="stop3730" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:0;"
+         offset="1"
+         id="stop3732" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3718">
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="0"
+         id="stop3720" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:0;"
+         offset="1"
+         id="stop3722" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3710">
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="0"
+         id="stop3712" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:0;"
+         offset="1"
+         id="stop3714" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3702">
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="0"
+         id="stop3704" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:0;"
+         offset="1"
+         id="stop3706" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective48" />
+    <linearGradient
+       id="linearGradient3869">
+      <stop
+         style="stop-color:#fffa02;stop-opacity:1;"
+         offset="0"
+         id="stop3871" />
+      <stop
+         style="stop-color:#dddb31;stop-opacity:1;"
+         offset="1"
+         id="stop3873" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3869"
+       id="linearGradient3875"
+       x1="19.671978"
+       y1="7.6915169"
+       x2="22.446272"
+       y2="10.200515"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,2.6735219)" />
+    <linearGradient
+       id="linearGradient3889-8-5">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-0-0" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-2-6" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3889-7-1-2">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-7-1-5" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-5-0-8" />
+    </linearGradient>
+    <linearGradient
+       y2="11.078368"
+       x2="22.297274"
+       y1="8.1580601"
+       x1="7.6711636"
+       gradientTransform="translate(-0.90317401,2.3529619)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4175"
+       xlink:href="#linearGradient3889-7-1-2"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3889-8-5"
+       id="linearGradient4197"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.22485567,2.640781)"
+       x1="8.2786636"
+       y1="12.442157"
+       x2="29.438562"
+       y2="12.071977" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3702"
+       id="linearGradient3708"
+       x1="12.010284"
+       y1="7.5681234"
+       x2="20.154243"
+       y2="7.5681234"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.2799524,0.50093719)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3710"
+       id="linearGradient3716"
+       x1="11.969152"
+       y1="11.064269"
+       x2="20.030849"
+       y2="11.064269"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.2799524,0.50093719)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3718"
+       id="linearGradient3726"
+       x1="12.00995"
+       y1="15.094787"
+       x2="20.071646"
+       y2="15.094787"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.2799524,0.50093719)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3728"
+       id="linearGradient3734"
+       x1="12.00995"
+       y1="19.125635"
+       x2="20.071646"
+       y2="19.125635"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.2799524,0.50093719)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3736"
+       id="linearGradient3742"
+       x1="12.00995"
+       y1="23.074222"
+       x2="20.071646"
+       y2="23.074222"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.2799524,0.50093719)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3744"
+       id="linearGradient3750"
+       x1="12.051081"
+       y1="26.652626"
+       x2="20.112777"
+       y2="26.652626"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.2799524,0.50093719)" />
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       style="fill:#e6e6e6;fill-opacity:1;stroke:#747171;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="m 4.5449877,0.41131106 27.0025713,0 0,31.15167094 -31.13624794,0 L 0.45244217,4.4293064 4.5449877,0.41131106 z"
+       id="rect2911"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       transform="matrix(1.1649572,0,0,0.98026068,2.3928109,-0.98849455)"
+       style="fill:#747171;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="M 2.2778942,1.4589838 2.271022,6.1828486 -1.6478691,6.1426841 2.2778942,1.4589838 z"
+       id="path4199"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       style="fill:url(#linearGradient3708);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect3667"
+       width="8.1439581"
+       height="1.4807197"
+       x="11.730331"
+       y="7.3287001" />
+    <rect
+       y="10.824846"
+       x="11.689199"
+       height="1.4807198"
+       width="8.0616961"
+       id="rect3669"
+       style="fill:url(#linearGradient3716);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <rect
+       style="fill:url(#linearGradient3726);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect3694"
+       width="8.0616961"
+       height="1.4807198"
+       x="11.729997"
+       y="14.855365" />
+    <rect
+       y="18.886211"
+       x="11.729997"
+       height="1.4807198"
+       width="8.0616961"
+       id="rect3696"
+       style="fill:url(#linearGradient3734);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <rect
+       style="fill:url(#linearGradient3742);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect3698"
+       width="8.0616961"
+       height="1.4807198"
+       x="11.729997"
+       y="22.834799" />
+    <rect
+       y="26.413202"
+       x="11.771128"
+       height="1.4807198"
+       width="8.0616961"
+       id="rect3700"
+       style="fill:url(#linearGradient3750);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="text"
+     sodipodi:insensitive="true" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="cells"
+     sodipodi:insensitive="true">
+    <rect
+       style="fill:#ff0000;stroke:none"
+       id="rect3652"
+       width="4.9767642"
+       height="3.9806123"
+       x="4.6759219"
+       y="5.7748237" />
+    <rect
+       y="9.6320419"
+       x="4.7127423"
+       height="3.9897172"
+       width="4.9797902"
+       id="rect3654"
+       style="fill:#ff7f2a;stroke:none" />
+    <rect
+       style="fill:#ffff00;stroke:none"
+       id="rect3656"
+       width="5.1232882"
+       height="3.9485862"
+       x="4.6068211"
+       y="13.621759" />
+    <rect
+       y="17.529211"
+       x="4.6068211"
+       height="3.9897172"
+       width="5.0872245"
+       id="rect3658"
+       style="fill:#00ff00;stroke:none" />
+    <rect
+       style="fill:#00ffff;stroke:none"
+       id="rect3660"
+       width="4.9767642"
+       height="3.9485862"
+       x="4.7533445"
+       y="21.518929" />
+    <rect
+       style="fill:#0000ff;stroke:none"
+       id="rect3664"
+       width="5.1608644"
+       height="3.9897172"
+       x="4.6413732"
+       y="25.220726" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer17"
+     inkscape:label="legend"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <rect
+       style="fill:none;stroke:#272424;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3647"
+       width="5.1199708"
+       height="23.444733"
+       x="4.7183294"
+       y="5.9302435" />
+    <path
+       style="fill:none;stroke:#272424;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 4.8123393,9.6246787 C 4.9768638,9.6320419 9.748072,9.5835476 9.748072,9.5835476"
+       id="path3752" />
+    <path
+       id="path3754"
+       d="m 4.8123393,13.737789 c 0.1645245,0.0074 4.9357327,-0.04113 4.9357327,-0.04113"
+       style="fill:none;stroke:#272424;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:none;stroke:#272424;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 4.7300771,17.611476 c 0.1645245,0.0074 4.9357327,-0.04113 4.9357327,-0.04113"
+       id="path3756" />
+    <path
+       id="path3758"
+       d="m 4.7583128,21.518931 c 0.1645245,0.0074 4.9357327,-0.04113 4.9357327,-0.04113"
+       style="fill:none;stroke:#272424;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:none;stroke:#272424;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 4.7533445,25.302993 c 0.1645245,0.0074 4.9357327,-0.04113 4.9357327,-0.04113"
+       id="path3760" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer13"
+     inkscape:label="pencil"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       style="fill:url(#linearGradient3875);fill-opacity:1;stroke:#030000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 26.447301,4.2365039 14.601542,15.712082 13.203084,19.167096 16.822622,17.727506 28.421594,6.2107969 c 0,0 -0.401184,-0.8947574 -0.74036,-1.2339332 C 27.342058,4.6376879 26.447301,4.2365039 26.447301,4.2365039 z"
+       id="path3867"
+       sodipodi:nodetypes="cccccsc" />
+    <path
+       style="fill:#483737;fill-opacity:1;stroke:none"
+       d="M 28.092546,6.0795626 16.492052,17.645244 15.958869,17.05799 27.594818,5.3059127 28.092546,6.0795626 z"
+       id="path3877"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#c8a656;fill-opacity:1;stroke:none"
+       d="M 14.848329,16 14.066838,18.262211 16.452443,17.562982 14.848329,16 z"
+       id="path3883"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 14.478149,15.712082 0,0 z"
+       id="path3885" />
+    <path
+       style="fill:#050505;fill-opacity:1;stroke:none"
+       d="M 14.1491,17.11054 13.737789,18.59126 15.095115,18.138818 14.1491,17.11054 z"
+       id="path3887"
+       sodipodi:nodetypes="cccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer10"
+     inkscape:label="hand"
+     style="display:inline">
+    <rect
+       style="opacity:0.53603599;fill:none;stroke:none"
+       id="rect2939"
+       width="2.2622108"
+       height="7.7326479"
+       x="28.956299"
+       y="14.066838" />
+    <path
+       style="fill:url(#linearGradient4197);fill-opacity:1;stroke:#000000;stroke-width:0.7;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 22.323384,12.381427 -0.01309,1.314107 c 0,0 -0.279375,0.695239 -0.498394,0.842143 -0.583486,0.391362 -1.682438,0.804466 -1.682438,0.804466 l -1.190713,-10e-7 c -0.520389,-0.02751 0.340234,-0.122332 -1.842144,-0.110299 l -0.542738,0.447381 c -0.176833,0.145764 -0.193333,0.469266 -0.123393,0.6875 0.08204,0.255999 0.596717,0.743084 0.596717,0.743084 0.01713,0.213098 1.145554,0.158656 1.615606,0.258523 l 1.113512,-0.06997 0.866726,0.176814 1.00482,0.516549 1.021369,0.5625 0.78125 [...]
+       id="path3960-0-4"
+       sodipodi:nodetypes="ccscccssccccccccssccccsc" />
+    <path
+       style="fill:url(#linearGradient4175);fill-opacity:1;stroke:#000000;stroke-width:0.7;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 21.10281,7.9392058 c 0,0 -0.864273,-0.2489256 -1.443927,0.044344 -0.70956,0.3589859 -2.635122,2.1909542 -2.635122,2.1909542 l -1.389702,1.256427 c 0,0 -1.104461,0.780354 -1.329048,1.292738 -0.140325,0.320144 -0.692423,1.042346 -0.434287,1.278035 0,0 0.242673,0.235308 0.772976,0.309047 0.530303,0.07374 1.389701,-0.638095 1.389701,-0.638095 l 1.53125,-1.374999 1.269762,-0.741726 0.491726,-0.355238 0.278036,-0.217143 2.443099,-2.6426181 C 21.265106,7.977479 21.10281,7.9392058 21 [...]
+       id="path3983-4"
+       sodipodi:nodetypes="csccscsccccccc" />
+    <rect
+       style="fill:#0d0b06;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect4212"
+       width="2.1388175"
+       height="7.4035988"
+       x="28.997429"
+       y="14.395887" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.09999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 18.378759,15.800996 -0.110147,1.037779 -0.734318,-0.01777 c 0,0 -0.389617,-0.174751 -0.477307,-0.328567 -0.07209,-0.126452 0,-0.418174 0,-0.418174 0,-0.155527 0.200218,-0.282651 0.367159,-0.358436 0.07557,-0.0343 0.25701,-0.02987 0.25701,-0.02987 l 0.697603,0.115036 z"
+       id="path4268"
+       sodipodi:nodetypes="cccssscc" />
+    <path
+       style="fill:#d6b370;fill-opacity:1;stroke:none"
+       d="m 28.791774,19.660665 0,-1.686372 -2.467866,0.04113 -1.398458,-0.452442 c 0,0 -0.964908,-0.709613 -1.521851,-0.904884 -0.470245,-0.164874 -1.033801,-0.288768 -1.562982,-0.37018 l -1.069409,-0.164524 -0.987146,0 -1.316196,0.04113 0.08226,0.658097 0.946016,0.08226 0.987147,0.04113 1.028277,0.493573 c 0,0 0.584391,0.442159 0.904885,0.616967 0.339801,0.185339 1.069408,0.452442 1.069408,0.452442 l 1.231113,0.745142 c 0.388462,0.23512 0.810343,0.414981 1.236754,0.571053 0.387323,0.14 [...]
+       id="path4270"
+       sodipodi:nodetypes="ccccsscccccccscsscsc" />
+    <path
+       style="fill:#d6b370;stroke:none"
+       d="M 15.012853,14.066839 C 14.724935,13.957156 14.437018,13.847473 14.1491,13.73779 c 0.594291,-0.536642 1.20232,-1.058562 1.766868,-1.627073 0.444514,-0.42915 0.918257,-0.706724 1.394946,-1.100871 0.281295,-0.253216 0.653857,-0.536296 0.965672,-0.751322 0.400107,-0.2877824 0.660647,-0.7231253 1.092134,-0.9640169 0.186134,-0.1067083 0.365481,-0.2354848 0.555742,-0.3287765 0.268538,-0.013427 0.66047,0.014277 0.929008,8.501e-4 0.06855,0.082262 0.01371,-10e-8 0.08226,0.082262 -0.6753 [...]
+       id="path4274"
+       sodipodi:nodetypes="cccsssccccsscc" />
+    <path
+       style="fill:#d6b370;stroke:none"
+       d="m 22.99229,12.215938 0.658096,-0.699228 c 0,0 0.02532,1.169686 -0.123393,1.727506 -0.113731,0.426608 -0.575836,1.192802 -0.575836,1.192802 l -1.110539,0.575836 c 0,0 0.682272,-0.768009 0.822621,-1.275065 0.140349,-0.507056 -0.08226,-1.11054 -0.08226,-1.11054 l 0.411311,-0.411311 z"
+       id="path3659"
+       sodipodi:nodetypes="ccscczcc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/MSYMB.svg b/share/metview/icons_mv5/MSYMB.svg
new file mode 100644
index 0000000..87b812f
--- /dev/null
+++ b/share/metview/icons_mv5/MSYMB.svg
@@ -0,0 +1,320 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="MSYMB.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.15625"
+     inkscape:cx="7.9668419"
+     inkscape:cy="15.539652"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="956"
+     inkscape:window-height="658"
+     inkscape:window-x="893"
+     inkscape:window-y="-14"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3869">
+      <stop
+         style="stop-color:#fffa02;stop-opacity:1;"
+         offset="0"
+         id="stop3871" />
+      <stop
+         style="stop-color:#dddb31;stop-opacity:1;"
+         offset="1"
+         id="stop3873" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3869"
+       id="linearGradient3875"
+       x1="19.671978"
+       y1="7.6915169"
+       x2="22.446272"
+       y2="10.200515"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.06189555,1.5473887)" />
+    <linearGradient
+       y2="11.078368"
+       x2="22.297274"
+       y1="8.1580601"
+       x1="7.6711636"
+       gradientTransform="translate(-0.912603,1.2661055)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4175-46"
+       xlink:href="#linearGradient3889-7-1-2-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3889-7-1-2-9">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-7-1-5-2" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-5-0-8-24" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3889-8-5-7"
+       id="linearGradient4197-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.23428491,1.5539246)"
+       x1="8.2786636"
+       y1="12.442157"
+       x2="29.438562"
+       y2="12.071977" />
+    <linearGradient
+       id="linearGradient3889-8-5-7">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-0-0-5" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-2-6-4" />
+    </linearGradient>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline">
+    <path
+       style="fill:#1cbca6;fill-opacity:1;stroke:#25bf52;stroke-width:0.89999998000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="m 4.5449877,0.41131106 27.0025713,0 0,31.15167094 -31.13624794,0 L 0.45244217,4.4293064 4.5449877,0.41131106 z"
+       id="rect2911"
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#1c6e45;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="M 2.2778942,1.4589838 2.271022,6.1828486 -1.6478691,6.1426841 2.2778942,1.4589838 z"
+       id="path4199"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       transform="matrix(1.1649572,0,0,0.98026068,2.3928109,-0.98849455)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer17"
+     inkscape:label="wmo"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:#ff0000;fill-opacity:1;stroke:#d81619;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3814"
+       sodipodi:cx="17.392651"
+       sodipodi:cy="26.460348"
+       sodipodi:rx="2.0425532"
+       sodipodi:ry="2.1972921"
+       d="m 19.435204,26.460348 a 2.0425532,2.1972921 0 1 1 -4.085107,0 2.0425532,2.1972921 0 1 1 4.085107,0 z"
+       transform="matrix(1.1882947,0,0,1.104612,1.5151909,-3.8135249)" />
+    <path
+       style="fill:#0000ff;stroke:#be4135;stroke-width:1.11116421px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 8.541586,4.8278531 c -0.061896,6.5543949 0,6.9688879 0,6.9688879"
+       id="path3816"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#be4135;stroke-width:1.16072785999999990px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 5.2556405,8.2321083 6.3807235,0.061896"
+       id="path3818"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#231fa1;stroke-width:1.15761077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 5.0923451,17.347664 8.8172439,8.136394"
+       id="path3820"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#000080;stroke:#231fa1;stroke-width:1.15940547px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 5.6503023,25.606951 7.7632247,-8.38218"
+       id="path3822"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer13"
+     inkscape:label="pencil"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3875);fill-opacity:1;stroke:#030000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 26.385405,3.1103707 14.539646,14.585948 13.141188,18.040962 16.760726,16.601372 28.359698,5.0846637 c 0,0 -0.401184,-0.8947574 -0.74036,-1.2339332 C 27.280162,3.5115547 26.385405,3.1103707 26.385405,3.1103707 z"
+       id="path3867"
+       sodipodi:nodetypes="cccccsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#6c5353;fill-opacity:1;stroke:none"
+       d="M 28.03065,4.9534294 16.430156,16.51911 15.896973,15.931856 27.532922,4.1797795 28.03065,4.9534294 z"
+       id="path3877"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#c8a656;fill-opacity:1;stroke:none"
+       d="m 14.786433,14.873866 -0.781491,2.262211 2.385605,-0.699229 -1.604114,-1.562982 z"
+       id="path3883"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 14.416253,14.585948 0,0 z"
+       id="path3885"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#050505;fill-opacity:1;stroke:none"
+       d="m 14.210995,15.984406 -0.411311,1.48072 1.357326,-0.452442 -0.946015,-1.028278 z"
+       id="path3887"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="hand"
+     style="display:inline">
+    <rect
+       style="opacity:0.53603599;fill:none;stroke:none;display:inline"
+       id="rect2939"
+       width="2.2622108"
+       height="7.7326479"
+       x="28.946869"
+       y="12.979981" />
+    <path
+       style="fill:url(#linearGradient4197-7);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 22.313954,11.294571 -0.01309,1.314106 c 0,0 -0.279375,0.695239 -0.498394,0.842143 -0.583486,0.391362 -1.682438,0.804466 -1.682438,0.804466 l -1.190713,-10e-7 c -0.520389,-0.02751 0.340234,-0.122332 -1.842144,-0.110299 l -0.542738,0.447381 c -0.176833,0.145764 -0.193333,0.469266 -0.123393,0.6875 0.08204,0.255999 0.596717,0.743084 0.596717,0.743084 0.01713,0.213098 1.145554,0.158656 1.615606,0.258523 l 1.113512,-0.06997 0.866726,0.176814 1.00482,0.516549 1.021369,0.5625 0.78125 [...]
+       id="path3960-0-4"
+       sodipodi:nodetypes="ccscccssccccccccssccccsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient4175-46);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 21.09338,6.8523493 c 0,0 -0.864273,-0.2489256 -1.443927,0.044344 -0.70956,0.3589861 -2.635122,2.1909541 -2.635122,2.1909541 l -1.389702,1.2564276 c 0,0 -1.104461,0.780354 -1.329048,1.292737 -0.140325,0.320144 -0.692423,1.042346 -0.434287,1.278035 0,0 0.242673,0.235308 0.772976,0.309047 0.530303,0.07374 1.389701,-0.638095 1.389701,-0.638095 l 1.53125,-1.374998 1.269762,-0.741726 0.491726,-0.355239 0.278036,-0.2171426 2.443099,-2.642618 C 21.255676,6.8906225 21.09338,6.8523493  [...]
+       id="path3983-4"
+       sodipodi:nodetypes="csccscsccccccc"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:#0d0b06;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       id="rect4212"
+       width="2.2210789"
+       height="7.4035988"
+       x="28.988001"
+       y="13.309031" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.09999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 18.369329,14.714139 -0.110147,1.037779 -0.734318,-0.01777 c 0,0 -0.389617,-0.174751 -0.477307,-0.328567 -0.07209,-0.126452 0,-0.418174 0,-0.418174 0,-0.155527 0.200218,-0.282651 0.367159,-0.358436 0.07557,-0.0343 0.25701,-0.02987 0.25701,-0.02987 l 0.697603,0.115036 z"
+       id="path4268"
+       sodipodi:nodetypes="cccssscc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;fill-opacity:1;stroke:none;display:inline"
+       d="m 28.782344,18.573808 0,-1.686372 -2.467866,0.04113 -1.398458,-0.452442 c 0,0 -0.964908,-0.709613 -1.521851,-0.904884 -0.470245,-0.164874 -1.033801,-0.288768 -1.562982,-0.37018 l -1.069409,-0.164524 -0.987146,0 -1.316196,0.04113 0.08226,0.658097 0.946016,0.08226 0.987147,0.04113 1.028277,0.493573 c 0,0 0.584391,0.442159 0.904885,0.616967 0.339801,0.185339 1.069408,0.452442 1.069408,0.452442 l 1.231113,0.745142 c 0.388462,0.23512 0.810343,0.414981 1.236754,0.571053 0.387323,0.14 [...]
+       id="path4270"
+       sodipodi:nodetypes="ccccsscccccccscsscsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 15.003423,12.979982 c -0.287918,-0.109683 -0.575835,-0.219366 -0.863753,-0.329049 0.594291,-0.536642 1.20232,-1.058562 1.766868,-1.627072 0.444514,-0.42915 0.918257,-0.706724 1.394946,-1.1008716 0.281295,-0.253216 0.653857,-0.536296 0.965672,-0.751322 0.400107,-0.287782 0.660647,-0.723125 1.092134,-0.964017 0.186134,-0.106708 0.365481,-0.235485 0.555742,-0.328776 0.268538,-0.01343 0.66047,0.01428 0.929008,8.5e-4 0.06855,0.08226 0.01371,0 0.08226,0.08226 -0.67532,0.662346 -1.1 [...]
+       id="path4274"
+       sodipodi:nodetypes="cccsssccccsscc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 22.98286,11.129082 0.658096,-0.699228 c 0,0 0.02532,1.169685 -0.123393,1.727505 -0.113731,0.426608 -0.575836,1.192802 -0.575836,1.192802 l -1.110539,0.575836 c 0,0 0.682272,-0.768009 0.822621,-1.275065 0.140349,-0.507056 -0.08226,-1.110539 -0.08226,-1.110539 l 0.411311,-0.411311 z"
+       id="path3659-8"
+       sodipodi:nodetypes="ccscczcc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="top frame">
+    <path
+       style="fill:none;stroke:#1c6e45;stroke-width:0.89999998000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+       d="m 4.544988,0.45511225 27.002571,0 0,31.15167175 -31.136248,0 0.04113,-27.1336764 4.092546,-4.01799535 z"
+       id="rect2911-2"
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/MTAYLOR.xpm b/share/metview/icons_mv5/MTAYLOR.xpm
new file mode 100644
index 0000000..08bed47
--- /dev/null
+++ b/share/metview/icons_mv5/MTAYLOR.xpm
@@ -0,0 +1,242 @@
+/* XPM */
+static char *MTAYLOR[] = {
+/* width height num_colors chars_per_pixel */
+"    32    32      203            2",
+/* colors */
+".. c #040204",
+".# c #84860c",
+".a c #d4ca14",
+".b c #44423c",
+".c c #b4c2a4",
+".d c #746e14",
+".e c #ccea8c",
+".f c #b4ae0c",
+".g c #2c2a1c",
+".h c #44426c",
+".i c #646664",
+".j c #d4e2cc",
+".k c #1c226c",
+".l c #84867c",
+".m c #e4f2cc",
+".n c #e4c28c",
+".o c #b49e7c",
+".p c #5c5a14",
+".q c #b4b69c",
+".r c #b4e264",
+".s c #443a24",
+".t c #9ca294",
+".u c #ece61c",
+".v c #d4b274",
+".w c #c4d2c4",
+".x c #8c7e64",
+".y c #34362c",
+".z c #f4fad4",
+".A c #847e14",
+".B c #ccee64",
+".C c #0c126c",
+".D c #545244",
+".E c #e4e6d4",
+".F c #2c3284",
+".G c #645634",
+".H c #949694",
+".I c #ecfad4",
+".J c #ccba94",
+".K c #aca60c",
+".L c #4c4a3c",
+".M c #141a74",
+".N c #94823c",
+".O c #bcc2bc",
+".P c #ecf2cc",
+".Q c #ecd2a4",
+".R c #dcba7c",
+".S c #d4f664",
+".T c #3c321c",
+".U c #5c629c",
+".V c #7c86ac",
+".W c #acb294",
+".X c #ccdac4",
+".Y c #e4eecc",
+".Z c #54422c",
+".0 c #64625c",
+".1 c #b4b6bc",
+".2 c #bccabc",
+".3 c #8c7a44",
+".4 c #34321c",
+".5 c #242a74",
+".6 c #bcea6c",
+".7 c #dcb674",
+".8 c #d4ee6c",
+".9 c #343a8c",
+"#. c #ecf2dc",
+"## c #f4d6ac",
+"#a c #b4beb4",
+"#b c #4c4234",
+"#c c #dceacc",
+"#d c #3c3e14",
+"#e c #fcfefc",
+"#f c #14126c",
+"#g c #7476a4",
+"#h c #1c1e6c",
+"#i c #545a4c",
+"#j c #848ea4",
+"#k c #342e24",
+"#l c #444a94",
+"#m c #6c6e64",
+"#n c #dce2cc",
+"#o c #c4ae84",
+"#p c #9ca2ac",
+"#q c #dcf674",
+"#r c #d4b684",
+"#s c #7c7e94",
+"#t c #3c3624",
+"#u c #f4fed4",
+"#v c #5c5a44",
+"#w c #e4e6dc",
+"#x c #c4c6cc",
+"#y c #ecf6cc",
+"#z c #646aa4",
+"#A c #acaeac",
+"#B c #d4dabc",
+"#C c #847654",
+"#D c #bcea74",
+"#E c #d4f26c",
+"#F c #3c3e9c",
+"#G c #545a9c",
+"#H c #f4deac",
+"#I c #14167c",
+"#J c #747ea4",
+"#K c #1c1a7c",
+"#L c #444634",
+"#M c #7c760c",
+"#N c #e4fe8c",
+"#O c #c4aa44",
+"#P c #848e74",
+"#Q c #e4f6cc",
+"#R c #e4ca94",
+"#S c #c4a66c",
+"#T c #f4ee14",
+"#U c #d4b674",
+"#V c #d4e2c4",
+"#W c #dcdecc",
+"#X c #9c8e2c",
+"#Y c #c4ceac",
+"#Z c #5c5e7c",
+"#0 c #9496b4",
+"#1 c #6c5e44",
+"#2 c #3c3e4c",
+"#3 c #a4aab4",
+"#4 c #0c0a04",
+"#5 c #8c8a8c",
+"#6 c #3c3e7c",
+"#7 c #d4d21c",
+"#8 c #343234",
+"#9 c #bc9e6c",
+"a. c #5c5234",
+"a# c #6c624c",
+"aa c #bce65c",
+"ab c #4c3e2c",
+"ac c #d4be9c",
+"ad c #9c865c",
+"ae c #947e44",
+"af c #ccd6c4",
+"ag c #6c6ea4",
+"ah c #acb2bc",
+"ai c #5c5e9c",
+"aj c #242684",
+"ak c #9c9ab4",
+"al c #d4f674",
+"am c #6c6e74",
+"an c #8c7654",
+"ao c #fcdeac",
+"ap c #3c3e8c",
+"aq c #b4b204",
+"ar c #ecea14",
+"as c #e4eacc",
+"at c #bcc6bc",
+"au c #dcbe84",
+"av c #545654",
+"aw c #b4bab4",
+"ax c #14166c",
+"ay c #747aac",
+"az c #dce6cc",
+"aA c #3c3a2c",
+"aB c #acb2b4",
+"aC c #746644",
+"aD c #2c2e8c",
+"aE c #8486a4",
+"aF c #c4cebc",
+"aG c #4c4e3c",
+"aH c #84724c",
+"aI c #54462c",
+"aJ c #8c7e44",
+"aK c #ecf6dc",
+"aL c #f4daac",
+"aM c #4c4634",
+"aN c #1c1a14",
+"aO c #ccd6b4",
+"aP c #1c1e7c",
+"aQ c #4c4e9c",
+"aR c #d4decc",
+"aS c #2c2a24",
+"aT c #e4f2d4",
+"aU c #d4b27c",
+"aV c #f4fadc",
+"aW c #ccee6c",
+"aX c #ecfadc",
+"aY c #bcc2c4",
+"aZ c #ecf2d4",
+"a0 c #dcba84",
+"a1 c #d4f66c",
+"a2 c #5c62a4",
+"a3 c #e4eed4",
+"a4 c #d4ee74",
+"a5 c #b4bebc",
+"a6 c #1c1e74",
+"a7 c #848eac",
+"a8 c #dce2d4",
+"a9 c #3c362c",
+"b. c #f4fedc",
+"b# c #ecf6d4",
+"ba c #bcea7c",
+"bb c #d4f274",
+"bc c #44463c",
+"bd c #6c5e4c",
+"be c #5c523c",
+"bf c #5c5a54",
+"bg c #e4ead4",
+"bh c #b4babc",
+"bi c #141674",
+/* pixels */
+"#e#e#ebaa1#Ebb.8bb.8a1bb#Ebb#Ebb#Ebbbbbbbb#q#qalbbbbbbbbbb#q#qbb",
+"#e#e#Da4.r#.b#b##.b##.b#aKaZaKaZaKb#b##.b##.b##..zaKaZaKaKaZ#w#E",
+"#e#Dala1.BaKaVb.aVb.aVb.aVb.b.aVb.aVb.aVb.aVb.aVaVaVb.aVaVb.aZ#E",
+".6bb#E#N.BaVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.b.aVb.#.#E",
+"#qaa#E.S.e#uaVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aZ#E",
+"bba3.z.IaVaVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb#bb",
+"bbaKaVb.aKbh#g.VakaY.Eb#aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb.#.#E",
+"bbaZb.aVaVaDa7#sai.9bi#K#G#xaXaVb.aVb.aVb.aVb.aVb.aVb.aVb.aVb##E",
+"#EaKaVb.aVax#yaX#u.z.Ibh#g.5aP#0#.aVb.aVb.aVb.aVb.aVaTaVb.aVaK#E",
+"#Eb#b.aVaXbi.P.I#u.I.Iaw.1.I.OapaP#xaVb.aVb.aVb.b#av#4.taVaVb##E",
+"#EaKaVb.aV.F.V#paEaF.2.I.I#u.I.I#p#I#JaVaVb.aVb#.D.d#7.saFb.aK#E",
+"#Eb#b.aV.I#K#c#c.j.O#zag#3.I#u#u.I#Baj.UaKb.aKaG.d.u.3.Z.laVb##E",
+"a1aVaVaVaVax#y#u#u.I.OahazaQaF.I.Ia5#F#6#Z#Bbc.Aar.3.G.0aVaVaK#E",
+"#Eb#aVb.aX.M#y.I.I#u.I#u.I#c#caQb#.Pava#.x..#M.u.3.G.iaKb.aVb#bb",
+"#EaKb.aVaVaxb#.I#u#jaB.I#u#u.IaB#z#2.oauaH.par.3.G.iaVaVb.aVaK.8",
+"alaZb.aVaXax#y.I#u.X#V#u.I#u.IaO#8#o.7ad.p.uaJ.s#8aZb.aVb.aVb##E",
+"#EaKaVb.aV#f#z.way.Y.m#u.I.Y#sa9#r#UaH.parae.sbd.x#maVaVb.aVaK#E",
+"#Eb#b.aVaV.CazasaQa2ag#Vb##Y.y#r.vaI.#ar.NabaC#RaLbe.taVb.aVb#bb",
+"bbaKb.aVaX#f#y.I.m.m.I#gay.DaU#S#t.Karae.G.D#9.QaL.Q.L#5aKaVaZal",
+".8b#aVb.aV#f#Q.Y.I.I#u.m#l.haG.g.f#T.Na.bfaM#raLaLaoaLa#avamambb",
+"bbb#b.aVaX.Cb#.Ubh.zaR#u.I#a.gaq#d.T.gaS#v.J.QaLaLaLaoao#b#4#4bb",
+"#EaVb.aVaV.C#y.I.I#QaD#Q.z#P#X.aa9ac#r.Ra0.n#R##aL#H#Haoa##4#4bb",
+"#EaKaVb.aV.Cbhas.I.z.I.z.I.4ae#O#kaSaA.LaCaU#U.7#RaLaoaoa##4#4bb",
+"#Eb#b.aVaX#fai.2aD#c#u.I.q#4.T#L.W.I#uaX#Y#2an#U.7.v.R.Rad#4#4#E",
+"#EaKb.aVaVbi#y.z.m.I#u.I#m#i#Bat.I#u.I#u.Ia5.c.bad#U.v.vad#4#4bb",
+"a1b#aVb.aXaj#lafb#.I#y.I#y.I#yaQas.I.z.I.IaEaB.P.H.y#1#CaN#4#4#E",
+"bbaVb.aVaVaPa6#h#h#h#h#h.k#h.k#h#h#h#h#h#h.M#h#h.5#G#W#B#AaNaN#E",
+"#Eb#aVb.aVazaRa8#na8.ja8a8#W#na8.ja8azbg#c.E#caz.Ea3aVb.#uaKbg#E",
+"#EaVb.aVb.aVb.aVb.aVb.aVb.b.aVaVaVb.aVb.b.aVb.aVb.aVb.aVaVb.aK#E",
+"#EaKb.aVb.aVb.aVb.aVb.aVb.aVb.b.b.aVb.aVb.aVb.aVb.aVb.aVb.aVb#bb",
+"#Ea3aKb#aKaKb#.I.zb#aKb#aKb#aKb#b#aKb#aKb#aKaKb#aKb#aKaKb#aKbgbb",
+"bb#E.8#E.B.8#EaW.8.B#EaW#EaW#EaW.8#E.8aW.8#E.B.8.8#EaW.8#E.8#E#E"
+};
diff --git a/share/metview/icons_mv5/MTEXT.svg b/share/metview/icons_mv5/MTEXT.svg
new file mode 100644
index 0000000..ed2884c
--- /dev/null
+++ b/share/metview/icons_mv5/MTEXT.svg
@@ -0,0 +1,318 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="MTEXT.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.15625"
+     inkscape:cx="6.6405089"
+     inkscape:cy="19.950028"
+     inkscape:current-layer="layer17"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1179"
+     inkscape:window-x="1916"
+     inkscape:window-y="-4"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="1"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3869">
+      <stop
+         style="stop-color:#fffa02;stop-opacity:1;"
+         offset="0"
+         id="stop3871" />
+      <stop
+         style="stop-color:#dddb31;stop-opacity:1;"
+         offset="1"
+         id="stop3873" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3869"
+       id="linearGradient3875"
+       x1="19.671978"
+       y1="7.6915169"
+       x2="22.446272"
+       y2="10.200515"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.18568665,2.5377175)" />
+    <linearGradient
+       y2="11.078368"
+       x2="22.297274"
+       y1="8.1580601"
+       x1="7.6711636"
+       gradientTransform="translate(-0.6650208,2.2564343)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4175-46"
+       xlink:href="#linearGradient3889-7-1-2-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3889-7-1-2-9">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-7-1-5-2" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-5-0-8-24" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3889-8-5-7"
+       id="linearGradient4197-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.01329729,2.5442534)"
+       x1="8.2786636"
+       y1="12.442157"
+       x2="29.438562"
+       y2="12.071977" />
+    <linearGradient
+       id="linearGradient3889-8-5-7">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-0-0-5" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-2-6-4" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       id="filter3973">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.24460127"
+         id="feGaussianBlur3975" />
+    </filter>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline">
+    <path
+       style="fill:#e5e5e5;fill-opacity:1;stroke:#bbc7be;stroke-width:0.89999998000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="m 4.5449877,0.41131106 27.0025713,0 0,31.15167094 -31.13624794,0 L 0.45244217,4.4293064 4.5449877,0.41131106 z"
+       id="rect2911"
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#838585;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="M 2.2778942,1.4589838 2.271022,6.1828486 -1.6478691,6.1426841 2.2778942,1.4589838 z"
+       id="path4199"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       transform="matrix(1.1649572,0,0,0.98026068,2.3928109,-0.98849455)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer17"
+     inkscape:label="wmo"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:34px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#1a1a29;fill-opacity:1;stroke:none;filter:url(#filter3973);font-family:Georgia;-inkscape-font-specification:Georgia"
+       x="6.1276598"
+       y="28.843327"
+       id="text3904"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3906"
+         x="6.1276598"
+         y="28.843327">T</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:34px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#1c68cc;fill-opacity:1;stroke:none;display:inline;font-family:Georgia;-inkscape-font-specification:Georgia"
+       x="5.3356814"
+       y="28.169106"
+       id="text3904-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3906-7"
+         x="5.3356814"
+         y="28.169106">T</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer13"
+     inkscape:label="pencil"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3875);fill-opacity:1;stroke:#000103;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 26.632988,4.1006996 14.787229,15.576277 13.388771,19.031291 17.008309,17.591701 28.607281,6.0749926 c 0,0 -0.401184,-0.8947574 -0.74036,-1.2339332 C 27.527745,4.5018836 26.632988,4.1006996 26.632988,4.1006996 z"
+       id="path3867"
+       sodipodi:nodetypes="cccccsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#6c5353;fill-opacity:1;stroke:none"
+       d="M 28.278233,5.9437583 16.677739,17.509439 16.144556,16.922185 27.780505,5.1701084 28.278233,5.9437583 z"
+       id="path3877"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#c8a656;fill-opacity:1;stroke:none"
+       d="m 15.034016,15.864195 -0.781491,2.262211 2.385605,-0.699229 -1.604114,-1.562982 z"
+       id="path3883"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 14.663836,15.576277 0,0 z"
+       id="path3885"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#050505;fill-opacity:1;stroke:none"
+       d="m 14.458578,16.974735 -0.411311,1.48072 1.357326,-0.452442 -0.946015,-1.028278 z"
+       id="path3887"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="hand"
+     style="display:inline">
+    <rect
+       style="opacity:0.53603599;fill:none;stroke:none;display:inline"
+       id="rect2939"
+       width="2.2622108"
+       height="7.7326479"
+       x="29.19445"
+       y="13.97031" />
+    <path
+       style="fill:url(#linearGradient4197-7);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 22.561537,12.2849 -0.01309,1.314106 c 0,0 -0.279375,0.695239 -0.498394,0.842143 -0.583486,0.391362 -1.682438,0.804466 -1.682438,0.804466 l -1.190713,-1e-6 c -0.520389,-0.02751 0.340234,-0.122332 -1.842144,-0.110299 l -0.542738,0.447381 c -0.176833,0.145764 -0.193333,0.469266 -0.123393,0.6875 0.08204,0.255999 0.596717,0.743084 0.596717,0.743084 0.01713,0.213098 1.145554,0.158656 1.615606,0.258523 l 1.113512,-0.06997 0.866726,0.176814 1.00482,0.516549 1.021369,0.5625 0.78125,0. [...]
+       id="path3960-0-4"
+       sodipodi:nodetypes="ccscccssccccccccssccccsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient4175-46);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 21.340963,7.8426782 c 0,0 -0.864273,-0.2489256 -1.443927,0.044344 -0.70956,0.3589861 -2.635122,2.1909538 -2.635122,2.1909538 l -1.389702,1.256428 c 0,0 -1.104461,0.780354 -1.329048,1.292737 -0.140325,0.320144 -0.692423,1.042346 -0.434287,1.278035 0,0 0.242673,0.235308 0.772976,0.309047 0.530303,0.07374 1.389701,-0.638095 1.389701,-0.638095 l 1.53125,-1.374998 1.269762,-0.741726 0.491726,-0.355239 0.278036,-0.217143 2.443099,-2.6426177 C 21.503259,7.8809514 21.340963,7.8426782 [...]
+       id="path3983-4"
+       sodipodi:nodetypes="csccscsccccccc"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:#0d0b06;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       id="rect4212"
+       width="2.2210789"
+       height="7.4035988"
+       x="29.235582"
+       y="14.299359" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.09999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 18.616912,15.704468 -0.110147,1.037779 -0.734318,-0.01777 c 0,0 -0.389617,-0.174751 -0.477307,-0.328567 -0.07209,-0.126452 0,-0.418174 0,-0.418174 0,-0.155527 0.200218,-0.282651 0.367159,-0.358436 0.07557,-0.0343 0.25701,-0.02987 0.25701,-0.02987 l 0.697603,0.115036 z"
+       id="path4268"
+       sodipodi:nodetypes="cccssscc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;fill-opacity:1;stroke:none;display:inline"
+       d="m 29.029927,19.564137 0,-1.686372 -2.467866,0.04113 -1.398458,-0.452442 c 0,0 -0.964908,-0.709613 -1.521851,-0.904884 -0.470245,-0.164874 -1.033801,-0.288768 -1.562982,-0.37018 l -1.069409,-0.164524 -0.987146,0 -1.316196,0.04113 0.08226,0.658097 0.946016,0.08226 0.987147,0.04113 1.028277,0.493573 c 0,0 0.584391,0.442159 0.904885,0.616967 0.339801,0.185339 1.069408,0.452442 1.069408,0.452442 l 1.231113,0.745142 c 0.388462,0.23512 0.810343,0.414981 1.236754,0.571053 0.387323,0.14 [...]
+       id="path4270"
+       sodipodi:nodetypes="ccccsscccccccscsscsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 15.251006,13.970311 c -0.287918,-0.109683 -0.575835,-0.219366 -0.863753,-0.329049 0.594291,-0.536642 1.20232,-1.058562 1.766868,-1.627072 0.444514,-0.42915 0.918257,-0.706724 1.394946,-1.100872 0.281295,-0.253216 0.653857,-0.536296 0.965672,-0.751322 0.400107,-0.2877817 0.660647,-0.7231247 1.092134,-0.9640167 0.186134,-0.106708 0.365481,-0.235485 0.555742,-0.328776 0.268538,-0.01343 0.66047,0.01428 0.929008,8.5e-4 0.06855,0.08226 0.01371,0 0.08226,0.08226 -0.67532,0.662346 -1 [...]
+       id="path4274"
+       sodipodi:nodetypes="cccsssccccsscc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 23.230443,12.119411 0.658096,-0.699228 c 0,0 0.02532,1.169685 -0.123393,1.727505 -0.113731,0.426608 -0.575836,1.192802 -0.575836,1.192802 l -1.110539,0.575836 c 0,0 0.682272,-0.768009 0.822621,-1.275065 0.140349,-0.507056 -0.08226,-1.110539 -0.08226,-1.110539 l 0.411311,-0.411311 z"
+       id="path3659-8"
+       sodipodi:nodetypes="ccscczcc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="top frame">
+    <path
+       style="fill:none;stroke:#838585;stroke-width:0.89999998000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+       d="m 4.544988,0.45511225 27.002571,0 0,31.15167175 -31.136248,0 0.04113,-27.1336764 4.092546,-4.01799535 z"
+       id="rect2911-2"
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/src/XSection/VPROFILE.xpm b/share/metview/icons_mv5/MVPROFILE.xpm
old mode 100644
new mode 100755
similarity index 100%
rename from src/XSection/VPROFILE.xpm
rename to share/metview/icons_mv5/MVPROFILE.xpm
diff --git a/share/metview/icons/MVPROFVIEW.xpm b/share/metview/icons_mv5/MVPROFILEVIEW.xpm
old mode 100644
new mode 100755
similarity index 100%
copy from share/metview/icons/MVPROFVIEW.xpm
copy to share/metview/icons_mv5/MVPROFILEVIEW.xpm
diff --git a/share/metview/icons/MVPROFVIEW.xpm b/share/metview/icons_mv5/MVPROFVIEW.xpm
similarity index 100%
copy from share/metview/icons/MVPROFVIEW.xpm
copy to share/metview/icons_mv5/MVPROFVIEW.xpm
diff --git a/share/metview/icons_mv5/MWIND.svg b/share/metview/icons_mv5/MWIND.svg
new file mode 100644
index 0000000..b99a97f
--- /dev/null
+++ b/share/metview/icons_mv5/MWIND.svg
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="MWIND.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.15625"
+     inkscape:cx="2.6615089"
+     inkscape:cy="15.769826"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="956"
+     inkscape:window-height="658"
+     inkscape:window-x="2271"
+     inkscape:window-y="33"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3869">
+      <stop
+         style="stop-color:#fffa02;stop-opacity:1;"
+         offset="0"
+         id="stop3871" />
+      <stop
+         style="stop-color:#dddb31;stop-opacity:1;"
+         offset="1"
+         id="stop3873" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3869"
+       id="linearGradient3875"
+       x1="19.671978"
+       y1="7.6915169"
+       x2="22.446272"
+       y2="10.200515"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.1237911,-0.06189563)" />
+    <linearGradient
+       y2="11.078368"
+       x2="22.297274"
+       y1="8.1580601"
+       x1="7.6711636"
+       gradientTransform="translate(-0.72691635,-0.34317883)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4175-46"
+       xlink:href="#linearGradient3889-7-1-2-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3889-7-1-2-9">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-7-1-5-2" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-5-0-8-24" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3889-8-5-7"
+       id="linearGradient4197-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.04859826,-0.05535973)"
+       x1="8.2786636"
+       y1="12.442157"
+       x2="29.438562"
+       y2="12.071977" />
+    <linearGradient
+       id="linearGradient3889-8-5-7">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-0-0-5" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-2-6-4" />
+    </linearGradient>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline">
+    <path
+       style="fill:#ccccff;fill-opacity:1;stroke:#bbc7be;stroke-width:0.89999998000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="m 4.5449877,0.41131106 27.0025713,0 0,31.15167094 -31.13624794,0 L 0.45244217,4.4293064 4.5449877,0.41131106 z"
+       id="rect2911"
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#9d4ae0;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="M 2.2778942,1.4589838 2.271022,6.1828486 -1.6478691,6.1426841 2.2778942,1.4589838 z"
+       id="path4199"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       transform="matrix(1.1649572,0,0,0.98026068,2.3928109,-0.98849455)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer17"
+     inkscape:label="wmo"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:#f70808;fill-opacity:1;stroke:#f70808;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3814"
+       sodipodi:cx="17.392651"
+       sodipodi:cy="26.460348"
+       sodipodi:rx="2.0425532"
+       sodipodi:ry="2.1972921"
+       d="m 19.435204,26.460348 a 2.0425532,2.1972921 0 1 1 -4.085107,0 2.0425532,2.1972921 0 1 1 4.085107,0 z"
+       transform="matrix(1.3863438,0,0,1.288714,-2.0483643,-7.7613315)" />
+    <path
+       style="fill:#ff0000;stroke:#f70808;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+       d="M 19.992263,24.510638 2.9090909,8.7272727"
+       id="path3888"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#f70808;stroke-width:1.37788522px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 5.6315425,11.115069 7.7378967,2.93522"
+       id="path3892"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3900"
+       d="M 8.6644246,13.776578 10.770779,5.5967287"
+       style="fill:none;stroke:#f70808;stroke-width:1.37788522px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer13"
+     inkscape:label="pencil"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3875);fill-opacity:1;stroke:#030000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 26.571092,1.5010864 14.725333,12.976664 13.326875,16.431678 16.946413,14.992088 28.545385,3.4753794 c 0,0 -0.401184,-0.8947574 -0.74036,-1.2339332 C 27.465849,1.9022704 26.571092,1.5010864 26.571092,1.5010864 z"
+       id="path3867"
+       sodipodi:nodetypes="cccccsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#6c5353;fill-opacity:1;stroke:none"
+       d="M 28.216337,3.3441451 16.615843,14.909826 16.08266,14.322572 27.718609,2.5704952 28.216337,3.3441451 z"
+       id="path3877"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#c8a656;fill-opacity:1;stroke:none"
+       d="m 14.97212,13.264582 -0.781491,2.262211 2.385605,-0.699229 -1.604114,-1.562982 z"
+       id="path3883"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 14.60194,12.976664 0,0 z"
+       id="path3885"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#050505;fill-opacity:1;stroke:none"
+       d="m 14.396682,14.375122 -0.411311,1.48072 1.357326,-0.452442 -0.946015,-1.028278 z"
+       id="path3887"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="hand"
+     style="display:inline">
+    <rect
+       style="opacity:0.53603599;fill:none;stroke:none;display:inline"
+       id="rect2939"
+       width="2.2622108"
+       height="7.7326479"
+       x="29.132555"
+       y="11.370697" />
+    <path
+       style="fill:url(#linearGradient4197-7);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 22.499641,9.6852867 -0.01309,1.3141063 c 0,0 -0.279375,0.695239 -0.498394,0.842143 -0.583486,0.391362 -1.682438,0.804466 -1.682438,0.804466 l -1.190713,-10e-7 c -0.520389,-0.02751 0.340234,-0.122332 -1.842144,-0.110299 l -0.542738,0.447381 c -0.176833,0.145764 -0.193333,0.469266 -0.123393,0.6875 0.08204,0.255999 0.596717,0.743084 0.596717,0.743084 0.01713,0.213098 1.145554,0.158656 1.615606,0.258523 l 1.113512,-0.06997 0.866726,0.176814 1.00482,0.516549 1.021369,0.5625 0.7812 [...]
+       id="path3960-0-4"
+       sodipodi:nodetypes="ccscccssccccccccssccccsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient4175-46);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 21.279067,5.243065 c 0,0 -0.864273,-0.2489256 -1.443927,0.044344 -0.70956,0.3589861 -2.635122,2.1909541 -2.635122,2.1909541 l -1.389702,1.2564276 c 0,0 -1.104461,0.780354 -1.329048,1.2927373 -0.140325,0.320144 -0.692423,1.042346 -0.434287,1.278035 0,0 0.242673,0.235308 0.772976,0.309047 0.530303,0.07374 1.389701,-0.638095 1.389701,-0.638095 l 1.53125,-1.3749983 1.269762,-0.741726 0.491726,-0.355239 0.278036,-0.2171426 2.443099,-2.642618 C 21.441363,5.2813382 21.279067,5.24306 [...]
+       id="path3983-4"
+       sodipodi:nodetypes="csccscsccccccc"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:#0d0b06;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       id="rect4212"
+       width="2.2210789"
+       height="7.4035988"
+       x="29.173687"
+       y="11.699746" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.09999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 18.555016,13.104855 -0.110147,1.037779 -0.734318,-0.01777 c 0,0 -0.389617,-0.174751 -0.477307,-0.328567 -0.07209,-0.126452 0,-0.418174 0,-0.418174 0,-0.155527 0.200218,-0.282651 0.367159,-0.358436 0.07557,-0.0343 0.25701,-0.02987 0.25701,-0.02987 l 0.697603,0.115036 z"
+       id="path4268"
+       sodipodi:nodetypes="cccssscc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;fill-opacity:1;stroke:none;display:inline"
+       d="m 28.968031,16.964524 0,-1.686372 -2.467866,0.04113 -1.398458,-0.452442 c 0,0 -0.964908,-0.709613 -1.521851,-0.904884 -0.470245,-0.164874 -1.033801,-0.288768 -1.562982,-0.37018 l -1.069409,-0.164524 -0.987146,0 -1.316196,0.04113 0.08226,0.658097 0.946016,0.08226 0.987147,0.04113 1.028277,0.493573 c 0,0 0.584391,0.442159 0.904885,0.616967 0.339801,0.185339 1.069408,0.452442 1.069408,0.452442 l 1.231113,0.745142 c 0.388462,0.23512 0.810343,0.414981 1.236754,0.571053 0.387323,0.14 [...]
+       id="path4270"
+       sodipodi:nodetypes="ccccsscccccccscsscsc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 15.18911,11.370698 c -0.287918,-0.109683 -0.575835,-0.219366 -0.863753,-0.329049 0.594291,-0.536642 1.20232,-1.0585623 1.766868,-1.6270723 0.444514,-0.42915 0.918257,-0.706724 1.394946,-1.1008716 0.281295,-0.253216 0.653857,-0.536296 0.965672,-0.751322 0.400107,-0.287782 0.660647,-0.723125 1.092134,-0.964017 0.186134,-0.106708 0.365481,-0.235485 0.555742,-0.328776 0.268538,-0.01343 0.66047,0.01428 0.929008,8.5e-4 0.06855,0.08226 0.01371,0 0.08226,0.08226 -0.67532,0.662346 -1. [...]
+       id="path4274"
+       sodipodi:nodetypes="cccsssccccsscc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 23.168547,9.5197977 0.658096,-0.699228 c 0,0 0.02532,1.169685 -0.123393,1.7275053 -0.113731,0.426608 -0.575836,1.192802 -0.575836,1.192802 l -1.110539,0.575836 c 0,0 0.682272,-0.768009 0.822621,-1.275065 0.140349,-0.507056 -0.08226,-1.1105393 -0.08226,-1.1105393 l 0.411311,-0.411311 z"
+       id="path3659-8"
+       sodipodi:nodetypes="ccscczcc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="top frame">
+    <path
+       style="fill:none;stroke:#9d4ae0;stroke-width:0.89999998000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+       d="m 4.544988,0.45511225 27.002571,0 0,31.15167175 -31.136248,0 0.04113,-27.1336764 4.092546,-4.01799535 z"
+       id="rect2911-2"
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/src/XSection/XAVERAGE.xpm b/share/metview/icons_mv5/MXAVERAGE.xpm
old mode 100644
new mode 100755
similarity index 100%
rename from src/XSection/XAVERAGE.xpm
rename to share/metview/icons_mv5/MXAVERAGE.xpm
diff --git a/share/metview/icons/MAVERAGEVIEW.xpm b/share/metview/icons_mv5/MXAVERAGEVIEW.xpm
old mode 100644
new mode 100755
similarity index 100%
copy from share/metview/icons/MAVERAGEVIEW.xpm
copy to share/metview/icons_mv5/MXAVERAGEVIEW.xpm
diff --git a/src/XSection/XSECTION.xpm b/share/metview/icons_mv5/MXSECTION.xpm
old mode 100644
new mode 100755
similarity index 100%
rename from src/XSection/XSECTION.xpm
rename to share/metview/icons_mv5/MXSECTION.xpm
diff --git a/share/metview/icons/MXSECTVIEW.xpm b/share/metview/icons_mv5/MXSECTIONVIEW.xpm
old mode 100644
new mode 100755
similarity index 100%
copy from share/metview/icons/MXSECTVIEW.xpm
copy to share/metview/icons_mv5/MXSECTIONVIEW.xpm
diff --git a/share/metview/icons/MXSECTVIEW.xpm b/share/metview/icons_mv5/MXSECTVIEW.xpm
similarity index 100%
copy from share/metview/icons/MXSECTVIEW.xpm
copy to share/metview/icons_mv5/MXSECTVIEW.xpm
diff --git a/share/metview/icons_mv5/Makefile.am b/share/metview/icons_mv5/Makefile.am
new file mode 100644
index 0000000..8785b71
--- /dev/null
+++ b/share/metview/icons_mv5/Makefile.am
@@ -0,0 +1,136 @@
+svg_icons = \
+	BINNING.svg \
+        Broken.svg \
+        BUFR.svg \
+        BUFRPICKER.svg \
+	CARTESIANVIEW.svg \
+	DIVROT.svg \
+        FLEXTRA_FILE.svg FLEXTRA_PREPARE.svg FLEXTRA_RUN.svg FLEXTRA_VISUALISER.svg \
+        FOLDER.svg \
+        GEOPOINTS.svg \
+	GEO_TO_GRIB.svg \
+        GRIB.svg \
+	GRIB_TO_GEO.svg \
+	HOME.svg \
+        INPUTVISUALISER.svg \
+	Interpolation.svg \
+	KML.svg \
+	MACRO.svg \
+        MCOAST.svg \
+	MCONT.svg \
+        MGRAPH.svg \
+        MLEGEND.svg \
+        MSYMB.svg \
+        MTEXT.svg \
+        MWIND.svg \
+        NAMELIST.svg \
+        NETCDF.svg NETCDF_RTTOV_INPUT.svg \
+        NETCDFPLUS.svg \
+        NOTE.svg  \
+        OBSFILTER.svg \
+	ODB_DB.svg ODB_FILTER.svg ODB_VISUALISER.svg \
+	OPERA_RADAR_FILTER.svg \
+	PDF.svg \
+        PERCENTILE.svg \
+        PNG.svg \
+        POBS.svg \
+        POTTF.svg \
+        PRODUCT.svg \
+        PSFILE.svg \
+	READ_SCIN.svg \
+        READ_TIGGE.svg \
+        RETRIEVE.svg \
+        RETRIEVE_SCIN.svg \
+        RETRIEVE_TIGGE.svg \
+        RTTOV_OUTPUT_FILE.svg RTTOV_RUN.svg RTTOV_VISUALISER.svg \
+        SCM_INPUT_DATA.svg SCM_OUTPUT_DATA.svg SCM_RUN.svg SCM_VIS.svg \
+        SHELL.svg \
+        SQL.svg \
+        SVG.svg \
+        SYSTEM.svg \
+	TABLE.svg TABLEREADER.svg TABLEVISUALISER.svg \
+	VELSTR.svg \
+        WASTEBASKET.svg \
+	WCS_CLIENT.svg \
+        WMS_CLIENT.svg
+
+icons =  ALIGN_BOTTOM.xpm \
+         ALIGN_LEFT.xpm \
+         ALIGN_RIGHT.xpm \
+         ALIGN_TOP.xpm \
+         ANNOTATIONVIEW.xpm\
+	 AVERAGE.xpm \
+	 AVERAGEVIEW.xpm \
+         BINARY.xpm \
+         CLEANFILE.xpm \
+         COMPUTE.xpm \
+         DATACOVERAGE.xpm \
+         DISTR_HCENTER.xpm \
+         DISTR_VCENTER.xpm \
+         DRAWING_PRIORITY.xpm \
+         ECFS.xpm \
+         GDDRIVER.xpm \
+         GEOVIEW.xpm \
+         GIF.xpm \
+         GRIBVECTORS.xpm \
+         GeoToKML.xpm \
+         help_area.xpm \
+         help_line.xpm \
+         help_map.xpm \
+         help_point.xpm \
+         help_station.xpm \
+         HOVMOELLERDATA.xpm \
+         JPEG.xpm \
+         LLMATRIX.xpm \
+         MACROPARAM.xpm \
+         MAGML.xpm \
+         MAPVIEW.xpm \
+         MAVERAGEVIEW.xpm \
+         MAXIS.xpm \
+         MetPlus.xpm \
+         MTAYLOR.xpm \
+         MVPROFILE.xpm \
+         MVPROFILEVIEW.xpm \
+         MVPROFVIEW.xpm \
+         MXAVERAGE.xpm \
+         MXAVERAGEVIEW.xpm \
+         MXSECTION.xpm \
+	 MXSECTIONVIEW.xpm \
+	 MXSECTVIEW.xpm \
+         NEWS.xpm \
+         OBSTAT_SCATTER.xpm OBSTAT_CURVE.xpm OBSTAT.xpm \
+         OVERLAY_CONTROL.xpm \
+         PAXIS.xpm \
+         PCOAST.xpm \
+         PCONT.xpm \
+         PGRAPH.xpm \
+         PLOTPAGE.xpm \
+         PLOTSUBPAGE.xpm \
+         PREFERENCES.xpm \
+         PSOUTPUT.xpm \
+         PSYMB.xpm \
+         PTEXT.xpm \
+         PWIND.xpm \
+         READ.xpm \
+	 RELHUM.xpm \
+         REPROJECTION.xpm \
+         SERVICE.xpm \
+         SIMPLE_FORMULA.xpm \
+         STATIONS.xpm \
+         SUBPAGEDETAILS.xpm \
+         SUPERPAGE.xpm \
+         SVGOUTPUT.xpm \
+         TAR.xpm \
+         TIFF.xpm \
+         VPROF.xpm \
+         VPROFVIEW.xpm \
+         VPROFILE.xpm \
+         WEBACCESS.xpm \
+         XAVERAGE.xpm \
+         XSECT.xpm \
+         XSECTVIEW.xpm \
+         XSECTION.xpm        
+
+sharedir	= $(datadir)/metview/icons_mv5
+share_DATA	= $(svg_icons) $(icons)
+EXTRA_DIST  = $(svg_icons) $(icons)
diff --git a/share/metview/icons_mv5/Makefile.in b/share/metview/icons_mv5/Makefile.in
new file mode 100644
index 0000000..f21d957
--- /dev/null
+++ b/share/metview/icons_mv5/Makefile.in
@@ -0,0 +1,635 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = share/metview/icons_mv5
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/metview_config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(sharedir)"
+DATA = $(share_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AXX = @AXX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPLIBS = @CPPLIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DBMLIB = @DBMLIB@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
+EGREP = @EGREP@
+EMOS_LIB_NAME = @EMOS_LIB_NAME@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FDBLIB = @FDBLIB@
+FFIXED_FLAGS = @FFIXED_FLAGS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FLIBS = @FLIBS@
+GREP = @GREP@
+GRIBAPI_LIBS = @GRIBAPI_LIBS@
+GRIB_API_INC = @GRIB_API_INC@
+GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LDFLAGS_INLINE = @LDFLAGS_INLINE@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBNAME = @LIBNAME@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAGICS_CFLAGS = @MAGICS_CFLAGS@
+MAGICS_LIBS = @MAGICS_LIBS@
+MAGPLUS_CPPFLAGS = @MAGPLUS_CPPFLAGS@
+MAGPLUS_HOME = @MAGPLUS_HOME@
+MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
+MAGPLUS_LIB = @MAGPLUS_LIB@
+MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
+MAKEINFO = @MAKEINFO@
+MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
+MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
+METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
+METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
+METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
+METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
+METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
+METVIEW_NETCDF_FLAGS = @METVIEW_NETCDF_FLAGS@
+METVIEW_NETCDF_LIB = @METVIEW_NETCDF_LIB@
+METVIEW_PACKAGE_NAME = @METVIEW_PACKAGE_NAME@
+METVIEW_PACKAGE_RELEASE_DATE = @METVIEW_PACKAGE_RELEASE_DATE@
+METVIEW_PACKAGE_VERSION = @METVIEW_PACKAGE_VERSION@
+METVIEW_UTIL_LIB = @METVIEW_UTIL_LIB@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MVINCLUDE = @MVINCLUDE@
+MVSTARTDIR = @MVSTARTDIR@
+MV_EMOSLIB = @MV_EMOSLIB@
+MV_ENVIRON = @MV_ENVIRON@
+MV_MOTIF_FLAGS = @MV_MOTIF_FLAGS@
+MV_MOTIF_UTIL_LIB = @MV_MOTIF_UTIL_LIB@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+ODB1_BIN = @ODB1_BIN@
+ODB1_USE_SCRIPT = @ODB1_USE_SCRIPT@
+ODB1_VERSION = @ODB1_VERSION@
+ODB_CPPFLAGS = @ODB_CPPFLAGS@
+ODB_LDFLAGS = @ODB_LDFLAGS@
+ODB_LIBDIR = @ODB_LIBDIR@
+ODB_LIBS = @ODB_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@
+PKG_CONFIG = @PKG_CONFIG@
+PROJ4_LIBS = @PROJ4_LIBS@
+QMAKE = @QMAKE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_CPPFLAGS = @QT_CPPFLAGS@
+QT_CXXFLAGS = @QT_CXXFLAGS@
+QT_DEFINES = @QT_DEFINES@
+QT_INCPATH = @QT_INCPATH@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LFLAGS = @QT_LFLAGS@
+QT_LIBS = @QT_LIBS@
+QT_PATH = @QT_PATH@
+QT_VERSION = @QT_VERSION@
+QT_VERSION_MAJOR = @QT_VERSION_MAJOR@
+RANLIB = @RANLIB@
+RCC = @RCC@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SITE_NAME = @SITE_NAME@
+SITE_WMO_CODE = @SITE_WMO_CODE@
+STANDARD_METVIEW_LIBS = @STANDARD_METVIEW_LIBS@
+STANDARD_METVIEW_LIBS_NO_UTIL = @STANDARD_METVIEW_LIBS_NO_UTIL@
+STARTUP_SCRIPT = @STARTUP_SCRIPT@
+STRIP = @STRIP@
+UIC = @UIC@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+svg_icons = \
+	BINNING.svg \
+        Broken.svg \
+        BUFR.svg \
+        BUFRPICKER.svg \
+	CARTESIANVIEW.svg \
+	DIVROT.svg \
+        FLEXTRA_FILE.svg FLEXTRA_PREPARE.svg FLEXTRA_RUN.svg FLEXTRA_VISUALISER.svg \
+        FOLDER.svg \
+        GEOPOINTS.svg \
+	GEO_TO_GRIB.svg \
+        GRIB.svg \
+	GRIB_TO_GEO.svg \
+	HOME.svg \
+        INPUTVISUALISER.svg \
+	Interpolation.svg \
+	KML.svg \
+	MACRO.svg \
+        MCOAST.svg \
+	MCONT.svg \
+        MGRAPH.svg \
+        MLEGEND.svg \
+        MSYMB.svg \
+        MTEXT.svg \
+        MWIND.svg \
+        NAMELIST.svg \
+        NETCDF.svg NETCDF_RTTOV_INPUT.svg \
+        NETCDFPLUS.svg \
+        NOTE.svg  \
+        OBSFILTER.svg \
+	ODB_DB.svg ODB_FILTER.svg ODB_VISUALISER.svg \
+	OPERA_RADAR_FILTER.svg \
+	PDF.svg \
+        PERCENTILE.svg \
+        PNG.svg \
+        POBS.svg \
+        POTTF.svg \
+        PRODUCT.svg \
+        PSFILE.svg \
+	READ_SCIN.svg \
+        READ_TIGGE.svg \
+        RETRIEVE.svg \
+        RETRIEVE_SCIN.svg \
+        RETRIEVE_TIGGE.svg \
+        RTTOV_OUTPUT_FILE.svg RTTOV_RUN.svg RTTOV_VISUALISER.svg \
+        SCM_INPUT_DATA.svg SCM_OUTPUT_DATA.svg SCM_RUN.svg SCM_VIS.svg \
+        SHELL.svg \
+        SQL.svg \
+        SVG.svg \
+        SYSTEM.svg \
+	TABLE.svg TABLEREADER.svg TABLEVISUALISER.svg \
+	VELSTR.svg \
+        WASTEBASKET.svg \
+	WCS_CLIENT.svg \
+        WMS_CLIENT.svg
+
+icons = ALIGN_BOTTOM.xpm \
+         ALIGN_LEFT.xpm \
+         ALIGN_RIGHT.xpm \
+         ALIGN_TOP.xpm \
+         ANNOTATIONVIEW.xpm\
+	 AVERAGE.xpm \
+	 AVERAGEVIEW.xpm \
+         BINARY.xpm \
+         CLEANFILE.xpm \
+         COMPUTE.xpm \
+         DATACOVERAGE.xpm \
+         DISTR_HCENTER.xpm \
+         DISTR_VCENTER.xpm \
+         DRAWING_PRIORITY.xpm \
+         ECFS.xpm \
+         GDDRIVER.xpm \
+         GEOVIEW.xpm \
+         GIF.xpm \
+         GRIBVECTORS.xpm \
+         GeoToKML.xpm \
+         help_area.xpm \
+         help_line.xpm \
+         help_map.xpm \
+         help_point.xpm \
+         help_station.xpm \
+         HOVMOELLERDATA.xpm \
+         JPEG.xpm \
+         LLMATRIX.xpm \
+         MACROPARAM.xpm \
+         MAGML.xpm \
+         MAPVIEW.xpm \
+         MAVERAGEVIEW.xpm \
+         MAXIS.xpm \
+         MetPlus.xpm \
+         MTAYLOR.xpm \
+         MVPROFILE.xpm \
+         MVPROFILEVIEW.xpm \
+         MVPROFVIEW.xpm \
+         MXAVERAGE.xpm \
+         MXAVERAGEVIEW.xpm \
+         MXSECTION.xpm \
+	 MXSECTIONVIEW.xpm \
+	 MXSECTVIEW.xpm \
+         NEWS.xpm \
+         OBSTAT_SCATTER.xpm OBSTAT_CURVE.xpm OBSTAT.xpm \
+         OVERLAY_CONTROL.xpm \
+         PAXIS.xpm \
+         PCOAST.xpm \
+         PCONT.xpm \
+         PGRAPH.xpm \
+         PLOTPAGE.xpm \
+         PLOTSUBPAGE.xpm \
+         PREFERENCES.xpm \
+         PSOUTPUT.xpm \
+         PSYMB.xpm \
+         PTEXT.xpm \
+         PWIND.xpm \
+         READ.xpm \
+	 RELHUM.xpm \
+         REPROJECTION.xpm \
+         SERVICE.xpm \
+         SIMPLE_FORMULA.xpm \
+         STATIONS.xpm \
+         SUBPAGEDETAILS.xpm \
+         SUPERPAGE.xpm \
+         SVGOUTPUT.xpm \
+         TAR.xpm \
+         TIFF.xpm \
+         VPROF.xpm \
+         VPROFVIEW.xpm \
+         VPROFILE.xpm \
+         WEBACCESS.xpm \
+         XAVERAGE.xpm \
+         XSECT.xpm \
+         XSECTVIEW.xpm \
+         XSECTION.xpm        
+
+sharedir = $(datadir)/metview/icons_mv5
+share_DATA = $(svg_icons) $(icons)
+EXTRA_DIST = $(svg_icons) $(icons)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/metview/icons_mv5/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu share/metview/icons_mv5/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-shareDATA: $(share_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(sharedir)" || $(MKDIR_P) "$(DESTDIR)$(sharedir)"
+	@list='$(share_DATA)'; test -n "$(sharedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sharedir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(sharedir)" || exit $$?; \
+	done
+
+uninstall-shareDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(share_DATA)'; test -n "$(sharedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(sharedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(sharedir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(sharedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-shareDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-shareDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-shareDATA \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	uninstall uninstall-am uninstall-shareDATA
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/share/metview/icons_mv5/MetPlus.xpm b/share/metview/icons_mv5/MetPlus.xpm
new file mode 100755
index 0000000..22254a1
--- /dev/null
+++ b/share/metview/icons_mv5/MetPlus.xpm
@@ -0,0 +1,515 @@
+/* XPM */
+static char * MetPlus_xpm[] = {
+"32 32 480 2",
+"  	c #000000",
+". 	c #FFFFFF",
+"+ 	c #D6D6FF",
+"@ 	c #E1E1FF",
+"# 	c #C8C8FF",
+"$ 	c #CFCFFF",
+"% 	c #DFDFFF",
+"& 	c #CECEFF",
+"* 	c #D7D7FF",
+"= 	c #BFBFFF",
+"- 	c #C5C5FF",
+"; 	c #CDCDFF",
+"> 	c #BCBCFF",
+", 	c #C4C4FF",
+"' 	c #C3C3FF",
+") 	c #B3B3FF",
+"! 	c #D4D4FF",
+"~ 	c #C6C6FF",
+"{ 	c #C9C9FF",
+"] 	c #BEBEFF",
+"^ 	c #D1D1FF",
+"/ 	c #D0D0FF",
+"( 	c #E4E3FF",
+"_ 	c #D9D9FF",
+": 	c #D7D8FF",
+"< 	c #E5E4FF",
+"[ 	c #F7F3FF",
+"} 	c #ECDFFF",
+"| 	c #D5D9D0",
+"1 	c #E6DFE8",
+"2 	c #F3EDEC",
+"3 	c #FDF3F4",
+"4 	c #C8CED8",
+"5 	c #CBCBD4",
+"6 	c #B8C1C4",
+"7 	c #35AAB7",
+"8 	c #C0D2E0",
+"9 	c #53A0B0",
+"0 	c #A2D8D0",
+"a 	c #61AAC9",
+"b 	c #C1B8D2",
+"c 	c #4AD8CD",
+"d 	c #B9C2D9",
+"e 	c #8FB9C4",
+"f 	c #71BFCE",
+"g 	c #A4B7B1",
+"h 	c #7AD5D1",
+"i 	c #A1D5D1",
+"j 	c #37A0C0",
+"k 	c #A4CBD9",
+"l 	c #2FA9C0",
+"m 	c #97CAD5",
+"n 	c #41A6BE",
+"o 	c #9AD0D2",
+"p 	c #4EB8D8",
+"q 	c #66B5B6",
+"r 	c #FBFBF9",
+"s 	c #97B7BB",
+"t 	c #F9E5DD",
+"u 	c #57CBC7",
+"v 	c #F6FDF2",
+"w 	c #35ADC2",
+"x 	c #93C4D3",
+"y 	c #2FCAC3",
+"z 	c #CAECE6",
+"A 	c #00C0D8",
+"B 	c #BCBCD2",
+"C 	c #7CE4D8",
+"D 	c #40B3CF",
+"E 	c #5DBFBA",
+"F 	c #30EBE7",
+"G 	c #91CCE1",
+"H 	c #09CAC5",
+"I 	c #FFFFF7",
+"J 	c #63C7C0",
+"K 	c #B1D5F9",
+"L 	c #4FE6D9",
+"M 	c #8A97C4",
+"N 	c #21DFDD",
+"O 	c #3BA7BF",
+"P 	c #F9F7F6",
+"Q 	c #FEFDFE",
+"R 	c #AFC1C0",
+"S 	c #FFFDFD",
+"T 	c #67CDCE",
+"U 	c #E3F6F3",
+"V 	c #C4CDE0",
+"W 	c #77B5CF",
+"X 	c #32C7BF",
+"Y 	c #EEDFDB",
+"Z 	c #00CAE3",
+"` 	c #EACBCE",
+" .	c #7DF0E7",
+"..	c #7BAFC8",
+"+.	c #7AD4CB",
+"@.	c #46ECE2",
+"#.	c #A0C3DB",
+"$.	c #85CFC9",
+"%.	c #F7F8F8",
+"&.	c #89CAC7",
+"*.	c #FFF9F6",
+"=.	c #43E1D9",
+"-.	c #F0C0CE",
+";.	c #2FF4E7",
+">.	c #1D9EB8",
+",.	c #F4F4F1",
+"'.	c #F9FDFB",
+").	c #FFFEFF",
+"!.	c #37D7D5",
+"~.	c #A6CDCE",
+"{.	c #BDEDEA",
+"].	c #FFF3EA",
+"^.	c #B8C0E6",
+"/.	c #83CAC5",
+"(.	c #FFF6F2",
+"_.	c #00CDC9",
+":.	c #FFE4E2",
+"<.	c #66E8E4",
+"[.	c #9ECCD4",
+"}.	c #5DCCDF",
+"|.	c #57CCD2",
+"1.	c #94CAE1",
+"2.	c #89D2CB",
+"3.	c #DAF3F1",
+"4.	c #AFD1D2",
+"5.	c #EBF6F4",
+"6.	c #60C4C3",
+"7.	c #FFE0DF",
+"8.	c #66E3DB",
+"9.	c #0B9DB7",
+"0.	c #F4F4F3",
+"a.	c #34C8C8",
+"b.	c #E3DAD8",
+"c.	c #E5F1F0",
+"d.	c #F8EDEB",
+"e.	c #F6EAE5",
+"f.	c #53E9E5",
+"g.	c #FFFDFE",
+"h.	c #57B5B5",
+"i.	c #FFE9E9",
+"j.	c #72D8D7",
+"k.	c #B5DED5",
+"l.	c #5FB4E5",
+"m.	c #48B4C0",
+"n.	c #A0C7DA",
+"o.	c #CBE9E1",
+"p.	c #F8F8F8",
+"q.	c #A2CECE",
+"r.	c #DDF4F2",
+"s.	c #57C5C5",
+"t.	c #FFDCDC",
+"u.	c #75E5DF",
+"v.	c #15AFC7",
+"w.	c #FAF7F7",
+"x.	c #59C8C9",
+"y.	c #F5F3F4",
+"z.	c #F6F4F5",
+"A.	c #79BFC0",
+"B.	c #68A1A2",
+"C.	c #FFF0F1",
+"D.	c #9ED4D4",
+"E.	c #97D5D0",
+"F.	c #DBE8EE",
+"G.	c #68BAD7",
+"H.	c #78AEC0",
+"I.	c #B1DDDA",
+"J.	c #8BC5C6",
+"K.	c #D9EEEF",
+"L.	c #8BCFD0",
+"M.	c #CFE4E5",
+"N.	c #78BFBC",
+"O.	c #40A1BD",
+"P.	c #F9FDEF",
+"Q.	c #FFFFF1",
+"R.	c #FFFFFB",
+"S.	c #FFFFFD",
+"T.	c #F8FFF6",
+"U.	c #FBFEFC",
+"V.	c #FFFFFE",
+"W.	c #F3F5EF",
+"X.	c #F9EDEA",
+"Y.	c #FFFEFA",
+"Z.	c #FFFFFC",
+"`.	c #FBF2F9",
+" +	c #FFF6ED",
+".+	c #FFFEF9",
+"++	c #F6F4F0",
+"@+	c #ECF2EE",
+"#+	c #FEFFFC",
+"$+	c #FDEAE4",
+"%+	c #E9EBEF",
+"&+	c #D3D1FD",
+"*+	c #BFBBFA",
+"=+	c #C2BFFC",
+"-+	c #B8B0F7",
+";+	c #BCB7FA",
+">+	c #D4D3FB",
+",+	c #C4C2FE",
+"'+	c #BBB1F7",
+")+	c #FFDADF",
+"!+	c #FFEDEB",
+"~+	c #FFF2F4",
+"{+	c #FFEFEE",
+"]+	c #FFEBEA",
+"^+	c #FFE5E3",
+"/+	c #FFEEED",
+"(+	c #FFE8EA",
+"_+	c #FFF7F7",
+":+	c #FFF5F4",
+"<+	c #FDFDF4",
+"[+	c #F5F6E5",
+"}+	c #FFFFF2",
+"|+	c #FCFFF5",
+"1+	c #DAE1D7",
+"2+	c #F5FCFA",
+"3+	c #DEDFF3",
+"4+	c #EDF1EE",
+"5+	c #FAFCF8",
+"6+	c #E0EAE6",
+"7+	c #E8E9EA",
+"8+	c #EEF2F1",
+"9+	c #EAEFED",
+"0+	c #ECEFF0",
+"a+	c #E8E9EB",
+"b+	c #E9EBEC",
+"c+	c #FBFFFF",
+"d+	c #F8F7F4",
+"e+	c #CCD0D1",
+"f+	c #EFEFEE",
+"g+	c #F7F8F7",
+"h+	c #DCE1DB",
+"i+	c #E3E5FE",
+"j+	c #DDD2E9",
+"k+	c #E4E0DA",
+"l+	c #FFEDFF",
+"m+	c #A0D6D0",
+"n+	c #FAECED",
+"o+	c #F3F3F2",
+"p+	c #EDEEEC",
+"q+	c #F0EEF0",
+"r+	c #D3D3D3",
+"s+	c #DCDDDE",
+"t+	c #FDFFFF",
+"u+	c #FCF9F9",
+"v+	c #EAEBEA",
+"w+	c #A6D4D5",
+"x+	c #E2E0E1",
+"y+	c #F8F3F1",
+"z+	c #F5EDE2",
+"A+	c #FCDBED",
+"B+	c #C9BED3",
+"C+	c #F3E5D9",
+"D+	c #A3BBF1",
+"E+	c #73DED4",
+"F+	c #FFEFEF",
+"G+	c #F7F6F5",
+"H+	c #F1F1F0",
+"I+	c #F3F2F3",
+"J+	c #D7D7D6",
+"K+	c #D4D4D3",
+"L+	c #F4F5F4",
+"M+	c #FDFAFA",
+"N+	c #ECEDEC",
+"O+	c #67D4D2",
+"P+	c #DAEBE3",
+"Q+	c #FFFFF9",
+"R+	c #A1D9E0",
+"S+	c #D2E3EC",
+"T+	c #BAC7D7",
+"U+	c #90B7CD",
+"V+	c #FCFDFC",
+"W+	c #9BE2D5",
+"X+	c #9BAAD9",
+"Y+	c #5FE8DF",
+"Z+	c #FFECE7",
+"`+	c #FFFDFB",
+" @	c #F1F1EF",
+".@	c #DEDFE0",
+"+@	c #F5F8F7",
+"@@	c #D9D9D8",
+"#@	c #F5F5F5",
+"$@	c #FFFFFA",
+"%@	c #31B5B7",
+"&@	c #A3B8D2",
+"*@	c #F7FFF8",
+"=@	c #6F96AF",
+"-@	c #829ACC",
+";@	c #A6FBEF",
+">@	c #91B0C4",
+",@	c #EBE9E5",
+"'@	c #66CBD5",
+")@	c #D4E6E8",
+"!@	c #42D7EA",
+"~@	c #AADED6",
+"{@	c #DAF3EF",
+"]@	c #F4ECE6",
+"^@	c #E6E4E0",
+"/@	c #E7E5E0",
+"(@	c #ECDEE7",
+"_@	c #236C82",
+":@	c #F2C0D6",
+"<@	c #0A8AA6",
+"[@	c #86BBB0",
+"}@	c #B6A9B5",
+"|@	c #5491AC",
+"1@	c #3CBBB9",
+"2@	c #00ACAA",
+"3@	c #87D4CA",
+"4@	c #1C8091",
+"5@	c #F9D2E8",
+"6@	c #246E7E",
+"7@	c #F0CFDF",
+"8@	c #0083A3",
+"9@	c #3EA498",
+"0@	c #1D82A8",
+"a@	c #1290A4",
+"b@	c #78B7CC",
+"c@	c #D9C7D2",
+"d@	c #66A5BA",
+"e@	c #7AA6BC",
+"f@	c #CDD6E0",
+"g@	c #8EADBA",
+"h@	c #E5D5E2",
+"i@	c #8C99AA",
+"j@	c #96BECD",
+"k@	c #DAD9DB",
+"l@	c #F6F5FF",
+"m@	c #F9F8FF",
+"n@	c #FEFEFF",
+"o@	c #FCFCFF",
+"p@	c #FBFBFF",
+"q@	c #FDFCFF",
+"r@	c #EEEEFF",
+"s@	c #F0F0FF",
+"t@	c #F1F1FF",
+"u@	c #FBFAFF",
+"v@	c #F3F3FF",
+"w@	c #D8D7F5",
+"x@	c #DCDBF7",
+"y@	c #C8C7F6",
+"z@	c #CBCBF6",
+"A@	c #D0D0F6",
+"B@	c #C8C5F6",
+"C@	c #D0CFF6",
+"D@	c #D5D4F6",
+"E@	c #C7C7F6",
+"F@	c #E0DFF6",
+"G@	c #B4B4F6",
+"H@	c #DFDCF6",
+"I@	c #EFEFF6",
+"J@	c #D1D1F6",
+"K@	c #E9E8F6",
+"L@	c #CAC7F6",
+"M@	c #E6E5F6",
+"N@	c #D3D3F6",
+"O@	c #E0DDF6",
+"P@	c #CACAF5",
+"Q@	c #DAD9FF",
+"R@	c #DAD8FF",
+"S@	c #E6DCFF",
+"T@	c #E3D9FF",
+"U@	c #FCFBF6",
+"V@	c #DDDACB",
+"W@	c #FFFFED",
+"X@	c #37A0B8",
+"Y@	c #F8F6F7",
+"Z@	c #FAFDFC",
+"`@	c #FFFEFE",
+" #	c #F2F7F3",
+".#	c #E8E2E3",
+"+#	c #F4F8F3",
+"@#	c #9AC0C2",
+"##	c #DBE8E3",
+"$#	c #58A5CA",
+"%#	c #62BDC1",
+"&#	c #0093A1",
+"*#	c #CFE8FF",
+"=#	c #FAF8F9",
+"-#	c #FCFFFE",
+";#	c #EAE7E5",
+">#	c #7CACB3",
+",#	c #8FCCD5",
+"'#	c #A1D8DE",
+")#	c #6BA4B4",
+"!#	c #7EB7C5",
+"~#	c #207E7C",
+"{#	c #F6FFFD",
+"]#	c #E6EEF4",
+"^#	c #13758D",
+"/#	c #BAC8DE",
+"(#	c #98B3D1",
+"_#	c #D6C6D8",
+":#	c #8199AA",
+"<#	c #FFF6FF",
+"[#	c #97D7CC",
+"}#	c #D4B2CD",
+"|#	c #F1F8F4",
+"1#	c #FFFDF5",
+"2#	c #FFE9FF",
+"3#	c #6697B6",
+"4#	c #C1BDD7",
+"5#	c #B5B2C6",
+"6#	c #FFDFF3",
+"7#	c #ECDBEC",
+"8#	c #EAD6F9",
+"9#	c #A3B9C9",
+"0#	c #E6D7EC",
+"a#	c #FFF4FB",
+"b#	c #F9D6EA",
+"c#	c #BDBFBF",
+"d#	c #FFFBFF",
+"e#	c #8FE7F8",
+"f#	c #829DB7",
+"g#	c #5AACB4",
+"h#	c #A7AFD2",
+"i#	c #999EB6",
+"j#	c #E4D8EE",
+"k#	c #297F96",
+"l#	c #879AB1",
+"m#	c #CDC4DD",
+"n#	c #699CB3",
+"o#	c #A9DADE",
+"p#	c #3B789D",
+"q#	c #9FCCE2",
+"r#	c #2790B1",
+"s#	c #91C7DE",
+"t#	c #65B0BB",
+"u#	c #4088A0",
+"v#	c #96DAD9",
+"w#	c #006294",
+"x#	c #BBF3ED",
+"y#	c #46C4C0",
+"z#	c #80C2C2",
+"A#	c #C9C9C6",
+"B#	c #F3F3E3",
+"C#	c #E0F7F0",
+"D#	c #F8F6E9",
+"E#	c #9FD7C9",
+"F#	c #FFFFF8",
+"G#	c #C1CCBB",
+"H#	c #FFFFF3",
+"I#	c #FDF9EB",
+"J#	c #CBF2E7",
+"K#	c #EEEDDC",
+"L#	c #F4F1ED",
+"M#	c #EFECEA",
+"N#	c #FAEFFF",
+"O#	c #F2F1FF",
+"P#	c #EAECFF",
+"Q#	c #E3E2FF",
+"R#	c #D0D1FF",
+"S#	c #FFD9D1",
+"T#	c #FFD4CD",
+"U#	c #F5FFFF",
+"V#	c #C0C6FF",
+"W#	c #EBE9FF",
+"X#	c #F6F6FF",
+"Y#	c #CDCAFF",
+"Z#	c #F1F3FF",
+"`#	c #E1DFFF",
+" $	c #F8FAFD",
+".$	c #D4D6FF",
+"+$	c #CFCEFF",
+"@$	c #D3D0FF",
+"#$	c #E5E2FF",
+"$$	c #E9EDFE",
+"%$	c #C7C8FF",
+"&$	c #E2E9FF",
+"*$	c #FFD9D5",
+"=$	c #FFD4D5",
+"-$	c #FCF7F5",
+";$	c #E0E0FF",
+">$	c #F3F2FF",
+",$	c #CFD2FF",
+"'$	c #CBD7FF",
+")$	c #FFD5D0",
+"!$	c #FFDAD4",
+"~$	c #FFE3DA",
+"{$	c #C6C5FF",
+"]$	c #DEDEFF",
+"                                                                ",
+"  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   ",
+"  . + @ # $ % & * = - ; > , ' & ) ! ~ { ) ] ^ @ / ^ ^ ^ ^ ; .   ",
+"  . ( _ : % < [ } . . . . . . . . . . . . . . . . . . . . . .   ",
+"  . | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q .   ",
+"  . r . . . . s t u v w x y z A B C D E F G H I J K L M N O .   ",
+"  . P . Q . . R S T U V W X Y Z `  ...+. at .#.$.%.&.*.=.-.;.>..   ",
+"  . ,.. '.).. !.. ~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9..   ",
+"  . 0.. '.Q . a.. b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v..   ",
+"  . w.. . . . x.. y.z.. . A.. B.C.D.E.F.G.H.I.. J.K.L.M.N.O..   ",
+"  . P.I Q.I R.Q.S.S.T.U.V.W.. X.. Y.Z.. `. +.+. ++. @+#+$+%+.   ",
+"  . &+*+=+-+;+>+,+'+)+. !+S.S V.~+{+]+^+. . /+(+. ]+V._+:+. .   ",
+"  . <+. . [+. . }+|+1+2+3+. . . 4+5+6+7+8+. 9+0+. a+. b+. c+.   ",
+"  . d+. . e+. . f+g+h+i+j+. ).. k+l+m+n+o+. p+q+. r+. s+. t+.   ",
+"  . u+v+. w+x+. y+Y.z+A+B+. ).. C+D+E+F+G+. H+I+. J+. K+L+. .   ",
+"  . M+N+. O+P+. Q+R+S+T+U+. V+. W+X+Y+Z+`+ @L+. at +@@@. J+#@. .   ",
+"  . . $@. %@&@. *@=@-@;@>@. , at . '@)@!@~@{@R.. ]@. ^@. /@S.. .   ",
+"  . (@_@:@<@[@}@|@1 at 2@3 at 4@5 at 6@7 at 8@9 at 0@a at b@c at d@e at f@g at h@i at j@k at .   ",
+"  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   ",
+"  . l at m@. . n at . ).o at . p at . . q at r@n at m@s at t@o at u@v at t@. . . . . . .   ",
+"  . w at x@y at z@y at A@B at C@D at E@F at G@H at F@I at J@K at L@M at N@O at P@Q at R@R at S@S at T@.   ",
+"  . U at . V.. . V.. . V.. . . . . . . . . . . . . . V at W@. X at Q+.   ",
+"  . Y at . Z@`@`@t+. . . . . .  #. . .#. . +#. @###. $#%#. &#*#.   ",
+"  . =#. -#. . . ;#>#. ,#'#. )#!#. ~#{#]#^#. /#(#. _#:#<#[#}#.   ",
+"  . Z.|#. . 1#. 2#3#. 4#5#. 6#7#.+8#9#0#. a#b#. c#d#e#f#. g#.   ",
+"  . . h#i#j#k#l#m#. n#o#. p#. q#r#. s#t#. u#v#. w#. x#y#. z#.   ",
+"  . A#S.. B#. . C#. . D#. E#. F#G#. R.H#. I#J#. K#. $@L#. M#.   ",
+"  . N#O#P#Q#R#. S#T#U#V#W#X#Y#Z#`#!  $.$+$. @$#$$$%$&$*$=$-$.   ",
+"  . ;$;$. . >$,$'$)$!$~$. . . . {$; ]$. . . . . . . . . . . .   ",
+"  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   ",
+"  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   ",
+"                                                                "};
diff --git a/share/metview/icons_mv5/NAMELIST.svg b/share/metview/icons_mv5/NAMELIST.svg
new file mode 100644
index 0000000..40c65d9
--- /dev/null
+++ b/share/metview/icons_mv5/NAMELIST.svg
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="64"
+   height="64"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="NAMELIST.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective24" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3134">
+      <stop
+         style="stop-color:#9fc1e3;stop-opacity:1"
+         offset="0"
+         id="stop3136" />
+      <stop
+         style="stop-color:#d6e1ea;stop-opacity:1"
+         offset="1"
+         id="stop3138" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3134"
+       id="radialGradient3140"
+       cx="32.294254"
+       cy="35.825287"
+       fx="32.294254"
+       fy="35.825287"
+       r="21.406897"
+       gradientTransform="matrix(1,0,0,0.9931271,0,0.2462231)"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="10.934825"
+     inkscape:cx="22.067717"
+     inkscape:cy="30.680453"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     width="64px"
+     height="64px"
+     inkscape:window-width="1446"
+     inkscape:window-height="977"
+     inkscape:window-x="2113"
+     inkscape:window-y="76"
+     showgrid="true"
+     inkscape:window-maximized="0"
+     inkscape:snap-grids="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2829" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="circle"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient3140);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="path2162"
+       sodipodi:cx="32.294254"
+       sodipodi:cy="35.825287"
+       sodipodi:rx="21.406897"
+       sodipodi:ry="21.259769"
+       d="m 53.701151,35.825287 a 21.406897,21.259769 0 1 1 -42.813793,0 21.406897,21.259769 0 1 1 42.813793,0 z"
+       transform="matrix(1.4054983,0,0,1.415225,-13.242391,-18.70084)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="text">
+    <text
+       xml:space="preserve"
+       style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier Std;-inkscape-font-specification:Courier Std Medium"
+       x="16"
+       y="48"
+       id="text2853"><tspan
+         sodipodi:role="line"
+         id="tspan2855"
+         x="16"
+         y="48"
+         style="font-size:56px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Courier Std;-inkscape-font-specification:Courier Std Medium">N</tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/NETCDF.svg b/share/metview/icons_mv5/NETCDF.svg
new file mode 100644
index 0000000..491f8e6
--- /dev/null
+++ b/share/metview/icons_mv5/NETCDF.svg
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64"
+   height="64"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="NETCDF.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/NETCDF.png"
+   inkscape:export-xdpi="45"
+   inkscape:export-ydpi="45"
+   style="display:inline">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective3344" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.796875"
+     inkscape:cx="15.08046"
+     inkscape:cy="29.873382"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     width="64px"
+     height="64px"
+     inkscape:window-width="772"
+     inkscape:window-height="646"
+     inkscape:window-x="621"
+     inkscape:window-y="147"
+     showgrid="false"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="circle">
+    <rect
+       style="opacity:0.8699187;fill:#00222b;fill-opacity:1;fill-rule:nonzero;stroke:#00222b;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2194"
+       width="10.264623"
+       height="10.264623"
+       x="3.5481482"
+       y="9.9755964" />
+    <rect
+       style="opacity:0.8699187;fill:#004455;fill-opacity:1;fill-rule:nonzero;stroke:#004455;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2198"
+       width="10.264623"
+       height="10.264623"
+       x="19.290678"
+       y="9.9755964"
+       inkscape:transform-center-x="-5.5402987"
+       inkscape:transform-center-y="3.5310345" />
+    <rect
+       style="opacity:0.8699187;fill:#6f918a;fill-opacity:1;fill-rule:nonzero;stroke:#6f918a;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2200"
+       width="10.264623"
+       height="10.264623"
+       x="34.591827"
+       y="9.9755964"
+       inkscape:transform-center-y="3.8252874"
+       inkscape:transform-center-x="1.0298851" />
+    <rect
+       style="opacity:0.8699187;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2202"
+       width="10.264623"
+       height="10.264623"
+       x="49.157345"
+       y="9.9755964"
+       inkscape:transform-center-x="9.416092"
+       inkscape:transform-center-y="2.0597701"
+       inkscape:export-xdpi="45"
+       inkscape:export-ydpi="45" />
+    <rect
+       style="opacity:0.8699187;fill:#004455;fill-opacity:1;fill-rule:nonzero;stroke:#004455;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2204"
+       width="10.264623"
+       height="10.264623"
+       x="3.5481482"
+       y="24.881483"
+       inkscape:transform-center-x="-5.5402987"
+       inkscape:transform-center-y="3.5310345" />
+    <rect
+       style="opacity:0.49322492;fill:#b7c8c4;fill-opacity:1;fill-rule:nonzero;stroke:#b7c8c4;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2206"
+       width="10.264623"
+       height="10.264623"
+       x="3.5481482"
+       y="41.212517"
+       inkscape:transform-center-y="3.8252874"
+       inkscape:transform-center-x="1.0298851" />
+    <rect
+       style="opacity:0.8699187;fill:#93aca7;fill-opacity:1;fill-rule:nonzero;stroke:#93aca7;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2210"
+       width="10.264623"
+       height="10.264623"
+       x="19.290678"
+       y="24.881483"
+       inkscape:transform-center-y="3.8252874"
+       inkscape:transform-center-x="1.0298851" />
+    <rect
+       style="opacity:0.49322492;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2212"
+       width="10.264623"
+       height="10.264623"
+       x="19.290678"
+       y="41.065388"
+       inkscape:transform-center-x="9.416092"
+       inkscape:transform-center-y="2.0597701" />
+    <rect
+       style="opacity:0.8699187;fill:#93aca7;fill-opacity:1;fill-rule:nonzero;stroke:#93aca7;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2214"
+       width="10.264623"
+       height="10.264623"
+       x="34.591827"
+       y="25.175734"
+       inkscape:transform-center-x="9.416092"
+       inkscape:transform-center-y="2.0597701" />
+    <rect
+       style="opacity:0.8699187;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2216"
+       width="10.264623"
+       height="10.264623"
+       x="49.157345"
+       y="25.469988"
+       inkscape:transform-center-x="9.416092"
+       inkscape:transform-center-y="2.0597701" />
+    <rect
+       style="opacity:0.49322492;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2218"
+       width="10.264623"
+       height="10.264623"
+       x="34.591827"
+       y="40.476883"
+       inkscape:transform-center-x="9.416092"
+       inkscape:transform-center-y="2.0597701" />
+    <rect
+       style="opacity:0.49322492;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2220"
+       width="10.264623"
+       height="10.264623"
+       x="49.157345"
+       y="40.035503"
+       inkscape:transform-center-x="9.416092"
+       inkscape:transform-center-y="2.0597701" />
+    <text
+       xml:space="preserve"
+       style="font-size:15.24397087px;font-style:normal;font-weight:normal;opacity:0.8699187;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="3.6777956"
+       y="48.211533"
+       id="text2228"><tspan
+         sodipodi:role="line"
+         id="tspan2230"
+         x="3.6777956"
+         y="48.211533">netCDF</tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/NETCDFPLUS.svg b/share/metview/icons_mv5/NETCDFPLUS.svg
new file mode 100755
index 0000000..31d21e8
--- /dev/null
+++ b/share/metview/icons_mv5/NETCDFPLUS.svg
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64"
+   height="64"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="NETCDFPLUS.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/NETCDF.png"
+   inkscape:export-xdpi="45"
+   inkscape:export-ydpi="45">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.796875"
+     inkscape:cx="15.08046"
+     inkscape:cy="29.873382"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     width="64px"
+     height="64px"
+     inkscape:window-width="772"
+     inkscape:window-height="646"
+     inkscape:window-x="680"
+     inkscape:window-y="122"
+     showgrid="false"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="circle">
+    <rect
+       style="opacity:0.8699187;fill:#00222b;fill-opacity:1;fill-rule:nonzero;stroke:#00222b;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2194"
+       width="10.264623"
+       height="10.264623"
+       x="3.5481482"
+       y="9.9755964" />
+    <rect
+       style="opacity:0.8699187;fill:#004455;fill-opacity:1;fill-rule:nonzero;stroke:#004455;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2198"
+       width="10.264623"
+       height="10.264623"
+       x="19.290678"
+       y="9.9755964"
+       inkscape:transform-center-x="-5.5402987"
+       inkscape:transform-center-y="3.5310345" />
+    <rect
+       style="opacity:0.8699187;fill:#6f918a;fill-opacity:1;fill-rule:nonzero;stroke:#6f918a;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2200"
+       width="10.264623"
+       height="10.264623"
+       x="34.591827"
+       y="9.9755964"
+       inkscape:transform-center-y="3.8252874"
+       inkscape:transform-center-x="1.0298851" />
+    <rect
+       style="opacity:0.8699187;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2202"
+       width="10.264623"
+       height="10.264623"
+       x="49.157345"
+       y="9.9755964"
+       inkscape:transform-center-x="9.416092"
+       inkscape:transform-center-y="2.0597701"
+       inkscape:export-xdpi="45"
+       inkscape:export-ydpi="45" />
+    <rect
+       style="opacity:0.8699187;fill:#004455;fill-opacity:1;fill-rule:nonzero;stroke:#004455;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2204"
+       width="10.264623"
+       height="10.264623"
+       x="3.5481482"
+       y="24.881483"
+       inkscape:transform-center-x="-5.5402987"
+       inkscape:transform-center-y="3.5310345" />
+    <rect
+       style="opacity:0.49322492;fill:#b7c8c4;fill-opacity:1;fill-rule:nonzero;stroke:#b7c8c4;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2206"
+       width="10.264623"
+       height="10.264623"
+       x="3.5481482"
+       y="41.212517"
+       inkscape:transform-center-y="3.8252874"
+       inkscape:transform-center-x="1.0298851" />
+    <rect
+       style="opacity:0.8699187;fill:#93aca7;fill-opacity:1;fill-rule:nonzero;stroke:#93aca7;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2210"
+       width="10.264623"
+       height="10.264623"
+       x="19.290678"
+       y="24.881483"
+       inkscape:transform-center-y="3.8252874"
+       inkscape:transform-center-x="1.0298851" />
+    <rect
+       style="opacity:0.49322492;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2212"
+       width="10.264623"
+       height="10.264623"
+       x="19.290678"
+       y="41.065388"
+       inkscape:transform-center-x="9.416092"
+       inkscape:transform-center-y="2.0597701" />
+    <rect
+       style="opacity:0.8699187;fill:#93aca7;fill-opacity:1;fill-rule:nonzero;stroke:#93aca7;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2214"
+       width="10.264623"
+       height="10.264623"
+       x="34.591827"
+       y="25.175734"
+       inkscape:transform-center-x="9.416092"
+       inkscape:transform-center-y="2.0597701" />
+    <rect
+       style="opacity:0.8699187;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2216"
+       width="10.264623"
+       height="10.264623"
+       x="49.157345"
+       y="25.469988"
+       inkscape:transform-center-x="9.416092"
+       inkscape:transform-center-y="2.0597701" />
+    <rect
+       style="opacity:0.49322492;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2218"
+       width="10.264623"
+       height="10.264623"
+       x="34.591827"
+       y="40.476883"
+       inkscape:transform-center-x="9.416092"
+       inkscape:transform-center-y="2.0597701" />
+    <rect
+       style="opacity:0.49322493;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2220"
+       width="10.264623"
+       height="10.264623"
+       x="49.157345"
+       y="40.035503"
+       inkscape:transform-center-x="9.416092"
+       inkscape:transform-center-y="2.0597701" />
+    <g
+       style="display:inline"
+       id="g6326"
+       transform="matrix(2.2375662,0,0,2.0356045,-5.9321915,-2.0574251)">
+      <rect
+         rx="0"
+         ry="0.76569498"
+         y="25.690905"
+         x="20.200878"
+         height="1.53139"
+         width="3.6325176"
+         id="rect4235"
+         style="opacity:1;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.85816514;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         ry="1.2517357"
+         y="27.350697"
+         x="13.411453"
+         height="2.7717004"
+         width="17.032545"
+         id="rect4233"
+         style="fill:#b6c6cc;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.95899999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <g
+         id="g6294">
+        <rect
+           style="fill:#e7e4e0;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:1.00858581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect4231"
+           width="18.368809"
+           height="12.378362"
+           x="12.631559"
+           y="13.338168"
+           ry="1.2467414" />
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#e52626;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+           d="M 17.43489,21.539066 L 20.832458,15.548617 L 21.994785,20.108511 L 24.542961,17.962678 C 25.541369,18.812071 26.251737,19.373422 27.538186,20.510855"
+           id="path5224"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#1f283c;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 14.752598,15.056863 C 14.797303,23.506079 14.797303,23.595489 14.797303,23.595489"
+           id="path5226" />
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#1f283c;stroke-width:1.00666595px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 14.308883,23.726271 L 29.323046,23.688232"
+           id="path5228" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/NETCDF_RTTOV_INPUT.svg b/share/metview/icons_mv5/NETCDF_RTTOV_INPUT.svg
new file mode 100644
index 0000000..964a79b
--- /dev/null
+++ b/share/metview/icons_mv5/NETCDF_RTTOV_INPUT.svg
@@ -0,0 +1,309 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="RTTOV_INPUT_DATA.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_RUN_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective3228" />
+    <linearGradient
+       id="linearGradient3697">
+      <stop
+         style="stop-color:#0055d4;stop-opacity:1;"
+         offset="0"
+         id="stop3699" />
+      <stop
+         style="stop-color:#3c6fbd;stop-opacity:1;"
+         offset="1"
+         id="stop3701" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3689">
+      <stop
+         style="stop-color:#0066ff;stop-opacity:1;"
+         offset="0"
+         id="stop3691" />
+      <stop
+         style="stop-color:#3f84eb;stop-opacity:1;"
+         offset="1"
+         id="stop3693" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3909">
+      <stop
+         style="stop-color:#2a7fff;stop-opacity:1;"
+         offset="0"
+         id="stop3911" />
+      <stop
+         style="stop-color:#63a1ff;stop-opacity:1;"
+         offset="1"
+         id="stop3913" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3909"
+       id="linearGradient3915"
+       x1="2.108496"
+       y1="7.6282678"
+       x2="8.558013"
+       y2="7.6282678"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.68715665,0,0,0.98858445,-1.3390267,-0.29005207)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3689"
+       id="linearGradient3695"
+       x1="0.99223268"
+       y1="16.589376"
+       x2="7.4417505"
+       y2="16.589376"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.68715665,0,0,0.98858445,-0.57197942,-0.53527867)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3697"
+       id="linearGradient3703"
+       x1="0.99223369"
+       y1="25.271418"
+       x2="7.5037656"
+       y2="25.271418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.68715665,0,0,0.98858445,-0.57197942,-0.53527867)" />
+    <inkscape:perspective
+       id="perspective3239"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3645"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.609565"
+     inkscape:cx="14.195766"
+     inkscape:cy="9.6395155"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1885"
+     inkscape:window-height="1144"
+     inkscape:window-x="1916"
+     inkscape:window-y="31"
+     inkscape:window-maximized="1"
+     gridtolerance="6"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <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 />
+        <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="layer2"
+     inkscape:label="bg"
+     style="display:inline">
+    <rect
+       style="opacity:0.8699187;fill:#00222b;fill-opacity:1;fill-rule:nonzero;stroke:#00222b;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2194"
+       width="3.9452662"
+       height="3.8084145"
+       x="12.487254"
+       y="5.803278" />
+    <rect
+       style="opacity:0.8699187;fill:#6f918a;fill-opacity:1;fill-rule:nonzero;stroke:#6f918a;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2200"
+       width="4.2641201"
+       height="3.852392"
+       x="25.261992"
+       y="5.7844133"
+       inkscape:transform-center-y="1.4356597"
+       inkscape:transform-center-x="0.42783523" />
+    <rect
+       style="opacity:0.8699187;fill:#004455;fill-opacity:1;fill-rule:nonzero;stroke:#004455;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2204"
+       width="3.7840588"
+       height="3.8084145"
+       x="12.487254"
+       y="11.656127"
+       inkscape:transform-center-x="-2.042434"
+       inkscape:transform-center-y="1.3100971" />
+    <rect
+       style="opacity:0.49322492;fill:#b7c8c4;fill-opacity:1;fill-rule:nonzero;stroke:#b7c8c4;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2206"
+       width="3.7840588"
+       height="3.8084145"
+       x="18.935553"
+       y="17.392906"
+       inkscape:transform-center-y="1.41927"
+       inkscape:transform-center-x="0.37966755" />
+    <rect
+       style="opacity:0.8699187;fill:#93aca7;fill-opacity:1;fill-rule:nonzero;stroke:#93aca7;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2210"
+       width="4.2641201"
+       height="3.852392"
+       x="18.798134"
+       y="11.701126"
+       inkscape:transform-center-y="1.4356606"
+       inkscape:transform-center-x="0.42783364" />
+    <rect
+       style="opacity:0.8699187;fill:#93aca7;fill-opacity:1;fill-rule:nonzero;stroke:#93aca7;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2214"
+       width="4.2641201"
+       height="3.852392"
+       x="12.311663"
+       y="17.400082"
+       inkscape:transform-center-x="3.9116254"
+       inkscape:transform-center-y="0.77304619" />
+    <rect
+       style="opacity:0.8699187;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2216"
+       width="3.9954412"
+       height="3.852392"
+       x="25.616791"
+       y="17.188105"
+       inkscape:transform-center-x="3.6651563"
+       inkscape:transform-center-y="0.77304794" />
+    <rect
+       inkscape:transform-center-y="1.3100971"
+       inkscape:transform-center-x="-2.1584489"
+       y="5.798924"
+       x="18.881815"
+       height="3.8084145"
+       width="3.999002"
+       id="rect3949"
+       style="opacity:0.8699187;fill:#004455;fill-opacity:1;fill-rule:nonzero;stroke:#004455;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       inkscape:transform-center-x="0.37966755"
+       inkscape:transform-center-y="1.41927"
+       y="11.643175"
+       x="25.598793"
+       height="3.8084145"
+       width="3.7840588"
+       id="rect3951"
+       style="opacity:0.49322492;fill:#b7c8c4;fill-opacity:1;fill-rule:nonzero;stroke:#b7c8c4;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="text"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:6.85956478px;font-style:normal;font-weight:normal;opacity:0.8699187;fill:#241c1c;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
+       x="10.327188"
+       y="26.423189"
+       id="text2228-4"
+       transform="scale(0.93116886,1.0739191)"><tspan
+         sodipodi:role="line"
+         id="tspan2230-6"
+         x="10.327188"
+         y="26.423189">netCDF</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="rt"
+     style="display:inline">
+    <g
+       transform="matrix(0.86170977,0,0,0.818236,0.15494323,2.1581421)"
+       style="font-size:17.80623245px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.8699187;fill:#5599ff;fill-opacity:1;stroke:none;display:inline;font-family:ARIAL;-inkscape-font-specification:ARIAL"
+       id="text3107-5">
+      <text
+         xml:space="preserve"
+         style="font-size:15px;font-style:normal;font-weight:normal;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.71454811;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+         x="0.95808423"
+         y="25.765697"
+         id="text2849"
+         transform="scale(0.96529438,1.0359534)"><tspan
+           sodipodi:role="line"
+           id="tspan2851"
+           x="0.95808423"
+           y="25.765697"
+           style="font-size:15px;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.71454811;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial Black;-inkscape-font-specification:Arial Black">T</tspan></text>
+      <text
+         transform="scale(0.96529438,1.0359534)"
+         id="text3633"
+         y="12.084261"
+         x="0.076647066"
+         style="font-size:15px;font-style:normal;font-weight:normal;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.71454811;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+         xml:space="preserve"><tspan
+           style="font-size:15px;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.71454811;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial Black;-inkscape-font-specification:Arial Black"
+           y="12.084261"
+           x="0.076647066"
+           id="tspan3635"
+           sodipodi:role="line">R</tspan></text>
+    </g>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/NEWS.xpm b/share/metview/icons_mv5/NEWS.xpm
new file mode 100644
index 0000000..43398c5
--- /dev/null
+++ b/share/metview/icons_mv5/NEWS.xpm
@@ -0,0 +1,39 @@
+/* XPM */
+static char * NEWS_icon[] = {
+"32 32 4 1",
+" 	c #858585858585",
+".	c #FFFFFFFFFFFF",
+"X	c #000000000000",
+"o	c #CCCCCCCCCCCC",
+"                                ",
+" .............................. ",
+" XX....XXX..................... ",
+" .XX....X...................... ",
+" .XX....X...................... ",
+" .X.X...X...XX..XXX.XX.XX..XXX. ",
+" .X..X..X..X..X..X..X..X..X..X. ",
+" .X..X..X..XXXX..XX.X.XX..XX... ",
+" .X...X.X..X......X.X.X.....XX. ",
+" .X....XX..XX..X..XX.X....X..X. ",
+" XXX....X...XXX...X..X....XXX.. ",
+" .............................. ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .............................. ",
+" .............. ..            . ",
+" .XXX.X..XXX... .. oooooooooo . ",
+" .............. .. ooooooXooo . ",
+" .XXX.XXX..XX.. .. oooooXoXoo . ",
+" .............. .. oooooXoXoo . ",
+" .XX..XX..XXX.. .. ooooooXooo . ",
+" .............. .. oooooXXXoo . ",
+" .XXX.XX.XX.X.. .. ooooXXXXXo . ",
+" .............. ..            . ",
+" .XX.XX..XX.X.. ............... ",
+" .............. ..XX.X.XXX..X.. ",
+" .XXX..X.XX.X.. ............... ",
+" .............. ..XXX.X.XXX.X.. ",
+" .XX.XX.X.X.X.. ............... ",
+" .............. ..XXX.X.XX.XX.. ",
+" .X.XXX.XX.XX.. ............... ",
+" .............................. ",
+"                                "};
diff --git a/share/metview/icons_mv5/NOTE.svg b/share/metview/icons_mv5/NOTE.svg
new file mode 100644
index 0000000..d6536fc
--- /dev/null
+++ b/share/metview/icons_mv5/NOTE.svg
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="64"
+   height="64"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="NOTE.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/NOTE.png"
+   inkscape:export-xdpi="45"
+   inkscape:export-ydpi="45">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective44" />
+    <linearGradient
+       id="linearGradient4121">
+      <stop
+         style="stop-color:#fffeac;stop-opacity:1;"
+         offset="0"
+         id="stop4123" />
+      <stop
+         style="stop-color:#fffeac;stop-opacity:0;"
+         offset="1"
+         id="stop4125" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4121"
+       id="linearGradient4127"
+       x1="3.0432272"
+       y1="31.653429"
+       x2="60.148109"
+       y2="31.653429"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="10.784039"
+     inkscape:cx="19.911734"
+     inkscape:cy="32.840859"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     width="64px"
+     height="64px"
+     inkscape:window-width="1239"
+     inkscape:window-height="986"
+     inkscape:window-x="2067"
+     inkscape:window-y="0"
+     showgrid="false"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="circle"
+     style="display:inline">
+    <rect
+       style="fill:url(#linearGradient4127);fill-opacity:1;fill-rule:nonzero;stroke:#010000;stroke-width:1.07599998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2179"
+       width="56.028881"
+       height="57.992779"
+       x="3.5812273"
+       y="2.6570396"
+       ry="0.11552346" />
+    <path
+       style="opacity:0.47154469;fill:none;stroke:#970000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 12.214922,2.8880866 c -0.115523,57.6462094 0,57.4151624 0,57.4151624"
+       id="path4206" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 17.976073,16.302798 c 3.020078,0 7.668802,1.007756 10.974729,0.34657 0.608846,-0.121769 1.274412,-0.555243 1.963899,-0.69314 0.426344,-0.08527 0.950315,0 1.386281,0"
+       id="path4216" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 37.846109,15.609657 c 2.921164,-0.584233 6.729649,0.0059 9.588447,0.577617 1.00458,0.200916 2.090701,0.03294 3.234658,-0.231046 0.559122,-0.129029 1.111151,-0.09348 1.617328,-0.346571"
+       id="path4218" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 17.629502,24.273917 c 1.680805,-0.387878 11.270018,0.34657 13.747293,0.34657 2.939685,0 4.661097,-0.06445 7.046931,-0.462093 0.08493,-0.01416 0.154031,-0.07702 0.231047,-0.115524"
+       id="path4220" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 45.239611,24.04287 c 2.320863,-0.38681 5.989944,-0.231047 8.779783,-0.231047"
+       id="path4222" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 19.246831,33.977888 c 0,0 0,0 0,0 2.310469,0 4.620938,0 6.931408,0"
+       id="path4224" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 28.604232,33.400271 c 2.398529,0.90614 7.02388,0.577617 10.166065,0.577617"
+       id="path4226" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 43.275712,33.977888 c 2.725038,-0.377743 8.049003,-0.34657 11.66787,-0.34657"
+       id="path4228" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 18.80753,43.570999 c 0.154032,-0.154031 0.154032,-0.154031 0,0 -0.206874,0.206874 4.215775,-0.704527 4.736463,-0.808664 3.783587,-0.756718 10.383972,-0.17438 13.862815,0.115523"
+       id="path4230" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 43.69688,42.484146 c -3.358833,-0.559806 3.82138,-0.1178 5.66065,-0.577617 0.411993,-0.102999 1.011938,0.02194 1.386281,0.115523"
+       id="path4236" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 18.545927,53.614281 c 0.232511,0 1.056363,0 1.576404,0 0.307345,0 1.093866,0.273466 1.483674,0.370919 0.698778,0.174694 0.474418,0.50732 1.390945,0.278188 0.604613,-0.151153 1.171738,0.126477 1.669133,-0.370918 0.139906,-0.139906 1.228513,0.09273 1.483674,0.09273 0.708106,0 0.953046,0.265314 1.483675,0 0.274266,-0.137134 0.311384,-0.18546 0.649107,-0.18546"
+       id="path6200" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 31.991724,53.614281 c 0.864151,-0.432075 1.927231,0.181441 2.874619,0.370919 0.500584,0.100116 0.968899,0.185459 1.483674,0.185459 0.59764,0 1.047544,-0.331433 1.576404,-0.463648 0.59459,-0.148648 0.967007,0.185459 1.669134,0.185459 0.472669,0 0.823234,0.0057 1.205485,-0.185459"
+       id="path6202" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 44.139307,53.614281 c 0.37532,0 1.558621,0.09273 2.318241,0.09273 0.987131,0 2.134696,0.370918 3.060078,0.370918 0.424057,0 1.16539,-0.489965 1.483674,-0.649107 0.419782,-0.209891 1.100908,0.09273 1.669134,0.09273 0.09273,0 0.185459,0 0.278188,0"
+       id="path6204" />
+    <rect
+       style="opacity:0.47154469;fill:#a5a300;fill-opacity:0.96408841;fill-rule:nonzero;stroke:#970000;stroke-width:0.98695034;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect6206"
+       width="56.46867"
+       height="9.2692842"
+       x="3.2937419"
+       y="2.2902665"
+       ry="0.097040012" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.15938318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 10.464384,0.42079587 10.371997,10.554402 10.187222,10.429297"
+       id="path7205" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.15938318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 16.568541,0.42079587 16.476154,10.554402 16.29138,10.429297"
+       id="path7207" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.15938318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 22.672699,0.42079573 22.580312,10.554402 22.395537,10.429297"
+       id="path7209" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.15938318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 34.881013,0.42079627 34.788626,10.554402 34.603851,10.429297"
+       id="path7211" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.15938318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 40.985172,0.42079587 40.892784,10.554402 40.70801,10.429297"
+       id="path7213" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.15938318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 28.776857,0.42079614 28.68447,10.554402 28.499696,10.429297"
+       id="path7215" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.15938318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 47.089329,0.42079627 46.996942,10.554402 46.812168,10.429297"
+       id="path7217" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.15938318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 53.193485,0.42079627 53.101098,10.554402 52.916323,10.429297"
+       id="path7219" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/OBSFILTER.svg b/share/metview/icons_mv5/OBSFILTER.svg
new file mode 100644
index 0000000..80ed5ed
--- /dev/null
+++ b/share/metview/icons_mv5/OBSFILTER.svg
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="OBSFILTER.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="24.3125"
+     inkscape:cx="13.614396"
+     inkscape:cy="15.753213"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1713"
+     inkscape:window-height="1095"
+     inkscape:window-x="2017"
+     inkscape:window-y="47"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0"
+     inkscape:snap-grids="true">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3697">
+      <stop
+         id="stop3699"
+         offset="0"
+         style="stop-color:#7fb3b8;stop-opacity:1;" />
+      <stop
+         id="stop3701"
+         offset="1"
+         style="stop-color:#2e11fa;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3642">
+      <stop
+         style="stop-color:#b87f7f;stop-opacity:1;"
+         offset="0"
+         id="stop3644" />
+      <stop
+         style="stop-color:#fa1511;stop-opacity:1;"
+         offset="1"
+         id="stop3646" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3631">
+      <stop
+         style="stop-color:#e0e0e0;stop-opacity:1;"
+         offset="0"
+         id="stop3633" />
+      <stop
+         style="stop-color:#e0e0e0;stop-opacity:0;"
+         offset="1"
+         id="stop3635" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3623">
+      <stop
+         id="stop3625"
+         style="stop-color:#fcfeff;stop-opacity:1;"
+         offset="0" />
+      <stop
+         id="stop3629"
+         style="stop-color:#bbbfc6;stop-opacity:1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3623"
+       id="linearGradient3220"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9018866,0,0,0.41386165,-6.0812367,8.2564501)"
+       x1="6.3181248"
+       y1="23.55978"
+       x2="42.042122"
+       y2="24.921354" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3631"
+       id="linearGradient3637"
+       x1="-6.451505"
+       y1="7.5"
+       x2="15.451505"
+       y2="7.5"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3642"
+       id="linearGradient3648"
+       x1="7.55"
+       y1="6.5"
+       x2="18.45"
+       y2="6.5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0333333,0,0,1.0330578,2.5000002,-1.2975212)" />
+    <linearGradient
+       y2="6.5"
+       x2="18.450001"
+       y1="6.5"
+       x1="7.5500002"
+       gradientTransform="matrix(0.68888887,0,0,0.77479335,7.3333337,19.776859)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3675"
+       xlink:href="#linearGradient3697"
+       inkscape:collect="always" />
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="arrow 2">
+    <path
+       style="fill:url(#linearGradient3675);fill-opacity:1;stroke:#222fc9;stroke-width:0.89999992;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="M 14.333334,21.5 19,21.5 l 0,1.5 -1.333333,0 0,3.75 2.066667,0 0,0.774793 -3.4,2.975207 L 13,27.5 l 0,-0.75 2,0 0,-3.75 -1.333333,0 0,-1.5 0.666667,0 z"
+       id="path3640-2"
+       sodipodi:nodetypes="ccccccccccccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="front"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3637);fill-opacity:1;fill-rule:evenodd;stroke:#525975;stroke-width:0.90300994999999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path2219"
+       sodipodi:cx="4.5"
+       sodipodi:cy="7.5"
+       sodipodi:rx="10.5"
+       sodipodi:ry="6.5"
+       d="m 15,7.5 a 10.5,6.5 0 1 1 -21,0 10.5,6.5 0 1 1 21,0 z"
+       transform="matrix(1.2655513,0,0,0.6142733,10.305019,9.1501738)" />
+    <path
+       style="fill:url(#linearGradient3220);fill-opacity:1;fill-rule:evenodd;stroke:#525975;stroke-width:0.88592643;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 2.7403401,14.637355 0,5.112645 c 0.056694,0.35217 0.3213807,0.706116 0.8737032,1.071029 0.6253711,0.413177 1.5828728,0.814287 2.7902117,1.151861 2.4146761,0.675147 5.819682,1.111446 9.582543,1.111446 3.762862,0 7.16787,-0.436299 9.582543,-1.111446 1.20734,-0.337574 2.193022,-0.738685 2.818396,-1.151861 0.46903,-0.309881 0.740336,-0.609592 0.84552,-0.909363 l 0,-5.274311 c -0.02905,0.02004 -0.05465,0.04087 -0.08455,0.06062 -0.77795,0.513983 -1.827101,0.949674 -3.128418,1.31352 [...]
+       id="path3218" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="arrow">
+    <path
+       style="fill:url(#linearGradient3648);fill-opacity:1;stroke:#c92222;stroke-width:0.89999992;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 13,1 7,0 0,2 -2,0 0,5 3.1,0 0,1.033058 L 16,13 11,9 l 0,-1 3,0 0,-5 -2,0 0,-2 1,0 z"
+       id="path3640"
+       sodipodi:nodetypes="ccccccccccccccc" />
+  </g>
+</svg>
diff --git a/share/metview/icons/OBSTAT.xpm b/share/metview/icons_mv5/OBSTAT.xpm
similarity index 100%
rename from share/metview/icons/OBSTAT.xpm
rename to share/metview/icons_mv5/OBSTAT.xpm
diff --git a/share/metview/icons/OBSTAT_CURVE.xpm b/share/metview/icons_mv5/OBSTAT_CURVE.xpm
similarity index 100%
rename from share/metview/icons/OBSTAT_CURVE.xpm
rename to share/metview/icons_mv5/OBSTAT_CURVE.xpm
diff --git a/share/metview/icons/OBSTAT_SCATTER.xpm b/share/metview/icons_mv5/OBSTAT_SCATTER.xpm
similarity index 100%
rename from share/metview/icons/OBSTAT_SCATTER.xpm
rename to share/metview/icons_mv5/OBSTAT_SCATTER.xpm
diff --git a/share/metview/icons_mv5/ODB_DB.svg b/share/metview/icons_mv5/ODB_DB.svg
new file mode 100644
index 0000000..ba64524
--- /dev/null
+++ b/share/metview/icons_mv5/ODB_DB.svg
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="90"
+   inkscape:export-xdpi="90"
+   inkscape:export-filename="/tmp/cgr/work/icons/metview/ODB_MANAGER.png"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="ODB_DB.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.36894"
+     inkscape:cx="23.02576"
+     inkscape:cy="16.142642"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1467"
+     inkscape:window-height="948"
+     inkscape:window-x="1831"
+     inkscape:window-y="35"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3272">
+      <stop
+         style="stop-color:#668e93;stop-opacity:1;"
+         offset="0"
+         id="stop3274" />
+      <stop
+         id="stop2215"
+         offset="0.322"
+         style="stop-color:#d1e8e9;stop-opacity:1;" />
+      <stop
+         id="stop2205"
+         offset="0.69999999"
+         style="stop-color:#9fc2c2;stop-opacity:1;" />
+      <stop
+         style="stop-color:#718b98;stop-opacity:1;"
+         offset="0.829"
+         id="stop2209" />
+      <stop
+         style="stop-color:#e6c3b4;stop-opacity:1;"
+         offset="0.958"
+         id="stop2207" />
+      <stop
+         style="stop-color:#dff0ef;stop-opacity:1;"
+         offset="1"
+         id="stop3276" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2933">
+      <stop
+         offset="0"
+         style="stop-color:#9baec2;stop-opacity:1;"
+         id="stop2935" />
+      <stop
+         id="stop3204"
+         style="stop-color:#c0dbdf;stop-opacity:1;"
+         offset="0.5" />
+      <stop
+         offset="1"
+         style="stop-color:#e4e4e4;stop-opacity:1;"
+         id="stop2937" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3272"
+       id="linearGradient11159"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9873848,0,0,0.5086081,-8.2058702,5.1225751)"
+       x1="6.3181248"
+       y1="23.55978"
+       x2="42.042122"
+       y2="24.921354" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3272"
+       id="linearGradient2217"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9873807,0,0,0.508734,-8.2057701,12.267659)"
+       x1="6.3181248"
+       y1="23.55978"
+       x2="42.042122"
+       y2="24.921354" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2933"
+       id="linearGradient3202"
+       x1="-6.2987657"
+       y1="4.4701581"
+       x2="15.431515"
+       y2="7.5"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3272"
+       id="linearGradient3220"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9873807,0,0,0.508734,-8.2040847,-1.4530395)"
+       x1="6.3181248"
+       y1="23.55978"
+       x2="42.042122"
+       y2="24.921354" />
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="front"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       style="fill:url(#linearGradient11159);fill-opacity:1;fill-rule:evenodd;stroke:#5165b2;stroke-width:0.88583273;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 1.4519861,12.964279 0,6.283101 c 0.062068,0.432792 0.3518478,0.867768 0.9565277,1.316221 0.6846586,0.507768 1.7329301,1.000705 3.0547229,1.41556 2.6435849,0.829712 6.3713823,1.365891 10.4909603,1.365891 4.119579,0 7.847377,-0.536179 10.490963,-1.365891 1.321791,-0.414855 2.400918,-0.907793 3.085576,-1.41556 0.513493,-0.380823 0.810521,-0.74915 0.925674,-1.117546 l 0,-6.481776 c -0.0318,0.02463 -0.05983,0.05023 -0.09257,0.0745 -0.8517,0.631651 -2.000308,1.167086 -3.424991,1.61 [...]
+       id="path11155" />
+    <path
+       style="fill:url(#linearGradient2217);fill-opacity:1;fill-rule:evenodd;stroke:#5165b2;stroke-width:0.88592643;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 1.4520459,20.111302 0,6.284654 c 0.062068,0.4329 0.3518468,0.867983 0.9565239,1.316547 0.6846549,0.507891 1.7329216,1.000951 3.0547098,1.415909 2.6435747,0.829915 6.3713554,1.366229 10.4909174,1.366229 4.119562,0 7.847345,-0.536314 10.490919,-1.366229 1.321788,-0.414958 2.400908,-0.908018 3.085564,-1.415909 0.513491,-0.38092 0.810517,-0.749335 0.925669,-1.117823 l 0,-6.483378 c -0.0318,0.02464 -0.05983,0.05024 -0.09257,0.07452 -0.851697,0.631806 -2.000297,1.167375 -3.424978,1 [...]
+       id="path2215" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3202);fill-opacity:1;fill-rule:evenodd;stroke:#5165b2;stroke-width:0.86303061;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path2219"
+       sodipodi:cx="4.5"
+       sodipodi:cy="7.5"
+       sodipodi:rx="10.5"
+       sodipodi:ry="6.5"
+       d="m 15,7.5 a 10.5,6.5 0 1 1 -21,0 10.5,6.5 0 1 1 21,0 z"
+       transform="matrix(1.3855189,0,0,0.6142733,9.7355014,0.9034226)" />
+    <path
+       style="fill:url(#linearGradient3220);fill-opacity:1;fill-rule:evenodd;stroke:#5165b2;stroke-width:0.88592643;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 1.453731,6.3906034 0,6.2846526 c 0.062068,0.432901 0.3518459,0.867984 0.9565257,1.316549 0.684653,0.507892 1.7329208,1.000951 3.054709,1.415909 2.6435745,0.829916 6.3713563,1.366231 10.4909173,1.366231 4.119561,0 7.847346,-0.536315 10.490918,-1.366231 1.321789,-0.414958 2.400908,-0.908018 3.085565,-1.415909 0.513491,-0.380918 0.810516,-0.749334 0.92567,-1.117823 l 0,-6.4833786 c -0.0318,0.024635 -0.05983,0.050238 -0.09257,0.074521 -0.851696,0.6318076 -2.0003,1.1673758 -3.4249 [...]
+       id="path3218" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/ODB_FILTER.svg b/share/metview/icons_mv5/ODB_FILTER.svg
new file mode 100644
index 0000000..4e31445
--- /dev/null
+++ b/share/metview/icons_mv5/ODB_FILTER.svg
@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   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"
+   inkscape:export-ydpi="90"
+   inkscape:export-xdpi="90"
+   inkscape:export-filename="/tmp/cgr/work/icons/metview/ODB_FILTER.png"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   sodipodi:docbase="/tmp/cgr/work/icons/metview"
+   sodipodi:docname="ODB_FILTER.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.36894"
+     inkscape:cx="28.65857"
+     inkscape:cy="16.142642"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1467"
+     inkscape:window-height="956"
+     inkscape:window-x="1776"
+     inkscape:window-y="13"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+  </sodipodi:namedview>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3206">
+      <stop
+         id="stop3208"
+         offset="0"
+         style="stop-color:#3e97a9;stop-opacity:1;" />
+      <stop
+         style="stop-color:#d9ebeb;stop-opacity:1;"
+         offset="0.69999999"
+         id="stop3210" />
+      <stop
+         id="stop3212"
+         offset="0.829"
+         style="stop-color:#3164b2;stop-opacity:1;" />
+      <stop
+         id="stop3214"
+         offset="0.958"
+         style="stop-color:#e6c3b4;stop-opacity:1;" />
+      <stop
+         id="stop3216"
+         offset="1"
+         style="stop-color:#bf7c4f;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3272">
+      <stop
+         style="stop-color:#668e93;stop-opacity:1;"
+         offset="0"
+         id="stop3274" />
+      <stop
+         id="stop2215"
+         offset="0.322"
+         style="stop-color:#d1e8e9;stop-opacity:1;" />
+      <stop
+         id="stop2205"
+         offset="0.69999999"
+         style="stop-color:#9fc2c2;stop-opacity:1;" />
+      <stop
+         style="stop-color:#718b98;stop-opacity:1;"
+         offset="0.829"
+         id="stop2209" />
+      <stop
+         style="stop-color:#e6c3b4;stop-opacity:1;"
+         offset="0.958"
+         id="stop2207" />
+      <stop
+         style="stop-color:#dff0ef;stop-opacity:1;"
+         offset="1"
+         id="stop3276" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3257">
+      <stop
+         style="stop-color:#2faeb8;stop-opacity:1;"
+         offset="0"
+         id="stop3259" />
+      <stop
+         style="stop-color:#eef9fa;stop-opacity:1;"
+         offset="1"
+         id="stop3261" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         offset="0"
+         style="stop-color:black;stop-opacity:0;"
+         id="stop5050" />
+      <stop
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;"
+         id="stop5056" />
+      <stop
+         offset="1"
+         style="stop-color:black;stop-opacity:0;"
+         id="stop5052" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2933">
+      <stop
+         offset="0"
+         style="stop-color:#9baec2;stop-opacity:1;"
+         id="stop2935" />
+      <stop
+         id="stop3204"
+         style="stop-color:#c0dbdf;stop-opacity:1;"
+         offset="0.5" />
+      <stop
+         offset="1"
+         style="stop-color:#e4e4e4;stop-opacity:1;"
+         id="stop2937" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3257"
+       id="linearGradient11118"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9920914,0,0,1.0001933,1.6937616,5.6202644)"
+       x1="8.375"
+       y1="24.5"
+       x2="40.625"
+       y2="24.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3257"
+       id="linearGradient11146"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0000001,0,0,0.64,1.5000002,9.8199999)"
+       x1="8.375"
+       y1="24.5"
+       x2="40.625"
+       y2="24.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3257"
+       id="linearGradient11149"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0000001,0,0,0.64,1.0000002,10.32)"
+       x1="8.375"
+       y1="24.5"
+       x2="40.625"
+       y2="24.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3272"
+       id="linearGradient11159"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9873848,0,0,0.5086081,-8.2058702,5.1225751)"
+       x1="6.3181248"
+       y1="23.55978"
+       x2="42.042122"
+       y2="24.921354" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3257"
+       id="linearGradient11161"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0000001,0,0,0.64,-2.6562498,16.82)"
+       x1="8.375"
+       y1="24.5"
+       x2="40.625"
+       y2="24.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3272"
+       id="linearGradient2217"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9873807,0,0,0.508734,-8.2057701,12.267659)"
+       x1="6.3181248"
+       y1="23.55978"
+       x2="42.042122"
+       y2="24.921354" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2933"
+       id="linearGradient3202"
+       x1="-6.2987657"
+       y1="4.4701581"
+       x2="15.431515"
+       y2="7.5"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3272"
+       id="linearGradient3220"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9873807,0,0,0.508734,-8.2040847,-1.4530395)"
+       x1="6.3181248"
+       y1="23.55978"
+       x2="42.042122"
+       y2="24.921354" />
+  </defs>
+  <metadata
+     id="metadata4">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Jakub Steiner</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:source>http://jimmac.musichall.cz</dc:source>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
+        <dc:title>Accessibility</dc:title>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>accessibility</rdf:li>
+            <rdf:li>assist</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Reproduction" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Distribution" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Notice" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Attribution" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/ShareAlike" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="front"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       style="opacity:1;fill:url(#linearGradient11159);fill-opacity:1;fill-rule:evenodd;stroke:#5165b2;stroke-width:0.88583273;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 1.4519861,12.964279 L 1.4519861,19.24738 C 1.514054,19.680172 1.8038339,20.115148 2.4085138,20.563601 C 3.0931724,21.071369 4.1414439,21.564306 5.4632367,21.979161 C 8.1068216,22.808873 11.834619,23.345052 15.954197,23.345052 C 20.073776,23.345052 23.801574,22.808873 26.44516,21.979161 C 27.766951,21.564306 28.846078,21.071368 29.530736,20.563601 C 30.044229,20.182778 30.341257,19.814451 30.45641,19.446055 L 30.45641,12.964279 C 30.42461,12.988909 30.396577,13.014505 30.36384 [...]
+       id="path11155" />
+    <path
+       style="opacity:1;fill:url(#linearGradient2217);fill-opacity:1;fill-rule:evenodd;stroke:#5165b2;stroke-width:0.88592643;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 1.4520459,20.111302 L 1.4520459,26.395956 C 1.5141137,26.828856 1.8038927,27.263939 2.4085698,27.712503 C 3.0932247,28.220394 4.1414914,28.713454 5.4632796,29.128412 C 8.1068543,29.958327 11.834635,30.494641 15.954197,30.494641 C 20.073759,30.494641 23.801542,29.958327 26.445116,29.128412 C 27.766904,28.713454 28.846024,28.220394 29.53068,27.712503 C 30.044171,27.331583 30.341197,26.963168 30.456349,26.59468 L 30.456349,20.111302 C 30.424549,20.135938 30.396518,20.161541 30.3 [...]
+       id="path2215" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#linearGradient3202);fill-opacity:1;fill-rule:evenodd;stroke:#5165b2;stroke-width:0.86303061;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path2219"
+       sodipodi:cx="4.5"
+       sodipodi:cy="7.5"
+       sodipodi:rx="10.5"
+       sodipodi:ry="6.5"
+       d="M 15 7.5 A 10.5 6.5 0 1 1  -6,7.5 A 10.5 6.5 0 1 1  15 7.5 z"
+       transform="matrix(1.3855189,0,0,0.6142733,9.7355014,0.9034226)" />
+    <path
+       style="opacity:1;fill:url(#linearGradient3220);fill-opacity:1;fill-rule:evenodd;stroke:#5165b2;stroke-width:0.88592643;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 1.453731,6.3906034 L 1.453731,12.675256 C 1.5157989,13.108157 1.8055769,13.54324 2.4102567,13.991805 C 3.0949097,14.499697 4.1431775,14.992756 5.4649657,15.407714 C 8.1085402,16.23763 11.836322,16.773945 15.955883,16.773945 C 20.075444,16.773945 23.803229,16.23763 26.446801,15.407714 C 27.76859,14.992756 28.847709,14.499696 29.532366,13.991805 C 30.045857,13.610887 30.342882,13.242471 30.458036,12.873982 L 30.458036,6.3906034 C 30.426232,6.4152386 30.398204,6.4408419 30.36546 [...]
+       id="path3218" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="table">
+    <rect
+       style="opacity:1;fill:#dbdbdb;fill-opacity:1;fill-rule:evenodd;stroke:#29293e;stroke-width:0.90037495;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2220"
+       width="11.840177"
+       height="16.078684"
+       x="18.846394"
+       y="11.979965" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#29293e;stroke-width:0.92817724px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 24.616138,11.802428 L 24.69698,28.414234"
+       id="path3198" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#29293e;stroke-width:0.93414783px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 18.969001,16.503026 L 30.834517,16.593271"
+       id="path3200" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#29293e;stroke-width:0.93414783px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 18.698451,20.609164 L 30.602618,20.51892"
+       id="path3202" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#29293e;stroke-width:0.93414783px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 19.007651,24.444568 L 30.718567,24.579935"
+       id="path3204" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="arrow">
+    <path
+       style="fill:#48ea16;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.95899999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 5.1915998,18.216839 L 14.356923,18.375046 L 14.356923,14.660358 L 20.82662,20.170347 L 14.534314,26.62958 L 14.475183,23.200391 L 5.1915998,23.042183 L 5.1915998,18.216839 z "
+       id="path3230"
+       sodipodi:nodetypes="cccccccc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/ODB_VISUALISER.svg b/share/metview/icons_mv5/ODB_VISUALISER.svg
new file mode 100644
index 0000000..32bc51d
--- /dev/null
+++ b/share/metview/icons_mv5/ODB_VISUALISER.svg
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="90"
+   inkscape:export-xdpi="90"
+   inkscape:export-filename="/tmp/cgr/work/icons/metview/ODB_MANAGER.png"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="ODB_VISUALISER.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.36894"
+     inkscape:cx="23.02576"
+     inkscape:cy="14.509439"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1567"
+     inkscape:window-height="1081"
+     inkscape:window-x="215"
+     inkscape:window-y="50"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective5782" />
+    <linearGradient
+       id="linearGradient3272">
+      <stop
+         style="stop-color:#668e93;stop-opacity:1;"
+         offset="0"
+         id="stop3274" />
+      <stop
+         id="stop2215"
+         offset="0.322"
+         style="stop-color:#d1e8e9;stop-opacity:1;" />
+      <stop
+         id="stop2205"
+         offset="0.69999999"
+         style="stop-color:#9fc2c2;stop-opacity:1;" />
+      <stop
+         style="stop-color:#718b98;stop-opacity:1;"
+         offset="0.829"
+         id="stop2209" />
+      <stop
+         style="stop-color:#e6c3b4;stop-opacity:1;"
+         offset="0.958"
+         id="stop2207" />
+      <stop
+         style="stop-color:#dff0ef;stop-opacity:1;"
+         offset="1"
+         id="stop3276" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2933">
+      <stop
+         offset="0"
+         style="stop-color:#9baec2;stop-opacity:1;"
+         id="stop2935" />
+      <stop
+         id="stop3204"
+         style="stop-color:#c0dbdf;stop-opacity:1;"
+         offset="0.5" />
+      <stop
+         offset="1"
+         style="stop-color:#e4e4e4;stop-opacity:1;"
+         id="stop2937" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3272"
+       id="linearGradient11159"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.67430563,0,0,0.3868906,-5.1471116,4.2679248)"
+       x1="6.3181248"
+       y1="23.55978"
+       x2="42.042122"
+       y2="24.921354" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3272"
+       id="linearGradient2217"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.67430283,0,0,0.38698637,-5.1470432,9.7030836)"
+       x1="6.3181248"
+       y1="23.55978"
+       x2="42.042122"
+       y2="24.921354" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2933"
+       id="linearGradient3202"
+       x1="-6.2987657"
+       y1="4.4701581"
+       x2="15.431515"
+       y2="7.5"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3272"
+       id="linearGradient3220"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.67430283,0,0,0.38698637,-5.1458922,-0.73404727)"
+       x1="6.3181248"
+       y1="23.55978"
+       x2="42.042122"
+       y2="24.921354" />
+    <inkscape:perspective
+       id="perspective5793"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4026"
+       id="linearGradient4032"
+       x1="16.804222"
+       y1="14.95285"
+       x2="27.970543"
+       y2="14.95285"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0951557,0,0,1,-4.4164725,4.946114)" />
+    <linearGradient
+       id="linearGradient4026">
+      <stop
+         style="stop-color:#f30e1e;stop-opacity:1;"
+         offset="0"
+         id="stop4028" />
+      <stop
+         style="stop-color:#ba2f39;stop-opacity:1;"
+         offset="1"
+         id="stop4030" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3975"
+       id="linearGradient3981"
+       x1="21.350325"
+       y1="20.322937"
+       x2="23.313965"
+       y2="20.322939"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.135239,0,0,1.0828856,-4.4757685,4.4985923)" />
+    <linearGradient
+       id="linearGradient3975">
+      <stop
+         style="stop-color:#565c64;stop-opacity:1;"
+         offset="0"
+         id="stop3977" />
+      <stop
+         style="stop-color:#99a4b4;stop-opacity:1;"
+         offset="1"
+         id="stop3979" />
+    </linearGradient>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="front"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient11159);fill-opacity:1;fill-rule:evenodd;stroke:#5165b2;stroke-width:0.88583273;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 1.4484395,10.232992 0,4.779461 c 0.042387,0.329219 0.2402842,0.660099 0.6532326,1.00123 0.4675677,0.386252 1.1834541,0.761221 2.0861339,1.076796 1.8053591,0.631149 4.3511495,1.039012 7.164495,1.039012 2.813346,0 5.359137,-0.407863 7.164497,-1.039012 0.902679,-0.315575 1.639637,-0.690545 2.107204,-1.076796 0.350675,-0.289686 0.553522,-0.569867 0.632162,-0.8501 l 0,-4.930591 c -0.02172,0.01874 -0.04086,0.03821 -0.06322,0.05667 -0.581643,0.480488 -1.366052,0.887785 -2.338997,1.2 [...]
+       id="path11155" />
+    <path
+       style="fill:url(#linearGradient2217);fill-opacity:1;fill-rule:evenodd;stroke:#5165b2;stroke-width:0.88592649;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 1.4484803,15.669626 0,4.780643 c 0.042388,0.3293 0.2402835,0.660261 0.6532301,1.001477 0.4675651,0.386345 1.1834482,0.761409 2.0861249,1.077061 1.8053522,0.631304 4.3511312,1.03927 7.1644657,1.03927 2.813335,0 5.359115,-0.407966 7.164467,-1.03927 0.902677,-0.315652 1.63963,-0.690716 2.107196,-1.077061 0.350674,-0.28976 0.553519,-0.570008 0.632158,-0.850311 l 0,-4.931809 c -0.02172,0.01874 -0.04086,0.03822 -0.06322,0.05669 -0.581641,0.480606 -1.366044,0.888005 -2.338988,1.2282 [...]
+       id="path2215" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3202);fill-opacity:1;fill-rule:evenodd;stroke:#5165b2;stroke-width:1.19739807;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path2219"
+       sodipodi:cx="4.5"
+       sodipodi:cy="7.5"
+       sodipodi:rx="10.5"
+       sodipodi:ry="6.5"
+       d="m 15,7.5 a 10.5,6.5 0 1 1 -21,0 10.5,6.5 0 1 1 21,0 z"
+       transform="matrix(0.94619968,0,0,0.46726855,7.1054244,1.0584783)" />
+    <path
+       style="fill:url(#linearGradient3220);fill-opacity:1;fill-rule:evenodd;stroke:#5165b2;stroke-width:0.88592649;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 1.4496311,5.232495 0,4.780642 c 0.042388,0.329301 0.2402829,0.660262 0.6532313,1.001479 0.4675638,0.386346 1.1834477,0.761408 2.0861244,1.077061 1.805352,0.631304 4.3511318,1.039271 7.1644652,1.039271 2.813334,0 5.359116,-0.407967 7.164467,-1.039271 0.902677,-0.315653 1.63963,-0.690716 2.107196,-1.077061 0.350674,-0.289759 0.553519,-0.570007 0.63216,-0.850311 l 0,-4.93181 C 21.235555,5.251234 21.216415,5.27071 21.194055,5.289182 20.612416,5.7697887 19.82801,6.1771874 18.85507 [...]
+       id="path3218" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="screen"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:#939dac;fill-opacity:1;fill-rule:evenodd;stroke:#123b7d;stroke-width:0.28685689;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.29999995;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       id="path3869"
+       sodipodi:cx="-3.3759081"
+       sodipodi:cy="15.175204"
+       sodipodi:rx="2.6094856"
+       sodipodi:ry="1.2408743"
+       d="m -0.76642251,15.175204 a 2.6094856,1.2408743 0 1 1 -5.21897129,0 2.6094856,1.2408743 0 1 1 5.21897129,0 z"
+       transform="matrix(1.7971318,0.34159025,-0.37101268,1.6200355,31.271695,5.1735965)" />
+    <path
+       style="fill:url(#linearGradient3981);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 17.574218,23.742914 c 0,0 0.257868,1.326588 1.996868,1.665105 1.739004,0.338517 2.420066,-0.806817 2.420066,-0.806817 l -0.0062,4.057523 c 0,0 -0.680348,0.8151 -2.436815,0.561448 -1.496348,-0.216089 -2.015341,-1.135695 -2.015341,-1.135695 l 0.04144,-4.341564 2.8e-5,0 z"
+       id="rect2870-42"
+       sodipodi:nodetypes="czccsccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#6f7c91;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 15.256463,10.439627 c 0,0 3.208652,1.068728 5.56385,1.380379 2.3552,0.311651 8.318581,0.260686 8.318581,0.260686 l -1.17551,1.754139 c 0,0 -5.796507,-0.0066 -8.83197,-0.433315 C 16.095951,12.974778 12.1303,11.365747 12.1303,11.365747 l 3.126163,-0.92612 z"
+       id="rect2870-4-3-8"
+       sodipodi:nodetypes="czcczcc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#373e48;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 27.893475,13.6762 1.288282,-1.596526 -0.01518,12.544696 -1.193602,1.521818 -0.0795,-12.469988 z"
+       id="rect3690-2-0"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#0c2248;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.29999995;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+       d="m 12.430777,11.755845 c 0,0 2.955238,1.276837 6.851552,1.857501 3.896315,0.580665 8.394286,0.355692 8.394286,0.355692 l 0.04538,11.895918 c 0,0 -5.032626,0.291789 -8.514194,-0.243177 -3.481568,-0.534966 -6.715432,-2.161573 -6.715432,-2.161573 l -0.0616,-11.704361 z"
+       id="rect3828-2"
+       sodipodi:nodetypes="czcczcc" />
+    <path
+       style="fill:none;stroke:#6c5b5d;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 14.0093,21.197959 c 1.825257,0.632676 3.250822,1.483391 5.475771,1.788319 0.839425,0.182748 3.035471,0.413693 7.034567,0.145985"
+       id="path3996-1"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#6c5b5d;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="M 18.285998,24.409634 18.16609,14.227164"
+       id="path3998-0" />
+    <path
+       style="fill:none;stroke:url(#linearGradient4032);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+       d="m 14.534346,19.034839 c 0,0 0.839489,2.702497 1.251996,2.148768 1.609019,-2.159868 3.463916,-5.927736 3.781734,-5.425425 0.704791,1.113917 1.201134,4.983495 2.066852,6.515474 0.351413,0.621863 2.466197,-2.729574 2.466197,-2.729574 l 1.566925,4.541256"
+       id="path3992"
+       sodipodi:nodetypes="cssscc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/OPERA_RADAR_FILTER.svg b/share/metview/icons_mv5/OPERA_RADAR_FILTER.svg
new file mode 100644
index 0000000..da366a6
--- /dev/null
+++ b/share/metview/icons_mv5/OPERA_RADAR_FILTER.svg
@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:ns="http://creativecommons.org/ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   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.45.1"
+   sodipodi:docname="OPERA_RADAR_FILTER_v3.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/src/OperaRadar/OPERA_RADAR_FILTER_32x32.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"
+   sodipodi:version="0.32"
+   sodipodi:docbase="/var/tmp/cgi/PERFORCE/metview_4/metview/src/OperaRadar"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <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
+       inkscape:collect="always"
+       id="linearGradient4275">
+      <stop
+         style="stop-color:#c5e9eb;stop-opacity:1;"
+         offset="0"
+         id="stop4277" />
+      <stop
+         style="stop-color:#c5e9eb;stop-opacity:0;"
+         offset="1"
+         id="stop4279" />
+    </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="#linearGradient4275"
+       id="linearGradient2445"
+       gradientUnits="userSpaceOnUse"
+       x1="7.75"
+       y1="34.875"
+       x2="34.875"
+       y2="34.875" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4749"
+       id="linearGradient2447"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0003011,0,0,1.02,-65.835729,20.223707)"
+       x1="14.5655"
+       y1="32.444443"
+       x2="61.434502"
+       y2="32.444443" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4749"
+       id="linearGradient2449"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-64.516567,16.930924)"
+       x1="7.4365482"
+       y1="14.912783"
+       x2="17.436548"
+       y2="14.912783" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4749"
+       id="linearGradient2451"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-67.465345,21.962528)"
+       x1="2.3853252"
+       y1="34.659901"
+       x2="8.3853254"
+       y2="34.659901" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4749"
+       id="linearGradient2453"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2634735,-0.2649791,0.2649791,0.2634735,-48.865955,34.448788)"
+       x1="7.4365482"
+       y1="14.912783"
+       x2="17.436548"
+       y2="14.912783" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="14.170032"
+     inkscape:cx="4.9495998"
+     inkscape:cy="17.475549"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer6"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1620"
+     inkscape:window-height="1096"
+     inkscape:window-x="1954"
+     inkscape:window-y="24"
+     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></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="layer7"
+     inkscape:label="box" />
+  <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>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="item"
+     transform="translate(0,-32)"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:#aaccff;fill-opacity:1;fill-rule:nonzero;stroke:#5b5b5b;stroke-width:0.4972266;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2273"
+       width="7.2297878"
+       height="1.2049645"
+       x="-26.775639"
+       y="41.668259"
+       transform="matrix(0.7236421,-0.6901754,0.7236421,0.6901754,0,0)" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#6b6b6b;stroke-width:0.79865623px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 15.399328,37.681614 C 22.818318,37.681614 20.465935,44.189241 20.465935,44.189241"
+       id="path2293" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#6b6b6b;stroke-width:0.85399997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 16.713885,34.427 C 27.469879,34.427 24.059411,45.490031 24.059411,45.490031"
+       id="path2295" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ff0000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="path3266"
+       sodipodi:cx="-3.2462878"
+       sodipodi:cy="8.3585567"
+       sodipodi:rx="0.98800063"
+       sodipodi:ry="0.98800063"
+       d="M -2.2582872 8.3585567 A 0.98800063 0.98800063 0 1 1  -4.2342885,8.3585567 A 0.98800063 0.98800063 0 1 1  -2.2582872 8.3585567 z"
+       transform="matrix(0.774842,0,0,0.8462706,19.344931,35.1674)" />
+    <path
+       style="fill:#0055d4;fill-rule:evenodd;stroke:#000000;stroke-width:1.06429958px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 7.8881231,56.108721 L 11.647501,56.108721 L 12.788065,63.46785 L 6.8106671,63.46785 L 7.8881231,56.108721 z "
+       id="path3270" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#aaccff;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="path2269"
+       sodipodi:cx="17.29001"
+       sodipodi:cy="20.637993"
+       sodipodi:rx="8.821434"
+       sodipodi:ry="8.821434"
+       d="M 26.111444,20.637993 A 8.821434,8.821434 0 1 1 8.4685764,20.637992 L 17.29001,20.637993 z"
+       transform="matrix(0.7713861,0.7454456,-0.728137,0.783723,14.134228,17.861141)"
+       sodipodi:start="0"
+       sodipodi:end="3.1415927" />
+    <g
+       id="g2427"
+       transform="matrix(0.38727,0,0,0.3872451,44.968361,40.342899)">
+      <path
+         transform="matrix(2.1986858,2.524672e-2,0,1.3464236,-82.359761,5.8491151)"
+         d="M 34.875 34.875 A 13.5625 22.28125 0 1 1  7.75,34.875 A 13.5625 22.28125 0 1 1  34.875 34.875 z"
+         sodipodi:ry="22.28125"
+         sodipodi:rx="13.5625"
+         sodipodi:cy="34.875"
+         sodipodi:cx="21.3125"
+         id="path4257"
+         style="fill:url(#linearGradient2445);fill-opacity:1;stroke:none;display:inline"
+         sodipodi:type="arc" />
+      <path
+         id="path3662"
+         d="M -21.822481,26.343707 L -21.822481,29.403707 L -22.822783,29.403707 L -24.823384,29.403707 C -24.823384,29.403707 -24.823384,29.403707 -25.823685,28.383707 C -26.823988,27.363707 -28.824589,29.403707 -28.824589,29.403707 L -29.82489,30.423707 C -29.82489,30.423707 -31.825492,29.403707 -33.826094,33.483707 C -35.826696,37.563707 -32.825793,34.503708 -32.825793,34.503708 L -30.82519,33.483707 L -30.82519,35.523708 L -31.825492,37.563707 L -32.825793,38.583708 L -34.826395,37.5 [...]
+         style="fill:url(#linearGradient2447);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:0.86900002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+      <path
+         sodipodi:nodetypes="cccccccccccc"
+         id="path3656"
+         d="M -50.580019,27.343707 L -54.580019,30.343707 L -56.580019,35.343707 L -55.580019,36.343707 L -54.580019,36.343707 L -52.580019,35.343707 L -50.580019,34.343707 L -48.580019,32.343707 L -47.580019,30.343707 L -47.580019,29.343707 L -47.580019,28.343707 L -50.580019,27.343707 z "
+         style="fill:url(#linearGradient2449);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+      <path
+         sodipodi:nodetypes="ccccccccccsc"
+         id="path3660"
+         d="M -62.642519,51.906207 C -63.179629,51.955037 -63.580019,52.343707 -63.580019,52.343707 L -64.580019,56.343707 L -62.580019,61.343707 L -62.580019,60.343707 L -61.580019,58.343707 L -60.580019,57.343707 L -59.580019,55.343707 L -59.580019,54.343707 L -60.580019,53.343707 C -60.580019,53.343707 -60.580019,53.343707 -61.580019,52.343707 C -61.955019,51.968707 -62.320254,51.87691 -62.642519,51.906207 z "
+         style="fill:url(#linearGradient2451);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+      <path
+         style="fill:url(#linearGradient2453);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M -42.434873,33.499387 L -42.69383,35.349724 L -41.895882,37.19705 L -41.367429,37.19555 L -41.103955,36.93057 L -40.841987,36.137139 L -40.580019,35.343707 L -40.583019,34.286801 L -40.849504,33.494875 L -41.114483,33.231402 L -41.379462,32.967928 L -42.434862,33.499392 L -42.434873,33.499387 z "
+         id="path3874"
+         sodipodi:nodetypes="cccccccccccc" />
+      <path
+         transform="matrix(2.2119815,2.524672e-2,0,1.3464236,-81.722876,5.8491141)"
+         d="M 34.875 34.875 A 13.5625 22.28125 0 1 1  7.75,34.875 A 13.5625 22.28125 0 1 1  34.875 34.875 z"
+         sodipodi:ry="22.28125"
+         sodipodi:rx="13.5625"
+         sodipodi:cy="34.875"
+         sodipodi:cx="21.3125"
+         id="path2883"
+         style="fill:none;stroke:#3d6689;stroke-width:1.14283538;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         sodipodi:type="arc" />
+    </g>
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#87a0d2;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+       id="rect3195"
+       width="31.226377"
+       height="31.261541"
+       x="0.37362251"
+       y="32.400002" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/OVERLAY_CONTROL.xpm b/share/metview/icons_mv5/OVERLAY_CONTROL.xpm
new file mode 100644
index 0000000..7a53f4a
--- /dev/null
+++ b/share/metview/icons_mv5/OVERLAY_CONTROL.xpm
@@ -0,0 +1,72 @@
+/* XPM */
+static char * OVERLAY_CONTROL_xpm[] = {
+"32 32 37 1",
+" 	c #DADAF6F6FFFF",
+".	c #7C7CBDBD7676",
+"X	c #BEBEBEBEBEBE",
+"o	c #7E7E7E7E7E7E",
+"O	c #666654543333",
+"+	c #000064640000",
+"@	c #333333333333",
+"#	c #6C6C7B7B8B8B",
+"$	c #ADADD8D8E6E6",
+"%	c #6C6CA6A63232",
+"&	c #B0B0C4C4DEDE",
+"*	c #000073734B4B",
+"=	c #E5E54A4A3939",
+"-	c #999916160808",
+";	c #4D4D60600000",
+":	c #FFFF00000000",
+">	c #A7A761613636",
+",	c #E5E55C5C6969",
+"<	c #94947A7A4A4A",
+"1	c #686810100000",
+"2	c #B2B2B2B2B2B2",
+"3	c #00008C8C3030",
+"4	c #525203030000",
+"5	c #B2B233330000",
+"6	c #777777777777",
+"7	c #66663B3B2020",
+"8	c #FFFF25250000",
+"9	c #BFBFA4A46868",
+"0	c #F0F079796161",
+"q	c #FFFFFFFFFFFF",
+"w	c #FFFFE2E2ABAB",
+"e	c #00000000FFFF",
+"r	c #7373A3A3FFFF",
+"t	c #00007F7FFFFF",
+"y	c #000000008080",
+"u	c #D9D9B7B77777",
+"i	c #25250000FFFF",
+"      ..          ............  ",
+"     ...          ........... ..",
+"     .....       ...........  ..",
+"     .....       XooooooX     ..",
+"      .....     O+@#$$$$#O   .. ",
+"  .     ...    %+##+#$$&&*#     ",
+"....   .....  O=-;-O:>:,<:1>    ",
+".....  ..... Xo1-%1@:222&:34X   ",
+".....  ..... o@>451#:=&&&:##o.. ",
+"....    .... ##1@=1&:&=&&:#&#...",
+" .     ..... #&,O&22,,,&657;%...",
+"     .....   #&#=1-6:,=&-88=9...",
+"             #&,0+;+:&,,>574%...",
+"     q Xoooooo&,>o+3:&,,,=7+o...",
+"      O+@#$#wX#2=@9+:&=2,,#+X...",
+"     %+##+#$::O&2>46,,2&,, at O ...",
+"    OO--+@&#2###&##&&&&&&#O  ...",
+"   Xo+-5+@#&&$$#O##&&&&&#O   ...",
+"   o at O+3+#&&&:##eXo####oX    ...",
+"   ##+@#*er2:2&#ee#...      ....",
+"   #t#@&rer2:2#;@@%..   .  .....",
+"   yey at ++#&&&&+99u9...     .....",
+"   #t#o+++#&&&@;;+%.... .  .....",
+" . o&&#o+3#&&&&&++o .....  .....",
+".. X#2:4o+&&&,&&#+X  ...   .... ",
+"..  O2:OO#&&,:,&@O   ..    ...  ",
+"...  #&##ii&&,&#O     ..    .   ",
+"  .   O##ii&&&#O                ",
+"       Xo####oX    .............",
+"   ...         .................",
+" ...............................",
+"................................"};
diff --git a/share/metview/icons/PAXIS.xpm b/share/metview/icons_mv5/PAXIS.xpm
similarity index 100%
copy from share/metview/icons/PAXIS.xpm
copy to share/metview/icons_mv5/PAXIS.xpm
diff --git a/share/metview/icons_mv5/PCOAST.xpm b/share/metview/icons_mv5/PCOAST.xpm
new file mode 100644
index 0000000..e6cd0cf
--- /dev/null
+++ b/share/metview/icons_mv5/PCOAST.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * PCOAST_xpm[] = {
+"32 32 12 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #E5CD99",
+"@	c #F9FAEA",
+"#	c #9999E5",
+"$	c #A399E5",
+"%	c #7F7F7F",
+"&	c #E599DA",
+"*	c #E4E599",
+"=	c #E2D8C4",
+"-	c #F6EDDC",
+";	c #E2B48C",
+"....++++++++++++++++++++++++++++",
+"...++@@@@@@@#@$$$$@@@@@@@@@@@@@+",
+"..+++@@@@@@#@$@@$@@@@@@@@@@@@@@+",
+".++++@@@@@@#@$@$@@@@@@@@@@@@@@@+",
+"+++++@@@@@@@$$@$$$$$@@@@@@@@@@@+",
+"+@@@@@@@@@@@$@@@@@$@@@@@@@@@@@@+",
+"+@@@@@@@@@@@$@@@@$@@@@@@@@@@@@@+",
+"+@@@@@@@@@@@@$@@@$@@@@@@@@@@@@@+",
+"+@@@@@@@@@@@@$$@$@@@@@@@@@@%%%@+",
+"+@@@@@@@@@@@@$$@$$$@@@@@@@%&&%@+",
+"+@@@@@@@@@$@@@$@@@@$@@@@@%*%&%@+",
+"+@@@@@@@$$@$$@@$@@@$@@@@%*=%%@@+",
+"+@@@@@@$@@@@$@@$$$@@$@@%*=%%@@@+",
+"+@@@@$$$@@@@$@@@@$@%%%%*=%%@@@@+",
+"+@@@$@@@@@@$@@@@@@%-=%*=%%@@@@@+",
+"+@@@$@@@@@@$@@@@@%-=%*=%%@@@@@@+",
+"+@@@@$@@@@@$@@@@%-=%*=%%=%@@@@@+",
+"+@@@@@$@@@@$@@@%-=%*=%%==-%@@@@+",
+"+@@@@$$@@@@$@@%-=%*=%%%=---%@@@+",
+"+@@$$$@@@@$$@@%=%*=%%@%;----%%%+",
+"+@@$@@@$$$@@@@@%*%%%%%@-----=%%+",
+"+@@@$$$@@@@@@@%*%@----------=%%+",
+"+@@@@@@@@@@@@@%=%%%===------=%%+",
+"+@@@@@@@@@@@@%%%@@@%%%====--=%%+",
+"+@@@@@@@@@@@@%@@@$$$$$%%%%===%%+",
+"+@@@@@@@@@@@$@$$$@@@@@@@@$%%%%%+",
+"+@@@@@@@@@@@$$@@@@@@@@@@@$@@@%%+",
+"+@@@@@@@@@@@@@@@@@@@@@@@$@@@@@@+",
+"+@@@@@@@@@@@@@@@@@$$@@@$@@@@@@@+",
+"+@@@@@@@@@@@@@@@@@$@$$$@@@@@@@@+",
+"+@@@@@@@@@@@@@@@@@@$@@@@@@@@@@@+",
+"++++++++++++++++++++++++++++++++"};
diff --git a/share/metview/icons_mv5/PCONT.xpm b/share/metview/icons_mv5/PCONT.xpm
new file mode 100644
index 0000000..61bde40
--- /dev/null
+++ b/share/metview/icons_mv5/PCONT.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * PCONT_xpm[] = {
+"32 32 12 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #BABABA",
+"@	c #EDEDED",
+"#	c #A399E5",
+"$	c #7F7F7F",
+"%	c #E599DA",
+"&	c #E4E599",
+"*	c #E2D8C4",
+"=	c #F6EDDC",
+"-	c #E5B099",
+";	c #F9FAEA",
+"....++++++++++++++++++++++++++++",
+"...++@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"..+++@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+".++++@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"+++++@@@@@@#######@@@@@@@@@@@@@+",
+"+@@@@@@@@##@@@@@@@######@@@$$$@+",
+"+@@@@@@##@@@@@@@@@@@@@@@##$%%$@+",
+"+@@@@##@@@@@@@@@@@@@@@@@@$&$%$@+",
+"+@@##@@@@@@@@@@@@@@@@@@@$&*$$@@+",
+"+@#@@@@@@@@@@@@@@@@@@@@$&*$$#@@+",
+"+#@@@@@@@@@@@@@@@@@$$$$&*$$@@#@+",
+"+@@@@@@@@@@@@@@@@@$=*$&*$$@@@#@+",
+"+@@@@@@@@@@@@@@@@$=*$&*$$@@@@#@+",
+"+@@@@@@@@@@@@@@@$=*$&*$$*$@@@#@+",
+"+@@@@@@@@####@@$=*$&*$$**=$@@@#+",
+"+@@@@@###@@@@@$=*$&*$$$*===$@@#+",
+"+@@@##@@@@@@@@$*$&*$$@$-====$$$$",
+"+@@##@@@@@@@@@@$&$$$$$;=====*$$$",
+"+@#@@@@@@@@@@@$&$;==========*$$$",
+"+#@@@@@@@@@@@@$*$$$***======*$$$",
+"+@@@@@####@@@$$$@@@$$$****==*$$$",
+"+@@@##@@@@##$$@@@@@@#@$$$$***$$$",
+"+@@#@@@@@@@@@#@@@@@@#@@@@@$$$$$$",
+"+@#@@@@@@@@@@#@@@@@@@#@@@@@@@$$$",
+"+#@@@@@@@@@@@#@@@@@@@#@@@@@@@@#+",
+"+#@@@@@@@@@@@@#@@@@@@#@@@@@@@@#+",
+"+#@@@@@@@@@@@@#@@@@@#@@@@@@@@#@+",
+"+#@@@@@@@@@@@#@@@@@@#@@@@@@@@#@+",
+"+#@@@@@@@@@@@#@@@@@@#@@@@@@@@#@+",
+"+#@@@@@@@@@@@#@@@@@#@@@@@@@@#@@+",
+"+@#@@@@@@@@@#@@@@@@#@@@@@@@@#@@+",
+"++++++++++++++++++++++++++++++++"};
diff --git a/share/metview/icons_mv5/PDF.svg b/share/metview/icons_mv5/PDF.svg
new file mode 100644
index 0000000..b61914b
--- /dev/null
+++ b/share/metview/icons_mv5/PDF.svg
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4537"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="PDF.svg">
+  <defs
+     id="defs4539" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.7781746"
+     inkscape:cx="-5.821768"
+     inkscape:cy="33.638942"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1032"
+     inkscape:window-x="-4"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1"
+     objecttolerance="14"
+     gridtolerance="10">
+    <inkscape:grid
+       type="xygrid"
+       id="grid4547"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g3668"
+       transform="translate(1.498962,0.43807)">
+      <rect
+         y="29.611233"
+         x="9.3853531"
+         height="24.301182"
+         width="43.858448"
+         id="rect5443"
+         style="fill:#ffffff;fill-opacity:1;stroke:#2b2ba8;stroke-width:0.66900003;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5576"
+         d="m 12.00147,34.970442 c -0.901277,-0.05985 1.752843,-0.339164 2.234407,0.130003 0.957567,0.712661 1.18984,2.123 2.13165,2.923832 0.260503,1.453921 1.968929,1.967219 2.828948,2.97109 0.432381,1.625124 1.23279,3.184249 1.033099,4.902818 -0.677044,1.141376 1.766426,3.365573 1.34802,1.181024 0.103719,-1.819029 2.706961,-1.629955 2.999127,-3.430637 0.808487,-1.451529 -1.269877,-2.797441 -2.442059,-3.271322 -1.385722,0.174453 -4.225816,-0.619643 -3.190689,-2.449816 1.553179,0.195877 [...]
+         style="fill:none;stroke:#000000;stroke-width:0.69800001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccccccccccc"
+         id="path5580"
+         d="m 48.022923,37.312399 c -1.447924,0.979175 -1.722092,2.195614 -2.793349,3.585786 -1.035917,1.182681 -2.990513,-0.663653 -3.892025,-1.305233 -0.214816,0.703369 0.199566,1.869871 -1.107975,1.305233 0.02768,-1.360363 -1.740647,-2.467806 -2.840924,-1.177239 -0.806036,0.592788 0.915949,1.316352 -0.197641,2.001955 -1.207275,1.173552 -1.450466,2.959611 -2.60083,4.067118 C 32.692987,45.683081 33.110177,42.954644 32.001764,41.875226 30.899018,41.25442 29.251246,40.554302 30,39 c 0.137 [...]
+         style="fill:none;stroke:#000000;stroke-width:0.698;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5582"
+         d="m 46.898621,43.332135 c -1.266227,-0.338229 -3.499668,-0.580426 -2.977416,1.445146 0.68862,1.043044 2.567723,1.153239 3.705953,1.120904 1.326702,-1.285802 -0.491603,-2.221759 -1.200981,-3.037823 -0.762861,-0.784879 -0.941411,-0.249985 0.01964,0.151196 l 0.268353,0.179799 0.184449,0.140778 0,0 z"
+         style="fill:none;stroke:#000000;stroke-width:0.59799999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5584"
+         d="m 10.229574,51.12737 c 1.947437,-0.856815 4.140833,-0.539369 6.18976,-0.871832 1.562548,0.30785 3.119744,-0.141064 4.708935,-0.0011 1.595266,-0.05391 3.256219,0.214598 4.756516,-0.438115 1.685034,-0.577797 3.519762,-0.20353 5.274435,-0.310161 1.508353,-0.109211 2.940498,0.123817 4.411483,0.250368 1.95049,0.0915 3.843565,-0.196223 5.788598,-0.132875 2.156658,0.02072 4.289417,-0.233492 6.444845,-0.241463 1.738245,-0.417075 2.519849,1.560464 4.308833,1.121697 l 0.09638,0 0.02022,0"
+         style="fill:none;stroke:#000000;stroke-width:0.70700002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5586"
+         d="m 22.924607,33.663415 c 0.820143,0.973176 0.333546,3.407153 2.304967,2.23477 0.174915,-0.996066 1.970806,-2.004208 1.095151,-2.916865 -1.255015,0.224146 -2.695228,-0.32281 -3.803043,0.438531 -0.221264,-0.849196 -0.305912,-0.55997 -0.303598,-0.01255 -1.07997,0.153218 0.493715,0.09155 0.706523,0.256114 z"
+         style="fill:none;stroke:#000000;stroke-width:0.69800001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5598"
+         d="m 34.061454,45.018667 c -0.26543,-0.247948 -0.409767,-0.556921 -0.720095,-1.541467 -0.304995,-0.967624 -0.620483,-1.643108 -0.883364,-1.89135 -0.09888,-0.09338 -0.438482,-0.317866 -0.754658,-0.498858 -1.00628,-0.576037 -1.339483,-0.910464 -1.33292,-1.337811 0.0076,-0.497621 0.202136,-0.764731 1.008493,-1.385026 0.443577,-0.341224 0.610022,-0.5847 0.610022,-0.892339 0,-0.272267 -0.303831,-0.65784 -0.603872,-0.766336 l -0.214615,-0.07761 0.152114,-0.224152 c 0.16888,-0.248859 0 [...]
+         style="fill:#ffffff;fill-opacity:1;stroke:#2b2ba8;stroke-width:0.07056933;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5602"
+         d="m 34.154448,45.002201 c -0.231841,-0.182366 -0.422031,-0.572625 -0.719561,-1.476493 -0.327589,-0.995188 -0.675838,-1.725378 -0.939152,-1.969171 -0.119643,-0.110772 -0.525586,-0.393314 -0.902097,-0.627871 -0.826663,-0.514991 -1.147484,-0.841052 -1.147484,-1.166227 0,-0.379447 0.221344,-0.703128 0.841524,-1.230595 0.611703,-0.520258 0.765537,-0.728438 0.765537,-1.035987 0,-0.241726 -0.232168,-0.583559 -0.526228,-0.774796 l -0.232826,-0.151414 0.129503,-0.219493 c 0.102855,-0.17 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5604"
+         d="m 24.230234,35.561984 c -0.04165,-0.0667 -0.167082,-0.434852 -0.278731,-0.818123 -0.111649,-0.383271 -0.258678,-0.805998 -0.326732,-0.939393 l -0.123733,-0.242538 1.254814,0 c 0.690148,0 1.254814,0.02413 1.254814,0.05363 0,0.05571 -0.28094,0.467668 -0.779905,1.143616 -0.159845,0.216541 -0.327296,0.482239 -0.372115,0.59044 -0.05128,0.123794 -0.15429,0.222108 -0.277857,0.265184 -0.256983,0.08958 -0.262109,0.08881 -0.350555,-0.05281 l 0,0 z"
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5606"
+         d="M 18.033801,39.357638 C 17.377213,38.860256 16.889705,38.232859 16.883972,37.877866 16.883195,37.829786 16.744979,37.63992 16.576825,37.455933 16.408671,37.271945 16.03985,36.721754 15.757224,36.233286 15.189309,35.25175 14.729645,34.722418 14.254347,34.502632 13.98526,34.3782 13.842291,34.365018 12.714985,34.360699 c -1.329615,-0.0051 -1.357573,-0.012 -1.35973,-0.335913 -0.0016,-0.247651 0.173415,-0.503735 0.426444,-0.623805 0.220818,-0.104785 0.425067,-0.111047 2.525917,-0. [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5608"
+         d="m 20.840889,46.911832 -0.183477,-0.310116 0.08029,-0.654121 c 0.08686,-0.707611 0.02854,-1.497669 -0.166913,-2.261181 -0.238292,-0.93085 -0.88144,-2.908789 -1.000177,-3.075945 l -0.130158,-0.183234 0.151335,0.04674 c 0.08323,0.02571 0.223652,0.08315 0.312041,0.127651 0.271499,0.136689 1.106714,0.29532 1.645726,0.312569 0.415477,0.0133 0.580772,0.05115 0.875891,0.200581 0.866647,0.438824 1.669753,1.20445 1.758253,1.676199 0.06376,0.339867 -0.198868,1.08946 -0.493749,1.40926 -0 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5610"
+         d="m 46.51175,45.324255 c -0.740476,-0.05646 -1.466124,-0.2732 -1.82246,-0.544351 -0.228793,-0.174098 -0.264099,-0.235435 -0.280728,-0.487704 -0.01577,-0.239286 0.0086,-0.314529 0.142863,-0.440643 0.20513,-0.19271 0.883619,-0.249841 1.584352,-0.133407 0.46625,0.07747 0.48743,0.0893 0.906151,0.505913 0.235809,0.234623 0.448807,0.506698 0.47333,0.604612 0.06356,0.253776 -0.0774,0.563734 -0.250976,0.551873 -0.07526,-0.0051 -0.413899,-0.03048 -0.752532,-0.05629 l 0,0 z"
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5614"
+         d="m 10.229574,52.334879 0,-0.961759 0.226787,-0.06296 c 0.710699,-0.197299 3.701138,-0.410335 6.002292,-0.427597 3.84908,-0.02887 7.284703,-0.0845 7.574877,-0.122645 0.537541,-0.07066 0.962438,-0.166836 1.45602,-0.329568 0.981671,-0.323652 1.283677,-0.347071 4.537701,-0.351877 2.657757,-0.0039 3.211433,0.01288 4.483634,0.136054 1.177395,0.114 1.679803,0.133212 2.660966,0.101758 0.66524,-0.02133 2.420571,-0.06817 3.900733,-0.104087 1.480162,-0.03592 3.575673,-0.108425 4.65669,-0 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <path
+       style="fill:none;fill-opacity:1;stroke:#2b2b2c;stroke-width:0.57099999999999995;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 60,51.300138 -12.314168,-0.25713 -0.128565,10.776012 -42.5384548,0 0,-59.2887954 54.9811858,0 0,48.6413484 -12.314166,10.647447"
+       id="rect5379-7"
+       sodipodi:nodetypes="cccccccs" />
+    <text
+       xml:space="preserve"
+       style="font-size:22.55941390999999996px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#a30047;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="10.299904"
+       y="25.586369"
+       id="text5099"
+       transform="scale(0.97088284,1.0299904)"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2837"
+         x="10.299904"
+         y="25.586369">PDF</tspan></text>
+    <rect
+       style="fill:#e9005c;fill-opacity:1;stroke:#000000;stroke-width:0.43404418000000000;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3650"
+       width="55.136364"
+       height="2.4505296"
+       x="4.931819"
+       y="2.7349412" />
+    <path
+       style="fill:#d6d6ce;fill-opacity:1;stroke:none"
+       d="m 47.826131,51.255752 10.631091,0.130176 -10.631091,10.255519 0,-10.385695 z"
+       id="rect3652"
+       sodipodi:nodetypes="cccc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/PERCENTILE.svg b/share/metview/icons_mv5/PERCENTILE.svg
new file mode 100644
index 0000000..17ba5d1
--- /dev/null
+++ b/share/metview/icons_mv5/PERCENTILE.svg
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="PERCENTILE.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="13.28125"
+     inkscape:cx="30.74682"
+     inkscape:cy="15.472454"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1366"
+     inkscape:window-height="706"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="1"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849"
+       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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3901">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3903" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3905" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3642">
+      <stop
+         style="stop-color:#e14848;stop-opacity:1;"
+         offset="0"
+         id="stop3644" />
+      <stop
+         style="stop-color:#fa1511;stop-opacity:1;"
+         offset="1"
+         id="stop3646" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       id="filter3897">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.58403735"
+         id="feGaussianBlur3899" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3907"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="25.957588"
+       y2="3.7863109"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.75294117,-0.22588235)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3027"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.52705879,-3.4635294)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="25.957588"
+       y2="3.7863109" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3033"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.37647062,-8.4329411)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-7"
+       id="linearGradient3033-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.45176467,-7.6047059)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3901-7">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3903-4" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3905-0" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-7"
+       id="linearGradient3050"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.45176467,-7.6047059)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3052">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3054" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3056" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-7"
+       id="linearGradient3058"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.45176467,-7.6047059)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3060">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3062" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3064" />
+    </linearGradient>
+    <linearGradient
+       y2="10.638075"
+       x2="32.884647"
+       y1="28.708662"
+       x1="3.7705307"
+       gradientTransform="translate(2.3440376,-6.1467811)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3069"
+       xlink:href="#linearGradient3901-7"
+       inkscape:collect="always" />
+    <filter
+       inkscape:collect="always"
+       id="filter3888">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.55334703"
+         id="feGaussianBlur3890" />
+    </filter>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="shadow">
+    <text
+       sodipodi:linespacing="125%"
+       id="text3845-9"
+       y="21.937929"
+       x="1.0640367"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;filter:url(#filter3888);font-family:Arial;-inkscape-font-specification:Arial"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan3025-4"
+         x="1.0640367"
+         y="21.937929"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;font-family:Arial;-inkscape-font-specification:Arial"><tspan
+           style="font-size:18px;fill:#000000"
+           id="tspan3031-8">Q%</tspan></tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame">
+    <text
+       sodipodi:linespacing="125%"
+       id="text3845"
+       y="21.534119"
+       x="0.45176476"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3033);fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan3025"
+         x="0.45176476"
+         y="21.534119"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:url(#linearGradient3033);font-family:Arial;-inkscape-font-specification:Arial"><tspan
+           style="font-size:18px;fill:url(#linearGradient3033)"
+           id="tspan3031">Q%</tspan></tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons/PGRAPH.xpm b/share/metview/icons_mv5/PGRAPH.xpm
similarity index 100%
copy from share/metview/icons/PGRAPH.xpm
copy to share/metview/icons_mv5/PGRAPH.xpm
diff --git a/share/metview/icons_mv5/PLOTPAGE.xpm b/share/metview/icons_mv5/PLOTPAGE.xpm
new file mode 100644
index 0000000..ace1a4f
--- /dev/null
+++ b/share/metview/icons_mv5/PLOTPAGE.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char * PLOTPAGE_xpm[] = {
+"32 32 3 1",
+" 	c #FFFFFFFFFFFF",
+".	c #373737373737",
+"X	c #808080808080",
+"    ........................    ",
+"    .                      .    ",
+"    .                      .    ",
+"    . XXXXXXXXXXXXXXXXXXXX .    ",
+"    . X                  X .    ",
+"    . X                  X .    ",
+"    . X                  X .    ",
+"    . XXXXXXXXXXXXXXXXXXXX .    ",
+"    .                      .    ",
+"    . XXXXXXXXXX XXXXXXXXX .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . XXXXXXXXXX X       X .    ",
+"    .            X       X .    ",
+"    . XXXXXXXXXX X       X .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . XXXXXXXXXX XXXXXXXXX .    ",
+"    .                      .    ",
+"    ........................    "};
diff --git a/share/metview/icons_mv5/PLOTSUBPAGE.xpm b/share/metview/icons_mv5/PLOTSUBPAGE.xpm
new file mode 100644
index 0000000..9ae6c44
--- /dev/null
+++ b/share/metview/icons_mv5/PLOTSUBPAGE.xpm
@@ -0,0 +1,39 @@
+/* XPM */
+static char * SUBPAGEDETAILS_xpm[] = {
+"32 32 4 1",
+" 	c #FFFFFFFFFFFF",
+".	c #373737373737",
+"X	c #808080808080",
+"o	c #8F8F8F8F8F8F",
+"    ........................    ",
+"    .                      .    ",
+"    .                      .    ",
+"    . XXXXXXXXXXXXXXXXXXXX .    ",
+"    . X                  X .    ",
+"    . X ooooooooooooooo  X .    ",
+"    . X ooooooooooooooo  X .    ",
+"    . XXXXXXXXXXXXXXXXXXXX .    ",
+"    .                      .    ",
+"    . XXXXXXXXXX XXXXXXXXX .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X  oooo  X X oooo  X .    ",
+"    . X  oooo  X X oooo  X .    ",
+"    . X  oooo  X X oooo  X .    ",
+"    . X  oooo  X X oooo  X .    ",
+"    . X        X X oooo  X .    ",
+"    . XXXXXXXXXX X oooo  X .    ",
+"    .            X oooo  X .    ",
+"    . XXXXXXXXXX X oooo  X .    ",
+"    . X        X X oooo  X .    ",
+"    . X oooooo X X oooo  X .    ",
+"    . X oooooo X X oooo  X .    ",
+"    . X oooooo X X oooo  X .    ",
+"    . X oooooo X X oooo  X .    ",
+"    . X oooooo X X oooo  X .    ",
+"    . X oooooo X X       X .    ",
+"    . X oooooo X X       X .    ",
+"    . X        X X       X .    ",
+"    . XXXXXXXXXX XXXXXXXXX .    ",
+"    .                      .    ",
+"    ........................    "};
diff --git a/share/metview/icons_mv5/PNG.svg b/share/metview/icons_mv5/PNG.svg
new file mode 100644
index 0000000..5a48521
--- /dev/null
+++ b/share/metview/icons_mv5/PNG.svg
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4537"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="PNG.svg">
+  <defs
+     id="defs4539" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.7781746"
+     inkscape:cx="-5.821768"
+     inkscape:cy="33.638942"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1032"
+     inkscape:window-x="-4"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1"
+     objecttolerance="14"
+     gridtolerance="10">
+    <inkscape:grid
+       type="xygrid"
+       id="grid4547"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g3668"
+       transform="translate(1.498962,0.43807)">
+      <rect
+         y="29.611233"
+         x="9.3853531"
+         height="24.301182"
+         width="43.858448"
+         id="rect5443"
+         style="fill:#ffffff;fill-opacity:1;stroke:#2b2ba8;stroke-width:0.66900003;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5576"
+         d="m 12.00147,34.970442 c -0.901277,-0.05985 1.752843,-0.339164 2.234407,0.130003 0.957567,0.712661 1.18984,2.123 2.13165,2.923832 0.260503,1.453921 1.968929,1.967219 2.828948,2.97109 0.432381,1.625124 1.23279,3.184249 1.033099,4.902818 -0.677044,1.141376 1.766426,3.365573 1.34802,1.181024 0.103719,-1.819029 2.706961,-1.629955 2.999127,-3.430637 0.808487,-1.451529 -1.269877,-2.797441 -2.442059,-3.271322 -1.385722,0.174453 -4.225816,-0.619643 -3.190689,-2.449816 1.553179,0.195877 [...]
+         style="fill:none;stroke:#000000;stroke-width:0.69800001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccccccccccc"
+         id="path5580"
+         d="m 48.022923,37.312399 c -1.447924,0.979175 -1.722092,2.195614 -2.793349,3.585786 -1.035917,1.182681 -2.990513,-0.663653 -3.892025,-1.305233 -0.214816,0.703369 0.199566,1.869871 -1.107975,1.305233 0.02768,-1.360363 -1.740647,-2.467806 -2.840924,-1.177239 -0.806036,0.592788 0.915949,1.316352 -0.197641,2.001955 -1.207275,1.173552 -1.450466,2.959611 -2.60083,4.067118 C 32.692987,45.683081 33.110177,42.954644 32.001764,41.875226 30.899018,41.25442 29.251246,40.554302 30,39 c 0.137 [...]
+         style="fill:none;stroke:#000000;stroke-width:0.698;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5582"
+         d="m 46.898621,43.332135 c -1.266227,-0.338229 -3.499668,-0.580426 -2.977416,1.445146 0.68862,1.043044 2.567723,1.153239 3.705953,1.120904 1.326702,-1.285802 -0.491603,-2.221759 -1.200981,-3.037823 -0.762861,-0.784879 -0.941411,-0.249985 0.01964,0.151196 l 0.268353,0.179799 0.184449,0.140778 0,0 z"
+         style="fill:none;stroke:#000000;stroke-width:0.59799999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5584"
+         d="m 10.229574,51.12737 c 1.947437,-0.856815 4.140833,-0.539369 6.18976,-0.871832 1.562548,0.30785 3.119744,-0.141064 4.708935,-0.0011 1.595266,-0.05391 3.256219,0.214598 4.756516,-0.438115 1.685034,-0.577797 3.519762,-0.20353 5.274435,-0.310161 1.508353,-0.109211 2.940498,0.123817 4.411483,0.250368 1.95049,0.0915 3.843565,-0.196223 5.788598,-0.132875 2.156658,0.02072 4.289417,-0.233492 6.444845,-0.241463 1.738245,-0.417075 2.519849,1.560464 4.308833,1.121697 l 0.09638,0 0.02022,0"
+         style="fill:none;stroke:#000000;stroke-width:0.70700002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5586"
+         d="m 22.924607,33.663415 c 0.820143,0.973176 0.333546,3.407153 2.304967,2.23477 0.174915,-0.996066 1.970806,-2.004208 1.095151,-2.916865 -1.255015,0.224146 -2.695228,-0.32281 -3.803043,0.438531 -0.221264,-0.849196 -0.305912,-0.55997 -0.303598,-0.01255 -1.07997,0.153218 0.493715,0.09155 0.706523,0.256114 z"
+         style="fill:none;stroke:#000000;stroke-width:0.69800001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5598"
+         d="m 34.061454,45.018667 c -0.26543,-0.247948 -0.409767,-0.556921 -0.720095,-1.541467 -0.304995,-0.967624 -0.620483,-1.643108 -0.883364,-1.89135 -0.09888,-0.09338 -0.438482,-0.317866 -0.754658,-0.498858 -1.00628,-0.576037 -1.339483,-0.910464 -1.33292,-1.337811 0.0076,-0.497621 0.202136,-0.764731 1.008493,-1.385026 0.443577,-0.341224 0.610022,-0.5847 0.610022,-0.892339 0,-0.272267 -0.303831,-0.65784 -0.603872,-0.766336 l -0.214615,-0.07761 0.152114,-0.224152 c 0.16888,-0.248859 0 [...]
+         style="fill:#ffffff;fill-opacity:1;stroke:#2b2ba8;stroke-width:0.07056933;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5602"
+         d="m 34.154448,45.002201 c -0.231841,-0.182366 -0.422031,-0.572625 -0.719561,-1.476493 -0.327589,-0.995188 -0.675838,-1.725378 -0.939152,-1.969171 -0.119643,-0.110772 -0.525586,-0.393314 -0.902097,-0.627871 -0.826663,-0.514991 -1.147484,-0.841052 -1.147484,-1.166227 0,-0.379447 0.221344,-0.703128 0.841524,-1.230595 0.611703,-0.520258 0.765537,-0.728438 0.765537,-1.035987 0,-0.241726 -0.232168,-0.583559 -0.526228,-0.774796 l -0.232826,-0.151414 0.129503,-0.219493 c 0.102855,-0.17 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5604"
+         d="m 24.230234,35.561984 c -0.04165,-0.0667 -0.167082,-0.434852 -0.278731,-0.818123 -0.111649,-0.383271 -0.258678,-0.805998 -0.326732,-0.939393 l -0.123733,-0.242538 1.254814,0 c 0.690148,0 1.254814,0.02413 1.254814,0.05363 0,0.05571 -0.28094,0.467668 -0.779905,1.143616 -0.159845,0.216541 -0.327296,0.482239 -0.372115,0.59044 -0.05128,0.123794 -0.15429,0.222108 -0.277857,0.265184 -0.256983,0.08958 -0.262109,0.08881 -0.350555,-0.05281 l 0,0 z"
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5606"
+         d="M 18.033801,39.357638 C 17.377213,38.860256 16.889705,38.232859 16.883972,37.877866 16.883195,37.829786 16.744979,37.63992 16.576825,37.455933 16.408671,37.271945 16.03985,36.721754 15.757224,36.233286 15.189309,35.25175 14.729645,34.722418 14.254347,34.502632 13.98526,34.3782 13.842291,34.365018 12.714985,34.360699 c -1.329615,-0.0051 -1.357573,-0.012 -1.35973,-0.335913 -0.0016,-0.247651 0.173415,-0.503735 0.426444,-0.623805 0.220818,-0.104785 0.425067,-0.111047 2.525917,-0. [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5608"
+         d="m 20.840889,46.911832 -0.183477,-0.310116 0.08029,-0.654121 c 0.08686,-0.707611 0.02854,-1.497669 -0.166913,-2.261181 -0.238292,-0.93085 -0.88144,-2.908789 -1.000177,-3.075945 l -0.130158,-0.183234 0.151335,0.04674 c 0.08323,0.02571 0.223652,0.08315 0.312041,0.127651 0.271499,0.136689 1.106714,0.29532 1.645726,0.312569 0.415477,0.0133 0.580772,0.05115 0.875891,0.200581 0.866647,0.438824 1.669753,1.20445 1.758253,1.676199 0.06376,0.339867 -0.198868,1.08946 -0.493749,1.40926 -0 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5610"
+         d="m 46.51175,45.324255 c -0.740476,-0.05646 -1.466124,-0.2732 -1.82246,-0.544351 -0.228793,-0.174098 -0.264099,-0.235435 -0.280728,-0.487704 -0.01577,-0.239286 0.0086,-0.314529 0.142863,-0.440643 0.20513,-0.19271 0.883619,-0.249841 1.584352,-0.133407 0.46625,0.07747 0.48743,0.0893 0.906151,0.505913 0.235809,0.234623 0.448807,0.506698 0.47333,0.604612 0.06356,0.253776 -0.0774,0.563734 -0.250976,0.551873 -0.07526,-0.0051 -0.413899,-0.03048 -0.752532,-0.05629 l 0,0 z"
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5614"
+         d="m 10.229574,52.334879 0,-0.961759 0.226787,-0.06296 c 0.710699,-0.197299 3.701138,-0.410335 6.002292,-0.427597 3.84908,-0.02887 7.284703,-0.0845 7.574877,-0.122645 0.537541,-0.07066 0.962438,-0.166836 1.45602,-0.329568 0.981671,-0.323652 1.283677,-0.347071 4.537701,-0.351877 2.657757,-0.0039 3.211433,0.01288 4.483634,0.136054 1.177395,0.114 1.679803,0.133212 2.660966,0.101758 0.66524,-0.02133 2.420571,-0.06817 3.900733,-0.104087 1.480162,-0.03592 3.575673,-0.108425 4.65669,-0 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <path
+       style="fill:none;fill-opacity:1;stroke:#2b2b2c;stroke-width:0.57099999999999995;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 60,51.300138 -12.314168,-0.25713 -0.128565,10.776012 -42.5384548,0 0,-59.2887954 54.9811858,0 0,48.6413484 -12.314166,10.647447"
+       id="rect5379-7"
+       sodipodi:nodetypes="cccccccs" />
+    <text
+       xml:space="preserve"
+       style="font-size:22.55941390999999996px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#057700;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="8.8052692"
+       y="25.461548"
+       id="text5099"
+       transform="scale(0.97088284,1.0299904)"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2837"
+         x="8.8052692"
+         y="25.461548">PNG</tspan></text>
+    <rect
+       style="fill:#007d00;fill-opacity:1;stroke:#000000;stroke-width:0.43404418000000000;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3650"
+       width="55.136364"
+       height="2.4505296"
+       x="4.931819"
+       y="2.7349412" />
+    <path
+       style="fill:#d6d6ce;fill-opacity:1;stroke:none"
+       d="m 47.826131,51.255752 10.631091,0.130176 -10.631091,10.255519 0,-10.385695 z"
+       id="rect3652"
+       sodipodi:nodetypes="cccc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/POBS.svg b/share/metview/icons_mv5/POBS.svg
new file mode 100644
index 0000000..e5d1305
--- /dev/null
+++ b/share/metview/icons_mv5/POBS.svg
@@ -0,0 +1,421 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="POBS.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="24.3125"
+     inkscape:cx="4.6020195"
+     inkscape:cy="15.260101"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1789"
+     inkscape:window-height="1096"
+     inkscape:window-x="47"
+     inkscape:window-y="0"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective48" />
+    <linearGradient
+       id="linearGradient3869">
+      <stop
+         style="stop-color:#fffa02;stop-opacity:1;"
+         offset="0"
+         id="stop3871" />
+      <stop
+         style="stop-color:#dddb31;stop-opacity:1;"
+         offset="1"
+         id="stop3873" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3869"
+       id="linearGradient3875"
+       x1="19.671978"
+       y1="7.6915169"
+       x2="22.446272"
+       y2="10.200515"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3889-8-5">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-0-0" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-2-6" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3889-7-1-2">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-7-1-5" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-5-0-8" />
+    </linearGradient>
+    <linearGradient
+       y2="11.866322"
+       x2="29.274038"
+       y1="11.866322"
+       x1="13.872494"
+       gradientTransform="translate(-0.90317401,-0.32056)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4175"
+       xlink:href="#linearGradient3889-7-1-2"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3889-8-5"
+       id="linearGradient4197"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.22485567,-0.03274089)"
+       x1="13.872494"
+       y1="11.866322"
+       x2="29.438562"
+       y2="12.071977" />
+    <inkscape:perspective
+       id="perspective3801"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       y2="11.078368"
+       x2="22.297274"
+       y1="8.1580601"
+       x1="7.6711636"
+       gradientTransform="translate(-0.87078134,-0.24753569)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4175-4"
+       xlink:href="#linearGradient3889-7-1-2-6"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3889-7-1-2-6">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-7-1-5-9" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-5-0-8-2" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3889-8-5-4"
+       id="linearGradient4197-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.19246334,0.04028341)"
+       x1="8.2786636"
+       y1="12.442157"
+       x2="29.438562"
+       y2="12.071977" />
+    <linearGradient
+       id="linearGradient3889-8-5-4">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-0-0-7" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-2-6-7" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective3821"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       y2="11.078368"
+       x2="22.297274"
+       y1="8.1580601"
+       x1="7.6711636"
+       gradientTransform="translate(-0.8507074,-0.28128326)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4175-46"
+       xlink:href="#linearGradient3889-7-1-2-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3889-7-1-2-9">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-7-1-5-2" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-5-0-8-24" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3889-8-5-7"
+       id="linearGradient4197-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.17238936,0.00653584)"
+       x1="8.2786636"
+       y1="12.442157"
+       x2="29.438562"
+       y2="12.071977" />
+    <linearGradient
+       id="linearGradient3889-8-5-7">
+      <stop
+         style="stop-color:#cfc0af;stop-opacity:1;"
+         offset="0"
+         id="stop3891-0-0-5" />
+      <stop
+         style="stop-color:#ffe2ab;stop-opacity:1;"
+         offset="1"
+         id="stop3893-2-6-4" />
+    </linearGradient>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline">
+    <path
+       style="fill:#ffe2ab;fill-opacity:1;stroke:#ff4f00;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="m 4.5449877,0.41131106 27.0025713,0 0,31.15167094 -31.13624794,0 L 0.45244217,4.4293064 4.5449877,0.41131106 z"
+       id="rect2911"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       transform="matrix(1.1649572,0,0,0.98026068,2.3928109,-0.98849455)"
+       style="fill:#ff4f00;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="M 2.2778942,1.4589838 2.271022,6.1828486 -1.6478691,6.1426841 2.2778942,1.4589838 z"
+       id="path4199"
+       sodipodi:nodetypes="cccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer17"
+     inkscape:label="wmo">
+    <path
+       sodipodi:type="arc"
+       style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="path4203"
+       sodipodi:cx="15.280206"
+       sodipodi:cy="20.750643"
+       sodipodi:rx="4.051414"
+       sodipodi:ry="4.051414"
+       d="m 19.33162,20.750643 a 4.051414,4.051414 0 1 1 -8.102828,0 4.051414,4.051414 0 1 1 8.102828,0 z"
+       transform="matrix(1.0862944,0,0,1.0862944,-3.5602416,-2.6338521)" />
+    <path
+       style="fill:#0000ff;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 17.192069,20.479879 12.793239,0.04795"
+       id="path4205" />
+    <path
+       style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="m 29.655528,24.143958 -3.518081,-3.612656 3.498856,0.03543 0.01922,3.577231 z"
+       id="path4207"
+       sodipodi:nodetypes="cccc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffe2ab;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="path4210"
+       sodipodi:cx="6.8277636"
+       sodipodi:cy="15.403599"
+       sodipodi:rx="2.1388175"
+       sodipodi:ry="2.2827764"
+       d="m 8.9665811,15.403599 a 2.1388175,2.2827764 0 0 1 -2.1388175,2.282776 l 0,-2.282776 z"
+       sodipodi:start="0"
+       sodipodi:end="1.5707963"
+       transform="matrix(0,-1.6552762,1.6427651,0,-12.420171,31.099237)"
+       inkscape:transform-center-x="0.95650451"
+       inkscape:transform-center-y="0.91632193" />
+    <text
+       xml:space="preserve"
+       style="font-size:5.3898921px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;font-family:Arial Black;-inkscape-font-specification:'Arial Black,'"
+       x="1.3616301"
+       y="15.958868"
+       id="text4216"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4218"
+         x="1.3616301"
+         y="15.958868">12</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:5.3898921px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;display:inline;font-family:Arial Black;-inkscape-font-specification:'Arial Black,'"
+       x="1.4424167"
+       y="27.915722"
+       id="text4216-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4218-2"
+         x="1.4424167"
+         y="27.915722">10</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer13"
+     inkscape:label="pencil"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3875);fill-opacity:1;stroke:#030000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 26.447301,1.562982 14.601542,13.03856 13.203084,16.493574 16.822622,15.053984 28.421594,3.537275 c 0,0 -0.401184,-0.8947574 -0.74036,-1.2339332 C 27.342058,1.964166 26.447301,1.562982 26.447301,1.562982 z"
+       id="path3867"
+       sodipodi:nodetypes="cccccsc" />
+    <path
+       style="fill:#6c5353;fill-opacity:1;stroke:none"
+       d="M 28.092546,3.4060407 16.492052,14.971722 15.958869,14.384468 27.594818,2.6323908 28.092546,3.4060407 z"
+       id="path3877"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#c8a656;fill-opacity:1;stroke:none"
+       d="m 14.848329,13.326478 -0.781491,2.262211 2.385605,-0.699229 -1.604114,-1.562982 z"
+       id="path3883"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 14.478149,13.03856 0,0 z"
+       id="path3885" />
+    <path
+       style="fill:#050505;fill-opacity:1;stroke:none"
+       d="m 14.1491,14.437018 -0.411311,1.48072 1.357326,-0.452442 -0.946015,-1.028278 z"
+       id="path3887"
+       sodipodi:nodetypes="cccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="hand">
+    <rect
+       style="opacity:0.53603599;fill:none;stroke:none;display:inline"
+       id="rect2939"
+       width="2.2622108"
+       height="7.7326479"
+       x="29.008764"
+       y="11.432592" />
+    <path
+       style="fill:url(#linearGradient4197-7);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 22.37585,9.7471822 -0.01309,1.3141068 c 0,0 -0.279375,0.695239 -0.498394,0.842143 -0.583486,0.391362 -1.682438,0.804466 -1.682438,0.804466 l -1.190713,-10e-7 c -0.520389,-0.02751 0.340234,-0.122332 -1.842144,-0.110299 l -0.542738,0.447381 c -0.176833,0.145764 -0.193333,0.469266 -0.123393,0.6875 0.08204,0.255999 0.596717,0.743084 0.596717,0.743084 0.01713,0.213098 1.145554,0.158656 1.615606,0.258523 l 1.113512,-0.06997 0.866726,0.176814 1.00482,0.516549 1.021369,0.5625 0.78125 [...]
+       id="path3960-0-4"
+       sodipodi:nodetypes="ccscccssccccccccssccccsc" />
+    <path
+       style="fill:url(#linearGradient4175-46);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 21.155276,5.3049606 c 0,0 -0.864273,-0.2489256 -1.443927,0.044344 -0.70956,0.3589859 -2.635122,2.1909542 -2.635122,2.1909542 l -1.389702,1.2564274 c 0,0 -1.104461,0.780354 -1.329048,1.2927378 -0.140325,0.320144 -0.692423,1.042346 -0.434287,1.278035 0,0 0.242673,0.235308 0.772976,0.309047 0.530303,0.07374 1.389701,-0.638095 1.389701,-0.638095 l 1.53125,-1.3749988 1.269762,-0.741726 0.491726,-0.3552384 0.278036,-0.217143 2.443099,-2.6426181 C 21.317572,5.3432338 21.155276,5.304 [...]
+       id="path3983-4"
+       sodipodi:nodetypes="csccscsccccccc" />
+    <rect
+       style="fill:#0d0b06;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       id="rect4212"
+       width="2.1388175"
+       height="7.4035988"
+       x="29.049896"
+       y="11.761642" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.09999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="M 18.431225,13.166751 18.321078,14.20453 17.58676,14.18676 c 0,0 -0.389617,-0.174751 -0.477307,-0.328567 -0.07209,-0.126452 0,-0.418174 0,-0.418174 0,-0.155527 0.200218,-0.282651 0.367159,-0.358436 0.07557,-0.0343 0.25701,-0.02987 0.25701,-0.02987 l 0.697603,0.115036 z"
+       id="path4268"
+       sodipodi:nodetypes="cccssscc" />
+    <path
+       style="fill:#d6b370;fill-opacity:1;stroke:none;display:inline"
+       d="m 28.84424,17.02642 0,-1.686372 -2.467866,0.04113 -1.398458,-0.452442 c 0,0 -0.964908,-0.709613 -1.521851,-0.904884 -0.470245,-0.164874 -1.033801,-0.288768 -1.562982,-0.37018 l -1.069409,-0.164524 -0.987146,0 -1.316196,0.04113 0.08226,0.658097 0.946016,0.08226 0.987147,0.04113 1.028277,0.493573 c 0,0 0.584391,0.442159 0.904885,0.616967 0.339801,0.185339 1.069408,0.452442 1.069408,0.452442 l 1.231113,0.745142 c 0.388462,0.23512 0.810343,0.414981 1.236754,0.571053 0.387323,0.1417 [...]
+       id="path4270"
+       sodipodi:nodetypes="ccccsscccccccscsscsc" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 15.065319,11.432594 c -0.287918,-0.109683 -0.575835,-0.219366 -0.863753,-0.329049 0.594291,-0.536642 1.20232,-1.058562 1.766868,-1.6270728 0.444514,-0.42915 0.918257,-0.706724 1.394946,-1.1008714 0.281295,-0.253216 0.653857,-0.536296 0.965672,-0.751322 0.400107,-0.2877824 0.660647,-0.7231253 1.092134,-0.9640169 0.186134,-0.1067083 0.365481,-0.2354848 0.555742,-0.3287765 0.268538,-0.013427 0.66047,0.014277 0.929008,8.501e-4 0.06855,0.082262 0.01371,-1e-7 0.08226,0.082262 -0.67 [...]
+       id="path4274"
+       sodipodi:nodetypes="cccsssccccsscc" />
+    <path
+       style="fill:#d6b370;stroke:none;display:inline"
+       d="m 23.044756,9.5816932 0.658096,-0.699228 c 0,0 0.02532,1.1696858 -0.123393,1.7275058 -0.113731,0.426608 -0.575836,1.192802 -0.575836,1.192802 l -1.110539,0.575836 c 0,0 0.682272,-0.768009 0.822621,-1.275065 0.140349,-0.507056 -0.08226,-1.1105398 -0.08226,-1.1105398 l 0.411311,-0.411311 z"
+       id="path3659-8"
+       sodipodi:nodetypes="ccscczcc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/POTTF.svg b/share/metview/icons_mv5/POTTF.svg
new file mode 100644
index 0000000..4fd651b
--- /dev/null
+++ b/share/metview/icons_mv5/POTTF.svg
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="THETA.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="13.28125"
+     inkscape:cx="24.333751"
+     inkscape:cy="13.454401"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1366"
+     inkscape:window-height="706"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="1"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849" />
+  </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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3901">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3903" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3905" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3642">
+      <stop
+         style="stop-color:#e14848;stop-opacity:1;"
+         offset="0"
+         id="stop3644" />
+      <stop
+         style="stop-color:#fa1511;stop-opacity:1;"
+         offset="1"
+         id="stop3646" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       id="filter3897">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.58403735"
+         id="feGaussianBlur3899" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3907"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="25.957588"
+       y2="3.7863109"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.75294117,-0.22588235)" />
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame">
+    <text
+       xml:space="preserve"
+       style="font-size:50px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3897);font-family:Courier New;-inkscape-font-specification:Courier New"
+       x="1.8823529"
+       y="30.268236"
+       id="text3055"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3067"
+         x="1.8823529"
+         y="30.268236">Θ</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3845"
+       y="29.741179"
+       x="0.82823527"
+       style="font-size:50px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3907);fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New"
+       xml:space="preserve"><tspan
+         y="29.741179"
+         x="0.82823527"
+         id="tspan3847"
+         sodipodi:role="line"
+         style="fill:url(#linearGradient3907);fill-opacity:1;stroke:none">Θ</tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/PREFERENCES.xpm b/share/metview/icons_mv5/PREFERENCES.xpm
new file mode 100644
index 0000000..1553cc7
--- /dev/null
+++ b/share/metview/icons_mv5/PREFERENCES.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char * preferences_icon[] = {
+"32 32 3 1",
+" 	c white",
+".	c red",
+"X	c blue",
+"                                ",
+"                                ",
+"                                ",
+"                             .. ",
+"                            ... ",
+"  XXXXXXXX  XXXXXXXX  XXXXX..X. ",
+"  X      X  X      X  X    ..X  ",
+"  X      X  X      X  X.. .. X  ",
+"  X      X  X      X  X ...  X  ",
+"  X      X  X      X  X  ..  X  ",
+"  X      X  X      X  X  .   X  ",
+"  X      X  X      X  X      X  ",
+"  XXXXXXXX  XXXXXXXX  XXXXXXXX  ",
+"                                ",
+"                                ",
+"                                ",
+"                   ..           ",
+"                  ...           ",
+"  XXXXXXXX  XXXXX..X. XXXXXXXX  ",
+"  X      X  X    ..X  X      X  ",
+"  X      X  X.. .. X  X      X  ",
+"  X      X  X ...  X  X      X  ",
+"  X      X  X  ..  X  X      X  ",
+"  X      X  X  .   X  X      X  ",
+"  X      X  X      X  X      X  ",
+"  XXXXXXXX  XXXXXXXX  XXXXXXXX  ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/share/metview/icons_mv5/PRODUCT.svg b/share/metview/icons_mv5/PRODUCT.svg
new file mode 100644
index 0000000..105e555
--- /dev/null
+++ b/share/metview/icons_mv5/PRODUCT.svg
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg2985"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="PRODUCT.svg">
+  <title
+     id="title2993">Metview icon</title>
+  <defs
+     id="defs2987">
+    <linearGradient
+       id="linearGradient3753">
+      <stop
+         style="stop-color:#0c57e6;stop-opacity:1;"
+         offset="0"
+         id="stop3755" />
+      <stop
+         style="stop-color:#cbdbe1;stop-opacity:1;"
+         offset="1"
+         id="stop3757" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3753"
+       id="linearGradient3759"
+       x1="20.381924"
+       y1="25.776665"
+       x2="36.550461"
+       y2="-0.56834435"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0942429,0,0,1.0732344,-1.9950829,-1.8776448)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="10.27"
+     inkscape:cx="5.616364"
+     inkscape:cy="29.889877"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1885"
+     inkscape:window-height="1104"
+     inkscape:window-x="31"
+     inkscape:window-y="31"
+     inkscape:window-maximized="1"
+     inkscape:snap-from-guide="false"
+     objecttolerance="2"
+     gridtolerance="2"
+     guidetolerance="2">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2995"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:url(#linearGradient3759);fill-opacity:1.0;stroke:#000000;stroke-width:0.91029769000000005;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="m 15,11 1.581791,-6.9553125 12.469348,3.7367772 2.255924,-3.4100421 9.343738,2.403001 -0.330091,4.3734044 c 7.786256,2.404387 11.284931,2.859172 19.842246,4.961637 L 51.55289,61.721726 7.8648109,40.823438 4.7046001,8.1600399 24.33753,14.182435 l -0.156955,3.272483 11.16368,3.580674 0.959165,-3.353576 13.555361,3.888862 1.763869,39.771774"
+       id="rect2984"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccccc" />
+    <path
+       style="fill:#0056c8;fill-opacity:1;stroke:#0056c8;stroke-width:0.89524412;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="M 31.5222,5.3369036 39.610516,7.4558961 39.486855,11 30,8 31.5222,5.3369036 z"
+       id="rect3761"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/PSFILE.svg b/share/metview/icons_mv5/PSFILE.svg
new file mode 100644
index 0000000..4bdf36c
--- /dev/null
+++ b/share/metview/icons_mv5/PSFILE.svg
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4537"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="PSFILE.svg">
+  <defs
+     id="defs4539" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.7781746"
+     inkscape:cx="17.255626"
+     inkscape:cy="33.638942"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1032"
+     inkscape:window-x="-4"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1"
+     objecttolerance="14"
+     gridtolerance="10">
+    <inkscape:grid
+       type="xygrid"
+       id="grid4547"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g3668"
+       transform="translate(1.498962,0.43807)">
+      <rect
+         y="29.611233"
+         x="9.3853531"
+         height="24.301182"
+         width="43.858448"
+         id="rect5443"
+         style="fill:#ffffff;fill-opacity:1;stroke:#2b2ba8;stroke-width:0.66900003;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5576"
+         d="m 12.00147,34.970442 c -0.901277,-0.05985 1.752843,-0.339164 2.234407,0.130003 0.957567,0.712661 1.18984,2.123 2.13165,2.923832 0.260503,1.453921 1.968929,1.967219 2.828948,2.97109 0.432381,1.625124 1.23279,3.184249 1.033099,4.902818 -0.677044,1.141376 1.766426,3.365573 1.34802,1.181024 0.103719,-1.819029 2.706961,-1.629955 2.999127,-3.430637 0.808487,-1.451529 -1.269877,-2.797441 -2.442059,-3.271322 -1.385722,0.174453 -4.225816,-0.619643 -3.190689,-2.449816 1.553179,0.195877 [...]
+         style="fill:none;stroke:#000000;stroke-width:0.69800001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccccccccccc"
+         id="path5580"
+         d="m 48.022923,37.312399 c -1.447924,0.979175 -1.722092,2.195614 -2.793349,3.585786 -1.035917,1.182681 -2.990513,-0.663653 -3.892025,-1.305233 -0.214816,0.703369 0.199566,1.869871 -1.107975,1.305233 0.02768,-1.360363 -1.740647,-2.467806 -2.840924,-1.177239 -0.806036,0.592788 0.915949,1.316352 -0.197641,2.001955 -1.207275,1.173552 -1.450466,2.959611 -2.60083,4.067118 C 32.692987,45.683081 33.110177,42.954644 32.001764,41.875226 30.899018,41.25442 29.251246,40.554302 30,39 c 0.137 [...]
+         style="fill:none;stroke:#000000;stroke-width:0.698;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5582"
+         d="m 46.898621,43.332135 c -1.266227,-0.338229 -3.499668,-0.580426 -2.977416,1.445146 0.68862,1.043044 2.567723,1.153239 3.705953,1.120904 1.326702,-1.285802 -0.491603,-2.221759 -1.200981,-3.037823 -0.762861,-0.784879 -0.941411,-0.249985 0.01964,0.151196 l 0.268353,0.179799 0.184449,0.140778 0,0 z"
+         style="fill:none;stroke:#000000;stroke-width:0.59799999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5584"
+         d="m 10.229574,51.12737 c 1.947437,-0.856815 4.140833,-0.539369 6.18976,-0.871832 1.562548,0.30785 3.119744,-0.141064 4.708935,-0.0011 1.595266,-0.05391 3.256219,0.214598 4.756516,-0.438115 1.685034,-0.577797 3.519762,-0.20353 5.274435,-0.310161 1.508353,-0.109211 2.940498,0.123817 4.411483,0.250368 1.95049,0.0915 3.843565,-0.196223 5.788598,-0.132875 2.156658,0.02072 4.289417,-0.233492 6.444845,-0.241463 1.738245,-0.417075 2.519849,1.560464 4.308833,1.121697 l 0.09638,0 0.02022,0"
+         style="fill:none;stroke:#000000;stroke-width:0.70700002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5586"
+         d="m 22.924607,33.663415 c 0.820143,0.973176 0.333546,3.407153 2.304967,2.23477 0.174915,-0.996066 1.970806,-2.004208 1.095151,-2.916865 -1.255015,0.224146 -2.695228,-0.32281 -3.803043,0.438531 -0.221264,-0.849196 -0.305912,-0.55997 -0.303598,-0.01255 -1.07997,0.153218 0.493715,0.09155 0.706523,0.256114 z"
+         style="fill:none;stroke:#000000;stroke-width:0.69800001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5598"
+         d="m 34.061454,45.018667 c -0.26543,-0.247948 -0.409767,-0.556921 -0.720095,-1.541467 -0.304995,-0.967624 -0.620483,-1.643108 -0.883364,-1.89135 -0.09888,-0.09338 -0.438482,-0.317866 -0.754658,-0.498858 -1.00628,-0.576037 -1.339483,-0.910464 -1.33292,-1.337811 0.0076,-0.497621 0.202136,-0.764731 1.008493,-1.385026 0.443577,-0.341224 0.610022,-0.5847 0.610022,-0.892339 0,-0.272267 -0.303831,-0.65784 -0.603872,-0.766336 l -0.214615,-0.07761 0.152114,-0.224152 c 0.16888,-0.248859 0 [...]
+         style="fill:#ffffff;fill-opacity:1;stroke:#2b2ba8;stroke-width:0.07056933;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5602"
+         d="m 34.154448,45.002201 c -0.231841,-0.182366 -0.422031,-0.572625 -0.719561,-1.476493 -0.327589,-0.995188 -0.675838,-1.725378 -0.939152,-1.969171 -0.119643,-0.110772 -0.525586,-0.393314 -0.902097,-0.627871 -0.826663,-0.514991 -1.147484,-0.841052 -1.147484,-1.166227 0,-0.379447 0.221344,-0.703128 0.841524,-1.230595 0.611703,-0.520258 0.765537,-0.728438 0.765537,-1.035987 0,-0.241726 -0.232168,-0.583559 -0.526228,-0.774796 l -0.232826,-0.151414 0.129503,-0.219493 c 0.102855,-0.17 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5604"
+         d="m 24.230234,35.561984 c -0.04165,-0.0667 -0.167082,-0.434852 -0.278731,-0.818123 -0.111649,-0.383271 -0.258678,-0.805998 -0.326732,-0.939393 l -0.123733,-0.242538 1.254814,0 c 0.690148,0 1.254814,0.02413 1.254814,0.05363 0,0.05571 -0.28094,0.467668 -0.779905,1.143616 -0.159845,0.216541 -0.327296,0.482239 -0.372115,0.59044 -0.05128,0.123794 -0.15429,0.222108 -0.277857,0.265184 -0.256983,0.08958 -0.262109,0.08881 -0.350555,-0.05281 l 0,0 z"
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5606"
+         d="M 18.033801,39.357638 C 17.377213,38.860256 16.889705,38.232859 16.883972,37.877866 16.883195,37.829786 16.744979,37.63992 16.576825,37.455933 16.408671,37.271945 16.03985,36.721754 15.757224,36.233286 15.189309,35.25175 14.729645,34.722418 14.254347,34.502632 13.98526,34.3782 13.842291,34.365018 12.714985,34.360699 c -1.329615,-0.0051 -1.357573,-0.012 -1.35973,-0.335913 -0.0016,-0.247651 0.173415,-0.503735 0.426444,-0.623805 0.220818,-0.104785 0.425067,-0.111047 2.525917,-0. [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5608"
+         d="m 20.840889,46.911832 -0.183477,-0.310116 0.08029,-0.654121 c 0.08686,-0.707611 0.02854,-1.497669 -0.166913,-2.261181 -0.238292,-0.93085 -0.88144,-2.908789 -1.000177,-3.075945 l -0.130158,-0.183234 0.151335,0.04674 c 0.08323,0.02571 0.223652,0.08315 0.312041,0.127651 0.271499,0.136689 1.106714,0.29532 1.645726,0.312569 0.415477,0.0133 0.580772,0.05115 0.875891,0.200581 0.866647,0.438824 1.669753,1.20445 1.758253,1.676199 0.06376,0.339867 -0.198868,1.08946 -0.493749,1.40926 -0 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5610"
+         d="m 46.51175,45.324255 c -0.740476,-0.05646 -1.466124,-0.2732 -1.82246,-0.544351 -0.228793,-0.174098 -0.264099,-0.235435 -0.280728,-0.487704 -0.01577,-0.239286 0.0086,-0.314529 0.142863,-0.440643 0.20513,-0.19271 0.883619,-0.249841 1.584352,-0.133407 0.46625,0.07747 0.48743,0.0893 0.906151,0.505913 0.235809,0.234623 0.448807,0.506698 0.47333,0.604612 0.06356,0.253776 -0.0774,0.563734 -0.250976,0.551873 -0.07526,-0.0051 -0.413899,-0.03048 -0.752532,-0.05629 l 0,0 z"
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5614"
+         d="m 10.229574,52.334879 0,-0.961759 0.226787,-0.06296 c 0.710699,-0.197299 3.701138,-0.410335 6.002292,-0.427597 3.84908,-0.02887 7.284703,-0.0845 7.574877,-0.122645 0.537541,-0.07066 0.962438,-0.166836 1.45602,-0.329568 0.981671,-0.323652 1.283677,-0.347071 4.537701,-0.351877 2.657757,-0.0039 3.211433,0.01288 4.483634,0.136054 1.177395,0.114 1.679803,0.133212 2.660966,0.101758 0.66524,-0.02133 2.420571,-0.06817 3.900733,-0.104087 1.480162,-0.03592 3.575673,-0.108425 4.65669,-0 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <path
+       style="fill:none;fill-opacity:1;stroke:#2b2b2c;stroke-width:0.57099999999999995;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 60,51.300138 -12.314168,-0.25713 -0.128565,10.776012 -42.5384548,0 0,-59.2887954 54.9811858,0 0,48.6413484 -12.314166,10.647447"
+       id="rect5379-7"
+       sodipodi:nodetypes="cccccccs" />
+    <text
+       xml:space="preserve"
+       style="font-size:22.55941390999999996px;font-style:normal;font-weight:normal;fill:#a30000;fill-opacity:1;stroke:none;font-family:Adobe Helvetica;-inkscape-font-specification:Adobe Helvetica"
+       x="18.20713"
+       y="25.586369"
+       id="text5099"
+       transform="scale(0.97088284,1.0299904)"><tspan
+         sodipodi:role="line"
+         id="tspan5101"
+         x="18.20713"
+         y="25.586369">PS</tspan></text>
+    <rect
+       style="fill:#e90000;fill-opacity:1;stroke:#000000;stroke-width:0.43404418;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3650"
+       width="55.136364"
+       height="2.4505296"
+       x="4.931819"
+       y="2.7349412" />
+    <path
+       style="fill:#d6d6ce;fill-opacity:1;stroke:none"
+       d="m 47.826131,51.255752 10.631091,0.130176 -10.631091,10.255519 0,-10.385695 z"
+       id="rect3652"
+       sodipodi:nodetypes="cccc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/PSOUTPUT.xpm b/share/metview/icons_mv5/PSOUTPUT.xpm
new file mode 100644
index 0000000..98cfaca
--- /dev/null
+++ b/share/metview/icons_mv5/PSOUTPUT.xpm
@@ -0,0 +1,240 @@
+/* XPM */
+static char * PSDRIVER_xpm[] = {
+"32 32 205 2",
+"  	c #FFFFFFFFFFFF",
+". 	c #10107070A8A8",
+"X 	c #E5E5E5E5E5E5",
+"o 	c #999999999999",
+"O 	c #E8E8E8E8E8E8",
+"+ 	c #D0D0D0D0E0E0",
+"@ 	c #C8C8C8C8D8D8",
+"# 	c #C0C0C0C0D0D0",
+"$ 	c #B8B8B8B8C8C8",
+"% 	c #F8F8F8F8F8F8",
+"& 	c #C0C0C8C8D8D8",
+"* 	c #C0C0C0C0D8D8",
+"= 	c #E0E0E0E0E8E8",
+"- 	c #F0F0F0F0F0F0",
+"; 	c #E0E0E0E0F0F0",
+": 	c #D8D8E0E0F0F0",
+"> 	c #D8D8D8D8E8E8",
+", 	c #C8C8C8C8D0D0",
+"< 	c #E0E0E0E0F8F8",
+"1 	c #E0E0E8E8F8F8",
+"2 	c #D0D0D0D0D8D8",
+"3 	c #E8E8E8E8F0F0",
+"4 	c #D8D8D8D8E0E0",
+"5 	c #D0D0D8D8E8E8",
+"6 	c #D0D0D8D8D8D8",
+"7 	c #E0E0E8E8F0F0",
+"8 	c #D0D0D0D0E8E8",
+"9 	c #C0C0C0C0C8C8",
+"0 	c #F0F0F0F0F8F8",
+"q 	c #909090909898",
+"w 	c #A0A0A8A8A8A8",
+"e 	c #888890909090",
+"r 	c #C8C8D8D8E8E8",
+"t 	c #C0C0D0D0E8E8",
+"y 	c #D8D8D8D8F0F0",
+"u 	c #F0F0F8F8F8F8",
+"i 	c #D0D0E0E0F0F0",
+"p 	c #A0A0C8C8E0E0",
+"a 	c #9090C0C0D8D8",
+"s 	c #8888B8B8D8D8",
+"d 	c #7878B0B0D0D0",
+"f 	c #7070A0A0D0D0",
+"g 	c #A0A0C0C0E0E0",
+"h 	c #D0D0D8D8F0F0",
+"j 	c #E8E8F0F0F8F8",
+"k 	c #B0B0D0D0E0E0",
+"l 	c #7070A8A8D0D0",
+"z 	c #7878B0B0E0E0",
+"x 	c #8080C0C0E8E8",
+"c 	c #7878B8B8E0E0",
+"v 	c #6060A0A0D0D0",
+"b 	c #C8C8D0D0E8E8",
+"n 	c #C0C0C8C8E8E8",
+"m 	c #D8D8E8E8F0F0",
+"M 	c #A8A8C8C8E0E0",
+"N 	c #8080B0B0D0D0",
+"B 	c #6868A8A8D0D0",
+"V 	c #7878B8B8E8E8",
+"C 	c #8888C8C8F0F0",
+"Z 	c #8080B8B8E8E8",
+"A 	c #A8A8C0C0E0E0",
+"S 	c #B0B0C0C0E0E0",
+"D 	c #8080A8A8D0D0",
+"F 	c #9090A0A0C0C0",
+"G 	c #9898C0C0E0E0",
+"H 	c #7070A8A8D8D8",
+"J 	c #6868A8A8D8D8",
+"K 	c #8080B0B0D8D8",
+"L 	c #5858A0A0D0D0",
+"P 	c #8080C0C0F0F0",
+"I 	c #9090C8C8F8F8",
+"U 	c #7878A8A8D0D0",
+"Y 	c #6060A0A0C8C8",
+"T 	c #60608888B0B0",
+"R 	c #E8E8E8E8F8F8",
+"E 	c #9090B8B8D8D8",
+"W 	c #6060A8A8E0E0",
+"Q 	c #7070B0B0F0F0",
+"! 	c #6868B0B0E0E0",
+"~ 	c #5858A0A0D8D8",
+"^ 	c #6868B0B0E8E8",
+"/ 	c #8080C0C0F8F8",
+"( 	c #8888C8C8F8F8",
+") 	c #7070B0B0E0E0",
+"_ 	c #7878B0B0D8D8",
+"` 	c #8888C0C0E8E8",
+"' 	c #8080B8B8E0E0",
+"] 	c #50509898C0C0",
+"[ 	c #58589898D0D0",
+"{ 	c #5050A0A0E0E0",
+"} 	c #6060B0B0F0F0",
+"| 	c #6868B0B0F8F8",
+" .	c #6868B0B0F0F0",
+"..	c #7070B8B8F0F0",
+"X.	c #7070B8B8F8F8",
+"o.	c #7878B8B8F8F8",
+"O.	c #7878C0C0F8F8",
+"+.	c #8888C0C0F0F0",
+"@.	c #9898C8C8F0F0",
+"#.	c #9898C8C8F8F8",
+"$.	c #20208080B8B8",
+"%.	c #D0D0D8D8E0E0",
+"&.	c #B8B8D0D0E8E8",
+"*.	c #40409090C8C8",
+"=.	c #5050A0A0E8E8",
+"-.	c #6060B0B0F8F8",
+";.	c #6060A8A8F0F0",
+":.	c #5858A8A8E8E8",
+">.	c #5858A0A0E0E0",
+",.	c #5858A8A8E0E0",
+"<.	c #6060A8A8E8E8",
+"1.	c #7878B8B8F0F0",
+"2.	c #8888C0C0F8F8",
+"3.	c #9898D0D0F8F8",
+"4.	c #6060A8A8D8D8",
+"5.	c #38388888C0C0",
+"6.	c #10107070B0B0",
+"7.	c #50509898D0D0",
+"8.	c #38389090D0D0",
+"9.	c #4848A0A0E8E8",
+"0.	c #5858A8A8F8F8",
+"q.	c #50509898D8D8",
+"w.	c #6060A0A0D8D8",
+"e.	c #50509090C0C0",
+"r.	c #48488080A8A8",
+"t.	c #B0B0C8C8E0E0",
+"y.	c #40409090E0E0",
+"u.	c #40409898E8E8",
+"i.	c #48489898E8E8",
+"p.	c #5050A8A8F8F8",
+"a.	c #5858A8A8F0F0",
+"s.	c #B0B0C8C8E8E8",
+"d.	c #9898B8B8E0E0",
+"f.	c #58589090B8B8",
+"g.	c #50508080A8A8",
+"h.	c #48489898D8D8",
+"j.	c #40409898F0F0",
+"k.	c #4848A0A0F8F8",
+"l.	c #5050A0A0F8F8",
+"z.	c #7878A8A8D8D8",
+"x.	c #B8B8C8C8E8E8",
+"c.	c #58589898C8C8",
+"v.	c #48488888B8B8",
+"b.	c #30308080B8B8",
+"n.	c #40409090D8D8",
+"m.	c #38389898E8E8",
+"M.	c #6060A8A8D0D0",
+"N.	c #28288080B8B8",
+"B.	c #8888B0B0D8D8",
+"V.	c #38388888D0D0",
+"C.	c #30308888D8D8",
+"Z.	c #6868A8A8E0E0",
+"A.	c #7070B0B0E8E8",
+"S.	c #6868A0A0D0D0",
+"D.	c #50509090C8C8",
+"F.	c #38389090E0E0",
+"G.	c #5050A0A0F0F0",
+"H.	c #48489898C8C8",
+"J.	c #9898B8B8D8D8",
+"K.	c #6868A8A8E8E8",
+"L.	c #6060A8A8F8F8",
+"P.	c #48489090C8C8",
+"I.	c #68689898C8C8",
+"U.	c #58589090C0C0",
+"Y.	c #40408888C0C0",
+"T.	c #C0C0D8D8E8E8",
+"R.	c #B8B8C8C8E0E0",
+"E.	c #38388888D8D8",
+"W.	c #30309090E8E8",
+"Q.	c #38389898F8F8",
+"!.	c #40409898F8F8",
+"~.	c #40409898E0E0",
+"^.	c #48488888C8C8",
+"/.	c #78789898C0C0",
+"(.	c #80809090B8B8",
+").	c #58588888B0B0",
+"_.	c #C8C8D0D0E0E0",
+"`.	c #28288080D0D0",
+"'.	c #38389090F8F8",
+"].	c #38389090F0F0",
+"[.	c #30309090E0E0",
+"{.	c #38389090D8D8",
+"}.	c #30309090D8D8",
+"|.	c #4848A0A0F0F0",
+" X	c #40408080B8B8",
+".X	c #C8C8D8D8E0E0",
+"XX	c #A8A8B0B0C8C8",
+"oX	c #68689090B8B8",
+"OX	c #30308080C0C0",
+"+X	c #20208080D0D0",
+"@X	c #28288888E8E8",
+"#X	c #30309090F0F0",
+"$X	c #20208080D8D8",
+"%X	c #10107878C0C0",
+"&X	c #10107070B8B8",
+"*X	c #20208080C8C8",
+"=X	c #28288888D0D0",
+"-X	c #28287878B8B8",
+";X	c #18187878C8C8",
+":X	c #18188080D0D0",
+">X	c #28288888D8D8",
+",X	c #28288888C8C8",
+"<X	c #08087070B0B0",
+"1X	c #00006868B0B0",
+"2X	c #08087070B8B8",
+"                      . . . . . . X . . . . . .                 ",
+"                      . . . . . . X . . . . . .                 ",
+"                  o o . . O X . . X . .                         ",
+"                o + + . . X X . . X . .                         ",
+"              o @ # + . . . . . . X . . . . . . o o o o o o o   ",
+"            o $ + O % . . . . . . % . . . . . . @ & & * & o o o ",
+"          o $ = - % % . . % % % % % % % % % . . ; ; ; ; : > > o ",
+"        o , O % % % % . . % % % %       % % . . < < < 1 1 ; > o ",
+"      o 2 3 % % % % % . . % % % %   . . . . . . ; ; < < < : > o ",
+"    o 4 - % % % % % % . . % % % %   . . . . . . ; ; ; ; ; 5 > o ",
+"  o 4 - % % % % % % % % % % % % % % % % % % 6 7 ; : : ; ; 8 > o ",
+"o $ O % % % % % % % % % % % % % % % % % % % 9 1 : : : : : > o o ",
+"o o 4 0 % % % % % % % % % % % % % % % q w e : r t r y : y > o   ",
+"  o @ 3 % % % % % % % % u u u u u u 0 i p a s d f g h : y > o   ",
+"  o @ + 0 % u u u u u u u u u j : 1 j k l z x c v g b b n > o   ",
+"    o @ = 0 u u u u u u 0 0 m M N g i k B V C Z l A S D D F     ",
+"    o @ @ 3 0 0 u 0 0 0 j i G H J B s K L P I c v N U B Y T     ",
+"      o @ > 0 0 0 j R R : E v W Q ! ~ ~ ^ / ( P ) J _ ` ' ]     ",
+"      o @ @ 7 j R 1 1 1 h E [ { } | }  ...X.o.O.P +. at .#.+.L $.  ",
+"        o @ %.R 1 < < : &.g l *.=.-.| ;.:.>.,.<.1.2.3.` 4.5.6.  ",
+"        o @ @ ; 1 ; ; t l [ 7.8.9.0.=.q.J K K w.W o.( ) e.r.    ",
+"          o @ + ; ; : t.7.y.u.i.p.a.q.K s.r b d.~  ./ ) f.g.    ",
+"          o @ @ : < : g h.j.k.l.0.W z.x.y : y A ~ ;.o.V c.v.b.. ",
+"            o @ 8 ; y d.n.m.j.k.| J E b y y h E ~ } o.+.x ' M.N.",
+"            o @ & : y B.V.C.C.u.} Z.K x.h b g l W -. .A.1.P J % ",
+"              o @ 5 y E c.S.D.F.G.^ v U B.U B )  .;.h.*.h.W H.p ",
+"              o @ @ y t A J.[ C.j.0.K.w.v 4.!  .L.9.P.I.U.Y.b.T.",
+"                o @ > y R.S.E.W.Q.!.l.:.<.:.a.0.p.~.^./.(.).    ",
+"                o @ _.: S e.`.W.'.Q.].[.{.}.F.k.l.|.V. X% .X    ",
+"                  o @ & XXoXOX+X at X#X$X%XX &X*Xm.j.u.=X-Xk       ",
+"                  o @ @ % .Xk % ;X:X%XX X X %X>X>X,X% % j       ",
+"                    o o 0 % u j % <XX X X X 1X2X% p m           "};
diff --git a/share/metview/icons_mv5/PSYMB.xpm b/share/metview/icons_mv5/PSYMB.xpm
new file mode 100644
index 0000000..a6c9d86
--- /dev/null
+++ b/share/metview/icons_mv5/PSYMB.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char * PSYMB_xpm[] = {
+"32 32 13 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #61D7AF",
+"@	c #7F7F7F",
+"#	c #93D5CE",
+"$	c #E599DA",
+"%	c #E4E599",
+"&	c #E2D8C4",
+"*	c #F6EDDC",
+"=	c #E5B099",
+"-	c #F9FAEA",
+";	c #9999E5",
+">	c #E59999",
+"....+++++++++++++++++++++++@@@++",
+"...++#######$#############@$$@#+",
+"..+++#######$############@%@$@#+",
+".++++#######$###########@%&@@##+",
+"+++++####$$$$$$$#######@%&@@###+",
+"+###########$######@@@@%&@@####+",
+"+###########$#####@*&@%&@@#####+",
+"+###########$####@*&@%&@@######+",
+"+###############@*&@%&@@&@#####+",
+"+##############@*&@%&@@&&*@####+",
+"+#############@*&@%&@@@&***@###+",
+"+#############@&@%&@@#@=****@@@+",
+"+##############@%@@@@@-*****&@@+",
+"+########;####@%@-**********&@@+",
+"+#########;###@&@@@&&&******&@@+",
+"+##########;#@@@###@@@&&&&**&@@+",
+"+###########;@########@@@@&&&@@+",
+"+###########;;############@@@@@+",
+"+##########;##;##############@@+",
+"+#########;####;###############+",
+"+########;######;###>>>########+",
+"+##################>>>>>#######+",
+"+#################>>>>>>>######+",
+"+#################>>>>>>>######+",
+"+#################>>>>>>>######+",
+"+##################>>>>>#######+",
+"+###################>>>########+",
+"+##############################+",
+"+##############################+",
+"+##############################+",
+"+##############################+",
+"++++++++++++++++++++++++++++++++"};
diff --git a/share/metview/icons_mv5/PTEXT.xpm b/share/metview/icons_mv5/PTEXT.xpm
new file mode 100644
index 0000000..68dffec
--- /dev/null
+++ b/share/metview/icons_mv5/PTEXT.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char * PTEXT_xpm[] = {
+"32 32 13 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #BEBEBE",
+"@	c #F1F1F1",
+"#	c #99BFE5",
+"$	c #5A5AD6",
+"%	c #7F7F7F",
+"&	c #E599DA",
+"*	c #E4E599",
+"=	c #E2D8C4",
+"-	c #F6EDDC",
+";	c #E5B099",
+">	c #F9FAEA",
+"....++++++++++++++++++++++++++++",
+"...++@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"..+++@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+".++++@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"+++++...................@@@@@@@+",
+"+@@@.###################$@@%%%@+",
+"+@@@.###################$@%&&%@+",
+"+@@@.###################$%*%&%@+",
+"+@@@.#$$$$$$.###$$$$$$##%*=%%@@+",
+"+@@@.$@@@@@@.###$@@@@@@%*=%%@@@+",
+"+@@@@@@@@@@@.###$@@%%%%*=%%@@@@+",
+"+@@@@@@@@@@@.###$@%-=%*=%%@@@@@+",
+"+@@@@@@@@@@@.###$%-=%*=%%@@@@@@+",
+"+@@@@@@@@@@@.###%-=%*=%%=%@@@@@+",
+"+@@@@@@@@@@@.##%-=%*=%%==-%@@@@+",
+"+@@@@@@@@@@@.#%-=%*=%%%=---%@@@+",
+"+@@@@@@@@@@@.#%=%*=%%@%;----%%%%",
+"+@@@@@@@@@@@.##%*%%%%%>-----=%%%",
+"+@@@@@@@@@@@.#%*%>----------=%%%",
+"+@@@@@@@@@@@.#%=%%%===------=%%%",
+"+@@@@@@@@@@@.%%%$@@%%%====--=%%%",
+"+@@@@@@@@@@@%%##$@@@@@%%%%===%%%",
+"+@@@@@@@@@@@.###$@@@@@@@@@%%%%%%",
+"+@@@@@@@@@@@.###$@@@@@@@@@@@@%%%",
+"+@@@@@@@@@@@.###$@@@@@@@@@@@@@@+",
+"+@@@@@@@@@@@.###$@@@@@@@@@@@@@@+",
+"+@@@@@@@@@@#######@@@@@@@@@@@@@+",
+"+@@@@@@@@###########$@@@@@@@@@@+",
+"+@@@@@@@@$$$$$$$$$$$$@@@@@@@@@@+",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"++++++++++++++++++++++++++++++++"};
diff --git a/share/metview/icons_mv5/PWIND.xpm b/share/metview/icons_mv5/PWIND.xpm
new file mode 100644
index 0000000..e8776fa
--- /dev/null
+++ b/share/metview/icons_mv5/PWIND.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * PWIND_xpm[] = {
+"32 32 12 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #D1C1E9",
+"@	c #7F7F7F",
+"#	c #EAEAFA",
+"$	c #DA99E5",
+"%	c #E4E599",
+"&	c #E2D8C4",
+"*	c #E59999",
+"=	c #F6EDDC",
+"-	c #E5B099",
+";	c #F9FAEA",
+"....+++++++++++++++++++++++@@@++",
+"...++#####################@$$@#+",
+"..+++####################@%@$@#+",
+".++++###################@%&@@##+",
+"+++++##################@%&@@###+",
+"+######*###########@@@@%&@@####+",
+"+######*#*########@=&@%&@@#####+",
+"+######*#*#######@=&@%&@@######+",
+"+###*##*#*######@=&@%&@@&@#####+",
+"+####*#*#*#####@=&@%&@@&&=@####+",
+"+#####**#*####@=&@%&@@@&===@###+",
+"+######*#*####@&@%&@@#@-====@@@+",
+"+#######**#####@%@@@@@;=====&@@+",
+"+########*####@%@;==========&@@+",
+"+#########*###@&@@@&&&======&@@+",
+"+##########*#@@@###@@@&&&&==&@@+",
+"+###########*@########@@@@&&&@@+",
+"+############*############@@@@@+",
+"+#############*##############@@+",
+"+##############*###############+",
+"+###############*##############+",
+"+################*#***#########+",
+"+#################*****########+",
+"+################*******#######+",
+"+################*******#######+",
+"+################*******#######+",
+"+#################*****########+",
+"+##################***#########+",
+"+##############################+",
+"+##############################+",
+"+##############################+",
+"++++++++++++++++++++++++++++++++"};
diff --git a/share/metview/icons_mv5/READ.xpm b/share/metview/icons_mv5/READ.xpm
new file mode 100644
index 0000000..823ce30
--- /dev/null
+++ b/share/metview/icons_mv5/READ.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char * READ_icon[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 10 1",
+/* colors */
+" 	c white",
+".	c black",
+"X	c #B2B2B2B2B2B2",
+"o	c #777777",
+"O	c #DDDDDDDDDDDD",
+"+	c #555555555555",
+"@	c cyan",
+"#	c #000073734B4B",
+"$	c #6C6CA6A63131",
+"%	c #00008C8C3030",
+/* pixels */
+" ...........................    ",
+".XXXoXXoooooooooooooooooOXXo.   ",
+".XXXoXXoooooooooo...ooooOXXXo.  ",
+".XXXoXXooooooooo.XXXOoooOXXXXo. ",
+".XXXoXXooooooooo.XXXOoooOXXXXXo.",
+".XXXoXXooooooooo.XXXOoooOXXXXXX.",
+".XXXoXXooooooooo.XXXOoooOXXXXXX.",
+".XXXoXXooooooooo.XXXOoooOXXXXXX.",
+".XXXoXXooooooooo.XXXOoooOXXXXXX.",
+".XXXoXXooooooooooOOOXoooOXXXXXX.",
+".XXXoXXXoooooooooooooooXOXXXXXX.",
+".XXXXOOOOOOOOOOOOOOOOOOOOXXXXXX.",
+".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
+".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
+".XXXXX+....+XooooooooooooooXXXX.",
+".XXX+.@@###@.+XXXXXXXXXXXXXOXXX.",
+".XX.@#$ @ #@@#.XXXXXXXXXXXXOXXX.",
+".X.#@$% @ %@ ##.XXXXXXXXXXXOXXX.",
+".+#$% %%  @ %###+XXXXXXXXXXOXXX.",
+"X.#$%%% %%  %###.XXXXXXXXXXOXXX.",
+"+@#$%% %%%@ @%@ @+XXXXXXXXXOXXX.",
+".@#$%%%%@   @@###.XXXXXXXXXOXXX.",
+".@#$%%%%  @ @$###.XXXXXXXXXOXXX.",
+".@#$%%%%@   @$###.XXXXXXXXXOXXX.",
+".@@ %%% %%@ @####.XXXXXXXXXOXXX.",
+"+@@@ %% @  @ @###+XXXXXXXXXOXXX.",
+"X.@ @ %%%%% @ @@.XXXXXXXXXXOXXX.",
+".+@@ @#####@ @@@+XXXXXXXXXXOXXX.",
+".X.@@ @###@@@@@.XXXXXXXXXXXOXXX.",
+".XX.@@ ###@@@@.XXXXXXXXXXXXOXXX.",
+".XXX+.@###@@.+XXXXXXXXXXXXXOXXX.",
+" ....X+....+X.................. "};
diff --git a/share/metview/icons_mv5/READ_SCIN.svg b/share/metview/icons_mv5/READ_SCIN.svg
new file mode 100644
index 0000000..964e958
--- /dev/null
+++ b/share/metview/icons_mv5/READ_SCIN.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="90"
+   inkscape:export-xdpi="90"
+   inkscape:export-filename="/tmp/cgr/PERFORCE/development/metview/src/MvApp/ODB_MARS.png"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="READ_SCIN.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.423767"
+     inkscape:cx="22.627364"
+     inkscape:cy="9.4989325"
+     inkscape:current-layer="svg11300"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1467"
+     inkscape:window-height="956"
+     inkscape:window-x="2320"
+     inkscape:window-y="164"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2855" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="tape line" />
+  <image
+     y="4.0055251"
+     x="-0.82860953"
+     id="image2412"
+     height="23.052769"
+     width="23.052769"
+     sodipodi:absref="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/READ.xpm"
+     xlink:href="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/READ.xpm" />
+  <text
+     xml:space="preserve"
+     style="font-size:8.56371403px;font-style:normal;font-weight:bold;fill:#800000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     x="-1.1845598"
+     y="14.036321"
+     id="text2203"
+     transform="scale(1.0195248,0.9808491)"><tspan
+       sodipodi:role="line"
+       id="tspan2205"
+       x="-1.1845598"
+       y="14.036321">SCIN</tspan></text>
+</svg>
diff --git a/share/metview/icons_mv5/READ_TIGGE.svg b/share/metview/icons_mv5/READ_TIGGE.svg
new file mode 100644
index 0000000..3b38112
--- /dev/null
+++ b/share/metview/icons_mv5/READ_TIGGE.svg
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="744.09448819"
+   height="1052.3622047"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="READ_TIGGE.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.1">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.9195959"
+     inkscape:cx="43.709136"
+     inkscape:cy="998.31905"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     inkscape:window-width="772"
+     inkscape:window-height="646"
+     inkscape:window-x="573"
+     inkscape:window-y="265" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="opacity:1">
+    <image
+       y="37.025654"
+       x="19.486509"
+       id="image2215"
+       height="32"
+       width="32"
+       sodipodi:absref="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/READ_TIGGE_BASE.xpm"
+       xlink:href="READ_TIGGE_BASE.xpm"
+       inkscape:export-filename="/home/graphics/cgi/links/tmp/PERFORCE/metview_4/metview/share/metview/icons/READ_TIGGE.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:0.66129037;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.74559534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2222"
+       width="28.591213"
+       height="10.661007"
+       x="21.817345"
+       y="38.141823"
+       inkscape:export-filename="/home/graphics/cgi/links/tmp/PERFORCE/metview_4/metview/share/metview/icons/READ_TIGGE.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="BLUE"
+     style="opacity:0.56287423">
+    <rect
+       style="opacity:0.66129037;fill:#afc6e9;fill-opacity:1;stroke:#afc6e9;stroke-width:0.89731902;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2162"
+       width="14.445621"
+       height="15.797877"
+       x="34.113827"
+       y="50.399521"
+       transform="matrix(0.9996033,2.8163206e-2,-2.4343904e-2,0.9997036,0,0)"
+       inkscape:export-filename="/home/graphics/cgi/links/tmp/PERFORCE/metview_4/metview/share/metview/icons/READ_TIGGE.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="TIGGE"
+     style="opacity:1">
+    <text
+       xml:space="preserve"
+       style="font-size:10.56479359px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="23.219469"
+       y="43.658772"
+       id="text2218"
+       transform="scale(0.9187446,1.0884418)"
+       inkscape:export-filename="/home/graphics/cgi/links/tmp/PERFORCE/metview_4/metview/share/metview/icons/READ_TIGGE.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan2220"
+         x="23.219469"
+         y="43.658772">TIGGE</tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/RELHUM.xpm b/share/metview/icons_mv5/RELHUM.xpm
new file mode 100644
index 0000000..98493db
--- /dev/null
+++ b/share/metview/icons_mv5/RELHUM.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char * RELHUM_icon[] = {
+"32 32 3 1",
+" 	c white",
+".	c black",
+"X	c red",
+"                                ",
+"        .           .           ",
+"       . .         . .          ",
+"       . . ...     . . ...      ",
+"       . .         . .          ",
+"       . .         . .          ",
+"       . . ...     . . ...      ",
+"       . .         . .          ",
+"       . .         . .          ",
+"       .X. ...     . . ...      ",
+"       .X.         . .          ",
+"       .X.         . .          ",
+"       .X. ...     . . ...      ",
+"       .X.         . .          ",
+"       .X.         . .          ",
+"       .X. ...     . . ...      ",
+"       .X.         . .          ",
+"       .X.         .X.          ",
+"       .X. ...     .X. ...      ",
+"       .X.         .X.          ",
+"       .X.         .X.          ",
+"       .X. ...     .X. ...      ",
+"       .X.         .X.          ",
+"       .X.         .X.          ",
+"       .X.         .X.          ",
+"      .XXX.       .XXX.         ",
+"     .XXXXX.     .XXXXX.        ",
+"     .X XXX.     .X XXX.        ",
+"     .X  XX.     .X  XX.        ",
+"      .XXX.       .XXX.         ",
+"       ...         ...          ",
+"                                "};
diff --git a/share/metview/icons_mv5/REPROJECTION.xpm b/share/metview/icons_mv5/REPROJECTION.xpm
new file mode 100755
index 0000000..137d788
--- /dev/null
+++ b/share/metview/icons_mv5/REPROJECTION.xpm
@@ -0,0 +1,257 @@
+/* XPM */
+static char * web1_xpm[] = {
+"32 32 222 2",
+"  	c #FFFFFFFFFFFF",
+". 	c #FFFFFFFFFFFF",
+"X 	c #E0E0E8E8F0F0",
+"o 	c #E8E8F0F0F8F8",
+"O 	c #F0F0F0F0F8F8",
+"+ 	c #F0F0F0F0F0F0",
+"@ 	c #D0D0D8D8E8E8",
+"# 	c #8888A8A8D8D8",
+"$ 	c #A0A0C0C0E0E0",
+"% 	c #8888B8B8E0E0",
+"& 	c #38388888C8C8",
+"* 	c #48489090D0D0",
+"= 	c #5050A0A0D0D0",
+"- 	c #6060A8A8D0D0",
+"; 	c #B0B0D0D0E8E8",
+": 	c #D0D0E0E0E8E8",
+"> 	c #E0E0F0F0F0F0",
+", 	c #D8D8E0E0F0F0",
+"< 	c #78789898C8C8",
+"1 	c #30307070B8B8",
+"2 	c #58589090C8C8",
+"3 	c #A0A0C8C8E8E8",
+"4 	c #48489898D0D0",
+"5 	c #6868A8A8D0D0",
+"6 	c #7878B8B8D0D0",
+"7 	c #8888C0C0D0D0",
+"8 	c #A8A8D0D0D8D8",
+"9 	c #B8B8C0C0E0E0",
+"0 	c #40407070B8B8",
+"q 	c #18185858B0B0",
+"w 	c #20207070C0C0",
+"e 	c #A8A8C8C8E8E8",
+"r 	c #6060A0A0D8D8",
+"t 	c #40409090D0D0",
+"y 	c #9898C8C8D0D0",
+"u 	c #C8C8E0E0E0E0",
+"i 	c #A8A8D0D0D0D0",
+"p 	c #D8D8E8E8E8E8",
+"a 	c #B0B0C0C0E0E0",
+"s 	c #38386868B0B0",
+"d 	c #7878A0A0D0D0",
+"f 	c #60609090D0D0",
+"g 	c #58589090D0D0",
+"h 	c #5858A8A8D0D0",
+"j 	c #7070B0B0D0D0",
+"k 	c #9090C0C0D0D0",
+"l 	c #B0B0D8D8D8D8",
+"z 	c #D0D0E0E0E0E0",
+"x 	c #E0E0F0F0E8E8",
+"c 	c #C0C0E0E0E0E0",
+"v 	c #C0C0D8D8E0E0",
+"b 	c #C0C0D0D0E8E8",
+"n 	c #28285858B0B0",
+"m 	c #10105050B0B0",
+"M 	c #40407878C0C0",
+"N 	c #9898B8B8E0E0",
+"B 	c #D0D0E0E0F0F0",
+"V 	c #B8B8D0D0E8E8",
+"C 	c #7070A8A8D8D8",
+"Z 	c #6060A8A8D8D8",
+"A 	c #8080B8B8D0D0",
+"S 	c #A0A0C8C8D0D0",
+"D 	c #E8E8F0F0F0F0",
+"F 	c #D8D8E8E8E0E0",
+"G 	c #A0A0C8C8C8C8",
+"H 	c #8080B8B8C8C8",
+"J 	c #D0D0E8E8E8E8",
+"K 	c #F0F0F8F8F8F8",
+"L 	c #40406868B0B0",
+"P 	c #10104848A8A8",
+"I 	c #20206060B8B8",
+"U 	c #30307878C0C0",
+"Y 	c #B8B8D8D8E8E8",
+"T 	c #C8C8E0E0F0F0",
+"R 	c #D8D8E8E8F0F0",
+"E 	c #F0F0F8F8F0F0",
+"W 	c #C8C8E0E0D8D8",
+"Q 	c #9898A8A8D0D0",
+"! 	c #10104848A0A0",
+"~ 	c #10105050A8A8",
+"^ 	c #20206868B8B8",
+"/ 	c #48488888D0D0",
+"( 	c #48489898D8D8",
+") 	c #40409898D0D0",
+"_ 	c #6868B0B0D0D0",
+"` 	c #C0C0E0E0D8D8",
+"' 	c #E0E0F0F0E0E0",
+"] 	c #E8E8F0F0E8E8",
+"[ 	c #A8A8D0D0E0E0",
+"{ 	c #60608080C0C0",
+"} 	c #08084040A0A0",
+"| 	c #18186060B8B8",
+" .	c #20206868C0C0",
+"..	c #60609898D0D0",
+"X.	c #38389090D0D0",
+"o.	c #9090C0C0C8C8",
+"O.	c #B0B0D0D0D0D0",
+"+.	c #D0D0E8E8D8D8",
+"@.	c #C0C0D8D8D8D8",
+"#.	c #7878B8B8C8C8",
+"$.	c #9090A0A0D0D0",
+"%.	c #7070A0A0D8D8",
+"&.	c #A0A0C0C0E8E8",
+"*.	c #40409898D8D8",
+"=.	c #4848A0A0D8D8",
+"-.	c #8888C0C0C8C8",
+";.	c #A0A0D0D0C0C0",
+":.	c #B0B0D0D0C8C8",
+">.	c #B0B0D8D8C8C8",
+",.	c #B8B8D8D8D8D8",
+"<.	c #7070B0B0C8C8",
+"1.	c #E0E0F0F0F8F8",
+"2.	c #30306060B0B0",
+"3.	c #9898B0B0D8D8",
+"4.	c #30306868B8B8",
+"5.	c #7878A8A8D8D8",
+"6.	c #9090B8B8E0E0",
+"7.	c #38388888D0D0",
+"8.	c #40409090D8D8",
+"9.	c #B0B0D0D0B8B8",
+"0.	c #E8E8F0F0A0A0",
+"q.	c #C8C8E0E0B0B0",
+"w.	c #9898C8C8C8C8",
+"e.	c #9090C8C8C8C8",
+"r.	c #B0B0D0D0D8D8",
+"t.	c #6868B0B0D8D8",
+"y.	c #B0B0D8D8F0F0",
+"u.	c #A8A8D0D0E8E8",
+"i.	c #38386868B8B8",
+"p.	c #A8A8C0C0E0E0",
+"a.	c #60609090C8C8",
+"s.	c #8080B0B0D8D8",
+"d.	c #38389090D8D8",
+"f.	c #A8A8D0D0B8B8",
+"g.	c #F0F0F8F89898",
+"h.	c #8888C0C0E0E0",
+"j.	c #B8B8D8D8F0F0",
+"k.	c #6868B0B0E0E0",
+"l.	c #7878B0B0E0E0",
+"z.	c #08084848A8A8",
+"x.	c #28286060B8B8",
+"c.	c #8080B0B0E0E0",
+"v.	c #30308888D0D0",
+"b.	c #6868B0B0C8C8",
+"n.	c #A0A0C8C8E0E0",
+"m.	c #B0B0D8D8E8E8",
+"M.	c #5858A8A8D8D8",
+"N.	c #6868A8A8E0E0",
+"B.	c #08083838A0A0",
+"V.	c #68689898D0D0",
+"C.	c #C0C0D8D8F0F0",
+"Z.	c #7070A8A8E0E0",
+"A.	c #50509898D8D8",
+"S.	c #8080B8B8E0E0",
+"D.	c #9898C0C0E8E8",
+"F.	c #C0C0E0E0F0F0",
+"G.	c #D8D8E8E8F8F8",
+"H.	c #9090C0C0E8E8",
+"J.	c #6868A8A8D8D8",
+"K.	c #28287878C8C8",
+"L.	c #30308080C8C8",
+"P.	c #50509898C8C8",
+"I.	c #6868A8A8C0C0",
+"U.	c #6060A8A8C8C8",
+"Y.	c #7878B8B8E0E0",
+"T.	c #50508888C8C8",
+"R.	c #28287070C0C0",
+"E.	c #40408888C8C8",
+"W.	c #8080B0B0B8B8",
+"Q.	c #9090C0C0B8B8",
+"!.	c #5858A0A0C8C8",
+"~.	c #30308080D0D0",
+"^.	c #C8C8D0D0E8E8",
+"/.	c #50507878B8B8",
+"(.	c #38387070C0C0",
+").	c #48488888C0C0",
+"_.	c #8888B8B8B0B0",
+"`.	c #9090C0C0B0B0",
+"'.	c #6868A0A0C0C0",
+"].	c #7878A0A0D8D8",
+"[.	c #E8E8E8E8F0F0",
+"{.	c #80809898C8C8",
+"}.	c #70709090C8C8",
+"|.	c #48488080C8C8",
+" X	c #30307878B8B8",
+".X	c #7070A0A0B0B0",
+"XX	c #8888B0B0B0B0",
+"oX	c #8080B0B0B0B0",
+"OX	c #58589898D8D8",
+"+X	c #30307878C8C8",
+"@X	c #8080A8A8D8D8",
+"#X	c #B8B8C8C8E0E0",
+"$X	c #C8C8D8D8E8E8",
+"%X	c #9090A8A8D0D0",
+"&X	c #A0A0B0B0D8D8",
+"*X	c #58588080C0C0",
+"=X	c #20205858B0B0",
+"-X	c #8080A0A0D0D0",
+";X	c #68689090C8C8",
+":X	c #48488080B8B8",
+">X	c #38387878B8B8",
+",X	c #8888B0B0E0E0",
+"<X	c #70709898D0D0",
+"1X	c #68688888C0C0",
+"2X	c #10104040A0A0",
+"3X	c #48487878C0C0",
+"4X	c #20206060B0B0",
+"5X	c #28286868C0C0",
+"6X	c #A0A0B8B8E0E0",
+"7X	c #28286060B0B0",
+"8X	c #000038389898",
+"9X	c #18184848A8A8",
+"0X	c #A0A0B8B8D8D8",
+"qX	c #B0B0C8C8E0E0",
+"wX	c #58588888C8C8",
+"eX	c #9090A8A8D8D8",
+"rX	c #9090B0B0D8D8",
+"tX	c #48487070B8B8",
+"yX	c #30306060B8B8",
+"uX	c #60608888C8C8",
+"iX	c #18185050A8A8",
+"pX	c #00003838A0A0",
+"                                                                ",
+"                                                                ",
+"                                                      .         ",
+"                  X   o O O X +                                 ",
+"                  @ # $ % & * = - ; : >                         ",
+"            X , < 1 2 3 & 4 = 5 6 7 : 8 8 >                     ",
+"          o 9 0 q w e r t = - 6 y 8 u > i y p                   ",
+"        @ a s d f g 3 * 4 h j k l z x + p z c v                 ",
+"      X b n m M N B V C Z - A S u D       F G H J               ",
+"      K L P q I U V 3 3 Y T R > D       E W G H 6 K             ",
+"    X Q ! ~ q ^ / 3 ( ) = _ A S ` ' + ] D W G H _ [             ",
+"    X { } m |  ...3 X.) = - 6 o.O.W +.+.x @.o.#.- Z   K         ",
+"    X $.n m |  .%.&.X.*.=.h _ -.;.:.>.>.F ,.H <.h Z 1.          ",
+"    X 2.3.4.|  .5.6.7.8.( = - 9.0.q.w.e.c r.<.- t.y.u.          ",
+"    X } i.p.a.w s.% 7.d.*.=.h f.g.q.#.#.[ [ - h.j.k.l.          ",
+"    X } z.x.N N $ c.v.X.8.( =.h <.b.- - n.Y ; m.M.*.N.          ",
+"    X B.z.m q V.C.B 3 Z.A.( *.( M.Z h.m.R B S.( *.8.Z O         ",
+"    X B.z.~ q | 5.&.C D.j.F.G.G.T F.u.S.; H.*.*.d.d.J.O         ",
+"    X } } P m | V.N K.L.v.P.I.U.*.*.*.*.3 Y.d.d.7.v.s.O         ",
+"    X { } z.~ q T.N R.K.E.W.Q.Q.!.d.d.d.3 N.7.v.~.K.^.          ",
+"    X a /.} z.~ (.N U w )._._.`.'.v.v.8.3 A.L.K.R.].[.          ",
+"      X {.}.P z.q 3.|.^  X.XXXoX).K.K.OX&.+XR.R. at X#X            ",
+"      $X%X/.&X*X=X-X;Xq | 1 :X>XR.w w %.,XU V.$ <X,             ",
+"        K 1X2X< 3.3.#X3X4XI | | ^ 5XT.V 6XN -X7X#XK             ",
+"            { 8X9X/.b 0X0X6Xa qX6X6Xp.$XwX=Xq 0X                ",
+"              eX! 8XL %X} z.z.P P P rXtX} yX^.                  ",
+"              O o uXiX}.{ 8XpX} } 1X}.7XeX  O                   ",
+"                    o qXp.# 0 0 eXqX^.K                         ",
+"                                                                ",
+"                                                                ",
+"                                                                ",
+"                                                                "};
diff --git a/share/metview/icons_mv5/RETRIEVE.svg b/share/metview/icons_mv5/RETRIEVE.svg
new file mode 100644
index 0000000..e35048d
--- /dev/null
+++ b/share/metview/icons_mv5/RETRIEVE.svg
@@ -0,0 +1,450 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="90"
+   inkscape:export-xdpi="90"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="RETRIEVE.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.36894"
+     inkscape:cx="20.566993"
+     inkscape:cy="15.401982"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1524"
+     inkscape:window-height="1039"
+     inkscape:window-x="2065"
+     inkscape:window-y="12"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid4091" />
+  </sodipodi:namedview>
+  <defs
+     id="defs3">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective4089" />
+    <linearGradient
+       id="linearGradient3206">
+      <stop
+         id="stop3208"
+         offset="0"
+         style="stop-color:#3e97a9;stop-opacity:1;" />
+      <stop
+         style="stop-color:#d9ebeb;stop-opacity:1;"
+         offset="0.69999999"
+         id="stop3210" />
+      <stop
+         id="stop3212"
+         offset="0.829"
+         style="stop-color:#3164b2;stop-opacity:1;" />
+      <stop
+         id="stop3214"
+         offset="0.958"
+         style="stop-color:#e6c3b4;stop-opacity:1;" />
+      <stop
+         id="stop3216"
+         offset="1"
+         style="stop-color:#bf7c4f;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3272">
+      <stop
+         style="stop-color:#668e93;stop-opacity:1;"
+         offset="0"
+         id="stop3274" />
+      <stop
+         id="stop2215"
+         offset="0.322"
+         style="stop-color:#d1e8e9;stop-opacity:1;" />
+      <stop
+         id="stop2205"
+         offset="0.69999999"
+         style="stop-color:#9fc2c2;stop-opacity:1;" />
+      <stop
+         style="stop-color:#718b98;stop-opacity:1;"
+         offset="0.829"
+         id="stop2209" />
+      <stop
+         style="stop-color:#e6c3b4;stop-opacity:1;"
+         offset="0.958"
+         id="stop2207" />
+      <stop
+         style="stop-color:#dff0ef;stop-opacity:1;"
+         offset="1"
+         id="stop3276" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3257">
+      <stop
+         style="stop-color:#2faeb8;stop-opacity:1;"
+         offset="0"
+         id="stop3259" />
+      <stop
+         style="stop-color:#eef9fa;stop-opacity:1;"
+         offset="1"
+         id="stop3261" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         offset="0"
+         style="stop-color:black;stop-opacity:0;"
+         id="stop5050" />
+      <stop
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;"
+         id="stop5056" />
+      <stop
+         offset="1"
+         style="stop-color:black;stop-opacity:0;"
+         id="stop5052" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2933">
+      <stop
+         offset="0"
+         style="stop-color:#9baec2;stop-opacity:1;"
+         id="stop2935" />
+      <stop
+         id="stop3204"
+         style="stop-color:#c0dbdf;stop-opacity:1;"
+         offset="0.5" />
+      <stop
+         offset="1"
+         style="stop-color:#e4e4e4;stop-opacity:1;"
+         id="stop2937" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3257"
+       id="linearGradient11118"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9920914,0,0,1.0001933,1.6937616,5.6202644)"
+       x1="8.375"
+       y1="24.5"
+       x2="40.625"
+       y2="24.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3257"
+       id="linearGradient11146"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0000001,0,0,0.64,1.5000002,9.8199999)"
+       x1="8.375"
+       y1="24.5"
+       x2="40.625"
+       y2="24.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3257"
+       id="linearGradient11149"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0000001,0,0,0.64,1.0000002,10.32)"
+       x1="8.375"
+       y1="24.5"
+       x2="40.625"
+       y2="24.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3257"
+       id="linearGradient11161"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0000001,0,0,0.64,-2.6562498,16.82)"
+       x1="8.375"
+       y1="24.5"
+       x2="40.625"
+       y2="24.5" />
+    <inkscape:perspective
+       id="perspective4262"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4749"
+       id="linearGradient4235"
+       x1="2.3853252"
+       y1="34.659901"
+       x2="8.3853254"
+       y2="34.659901"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.27631905,0,0,0.27631998,0.5183764,14.206616)" />
+    <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="#linearGradient4749"
+       id="linearGradient4227"
+       x1="7.4365482"
+       y1="14.912783"
+       x2="17.436548"
+       y2="14.912783"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.27631905,0,0,0.27631998,1.3331798,12.816283)" />
+    <linearGradient
+       id="linearGradient4271">
+      <stop
+         id="stop4273"
+         offset="0"
+         style="stop-color:#2c936f;stop-opacity:1;" />
+      <stop
+         id="stop4275"
+         offset="1"
+         style="stop-color:#d0e0d1;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4749"
+       id="linearGradient3684"
+       x1="14.5655"
+       y1="32.444443"
+       x2="61.434502"
+       y2="32.444443"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.27459154,0,0,0.28,0.99583091,13.833234)" />
+    <linearGradient
+       id="linearGradient4278">
+      <stop
+         id="stop4280"
+         offset="0"
+         style="stop-color:#2c936f;stop-opacity:1;" />
+      <stop
+         id="stop4282"
+         offset="1"
+         style="stop-color:#d0e0d1;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4275"
+       id="linearGradient4283"
+       x1="7.75"
+       y1="34.875"
+       x2="34.875"
+       y2="34.875"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4275">
+      <stop
+         style="stop-color:#c5e9eb;stop-opacity:1;"
+         offset="0"
+         id="stop4277" />
+      <stop
+         style="stop-color:#e6f3f4;stop-opacity:1;"
+         offset="1"
+         id="stop4279" />
+    </linearGradient>
+    <linearGradient
+       y2="34.875"
+       x2="34.875"
+       y1="34.875"
+       x1="7.75"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4293"
+       xlink:href="#linearGradient4275"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4749"
+       id="linearGradient4884"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0792528,-0.08034002,0.08034028,0.07925308,5.6528726,17.259792)"
+       x1="7.4365482"
+       y1="14.912783"
+       x2="17.436548"
+       y2="14.912783" />
+    <inkscape:perspective
+       id="perspective4894"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4749-0"
+       id="linearGradient4884-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0792528,-0.08034002,0.08034028,0.07925308,5.4987246,17.058844)"
+       x1="7.4365482"
+       y1="14.912783"
+       x2="17.436548"
+       y2="14.912783" />
+    <linearGradient
+       id="linearGradient4749-0">
+      <stop
+         id="stop4751-4"
+         offset="0"
+         style="stop-color:#2c936f;stop-opacity:1;" />
+      <stop
+         id="stop4753-6"
+         offset="1"
+         style="stop-color:#d0e0d1;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="14.912783"
+       x2="17.436548"
+       y1="14.912783"
+       x1="7.4365482"
+       gradientTransform="matrix(0.0792528,-0.08034002,0.08034028,0.07925308,11.058923,28.294415)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4903"
+       xlink:href="#linearGradient4749-0"
+       inkscape:collect="always" />
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="tape">
+    <path
+       style="fill:#c83737;stroke:#761e20;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 14,30 17,0"
+       id="path4861" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="disk"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1c1f2b;stroke-width:0.9573679;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path4193"
+       sodipodi:cx="17.300776"
+       sodipodi:cy="16.889763"
+       sodipodi:rx="11.62326"
+       sodipodi:ry="11.355031"
+       d="m 28.924035,16.889763 a 11.62326,11.355031 0 1 1 -23.246519,0 11.62326,11.355031 0 1 1 23.246519,0 z"
+       transform="matrix(1.2595432,0,0,1.2892963,-5.541074,-5.6359088)" />
+    <path
+       transform="matrix(1.1724666,0,0,1.2001627,-3.9124651,-4.2704634)"
+       d="m 28.924035,16.889763 a 11.62326,11.355031 0 1 1 -23.246519,0 11.62326,11.355031 0 1 1 23.246519,0 z"
+       sodipodi:ry="11.355031"
+       sodipodi:rx="11.62326"
+       sodipodi:cy="16.889763"
+       sodipodi:cx="17.300776"
+       id="path4203"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#b9bdc7;stroke-width:0.84300411;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="center"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1329cb;stroke-width:1.62834227;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path4195"
+       sodipodi:cx="17.725471"
+       sodipodi:cy="17.448572"
+       sodipodi:rx="6.1022115"
+       sodipodi:ry="6.3257356"
+       d="m 23.827683,17.448572 a 6.1022115,6.3257356 0 1 1 -12.204423,0 6.1022115,6.3257356 0 1 1 12.204423,0 z"
+       transform="matrix(0.9543448,0,0,0.9543448,-0.8987013,-0.7456985)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="front"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient4293);fill-opacity:1;stroke:none;display:inline"
+       id="path4257"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="m 34.875,34.875 a 13.5625,22.28125 0 1 1 -27.125,0 13.5625,22.28125 0 1 1 27.125,0 z"
+       transform="matrix(0.60753878,0.00697617,0,0.37204375,-3.5972347,9.754158)" />
+    <path
+       style="fill:url(#linearGradient3684);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 13.077859,15.513234 0,0.840001 -0.274592,0 -0.549184,0 c 0,0 0,0 -0.274591,-0.280001 -0.274593,-0.28 -0.823774,0.280001 -0.823774,0.280001 l -0.274592,0.279999 c 0,0 -0.549183,-0.279999 -1.0983663,0.84 -0.5491828,1.12 0.2745913,0.280001 0.2745913,0.280001 l 0.549184,-0.280001 0,0.560001 -0.274592,0.559999 -0.274592,0.280001 -0.5491825,-0.280001 -0.5491834,-0.279999 -0.2745915,0 0,0.279999 -0.5491828,0.280001 -0.2745917,0 -0.5491828,0.279999 0.2745912,0.560001 c 0,0 -0.2745912 [...]
+       id="path3662" />
+    <path
+       style="fill:url(#linearGradient4227);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 5.1841135,15.693543 -1.1052762,0.82896 -0.5526381,1.3816 0.276319,0.27632 0.2763191,0 0.5526381,-0.27632 0.5526381,-0.27632 0.5526381,-0.55264 0.276319,-0.55264 0,-0.27632 0,-0.27632 -0.8289571,-0.27632 z"
+       id="path3656"
+       sodipodi:nodetypes="cccccccccccc" />
+    <path
+       style="fill:url(#linearGradient4235);fill-opacity:1;fill-rule:evenodd;stroke:#2a2d64;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 1.8510149,22.480653 c -0.1484135,0.01349 -0.2590491,0.12089 -0.2590491,0.12089 l -0.276319,1.10528 0.5526381,1.3816 0,-0.27632 0.276319,-0.55264 0.2763191,-0.27632 0.276319,-0.55264 0,-0.27632 -0.276319,-0.27632 c 0,0 0,0 -0.2763191,-0.27632 -0.1036196,-0.10362 -0.2045408,-0.128986 -0.293589,-0.12089 z"
+       id="path3660"
+       sodipodi:nodetypes="ccccccccccsc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:#3d6689;stroke-width:1.25822433;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path2883"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="m 34.875,34.875 a 13.5625,22.28125 0 1 1 -27.125,0 13.5625,22.28125 0 1 1 27.125,0 z"
+       transform="matrix(0.61121264,0.00697617,0,0.37204375,-3.4212512,9.754158)" />
+    <path
+       sodipodi:nodetypes="cccccccccccc"
+       id="path4882"
+       d="M 7.5939495,16.965377 7.5179585,17.524495 7.7611546,18.08144 7.920748,18.08034 8,18 8.078164,17.760067 8.156328,17.520135 8.154148,17.200948 8.072723,16.962137 7.992382,16.882887 7.9120431,16.8036 7.5939442,16.965367 z"
+       style="fill:url(#linearGradient4884);fill-opacity:1;fill-rule:evenodd;stroke:#1d2559;stroke-width:0.40000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+    <path
+       sodipodi:nodetypes="cccccccccccc"
+       id="path4882-5"
+       d="m 13,28 -0.07599,0.559118 0.243196,0.556945 0.159593,-0.0011 0.07925,-0.08034 0.07816,-0.239933 0.07816,-0.239932 -0.0022,-0.319187 -0.08142,-0.238811 -0.08034,-0.07925 -0.08034,-0.07929 -0.318099,0.161767 z"
+       style="fill:url(#linearGradient4903);fill-opacity:1;fill-rule:evenodd;stroke:#1d2559;stroke-width:0.40000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/RETRIEVE_SCIN.svg b/share/metview/icons_mv5/RETRIEVE_SCIN.svg
new file mode 100644
index 0000000..eee2d99
--- /dev/null
+++ b/share/metview/icons_mv5/RETRIEVE_SCIN.svg
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="98.455688"
+   inkscape:export-xdpi="98.455688"
+   inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/src/MvApp/RETRIEVE_SCIN.png"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="RETRIEVE_SCIN.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.423767"
+     inkscape:cx="22.627364"
+     inkscape:cy="9.4989325"
+     inkscape:current-layer="svg11300"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1467"
+     inkscape:window-height="956"
+     inkscape:window-x="2320"
+     inkscape:window-y="164"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2855" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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>
+  <defs
+     id="defs3" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="tape line">
+    <rect
+       style="fill:#871e28;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect2860"
+       width="12"
+       height="2"
+       x="19"
+       y="28" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="disk"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1c1f2b;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path4193"
+       sodipodi:cx="17.300776"
+       sodipodi:cy="16.889763"
+       sodipodi:rx="11.62326"
+       sodipodi:ry="11.355031"
+       d="m 28.924035,16.889763 a 11.62326,11.355031 0 1 1 -23.246519,0 11.62326,11.355031 0 1 1 23.246519,0 z"
+       transform="matrix(1.2058462,0,0,1.2343309,-4.916942,-4.8733784)" />
+    <path
+       transform="matrix(1.1379358,0,0,1.1648162,-3.719687,-3.5875314)"
+       d="m 28.924035,16.889763 a 11.62326,11.355031 0 1 1 -23.246519,0 11.62326,11.355031 0 1 1 23.246519,0 z"
+       sodipodi:ry="11.355031"
+       sodipodi:rx="11.62326"
+       sodipodi:cy="16.889763"
+       sodipodi:cx="17.300776"
+       id="path4203"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#b9bdc7;stroke-width:0.64642984;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="center"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1329cb;stroke-width:1.62834227;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path4195"
+       sodipodi:cx="17.725471"
+       sodipodi:cy="17.448572"
+       sodipodi:rx="6.1022115"
+       sodipodi:ry="6.3257356"
+       d="m 23.827683,17.448572 a 6.1022115,6.3257356 0 1 1 -12.204423,0 6.1022115,6.3257356 0 1 1 12.204423,0 z"
+       transform="matrix(0.9543448,0,0,0.9543448,-0.8987013,-0.7456985)" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:7.21725607px;font-style:normal;font-weight:bold;fill:#d40000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     id="text2203"
+     transform="matrix(-0.959433,0,0,-0.9730402,31.368566,29.37944)"><textPath
+       xlink:href="#path2206"
+       id="textPath2209"><tspan
+   id="tspan2205"
+   style="font-weight:bold">SCIN</tspan></textPath></text>
+  <path
+     transform="translate(0,-1.5560401)"
+     style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="M 22.238407,17.412125 C 22.238407,20.740494 19.537121,23.44178 16.208752,23.44178 C 12.880382,23.44178 10.179096,20.740494 10.179096,17.412125 C 10.179096,14.083755 12.880382,11.382469 16.208752,11.382469 C 19.537121,11.382469 22.238407,14.083755 22.238407,17.412125 z "
+     id="path2206" />
+</svg>
diff --git a/share/metview/icons_mv5/RETRIEVE_TIGGE.svg b/share/metview/icons_mv5/RETRIEVE_TIGGE.svg
new file mode 100644
index 0000000..93f0390
--- /dev/null
+++ b/share/metview/icons_mv5/RETRIEVE_TIGGE.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="744.09448819"
+   height="1052.3622047"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="RETRIEVE_TIGGE.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.1">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.9195959"
+     inkscape:cx="43.709136"
+     inkscape:cy="998.31905"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     inkscape:window-width="772"
+     inkscape:window-height="646"
+     inkscape:window-x="573"
+     inkscape:window-y="265" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <image
+       y="37.025654"
+       x="19.486509"
+       id="image2215"
+       height="32"
+       width="32"
+       sodipodi:absref="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/RETRIEVE_TIGGE_BASE.xpm"
+       xlink:href="RETRIEVE_TIGGE_BASE.xpm"
+       inkscape:export-filename="/home/graphics/cgi/links/tmp/PERFORCE/metview_4/metview/share/metview/icons/RETRIEVE_TIGGE.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="opacity:0.66129037;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.76623726;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2222"
+       width="29.328186"
+       height="10.640365"
+       x="21.070051"
+       y="38.152145"
+       inkscape:export-filename="/home/graphics/cgi/links/tmp/PERFORCE/metview_4/metview/share/metview/icons/RETRIEVE_TIGGE.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="TIGGE">
+    <text
+       xml:space="preserve"
+       style="font-size:10.56479359px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="23.219469"
+       y="43.658772"
+       id="text2218"
+       transform="scale(0.9187446,1.0884418)"
+       inkscape:export-filename="/home/graphics/cgi/links/tmp/PERFORCE/metview_4/metview/share/metview/icons/RETRIEVE_TIGGE.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan2220"
+         x="23.219469"
+         y="43.658772">TIGGE</tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/RTTOV_OUTPUT_FILE.svg b/share/metview/icons_mv5/RTTOV_OUTPUT_FILE.svg
new file mode 100644
index 0000000..7073124
--- /dev/null
+++ b/share/metview/icons_mv5/RTTOV_OUTPUT_FILE.svg
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="RTTOV_OUTPUT_FILE.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_RUN_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient4532">
+      <stop
+         style="stop-color:#484362;stop-opacity:1;"
+         offset="0"
+         id="stop4534" />
+      <stop
+         style="stop-color:#d4cef0;stop-opacity:1;"
+         offset="1"
+         id="stop4536" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective3333" />
+    <inkscape:perspective
+       id="perspective3344"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3645"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4532"
+       id="linearGradient4538"
+       x1="16.680515"
+       y1="16.201673"
+       x2="29.156128"
+       y2="16.201673"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.32241485,-5.3735807)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4532"
+       id="linearGradient4542"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.32241485,0.96724449)"
+       x1="16.680515"
+       y1="16.201673"
+       x2="29.156128"
+       y2="16.201673" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4532"
+       id="linearGradient4546"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.32241485,6.9856549)"
+       x1="16.680515"
+       y1="16.201673"
+       x2="29.156128"
+       y2="16.201673" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4532"
+       id="linearGradient4550"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.16120742,9.457502)"
+       x1="16.680515"
+       y1="16.201673"
+       x2="29.156128"
+       y2="16.201673" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.609565"
+     inkscape:cx="11.240297"
+     inkscape:cy="9.6395155"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1524"
+     inkscape:window-height="1116"
+     inkscape:window-x="2175"
+     inkscape:window-y="35"
+     inkscape:window-maximized="0"
+     gridtolerance="6"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <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 />
+        <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="layer3"
+     inkscape:label="graph"
+     style="display:inline">
+    <path
+       style="fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#5c5e7a;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="m 14.454932,5.2395673 13.483552,0 3.067075,2.794262 -0.05788,20.4196067 -16.492757,0 0,-23.2138687 z"
+       id="rect4014"
+       sodipodi:nodetypes="cccccc" />
+    <rect
+       style="fill:url(#linearGradient4538);fill-opacity:1;fill-rule:evenodd;stroke:#5c5e7a;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4530"
+       width="11.875613"
+       height="1.934489"
+       x="16.658098"
+       y="9.8608484" />
+    <rect
+       y="16.201674"
+       x="16.658098"
+       height="1.934489"
+       width="11.875613"
+       id="rect4540"
+       style="fill:url(#linearGradient4542);fill-opacity:1;fill-rule:evenodd;stroke:#5c5e7a;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <rect
+       style="fill:url(#linearGradient4546);fill-opacity:1;fill-rule:evenodd;stroke:#5c5e7a;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4544"
+       width="11.875613"
+       height="1.934489"
+       x="16.658098"
+       y="22.220085" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="text">
+    <g
+       transform="matrix(1.0359534,0,0,0.96529439,0.16325287,3.0214964)"
+       style="font-size:17.80623245px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.8699187;fill:#5599ff;fill-opacity:1;stroke:none;display:inline;font-family:ARIAL;-inkscape-font-specification:ARIAL"
+       id="text3107-9">
+      <text
+         xml:space="preserve"
+         style="font-size:15px;font-style:normal;font-weight:normal;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+         x="0.95808423"
+         y="25.765697"
+         id="text2849"
+         transform="scale(0.96529438,1.0359534)"><tspan
+           sodipodi:role="line"
+           id="tspan2851"
+           x="0.95808423"
+           y="25.765697"
+           style="font-size:15px;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial Black;-inkscape-font-specification:Arial Black">T</tspan></text>
+      <text
+         transform="scale(0.96529438,1.0359534)"
+         id="text3633"
+         y="12.084261"
+         x="0.076647066"
+         style="font-size:15px;font-style:normal;font-weight:normal;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+         xml:space="preserve"><tspan
+           style="font-size:15px;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial Black;-inkscape-font-specification:Arial Black"
+           y="12.084261"
+           x="0.076647066"
+           id="tspan3635"
+           sodipodi:role="line">R</tspan></text>
+    </g>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/RTTOV_RUN.svg b/share/metview/icons_mv5/RTTOV_RUN.svg
new file mode 100644
index 0000000..51327ab
--- /dev/null
+++ b/share/metview/icons_mv5/RTTOV_RUN.svg
@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="RTTOV_RUN.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_RUN_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3625">
+      <stop
+         style="stop-color:#306cbf;stop-opacity:1;"
+         offset="0"
+         id="stop3627" />
+      <stop
+         style="stop-color:#7edbee;stop-opacity:1;"
+         offset="1"
+         id="stop3629" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective39" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3648-8"
+       id="radialGradient3656-4"
+       cx="15.794774"
+       cy="23.04089"
+       fx="15.794774"
+       fy="23.04089"
+       r="1.5355394"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3648-8">
+      <stop
+         style="stop-color:#acc6d2;stop-opacity:1;"
+         offset="0"
+         id="stop3650-8" />
+      <stop
+         style="stop-color:#498ca2;stop-opacity:1;"
+         offset="1"
+         id="stop3652-2" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3700-5"
+       id="linearGradient3706-4"
+       x1="22.977591"
+       y1="16.533602"
+       x2="29.822767"
+       y2="16.274597"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7675676,0,0,1,6.7711202,-0.67721382)" />
+    <linearGradient
+       id="linearGradient3700-5">
+      <stop
+         style="stop-color:#727272;stop-opacity:1;"
+         offset="0"
+         id="stop3702-5" />
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="1"
+         id="stop3704-1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3708-1"
+       id="linearGradient3714-7"
+       x1="12.987333"
+       y1="40.467396"
+       x2="29.933771"
+       y2="40.467396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9235808,0,0,1,3.3108892,-32.677214)" />
+    <linearGradient
+       id="linearGradient3708-1">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710-1" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712-5" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3716-7">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718-6" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720-1" />
+    </linearGradient>
+    <linearGradient
+       y2="51.049667"
+       x2="23.125591"
+       y1="51.049667"
+       x1="12.98733"
+       gradientTransform="matrix(0.91240876,0,0,1,3.4559832,-32.677214)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3965"
+       xlink:href="#linearGradient3716-7"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3625"
+       id="linearGradient3631"
+       x1="-2.3537703"
+       y1="18.927759"
+       x2="8.4040422"
+       y2="18.927759"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(4.1772455,1.4562875)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="26.09375"
+     inkscape:cx="9.0634731"
+     inkscape:cy="16.681244"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1877"
+     inkscape:window-height="1096"
+     inkscape:window-x="1920"
+     inkscape:window-y="10"
+     inkscape:window-maximized="0"
+     gridtolerance="6"
+     inkscape:snap-to-guides="false"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <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 />
+        <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="layer6"
+     inkscape:label="desktop"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       style="fill:url(#linearGradient3965);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 15.305737,8.4932002 c 0,0 2.380431,0.969574 3.91227,1.282181 1.531839,0.3126058 5.27045,0.4958128 5.27045,0.4958128 l 0.06752,17.980513 c 0,0 -3.772018,-0.256764 -5.61367,-0.685905 -1.244221,-0.289928 -3.636568,-1.267745 -3.636568,-1.267745 l 0,-17.8048568 z"
+       id="rect2870-42"
+       sodipodi:nodetypes="czccacc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient3714-7);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 23.951602,5.2371162 7.005543,1.2599809 -6.492942,3.8461499 c 0,0 -3.713429,-0.261544 -5.242549,-0.5826298 -1.529121,-0.321086 -3.915914,-1.223016 -3.915914,-1.223016 l 8.645862,-3.300485 z"
+       id="rect2870-4-3"
+       sodipodi:nodetypes="ccczcc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient3706-4);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 24.407978,10.306246 6.401161,-3.7370959 -0.0852,17.1684429 -6.259161,4.440114 -0.0568,-17.871461 z"
+       id="rect3690-2"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient3656-4);fill-opacity:1;fill-rule:evenodd;stroke:#335596;stroke-width:0.39196318;stroke-miterlimit:3.29999995;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path3724-2"
+       sodipodi:cx="16.631927"
+       sodipodi:cy="23.101271"
+       sodipodi:rx="1.5355394"
+       sodipodi:ry="1.5355394"
+       d="m 18.167467,23.101271 a 1.5355394,1.5355394 0 1 1 -3.071079,0 1.5355394,1.5355394 0 1 1 3.071079,0 z"
+       transform="matrix(1.1400126,-0.10213105,0.12685752,1.4160157,-2.6448351,-8.8665765)" />
+    <path
+       style="fill:#3771c8;stroke:none;display:inline"
+       d="m 15.305741,10.787259 c 0,0 2.693952,1.050538 4.218108,1.369035 1.524156,0.318497 4.921126,0.518014 4.921126,0.518014 l -1e-6,1.59104 c 0,0 -3.620824,-0.225659 -5.143132,-0.555014 -1.522308,-0.329354 -3.959101,-1.295033 -3.959101,-1.295033 l -0.037,-1.628042 z"
+       id="path3726-1"
+       sodipodi:nodetypes="czcczcc"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="czcczcc"
+       id="path3728-6"
+       d="m 15.305741,14.154345 c 0,0 2.693952,1.050538 4.218108,1.369035 1.524156,0.318497 4.921126,0.518014 4.921126,0.518014 l -1e-6,1.59104 c 0,0 -3.620824,-0.225659 -5.143132,-0.555014 -1.522308,-0.329354 -3.959101,-1.295033 -3.959101,-1.295033 l -0.037,-1.628042 z"
+       style="fill:#3771c8;stroke:none;display:inline"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="text"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:9px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+       x="7.8866334"
+       y="14.409715"
+       id="text3103"><tspan
+         sodipodi:role="line"
+         id="tspan3105"
+         x="7.8866334"
+         y="14.409715" /></text>
+    <g
+       transform="matrix(1.0359534,0,0,0.96529439,0,2.9768174)"
+       style="font-size:17.80623245px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.8699187;fill:#5599ff;fill-opacity:1;stroke:none;display:inline;font-family:ARIAL;-inkscape-font-specification:ARIAL"
+       id="text3107">
+      <text
+         xml:space="preserve"
+         style="font-size:15px;font-style:normal;font-weight:normal;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+         x="0.95808423"
+         y="25.765697"
+         id="text2849"
+         transform="scale(0.96529438,1.0359534)"><tspan
+           sodipodi:role="line"
+           id="tspan2851"
+           x="0.95808423"
+           y="25.765697"
+           style="font-size:15px;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial Black;-inkscape-font-specification:Arial Black">T</tspan></text>
+      <text
+         transform="scale(0.96529438,1.0359534)"
+         id="text3633"
+         y="12.084261"
+         x="0.076647066"
+         style="font-size:15px;font-style:normal;font-weight:normal;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+         xml:space="preserve"><tspan
+           style="font-size:15px;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial Black;-inkscape-font-specification:Arial Black"
+           y="12.084261"
+           x="0.076647066"
+           id="tspan3635"
+           sodipodi:role="line">R</tspan></text>
+    </g>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/RTTOV_VISUALISER.svg b/share/metview/icons_mv5/RTTOV_VISUALISER.svg
new file mode 100644
index 0000000..4b28c3a
--- /dev/null
+++ b/share/metview/icons_mv5/RTTOV_VISUALISER.svg
@@ -0,0 +1,317 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="RTTOV_VISUALISER.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_RUN_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective3781" />
+    <linearGradient
+       id="linearGradient4026">
+      <stop
+         style="stop-color:#f30e1e;stop-opacity:1;"
+         offset="0"
+         id="stop4028" />
+      <stop
+         style="stop-color:#ba2f39;stop-opacity:1;"
+         offset="1"
+         id="stop4030" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3975">
+      <stop
+         style="stop-color:#565c64;stop-opacity:1;"
+         offset="0"
+         id="stop3977" />
+      <stop
+         style="stop-color:#99a4b4;stop-opacity:1;"
+         offset="1"
+         id="stop3979" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3697">
+      <stop
+         style="stop-color:#0055d4;stop-opacity:1;"
+         offset="0"
+         id="stop3699" />
+      <stop
+         style="stop-color:#3c6fbd;stop-opacity:1;"
+         offset="1"
+         id="stop3701" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3689">
+      <stop
+         style="stop-color:#0066ff;stop-opacity:1;"
+         offset="0"
+         id="stop3691" />
+      <stop
+         style="stop-color:#3f84eb;stop-opacity:1;"
+         offset="1"
+         id="stop3693" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3909">
+      <stop
+         style="stop-color:#2a7fff;stop-opacity:1;"
+         offset="0"
+         id="stop3911" />
+      <stop
+         style="stop-color:#63a1ff;stop-opacity:1;"
+         offset="1"
+         id="stop3913" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3909"
+       id="linearGradient3915"
+       x1="2.108496"
+       y1="7.6282678"
+       x2="8.558013"
+       y2="7.6282678"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-1.9556776,0.24805836)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3689"
+       id="linearGradient3695"
+       x1="0.99223268"
+       y1="16.589376"
+       x2="7.4417505"
+       y2="16.589376"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.83941498,0)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3697"
+       id="linearGradient3703"
+       x1="0.99223369"
+       y1="25.271418"
+       x2="7.5037656"
+       y2="25.271418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.83941498,0)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3975"
+       id="linearGradient3981"
+       x1="21.350325"
+       y1="20.322937"
+       x2="23.313964"
+       y2="20.322938"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.135239,0,0,1.0828856,-1.9275725,-0.04606245)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4026"
+       id="linearGradient4032"
+       x1="16.804222"
+       y1="14.95285"
+       x2="27.970543"
+       y2="14.95285"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0951557,0,0,1,-1.8682756,0.40145933)" />
+    <inkscape:perspective
+       id="perspective3645"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="24.5"
+     inkscape:cx="10.524829"
+     inkscape:cy="22.236829"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1769"
+     inkscape:window-height="1045"
+     inkscape:window-x="2027"
+     inkscape:window-y="66"
+     inkscape:window-maximized="0"
+     gridtolerance="6">
+    <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 />
+        <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="layer1"
+     inkscape:label="text"
+     style="display:inline">
+    <g
+       transform="matrix(1.0359534,0,0,0.96529439,0.07144137,2.9742853)"
+       style="font-size:17.80623245px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.8699187;fill:#5599ff;fill-opacity:1;stroke:none;display:inline;font-family:ARIAL;-inkscape-font-specification:ARIAL"
+       id="text3107-4">
+      <text
+         xml:space="preserve"
+         style="font-size:15px;font-style:normal;font-weight:normal;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+         x="0.95808423"
+         y="25.765697"
+         id="text2849"
+         transform="scale(0.96529438,1.0359534)"><tspan
+           sodipodi:role="line"
+           id="tspan2851"
+           x="0.95808423"
+           y="25.765697"
+           style="font-size:15px;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial Black;-inkscape-font-specification:Arial Black">T</tspan></text>
+      <text
+         transform="scale(0.96529438,1.0359534)"
+         id="text3633"
+         y="12.084261"
+         x="0.076647066"
+         style="font-size:15px;font-style:normal;font-weight:normal;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+         xml:space="preserve"><tspan
+           style="font-size:15px;fill:#5599ff;fill-opacity:1;stroke:#161a54;stroke-width:0.60000002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Arial Black;-inkscape-font-specification:Arial Black"
+           y="12.084261"
+           x="0.076647066"
+           id="tspan3635"
+           sodipodi:role="line">R</tspan></text>
+    </g>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="stand"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:#939dac;fill-opacity:1;fill-rule:evenodd;stroke:#123b7d;stroke-width:0.28685689;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.29999995;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path3869"
+       sodipodi:cx="-3.3759081"
+       sodipodi:cy="15.175204"
+       sodipodi:rx="2.6094856"
+       sodipodi:ry="1.2408743"
+       d="m -0.76642251,15.175204 a 2.6094856,1.2408743 0 1 1 -5.21897129,0 2.6094856,1.2408743 0 1 1 5.21897129,0 z"
+       transform="matrix(1.7971318,0.34159025,-0.37101268,1.6200355,33.819891,0.62894176)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="bar"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3981);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 20.122414,19.198259 c 0,0 0.257868,1.326588 1.996868,1.665105 1.739004,0.338517 2.420066,-0.806817 2.420066,-0.806817 l -0.0062,4.057523 c 0,0 -0.680348,0.8151 -2.436815,0.561448 -1.496348,-0.216089 -2.015341,-1.135695 -2.015341,-1.135695 l 0.04144,-4.341564 2.8e-5,0 z"
+       id="rect2870-42"
+       sodipodi:nodetypes="czccsccc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="screen"
+     style="display:inline">
+    <path
+       style="fill:#6f7c91;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 17.804659,5.8949724 c 0,0 3.208652,1.0687276 5.56385,1.3803788 2.3552,0.3116513 8.318581,0.260686 8.318581,0.260686 l -1.17551,1.7541393 c 0,0 -5.796507,-0.00657 -8.83197,-0.4333147 C 18.644147,8.430123 14.678496,6.8210921 14.678496,6.8210921 l 3.126163,-0.9261197 z"
+       id="rect2870-4-3-8"
+       sodipodi:nodetypes="czcczcc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#373e48;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 30.441671,9.131545 1.288282,-1.5965257 -0.01518,12.5446957 -1.193602,1.521818 -0.0795,-12.469988 z"
+       id="rect3690-2-0"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#dbe2e3;fill-opacity:1;fill-rule:evenodd;stroke:#0c2248;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.29999995;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+       d="m 14.978973,7.2111898 c 0,0 2.955238,1.2768375 6.851552,1.8575018 3.896315,0.5806644 8.394286,0.3556922 8.394286,0.3556922 l 0.04538,11.8959172 c 0,0 -5.032626,0.291789 -8.514194,-0.243177 -3.481568,-0.534966 -6.715432,-2.161573 -6.715432,-2.161573 l -0.0616,-11.7043612 z"
+       id="rect3828-2"
+       sodipodi:nodetypes="czcczcc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="axes"
+     style="display:inline">
+    <path
+       style="fill:none;stroke:#6c5b5d;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 16.557496,16.653304 c 1.825257,0.632676 3.250822,1.483391 5.475771,1.788319 0.839425,0.182748 3.035471,0.413693 7.034567,0.145985"
+       id="path3996-1"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#6c5b5d;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="M 20.834194,19.864979 20.714286,9.6825099"
+       id="path3998-0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="graph"
+     style="display:inline">
+    <path
+       style="fill:none;stroke:url(#linearGradient4032);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       d="m 17.082542,14.490184 c 0,0 0.839489,2.702497 1.251996,2.148768 1.609019,-2.159868 3.463916,-5.927736 3.781734,-5.425425 0.704791,1.113917 1.201134,4.983495 2.066852,6.515474 0.351413,0.621863 2.466197,-2.729574 2.466197,-2.729574 l 1.566925,4.541256"
+       id="path3992"
+       sodipodi:nodetypes="cssscc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/SCM_INPUT_DATA.svg b/share/metview/icons_mv5/SCM_INPUT_DATA.svg
new file mode 100644
index 0000000..6e1c1d3
--- /dev/null
+++ b/share/metview/icons_mv5/SCM_INPUT_DATA.svg
@@ -0,0 +1,647 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="SCM_INPUT_DATA.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_RUN_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3723">
+      <stop
+         style="stop-color:#20202f;stop-opacity:1;"
+         offset="0"
+         id="stop3725" />
+      <stop
+         style="stop-color:#58586f;stop-opacity:1;"
+         offset="1"
+         id="stop3727" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3699">
+      <stop
+         style="stop-color:#50db54;stop-opacity:1;"
+         offset="0"
+         id="stop3703" />
+      <stop
+         id="stop3709"
+         offset="1"
+         style="stop-color:#91e513;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3679">
+      <stop
+         style="stop-color:#00ccff;stop-opacity:1;"
+         offset="0"
+         id="stop3681" />
+      <stop
+         style="stop-color:#82bfc3;stop-opacity:1;"
+         offset="1"
+         id="stop3683" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3697">
+      <stop
+         style="stop-color:#0055d4;stop-opacity:1;"
+         offset="0"
+         id="stop3699" />
+      <stop
+         style="stop-color:#3c6fbd;stop-opacity:1;"
+         offset="1"
+         id="stop3701" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3689">
+      <stop
+         style="stop-color:#0066ff;stop-opacity:1;"
+         offset="0"
+         id="stop3691" />
+      <stop
+         style="stop-color:#3f84eb;stop-opacity:1;"
+         offset="1"
+         id="stop3693" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3925">
+      <stop
+         style="stop-color:#0044aa;stop-opacity:1;"
+         offset="0"
+         id="stop3927" />
+      <stop
+         style="stop-color:#0055d3;stop-opacity:1;"
+         offset="1"
+         id="stop3929" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3917">
+      <stop
+         style="stop-color:#0055d4;stop-opacity:1;"
+         offset="0"
+         id="stop3919" />
+      <stop
+         style="stop-color:#1975ff;stop-opacity:1;"
+         offset="1"
+         id="stop3921" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3909">
+      <stop
+         style="stop-color:#2a7fff;stop-opacity:1;"
+         offset="0"
+         id="stop3911" />
+      <stop
+         style="stop-color:#63a1ff;stop-opacity:1;"
+         offset="1"
+         id="stop3913" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3678">
+      <stop
+         style="stop-color:#e3e9ef;stop-opacity:1;"
+         offset="0"
+         id="stop3680" />
+      <stop
+         style="stop-color:#d9e3f2;stop-opacity:1;"
+         offset="1"
+         id="stop3682" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3648">
+      <stop
+         style="stop-color:#acc6d2;stop-opacity:1;"
+         offset="0"
+         id="stop3650" />
+      <stop
+         style="stop-color:#498ca2;stop-opacity:1;"
+         offset="1"
+         id="stop3652" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3716">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3708">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3700">
+      <stop
+         style="stop-color:#727272;stop-opacity:1;"
+         offset="0"
+         id="stop3702" />
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="1"
+         id="stop3704" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective3219" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3749">
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:1;"
+         offset="0"
+         id="stop3751" />
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:0;"
+         offset="1"
+         id="stop3753" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3741">
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:1;"
+         offset="0"
+         id="stop3743" />
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:0;"
+         offset="1"
+         id="stop3745" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3733">
+      <stop
+         style="stop-color:#2f528a;stop-opacity:1"
+         offset="0"
+         id="stop3735" />
+      <stop
+         style="stop-color:#3f5e91;stop-opacity:0;"
+         offset="1"
+         id="stop3737" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3622-8">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop3624-3" />
+      <stop
+         style="stop-color:#e9f0fa;stop-opacity:1"
+         offset="1"
+         id="stop3626-2" />
+    </linearGradient>
+    <linearGradient
+       y2="29.323114"
+       x2="13.269579"
+       y1="2.2007067"
+       x1="29.382435"
+       gradientTransform="matrix(1.0033899,0,0,1.006795,-0.04875293,31.924568)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4163"
+       xlink:href="#linearGradient3622-8"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3622-95">
+      <stop
+         style="stop-color:#c6cee3;stop-opacity:1;"
+         offset="0"
+         id="stop3624-5" />
+      <stop
+         style="stop-color:#eaeef9;stop-opacity:0;"
+         offset="1"
+         id="stop3626-7" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3733"
+       id="linearGradient2886"
+       gradientUnits="userSpaceOnUse"
+       x1="78.128151"
+       y1="102.62679"
+       x2="110.16354"
+       y2="102.62679"
+       gradientTransform="translate(-26.687459,-0.0778789)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3749"
+       id="linearGradient2892"
+       gradientUnits="userSpaceOnUse"
+       x1="88.325951"
+       y1="84.507774"
+       x2="119.71897"
+       y2="63.179432" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3741"
+       id="linearGradient2894"
+       gradientUnits="userSpaceOnUse"
+       x1="98.523994"
+       y1="99.79335"
+       x2="127.85975"
+       y2="99.79335" />
+    <inkscape:perspective
+       id="perspective3676"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3700"
+       id="linearGradient3706"
+       x1="22.977591"
+       y1="16.533602"
+       x2="29.822767"
+       y2="16.274597"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7675676,0,0,1,5.1557318,30.408959)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3708"
+       id="linearGradient3714"
+       x1="12.987333"
+       y1="40.467396"
+       x2="29.933771"
+       y2="40.467396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9235808,0,0,1,1.6954997,-1.5910409)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3716"
+       id="linearGradient3722"
+       x1="12.98733"
+       y1="51.049667"
+       x2="23.125591"
+       y2="51.049667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91240876,0,0,1,1.8405944,-1.5910409)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3648"
+       id="radialGradient3656"
+       cx="15.794774"
+       cy="23.04089"
+       fx="15.794774"
+       fy="23.04089"
+       r="1.5355394"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient3684"
+       x1="0.87100756"
+       y1="-3.0895786"
+       x2="28.755108"
+       y2="-5.2356339"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.0766142,0,0.03111428)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3909"
+       id="linearGradient3915"
+       x1="2.108496"
+       y1="7.6282678"
+       x2="8.558013"
+       y2="7.6282678"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.68715665,0,0,0.98858445,-1.3390267,-0.29005207)" />
+    <linearGradient
+       id="linearGradient3648-8">
+      <stop
+         style="stop-color:#acc6d2;stop-opacity:1;"
+         offset="0"
+         id="stop3650-8" />
+      <stop
+         style="stop-color:#498ca2;stop-opacity:1;"
+         offset="1"
+         id="stop3652-2" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3700-5">
+      <stop
+         style="stop-color:#727272;stop-opacity:1;"
+         offset="0"
+         id="stop3702-5" />
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="1"
+         id="stop3704-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3708-1">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710-1" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712-5" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3716-7"
+       id="linearGradient3722-2"
+       x1="12.98733"
+       y1="51.049667"
+       x2="23.125591"
+       y2="51.049667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91240876,0,0,1,1.8405944,-1.5910409)" />
+    <linearGradient
+       id="linearGradient3716-7">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718-6" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720-1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3689"
+       id="linearGradient3695"
+       x1="0.99223268"
+       y1="16.589376"
+       x2="7.4417505"
+       y2="16.589376"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.68715665,0,0,0.98858445,-0.57197942,-0.53527867)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3697"
+       id="linearGradient3703"
+       x1="0.99223369"
+       y1="25.271418"
+       x2="7.5037656"
+       y2="25.271418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.68715665,0,0,0.98858445,-0.57197942,-0.53527867)" />
+    <inkscape:perspective
+       id="perspective3855"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3932"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.609565"
+     inkscape:cx="27.73719"
+     inkscape:cy="9.6395155"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer6"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1179"
+     inkscape:window-x="1916"
+     inkscape:window-y="-4"
+     inkscape:window-maximized="1"
+     gridtolerance="6"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <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 />
+        <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="layer2"
+     inkscape:label="bg">
+    <rect
+       style="opacity:0.8699187;fill:#00222b;fill-opacity:1;fill-rule:nonzero;stroke:#00222b;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2194"
+       width="3.9452662"
+       height="3.8084145"
+       x="12.487254"
+       y="5.803278" />
+    <rect
+       style="opacity:0.8699187;fill:#6f918a;fill-opacity:1;fill-rule:nonzero;stroke:#6f918a;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2200"
+       width="4.2641201"
+       height="3.852392"
+       x="25.261992"
+       y="5.7844133"
+       inkscape:transform-center-y="1.4356597"
+       inkscape:transform-center-x="0.42783523" />
+    <rect
+       style="opacity:0.8699187;fill:#004455;fill-opacity:1;fill-rule:nonzero;stroke:#004455;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2204"
+       width="3.7840588"
+       height="3.8084145"
+       x="12.487254"
+       y="11.656127"
+       inkscape:transform-center-x="-2.042434"
+       inkscape:transform-center-y="1.3100971" />
+    <rect
+       style="opacity:0.49322492;fill:#b7c8c4;fill-opacity:1;fill-rule:nonzero;stroke:#b7c8c4;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2206"
+       width="3.7840588"
+       height="3.8084145"
+       x="18.935553"
+       y="17.392906"
+       inkscape:transform-center-y="1.41927"
+       inkscape:transform-center-x="0.37966755" />
+    <rect
+       style="opacity:0.8699187;fill:#93aca7;fill-opacity:1;fill-rule:nonzero;stroke:#93aca7;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2210"
+       width="4.2641201"
+       height="3.852392"
+       x="18.798134"
+       y="11.701126"
+       inkscape:transform-center-y="1.4356606"
+       inkscape:transform-center-x="0.42783364" />
+    <rect
+       style="opacity:0.8699187;fill:#93aca7;fill-opacity:1;fill-rule:nonzero;stroke:#93aca7;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2214"
+       width="4.2641201"
+       height="3.852392"
+       x="12.311663"
+       y="17.400082"
+       inkscape:transform-center-x="3.9116254"
+       inkscape:transform-center-y="0.77304619" />
+    <rect
+       style="opacity:0.8699187;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2216"
+       width="3.9954412"
+       height="3.852392"
+       x="25.616791"
+       y="17.188105"
+       inkscape:transform-center-x="3.6651563"
+       inkscape:transform-center-y="0.77304794" />
+    <rect
+       inkscape:transform-center-y="1.3100971"
+       inkscape:transform-center-x="-2.1584489"
+       y="5.798924"
+       x="18.881815"
+       height="3.8084145"
+       width="3.999002"
+       id="rect3949"
+       style="opacity:0.8699187;fill:#004455;fill-opacity:1;fill-rule:nonzero;stroke:#004455;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       inkscape:transform-center-x="0.37966755"
+       inkscape:transform-center-y="1.41927"
+       y="11.643175"
+       x="25.598793"
+       height="3.8084145"
+       width="3.7840588"
+       id="rect3951"
+       style="opacity:0.49322492;fill:#b7c8c4;fill-opacity:1;fill-rule:nonzero;stroke:#b7c8c4;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="arrow" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="column"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3703);fill-opacity:1;stroke:none"
+       d="M 0.10984052,19.45116 4.559204,20.861212 4.609362,29.371983 0.15245465,27.972784 0.10984035,19.45116 z"
+       id="rect3056"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient3695);fill-opacity:1;stroke:none;display:inline"
+       d="m 0.10983988,10.837575 4.43182852,1.410052 4e-7,8.680318 -4.43182892,-1.446132 0,-8.644238 z"
+       id="rect3056-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient3915);fill-opacity:1;stroke:none;display:inline"
+       d="m 0.10984033,2.2546429 4.43182827,1.4100524 0,8.5829307 -4.43182827,-1.348744 z"
+       id="rect3056-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#0055d4;fill-opacity:1;stroke:none;display:inline"
+       d="m 8.3693607,19.528746 -3.8201482,1.348745 0.050158,8.510771 3.7699925,-1.63005 0,-8.229466 z"
+       id="rect3056-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#0066ff;fill-opacity:1;stroke:none;display:inline"
+       d="m 8.3451244,10.812348 -3.8778468,1.420905 0,8.705545 3.8778504,-1.373974 -3.6e-6,-8.752476 z"
+       id="rect3056-4-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#2a7fff;fill-opacity:1;stroke:none;display:inline"
+       d="m 8.3275918,2.3848274 -3.8352354,1.226133 -2e-7,8.5829296 3.8778498,-1.410052 z"
+       id="rect3056-4-0-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#87aade;fill-opacity:1;stroke:none"
+       d="M 3.6282867,1.1576764 7.1278078,2.0463633 8.4365678,2.4183802 4.5554903,3.7184151 0.05017694,2.2135171 3.6282867,1.1576764 z"
+       id="rect3138"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccc"
+       inkscape:transform-center-y="-0.91959986" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="text">
+    <text
+       xml:space="preserve"
+       style="font-size:6.85956478px;font-style:normal;font-weight:normal;opacity:0.8699187;fill:#241c1c;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
+       x="10.327188"
+       y="26.423189"
+       id="text2228-4"
+       transform="scale(0.93116886,1.0739191)"><tspan
+         sodipodi:role="line"
+         id="tspan2230-6"
+         x="10.327188"
+         y="26.423189">netCDF</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="arrow"
+     style="display:inline" />
+</svg>
diff --git a/share/metview/icons_mv5/SCM_OUTPUT_DATA.svg b/share/metview/icons_mv5/SCM_OUTPUT_DATA.svg
new file mode 100644
index 0000000..6e1c1d3
--- /dev/null
+++ b/share/metview/icons_mv5/SCM_OUTPUT_DATA.svg
@@ -0,0 +1,647 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="SCM_INPUT_DATA.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_RUN_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3723">
+      <stop
+         style="stop-color:#20202f;stop-opacity:1;"
+         offset="0"
+         id="stop3725" />
+      <stop
+         style="stop-color:#58586f;stop-opacity:1;"
+         offset="1"
+         id="stop3727" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3699">
+      <stop
+         style="stop-color:#50db54;stop-opacity:1;"
+         offset="0"
+         id="stop3703" />
+      <stop
+         id="stop3709"
+         offset="1"
+         style="stop-color:#91e513;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3679">
+      <stop
+         style="stop-color:#00ccff;stop-opacity:1;"
+         offset="0"
+         id="stop3681" />
+      <stop
+         style="stop-color:#82bfc3;stop-opacity:1;"
+         offset="1"
+         id="stop3683" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3697">
+      <stop
+         style="stop-color:#0055d4;stop-opacity:1;"
+         offset="0"
+         id="stop3699" />
+      <stop
+         style="stop-color:#3c6fbd;stop-opacity:1;"
+         offset="1"
+         id="stop3701" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3689">
+      <stop
+         style="stop-color:#0066ff;stop-opacity:1;"
+         offset="0"
+         id="stop3691" />
+      <stop
+         style="stop-color:#3f84eb;stop-opacity:1;"
+         offset="1"
+         id="stop3693" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3925">
+      <stop
+         style="stop-color:#0044aa;stop-opacity:1;"
+         offset="0"
+         id="stop3927" />
+      <stop
+         style="stop-color:#0055d3;stop-opacity:1;"
+         offset="1"
+         id="stop3929" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3917">
+      <stop
+         style="stop-color:#0055d4;stop-opacity:1;"
+         offset="0"
+         id="stop3919" />
+      <stop
+         style="stop-color:#1975ff;stop-opacity:1;"
+         offset="1"
+         id="stop3921" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3909">
+      <stop
+         style="stop-color:#2a7fff;stop-opacity:1;"
+         offset="0"
+         id="stop3911" />
+      <stop
+         style="stop-color:#63a1ff;stop-opacity:1;"
+         offset="1"
+         id="stop3913" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3678">
+      <stop
+         style="stop-color:#e3e9ef;stop-opacity:1;"
+         offset="0"
+         id="stop3680" />
+      <stop
+         style="stop-color:#d9e3f2;stop-opacity:1;"
+         offset="1"
+         id="stop3682" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3648">
+      <stop
+         style="stop-color:#acc6d2;stop-opacity:1;"
+         offset="0"
+         id="stop3650" />
+      <stop
+         style="stop-color:#498ca2;stop-opacity:1;"
+         offset="1"
+         id="stop3652" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3716">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3708">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3700">
+      <stop
+         style="stop-color:#727272;stop-opacity:1;"
+         offset="0"
+         id="stop3702" />
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="1"
+         id="stop3704" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective3219" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3749">
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:1;"
+         offset="0"
+         id="stop3751" />
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:0;"
+         offset="1"
+         id="stop3753" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3741">
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:1;"
+         offset="0"
+         id="stop3743" />
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:0;"
+         offset="1"
+         id="stop3745" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3733">
+      <stop
+         style="stop-color:#2f528a;stop-opacity:1"
+         offset="0"
+         id="stop3735" />
+      <stop
+         style="stop-color:#3f5e91;stop-opacity:0;"
+         offset="1"
+         id="stop3737" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3622-8">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop3624-3" />
+      <stop
+         style="stop-color:#e9f0fa;stop-opacity:1"
+         offset="1"
+         id="stop3626-2" />
+    </linearGradient>
+    <linearGradient
+       y2="29.323114"
+       x2="13.269579"
+       y1="2.2007067"
+       x1="29.382435"
+       gradientTransform="matrix(1.0033899,0,0,1.006795,-0.04875293,31.924568)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4163"
+       xlink:href="#linearGradient3622-8"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3622-95">
+      <stop
+         style="stop-color:#c6cee3;stop-opacity:1;"
+         offset="0"
+         id="stop3624-5" />
+      <stop
+         style="stop-color:#eaeef9;stop-opacity:0;"
+         offset="1"
+         id="stop3626-7" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3733"
+       id="linearGradient2886"
+       gradientUnits="userSpaceOnUse"
+       x1="78.128151"
+       y1="102.62679"
+       x2="110.16354"
+       y2="102.62679"
+       gradientTransform="translate(-26.687459,-0.0778789)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3749"
+       id="linearGradient2892"
+       gradientUnits="userSpaceOnUse"
+       x1="88.325951"
+       y1="84.507774"
+       x2="119.71897"
+       y2="63.179432" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3741"
+       id="linearGradient2894"
+       gradientUnits="userSpaceOnUse"
+       x1="98.523994"
+       y1="99.79335"
+       x2="127.85975"
+       y2="99.79335" />
+    <inkscape:perspective
+       id="perspective3676"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3700"
+       id="linearGradient3706"
+       x1="22.977591"
+       y1="16.533602"
+       x2="29.822767"
+       y2="16.274597"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7675676,0,0,1,5.1557318,30.408959)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3708"
+       id="linearGradient3714"
+       x1="12.987333"
+       y1="40.467396"
+       x2="29.933771"
+       y2="40.467396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9235808,0,0,1,1.6954997,-1.5910409)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3716"
+       id="linearGradient3722"
+       x1="12.98733"
+       y1="51.049667"
+       x2="23.125591"
+       y2="51.049667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91240876,0,0,1,1.8405944,-1.5910409)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3648"
+       id="radialGradient3656"
+       cx="15.794774"
+       cy="23.04089"
+       fx="15.794774"
+       fy="23.04089"
+       r="1.5355394"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient3684"
+       x1="0.87100756"
+       y1="-3.0895786"
+       x2="28.755108"
+       y2="-5.2356339"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.0766142,0,0.03111428)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3909"
+       id="linearGradient3915"
+       x1="2.108496"
+       y1="7.6282678"
+       x2="8.558013"
+       y2="7.6282678"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.68715665,0,0,0.98858445,-1.3390267,-0.29005207)" />
+    <linearGradient
+       id="linearGradient3648-8">
+      <stop
+         style="stop-color:#acc6d2;stop-opacity:1;"
+         offset="0"
+         id="stop3650-8" />
+      <stop
+         style="stop-color:#498ca2;stop-opacity:1;"
+         offset="1"
+         id="stop3652-2" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3700-5">
+      <stop
+         style="stop-color:#727272;stop-opacity:1;"
+         offset="0"
+         id="stop3702-5" />
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="1"
+         id="stop3704-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3708-1">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710-1" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712-5" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3716-7"
+       id="linearGradient3722-2"
+       x1="12.98733"
+       y1="51.049667"
+       x2="23.125591"
+       y2="51.049667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91240876,0,0,1,1.8405944,-1.5910409)" />
+    <linearGradient
+       id="linearGradient3716-7">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718-6" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720-1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3689"
+       id="linearGradient3695"
+       x1="0.99223268"
+       y1="16.589376"
+       x2="7.4417505"
+       y2="16.589376"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.68715665,0,0,0.98858445,-0.57197942,-0.53527867)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3697"
+       id="linearGradient3703"
+       x1="0.99223369"
+       y1="25.271418"
+       x2="7.5037656"
+       y2="25.271418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.68715665,0,0,0.98858445,-0.57197942,-0.53527867)" />
+    <inkscape:perspective
+       id="perspective3855"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3932"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.609565"
+     inkscape:cx="27.73719"
+     inkscape:cy="9.6395155"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer6"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1179"
+     inkscape:window-x="1916"
+     inkscape:window-y="-4"
+     inkscape:window-maximized="1"
+     gridtolerance="6"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <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 />
+        <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="layer2"
+     inkscape:label="bg">
+    <rect
+       style="opacity:0.8699187;fill:#00222b;fill-opacity:1;fill-rule:nonzero;stroke:#00222b;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2194"
+       width="3.9452662"
+       height="3.8084145"
+       x="12.487254"
+       y="5.803278" />
+    <rect
+       style="opacity:0.8699187;fill:#6f918a;fill-opacity:1;fill-rule:nonzero;stroke:#6f918a;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2200"
+       width="4.2641201"
+       height="3.852392"
+       x="25.261992"
+       y="5.7844133"
+       inkscape:transform-center-y="1.4356597"
+       inkscape:transform-center-x="0.42783523" />
+    <rect
+       style="opacity:0.8699187;fill:#004455;fill-opacity:1;fill-rule:nonzero;stroke:#004455;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2204"
+       width="3.7840588"
+       height="3.8084145"
+       x="12.487254"
+       y="11.656127"
+       inkscape:transform-center-x="-2.042434"
+       inkscape:transform-center-y="1.3100971" />
+    <rect
+       style="opacity:0.49322492;fill:#b7c8c4;fill-opacity:1;fill-rule:nonzero;stroke:#b7c8c4;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2206"
+       width="3.7840588"
+       height="3.8084145"
+       x="18.935553"
+       y="17.392906"
+       inkscape:transform-center-y="1.41927"
+       inkscape:transform-center-x="0.37966755" />
+    <rect
+       style="opacity:0.8699187;fill:#93aca7;fill-opacity:1;fill-rule:nonzero;stroke:#93aca7;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2210"
+       width="4.2641201"
+       height="3.852392"
+       x="18.798134"
+       y="11.701126"
+       inkscape:transform-center-y="1.4356606"
+       inkscape:transform-center-x="0.42783364" />
+    <rect
+       style="opacity:0.8699187;fill:#93aca7;fill-opacity:1;fill-rule:nonzero;stroke:#93aca7;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2214"
+       width="4.2641201"
+       height="3.852392"
+       x="12.311663"
+       y="17.400082"
+       inkscape:transform-center-x="3.9116254"
+       inkscape:transform-center-y="0.77304619" />
+    <rect
+       style="opacity:0.8699187;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2216"
+       width="3.9954412"
+       height="3.852392"
+       x="25.616791"
+       y="17.188105"
+       inkscape:transform-center-x="3.6651563"
+       inkscape:transform-center-y="0.77304794" />
+    <rect
+       inkscape:transform-center-y="1.3100971"
+       inkscape:transform-center-x="-2.1584489"
+       y="5.798924"
+       x="18.881815"
+       height="3.8084145"
+       width="3.999002"
+       id="rect3949"
+       style="opacity:0.8699187;fill:#004455;fill-opacity:1;fill-rule:nonzero;stroke:#004455;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       inkscape:transform-center-x="0.37966755"
+       inkscape:transform-center-y="1.41927"
+       y="11.643175"
+       x="25.598793"
+       height="3.8084145"
+       width="3.7840588"
+       id="rect3951"
+       style="opacity:0.49322492;fill:#b7c8c4;fill-opacity:1;fill-rule:nonzero;stroke:#b7c8c4;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="arrow" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="column"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3703);fill-opacity:1;stroke:none"
+       d="M 0.10984052,19.45116 4.559204,20.861212 4.609362,29.371983 0.15245465,27.972784 0.10984035,19.45116 z"
+       id="rect3056"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient3695);fill-opacity:1;stroke:none;display:inline"
+       d="m 0.10983988,10.837575 4.43182852,1.410052 4e-7,8.680318 -4.43182892,-1.446132 0,-8.644238 z"
+       id="rect3056-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient3915);fill-opacity:1;stroke:none;display:inline"
+       d="m 0.10984033,2.2546429 4.43182827,1.4100524 0,8.5829307 -4.43182827,-1.348744 z"
+       id="rect3056-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#0055d4;fill-opacity:1;stroke:none;display:inline"
+       d="m 8.3693607,19.528746 -3.8201482,1.348745 0.050158,8.510771 3.7699925,-1.63005 0,-8.229466 z"
+       id="rect3056-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#0066ff;fill-opacity:1;stroke:none;display:inline"
+       d="m 8.3451244,10.812348 -3.8778468,1.420905 0,8.705545 3.8778504,-1.373974 -3.6e-6,-8.752476 z"
+       id="rect3056-4-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#2a7fff;fill-opacity:1;stroke:none;display:inline"
+       d="m 8.3275918,2.3848274 -3.8352354,1.226133 -2e-7,8.5829296 3.8778498,-1.410052 z"
+       id="rect3056-4-0-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#87aade;fill-opacity:1;stroke:none"
+       d="M 3.6282867,1.1576764 7.1278078,2.0463633 8.4365678,2.4183802 4.5554903,3.7184151 0.05017694,2.2135171 3.6282867,1.1576764 z"
+       id="rect3138"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccc"
+       inkscape:transform-center-y="-0.91959986" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="text">
+    <text
+       xml:space="preserve"
+       style="font-size:6.85956478px;font-style:normal;font-weight:normal;opacity:0.8699187;fill:#241c1c;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
+       x="10.327188"
+       y="26.423189"
+       id="text2228-4"
+       transform="scale(0.93116886,1.0739191)"><tspan
+         sodipodi:role="line"
+         id="tspan2230-6"
+         x="10.327188"
+         y="26.423189">netCDF</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="arrow"
+     style="display:inline" />
+</svg>
diff --git a/share/metview/icons_mv5/SCM_RUN.svg b/share/metview/icons_mv5/SCM_RUN.svg
new file mode 100644
index 0000000..66016f7
--- /dev/null
+++ b/share/metview/icons_mv5/SCM_RUN.svg
@@ -0,0 +1,576 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="SCM_RUN.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_RUN_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3697">
+      <stop
+         style="stop-color:#0055d4;stop-opacity:1;"
+         offset="0"
+         id="stop3699" />
+      <stop
+         style="stop-color:#3c6fbd;stop-opacity:1;"
+         offset="1"
+         id="stop3701" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3689">
+      <stop
+         style="stop-color:#0066ff;stop-opacity:1;"
+         offset="0"
+         id="stop3691" />
+      <stop
+         style="stop-color:#3f84eb;stop-opacity:1;"
+         offset="1"
+         id="stop3693" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3925">
+      <stop
+         style="stop-color:#0044aa;stop-opacity:1;"
+         offset="0"
+         id="stop3927" />
+      <stop
+         style="stop-color:#0055d3;stop-opacity:1;"
+         offset="1"
+         id="stop3929" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3917">
+      <stop
+         style="stop-color:#0055d4;stop-opacity:1;"
+         offset="0"
+         id="stop3919" />
+      <stop
+         style="stop-color:#1975ff;stop-opacity:1;"
+         offset="1"
+         id="stop3921" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3909">
+      <stop
+         style="stop-color:#2a7fff;stop-opacity:1;"
+         offset="0"
+         id="stop3911" />
+      <stop
+         style="stop-color:#63a1ff;stop-opacity:1;"
+         offset="1"
+         id="stop3913" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3678">
+      <stop
+         style="stop-color:#e3e9ef;stop-opacity:1;"
+         offset="0"
+         id="stop3680" />
+      <stop
+         style="stop-color:#d9e3f2;stop-opacity:1;"
+         offset="1"
+         id="stop3682" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3648">
+      <stop
+         style="stop-color:#acc6d2;stop-opacity:1;"
+         offset="0"
+         id="stop3650" />
+      <stop
+         style="stop-color:#498ca2;stop-opacity:1;"
+         offset="1"
+         id="stop3652" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3716">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3708">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3700">
+      <stop
+         style="stop-color:#727272;stop-opacity:1;"
+         offset="0"
+         id="stop3702" />
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="1"
+         id="stop3704" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective3219" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3749">
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:1;"
+         offset="0"
+         id="stop3751" />
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:0;"
+         offset="1"
+         id="stop3753" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3741">
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:1;"
+         offset="0"
+         id="stop3743" />
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:0;"
+         offset="1"
+         id="stop3745" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3733">
+      <stop
+         style="stop-color:#2f528a;stop-opacity:1"
+         offset="0"
+         id="stop3735" />
+      <stop
+         style="stop-color:#3f5e91;stop-opacity:0;"
+         offset="1"
+         id="stop3737" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3622-8">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop3624-3" />
+      <stop
+         style="stop-color:#e9f0fa;stop-opacity:1"
+         offset="1"
+         id="stop3626-2" />
+    </linearGradient>
+    <linearGradient
+       y2="29.323114"
+       x2="13.269579"
+       y1="2.2007067"
+       x1="29.382435"
+       gradientTransform="matrix(1.0033899,0,0,1.006795,-0.04875293,31.924568)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4163"
+       xlink:href="#linearGradient3622-8"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3622-95">
+      <stop
+         style="stop-color:#c6cee3;stop-opacity:1;"
+         offset="0"
+         id="stop3624-5" />
+      <stop
+         style="stop-color:#eaeef9;stop-opacity:0;"
+         offset="1"
+         id="stop3626-7" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3733"
+       id="linearGradient2886"
+       gradientUnits="userSpaceOnUse"
+       x1="78.128151"
+       y1="102.62679"
+       x2="110.16354"
+       y2="102.62679"
+       gradientTransform="translate(-26.687459,-0.0778789)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3749"
+       id="linearGradient2892"
+       gradientUnits="userSpaceOnUse"
+       x1="88.325951"
+       y1="84.507774"
+       x2="119.71897"
+       y2="63.179432" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3741"
+       id="linearGradient2894"
+       gradientUnits="userSpaceOnUse"
+       x1="98.523994"
+       y1="99.79335"
+       x2="127.85975"
+       y2="99.79335" />
+    <inkscape:perspective
+       id="perspective3676"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3700"
+       id="linearGradient3706"
+       x1="22.977591"
+       y1="16.533602"
+       x2="29.822767"
+       y2="16.274597"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7675676,0,0,1,5.1557318,30.408959)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3708"
+       id="linearGradient3714"
+       x1="12.987333"
+       y1="40.467396"
+       x2="29.933771"
+       y2="40.467396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9235808,0,0,1,1.6954997,-1.5910409)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3716"
+       id="linearGradient3722"
+       x1="12.98733"
+       y1="51.049667"
+       x2="23.125591"
+       y2="51.049667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91240876,0,0,1,1.8405944,-1.5910409)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3648"
+       id="radialGradient3656"
+       cx="15.794774"
+       cy="23.04089"
+       fx="15.794774"
+       fy="23.04089"
+       r="1.5355394"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient3684"
+       x1="0.87100756"
+       y1="-3.0895786"
+       x2="28.755108"
+       y2="-5.2356339"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.0766142,0,0.03111428)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3909"
+       id="linearGradient3915"
+       x1="2.108496"
+       y1="7.6282678"
+       x2="8.558013"
+       y2="7.6282678"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-1.9191813,0.17506575)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3648-8"
+       id="radialGradient3656-4"
+       cx="15.794774"
+       cy="23.04089"
+       fx="15.794774"
+       fy="23.04089"
+       r="1.5355394"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3648-8">
+      <stop
+         style="stop-color:#acc6d2;stop-opacity:1;"
+         offset="0"
+         id="stop3650-8" />
+      <stop
+         style="stop-color:#498ca2;stop-opacity:1;"
+         offset="1"
+         id="stop3652-2" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3700-5"
+       id="linearGradient3706-4"
+       x1="22.977591"
+       y1="16.533602"
+       x2="29.822767"
+       y2="16.274597"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7675676,0,0,1,6.7711202,-0.67721382)" />
+    <linearGradient
+       id="linearGradient3700-5">
+      <stop
+         style="stop-color:#727272;stop-opacity:1;"
+         offset="0"
+         id="stop3702-5" />
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="1"
+         id="stop3704-1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3708-1"
+       id="linearGradient3714-7"
+       x1="12.987333"
+       y1="40.467396"
+       x2="29.933771"
+       y2="40.467396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9235808,0,0,1,3.3108892,-32.677214)" />
+    <linearGradient
+       id="linearGradient3708-1">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710-1" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712-5" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3716-7"
+       id="linearGradient3722-2"
+       x1="12.98733"
+       y1="51.049667"
+       x2="23.125591"
+       y2="51.049667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91240876,0,0,1,1.8405944,-1.5910409)" />
+    <linearGradient
+       id="linearGradient3716-7">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718-6" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720-1" />
+    </linearGradient>
+    <linearGradient
+       y2="51.049667"
+       x2="23.125591"
+       y1="51.049667"
+       x1="12.98733"
+       gradientTransform="matrix(0.91240876,0,0,1,3.4559832,-32.677214)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3965"
+       xlink:href="#linearGradient3716-7"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3689"
+       id="linearGradient3695"
+       x1="0.99223268"
+       y1="16.589376"
+       x2="7.4417505"
+       y2="16.589376"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.80291868,-0.07299261)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3697"
+       id="linearGradient3703"
+       x1="0.99223369"
+       y1="25.271418"
+       x2="7.5037656"
+       y2="25.271418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.80291868,-0.07299261)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="27.400035"
+     inkscape:cx="15.037117"
+     inkscape:cy="15.738723"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1366"
+     inkscape:window-height="1141"
+     inkscape:window-x="2152"
+     inkscape:window-y="15"
+     inkscape:window-maximized="0"
+     gridtolerance="6">
+    <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 />
+        <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="layer1"
+     inkscape:label="column"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3703);fill-opacity:1;stroke:none"
+       d="M 0.18931503,20.144237 6.6643502,21.570572 6.7373432,30.17962 0.25132962,28.764264 0.18931503,20.144237 z"
+       id="rect3056"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient3695);fill-opacity:1;stroke:none;display:inline"
+       d="m 0.18931403,11.431188 6.44951727,1.426335 4e-7,8.780552 -6.44951767,-1.462831 0,-8.744056 z"
+       id="rect3056-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient3915);fill-opacity:1;stroke:none;display:inline"
+       d="M 0.18931463,2.7491451 6.6388315,4.17548 l 0,8.682042 -6.44951687,-1.36432 z"
+       id="rect3056-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#0055d4;fill-opacity:1;stroke:none;display:inline"
+       d="m 12.209167,20.222719 -5.5593571,1.36432 0.072992,8.609048 5.4863651,-1.648874 0,-8.324494 z"
+       id="rect3056-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#0066ff;fill-opacity:1;stroke:none;display:inline"
+       d="m 12.245659,11.405669 -5.6433239,1.437313 0,8.806071 5.6433279,-1.389839 -4e-6,-8.853545 z"
+       id="rect3056-4-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#2a7fff;fill-opacity:1;stroke:none;display:inline"
+       d="m 12.220144,2.9351892 -5.5813124,1.2402912 -3e-7,8.6820406 5.6433277,-1.426335 z"
+       id="rect3056-4-0-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#87aade;fill-opacity:1;stroke:none"
+       d="M 5.3096123,1.6395116 10.402368,2.5384604 12.306971,2.9147732 6.6589459,4.2298201 0.10248823,2.7075445 5.3096123,1.6395116 z"
+       id="rect3138"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccc"
+       inkscape:transform-center-y="-0.9302188" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="desktop"
+     sodipodi:insensitive="true"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3965);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 15.305737,8.4932002 c 0,0 2.380431,0.969574 3.91227,1.282181 1.531839,0.3126058 5.27045,0.4958128 5.27045,0.4958128 l 0.06752,17.980513 c 0,0 -3.772018,-0.256764 -5.61367,-0.685905 -1.244221,-0.289928 -3.636568,-1.267745 -3.636568,-1.267745 l 0,-17.8048568 z"
+       id="rect2870-42"
+       sodipodi:nodetypes="czccacc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient3714-7);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 23.951602,5.2371162 7.005543,1.2599809 -6.492942,3.8461499 c 0,0 -3.713429,-0.261544 -5.242549,-0.5826298 -1.529121,-0.321086 -3.915914,-1.223016 -3.915914,-1.223016 l 8.645862,-3.300485 z"
+       id="rect2870-4-3"
+       sodipodi:nodetypes="ccczcc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient3706-4);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 24.407978,10.306246 6.401161,-3.7370959 -0.0852,17.1684429 -6.259161,4.440114 -0.0568,-17.871461 z"
+       id="rect3690-2"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient3656-4);fill-opacity:1;fill-rule:evenodd;stroke:#335596;stroke-width:0.39196318;stroke-miterlimit:3.29999995;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path3724-2"
+       sodipodi:cx="16.631927"
+       sodipodi:cy="23.101271"
+       sodipodi:rx="1.5355394"
+       sodipodi:ry="1.5355394"
+       d="m 18.167467,23.101271 a 1.5355394,1.5355394 0 1 1 -3.071079,0 1.5355394,1.5355394 0 1 1 3.071079,0 z"
+       transform="matrix(1.1400126,-0.10213105,0.12685752,1.4160157,-2.6448351,-8.8665765)" />
+    <path
+       style="fill:#3771c8;stroke:none;display:inline"
+       d="m 15.305741,10.787259 c 0,0 2.693952,1.050538 4.218108,1.369035 1.524156,0.318497 4.921126,0.518014 4.921126,0.518014 l -1e-6,1.59104 c 0,0 -3.620824,-0.225659 -5.143132,-0.555014 -1.522308,-0.329354 -3.959101,-1.295033 -3.959101,-1.295033 l -0.037,-1.628042 z"
+       id="path3726-1"
+       sodipodi:nodetypes="czcczcc"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="czcczcc"
+       id="path3728-6"
+       d="m 15.305741,14.154345 c 0,0 2.693952,1.050538 4.218108,1.369035 1.524156,0.318497 4.921126,0.518014 4.921126,0.518014 l -1e-6,1.59104 c 0,0 -3.620824,-0.225659 -5.143132,-0.555014 -1.522308,-0.329354 -3.959101,-1.295033 -3.959101,-1.295033 l -0.037,-1.628042 z"
+       style="fill:#3771c8;stroke:none;display:inline"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/SCM_VIS.svg b/share/metview/icons_mv5/SCM_VIS.svg
new file mode 100644
index 0000000..875ace6
--- /dev/null
+++ b/share/metview/icons_mv5/SCM_VIS.svg
@@ -0,0 +1,492 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="SCM_VIS.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_RUN_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient4026">
+      <stop
+         style="stop-color:#f30e1e;stop-opacity:1;"
+         offset="0"
+         id="stop4028" />
+      <stop
+         style="stop-color:#ba2f39;stop-opacity:1;"
+         offset="1"
+         id="stop4030" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3975">
+      <stop
+         style="stop-color:#565c64;stop-opacity:1;"
+         offset="0"
+         id="stop3977" />
+      <stop
+         style="stop-color:#99a4b4;stop-opacity:1;"
+         offset="1"
+         id="stop3979" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3967">
+      <stop
+         style="stop-color:#5f8dd3;stop-opacity:1;"
+         offset="0"
+         id="stop3969" />
+      <stop
+         style="stop-color:#81a7df;stop-opacity:1;"
+         offset="1"
+         id="stop3971" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3697">
+      <stop
+         style="stop-color:#0055d4;stop-opacity:1;"
+         offset="0"
+         id="stop3699" />
+      <stop
+         style="stop-color:#3c6fbd;stop-opacity:1;"
+         offset="1"
+         id="stop3701" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3689">
+      <stop
+         style="stop-color:#0066ff;stop-opacity:1;"
+         offset="0"
+         id="stop3691" />
+      <stop
+         style="stop-color:#3f84eb;stop-opacity:1;"
+         offset="1"
+         id="stop3693" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3909">
+      <stop
+         style="stop-color:#2a7fff;stop-opacity:1;"
+         offset="0"
+         id="stop3911" />
+      <stop
+         style="stop-color:#63a1ff;stop-opacity:1;"
+         offset="1"
+         id="stop3913" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3678">
+      <stop
+         style="stop-color:#e3e9ef;stop-opacity:1;"
+         offset="0"
+         id="stop3680" />
+      <stop
+         style="stop-color:#d9e3f2;stop-opacity:1;"
+         offset="1"
+         id="stop3682" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3622-8">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop3624-3" />
+      <stop
+         style="stop-color:#e9f0fa;stop-opacity:1"
+         offset="1"
+         id="stop3626-2" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3909"
+       id="linearGradient3915"
+       x1="2.108496"
+       y1="7.6282678"
+       x2="8.558013"
+       y2="7.6282678"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-1.9556776,0.24805836)" />
+    <linearGradient
+       id="linearGradient3648-8">
+      <stop
+         style="stop-color:#acc6d2;stop-opacity:1;"
+         offset="0"
+         id="stop3650-8" />
+      <stop
+         style="stop-color:#498ca2;stop-opacity:1;"
+         offset="1"
+         id="stop3652-2" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3700-5">
+      <stop
+         style="stop-color:#727272;stop-opacity:1;"
+         offset="0"
+         id="stop3702-5" />
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="1"
+         id="stop3704-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3708-1">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710-1" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712-5" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3716-7">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718-6" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720-1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3689"
+       id="linearGradient3695"
+       x1="0.99223268"
+       y1="16.589376"
+       x2="7.4417505"
+       y2="16.589376"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.83941498,0)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3697"
+       id="linearGradient3703"
+       x1="0.99223369"
+       y1="25.271418"
+       x2="7.5037656"
+       y2="25.271418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.83941498,0)" />
+    <inkscape:perspective
+       id="perspective3839"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3708-1-6"
+       id="linearGradient3714-7-4"
+       x1="12.987333"
+       y1="40.467396"
+       x2="29.933771"
+       y2="40.467396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9235808,0,0,1,2.4349779,-34.575022)" />
+    <linearGradient
+       id="linearGradient3708-1-6">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710-1-9" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712-5-2" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective3880"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       y2="52.035069"
+       x2="21.925592"
+       y1="51.049667"
+       x1="12.98733"
+       gradientTransform="matrix(0.91240876,0,0,1,4.915835,-29.502035)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3965-4"
+       xlink:href="#linearGradient3716-7-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3716-7-7">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718-6-7" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720-1-5" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective3918"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient3700-5-8">
+      <stop
+         style="stop-color:#727272;stop-opacity:1;"
+         offset="0"
+         id="stop3702-5-1" />
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="1"
+         id="stop3704-1-2" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3708-1-9"
+       id="linearGradient3714-7-8"
+       x1="12.987333"
+       y1="40.467396"
+       x2="29.933771"
+       y2="40.467396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9235808,0,0,1,2.4349779,-34.575022)" />
+    <linearGradient
+       id="linearGradient3708-1-9">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710-1-3" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712-5-6" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3975"
+       id="linearGradient3981"
+       x1="21.350325"
+       y1="20.322937"
+       x2="23.313964"
+       y2="20.322938"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.135239,0,0,1.0828856,-1.9275725,-0.04606245)" />
+    <inkscape:perspective
+       id="perspective4009"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4026"
+       id="linearGradient4032"
+       x1="16.804222"
+       y1="14.95285"
+       x2="27.970543"
+       y2="14.95285"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0951557,0,0,1,-1.8682756,0.40145933)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="27.400035"
+     inkscape:cx="15.037117"
+     inkscape:cy="15.83307"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1366"
+     inkscape:window-height="1045"
+     inkscape:window-x="2241"
+     inkscape:window-y="19"
+     inkscape:window-maximized="0"
+     gridtolerance="6">
+    <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="layer1"
+     inkscape:label="column"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3703);fill-opacity:1;stroke:none"
+       d="M 0.15281873,20.21723 6.6278539,21.643565 6.7008469,30.252613 0.21483332,28.837257 0.15281873,20.21723 z"
+       id="rect3056"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient3695);fill-opacity:1;stroke:none;display:inline"
+       d="m 0.15281773,11.504181 6.44951727,1.426335 4e-7,8.780552 -6.44951767,-1.462831 0,-8.744056 z"
+       id="rect3056-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient3915);fill-opacity:1;stroke:none;display:inline"
+       d="m 0.15281833,2.8221377 6.44951687,1.4263349 0,8.6820424 -6.44951687,-1.36432 z"
+       id="rect3056-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#0055d4;fill-opacity:1;stroke:none;display:inline"
+       d="m 12.172671,20.295712 -5.5593574,1.36432 0.072992,8.609048 5.4863654,-1.648874 0,-8.324494 z"
+       id="rect3056-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#0066ff;fill-opacity:1;stroke:none;display:inline"
+       d="m 12.209163,11.478662 -5.6433242,1.437313 0,8.806071 5.6433282,-1.389839 -4e-6,-8.853545 z"
+       id="rect3056-4-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#2a7fff;fill-opacity:1;stroke:none;display:inline"
+       d="m 12.183648,3.0081818 -5.5813127,1.2402912 -3e-7,8.682041 5.643328,-1.426335 z"
+       id="rect3056-4-0-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#87aade;fill-opacity:1;stroke:none"
+       d="M 5.273116,1.7125042 10.365872,2.611453 12.270475,2.9877658 6.6224496,4.3028127 0.06599193,2.7805371 5.273116,1.7125042 z"
+       id="rect3138"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccc"
+       inkscape:transform-center-y="-0.9302188" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="stand"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:#939dac;fill-opacity:1;fill-rule:evenodd;stroke:#123b7d;stroke-width:0.28685689;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.29999995;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path3869"
+       sodipodi:cx="-3.3759081"
+       sodipodi:cy="15.175204"
+       sodipodi:rx="2.6094856"
+       sodipodi:ry="1.2408743"
+       d="m -0.76642251,15.175204 a 2.6094856,1.2408743 0 1 1 -5.21897129,0 2.6094856,1.2408743 0 1 1 5.21897129,0 z"
+       transform="matrix(1.7971318,0.34159025,-0.37101268,1.6200355,33.819891,0.62894176)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="bar">
+    <path
+       style="fill:url(#linearGradient3981);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 20.122414,19.198259 c 0,0 0.257868,1.326588 1.996868,1.665105 1.739004,0.338517 2.420066,-0.806817 2.420066,-0.806817 l -0.0062,4.057523 c 0,0 -0.680348,0.8151 -2.436815,0.561448 -1.496348,-0.216089 -2.015341,-1.135695 -2.015341,-1.135695 l 0.04144,-4.341564 2.8e-5,0 z"
+       id="rect2870-42"
+       sodipodi:nodetypes="czccsccc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="screen">
+    <path
+       style="fill:#6f7c91;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 17.804659,5.8949724 c 0,0 3.208652,1.0687276 5.56385,1.3803788 2.3552,0.3116513 8.318581,0.260686 8.318581,0.260686 l -1.17551,1.7541393 c 0,0 -5.796507,-0.00657 -8.83197,-0.4333147 C 18.644147,8.430123 14.678496,6.8210921 14.678496,6.8210921 l 3.126163,-0.9261197 z"
+       id="rect2870-4-3-8"
+       sodipodi:nodetypes="czcczcc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#373e48;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 30.441671,9.131545 1.288282,-1.5965257 -0.01518,12.5446957 -1.193602,1.521818 -0.0795,-12.469988 z"
+       id="rect3690-2-0"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#dbe2e3;fill-opacity:1;fill-rule:evenodd;stroke:#0c2248;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.29999995;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+       d="m 14.978973,7.2111898 c 0,0 2.955238,1.2768375 6.851552,1.8575018 3.896315,0.5806644 8.394286,0.3556922 8.394286,0.3556922 l 0.04538,11.8959172 c 0,0 -5.032626,0.291789 -8.514194,-0.243177 -3.481568,-0.534966 -6.715432,-2.161573 -6.715432,-2.161573 l -0.0616,-11.7043612 z"
+       id="rect3828-2"
+       sodipodi:nodetypes="czcczcc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="axes">
+    <path
+       style="fill:none;stroke:#6c5b5d;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 16.557496,16.653304 c 1.825257,0.632676 3.250822,1.483391 5.475771,1.788319 0.839425,0.182748 3.035471,0.413693 7.034567,0.145985"
+       id="path3996-1"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#6c5b5d;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="M 20.834194,19.864979 20.714286,9.6825099"
+       id="path3998-0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="graph">
+    <path
+       style="fill:none;stroke:url(#linearGradient4032);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       d="m 17.082542,14.490184 c 0,0 0.839489,2.702497 1.251996,2.148768 1.609019,-2.159868 3.463916,-5.927736 3.781734,-5.425425 0.704791,1.113917 1.201134,4.983495 2.066852,6.515474 0.351413,0.621863 2.466197,-2.729574 2.466197,-2.729574 l 1.566925,4.541256"
+       id="path3992"
+       sodipodi:nodetypes="cssscc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/SERVICE.xpm b/share/metview/icons_mv5/SERVICE.xpm
new file mode 100644
index 0000000..4c63cb4
--- /dev/null
+++ b/share/metview/icons_mv5/SERVICE.xpm
@@ -0,0 +1,251 @@
+/* XPM */
+static char * SERVICE_xpm[] = {
+"32 32 216 2",
+"  	c None",
+". 	c #FFFFFF",
+"+ 	c #EFF3F8",
+"@ 	c #A9BFDB",
+"# 	c #4C82BB",
+"$ 	c #1E68AD",
+"% 	c #3274B3",
+"& 	c #7BA0C9",
+"* 	c #DAE4EF",
+"= 	c #FCFDFE",
+"- 	c #D9E2EF",
+"; 	c #82A4CC",
+"> 	c #3373B2",
+", 	c #206AAF",
+"' 	c #467EB8",
+") 	c #A5BCD9",
+"! 	c #EEF2F8",
+"~ 	c #C0D1E5",
+"{ 	c #3B76B3",
+"] 	c #477FB8",
+"^ 	c #D4DFED",
+"/ 	c #F1F5F9",
+"( 	c #7EA0C9",
+"_ 	c #1D79BB",
+": 	c #0B8BCE",
+"< 	c #0596D9",
+"[ 	c #0792D5",
+"} 	c #1180C4",
+"| 	c #4881BA",
+"1 	c #A4BBD8",
+"2 	c #4F86BD",
+"3 	c #127EC3",
+"4 	c #0990D3",
+"5 	c #0597D9",
+"6 	c #0B8CCF",
+"7 	c #1B77BB",
+"8 	c #7C9EC8",
+"9 	c #F0F3F8",
+"0 	c #F3F6FA",
+"a 	c #598CC0",
+"b 	c #0C8ACD",
+"c 	c #0D89CD",
+"d 	c #6894C3",
+"e 	c #98B2D3",
+"f 	c #1D7BBE",
+"g 	c #039ADC",
+"h 	c #00A0E2",
+"i 	c #019FE1",
+"j 	c #2C6DB0",
+"k 	c #019EE0",
+"l 	c #029BDE",
+"m 	c #1B7BBF",
+"n 	c #95B1D3",
+"o 	c #FDFEFE",
+"p 	c #D0DCEB",
+"q 	c #267FBE",
+"r 	c #009FE1",
+"s 	c #2A78B8",
+"t 	c #DEE6F1",
+"u 	c #2D78B8",
+"v 	c #029CDE",
+"w 	c #2C79B9",
+"x 	c #D3DEEC",
+"y 	c #8FADD1",
+"z 	c #0A8CD0",
+"A 	c #029DDF",
+"B 	c #387AB8",
+"C 	c #0F89CC",
+"D 	c #0597DA",
+"E 	c #0D87CB",
+"F 	c #0A8DD0",
+"G 	c #098FD2",
+"H 	c #0D87CA",
+"I 	c #89ABD0",
+"J 	c #F6F8FB",
+"K 	c #508BC0",
+"L 	c #0598DA",
+"M 	c #0694D7",
+"N 	c #7599C5",
+"O 	c #5989BE",
+"P 	c #0498DA",
+"Q 	c #2374B7",
+"R 	c #6391C2",
+"S 	c #407BB7",
+"T 	c #0C88CC",
+"U 	c #0B8ACD",
+"V 	c #3D7AB6",
+"W 	c #6A96C5",
+"X 	c #226EB1",
+"Y 	c #029BDD",
+"Z 	c #0399DC",
+"` 	c #4F8AC0",
+" .	c #D2DDEC",
+"..	c #2781C1",
+"+.	c #1682C5",
+"@.	c #B3C6DF",
+"#.	c #2677B9",
+"$.	c #1783C5",
+"%.	c #A6BDD9",
+"&.	c #4079B5",
+"*.	c #3A7EBA",
+"=.	c #DFE7F1",
+"-.	c #FEFEFF",
+";.	c #AFC4DD",
+">.	c #137CC0",
+",.	c #2080C1",
+"'.	c #C5D4E6",
+").	c #94B0D2",
+"!.	c #367DBA",
+"~.	c #1874B8",
+"{.	c #3684C0",
+"].	c #E0E8F2",
+"^.	c #85A4CB",
+"/.	c #0793D6",
+"(.	c #75A0CB",
+"_.	c #F8FAFC",
+":.	c #3578B6",
+"<.	c #8DACD0",
+"[.	c #F9FBFC",
+"}.	c #4C85BD",
+"|.	c #0498DB",
+"1.	c #749CC8",
+"2.	c #4488C1",
+"3.	c #92ADD0",
+"4.	c #0891D4",
+"5.	c #8CAFD3",
+"6.	c #7C9FC9",
+"7.	c #4E89BF",
+"8.	c #D9E3EF",
+"9.	c #2580C0",
+"0.	c #1883C6",
+"a.	c #B2C5DE",
+"b.	c #4689C1",
+"c.	c #92AED1",
+"d.	c #1A81C3",
+"e.	c #2081C1",
+"f.	c #C3D2E5",
+"g.	c #0C8BCE",
+"h.	c #3981BD",
+"i.	c #F2F5FA",
+"j.	c #397EBA",
+"k.	c #039BDD",
+"l.	c #8DABCF",
+"m.	c #4983BB",
+"n.	c #6E98C6",
+"o.	c #779CC7",
+"p.	c #0499DB",
+"q.	c #4A86BD",
+"r.	c #FBFCFD",
+"s.	c #2078BB",
+"t.	c #B5C7DF",
+"u.	c #BFCFE4",
+"v.	c #1B81C3",
+"w.	c #1E80C1",
+"x.	c #C7D5E7",
+"y.	c #0C8BCF",
+"z.	c #3C84BE",
+"A.	c #E7EDF5",
+"B.	c #3E83BD",
+"C.	c #0C8DD0",
+"D.	c #8DAACE",
+"E.	c #5285BB",
+"F.	c #719BC8",
+"G.	c #789EC9",
+"H.	c #3876B4",
+"I.	c #2076B9",
+"J.	c #1482C6",
+"K.	c #B7CAE1",
+"L.	c #C0D0E4",
+"M.	c #1B81C2",
+"N.	c #147ABE",
+"O.	c #3D82BD",
+"P.	c #E4EBF3",
+"Q.	c #EBF0F7",
+"R.	c #3E83BE",
+"S.	c #739DC9",
+"T.	c #FCFCFE",
+"U.	c #719BC7",
+"V.	c #1082C5",
+"W.	c #B5C8E0",
+"X.	c #2873B5",
+"Y.	c #039BDE",
+"Z.	c #518BC1",
+"`.	c #AABFDB",
+" +	c #1283C6",
+".+	c #0F85C9",
+"++	c #A1BAD8",
+"@+	c #197FC2",
+"#+	c #3A80BB",
+"$+	c #1878BD",
+"%+	c #1F77BA",
+"&+	c #99B5D5",
+"*+	c #407CB7",
+"=+	c #147CC0",
+"-+	c #3E7EB9",
+";+	c #DDE5F0",
+">+	c #4184BE",
+",+	c #759EC9",
+"'+	c #FAFBFD",
+")+	c #EAF0F6",
+"!+	c #B0C4DD",
+"~+	c #F0F4F9",
+"{+	c #CFDBEB",
+"]+	c #A3BAD8",
+"^+	c #1082C6",
+"/+	c #B1C6DF",
+"(+	c #C4D3E6",
+"_+	c #187DC0",
+":+	c #357AB7",
+"<+	c #E9EEF6",
+"[+	c #4180BB",
+"}+	c #0B8ACE",
+"|+	c #799DC7",
+"1+	c #ABC1DC",
+"2+	c #296CAE",
+"3+	c #3573B2",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . + @ # $ % & * = - ; > , ' ) ! . . . . . . . . . ~ { ] ^ . ",
+". . / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 . . . . . . . 0 a b c d . ",
+". . e f g h h h i 6 j c k h h h l m n o . . . . . . p q r k s . ",
+". t u l h h h h h h l r h h h h h v w x . . . . . . y z h A B . ",
+". e C h h D E F r h h h i G H < h h b I . . . . . J K L h M N . ",
+". O g h P Q R S T h h h U V W X Y h Z ` 0 . . . .  ...i h +. at .. ",
+". #.k h $.%.. + &.A h l *.=.-.;.>.h h ,.'.. . . . ).b h l !.J . ",
+". ~.i h {.].. -.^.5 h /.(.. . _.:.A h 6 <.. . . [.}.|.h /.1.. . ",
+". ~.i h 2.! . . 3.M h 4.5.. . . 6.4.h P 7._.. . 8.9.i h 0.a.. . ",
+". ~.i h b.9 . . c.M h 4.5.. . . '.d.r h e.f.. . c.g.h v h.+ . . ",
+". ~.i h b.9 . . 3.M h 4.5.. . . i.j.k.h F l.. . m.Z h [ n.. . . ",
+". ~.i h b.9 . . 3.M h 4.5.. . . . o./.h p.q.r.].s.k h +.t.. . . ",
+". ~.i h b.9 . . c.M h 4.5.. . . . u.v.h r w.x.c.y.h A z.A.. . . ",
+". ~.i h b.9 . . c.M h 4.5.. . . . + B.k.h C.D.E.v h 4.F.o . . . ",
+". ~.i h b.9 . . 3.M h 4.5.. . . . . G.[ h g H.I.r h J.K.. . . . ",
+". ~.i h b.9 . . 3.M h 4.5.. . . . . L.M.h r N.: h k O.P.. . . . ",
+". ~.i h b.9 . . c.M h 4.5.. . . . . Q.R.v h 4.v h 4.S.T.. . . . ",
+". ~.i h b.9 . . 3.M h 4.5.. . . . . -.U.4.h i h h V.W.. . . . . ",
+". X.Y.|.Z.0 . . `. +i .+++. . . . . . f. at +h h h k #+A.. . . . . ",
+". ( $+%+&+. . . P.*+=+-+;+. . . . . . A.>+A h h /.,+'+. . . . . ",
+". )+`.!+~+. . . . {+]+p = . . . . . . T.S.4.h h ^+/+. . . . . . ",
+". . . . . . . . . . . . . . . . . . . . (+_+h r :+! . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . <+[+4.}+|+'+. . . . . . ",
+". . . . . . . . . . . . . . . . . . . . T.1+2+3+* . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
diff --git a/share/metview/icons_mv5/SHELL.svg b/share/metview/icons_mv5/SHELL.svg
new file mode 100644
index 0000000..1953fb2
--- /dev/null
+++ b/share/metview/icons_mv5/SHELL.svg
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="SHELL.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_RUN_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3910">
+      <stop
+         style="stop-color:#4b71ab;stop-opacity:1;"
+         offset="0"
+         id="stop3912" />
+      <stop
+         style="stop-color:#dddfe1;stop-opacity:1;"
+         offset="1"
+         id="stop3914" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3902">
+      <stop
+         style="stop-color:#7fa7e3;stop-opacity:1;"
+         offset="0"
+         id="stop3904" />
+      <stop
+         style="stop-color:#b39045;stop-opacity:1;"
+         offset="1"
+         id="stop3906" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3882">
+      <stop
+         style="stop-color:#5f8dd3;stop-opacity:1;"
+         offset="0"
+         id="stop3884" />
+      <stop
+         style="stop-color:#28446f;stop-opacity:1;"
+         offset="1"
+         id="stop3886" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3925">
+      <stop
+         style="stop-color:#0044aa;stop-opacity:1;"
+         offset="0"
+         id="stop3927" />
+      <stop
+         style="stop-color:#0055d3;stop-opacity:1;"
+         offset="1"
+         id="stop3929" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3917">
+      <stop
+         style="stop-color:#0055d4;stop-opacity:1;"
+         offset="0"
+         id="stop3919" />
+      <stop
+         style="stop-color:#1975ff;stop-opacity:1;"
+         offset="1"
+         id="stop3921" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3909">
+      <stop
+         style="stop-color:#2a7fff;stop-opacity:1;"
+         offset="0"
+         id="stop3911" />
+      <stop
+         style="stop-color:#63a1ff;stop-opacity:1;"
+         offset="1"
+         id="stop3913" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3678">
+      <stop
+         style="stop-color:#e3e9ef;stop-opacity:1;"
+         offset="0"
+         id="stop3680" />
+      <stop
+         style="stop-color:#d9e3f2;stop-opacity:1;"
+         offset="1"
+         id="stop3682" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3648">
+      <stop
+         style="stop-color:#acc6d2;stop-opacity:1;"
+         offset="0"
+         id="stop3650" />
+      <stop
+         style="stop-color:#498ca2;stop-opacity:1;"
+         offset="1"
+         id="stop3652" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3716">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3708">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3700">
+      <stop
+         style="stop-color:#727272;stop-opacity:1;"
+         offset="0"
+         id="stop3702" />
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="1"
+         id="stop3704" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective3219" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3749">
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:1;"
+         offset="0"
+         id="stop3751" />
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:0;"
+         offset="1"
+         id="stop3753" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3741">
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:1;"
+         offset="0"
+         id="stop3743" />
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:0;"
+         offset="1"
+         id="stop3745" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3733">
+      <stop
+         style="stop-color:#2f528a;stop-opacity:1"
+         offset="0"
+         id="stop3735" />
+      <stop
+         style="stop-color:#3f5e91;stop-opacity:0;"
+         offset="1"
+         id="stop3737" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3622-8">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop3624-3" />
+      <stop
+         style="stop-color:#e9f0fa;stop-opacity:1"
+         offset="1"
+         id="stop3626-2" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3622-95">
+      <stop
+         style="stop-color:#c6cee3;stop-opacity:1;"
+         offset="0"
+         id="stop3624-5" />
+      <stop
+         style="stop-color:#eaeef9;stop-opacity:0;"
+         offset="1"
+         id="stop3626-7" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3733"
+       id="linearGradient2886"
+       gradientUnits="userSpaceOnUse"
+       x1="78.128151"
+       y1="102.62679"
+       x2="110.16354"
+       y2="102.62679"
+       gradientTransform="translate(-26.687459,-0.0778789)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3749"
+       id="linearGradient2892"
+       gradientUnits="userSpaceOnUse"
+       x1="88.325951"
+       y1="84.507774"
+       x2="119.71897"
+       y2="63.179432" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3741"
+       id="linearGradient2894"
+       gradientUnits="userSpaceOnUse"
+       x1="98.523994"
+       y1="99.79335"
+       x2="127.85975"
+       y2="99.79335" />
+    <inkscape:perspective
+       id="perspective3676"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3700"
+       id="linearGradient3706"
+       x1="22.977591"
+       y1="16.533602"
+       x2="29.822767"
+       y2="16.274597"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7675676,0,0,1,5.1557318,30.408959)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3708"
+       id="linearGradient3714"
+       x1="12.987333"
+       y1="40.467396"
+       x2="29.933771"
+       y2="40.467396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9235808,0,0,1,1.6954997,-1.5910409)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3716"
+       id="linearGradient3722"
+       x1="12.98733"
+       y1="51.049667"
+       x2="23.125591"
+       y2="51.049667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91240876,0,0,1,1.8405944,-1.5910409)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3648"
+       id="radialGradient3656"
+       cx="15.794774"
+       cy="23.04089"
+       fx="15.794774"
+       fy="23.04089"
+       r="1.5355394"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3648-8">
+      <stop
+         style="stop-color:#acc6d2;stop-opacity:1;"
+         offset="0"
+         id="stop3650-8" />
+      <stop
+         style="stop-color:#498ca2;stop-opacity:1;"
+         offset="1"
+         id="stop3652-2" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3700-5">
+      <stop
+         style="stop-color:#727272;stop-opacity:1;"
+         offset="0"
+         id="stop3702-5" />
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="1"
+         id="stop3704-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3708-1">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710-1" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712-5" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3716-7"
+       id="linearGradient3722-2"
+       x1="12.98733"
+       y1="51.049667"
+       x2="23.125591"
+       y2="51.049667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91240876,0,0,1,1.8405944,-1.5910409)" />
+    <linearGradient
+       id="linearGradient3716-7">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718-6" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720-1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3902"
+       id="linearGradient3908"
+       x1="2.8461049"
+       y1="22.86961"
+       x2="30.826731"
+       y2="6.1256704"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3910"
+       id="linearGradient3916"
+       x1="4.8170581"
+       y1="22.850737"
+       x2="30.497448"
+       y2="3.5641997"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.125238"
+     inkscape:cx="12.523522"
+     inkscape:cy="16.858552"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer6"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1366"
+     inkscape:window-height="706"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     gridtolerance="6">
+    <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="layer6"
+     inkscape:label="desktop"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3916);fill-opacity:1;stroke:#1a1642;stroke-width:0.94478005px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 9.7624707,30.472927 2.1661163,-5.160023 c 0,0 -7.2038751,-5.464223 -9.9524295,-9.147314 -0.9682257,-1.297432 -0.7610682,-3.987292 -0.7610682,-3.987292 0,0 -0.061963,-1.588778 0.5314997,-2.5336127 C 2.2443849,8.852158 3.6110353,8.5041035 3.9396833,7.9630009 4.3216944,7.3340387 4.4199133,5.4981644 5.3867284,4.5749308 6.3682794,3.6376255 8.218453,3.4973264 8.5915963,3.0896214 10.025447,1.5229626 11.873053,1.0892201 11.873053,1.0892201 l 3.695657,0.3754661 3.564686,-0.3720875 c 0 [...]
+       id="path3108"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccscsssscccsssscsccc" />
+    <path
+       style="fill:none;stroke:#1a1642;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="M 3.9874691,8.3560383 14.153248,25.385513"
+       id="path3890"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:url(#linearGradient3908);stroke:#1a1642;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="M 8.5915967,3.2231042 14.97286,24.779941"
+       id="path3894"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#1a1642;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 15.995871,1.2137124 0.0516,23.5749736"
+       id="path3896"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#1a1642;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="M 23.179391,3.134053 16.739584,24.965985"
+       id="path3898"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#1a1642;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="M 28.003811,7.8328854 17.679755,25.332243"
+       id="path3900"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/SIMPLE_FORMULA.xpm b/share/metview/icons_mv5/SIMPLE_FORMULA.xpm
new file mode 100644
index 0000000..2f7060e
--- /dev/null
+++ b/share/metview/icons_mv5/SIMPLE_FORMULA.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static char * some_icon[] = {
+"32 32 8 1",
+"A  c #ffffffffffff",
+"B  c #333333336666",
+"C  c #66666666cccc",
+"D  c #ccccccccffff",
+"E  c #cccc99996666",
+"F  c #ffffcccc9999",
+"G  c #ffff66663333",
+"H  c #aaaaaaaaaaaa",
+"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE",
+"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAAAFEEAAAFEEAAAFEEAAAFEEAAAEE",
+"EEAAAFFEEGAFFEEGAFFEEGAFFEEGAAEE",
+"EEHHHFFEEGHFFEEGHFFEEGHFFEEGHHEE",
+"EEAAAFFEEGAFFEEGAFFEEGAFFEEGAAEE",
+"EEAAAAFEEAAAFEEAAAFEEAAAFEEAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE",
+"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAFEEAAAFEEAAAAAAAAAAAFEEAAAEE",
+"EEAFFEEGAFFEEGAAAAAAAAAFFEEGAAEE",
+"EEHFFEEGHFFEEGHHHHHHHHHFFEEGHHEE",
+"EEAFFEEGAFFEEGAAAAAAAAAFFEEGAAEE",
+"EEAAFEEAAAFEEAAAAAAAAAAAFEEAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE",
+"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE",
+"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"};
diff --git a/share/metview/icons_mv5/SQL.svg b/share/metview/icons_mv5/SQL.svg
new file mode 100644
index 0000000..0a9a368
--- /dev/null
+++ b/share/metview/icons_mv5/SQL.svg
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="64"
+   height="64"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="SQL.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective3544" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3134">
+      <stop
+         style="stop-color:#9fc1e3;stop-opacity:1"
+         offset="0"
+         id="stop3136" />
+      <stop
+         style="stop-color:#d6e1ea;stop-opacity:1"
+         offset="1"
+         id="stop3138" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3134"
+       id="radialGradient3140"
+       cx="32.294254"
+       cy="35.825287"
+       fx="32.294254"
+       fy="35.825287"
+       r="21.406897"
+       gradientTransform="matrix(1,0,0,0.9931271,0,0.2462231)"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.796875"
+     inkscape:cx="15.072545"
+     inkscape:cy="31.691551"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     width="64px"
+     height="64px"
+     inkscape:window-width="1080"
+     inkscape:window-height="957"
+     inkscape:window-x="2547"
+     inkscape:window-y="35"
+     showgrid="false"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="circle">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient3140);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.67700005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path2162"
+       sodipodi:cx="32.294254"
+       sodipodi:cy="35.825287"
+       sodipodi:rx="21.406897"
+       sodipodi:ry="21.259769"
+       d="M 53.701151 35.825287 A 21.406897 21.259769 0 1 1  10.887358,35.825287 A 21.406897 21.259769 0 1 1  53.701151 35.825287 z"
+       transform="matrix(1.4054983,0,0,1.415225,-13.242391,-18.70084)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="text"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:31.51833344px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="3.680934"
+       y="38.709949"
+       id="text3158"
+       sodipodi:linespacing="100%"
+       transform="scale(0.88698285,1.1274175)"><tspan
+         sodipodi:role="line"
+         id="tspan3160"
+         x="3.680934"
+         y="38.709949">SQL</tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/STATIONS.xpm b/share/metview/icons_mv5/STATIONS.xpm
new file mode 100644
index 0000000..df5cd50
--- /dev/null
+++ b/share/metview/icons_mv5/STATIONS.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char * STATIONS_icon[] = {
+"32 32 7 1",
+" 	c #FFFFFFFFFFFF",
+".	c #0000C7C70000",
+"X	c #000000000000",
+"o	c #BFBF46460000",
+"O	c #DADA85850808",
+"+	c #00000000FFFF",
+"@	c #0000FFFFFFFF",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"               ..  ..           ",
+"               .  .  .          ",
+"           ..X ... ...          ",
+"XX XX     .. ..........         ",
+"  X        ........   .         ",
+"          ..  . .....           ",
+"          . ... .. ...          ",
+"  XX XX    ..  . oo  ..         ",
+"    X      .   . oo             ",
+"           .  .   oo            ",
+"              .   oo            ",
+"        O          oo           ",
+"       OOO         oo           ",
+"      OOOOO         oo          ",
+"     OOOOOOO         oo         ",
+"    OOOOOOOOO        oo         ",
+"   OOOOOOOOOOO        ooo       ",
+"  OO         OO       ooo       ",
+"   X   XXX   X        oooo      ",
+"   X   XXX   X       XoooooX    ",
+" XXXXXXXXXXXXXXXXXXXX  XXXXXX   ",
+" X  XX X  X  X  X  XXXXX X XX   ",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ",
+" X X X X X X XXX XXXXXXXXXXXX   ",
+"+@@@+@@@+@@@+@@@+@@@+ at XXXXX     ",
+"@@+@@@+@@@+@@@+@@@+@@@          ",
+"@@@@@@@@@@@@@@@@@@@@@           "};
diff --git a/share/metview/icons_mv5/SUBPAGEDETAILS.xpm b/share/metview/icons_mv5/SUBPAGEDETAILS.xpm
new file mode 100644
index 0000000..9ae6c44
--- /dev/null
+++ b/share/metview/icons_mv5/SUBPAGEDETAILS.xpm
@@ -0,0 +1,39 @@
+/* XPM */
+static char * SUBPAGEDETAILS_xpm[] = {
+"32 32 4 1",
+" 	c #FFFFFFFFFFFF",
+".	c #373737373737",
+"X	c #808080808080",
+"o	c #8F8F8F8F8F8F",
+"    ........................    ",
+"    .                      .    ",
+"    .                      .    ",
+"    . XXXXXXXXXXXXXXXXXXXX .    ",
+"    . X                  X .    ",
+"    . X ooooooooooooooo  X .    ",
+"    . X ooooooooooooooo  X .    ",
+"    . XXXXXXXXXXXXXXXXXXXX .    ",
+"    .                      .    ",
+"    . XXXXXXXXXX XXXXXXXXX .    ",
+"    . X        X X       X .    ",
+"    . X        X X       X .    ",
+"    . X  oooo  X X oooo  X .    ",
+"    . X  oooo  X X oooo  X .    ",
+"    . X  oooo  X X oooo  X .    ",
+"    . X  oooo  X X oooo  X .    ",
+"    . X        X X oooo  X .    ",
+"    . XXXXXXXXXX X oooo  X .    ",
+"    .            X oooo  X .    ",
+"    . XXXXXXXXXX X oooo  X .    ",
+"    . X        X X oooo  X .    ",
+"    . X oooooo X X oooo  X .    ",
+"    . X oooooo X X oooo  X .    ",
+"    . X oooooo X X oooo  X .    ",
+"    . X oooooo X X oooo  X .    ",
+"    . X oooooo X X oooo  X .    ",
+"    . X oooooo X X       X .    ",
+"    . X oooooo X X       X .    ",
+"    . X        X X       X .    ",
+"    . XXXXXXXXXX XXXXXXXXX .    ",
+"    .                      .    ",
+"    ........................    "};
diff --git a/share/metview/icons_mv5/SUPERPAGE.xpm b/share/metview/icons_mv5/SUPERPAGE.xpm
new file mode 100644
index 0000000..a062870
--- /dev/null
+++ b/share/metview/icons_mv5/SUPERPAGE.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char * SUPERPAGE_icon[] = {
+"32 32 7 1",
+" 	c #666666666666",
+".	c #FFFFFFFFFFFF",
+"X	c #DADAF6F6FFFF",
+"o	c #7C7CBDBD7676",
+"O	c #FFFF00000000",
+"+	c #00000000FFFF",
+"@	c #000000000000",
+"                                ",
+" .............................. ",
+" .                            . ",
+" . XXXXXXXoooXXXXXXXXXXXXoXoo . ",
+" . XXXXXXXXoooXXXXXXXXXXooooo . ",
+" . XXXXXXXXXoooXXXXXXXXXooooo . ",
+" . XXXXoooXXXoooXXXXXXXXooooo . ",
+" . XXXooooXXXoooXXXXXXXoooooo . ",
+" . XXXooooXXooooooXXoXooooooo . ",
+" . XXXoXXXXXoooooXXoooooooooo . ",
+" . XXXXXXXXooXXXXoooooooooooo . ",
+" . XXXXXXXXXXXXXooooooooooooo . ",
+" . XXXXXXXXXXXooooooooooooooo . ",
+" . XXXXXXXXXooooooooooooooooo . ",
+" . XXXXXXXXXXXooooooooooooooo . ",
+" .                            . ",
+" .............................. ",
+" .              .             . ",
+" . ............ . ........... . ",
+" . .O....++.... . .@@@..@@@.. . ",
+" . .O....++.... . ........... . ",
+" . .O....++.... . .@@@. at .@@@. . ",
+" . .O.++.++.... . ........... . ",
+" . .O.++.++.... . . at .@.@@@@.. . ",
+" . .O.++.++.... . ........... . ",
+" . .O.++.++.... . .@@@@. at .@.. . ",
+" . .O.++.++.... . ........... . ",
+" . .OOOOOOOOO.. . .@@. at .@@@@. . ",
+" . ............ . ........... . ",
+" .              .             . ",
+" .............................. ",
+"                                "};
diff --git a/share/metview/icons_mv5/SVG.svg b/share/metview/icons_mv5/SVG.svg
new file mode 100644
index 0000000..bb9458b
--- /dev/null
+++ b/share/metview/icons_mv5/SVG.svg
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4537"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="SVG.svg">
+  <defs
+     id="defs4539" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.7781746"
+     inkscape:cx="-5.821768"
+     inkscape:cy="33.638942"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1032"
+     inkscape:window-x="-4"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1"
+     objecttolerance="14"
+     gridtolerance="10">
+    <inkscape:grid
+       type="xygrid"
+       id="grid4547"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g3668"
+       transform="translate(1.498962,0.43807)">
+      <rect
+         y="29.611233"
+         x="9.3853531"
+         height="24.301182"
+         width="43.858448"
+         id="rect5443"
+         style="fill:#ffffff;fill-opacity:1;stroke:#2b2ba8;stroke-width:0.66900003;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5576"
+         d="m 12.00147,34.970442 c -0.901277,-0.05985 1.752843,-0.339164 2.234407,0.130003 0.957567,0.712661 1.18984,2.123 2.13165,2.923832 0.260503,1.453921 1.968929,1.967219 2.828948,2.97109 0.432381,1.625124 1.23279,3.184249 1.033099,4.902818 -0.677044,1.141376 1.766426,3.365573 1.34802,1.181024 0.103719,-1.819029 2.706961,-1.629955 2.999127,-3.430637 0.808487,-1.451529 -1.269877,-2.797441 -2.442059,-3.271322 -1.385722,0.174453 -4.225816,-0.619643 -3.190689,-2.449816 1.553179,0.195877 [...]
+         style="fill:none;stroke:#000000;stroke-width:0.69800001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccccccccccc"
+         id="path5580"
+         d="m 48.022923,37.312399 c -1.447924,0.979175 -1.722092,2.195614 -2.793349,3.585786 -1.035917,1.182681 -2.990513,-0.663653 -3.892025,-1.305233 -0.214816,0.703369 0.199566,1.869871 -1.107975,1.305233 0.02768,-1.360363 -1.740647,-2.467806 -2.840924,-1.177239 -0.806036,0.592788 0.915949,1.316352 -0.197641,2.001955 -1.207275,1.173552 -1.450466,2.959611 -2.60083,4.067118 C 32.692987,45.683081 33.110177,42.954644 32.001764,41.875226 30.899018,41.25442 29.251246,40.554302 30,39 c 0.137 [...]
+         style="fill:none;stroke:#000000;stroke-width:0.698;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5582"
+         d="m 46.898621,43.332135 c -1.266227,-0.338229 -3.499668,-0.580426 -2.977416,1.445146 0.68862,1.043044 2.567723,1.153239 3.705953,1.120904 1.326702,-1.285802 -0.491603,-2.221759 -1.200981,-3.037823 -0.762861,-0.784879 -0.941411,-0.249985 0.01964,0.151196 l 0.268353,0.179799 0.184449,0.140778 0,0 z"
+         style="fill:none;stroke:#000000;stroke-width:0.59799999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5584"
+         d="m 10.229574,51.12737 c 1.947437,-0.856815 4.140833,-0.539369 6.18976,-0.871832 1.562548,0.30785 3.119744,-0.141064 4.708935,-0.0011 1.595266,-0.05391 3.256219,0.214598 4.756516,-0.438115 1.685034,-0.577797 3.519762,-0.20353 5.274435,-0.310161 1.508353,-0.109211 2.940498,0.123817 4.411483,0.250368 1.95049,0.0915 3.843565,-0.196223 5.788598,-0.132875 2.156658,0.02072 4.289417,-0.233492 6.444845,-0.241463 1.738245,-0.417075 2.519849,1.560464 4.308833,1.121697 l 0.09638,0 0.02022,0"
+         style="fill:none;stroke:#000000;stroke-width:0.70700002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5586"
+         d="m 22.924607,33.663415 c 0.820143,0.973176 0.333546,3.407153 2.304967,2.23477 0.174915,-0.996066 1.970806,-2.004208 1.095151,-2.916865 -1.255015,0.224146 -2.695228,-0.32281 -3.803043,0.438531 -0.221264,-0.849196 -0.305912,-0.55997 -0.303598,-0.01255 -1.07997,0.153218 0.493715,0.09155 0.706523,0.256114 z"
+         style="fill:none;stroke:#000000;stroke-width:0.69800001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5598"
+         d="m 34.061454,45.018667 c -0.26543,-0.247948 -0.409767,-0.556921 -0.720095,-1.541467 -0.304995,-0.967624 -0.620483,-1.643108 -0.883364,-1.89135 -0.09888,-0.09338 -0.438482,-0.317866 -0.754658,-0.498858 -1.00628,-0.576037 -1.339483,-0.910464 -1.33292,-1.337811 0.0076,-0.497621 0.202136,-0.764731 1.008493,-1.385026 0.443577,-0.341224 0.610022,-0.5847 0.610022,-0.892339 0,-0.272267 -0.303831,-0.65784 -0.603872,-0.766336 l -0.214615,-0.07761 0.152114,-0.224152 c 0.16888,-0.248859 0 [...]
+         style="fill:#ffffff;fill-opacity:1;stroke:#2b2ba8;stroke-width:0.07056933;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5602"
+         d="m 34.154448,45.002201 c -0.231841,-0.182366 -0.422031,-0.572625 -0.719561,-1.476493 -0.327589,-0.995188 -0.675838,-1.725378 -0.939152,-1.969171 -0.119643,-0.110772 -0.525586,-0.393314 -0.902097,-0.627871 -0.826663,-0.514991 -1.147484,-0.841052 -1.147484,-1.166227 0,-0.379447 0.221344,-0.703128 0.841524,-1.230595 0.611703,-0.520258 0.765537,-0.728438 0.765537,-1.035987 0,-0.241726 -0.232168,-0.583559 -0.526228,-0.774796 l -0.232826,-0.151414 0.129503,-0.219493 c 0.102855,-0.17 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5604"
+         d="m 24.230234,35.561984 c -0.04165,-0.0667 -0.167082,-0.434852 -0.278731,-0.818123 -0.111649,-0.383271 -0.258678,-0.805998 -0.326732,-0.939393 l -0.123733,-0.242538 1.254814,0 c 0.690148,0 1.254814,0.02413 1.254814,0.05363 0,0.05571 -0.28094,0.467668 -0.779905,1.143616 -0.159845,0.216541 -0.327296,0.482239 -0.372115,0.59044 -0.05128,0.123794 -0.15429,0.222108 -0.277857,0.265184 -0.256983,0.08958 -0.262109,0.08881 -0.350555,-0.05281 l 0,0 z"
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5606"
+         d="M 18.033801,39.357638 C 17.377213,38.860256 16.889705,38.232859 16.883972,37.877866 16.883195,37.829786 16.744979,37.63992 16.576825,37.455933 16.408671,37.271945 16.03985,36.721754 15.757224,36.233286 15.189309,35.25175 14.729645,34.722418 14.254347,34.502632 13.98526,34.3782 13.842291,34.365018 12.714985,34.360699 c -1.329615,-0.0051 -1.357573,-0.012 -1.35973,-0.335913 -0.0016,-0.247651 0.173415,-0.503735 0.426444,-0.623805 0.220818,-0.104785 0.425067,-0.111047 2.525917,-0. [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5608"
+         d="m 20.840889,46.911832 -0.183477,-0.310116 0.08029,-0.654121 c 0.08686,-0.707611 0.02854,-1.497669 -0.166913,-2.261181 -0.238292,-0.93085 -0.88144,-2.908789 -1.000177,-3.075945 l -0.130158,-0.183234 0.151335,0.04674 c 0.08323,0.02571 0.223652,0.08315 0.312041,0.127651 0.271499,0.136689 1.106714,0.29532 1.645726,0.312569 0.415477,0.0133 0.580772,0.05115 0.875891,0.200581 0.866647,0.438824 1.669753,1.20445 1.758253,1.676199 0.06376,0.339867 -0.198868,1.08946 -0.493749,1.40926 -0 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5610"
+         d="m 46.51175,45.324255 c -0.740476,-0.05646 -1.466124,-0.2732 -1.82246,-0.544351 -0.228793,-0.174098 -0.264099,-0.235435 -0.280728,-0.487704 -0.01577,-0.239286 0.0086,-0.314529 0.142863,-0.440643 0.20513,-0.19271 0.883619,-0.249841 1.584352,-0.133407 0.46625,0.07747 0.48743,0.0893 0.906151,0.505913 0.235809,0.234623 0.448807,0.506698 0.47333,0.604612 0.06356,0.253776 -0.0774,0.563734 -0.250976,0.551873 -0.07526,-0.0051 -0.413899,-0.03048 -0.752532,-0.05629 l 0,0 z"
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path5614"
+         d="m 10.229574,52.334879 0,-0.961759 0.226787,-0.06296 c 0.710699,-0.197299 3.701138,-0.410335 6.002292,-0.427597 3.84908,-0.02887 7.284703,-0.0845 7.574877,-0.122645 0.537541,-0.07066 0.962438,-0.166836 1.45602,-0.329568 0.981671,-0.323652 1.283677,-0.347071 4.537701,-0.351877 2.657757,-0.0039 3.211433,0.01288 4.483634,0.136054 1.177395,0.114 1.679803,0.133212 2.660966,0.101758 0.66524,-0.02133 2.420571,-0.06817 3.900733,-0.104087 1.480162,-0.03592 3.575673,-0.108425 4.65669,-0 [...]
+         style="fill:#ffd096;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <path
+       style="fill:none;fill-opacity:1;stroke:#2b2b2c;stroke-width:0.57099999999999995;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 60,51.300138 -12.314168,-0.25713 -0.128565,10.776012 -42.5384548,0 0,-59.2887954 54.9811858,0 0,48.6413484 -12.314166,10.647447"
+       id="rect5379-7"
+       sodipodi:nodetypes="cccccccs" />
+    <text
+       xml:space="preserve"
+       style="font-size:22.55941390999999996px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#e87600;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="10.299904"
+       y="25.336725"
+       id="text5099"
+       transform="scale(0.97088284,1.0299904)"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2837"
+         x="10.299904"
+         y="25.336725">SVG</tspan></text>
+    <rect
+       style="fill:#fb8100;fill-opacity:1;stroke:#000000;stroke-width:0.43404418000000000;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3650"
+       width="55.136364"
+       height="2.4505296"
+       x="4.931819"
+       y="2.7349412" />
+    <path
+       style="fill:#d6d6ce;fill-opacity:1;stroke:none"
+       d="m 47.826131,51.255752 10.631091,0.130176 -10.631091,10.255519 0,-10.385695 z"
+       id="rect3652"
+       sodipodi:nodetypes="cccc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/SVGOUTPUT.xpm b/share/metview/icons_mv5/SVGOUTPUT.xpm
new file mode 100644
index 0000000..98cfaca
--- /dev/null
+++ b/share/metview/icons_mv5/SVGOUTPUT.xpm
@@ -0,0 +1,240 @@
+/* XPM */
+static char * PSDRIVER_xpm[] = {
+"32 32 205 2",
+"  	c #FFFFFFFFFFFF",
+". 	c #10107070A8A8",
+"X 	c #E5E5E5E5E5E5",
+"o 	c #999999999999",
+"O 	c #E8E8E8E8E8E8",
+"+ 	c #D0D0D0D0E0E0",
+"@ 	c #C8C8C8C8D8D8",
+"# 	c #C0C0C0C0D0D0",
+"$ 	c #B8B8B8B8C8C8",
+"% 	c #F8F8F8F8F8F8",
+"& 	c #C0C0C8C8D8D8",
+"* 	c #C0C0C0C0D8D8",
+"= 	c #E0E0E0E0E8E8",
+"- 	c #F0F0F0F0F0F0",
+"; 	c #E0E0E0E0F0F0",
+": 	c #D8D8E0E0F0F0",
+"> 	c #D8D8D8D8E8E8",
+", 	c #C8C8C8C8D0D0",
+"< 	c #E0E0E0E0F8F8",
+"1 	c #E0E0E8E8F8F8",
+"2 	c #D0D0D0D0D8D8",
+"3 	c #E8E8E8E8F0F0",
+"4 	c #D8D8D8D8E0E0",
+"5 	c #D0D0D8D8E8E8",
+"6 	c #D0D0D8D8D8D8",
+"7 	c #E0E0E8E8F0F0",
+"8 	c #D0D0D0D0E8E8",
+"9 	c #C0C0C0C0C8C8",
+"0 	c #F0F0F0F0F8F8",
+"q 	c #909090909898",
+"w 	c #A0A0A8A8A8A8",
+"e 	c #888890909090",
+"r 	c #C8C8D8D8E8E8",
+"t 	c #C0C0D0D0E8E8",
+"y 	c #D8D8D8D8F0F0",
+"u 	c #F0F0F8F8F8F8",
+"i 	c #D0D0E0E0F0F0",
+"p 	c #A0A0C8C8E0E0",
+"a 	c #9090C0C0D8D8",
+"s 	c #8888B8B8D8D8",
+"d 	c #7878B0B0D0D0",
+"f 	c #7070A0A0D0D0",
+"g 	c #A0A0C0C0E0E0",
+"h 	c #D0D0D8D8F0F0",
+"j 	c #E8E8F0F0F8F8",
+"k 	c #B0B0D0D0E0E0",
+"l 	c #7070A8A8D0D0",
+"z 	c #7878B0B0E0E0",
+"x 	c #8080C0C0E8E8",
+"c 	c #7878B8B8E0E0",
+"v 	c #6060A0A0D0D0",
+"b 	c #C8C8D0D0E8E8",
+"n 	c #C0C0C8C8E8E8",
+"m 	c #D8D8E8E8F0F0",
+"M 	c #A8A8C8C8E0E0",
+"N 	c #8080B0B0D0D0",
+"B 	c #6868A8A8D0D0",
+"V 	c #7878B8B8E8E8",
+"C 	c #8888C8C8F0F0",
+"Z 	c #8080B8B8E8E8",
+"A 	c #A8A8C0C0E0E0",
+"S 	c #B0B0C0C0E0E0",
+"D 	c #8080A8A8D0D0",
+"F 	c #9090A0A0C0C0",
+"G 	c #9898C0C0E0E0",
+"H 	c #7070A8A8D8D8",
+"J 	c #6868A8A8D8D8",
+"K 	c #8080B0B0D8D8",
+"L 	c #5858A0A0D0D0",
+"P 	c #8080C0C0F0F0",
+"I 	c #9090C8C8F8F8",
+"U 	c #7878A8A8D0D0",
+"Y 	c #6060A0A0C8C8",
+"T 	c #60608888B0B0",
+"R 	c #E8E8E8E8F8F8",
+"E 	c #9090B8B8D8D8",
+"W 	c #6060A8A8E0E0",
+"Q 	c #7070B0B0F0F0",
+"! 	c #6868B0B0E0E0",
+"~ 	c #5858A0A0D8D8",
+"^ 	c #6868B0B0E8E8",
+"/ 	c #8080C0C0F8F8",
+"( 	c #8888C8C8F8F8",
+") 	c #7070B0B0E0E0",
+"_ 	c #7878B0B0D8D8",
+"` 	c #8888C0C0E8E8",
+"' 	c #8080B8B8E0E0",
+"] 	c #50509898C0C0",
+"[ 	c #58589898D0D0",
+"{ 	c #5050A0A0E0E0",
+"} 	c #6060B0B0F0F0",
+"| 	c #6868B0B0F8F8",
+" .	c #6868B0B0F0F0",
+"..	c #7070B8B8F0F0",
+"X.	c #7070B8B8F8F8",
+"o.	c #7878B8B8F8F8",
+"O.	c #7878C0C0F8F8",
+"+.	c #8888C0C0F0F0",
+"@.	c #9898C8C8F0F0",
+"#.	c #9898C8C8F8F8",
+"$.	c #20208080B8B8",
+"%.	c #D0D0D8D8E0E0",
+"&.	c #B8B8D0D0E8E8",
+"*.	c #40409090C8C8",
+"=.	c #5050A0A0E8E8",
+"-.	c #6060B0B0F8F8",
+";.	c #6060A8A8F0F0",
+":.	c #5858A8A8E8E8",
+">.	c #5858A0A0E0E0",
+",.	c #5858A8A8E0E0",
+"<.	c #6060A8A8E8E8",
+"1.	c #7878B8B8F0F0",
+"2.	c #8888C0C0F8F8",
+"3.	c #9898D0D0F8F8",
+"4.	c #6060A8A8D8D8",
+"5.	c #38388888C0C0",
+"6.	c #10107070B0B0",
+"7.	c #50509898D0D0",
+"8.	c #38389090D0D0",
+"9.	c #4848A0A0E8E8",
+"0.	c #5858A8A8F8F8",
+"q.	c #50509898D8D8",
+"w.	c #6060A0A0D8D8",
+"e.	c #50509090C0C0",
+"r.	c #48488080A8A8",
+"t.	c #B0B0C8C8E0E0",
+"y.	c #40409090E0E0",
+"u.	c #40409898E8E8",
+"i.	c #48489898E8E8",
+"p.	c #5050A8A8F8F8",
+"a.	c #5858A8A8F0F0",
+"s.	c #B0B0C8C8E8E8",
+"d.	c #9898B8B8E0E0",
+"f.	c #58589090B8B8",
+"g.	c #50508080A8A8",
+"h.	c #48489898D8D8",
+"j.	c #40409898F0F0",
+"k.	c #4848A0A0F8F8",
+"l.	c #5050A0A0F8F8",
+"z.	c #7878A8A8D8D8",
+"x.	c #B8B8C8C8E8E8",
+"c.	c #58589898C8C8",
+"v.	c #48488888B8B8",
+"b.	c #30308080B8B8",
+"n.	c #40409090D8D8",
+"m.	c #38389898E8E8",
+"M.	c #6060A8A8D0D0",
+"N.	c #28288080B8B8",
+"B.	c #8888B0B0D8D8",
+"V.	c #38388888D0D0",
+"C.	c #30308888D8D8",
+"Z.	c #6868A8A8E0E0",
+"A.	c #7070B0B0E8E8",
+"S.	c #6868A0A0D0D0",
+"D.	c #50509090C8C8",
+"F.	c #38389090E0E0",
+"G.	c #5050A0A0F0F0",
+"H.	c #48489898C8C8",
+"J.	c #9898B8B8D8D8",
+"K.	c #6868A8A8E8E8",
+"L.	c #6060A8A8F8F8",
+"P.	c #48489090C8C8",
+"I.	c #68689898C8C8",
+"U.	c #58589090C0C0",
+"Y.	c #40408888C0C0",
+"T.	c #C0C0D8D8E8E8",
+"R.	c #B8B8C8C8E0E0",
+"E.	c #38388888D8D8",
+"W.	c #30309090E8E8",
+"Q.	c #38389898F8F8",
+"!.	c #40409898F8F8",
+"~.	c #40409898E0E0",
+"^.	c #48488888C8C8",
+"/.	c #78789898C0C0",
+"(.	c #80809090B8B8",
+").	c #58588888B0B0",
+"_.	c #C8C8D0D0E0E0",
+"`.	c #28288080D0D0",
+"'.	c #38389090F8F8",
+"].	c #38389090F0F0",
+"[.	c #30309090E0E0",
+"{.	c #38389090D8D8",
+"}.	c #30309090D8D8",
+"|.	c #4848A0A0F0F0",
+" X	c #40408080B8B8",
+".X	c #C8C8D8D8E0E0",
+"XX	c #A8A8B0B0C8C8",
+"oX	c #68689090B8B8",
+"OX	c #30308080C0C0",
+"+X	c #20208080D0D0",
+"@X	c #28288888E8E8",
+"#X	c #30309090F0F0",
+"$X	c #20208080D8D8",
+"%X	c #10107878C0C0",
+"&X	c #10107070B8B8",
+"*X	c #20208080C8C8",
+"=X	c #28288888D0D0",
+"-X	c #28287878B8B8",
+";X	c #18187878C8C8",
+":X	c #18188080D0D0",
+">X	c #28288888D8D8",
+",X	c #28288888C8C8",
+"<X	c #08087070B0B0",
+"1X	c #00006868B0B0",
+"2X	c #08087070B8B8",
+"                      . . . . . . X . . . . . .                 ",
+"                      . . . . . . X . . . . . .                 ",
+"                  o o . . O X . . X . .                         ",
+"                o + + . . X X . . X . .                         ",
+"              o @ # + . . . . . . X . . . . . . o o o o o o o   ",
+"            o $ + O % . . . . . . % . . . . . . @ & & * & o o o ",
+"          o $ = - % % . . % % % % % % % % % . . ; ; ; ; : > > o ",
+"        o , O % % % % . . % % % %       % % . . < < < 1 1 ; > o ",
+"      o 2 3 % % % % % . . % % % %   . . . . . . ; ; < < < : > o ",
+"    o 4 - % % % % % % . . % % % %   . . . . . . ; ; ; ; ; 5 > o ",
+"  o 4 - % % % % % % % % % % % % % % % % % % 6 7 ; : : ; ; 8 > o ",
+"o $ O % % % % % % % % % % % % % % % % % % % 9 1 : : : : : > o o ",
+"o o 4 0 % % % % % % % % % % % % % % % q w e : r t r y : y > o   ",
+"  o @ 3 % % % % % % % % u u u u u u 0 i p a s d f g h : y > o   ",
+"  o @ + 0 % u u u u u u u u u j : 1 j k l z x c v g b b n > o   ",
+"    o @ = 0 u u u u u u 0 0 m M N g i k B V C Z l A S D D F     ",
+"    o @ @ 3 0 0 u 0 0 0 j i G H J B s K L P I c v N U B Y T     ",
+"      o @ > 0 0 0 j R R : E v W Q ! ~ ~ ^ / ( P ) J _ ` ' ]     ",
+"      o @ @ 7 j R 1 1 1 h E [ { } | }  ...X.o.O.P +. at .#.+.L $.  ",
+"        o @ %.R 1 < < : &.g l *.=.-.| ;.:.>.,.<.1.2.3.` 4.5.6.  ",
+"        o @ @ ; 1 ; ; t l [ 7.8.9.0.=.q.J K K w.W o.( ) e.r.    ",
+"          o @ + ; ; : t.7.y.u.i.p.a.q.K s.r b d.~  ./ ) f.g.    ",
+"          o @ @ : < : g h.j.k.l.0.W z.x.y : y A ~ ;.o.V c.v.b.. ",
+"            o @ 8 ; y d.n.m.j.k.| J E b y y h E ~ } o.+.x ' M.N.",
+"            o @ & : y B.V.C.C.u.} Z.K x.h b g l W -. .A.1.P J % ",
+"              o @ 5 y E c.S.D.F.G.^ v U B.U B )  .;.h.*.h.W H.p ",
+"              o @ @ y t A J.[ C.j.0.K.w.v 4.!  .L.9.P.I.U.Y.b.T.",
+"                o @ > y R.S.E.W.Q.!.l.:.<.:.a.0.p.~.^./.(.).    ",
+"                o @ _.: S e.`.W.'.Q.].[.{.}.F.k.l.|.V. X% .X    ",
+"                  o @ & XXoXOX+X at X#X$X%XX &X*Xm.j.u.=X-Xk       ",
+"                  o @ @ % .Xk % ;X:X%XX X X %X>X>X,X% % j       ",
+"                    o o 0 % u j % <XX X X X 1X2X% p m           "};
diff --git a/share/metview/icons_mv5/SYSTEM.svg b/share/metview/icons_mv5/SYSTEM.svg
new file mode 100644
index 0000000..d02f37e
--- /dev/null
+++ b/share/metview/icons_mv5/SYSTEM.svg
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg2985"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="SYSTEM.svg">
+  <title
+     id="title2993">Metview icon</title>
+  <defs
+     id="defs2987">
+    <linearGradient
+       id="linearGradient3753">
+      <stop
+         style="stop-color:#c53c3c;stop-opacity:1;"
+         offset="0"
+         id="stop3755" />
+      <stop
+         style="stop-color:#f8b2b2;stop-opacity:1;"
+         offset="1"
+         id="stop3757" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3753"
+       id="linearGradient3759"
+       x1="20.381924"
+       y1="25.776665"
+       x2="36.550461"
+       y2="-0.56834435"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0942429,0,0,1.0732344,-1.9950829,-1.8776448)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="10.27"
+     inkscape:cx="23.240512"
+     inkscape:cy="29.889877"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1032"
+     inkscape:window-x="-4"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1"
+     inkscape:snap-from-guide="false"
+     objecttolerance="2"
+     gridtolerance="2"
+     guidetolerance="2">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2995"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:url(#linearGradient3759);fill-opacity:1.0;stroke:#000000;stroke-width:0.91029769000000005;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="m 15,11 1.581791,-6.9553125 12.469348,3.7367772 2.255924,-3.4100421 9.343738,2.403001 -0.330091,4.3734044 c 7.786256,2.404387 11.284931,2.859172 19.842246,4.961637 L 51.55289,61.721726 7.8648109,40.823438 4.7046001,8.1600399 24.33753,14.182435 l -0.156955,3.272483 11.16368,3.580674 0.959165,-3.353576 13.555361,3.888862 1.763869,39.771774"
+       id="rect2984"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccccc" />
+    <path
+       style="fill:#0056c8;fill-opacity:1;stroke:#0056c8;stroke-width:0.89524412;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="M 31.5222,5.3369036 39.610516,7.4558961 39.486855,11 30,8 31.5222,5.3369036 z"
+       id="rect3761"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/TABLE.svg b/share/metview/icons_mv5/TABLE.svg
new file mode 100644
index 0000000..f21bb78
--- /dev/null
+++ b/share/metview/icons_mv5/TABLE.svg
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64"
+   height="64"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="TABLE.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   style="display:inline">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective3158" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.796875"
+     inkscape:cx="13.462069"
+     inkscape:cy="31.565804"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     width="64px"
+     height="64px"
+     inkscape:window-width="772"
+     inkscape:window-height="646"
+     inkscape:window-x="755"
+     inkscape:window-y="187"
+     showgrid="false"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="circle">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 14.5,4.5 c 0,55 0,55 0,55 l 0,0"
+       id="path2173" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 29.5,4.5 c 0,55 0,55 0,55 l 0,0"
+       id="path2175" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 44.5,4.5 c 0,55 0,55 0,55"
+       id="path2177" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 59.5,4.5 c 0,55 0,55 0,55"
+       id="path2179" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="18.140732"
+       y="11.057471"
+       id="text2183"><tspan
+         sodipodi:role="line"
+         id="tspan2185"
+         x="18.140732"
+         y="11.057471">A</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="32.411995"
+       y="11.057471"
+       id="text2187"><tspan
+         sodipodi:role="line"
+         id="tspan2189"
+         x="32.411995"
+         y="11.057471">B</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="47.418892"
+       y="10.887549"
+       id="text2191"><tspan
+         sodipodi:role="line"
+         id="tspan2193"
+         x="47.418892"
+         y="10.887549">C</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="3.7669091"
+       y="27.748047"
+       id="text2195"><tspan
+         sodipodi:role="line"
+         id="tspan2197"
+         x="3.7669091"
+         y="27.748047">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="3.6516747"
+       y="41.650116"
+       id="text2199"><tspan
+         sodipodi:role="line"
+         id="tspan2201"
+         x="3.6516747"
+         y="41.650116">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="3.4114404"
+       y="55.627129"
+       id="text2203"><tspan
+         sodipodi:role="line"
+         id="tspan2205"
+         x="3.4114404"
+         y="55.627129">3</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 5,14 c 60,0 60,0 60,0"
+       id="path2207" />
+    <rect
+       style="opacity:0.38172045;fill:#c4d1e6;fill-opacity:1;stroke:#afc6e9;stroke-width:1.74761665;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2188"
+       width="62.58112"
+       height="10.792613"
+       x="1.0036925"
+       y="1.8864518"
+       ry="5.3963065"
+       rx="0" />
+    <rect
+       style="opacity:0.38172045;fill:#c4d1e6;fill-opacity:1;stroke:#afc6e9;stroke-width:1.707569;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect5217"
+       width="12.156798"
+       height="46.143005"
+       x="0.98366958"
+       y="14.372176"
+       ry="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 3.1632183,30.455172 c 58.7034487,0 58.7034487,0 58.7034487,0"
+       id="path5221" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 3.1632182,45.756322 c 58.7034488,0 58.7034488,0 58.7034488,0"
+       id="path5223"
+       inkscape:transform-center-x="19.714943"
+       inkscape:transform-center-y="-7.6505747" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/TABLEREADER.svg b/share/metview/icons_mv5/TABLEREADER.svg
new file mode 100644
index 0000000..32b935c
--- /dev/null
+++ b/share/metview/icons_mv5/TABLEREADER.svg
@@ -0,0 +1,309 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64"
+   height="64"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="TABLEREADER.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/TABLEREADER.png"
+   inkscape:export-xdpi="49.238422"
+   inkscape:export-ydpi="49.238422"
+   style="display:inline">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective3004" />
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3176"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.8,0,0,0.8,10,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.796875"
+     inkscape:cx="13.462069"
+     inkscape:cy="29.325517"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     width="64px"
+     height="64px"
+     inkscape:window-width="1249"
+     inkscape:window-height="793"
+     inkscape:window-x="2259"
+     inkscape:window-y="335"
+     showgrid="false"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="circle">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.6606549px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 28.9542,27.051453 c 0,34.451056 0,34.451056 0,34.451056 l 0,0"
+       id="path2173"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.6606549px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 39.406233,27.051453 c 0,34.451056 0,34.451056 0,34.451056 l 0,0"
+       id="path2175"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.6606549px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 49.858265,27.051453 c 0,34.451056 0,34.451056 0,34.451056"
+       id="path2177"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.6606549px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 60.310298,27.051453 c 0,34.451056 0,34.451056 0,34.451056"
+       id="path2179"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <text
+       xml:space="preserve"
+       style="font-size:7.92785883px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="29.857441"
+       y="32.863781"
+       id="text2183"
+       transform="scale(1.0547143,0.9481241)"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646"><tspan
+         sodipodi:role="line"
+         id="tspan2185"
+         x="29.857441"
+         y="32.863781">A</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:7.92785883px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="39.285824"
+       y="32.863781"
+       id="text2187"
+       transform="scale(1.0547143,0.9481241)"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646"><tspan
+         sodipodi:role="line"
+         id="tspan2189"
+         x="39.285824"
+         y="32.863781">B</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:7.92785883px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="49.200207"
+       y="32.751522"
+       id="text2191"
+       transform="scale(1.0547143,0.9481241)"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646"><tspan
+         sodipodi:role="line"
+         id="tspan2193"
+         x="49.200207"
+         y="32.751522">C</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:7.92785883px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="20.361305"
+       y="43.890491"
+       id="text2195"
+       transform="scale(1.0547143,0.9481241)"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646"><tspan
+         sodipodi:role="line"
+         id="tspan2197"
+         x="20.361305"
+         y="43.890491">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:7.92785883px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="20.285175"
+       y="53.074963"
+       id="text2199"
+       transform="scale(1.0547143,0.9481241)"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646"><tspan
+         sodipodi:role="line"
+         id="tspan2201"
+         x="20.285175"
+         y="53.074963">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:7.92785883px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="20.126463"
+       y="62.308945"
+       id="text2203"
+       transform="scale(1.0547143,0.9481241)"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646"><tspan
+         sodipodi:role="line"
+         id="tspan2205"
+         x="20.126463"
+         y="62.308945">3</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.6606549px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 22.334579,33.00209 c 41.808131,0 41.808131,0 41.808131,0"
+       id="path2207"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <rect
+       style="opacity:0.38172045;fill:#c4d1e6;fill-opacity:1;stroke:#afc6e9;stroke-width:1.15457153;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2188"
+       width="43.606659"
+       height="6.7603073"
+       x="19.549944"
+       y="25.414371"
+       ry="3.3801537"
+       rx="0"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <rect
+       style="opacity:0.38172045;fill:#c4d1e6;fill-opacity:1;stroke:#afc6e9;stroke-width:1.12811387;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect5217"
+       width="8.4708834"
+       height="28.903187"
+       x="19.535992"
+       y="33.235214"
+       ry="0"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.6606549px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 21.054706,43.309328 c 40.904691,0 40.904691,0 40.904691,0"
+       id="path5221"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.6606549px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 21.054706,52.893705 c 40.904691,0 40.904691,0 40.904691,0"
+       id="path5223"
+       inkscape:transform-center-x="13.737415"
+       inkscape:transform-center-y="-4.7921889"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <path
+       style="fill:#407840;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.07599998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 3.7188689,4.7495533 c 22.7231821,0 22.7231821,0 22.7231821,0"
+       id="path2192"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <path
+       style="fill:#407840;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.07599998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 3.7188689,8.5709391 c 22.7231821,0 22.7231821,0 22.7231821,0"
+       id="path2194"
+       inkscape:transform-center-y="1.3895948"
+       inkscape:transform-center-x="-4.6909084"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <path
+       style="fill:#407840;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.07599998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 3.7188689,12.566024 c 22.7231821,0 22.7231821,0 22.7231821,0"
+       id="path2196"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <path
+       style="fill:#407840;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.07599998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 3.7188689,16.561108 c 22.7231821,0 22.7231821,0 22.7231821,0"
+       id="path2198"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.00808871px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-mid:none"
+       d="M 54.02945,45.444167 C 19.975149,13.553532 19.975149,13.553532 19.975149,13.553532"
+       id="path2200"
+       inkscape:transform-center-x="-8.0519976"
+       inkscape:transform-center-y="-6.1296939"
+       inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/path4376.png"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+    <path
+       style="fill:#407840;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.07599998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 3.7188689,20.556193 c 22.7231821,0 22.7231821,0 22.7231821,0"
+       id="path4376"
+       inkscape:export-xdpi="49.449646"
+       inkscape:export-ydpi="49.449646" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/TABLEVISUALISER.svg b/share/metview/icons_mv5/TABLEVISUALISER.svg
new file mode 100755
index 0000000..ac40b09
--- /dev/null
+++ b/share/metview/icons_mv5/TABLEVISUALISER.svg
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64"
+   height="64"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="TABLEVISUALISER.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   style="display:inline">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.796875"
+     inkscape:cx="13.462069"
+     inkscape:cy="31.565804"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     width="64px"
+     height="64px"
+     inkscape:window-width="1327"
+     inkscape:window-height="865"
+     inkscape:window-x="2144"
+     inkscape:window-y="281"
+     showgrid="true"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2852" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="circle"
+     style="display:inline">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 14.5,4.5 c 0,55 0,55 0,55 l 0,0"
+       id="path2173" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 29.5,4.5 c 0,55 0,55 0,55 l 0,0"
+       id="path2175" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 44.5,4.5 c 0,55 0,55 0,55"
+       id="path2177" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 59.5,4.5 c 0,55 0,55 0,55"
+       id="path2179" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="18.140732"
+       y="11.057471"
+       id="text2183"><tspan
+         sodipodi:role="line"
+         id="tspan2185"
+         x="18.140732"
+         y="11.057471">A</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="32.411995"
+       y="11.057471"
+       id="text2187"><tspan
+         sodipodi:role="line"
+         id="tspan2189"
+         x="32.411995"
+         y="11.057471">B</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="47.418892"
+       y="10.887549"
+       id="text2191"><tspan
+         sodipodi:role="line"
+         id="tspan2193"
+         x="47.418892"
+         y="10.887549">C</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="3.7669091"
+       y="27.748047"
+       id="text2195"><tspan
+         sodipodi:role="line"
+         id="tspan2197"
+         x="3.7669091"
+         y="27.748047">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="3.6516747"
+       y="41.650116"
+       id="text2199"><tspan
+         sodipodi:role="line"
+         id="tspan2201"
+         x="3.6516747"
+         y="41.650116">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="3.4114404"
+       y="55.627129"
+       id="text2203"><tspan
+         sodipodi:role="line"
+         id="tspan2205"
+         x="3.4114404"
+         y="55.627129">3</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 5,14 c 60,0 60,0 60,0"
+       id="path2207" />
+    <rect
+       style="opacity:0.38172045;fill:#c4d1e6;fill-opacity:1;stroke:#6391d7;stroke-width:1.74761665;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2188"
+       width="62.58112"
+       height="10.792613"
+       x="1.0036925"
+       y="1.8864518"
+       ry="5.3963065"
+       rx="0" />
+    <rect
+       style="opacity:0.38172045;fill:#c4d1e6;fill-opacity:1;stroke:#6391d7;stroke-width:1.707569;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect5217"
+       width="12.156798"
+       height="46.143005"
+       x="0.98366958"
+       y="14.372176"
+       ry="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 3.1632183,30.455172 c 58.7034487,0 58.7034487,0 58.7034487,0"
+       id="path5221" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 3.1632182,45.756322 c 58.7034488,0 58.7034488,0 58.7034488,0"
+       id="path5223"
+       inkscape:transform-center-x="19.714943"
+       inkscape:transform-center-y="-7.6505747" />
+    <g
+       style="display:inline"
+       id="g6326"
+       transform="matrix(2.1061635,0,0,2.1061635,-2.6698689,-2.7501989)">
+      <rect
+         rx="0"
+         ry="0.76569498"
+         y="25.690905"
+         x="20.200878"
+         height="1.53139"
+         width="3.6325176"
+         id="rect4235"
+         style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.85816514;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         ry="1.2517357"
+         y="27.350697"
+         x="13.411453"
+         height="2.7717004"
+         width="17.032545"
+         id="rect4233"
+         style="fill:#b6c6cc;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.95899999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <g
+         id="g6294">
+        <rect
+           style="fill:#e7e4e0;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:1.00858581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect4231"
+           width="18.368809"
+           height="12.378362"
+           x="12.631559"
+           y="13.338168"
+           ry="1.2467414" />
+        <path
+           style="fill:none;stroke:#e52626;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+           d="m 17.43489,21.539066 3.397568,-5.990449 1.162327,4.559894 2.548176,-2.145833 c 0.998408,0.849393 1.708776,1.410744 2.995225,2.548177"
+           id="path5224"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           style="fill:none;stroke:#1f283c;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 14.752598,15.056863 c 0.0447,8.449216 0.0447,8.538626 0.0447,8.538626"
+           id="path5226" />
+        <path
+           style="fill:none;stroke:#1f283c;stroke-width:1.00666595px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 14.308883,23.726271 15.014163,-0.03804"
+           id="path5228" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/TAR.xpm b/share/metview/icons_mv5/TAR.xpm
new file mode 100644
index 0000000..80ccce8
--- /dev/null
+++ b/share/metview/icons_mv5/TAR.xpm
@@ -0,0 +1,474 @@
+/* XPM */
+static char * TAR_xpm[] = {
+"32 32 439 2",
+"  	c None",
+". 	c #FFFFFF",
+"+ 	c #CFCFCF",
+"@ 	c #DBDCDD",
+"# 	c #DBDBDD",
+"$ 	c #DADADC",
+"% 	c #D9DADB",
+"& 	c #D8D9DB",
+"* 	c #D8D9DA",
+"= 	c #D7D8DA",
+"- 	c #D6D8D9",
+"; 	c #D6D7D9",
+"> 	c #D6D7D8",
+", 	c #D5D6D8",
+"' 	c #D4D5D7",
+") 	c #D4D5D6",
+"! 	c #D3D4D6",
+"~ 	c #D2D4D6",
+"{ 	c #D2D3D5",
+"] 	c #D1D3D5",
+"^ 	c #D1D2D4",
+"/ 	c #D0D1D3",
+"( 	c #CFD1D3",
+"_ 	c #CED0D2",
+": 	c #CECFD1",
+"< 	c #CDCFD1",
+"[ 	c #BFBFBF",
+"} 	c #DCDCDE",
+"| 	c #BACFF9",
+"1 	c #C7D8F9",
+"2 	c #ABC5F6",
+"3 	c #9FBDF3",
+"4 	c #B0C9F4",
+"5 	c #B2CAF3",
+"6 	c #80A8EB",
+"7 	c #7BA5E9",
+"8 	c #75A1E7",
+"9 	c #709EE5",
+"0 	c #6A9AE3",
+"a 	c #6596E1",
+"b 	c #5F92DF",
+"c 	c #5A8EDD",
+"d 	c #548BDB",
+"e 	c #4F87D9",
+"f 	c #4A84D7",
+"g 	c #4480D5",
+"h 	c #3F7CD3",
+"i 	c #3978D1",
+"j 	c #3375CF",
+"k 	c #2E71CD",
+"l 	c #296ECB",
+"m 	c #246BC9",
+"n 	c #1E67C7",
+"o 	c #1964C5",
+"p 	c #C7CED7",
+"q 	c #A4C0F7",
+"r 	c #C8D9F9",
+"s 	c #CEDDF9",
+"t 	c #CADAF8",
+"u 	c #CDDDF8",
+"v 	c #D4E1F9",
+"w 	c #7DA6EB",
+"x 	c #76A2E8",
+"y 	c #709EE6",
+"z 	c #6B9AE4",
+"A 	c #6596E2",
+"B 	c #6093E0",
+"C 	c #5A8EDE",
+"D 	c #548ADC",
+"E 	c #4F87DA",
+"F 	c #4984D8",
+"G 	c #4480D6",
+"H 	c #3E7CD4",
+"I 	c #3878D2",
+"J 	c #3374D0",
+"K 	c #2D70CE",
+"L 	c #276DCC",
+"M 	c #226ACA",
+"N 	c #1C66C8",
+"O 	c #1762C6",
+"P 	c #125FC4",
+"Q 	c #C6CDD7",
+"R 	c #DBDBDC",
+"S 	c #A0BDF7",
+"T 	c #B9CEF8",
+"U 	c #C0D3F8",
+"V 	c #BDD2F7",
+"W 	c #AFC8F3",
+"X 	c #7EA6EB",
+"Y 	c #74A0E8",
+"Z 	c #6E9CE6",
+"` 	c #6899E4",
+" .	c #6294E2",
+"..	c #5D91E0",
+"+.	c #578CDE",
+"@.	c #5188DC",
+"#.	c #4C85DA",
+"$.	c #4682D8",
+"%.	c #407ED5",
+"&.	c #3B7AD3",
+"*.	c #3576D1",
+"=.	c #3072CF",
+"-.	c #2A6ECD",
+";.	c #246ACB",
+">.	c #1E67C9",
+",.	c #1964C7",
+"'.	c #1360C5",
+").	c #0F5DC3",
+"!.	c #C5CDD7",
+"~.	c #DCDCDD",
+"{.	c #EFF4FE",
+"].	c #EDF3FD",
+"^.	c #ECF2FD",
+"/.	c #EBF1FC",
+"(.	c #EAF1FC",
+"_.	c #EAF0FC",
+":.	c #E9F0FB",
+"<.	c #E8EFFB",
+"[.	c #E7EEFB",
+"}.	c #E6EEFA",
+"|.	c #E5EDF9",
+"1.	c #E3ECF8",
+"2.	c #E2EAF7",
+"3.	c #E0E9F6",
+"4.	c #DFE8F5",
+"5.	c #DDE7F4",
+"6.	c #DCE5F3",
+"7.	c #DAE4F2",
+"8.	c #D9E3F1",
+"9.	c #D7E1F0",
+"0.	c #D5E0EF",
+"a.	c #D4DFEE",
+"b.	c #D2DEED",
+"c.	c #D0DCEC",
+"d.	c #CFDBEB",
+"e.	c #CDDAEA",
+"f.	c #DCDCDC",
+"g.	c #FEFEFE",
+"h.	c #FDFDFD",
+"i.	c #FCFBFA",
+"j.	c #F4E6D0",
+"k.	c #FAFBFB",
+"l.	c #FAFAFA",
+"m.	c #F9F9F9",
+"n.	c #F8F8F8",
+"o.	c #F7F7F7",
+"p.	c #F6F6F6",
+"q.	c #F5F5F5",
+"r.	c #F4F4F4",
+"s.	c #F3F3F3",
+"t.	c #F2F2F2",
+"u.	c #EFEFEF",
+"v.	c #DBDBDB",
+"w.	c #F4E1C4",
+"x.	c #E8BC75",
+"y.	c #EAC781",
+"z.	c #E6C491",
+"A.	c #F9F9F8",
+"B.	c #ECECEC",
+"C.	c #F8ECD9",
+"D.	c #EAC07B",
+"E.	c #F2D89C",
+"F.	c #FFFEDC",
+"G.	c #FAEFC2",
+"H.	c #F3E2AF",
+"I.	c #DEB984",
+"J.	c #F7F7F6",
+"K.	c #F1F1F1",
+"L.	c #EAEAEA",
+"M.	c #FBF3E7",
+"N.	c #ECC486",
+"O.	c #F0D08E",
+"P.	c #FEFBD6",
+"Q.	c #FFFFDB",
+"R.	c #FDF9D2",
+"S.	c #F8EEC0",
+"T.	c #F4E8BA",
+"U.	c #D6AE77",
+"V.	c #F4F2EE",
+"W.	c #EDEDED",
+"X.	c #FDF9F3",
+"Y.	c #EECC95",
+"Z.	c #EEC67C",
+"`.	c #FDF2C5",
+" +	c #FFF8CF",
+".+	c #F8E9B9",
+"++	c #F7E9B9",
+"@+	c #CEA56C",
+"#+	c #F1EDE8",
+"$+	c #F0F0F0",
+"%+	c #EBEBEB",
+"&+	c #DADADA",
+"*+	c #F3D9B1",
+"=+	c #EBBC6C",
+"-+	c #F8DFA1",
+";+	c #FBE6AC",
+">+	c #F9E2A6",
+",+	c #F8DE9F",
+"'+	c #F8DE9E",
+")+	c #F6DA99",
+"!+	c #EDCB86",
+"~+	c #F6DC9F",
+"{+	c #FEEFBB",
+"]+	c #FFF0BC",
+"^+	c #F8E7B0",
+"/+	c #C89E65",
+"(+	c #EBE5DD",
+"_+	c #EEEEEE",
+":+	c #ECC27B",
+"<+	c #FEF1BE",
+"[+	c #FEE5A7",
+"}+	c #FFE7A9",
+"|+	c #FFE8AB",
+"1+	c #FFE8AC",
+"2+	c #FDE3A3",
+"3+	c #E2A544",
+"4+	c #DCA54D",
+"5+	c #DEB268",
+"6+	c #E6C584",
+"7+	c #F5DB9E",
+"8+	c #FAE3A5",
+"9+	c #C59B61",
+"0+	c #E5DBD1",
+"a+	c #D9D9D9",
+"b+	c #ECC37B",
+"c+	c #FFF1BB",
+"d+	c #FFEEB6",
+"e+	c #FFDE97",
+"f+	c #FFDE96",
+"g+	c #F6CE7F",
+"h+	c #F0C270",
+"i+	c #EFC577",
+"j+	c #E8BD72",
+"k+	c #DFB36B",
+"l+	c #D5AA66",
+"m+	c #D4AD6C",
+"n+	c #E2C080",
+"o+	c #B7894F",
+"p+	c #EEEDEB",
+"q+	c #ECC27A",
+"r+	c #FFEDB1",
+"s+	c #FFECAD",
+"t+	c #FFE9AB",
+"u+	c #FFD687",
+"v+	c #FFD583",
+"w+	c #EEBC66",
+"x+	c #FED482",
+"y+	c #FFD684",
+"z+	c #FFD785",
+"A+	c #FFD37A",
+"B+	c #C8984E",
+"C+	c #ECE9E7",
+"D+	c #EABF78",
+"E+	c #FFEAA7",
+"F+	c #FFE8A3",
+"G+	c #FFE7A1",
+"H+	c #FFE5A0",
+"I+	c #FFD078",
+"J+	c #FFCC70",
+"K+	c #EEB85D",
+"L+	c #FFCC71",
+"M+	c #FFD077",
+"N+	c #FFCE71",
+"O+	c #FFCC6D",
+"P+	c #FFD176",
+"Q+	c #C69650",
+"R+	c #ECEAE8",
+"S+	c #D8D8D8",
+"T+	c #E7BD77",
+"U+	c #FFE69E",
+"V+	c #FFE49A",
+"W+	c #FFE398",
+"X+	c #FFE295",
+"Y+	c #FFE195",
+"Z+	c #FFC96A",
+"`+	c #FFC35D",
+" @	c #F1B452",
+".@	c #FFC969",
+"+@	c #FFC866",
+"@@	c #FFC561",
+"#@	c #FFCA69",
+"$@	c #FFCF72",
+"%@	c #FFD47B",
+"&@	c #C39653",
+"*@	c #EDEBE9",
+"=@	c #E5BA75",
+"-@	c #FFE091",
+";@	c #FFDF8F",
+">@	c #FFDE8C",
+",@	c #FFDD89",
+"'@	c #FFDD8A",
+")@	c #FAC362",
+"!@	c #FBBF59",
+"~@	c #FFBE54",
+"{@	c #FFC35C",
+"]@	c #FFCD6F",
+"^@	c #FFD277",
+"/@	c #FFD780",
+"(@	c #C19555",
+"_@	c #EEECEA",
+":@	c #D7D7D7",
+"<@	c #FCFCFC",
+"[@	c #E2B773",
+"}@	c #FFDF8C",
+"|@	c #FFDD88",
+"1@	c #FFDC85",
+"2@	c #FFDB82",
+"3@	c #FFDA80",
+"4@	c #FFD87D",
+"5@	c #FEDF8D",
+"6@	c #FFBA4C",
+"7@	c #FFBC50",
+"8@	c #FFC159",
+"9@	c #FFC662",
+"0@	c #FFCB6B",
+"a@	c #FFD074",
+"b@	c #FFD57D",
+"c@	c #FFDA86",
+"d@	c #BF9557",
+"e@	c #EEECEB",
+"f@	c #F4F5F6",
+"g@	c #DDB472",
+"h@	c #FFDB83",
+"i@	c #FFD97F",
+"j@	c #FFD87C",
+"k@	c #FFD77A",
+"l@	c #FFD677",
+"m@	c #FFD574",
+"n@	c #FFBA4D",
+"o@	c #FFBF56",
+"p@	c #FFC45E",
+"q@	c #FFC967",
+"r@	c #FFCE70",
+"s@	c #FFD882",
+"t@	c #FFDD8B",
+"u@	c #BC9458",
+"v@	c #EFEDEC",
+"w@	c #D6D6D6",
+"x@	c #F5F6F7",
+"y@	c #D7AC6C",
+"z@	c #FDD77B",
+"A@	c #FFD676",
+"B@	c #FFD473",
+"C@	c #FFD370",
+"D@	c #FFD26E",
+"E@	c #FFD16B",
+"F@	c #FFD577",
+"G@	c #FFBD52",
+"H@	c #FFC25B",
+"I@	c #FFC764",
+"J@	c #FFCC6C",
+"K@	c #FFD67F",
+"L@	c #FFDB88",
+"M@	c #FFE090",
+"N@	c #BA9358",
+"O@	c #F0EEEC",
+"P@	c #ECE2D4",
+"Q@	c #D3A55D",
+"R@	c #FCD171",
+"S@	c #FFD06A",
+"T@	c #FFCF68",
+"U@	c #FFCE65",
+"V@	c #FFCD62",
+"W@	c #FFC157",
+"X@	c #FFC560",
+"Y@	c #FFD984",
+"Z@	c #FFDE8D",
+"`@	c #FFE192",
+" #	c #B89259",
+".#	c #F0EEED",
+"+#	c #D5D5D5",
+"@#	c #EEE7DE",
+"##	c #CC9F5F",
+"$#	c #F9CA66",
+"%#	c #FFCC5F",
+"&#	c #FFCA5C",
+"*#	c #FFC959",
+"=#	c #FFC45D",
+"-#	c #FFCD6E",
+";#	c #FFD781",
+">#	c #FFDC8A",
+",#	c #FDE090",
+"'#	c #C8A669",
+")#	c #A7876C",
+"!#	c #F3F2F2",
+"~#	c #F1ECE7",
+"{#	c #C79D66",
+"]#	c #F4C55F",
+"^#	c #FFC752",
+"/#	c #FFC64F",
+"(#	c #FFCE63",
+"_#	c #D4B16E",
+":#	c #9C7A5A",
+"<#	c #B8ACA5",
+"[#	c #CDCDCD",
+"}#	c #CBCBCB",
+"|#	c #CACACA",
+"1#	c #AEAEAE",
+"2#	c #F3F0ED",
+"3#	c #C29C6E",
+"4#	c #EEBC58",
+"5#	c #FFC246",
+"6#	c #FFCC5D",
+"7#	c #FFC968",
+"8#	c #FFD379",
+"9#	c #E1B96E",
+"0#	c #AD875F",
+"a#	c #D0C1B7",
+"b#	c #DDDDDD",
+"c#	c #B7B7B7",
+"d#	c #F6F5F4",
+"e#	c #BF9E79",
+"f#	c #E6B453",
+"g#	c #FFC957",
+"h#	c #ECBF6C",
+"i#	c #B48B5A",
+"j#	c #C8B4A6",
+"k#	c #F6F5F5",
+"l#	c #CECECE",
+"m#	c #FBFBFB",
+"n#	c #B4B4B4",
+"o#	c #D4D4D4",
+"p#	c #F9F8F8",
+"q#	c #BFA286",
+"r#	c #D3AB5E",
+"s#	c #BA8E54",
+"t#	c #BFA693",
+"u#	c #F4F2F0",
+"v#	c #CCCCCC",
+"w#	c #D1BFB1",
+"x#	c #EFEBE7",
+"y#	c #E8E8E8",
+"z#	c #D0D0D0",
+"A#	c #E9E9E9",
+"B#	c #B2B2B2",
+"C#	c #D1D1D1",
+"D#	c #C5C5C5",
+"E#	c #A3A3A3",
+"F#	c #B1B1B1",
+". . + @ # $ % % & * = - ; > , ' ) ! ~ { ] ^ / / ( _ : < < [ . . ",
+". . } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p . . ",
+". . @ q r s t u v w x y z A B C D E F G H I J K L M N O P Q . . ",
+". . R S T U V 4 W X Y Z `  ...+. at .#.$.%.&.*.=.-.;.>.,.'.).!.. . ",
+". . ~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.& . . ",
+". . f.. . . . . . . . . g.g.h.i.j.k.l.m.n.o.p.p.q.r.s.t.u.v.. . ",
+". . f.. . . . . . . . . g.h.w.x.y.z.A.n.n.o.p.q.r.r.s.t.B.v.. . ",
+". . v.. . . . . . . . g.C.D.E.F.G.H.I.J.o.p.p.q.r.s.t.K.L.v.. . ",
+". . v.. . . . . . . M.N.O.P.Q.R.S.Q.T.U.V.p.q.r.s.s.t.W.L.v.. . ",
+". . v.. . . . . X.Y.Z.`. + + +.+.+ + +++ at +#+q.r.s.t.$+%+B.v.. . ",
+". . &+. . . . *+=+-+;+>+,+'+)+!+~+{+]+]+^+/+(+s.s.t._+B.B.v.. . ",
+". . &+. . . . :+<+[+}+|+1+|+|+2+3+4+5+6+7+8+9+0+t.u.W.W._+f.. . ",
+". . a+. . . . b+c+d+e+f+f+f+f+g+h+i+j+k+l+m+n+o+p+_+_+_+_+f.. . ",
+". . a+. . . . q+r+s+t+u+v+v+v+w+x+v+v+v+y+z+A+B+C+u.u.u.u.f.. . ",
+". . a+. . . . D+E+F+G+H+I+J+J+K+J+J+L+M+N+O+P+Q+R+$+$+$+$+f.. . ",
+". . S+. . . . T+U+V+W+X+Y+Z+`+ @`+. at +@@@#@$@%@&@*@K.K.K.K.f.. . ",
+". . S+g.. . g.=@X+-@;@>@,@'@)@!@`+~@{@+@]@^@/@(@_ at t.t.t.t.f.. . ",
+". . :@s.n.<@g.[@}@|@1 at 2@3 at 4@5 at 6@7 at 8@9 at 0@a at b@c at d@e at t.t.t.s.f.. . ",
+". . :@s.r.s.f at g@h at i@j at k@l at m@4 at n@o at p@q at r@A+s at t@u at v@r.r.r.r.f.. . ",
+". . w at r.r.r.x@y at z@A at B@C at D@E at F@G at H@I at J@P+K at L@M at N@O at r.r.r.r.f.. . ",
+". . w at q.q.q.q.P@Q at R@S at T@U at V@C at W@X@#@$@%@Y at Z@`@ #.#q.q.q.q.f.. . ",
+". . +#p.p.p.p.p.@###$#%#&#*#S@=#+ at -#^@;#>#,#'#)#!#q.q.q.q.f.. . ",
+". . +#p.o.o.o.o.o.~#{#]#^#/#(#9 at 0@a at b@c at _#:#<#+ [#}#|#|#|#1#. . ",
+". . +#o.n.n.n.n.n.n.2#3#4#5#6#7#r at 8#9#0#a#+ <@h.g.. . . b#c#. . ",
+". . +#n.n.n.n.n.n.n.n.d#e#f#g#O+h#i#j#k#n.l#n.n.l.m#<@f.n#g.. . ",
+". . o#m.m.m.m.m.m.m.m.m.p#q#r#s#t#u#m.m.l.v#r.s.r.q.:@n#g.. . . ",
+". . o#m.l.l.l.l.l.l.l.l.l.l.w#x#l.l.l.l.l.|#K._+u.o#n#g.. . . . ",
+". . o#l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.m#|#W.y#z#n#g.. . . . . ",
+". . o#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#<@|#A#v#B#g.. . . . . . ",
+". . o#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#<@|#C#1#g.. . . . . . . ",
+". . B#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#E#F#g.. . . . . . . . ",
+". . g.m#m#m#m#o.s.s.s.s.s.s.s.s.s.s.s.s.s.q.. . . . . . . . . . "};
diff --git a/share/metview/icons_mv5/TIFF.xpm b/share/metview/icons_mv5/TIFF.xpm
new file mode 100644
index 0000000..b0bff4c
--- /dev/null
+++ b/share/metview/icons_mv5/TIFF.xpm
@@ -0,0 +1,293 @@
+/* XPM */
+static char *TIFF___[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 255 2",
+"   c #0D9A2E820882",
+".  c #088E3A200495",
+"X  c #0CF3328F0826",
+"o  c #12F7312A0DCB",
+"O  c #06FA462A03BE",
+"+  c #05F2516301D2",
+"@  c #0B3A550A06F9",
+"#  c #0B4F5C840428",
+"$  c #14C968FE0964",
+"%  c #156368850AB7",
+"&  c #1B3C73740B7C",
+"*  c #22157D800EE9",
+"=  c #23CB7D711165",
+"-  c #58997C970000",
+";  c #DFF03E7C23B2",
+":  c #E7463F7624D3",
+">  c #EB963F43238A",
+",  c #990A4DCF3A2C",
+"<  c #BD7C46C32E17",
+"1  c #A44D4C5C3574",
+"2  c #AD084AAD32CC",
+"3  c #B4D749583100",
+"4  c #B98A48822FDD",
+"5  c #A06750BD3B5A",
+"6  c #C4B7465D2D7C",
+"7  c #CCA744D92B7E",
+"8  c #D092415D278E",
+"9  c #DEE24142270D",
+"0  c #D45C43FD2A64",
+"q  c #DA9E422D2825",
+"w  c #C1014AA132AA",
+"e  c #E38D404B25E6",
+"r  c #EF4541712363",
+"t  c #F16B454B2363",
+"y  c #F27F4BBE23AA",
+"u  c #F2D155482408",
+"i  c #F2C45D472784",
+"p  c #F24563652645",
+"a  c #F1906B802736",
+"s  c #F12F7345282B",
+"d  c #F0C37B792926",
+"f  c #91E64F814070",
+"g  c #8EFD4FDD440F",
+"h  c #8AE1506A4B99",
+"j  c #84AA4E32592E",
+"k  c #876E51735947",
+"l  c #84AE5082651D",
+"z  c #83F5504E6BFD",
+"x  c #829D4FB47987",
+"c  c #8355502A7313",
+"v  c #828B4FE27E7C",
+"b  c #2831849D124D",
+"n  c #2D3089E512F3",
+"m  c #31908D1513FB",
+"M  c #3C6E92921697",
+"N  c #39BC9187199E",
+"B  c #5C2E88B804D1",
+"V  c #447495E21819",
+"C  c #4B11980418F6",
+"Z  c #59D59CBA1AB4",
+"A  c #63459EB119CD",
+"S  c #6607A6731E68",
+"D  c #71BCA2C61F06",
+"F  c #62DFAF9A23CA",
+"G  c #7B64A5912245",
+"H  c #6108B07621FA",
+"J  c #6499BEE52EE6",
+"K  c #62A8C0B02DC2",
+"L  c #6398C94A33BE",
+"P  c #658ECD9E38D4",
+"I  c #68EAD6D144A6",
+"U  c #6A4BD9F54AE8",
+"Y  c #6F22E0915C2F",
+"T  c #744FE39E687D",
+"R  c #7817E6D77529",
+"E  c #86F8A8212260",
+"W  c #96A1ABD724A9",
+"Q  c #A535AF5226C3",
+"!  c #AE6FB1722835",
+"~  c #B9F7B3E729BC",
+"^  c #F05486752A81",
+"/  c #F0098B632AFB",
+"(  c #F08680E726E6",
+")  c #F09283152C12",
+"_  c #EFBA938C2BFE",
+"`  c #EF409CC42D2C",
+"'  c #C4FBB61C2BBD",
+"]  c #CBA5B6D62C55",
+"[  c #D4BAB7612D41",
+"{  c #DC69B6B32E3B",
+"}  c #EE40A4832E0B",
+"|  c #EBB0ABC62DE8",
+" . c #E49DB3C82EAF",
+".. c #EC91ACB93293",
+"X. c #A75CB9F9791C",
+"o. c #A8B2BB1D7B17",
+"O. c #7F0F4C82965F",
+"+. c #7FF54E7BA4C0",
+"@. c #7F5D4E29AC17",
+"#. c #7E644DBAB7D8",
+"$. c #62B97574AA64",
+"%. c #7D1B4D33C89F",
+"&. c #7B6A4C55D883",
+"*. c #7E8C5035D47F",
+"=. c #5EA56344C454",
+"-. c #66D86B38C71B",
+";. c #6CB270DFC8A7",
+":. c #77337B0ECC06",
+">. c #7B1A7EDACD9B",
+",. c #7B634D61E2D3",
+"<. c #7AF34E5BEBC2",
+"1. c #7AE74FBDF1A7",
+"2. c #7AFD5141F56F",
+"3. c #7B4354C6FAE1",
+"4. c #7D515BB3FDA9",
+"5. c #7EC3638FFEE9",
+"6. c #82204F878367",
+"7. c #81A84F658AAB",
+"8. c #81334F2B9222",
+"9. c #805F4ED69D91",
+"0. c #832A523C9861",
+"q. c #80BB6C87FE75",
+"w. c #836C7472FDB4",
+"e. c #84AD7BB3FD2E",
+"r. c #7F848BB0AE2E",
+"t. c #7BD38ACFB52E",
+"y. c #76898AF2C4CD",
+"u. c #7E4381ECCEB9",
+"i. c #61888A36FFFF",
+"p. c #68588F89FFAF",
+"a. c #6A5390B8FF9C",
+"s. c #710F962AFFEE",
+"d. c #75D59A12FFE9",
+"f. c #7C499E10FFA0",
+"g. c #7E56A05EFFE7",
+"h. c #BC31A27EB159",
+"j. c #BD9BBD9BBD9B",
+"k. c #DF009B868EF7",
+"l. c #D5249ECB91D9",
+"z. c #EADC99E48C46",
+"x. c #C390A24A9927",
+"c. c #F386A0458B33",
+"v. c #F329B4498D90",
+"b. c #A9A7CAB58652",
+"n. c #AA7BD75C8F80",
+"m. c #AB24DBD0929C",
+"M. c #838EEDF294AF",
+"N. c #AC94E49B9AC1",
+"B. c #B7BEC635B698",
+"V. c #B951C3B0B75E",
+"C. c #B73ACC2DB63D",
+"Z. c #BAADC6C0B880",
+"A. c #BAD9D49DB5A3",
+"S. c #BC32D3E8B879",
+"D. c #879BF058A08A",
+"F. c #8AA4F262AAD4",
+"G. c #8FA6F559BB25",
+"H. c #B09DE8E7AA8E",
+"J. c #C64CD0B88D8F",
+"K. c #F22CC9279021",
+"L. c #E7C9D63F9075",
+"P. c #C663DAD1B8F9",
+"I. c #E7C2C768BEC2",
+"U. c #F5FFC751BD9E",
+"Y. c #FB3DD2DBBF3C",
+"T. c #D424E56ABF15",
+"R. c #811484A6CFA1",
+"E. c #86DB97E9C824",
+"W. c #8DEB9114D37F",
+"Q. c #96B999A3D6D2",
+"!. c #98C79BA4D7C3",
+"~. c #90D4A538DFDC",
+"^. c #B8EAA078CFFD",
+"/. c #A277A502DA72",
+"(. c #A881AAE4DD01",
+"). c #A2D1B2C9E024",
+"_. c #B1E8B3F7DF2C",
+"`. c #868F8366FCA3",
+"'. c #87B2880BFC52",
+"]. c #88658C4FFC27",
+"[. c #82C99F7FF18E",
+"{. c #8ABB92E4FBB1",
+"}. c #8C689BA9FB29",
+"|. c #8B28A2CEE585",
+" X c #969CAC34E968",
+".X c #83DFA451FFE4",
+"XX c #8CE5A4F4FC13",
+"oX c #8C06AA38FFF1",
+"OX c #936FACB1F33A",
+"+X c #9193ADDBFD20",
+"@X c #939CB46DFB62",
+"#X c #96DFB9F8FBD9",
+"$X c #B749A086ED84",
+"%X c #B4A2B6AFE1C8",
+"&X c #BB5EBD28E2CB",
+"*X c #A67FBC16F942",
+"=X c #BB3FB144F898",
+"-X c #93AAF672C3B4",
+";X c #96A3F757CCEC",
+":X c #98FDF78CD68C",
+">X c #BB84EFDBC7ED",
+",X c #968CC41BF955",
+"<X c #9890CCD3F8D5",
+"1X c #99BAD511F7AD",
+"2X c #9C50DD4EF6A1",
+"3X c #BD86CE83FF52",
+"4X c #9DA2EDFFEEE9",
+"5X c #9DBFF430E763",
+"6X c #9D5FE6A2F3A1",
+"7X c #C63CC63CC63C",
+"8X c #CE15CE15CE15",
+"9X c #D7F6C815CD0F",
+"0X c #D52CD52CD52C",
+"qX c #DD6ADD47DD7E",
+"wX c #FB47DF49C159",
+"eX c #C24DF29EDF7A",
+"rX c #EC3EE9D1C8ED",
+"tX c #CC33CF39E798",
+"yX c #CA6FC6DCEE72",
+"uX c #CC2FD1ECE28E",
+"iX c #DE0FDFF8E56B",
+"pX c #D5FCD6F0EB03",
+"aX c #D852DBC7EB2D",
+"sX c #DB4CDDAAEC29",
+"dX c #D368C96EF4C9",
+"fX c #C7D0D7F7FA3B",
+"gX c #D540D44BF47B",
+"hX c #D320DC75F5B4",
+"jX c #D47BDF59FB87",
+"kX c #E119DF7DE1B8",
+"lX c #C547EFC6ED22",
+"zX c #DF23E159E7A1",
+"xX c #DE9AE1B4ECA8",
+"cX c #C844F41FECFB",
+"vX c #C3A1E2A6F088",
+"bX c #D639E255FE89",
+"nX c #DB5CE689FFFB",
+"mX c #DF73E888FFFF",
+"MX c #E4BDE483E530",
+"NX c #E8C4E860E73E",
+"BX c #E8E8E87BE84D",
+"VX c #E2C9E3F4EC42",
+"CX c #E5ADE9E1EF09",
+"ZX c #ED1EECDCEDC7",
+"AX c #F101EFB9EFCF",
+"SX c #E6D8E75AF1FC",
+"DX c #E83DEAECF259",
+"FX c #EC2BECC3F207",
+"GX c #E4F9EBC3FFFF",
+"HX c #E9D6EF62FFFF",
+"JX c #EE56F354FFCC",
+"KX c #F493F4A6F55E",
+"LX c #F995F981F7CF",
+"PX c #F7ABF7B9F8DC",
+"IX c #FD88FD87FD7A",
+/* pixels */
+"IXMXCXVXiXVXzXzXiXxXxXxXxXxXxXxXsXsXsXsXsXsXaXaXaXaXaXsXqXKXIXIX",
+"IXMXfX).r.E.t.E.t. X#X at X+XoXoX.X.Xf.f.f.f.f.f.f.f.f.f.oXuXNXIXIX",
+"IXMX3X*XE.y.$.y.$.[..X.Xf.d.s.a.p.i.i.i.i.i.i.i.i.i.i.s.uXNXIXIX",
+"IXMXfX*X X~.|.OX|.+XoXoX.Xg.f.d.s.a.a.a.a.a.a.a.a.a.p.d.uXNXIXIX",
+"IXMXJXJXJXJXJXHXHXGXGXGXmXnXnXnXbXbXbXjXjXjXhXhXhXhXhXhXqXNXIXIX",
+"IXMXZXZ.V.Z.C.S.P.P.T.rXwXwXY.U.U.U.I.I.9X9XtXdXdXgXhXCXqXNXIXIX",
+"IXBXV.o X . @ % = N G ' ..) i t e 0 w 5 k 0.*.4.w.{. at XvXqXNXIXIX",
+"IXBXV.  . O # & b Z Q  ._ a y : q 7 2 g x #.<.5.`.XX1XlXqXNXIXIX",
+"IXBXV.X . + $ * M G ] | ( u r 9 7 < , k 9.&.3.w.{.#X4XeXqXNXIXIX",
+"IXBXV.. O # & n Z Q  ._ a t : 0 6 2 h v #.1.5.`.XX1X:X>XqXNXIXIX",
+"IXNXB.O + $ * M E ] } d u > 9 7 4 , l 9.&.4.w.{.#X4XF.H.qXNXIXIX",
+"IXNXB.O # & n Z !  ._ p t e 0 6 2 h 6.%.2.q.'.XX2X:XR N.kXNXIXIX",
+"IXNXC.@ $ = V E [ } d u > 9 7 4 , l +.,.4.e.{.,X4XF.U m.kXNXIXIX",
+"IXMXC.% & n A ~  ./ p t e 0 6 1 h 7.%.2.q.'.+X2X;XR P n.kXNXIXIX",
+"IXMXS.& b V W [ ` s y > q 7 4 , z @.,.4.e.}.,X5XD.U K b.MXNXIXIX",
+"IXMXS.= m D ~ | / p r e 0 6 1 k 7.%.3.q.].+X6X;XT P H b.MXNXIXIX",
+"IXMXS.b C W { ` s y > q 7 3 f c @.<.4.e.}.<X5XM.U J Z o.MXNXIXIX",
+"IXMXA.N D ~ | ^ i r e 0 6 1 k 8.*.3.q.]. at X6X-XT P F B o.MXNXIXIX",
+"IXMXA.Z W { ` s y : q 7 3 g c #.<.5.e.}.<X5XM.I J A B o.MXNXIXIX",
+"IXMXP.G ' | ( u > ; 8 < , j O.&.3.q.]. at X6XG.Y L S B - o.MXNXIXIX",
+"IXMXqXJ.L.K.v.c.z.z.k.l.x.h.^.$X=X=XyXfXcX>XN.m.b.o.X.P.MXNXIXIX",
+"IXqXKXsXaXsXaXVXFXDXKXxXaXsXFXCXsXaXVXKXAXZXZXZXZXZXZXFXqXNXIXIX",
+"IXqXSXW.:.=.>./.&X/.VX;.u.R.pX/.;.u./.KXqX0X0X0X0X0X0X0Xj.ZXIXIX",
+"IXqXKXKXpXu.DXKX&XQ.sX>.VXFXKXQ._.FXFXKX0XKXIXIXIXIXIXqXqXIXIXIX",
+"LXqXPXPXsXR.KXLX&X!.xX=.u.W.FXQ.-.u.&XPX0XZXLXLXIXIXqXqXIXIXIXIX",
+"LXqXPXPXsXR.KXLX&X!.sX>.pXsXKXQ.(.sXDXPX0XBXKXKXKX0XqXIXIXIXIXIX",
+"LXqXPXLXsXu.KXLX&X!.sXu.KXLXLXQ.&XLXPXPX0XNXZXZX0XqXIXIXIXIXIXIX",
+"LXqXLXLXSX/.KXLXtX%XSX/.KXPXLX%XtXLXPXPX0XMXBX8XqXIXIXIXIXIXIXIX",
+"LXqXLXLXLXPXLXLXPXPXLXPXLXLXLXPXPXLXLXLX0XqX8XqXIXIXIXIXIXIXIXIX",
+"LXqXLXLXLXLXLXLXLXLXLXLXLXLXLXLXLXLXLXLX0X7XqXIXIXIXIXIXIXIXIXIX",
+"IXqXMXMXMXMXMXMXMXMXMXMXMXMXMXMXMXMXMXMX8XqXIXIXIXIXIXIXIXIXIXIX",
+"IXIXLXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXLXIXIXIXIXIXIXIXIXIXIXIXIX"
+};
diff --git a/share/metview/icons_mv5/VELSTR.svg b/share/metview/icons_mv5/VELSTR.svg
new file mode 100644
index 0000000..039135d
--- /dev/null
+++ b/share/metview/icons_mv5/VELSTR.svg
@@ -0,0 +1,775 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   inkscape:export-ydpi="180"
+   inkscape:export-xdpi="180"
+   width="32"
+   height="32"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="VELSTR.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <sodipodi:namedview
+     stroke="#3465a4"
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="13.28125"
+     inkscape:cx="28.659552"
+     inkscape:cy="16.527546"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="false"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1366"
+     inkscape:window-height="706"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     gridtolerance="50"
+     inkscape:grid-points="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     objecttolerance="0.4"
+     inkscape:object-paths="true"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="1"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <sodipodi:guide
+       orientation="horizontal"
+       position="50.977307"
+       id="guide9112" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2849"
+       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>
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3901">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3903" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3905" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3642">
+      <stop
+         style="stop-color:#e14848;stop-opacity:1;"
+         offset="0"
+         id="stop3644" />
+      <stop
+         style="stop-color:#fa1511;stop-opacity:1;"
+         offset="1"
+         id="stop3646" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       id="filter3897">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.58403735"
+         id="feGaussianBlur3899" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3907"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="25.957588"
+       y2="3.7863109"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.75294117,-0.22588235)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3033"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.37647062,-8.4329411)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-7"
+       id="linearGradient3033-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.45176467,-7.6047059)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3901-7">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3903-4" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3905-0" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-7"
+       id="linearGradient3050"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.45176467,-7.6047059)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3052">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3054" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3056" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-7"
+       id="linearGradient3058"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.45176467,-7.6047059)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3060">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3062" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3064" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       id="filter3888">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.55334703"
+         id="feGaussianBlur3890" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3912"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.90352941,-15.058823)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3922"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-23.004635,-34.416627)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3926"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.30117647,-14.908235)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3934"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91976073,0,0,0.91976074,1.4470415,-12.396211)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3938"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.6023529,-17.317647)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3950"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-14.54273,-50.680156)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3952"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(12.724706,-2.8611767)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3956"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96425122,0,0,0.96425122,16.049297,-0.72602464)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901"
+       id="linearGradient3964"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(9.1858826,-17.468235)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3901-2">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3903-45" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3905-5" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient3984"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(9.1858826,-17.468235)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3986">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3988" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3990" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient3992"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(9.1858826,-17.468235)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient3994">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop3996" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop3998" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient3956-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96425122,0,0,0.96425122,38.780414,13.41449)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4001">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4003" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4005" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4007"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96425119,0,0,0.96425119,15.346526,-0.94383193)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4009">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4011" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4013" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4016">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4018" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4020" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4022"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-14.54273,-50.680156)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4024">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4026" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4028" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient3934-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91976073,0,0,0.91976074,49.181617,-2.093757)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4031">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4033" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4035" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4037"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91976073,0,0,0.91976074,24.614192,-15.789587)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4039">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4041" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4043" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4045"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91976073,0,0,0.91976074,24.614192,-15.789587)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4047">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4049" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4051" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4054">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4056" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4058" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4060"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-23.004635,-34.416627)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4062">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4064" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4066" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient3938-5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.6023529,-17.317647)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4069">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4071" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4073" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4075"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.6023529,-17.317647)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4077">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4079" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4081" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4083"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.6023529,-17.317647)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4085">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4087" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4089" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4091"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.6023529,-17.317647)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4093">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4095" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4097" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3901-2"
+       id="linearGradient4099"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.6023529,-17.317647)"
+       x1="3.7705307"
+       y1="28.708662"
+       x2="32.884647"
+       y2="10.638075" />
+    <linearGradient
+       id="linearGradient4101">
+      <stop
+         style="stop-color:#9f9f9f;stop-opacity:1;"
+         offset="0"
+         id="stop4103" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop4105" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       id="filter4645"
+       x="-0.12713787"
+       width="1.2542757"
+       y="-0.12079295"
+       height="1.2415859">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4647" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4649">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4651" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4653">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4655" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4657">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4659" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4661">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4663" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4665"
+       x="-0.08488758"
+       width="1.1697752"
+       y="-0.22302175"
+       height="1.4460435">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4667" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4669"
+       x="-0.12038486"
+       width="1.2407697"
+       y="-0.072920709"
+       height="1.1458414">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.26099062"
+         id="feGaussianBlur4671" />
+    </filter>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="shadow">
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;filter:url(#filter4657);font-family:Arial;-inkscape-font-specification:Arial"
+       x="49.25087"
+       y="25.468767"
+       id="text3928-1"
+       sodipodi:linespacing="125%"
+       transform="matrix(0.91976072,0,0,1.0872393,-43.294118,-10.616471)"><tspan
+         style="font-size:18px;fill:#000000"
+         y="25.468767"
+         x="49.25087"
+         id="tspan3930-6"
+         sodipodi:role="line"><tspan
+           id="tspan3932-8"
+           style="font-size:18px;fill:#000000">Ψ </tspan></tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3944-6"
+       y="42.310265"
+       x="38.853016"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;filter:url(#filter4649);font-family:Arial;-inkscape-font-specification:Arial"
+       xml:space="preserve"
+       transform="matrix(0.96425116,0,0,1.0370742,-21.157648,-14.230589)"><tspan
+         sodipodi:role="line"
+         id="tspan3954-1"
+         x="38.853016"
+         y="42.310265"
+         style="font-size:18px;fill:#000000">Φ</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3934);fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+       x="1.5162923"
+       y="15.166313"
+       id="text3928"
+       sodipodi:linespacing="125%"
+       transform="scale(0.91976072,1.0872393)"><tspan
+         style="font-size:18px;fill:url(#linearGradient3934)"
+         y="15.166313"
+         x="1.5162923"
+         id="tspan3930"
+         sodipodi:role="line"><tspan
+           id="tspan3932"
+           style="font-size:18px;fill:url(#linearGradient3934)">Ψ </tspan></tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3944"
+       y="28.16975"
+       x="16.121901"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3956);fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+       xml:space="preserve"
+       transform="scale(0.96425116,1.0370742)"><tspan
+         sodipodi:role="line"
+         id="tspan3954"
+         x="16.121901"
+         y="28.16975"
+         style="font-size:18px;fill:url(#linearGradient3956)">Φ</tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/VPROF.xpm b/share/metview/icons_mv5/VPROF.xpm
new file mode 100755
index 0000000..7684199
--- /dev/null
+++ b/share/metview/icons_mv5/VPROF.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static char * VPROF_xpm[] = {
+"32 32 8 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #EC92EB",
+"@	c #BABABA",
+"#	c #E9E9FB",
+"$	c #7F7F7F",
+"%	c #92BEEC",
+"&	c #E4D8C2",
+".........+......................",
+"..........+.....................",
+"...........+....................",
+"............++..................",
+"..............+.................",
+"..............++................",
+"...............+++..............",
+".........@@@@@@@@+@@@@@.........",
+".....@@@@########+#####@@@@.....",
+"..@@@############+#########@@@..",
+".@###############+############@.",
+"@################+#############@",
+"#########@@@@@@+++@@@@@#########",
+"#####@@@@#####++#######@@@@#####",
+"##@@@######++++############@@@##",
+"#@#########+##################@#",
+"@##########+###################@",
+"#########@@+@@@@@@@@@@@#########",
+"#####@@@@##++##########@@@@#####",
+"##@@@#######+++############@@@##",
+"#@#############++++###########@#",
+"@#################+++##########@",
+"#########@@@@@@@@@@@+++#########",
+"#####@@@@#############++@@@#####",
+"##@@@##################++##@@@##",
+"#@######################+#####@#",
+"@#######################+######@",
+"#########$$$$$$$$$$$$$$#+#######",
+"#####$$$$%%%%%%&&&&&&&&$$$$$####",
+"##$$$%%%%%%%%%&&&&&&&&&&&&&$$$##",
+"#$%%%%%%%%%%&&&&&&&&&&&&&&&&&&$#",
+"$%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&$"};
diff --git a/share/metview/icons/VPROFILE.xpm b/share/metview/icons_mv5/VPROFILE.xpm
similarity index 100%
copy from share/metview/icons/VPROFILE.xpm
copy to share/metview/icons_mv5/VPROFILE.xpm
diff --git a/share/metview/icons_mv5/VPROFVIEW.xpm b/share/metview/icons_mv5/VPROFVIEW.xpm
new file mode 100755
index 0000000..8ef00e8
--- /dev/null
+++ b/share/metview/icons_mv5/VPROFVIEW.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char * VPROFVIEW_xpm[] = {
+"32 32 7 1",
+" 	c None",
+".	c #9F9F9F",
+"+	c #FFFFFF",
+"@	c #7F7F7F",
+"#	c #EC92EB",
+"$	c #BABABA",
+"%	c #E9E9FB",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+............................+.",
+".+@@@+++++++##+++++++++++++++.+.",
+".+. at ++++++++++#++++++++++++++.+.",
+".+. at ++++++++++##+++++++++++++.+.",
+".+@@@++++++++++###+++++++++++.+.",
+".+. at +++++$$$$$$$$#$$$$$++++++.+.",
+".+. at +$$$$%%%%%%%%#%%%%%$$$$++.+.",
+".+@@@%%%%%%%%%%%%#%%%%%%%%%$$.+.",
+".+.@%%%%%%%%%%%%%#%%%%%%%%%%%.+.",
+".+.@%%%%%%%%%%%%%#%%%%%%%%%%%.+.",
+".+.@@%%%%$$$$$$###$$$$$%%%%%%.+.",
+".+.@%$$$$%%%%%##%%%%%%%$$$$%%.+.",
+".+.@$%%%%%%####%%%%%%%%%%%%$$.+.",
+".+@@@%%%%%%#%%%%%%%%%%%%%%%%%.+.",
+".+.@%%%%%%%#%%%%%%%%%%%%%%%%%.+.",
+".+.@%%%%%$$#$$$$$$$$$$$%%%%%%.+.",
+".+@@@$$$$%%##%%%%%%%%%%$$$$%%.+.",
+".+.@$%%%%%%%###%%%%%%%%%%%%$$.+.",
+".+.@%%%%%%%%%%%####%%%%%%%%%%.+.",
+".+@@@%%%%%%%%%%%%%###%%%%%%%%.+.",
+".+.@%%%%%$$$$$$$$$$$###%%%%%%.+.",
+".+.@%$$$$%%%%%%%%%%%%%##$$$%%.+.",
+".+@@@%%%%%%%%%%%%%%%%%%##%%$$.+.",
+".+.@%%%%%%%%%%%%%%%%%%%%#%%%%.+.",
+".+.@%%@%%@%%@%%@%%@%%@%%@%%@%.+.",
+".+.@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+.... at ..@.. at ..@.. at ..@.. at ..@..+.",
+".++++++++++++++++++++++++++++++.",
+".++++++++++++++++++++++++++++++.",
+"@..............................."};
diff --git a/share/metview/icons_mv5/WASTEBASKET.svg b/share/metview/icons_mv5/WASTEBASKET.svg
new file mode 100644
index 0000000..eaa90d1
--- /dev/null
+++ b/share/metview/icons_mv5/WASTEBASKET.svg
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64"
+   height="64"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="WASTEBASKET.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/WASTEBASKET.png"
+   inkscape:export-xdpi="45"
+   inkscape:export-ydpi="45"
+   style="display:inline">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective3243" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.65625"
+     inkscape:cx="17.444043"
+     inkscape:cy="32"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     width="64px"
+     height="64px"
+     inkscape:window-width="947"
+     inkscape:window-height="848"
+     inkscape:window-x="422"
+     inkscape:window-y="74"
+     showgrid="false"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="circle">
+    <rect
+       style="fill:#000000;fill-opacity:1;stroke:#b1bac5;stroke-width:0.86799824;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect5123"
+       width="38.037666"
+       height="48.718452"
+       x="12.923405"
+       y="13.194147" />
+    <rect
+       style="fill:#f2f2f8;fill-opacity:0.96408841;stroke:#b1bac5;stroke-width:0.94595301;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect6094"
+       width="5.3693538"
+       height="37.296696"
+       x="16.42034"
+       y="19.078545"
+       ry="3.0583265" />
+    <rect
+       style="fill:#f2f2f8;fill-opacity:0.96408841;stroke:#b1bac5;stroke-width:0.94595301;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect7065"
+       width="5.3693538"
+       height="37.296696"
+       x="28.940695"
+       y="19.078545"
+       ry="3.0583265" />
+    <rect
+       style="fill:#f2f2f8;fill-opacity:0.96408841;stroke:#b1bac5;stroke-width:0.94595301;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect7067"
+       width="5.3693538"
+       height="37.296696"
+       x="41.461044"
+       y="19.078545"
+       inkscape:export-xdpi="45"
+       inkscape:export-ydpi="45"
+       ry="3.0583265" />
+    <rect
+       style="fill:#000000;fill-opacity:1;stroke:#b1bac5;stroke-width:0.98917061;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect7069"
+       width="43.87376"
+       height="5.784102"
+       x="9.8898354"
+       y="6.7806787"
+       ry="2.892051" />
+    <rect
+       style="fill:#000000;fill-opacity:1;stroke:#b1bac5;stroke-width:0.98917061;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect7071"
+       width="15.307067"
+       height="3.1234152"
+       x="24.057661"
+       y="2.7310138"
+       ry="1.5617076" />
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/WCS_CLIENT.svg b/share/metview/icons_mv5/WCS_CLIENT.svg
new file mode 100644
index 0000000..0be55bf
--- /dev/null
+++ b/share/metview/icons_mv5/WCS_CLIENT.svg
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg3688"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WCS_CLIENT.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="WMS_CLIENT.png"
+   inkscape:export-xdpi="45"
+   inkscape:export-ydpi="45"
+   version="1.1">
+  <defs
+     id="defs3690">
+    <linearGradient
+       id="linearGradient4292">
+      <stop
+         style="stop-color:#e4a312;stop-opacity:1"
+         offset="0"
+         id="stop4294" />
+      <stop
+         id="stop4308"
+         offset="0.5"
+         style="stop-color:#dfae71;stop-opacity:1" />
+      <stop
+         style="stop-color:#ccd6c8;stop-opacity:1;"
+         offset="1"
+         id="stop4296" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4275">
+      <stop
+         style="stop-color:#c5e9eb;stop-opacity:1;"
+         offset="0"
+         id="stop4277" />
+      <stop
+         style="stop-color:#c5e9eb;stop-opacity:0;"
+         offset="1"
+         id="stop4279" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4229">
+      <stop
+         style="stop-color:#69c5b5;stop-opacity:1"
+         offset="0"
+         id="stop4231" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4233" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4221">
+      <stop
+         style="stop-color:#7cc1b3;stop-opacity:1"
+         offset="0"
+         id="stop4223" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4225" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3678">
+      <stop
+         style="stop-color:#d9dce6;stop-opacity:1;"
+         offset="0"
+         id="stop3680" />
+      <stop
+         style="stop-color:#324060;stop-opacity:1;"
+         offset="1"
+         id="stop3682" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient3684"
+       x1="14.5655"
+       y1="32.444444"
+       x2="61.4345"
+       y2="32.444444"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.4153207,0.625)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4221"
+       id="linearGradient4227"
+       x1="7.4365482"
+       y1="14.912783"
+       x2="17.436548"
+       y2="14.912783"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4229"
+       id="linearGradient4235"
+       x1="2.3853253"
+       y1="34.659899"
+       x2="8.3853253"
+       y2="34.659899"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4275"
+       id="linearGradient4283"
+       x1="7.75"
+       y1="34.875"
+       x2="34.875"
+       y2="34.875"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4292"
+       id="linearGradient4298"
+       x1="22.578678"
+       y1="19.313492"
+       x2="22.57868"
+       y2="47.827412"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.6692699,0,0,1.4331683,9.6998665,-1.8254253)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="12.3125"
+     inkscape:cx="29.132049"
+     inkscape:cy="32"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="1001"
+     inkscape:window-x="1952"
+     inkscape:window-y="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3709" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer4"
+     inkscape:label="inner"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#linearGradient4283);fill-opacity:1;stroke:none;stroke-width:1.18171751;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="path4257"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="M 34.875 34.875 A 13.5625 22.28125 0 1 1  7.75,34.875 A 13.5625 22.28125 0 1 1  34.875 34.875 z"
+       transform="matrix(2.1392713,2.4415209e-2,0,1.3020788,-13.70766,-13.686692)" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="map"
+     inkscape:groupmode="layer"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       style="fill:url(#linearGradient3684);fill-opacity:1;fill-rule:evenodd;stroke:#2f642a;stroke-width:0.86900002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 44.415321,6.625 L 44.415321,9.625 L 43.415321,9.625 L 41.415321,9.625 C 41.415321,9.625 41.415321,9.625 40.415321,8.625 C 39.415321,7.625 37.415321,9.625 37.415321,9.625 L 36.415321,10.625 C 36.415321,10.625 34.415321,9.625 32.415321,13.625 C 30.415321,17.625 33.415321,14.625 33.415321,14.625 L 35.415321,13.625 L 35.415321,15.625 L 34.415321,17.625 L 33.415321,18.625 L 31.415321,17.625 L 29.415321,16.625 L 28.415321,16.625 L 28.415321,17.625 L 26.415321,18.625 L 25.415321,18. [...]
+       id="path3662" />
+    <path
+       style="fill:url(#linearGradient4227);fill-opacity:1;fill-rule:evenodd;stroke:#19691e;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 13.936548,10.412783 L 9.9365482,13.412783 L 7.9365482,18.412783 L 8.9365482,19.412783 L 9.9365482,19.412783 L 11.936548,18.412783 L 13.936548,17.412783 L 15.936548,15.412783 L 16.936548,13.412783 L 16.936548,12.412783 L 16.936548,11.412783 L 13.936548,10.412783 z "
+       id="path3656"
+       sodipodi:nodetypes="cccccccccccc" />
+    <path
+       style="fill:url(#linearGradient4235);fill-opacity:1;fill-rule:evenodd;stroke:#2a611e;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 4.8228253,29.943679 C 4.2857159,29.992507 3.8853253,30.381179 3.8853253,30.381179 L 2.8853253,34.381179 L 4.8853253,39.381179 L 4.8853253,38.381179 L 5.8853253,36.381179 L 6.8853253,35.381179 L 7.8853253,33.381179 L 7.8853253,32.381179 L 6.8853253,31.381179 C 6.8853253,31.381179 6.8853253,31.381179 5.8853253,30.381179 C 5.5103253,30.006179 5.1450909,29.914382 4.8228253,29.943679 z "
+       id="path3660"
+       sodipodi:nodetypes="ccccccccccsc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#3d6689;stroke-width:1.18171751;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="path2883"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="M 34.875 34.875 A 13.5625 22.28125 0 1 1  7.75,34.875 A 13.5625 22.28125 0 1 1  34.875 34.875 z"
+       transform="matrix(2.1392713,2.4415209e-2,0,1.3020788,-13.418785,-13.599216)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="arrow"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient4298);fill-opacity:1;fill-rule:evenodd;stroke:#8e6f2a;stroke-width:1.34681761px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 41.210335,32.420544 L 41.178416,46.902852 L 34.673409,46.902852 L 47.364239,61.326591 L 60.106142,46.902852 L 53.652201,46.902852 L 53.652201,32.303397 L 41.210335,32.420544 z "
+       id="path4290"
+       sodipodi:nodetypes="cccccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="Text box"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:#d8d7d5;fill-opacity:0.62121211;fill-rule:evenodd;stroke:#3c3c3c;stroke-width:1.30529547;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3187"
+       width="50.694908"
+       height="19.100998"
+       x="11.652648"
+       y="7.2463541"
+       ry="1.3877366" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Title"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:17.45768113px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:#1e6b98;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Sans"
+       x="14.945991"
+       y="22.059835"
+       id="text2211"
+       sodipodi:linespacing="100%"
+       transform="scale(0.9698713,1.0310647)"><tspan
+         sodipodi:role="line"
+         id="tspan2197"
+         x="14.945991"
+         y="22.059835">WCS</tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons_mv5/WEBACCESS.xpm b/share/metview/icons_mv5/WEBACCESS.xpm
new file mode 100755
index 0000000..ceeb71b
--- /dev/null
+++ b/share/metview/icons_mv5/WEBACCESS.xpm
@@ -0,0 +1,643 @@
+/* XPM */
+static char * WEBACCESS_xpm[] = {
+"32 32 608 2",
+"  	c None",
+". 	c #FFFFFF",
+"+ 	c #10217B",
+"@ 	c #1A73C7",
+"# 	c #409FA8",
+"$ 	c #6DB9D2",
+"% 	c #9EDBE7",
+"& 	c #A3DDEA",
+"* 	c #90C9F7",
+"= 	c #1D79D0",
+"- 	c #3672CA",
+"; 	c #0E6EA1",
+"> 	c #331E7E",
+", 	c #166DC5",
+"' 	c #80B7CA",
+") 	c #81B9C9",
+"! 	c #83C0EC",
+"~ 	c #6FBAD3",
+"{ 	c #9CDAE6",
+"] 	c #A3DEEA",
+"^ 	c #98D5E7",
+"/ 	c #6AB4D5",
+"( 	c #5FABD0",
+"_ 	c #5EA7CA",
+": 	c #1B6F99",
+"< 	c #204B67",
+"[ 	c #3168C5",
+"} 	c #1790CA",
+"| 	c #7FB8E9",
+"1 	c #69B4D1",
+"2 	c #6FB6CF",
+"3 	c #6EB5CF",
+"4 	c #73BAD3",
+"5 	c #9CD9E6",
+"6 	c #A3DEE9",
+"7 	c #9BD9E6",
+"8 	c #71BBD5",
+"9 	c #87C1EE",
+"0 	c #639AC9",
+"a 	c #61739C",
+"b 	c #C6B06A",
+"c 	c #D4D318",
+"d 	c #303A45",
+"e 	c #EC9A47",
+"f 	c #07629B",
+"g 	c #2F6CC4",
+"h 	c #5AA7CC",
+"i 	c #69AFC8",
+"j 	c #75B1C4",
+"k 	c #74AFBF",
+"l 	c #8EA0A4",
+"m 	c #72B7CE",
+"n 	c #9BD8E5",
+"o 	c #A0DCE7",
+"p 	c #99D8E5",
+"q 	c #71BAD4",
+"r 	c #6BB3D1",
+"s 	c #689BCA",
+"t 	c #5B91B0",
+"u 	c #527789",
+"v 	c #5C5C3E",
+"w 	c #E4A21D",
+"x 	c #EAB115",
+"y 	c #F7A111",
+"z 	c #E48C3B",
+"A 	c #DF7427",
+"B 	c #2E4764",
+"C 	c #244B92",
+"D 	c #2A7298",
+"E 	c #6392AC",
+"F 	c #6F96A5",
+"G 	c #D69950",
+"H 	c #C89B63",
+"I 	c #5C8BA6",
+"J 	c #8DC5CA",
+"K 	c #8FCCD1",
+"L 	c #72CDF1",
+"M 	c #8DCAD3",
+"N 	c #6EB9D2",
+"O 	c #6DA6CF",
+"P 	c #89C0CA",
+"Q 	c #5082A6",
+"R 	c #426E71",
+"S 	c #C7C760",
+"T 	c #E0D957",
+"U 	c #F1E370",
+"V 	c #F8AD13",
+"W 	c #F7A50D",
+"X 	c #CF9080",
+"Y 	c #DE7632",
+"Z 	c #DB6E21",
+"` 	c #D99960",
+" .	c #CF9A67",
+"..	c #D09C67",
+"+.	c #D39D63",
+"@.	c #D6812E",
+"#.	c #CE8438",
+"$.	c #58776B",
+"%.	c #6AB0C0",
+"&.	c #69C6CA",
+"*.	c #6BCACE",
+"=.	c #6BC9CF",
+"-.	c #6BBAD3",
+";.	c #6DC7ED",
+">.	c #8EC8CE",
+",.	c #8CC4CA",
+"'.	c #65B5BD",
+").	c #414E71",
+"!.	c #404363",
+"~.	c #323341",
+"{.	c #DFD81B",
+"].	c #F4E94F",
+"^.	c #FDEF06",
+"/.	c #D15114",
+"(.	c #D76A17",
+"_.	c #E58934",
+":.	c #F59254",
+"<.	c #E58E3B",
+"[.	c #DF7B20",
+"}.	c #DD791C",
+"|.	c #DE7617",
+"1.	c #CC741E",
+"2.	c #579287",
+"3.	c #68ACBF",
+"4.	c #67C6CB",
+"5.	c #67C8CC",
+"6.	c #67B9CF",
+"7.	c #69B9D1",
+"8.	c #89C8CF",
+"9.	c #6DC8CF",
+"0.	c #6DBACE",
+"a.	c #85BAC3",
+"b.	c #3D4E7A",
+"c.	c #172F62",
+"d.	c #1B2368",
+"e.	c #4D5262",
+"f.	c #E4C416",
+"g.	c #F2D90D",
+"h.	c #FDD10D",
+"i.	c #FFF785",
+"j.	c #C8490F",
+"k.	c #E0781C",
+"l.	c #E1761E",
+"m.	c #E07719",
+"n.	c #E1761F",
+"o.	c #DF751C",
+"p.	c #DF731A",
+"q.	c #DE7212",
+"r.	c #D46F16",
+"s.	c #B75222",
+"t.	c #78A2AB",
+"u.	c #77ABB6",
+"v.	c #71B1BE",
+"w.	c #6BC1C5",
+"x.	c #69B8CF",
+"y.	c #69B8D0",
+"z.	c #66C5CA",
+"A.	c #67B6CC",
+"B.	c #64AFC8",
+"C.	c #5FA4C2",
+"D.	c #37699A",
+"E.	c #4981AB",
+"F.	c #5388A4",
+"G.	c #5A785F",
+"H.	c #E6B111",
+"I.	c #F6BE15",
+"J.	c #FEF45A",
+"K.	c #E8923E",
+"L.	c #E17A1B",
+"M.	c #DE7413",
+"N.	c #DF731B",
+"O.	c #DF7319",
+"P.	c #DA6C11",
+"Q.	c #C4511C",
+"R.	c #D36727",
+"S.	c #CA6D34",
+"T.	c #BD6F3C",
+"U.	c #68BABE",
+"V.	c #62B0CA",
+"W.	c #62B0CB",
+"X.	c #5EACC7",
+"Y.	c #3E9AA5",
+"Z.	c #59A5C2",
+"`.	c #59A3C2",
+" +	c #4E8EB5",
+".+	c #4F90B7",
+"++	c #548EAE",
+"@+	c #607F8D",
+"#+	c #E09A1F",
+"$+	c #F3AA19",
+"%+	c #FDF056",
+"&+	c #E69038",
+"*+	c #E38020",
+"=+	c #DE7819",
+"-+	c #DD7416",
+";+	c #DD6F1A",
+">+	c #CA5319",
+",+	c #E9CB98",
+"'+	c #D49B68",
+")+	c #535472",
+"!+	c #5B94B2",
+"~+	c #5DA9C7",
+"{+	c #1E5584",
+"]+	c #5299BD",
+"^+	c #336A99",
+"/+	c #114979",
+"(+	c #174E7D",
+"_+	c #4D8EB5",
+":+	c #5191B8",
+"<+	c #528BAD",
+"[+	c #998055",
+"}+	c #A57C41",
+"|+	c #F9EB76",
+"1+	c #FBE016",
+"2+	c #F8AB0D",
+"3+	c #E4862D",
+"4+	c #E9943E",
+"5+	c #DE7618",
+"6+	c #DE731D",
+"7+	c #DA802D",
+"8+	c #C0956A",
+"9+	c #5E83A0",
+"0+	c #5A92B3",
+"a+	c #62AAC8",
+"b+	c #59A2C3",
+"c+	c #154A9A",
+"d+	c #293D72",
+"e+	c #093C8E",
+"f+	c #06396E",
+"g+	c #3A6D9A",
+"h+	c #4988B0",
+"i+	c #4D8DB4",
+"j+	c #4E86A9",
+"k+	c #323D4E",
+"l+	c #E3C064",
+"m+	c #F9F078",
+"n+	c #FBE117",
+"o+	c #FBDD05",
+"p+	c #ECA35A",
+"q+	c #E38022",
+"r+	c #E07617",
+"s+	c #DF741D",
+"t+	c #E28129",
+"u+	c #D48B3F",
+"v+	c #56748B",
+"w+	c #63A4BE",
+"x+	c #5595BC",
+"y+	c #63ADCC",
+"z+	c #5CA5C7",
+"A+	c #154A7C",
+"B+	c #093A71",
+"C+	c #05356B",
+"D+	c #04366B",
+"E+	c #0B3D6F",
+"F+	c #437DA7",
+"G+	c #4681AA",
+"H+	c #154572",
+"I+	c #4C7383",
+"J+	c #E2E224",
+"K+	c #FEF577",
+"L+	c #F8C61A",
+"M+	c #FDCE07",
+"N+	c #E48937",
+"O+	c #E27E29",
+"P+	c #E27B1C",
+"Q+	c #DC701A",
+"R+	c #D96B19",
+"S+	c #D66718",
+"T+	c #D26A1E",
+"U+	c #D2843B",
+"V+	c #C49155",
+"W+	c #4A7476",
+"X+	c #508FB3",
+"Y+	c #5495BC",
+"Z+	c #619AC8",
+"`+	c #5D95C4",
+" @	c #4785AE",
+".@	c #295C8D",
+"+@	c #043367",
+"@@	c #023064",
+"#@	c #053366",
+"$@	c #0D285B",
+"%@	c #132653",
+"&@	c #466C90",
+"*@	c #55755D",
+"=@	c #EAC81B",
+"-@	c #FEF554",
+";@	c #FEF154",
+">@	c #F7BC0F",
+",@	c #C1240E",
+"'@	c #E17F2E",
+")@	c #DE7515",
+"!@	c #AA3C07",
+"~@	c #A51604",
+"{@	c #9D1D0F",
+"]@	c #57655D",
+"^@	c #547992",
+"/@	c #4F7C9F",
+"(@	c #4F8DB2",
+"_@	c #5191B9",
+":@	c #5392BA",
+"<@	c #5291B9",
+"[@	c #4B87B0",
+"}@	c #103F71",
+"|@	c #0A2459",
+"1@	c #062054",
+"2@	c #071E52",
+"3@	c #061543",
+"4@	c #172449",
+"5@	c #67667D",
+"6@	c #BF8C2E",
+"7@	c #ECB712",
+"8@	c #FDF32F",
+"9@	c #FEF451",
+"0@	c #F9AB14",
+"a@	c #BE1D0B",
+"b@	c #D96916",
+"c@	c #DD751D",
+"d@	c #DF741B",
+"e@	c #DE711B",
+"f@	c #D76717",
+"g@	c #A61604",
+"h@	c #B52308",
+"i@	c #AE2C11",
+"j@	c #4F5F5D",
+"k@	c #4D7697",
+"l@	c #4979A3",
+"m@	c #4A7CA6",
+"n@	c #508EB5",
+"o@	c #528EB5",
+"p@	c #508CB3",
+"q@	c #4674A0",
+"r@	c #2F3C6D",
+"s@	c #0B2356",
+"t@	c #071C50",
+"u@	c #071A4E",
+"v@	c #081644",
+"w@	c #212845",
+"x@	c #D5CA58",
+"y@	c #ED9D14",
+"z@	c #F5A80C",
+"A@	c #FDED09",
+"B@	c #FBE013",
+"C@	c #FECE34",
+"D@	c #BC1C09",
+"E@	c #D76816",
+"F@	c #E4862E",
+"G@	c #DF741C",
+"H@	c #CE5710",
+"I@	c #BE2F0B",
+"J@	c #C03709",
+"K@	c #C63C09",
+"L@	c #C66A27",
+"M@	c #556B82",
+"N@	c #5C7791",
+"O@	c #5D7993",
+"P@	c #5D7B94",
+"Q@	c #5E7B94",
+"R@	c #6E7091",
+"S@	c #4B6C8E",
+"T@	c #476A8E",
+"U@	c #111A45",
+"V@	c #051040",
+"W@	c #050F3F",
+"X@	c #0A1745",
+"Y@	c #45617B",
+"Z@	c #DC9320",
+"`@	c #F6A111",
+" #	c #F6B508",
+".#	c #FAD605",
+"+#	c #F9AF14",
+"@#	c #FEEE7B",
+"##	c #A81506",
+"$#	c #DD7122",
+"%#	c #DF751D",
+"&#	c #DA6A18",
+"*#	c #C6420B",
+"=#	c #CF450A",
+"-#	c #D9540A",
+";#	c #D46A1D",
+">#	c #CD6F26",
+",#	c #CA732C",
+"'#	c #CB732D",
+")#	c #CA712D",
+"!#	c #BF6E30",
+"~#	c #A79E7D",
+"{#	c #805435",
+"]#	c #0E1640",
+"^#	c #010435",
+"/#	c #090F3F",
+"(#	c #47637B",
+"_#	c #E3993C",
+":#	c #FCA52C",
+"<#	c #F7B60C",
+"[#	c #F6B60D",
+"}#	c #F8AA19",
+"|#	c #FDCA5C",
+"1#	c #BE1E0D",
+"2#	c #DE7624",
+"3#	c #DF7515",
+"4#	c #DD6E19",
+"5#	c #D34F0D",
+"6#	c #DD560A",
+"7#	c #DC570A",
+"8#	c #AE4006",
+"9#	c #D56818",
+"0#	c #D46A18",
+"a#	c #D46A19",
+"b#	c #CE681C",
+"c#	c #AB4218",
+"d#	c #251716",
+"e#	c #110E35",
+"f#	c #080633",
+"g#	c #030436",
+"h#	c #0E0B34",
+"i#	c #181D43",
+"j#	c #534C57",
+"k#	c #E4DB39",
+"l#	c #FCE74B",
+"m#	c #F8AA13",
+"n#	c #F7BB17",
+"o#	c #FDED79",
+"p#	c #F9A71D",
+"q#	c #E28330",
+"r#	c #DE7415",
+"s#	c #DF7119",
+"t#	c #DF6E18",
+"u#	c #DF5B0B",
+"v#	c #DD5A0A",
+"w#	c #DB6011",
+"x#	c #A21E07",
+"y#	c #983809",
+"z#	c #8F350B",
+"A#	c #90370D",
+"B#	c #8A3510",
+"C#	c #3D2E4F",
+"D#	c #0C0632",
+"E#	c #010131",
+"F#	c #010133",
+"G#	c #0A0835",
+"H#	c #3D3351",
+"I#	c #C37D1B",
+"J#	c #64564D",
+"K#	c #EACF13",
+"L#	c #FADC14",
+"M#	c #F9B11D",
+"N#	c #FEF261",
+"O#	c #FFF683",
+"P#	c #DC722D",
+"Q#	c #DD6F1B",
+"R#	c #DC6D12",
+"S#	c #DE7112",
+"T#	c #DE7012",
+"U#	c #DF7017",
+"V#	c #DA6D14",
+"W#	c #CF6519",
+"X#	c #3C1A28",
+"Y#	c #2A142C",
+"Z#	c #241233",
+"`#	c #372C59",
+" $	c #11093B",
+".$	c #060337",
+"+$	c #020133",
+"@$	c #0B0632",
+"#$	c #1D1233",
+"$$	c #97602E",
+"%$	c #D28511",
+"&$	c #EB990D",
+"*$	c #F3BE07",
+"=$	c #F8AD11",
+"-$	c #FDF18F",
+";$	c #FFFA5F",
+">$	c #FFFF63",
+",$	c #C1310C",
+"'$	c #CE530E",
+")$	c #DB6910",
+"!$	c #DB6F14",
+"~$	c #DF7318",
+"{$	c #D56E1A",
+"]$	c #CB691C",
+"^$	c #BC6720",
+"/$	c #312C49",
+"($	c #423377",
+"_$	c #3C1059",
+":$	c #190C33",
+"<$	c #190D31",
+"[$	c #27142F",
+"}$	c #BF631F",
+"|$	c #D26F1D",
+"1$	c #DF7D18",
+"2$	c #E69007",
+"3$	c #F3AF0C",
+"4$	c #F7AC16",
+"5$	c #FEF415",
+"6$	c #FFFC14",
+"7$	c #BA1307",
+"8$	c #CA3203",
+"9$	c #BF2009",
+"0$	c #D96818",
+"a$	c #DD6F19",
+"b$	c #DE7213",
+"c$	c #DD7212",
+"d$	c #D56F1C",
+"e$	c #CD6D22",
+"f$	c #C46726",
+"g$	c #A1582A",
+"h$	c #743A30",
+"i$	c #BC611F",
+"j$	c #CB681D",
+"k$	c #D46E1C",
+"l$	c #DE721B",
+"m$	c #DF7317",
+"n$	c #E47E06",
+"o$	c #E88D0D",
+"p$	c #FDED66",
+"q$	c #FBE40D",
+"r$	c #FBE605",
+"s$	c #BA0F07",
+"t$	c #C82E03",
+"u$	c #BE1B0A",
+"v$	c #DD7022",
+"w$	c #DC6B19",
+"x$	c #DC6C12",
+"y$	c #DA6C12",
+"z$	c #DC6D10",
+"A$	c #DC7011",
+"B$	c #DC7012",
+"C$	c #DC741D",
+"D$	c #D7701D",
+"E$	c #D76F1D",
+"F$	c #D96F1C",
+"G$	c #DF711B",
+"H$	c #DF7118",
+"I$	c #E2640A",
+"J$	c #E47208",
+"K$	c #FAE60A",
+"L$	c #FDED28",
+"M$	c #FDD00A",
+"N$	c #B80D07",
+"O$	c #BA1208",
+"P$	c #BD1B0C",
+"Q$	c #DB702A",
+"R$	c #C0200B",
+"S$	c #CC3805",
+"T$	c #DA6816",
+"U$	c #C7470E",
+"V$	c #DB6C19",
+"W$	c #DF761B",
+"X$	c #E07922",
+"Y$	c #E07B24",
+"Z$	c #E0640A",
+"`$	c #E57F06",
+" %	c #F7CE04",
+".%	c #FAE704",
+"+%	c #F5BB07",
+"@%	c #F7A30B",
+"#%	c #9F0202",
+"$%	c #B70B07",
+"%%	c #BA1109",
+"&%	c #BB1309",
+"*%	c #BB1207",
+"=%	c #BC1608",
+"-%	c #BF2E0C",
+";%	c #DA7229",
+">%	c #C5410E",
+",%	c #C5430D",
+"'%	c #DA6A19",
+")%	c #DC6D19",
+"!%	c #DD7118",
+"~%	c #D7770A",
+"{%	c #E28B07",
+"]%	c #F0AB05",
+"^%	c #F4CE06",
+"/%	c #E89D07",
+"(%	c #E79707",
+"_%	c #B80B07",
+":%	c #B80F07",
+"<%	c #BC240B",
+"[%	c #BB1709",
+"}%	c #BB1909",
+"|%	c #BC2A0A",
+"1%	c #C23C0B",
+"2%	c #C5430B",
+"3%	c #D0580F",
+"4%	c #D5670D",
+"5%	c #D67709",
+"6%	c #E28C07",
+"7%	c #D59A02",
+"8%	c #E49408",
+"9%	c #E08028",
+"0%	c #B60B07",
+"a%	c #A20302",
+"b%	c #BA1D09",
+"c%	c #BA1E09",
+"d%	c #BA2209",
+"e%	c #BB2709",
+"f%	c #C23A09",
+"g%	c #CD480A",
+"h%	c #D05A0E",
+"i%	c #D66A0B",
+"j%	c #E18B07",
+"k%	c #DF7916",
+"l%	c #B81007",
+"m%	c #BA2509",
+"n%	c #C13909",
+"o%	c #CD460A",
+"p%	c #CF4B0B",
+"q%	c #DA7118",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . + @ # $ % & * = - ; . . . . . . . . . . . . ",
+". . . . . . . . > , ' ) ! ~ { ] ^ / ( _ : < . . . . . . . . . . ",
+". . . . . . . [ } | 1 2 3 4 5 6 7 8 9 0 a b c d . . . . . . . . ",
+". . . e . . f g h i j k l m n o p q r s t u v w x y . . . . . . ",
+". . . z A B C D E F G H I J K L M N O P Q R S T U V W . . . . . ",
+". . X Y Z `  ...+. at .#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^.. . . . . ",
+". . /.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.. . . ",
+". . j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.. . . ",
+". . K.L.M.p.N.N.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++ at +#+$+%+. . . ",
+". &+*+=+-+N.N.N.N.N.;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+. . ",
+". 3+4+5+p.N.N.N.N.N.6+7+8+9+0+a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+. . ",
+". p+q+r+N.N.N.N.N.s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+. . ",
+". N+O+P+p.N.Q+R+S+T+U+V+W+X+Y+Z+`+ @. at +@@@#@$@%@&@*@=@-@;@>@. . ",
+". ,@'@)@N.N.R+!@~@{@]@^@/@(@_@:@<@[@}@|@1 at 2@3 at 4@5 at 6@7 at 8@9 at 0@. . ",
+". a at b@c at d@e at f@g at h@i at j@k at l@m at n@o at p@q at r@s at t@u at v@w at x@y at z@A at B@C at . . ",
+". D at E@F at G@e at H@I at J@K at L@M at N@O at P@Q at R@S at T@U at V@W at X@Y at Z@`@ #.#+#@#. . ",
+". ##$#%#d at e@&#*#=#-#;#>#,#'#'#)#!#~#{#]#^#^#/#(#_#:#<#[#}#|#. . ",
+". 1#2#3#p.N.4#5#6#7#8#9#9#0#a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#. . ",
+". . q#r#O.p.s#t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#. . . ",
+". . P#Q#R#S#O.s#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$%$&$*$=$-$;$>$. . . ",
+". . . ,$'$)$!$O.q.~$q.{$]$^$/$($_$:$<$[$}$|$1$2$3$4$5$6$. . . . ",
+". . . 7$8$9$0$a$b$q.~$q.c$d$e$f$g$h$i$j$k$l$m$n$o$p$q$r$. . . . ",
+". . . . s$t$u$v$w$x$y$z$A$B$-+C$D$E$F$l$G$H$I$J$K$L$M$. . . . . ",
+". . . . . N$O$P$Q$R$S$T$U$V$W$X$Y$N.N.p.~$Z$`$ %.%+%@%. . . . . ",
+". . . . . #%$%%%%%&%*%=%-%;%>%,%'%)%a$!%~%{%]%^%/%(%. . . . . . ",
+". . . . . . . _%$%$%$%:%<%[%}%|%1%2%3%4%5%6%7%8%9%. . . . . . . ",
+". . . . . . . . 0%a%0%N$b%:%c%d%e%f%g%h%i%j%k%. . . . . . . . . ",
+". . . . . . . . . . 0%N$N$N$N$l%m%n%o%p%q%. . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
diff --git a/share/metview/icons_mv5/WMS_CLIENT.svg b/share/metview/icons_mv5/WMS_CLIENT.svg
new file mode 100644
index 0000000..a8da615
--- /dev/null
+++ b/share/metview/icons_mv5/WMS_CLIENT.svg
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg3688"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WMS_CLIENT.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="WMS_CLIENT.png"
+   inkscape:export-xdpi="45"
+   inkscape:export-ydpi="45"
+   version="1.1">
+  <defs
+     id="defs3690">
+    <linearGradient
+       id="linearGradient4292">
+      <stop
+         style="stop-color:#e4a312;stop-opacity:1"
+         offset="0"
+         id="stop4294" />
+      <stop
+         id="stop4308"
+         offset="0.5"
+         style="stop-color:#dfae71;stop-opacity:1" />
+      <stop
+         style="stop-color:#ccd6c8;stop-opacity:1;"
+         offset="1"
+         id="stop4296" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4275">
+      <stop
+         style="stop-color:#c5e9eb;stop-opacity:1;"
+         offset="0"
+         id="stop4277" />
+      <stop
+         style="stop-color:#c5e9eb;stop-opacity:0;"
+         offset="1"
+         id="stop4279" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4229">
+      <stop
+         style="stop-color:#69c5b5;stop-opacity:1"
+         offset="0"
+         id="stop4231" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4233" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4221">
+      <stop
+         style="stop-color:#7cc1b3;stop-opacity:1"
+         offset="0"
+         id="stop4223" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4225" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3678">
+      <stop
+         style="stop-color:#d9dce6;stop-opacity:1;"
+         offset="0"
+         id="stop3680" />
+      <stop
+         style="stop-color:#324060;stop-opacity:1;"
+         offset="1"
+         id="stop3682" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3678"
+       id="linearGradient3684"
+       x1="14.5655"
+       y1="32.444444"
+       x2="61.4345"
+       y2="32.444444"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.4153207,0.625)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4221"
+       id="linearGradient4227"
+       x1="7.4365482"
+       y1="14.912783"
+       x2="17.436548"
+       y2="14.912783"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4229"
+       id="linearGradient4235"
+       x1="2.3853253"
+       y1="34.659899"
+       x2="8.3853253"
+       y2="34.659899"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4275"
+       id="linearGradient4283"
+       x1="7.75"
+       y1="34.875"
+       x2="34.875"
+       y2="34.875"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4292"
+       id="linearGradient4298"
+       x1="22.578678"
+       y1="19.313492"
+       x2="22.57868"
+       y2="47.827412"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.6692699,0,0,1.4331683,9.6998665,-1.8254253)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="12.3125"
+     inkscape:cx="29.132049"
+     inkscape:cy="32"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="1001"
+     inkscape:window-x="2083"
+     inkscape:window-y="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3709" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer4"
+     inkscape:label="inner"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#linearGradient4283);fill-opacity:1;stroke:none;stroke-width:1.18171751;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="path4257"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="M 34.875 34.875 A 13.5625 22.28125 0 1 1  7.75,34.875 A 13.5625 22.28125 0 1 1  34.875 34.875 z"
+       transform="matrix(2.1392713,2.4415209e-2,0,1.3020788,-13.70766,-13.686692)" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="map"
+     inkscape:groupmode="layer"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       style="fill:url(#linearGradient3684);fill-opacity:1;fill-rule:evenodd;stroke:#2f642a;stroke-width:0.86900002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 44.415321,6.625 L 44.415321,9.625 L 43.415321,9.625 L 41.415321,9.625 C 41.415321,9.625 41.415321,9.625 40.415321,8.625 C 39.415321,7.625 37.415321,9.625 37.415321,9.625 L 36.415321,10.625 C 36.415321,10.625 34.415321,9.625 32.415321,13.625 C 30.415321,17.625 33.415321,14.625 33.415321,14.625 L 35.415321,13.625 L 35.415321,15.625 L 34.415321,17.625 L 33.415321,18.625 L 31.415321,17.625 L 29.415321,16.625 L 28.415321,16.625 L 28.415321,17.625 L 26.415321,18.625 L 25.415321,18. [...]
+       id="path3662" />
+    <path
+       style="fill:url(#linearGradient4227);fill-opacity:1;fill-rule:evenodd;stroke:#19691e;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 13.936548,10.412783 L 9.9365482,13.412783 L 7.9365482,18.412783 L 8.9365482,19.412783 L 9.9365482,19.412783 L 11.936548,18.412783 L 13.936548,17.412783 L 15.936548,15.412783 L 16.936548,13.412783 L 16.936548,12.412783 L 16.936548,11.412783 L 13.936548,10.412783 z "
+       id="path3656"
+       sodipodi:nodetypes="cccccccccccc" />
+    <path
+       style="fill:url(#linearGradient4235);fill-opacity:1;fill-rule:evenodd;stroke:#2a611e;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 4.8228253,29.943679 C 4.2857159,29.992507 3.8853253,30.381179 3.8853253,30.381179 L 2.8853253,34.381179 L 4.8853253,39.381179 L 4.8853253,38.381179 L 5.8853253,36.381179 L 6.8853253,35.381179 L 7.8853253,33.381179 L 7.8853253,32.381179 L 6.8853253,31.381179 C 6.8853253,31.381179 6.8853253,31.381179 5.8853253,30.381179 C 5.5103253,30.006179 5.1450909,29.914382 4.8228253,29.943679 z "
+       id="path3660"
+       sodipodi:nodetypes="ccccccccccsc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="frame"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#3d6689;stroke-width:1.18171751;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="path2883"
+       sodipodi:cx="21.3125"
+       sodipodi:cy="34.875"
+       sodipodi:rx="13.5625"
+       sodipodi:ry="22.28125"
+       d="M 34.875 34.875 A 13.5625 22.28125 0 1 1  7.75,34.875 A 13.5625 22.28125 0 1 1  34.875 34.875 z"
+       transform="matrix(2.1392713,2.4415209e-2,0,1.3020788,-13.418785,-13.599216)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="arrow"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient4298);fill-opacity:1;fill-rule:evenodd;stroke:#8e6f2a;stroke-width:1.34681761px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 41.210335,32.420544 L 41.178416,46.902852 L 34.673409,46.902852 L 47.364239,61.326591 L 60.106142,46.902852 L 53.652201,46.902852 L 53.652201,32.303397 L 41.210335,32.420544 z "
+       id="path4290"
+       sodipodi:nodetypes="cccccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="Text box"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:#d8d7d5;fill-opacity:0.62121211;fill-rule:evenodd;stroke:#3c3c3c;stroke-width:1.30529547;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3187"
+       width="50.694908"
+       height="19.100998"
+       x="11.652648"
+       y="7.2463541"
+       ry="1.3877366" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Title"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:17.45768166px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#dc243a;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Sans"
+       x="14.945991"
+       y="22.059835"
+       id="text2211"
+       sodipodi:linespacing="100%"
+       transform="scale(0.9698713,1.0310647)"><tspan
+         sodipodi:role="line"
+         id="tspan2213"
+         x="14.945991"
+         y="22.059835">WMS</tspan></text>
+  </g>
+</svg>
diff --git a/share/metview/icons/XAVERAGE.xpm b/share/metview/icons_mv5/XAVERAGE.xpm
similarity index 100%
copy from share/metview/icons/XAVERAGE.xpm
copy to share/metview/icons_mv5/XAVERAGE.xpm
diff --git a/share/metview/icons_mv5/XSECT.xpm b/share/metview/icons_mv5/XSECT.xpm
new file mode 100755
index 0000000..e8dbb6d
--- /dev/null
+++ b/share/metview/icons_mv5/XSECT.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char * XSECT_xpm[] = {
+"32 32 7 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #BABABA",
+"@	c #E9E9FB",
+"#	c #7F7F7F",
+"$	c #92BEEC",
+"%	c #E4D8C2",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+".........++++++++++++++.........",
+".....++++@@@@@@@@@@@@@@++++.....",
+"..+++@@@@@@@@@@@@@@@@@@@@@@+++..",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@++++++++++++++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@++++++++++++++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@++++++++++++++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@##############@@@@@@@@@",
+"@@@@@####$$$$$$%%%%%%%%#####@@@@",
+"@@###$$$$$$$$$%%%%%%%%%%%%%###@@",
+"@#$$$$$$$$$$%%%%%%%%%%%%%%%%%%#@",
+"#$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%#"};
diff --git a/share/metview/icons/XSECTION.xpm b/share/metview/icons_mv5/XSECTION.xpm
similarity index 100%
copy from share/metview/icons/XSECTION.xpm
copy to share/metview/icons_mv5/XSECTION.xpm
diff --git a/share/metview/icons_mv5/XSECTVIEW.xpm b/share/metview/icons_mv5/XSECTVIEW.xpm
new file mode 100755
index 0000000..25ac071
--- /dev/null
+++ b/share/metview/icons_mv5/XSECTVIEW.xpm
@@ -0,0 +1,44 @@
+/* XPM */
+static char * XSECTVIEW_xpm[] = {
+"32 32 9 1",
+" 	c None",
+".	c #989898",
+"+	c #FFFFFF",
+"@	c #BEBEBE",
+"#	c #BABABA",
+"$	c #E9E9FB",
+"%	c #7F7F7F",
+"&	c #92BEEC",
+"*	c #E4D8C2",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++##############++++++ at +.",
+".+ at ++####$$$$$$$$$$$$$$####++ at +.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$##############$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$##############$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$##############$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$%%%%%%%%%%%%%%$$$$$$@+.",
+".+@$$%%%%&&&&&&********%%%%%$@+.",
+".+@%%&&&&&&&&&*************%%@+.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".++++++++++++++++++++++++++++++.",
+"................................"};
diff --git a/share/metview/icons_mv5/help_area.xpm b/share/metview/icons_mv5/help_area.xpm
new file mode 100755
index 0000000..e27d00c
--- /dev/null
+++ b/share/metview/icons_mv5/help_area.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * help_area_icon[] = {
+"16 16 3 1",
+" 	c #DADAF6F6FFFF",
+".	c #7C7CBDBD7676",
+"X	c #FFFF00000000",
+"   ...          ",
+"    ...         ",
+"     ...        ",
+"...   ...       ",
+".XXXXXXXXXXXXXX ",
+".X.   ...     X.",
+" X   .....  ..X.",
+" X  ..    ....X.",
+" X       .....X.",
+" X    ........X.",
+" X  ..........X.",
+" X    ........X.",
+" XXXXXXXXXXXXXX.",
+"      ..........",
+" ...............",
+"............... "};
diff --git a/share/metview/icons_mv5/help_line.xpm b/share/metview/icons_mv5/help_line.xpm
new file mode 100755
index 0000000..fb53e06
--- /dev/null
+++ b/share/metview/icons_mv5/help_line.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * help_line_icon[] = {
+"16 16 3 1",
+" 	c #DADAF6F6FFFF",
+".	c #7C7CBDBD7676",
+"X	c #FFFF00000000",
+"   ...          ",
+"  X ...         ",
+"  XX ...        ",
+"...XX ...       ",
+"... XX...       ",
+"...  XX....  . .",
+"     .XX..  ....",
+"    ...XX ......",
+"        XX......",
+"       ..XX.....",
+"     .....XX....",
+"       ....XX...",
+"       .....XX..",
+"      .......XX.",
+" ...............",
+"............... "};
diff --git a/share/metview/icons_mv5/help_map.xpm b/share/metview/icons_mv5/help_map.xpm
new file mode 100755
index 0000000..e27d00c
--- /dev/null
+++ b/share/metview/icons_mv5/help_map.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * help_area_icon[] = {
+"16 16 3 1",
+" 	c #DADAF6F6FFFF",
+".	c #7C7CBDBD7676",
+"X	c #FFFF00000000",
+"   ...          ",
+"    ...         ",
+"     ...        ",
+"...   ...       ",
+".XXXXXXXXXXXXXX ",
+".X.   ...     X.",
+" X   .....  ..X.",
+" X  ..    ....X.",
+" X       .....X.",
+" X    ........X.",
+" X  ..........X.",
+" X    ........X.",
+" XXXXXXXXXXXXXX.",
+"      ..........",
+" ...............",
+"............... "};
diff --git a/share/metview/icons_mv5/help_point.xpm b/share/metview/icons_mv5/help_point.xpm
new file mode 100755
index 0000000..8f48883
--- /dev/null
+++ b/share/metview/icons_mv5/help_point.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * help_point_icon[] = {
+"16 16 3 1",
+" 	c #DADAF6F6FFFF",
+".	c #7C7CBDBD7676",
+"X	c #FFFF00000000",
+"   ...          ",
+"    ...         ",
+"     ...        ",
+"...   ...       ",
+"...   ...       ",
+"...  ......  . .",
+"     .XXX.  ....",
+"    .XXXXX......",
+"     XXXXX......",
+"     XXXXX......",
+"     .XXX.......",
+"       .........",
+"       .........",
+"      ..........",
+" ...............",
+"............... "};
diff --git a/share/metview/icons_mv5/help_station.xpm b/share/metview/icons_mv5/help_station.xpm
new file mode 100755
index 0000000..c2ab228
--- /dev/null
+++ b/share/metview/icons_mv5/help_station.xpm
@@ -0,0 +1,46 @@
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 23 1",
+/* colors */
+"` c #000000",
+"a c #B23300",
+"b c #BFA468",
+"c c #00FFFF",
+"d c #00FF00",
+"e c #E06C00",
+"f c #333333",
+"g c #6CA632",
+"h c #BEBEBE",
+"i c #681000",
+"j c #00734B",
+"k c #7E7E7E",
+"l c #A76136",
+"m c #000080",
+"n c #D9B777",
+"o c #520300",
+"p c #B8F0B9",
+"q c #FFFFFF",
+"r c #947A4A",
+"s c #1CB8A6",
+"t c #7CBD76",
+"u c #FFE2AB",
+"v c #6C7B8B",
+/* pixels */
+"qqqqqqqqqqqqqqqq",
+"qqqqqqqqqqqqqqqq",
+"qqqqqqqppppqqqqq",
+"qqqqqpttttgqqqqq",
+"kkhqqggddgttqqqq",
+"qqqqqgttdggqqqqq",
+"qkkhqtptnnppqqqq",
+"qqqqqpqtqaqqqqqq",
+"qqqubqqqqnnqqqqq",
+"qqueebqqqqluqqqq",
+"queeeebqqquluqqq",
+"qrqhkqbuqqqalqqq",
+"hfkf`kfkkkkliohq",
+"fk`fkffkff``ffkq",
+"vsvsvsvjvjm``fhq",
+"cccccccccccqqqqq"
+};
diff --git a/src/AppMod/Makefile.am b/src/AppMod/Makefile.am
index c0280ca..9bc4fd5 100644
--- a/src/AppMod/Makefile.am
+++ b/src/AppMod/Makefile.am
@@ -1,16 +1,33 @@
+include $(top_srcdir)/aux_build/autotroll.mk
 
-bin_PROGRAMS = bin/savepool  bin/exampool  bin/mvnews  bin/mvmail  bin/checkdisplay
+bin_PROGRAMS = bin/savepool  bin/MvMailTo  bin/MvCompress bin/exampool  bin/mvnews  bin/mvmail  bin/checkdisplay
 
+bin_savepool_SOURCES  = savepool.cc savepool.h
+bin_savepool_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS)  -I../libMvQtGui 
+bin_savepool_LDFLAGS  = $(QT_LDFLAGS) $(QT_LIBS)  $(LDFLAGS) -L../../lib
+bin_savepool_LDADD    = -lMvQtGui $(QT_LIBS) $(LDADD) $(STANDARD_METVIEW_LIBS) $(FLIBS) $(FDBLIB) -lMars  
+bin_savepool_DEPENDENCIES = ../../lib/libMvQtGui.a
+AM_LDFLAGS = $(QT_LDFLAGS)
+
+bin_MvMailTo_SOURCES  = MvMailTo.cc
+bin_MvMailTo_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS)  -I../libMvQtGui 
+bin_MvMailTo_LDFLAGS  = $(QT_LDFLAGS) $(QT_LIBS)  $(LDFLAGS) -L../../lib
+bin_MvMailTo_LDADD    = -lMvQtGui $(QT_LIBS) $(LDADD) $(STANDARD_METVIEW_LIBS) $(FLIBS) $(FDBLIB) -lMars  
+bin_MvMailTo_DEPENDENCIES = ../../lib/libMvQtGui.a
+AM_LDFLAGS = $(QT_LDFLAGS)
+
+bin_MvCompress_SOURCES  = MvCompress.cc
+bin_MvCompress_CPPFLAGS = $(AM_CPPFLAGS)
+bin_MvCompress_LDFLAGS  = $(LDFLAGS) -L../../lib
+bin_MvCompress_LDADD    = $(LDADD) $(STANDARD_METVIEW_LIBS) $(FLIBS) $(FDBLIB)  
 
-bin_savepool_SOURCES  = savepool.cc
-bin_savepool_CPPFLAGS = $(MV_MOTIF_FLAGS)
-bin_savepool_LDADD    = $(MV_MOTIF_UTIL_LIB) $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB) $(FLIBS) $(FDBLIB)
 
 if METVIEW_MARS_ODB
-bin_savepool_LDFLAGS = $(ODB_LDFLAGS)
+bin_savepool_LDFLAGS += $(ODB_LDFLAGS)
 bin_savepool_LDADD += $(ODB_LIBS)
 endif
 
+nodist_bin_savepool_SOURCES = savepool.moc.cpp 
 
 
 bin_exampool_SOURCES  = examcback.cc exammain.c examwidgets.h
@@ -34,7 +51,6 @@ bin_checkdisplay_SOURCES  = checkdisplay.cc
 bin_checkdisplay_CPPFLAGS = $(MV_MOTIF_FLAGS)
 bin_checkdisplay_LDADD    = $(MV_MOTIF_UTIL_LIB) $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB)
 
-
 maill.c : maill.l
 	$(LEX) $(LFLAGS) maill.l
 	sed -e s/yy/mail/g < lex.yy.c > $@
@@ -55,7 +71,10 @@ clean-all: clean
 EXTRA_DIST = maill.l
 
 
-BUILT_SOURCES = bin
+BUILT_SOURCES = bin savepool.moc.cpp
 
 bin:
 	ln -s ../../bin bin
+
+clean:
+	-rm -f *.o *.moc.cpp *.qrc.cpp
diff --git a/src/AppMod/Makefile.in b/src/AppMod/Makefile.in
index ea689ad..57d275a 100644
--- a/src/AppMod/Makefile.in
+++ b/src/AppMod/Makefile.in
@@ -15,6 +15,41 @@
 
 @SET_MAKE@
 
+# Makerules.
+# This file is part of AutoTroll.
+# Copyright (C) 2006, 2007, 2009, 2010  Benoit Sigoure.
+#
+# AutoTroll is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+#
+# In addition, as a special exception, the copyright holders of AutoTroll
+# give you unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the macros of
+# AutoTroll.  You need not follow the terms of the GNU General Public License
+# when using or distributing such scripts, even though portions of the text of
+# AutoTroll appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes AutoTroll.
+#
+# This special exception to the GPL applies to versions of AutoTroll
+# released by the copyright holders of AutoTroll.  Note that people who make
+# modified versions of AutoTroll are not obligated to grant this special
+# exception for their modified versions; it is their choice whether to do so.
+# The GNU General Public License gives permission to release a modified version
+# without this exception; this exception also makes it possible to release a
+# modified version which carries forward this exception.
+
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
@@ -35,12 +70,15 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-bin_PROGRAMS = bin/savepool$(EXEEXT) bin/exampool$(EXEEXT) \
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/aux_build/autotroll.mk
+bin_PROGRAMS = bin/savepool$(EXEEXT) bin/MvMailTo$(EXEEXT) \
+	bin/MvCompress$(EXEEXT) bin/exampool$(EXEEXT) \
 	bin/mvnews$(EXEEXT) bin/mvmail$(EXEEXT) \
 	bin/checkdisplay$(EXEEXT)
- at METVIEW_MARS_ODB_TRUE@am__append_1 = $(ODB_LIBS)
+ at METVIEW_MARS_ODB_TRUE@am__append_1 = $(ODB_LDFLAGS)
+ at METVIEW_MARS_ODB_TRUE@am__append_2 = $(ODB_LIBS)
 subdir = src/AppMod
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
 	$(top_srcdir)/configure.ac
@@ -52,15 +90,28 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
-am_bin_checkdisplay_OBJECTS = bin_checkdisplay-checkdisplay.$(OBJEXT)
-bin_checkdisplay_OBJECTS = $(am_bin_checkdisplay_OBJECTS)
+am_bin_MvCompress_OBJECTS = bin_MvCompress-MvCompress.$(OBJEXT)
+bin_MvCompress_OBJECTS = $(am_bin_MvCompress_OBJECTS)
 am__DEPENDENCIES_1 =
-bin_checkdisplay_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+bin_MvCompress_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 AM_V_lt = $(am__v_lt_$(V))
 am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
 am__v_lt_0 = --silent
+bin_MvCompress_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(AM_CXXFLAGS) $(CXXFLAGS) $(bin_MvCompress_LDFLAGS) \
+	$(LDFLAGS) -o $@
 am__dirstamp = $(am__leading_dot)dirstamp
+am_bin_MvMailTo_OBJECTS = bin_MvMailTo-MvMailTo.$(OBJEXT)
+bin_MvMailTo_OBJECTS = $(am_bin_MvMailTo_OBJECTS)
+bin_MvMailTo_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(bin_MvMailTo_LDFLAGS) $(LDFLAGS) -o $@
+am_bin_checkdisplay_OBJECTS = bin_checkdisplay-checkdisplay.$(OBJEXT)
+bin_checkdisplay_OBJECTS = $(am_bin_checkdisplay_OBJECTS)
+bin_checkdisplay_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 am_bin_exampool_OBJECTS = bin_exampool-examcback.$(OBJEXT) \
 	bin_exampool-exammain.$(OBJEXT)
 bin_exampool_OBJECTS = $(am_bin_exampool_OBJECTS)
@@ -78,12 +129,10 @@ bin_mvnews_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1)
 am_bin_savepool_OBJECTS = bin_savepool-savepool.$(OBJEXT)
-bin_savepool_OBJECTS = $(am_bin_savepool_OBJECTS)
+nodist_bin_savepool_OBJECTS = bin_savepool-savepool.moc.$(OBJEXT)
+bin_savepool_OBJECTS = $(am_bin_savepool_OBJECTS) \
+	$(nodist_bin_savepool_OBJECTS)
 @METVIEW_MARS_ODB_TRUE at am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
-bin_savepool_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_2)
 bin_savepool_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
 	$(CXXFLAGS) $(bin_savepool_LDFLAGS) $(LDFLAGS) -o $@
@@ -129,10 +178,12 @@ am__v_CXXLD_0 = @echo "  CXXLD " $@;
 AM_V_GEN = $(am__v_GEN_$(V))
 am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
 am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = $(bin_checkdisplay_SOURCES) $(bin_exampool_SOURCES) \
+SOURCES = $(bin_MvCompress_SOURCES) $(bin_MvMailTo_SOURCES) \
+	$(bin_checkdisplay_SOURCES) $(bin_exampool_SOURCES) \
 	$(bin_mvmail_SOURCES) $(bin_mvnews_SOURCES) \
-	$(bin_savepool_SOURCES)
-DIST_SOURCES = $(bin_checkdisplay_SOURCES) $(bin_exampool_SOURCES) \
+	$(bin_savepool_SOURCES) $(nodist_bin_savepool_SOURCES)
+DIST_SOURCES = $(bin_MvCompress_SOURCES) $(bin_MvMailTo_SOURCES) \
+	$(bin_checkdisplay_SOURCES) $(bin_exampool_SOURCES) \
 	$(bin_mvmail_SOURCES) $(bin_mvnews_SOURCES) \
 	$(bin_savepool_SOURCES)
 ETAGS = etags
@@ -166,6 +217,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -181,6 +233,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -207,11 +261,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -339,11 +396,32 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-bin_savepool_SOURCES = savepool.cc
-bin_savepool_CPPFLAGS = $(MV_MOTIF_FLAGS)
-bin_savepool_LDADD = $(MV_MOTIF_UTIL_LIB) $(STANDARD_METVIEW_LIBS) \
-	$(METVIEW_UTIL_LIB) $(FLIBS) $(FDBLIB) $(am__append_1)
- at METVIEW_MARS_ODB_TRUE@bin_savepool_LDFLAGS = $(ODB_LDFLAGS)
+
+# See autotroll.m4 :)
+SUFFIXES = .moc.cpp .moc.cc .moc.cxx .moc.C .h .hh .hpp \
+			.ui .ui.h .ui.hh .ui.hpp \
+			.qrc .qrc.cpp .qrc.cc .qrc.cxx .qrc.C
+
+DISTCLEANFILES = $(BUILT_SOURCES)
+bin_savepool_SOURCES = savepool.cc savepool.h
+bin_savepool_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS)  -I../libMvQtGui 
+bin_savepool_LDFLAGS = $(QT_LDFLAGS) $(QT_LIBS) $(LDFLAGS) -L../../lib \
+	$(am__append_1)
+bin_savepool_LDADD = -lMvQtGui $(QT_LIBS) $(LDADD) \
+	$(STANDARD_METVIEW_LIBS) $(FLIBS) $(FDBLIB) -lMars \
+	$(am__append_2)
+bin_savepool_DEPENDENCIES = ../../lib/libMvQtGui.a
+AM_LDFLAGS = $(QT_LDFLAGS)
+bin_MvMailTo_SOURCES = MvMailTo.cc
+bin_MvMailTo_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS)  -I../libMvQtGui 
+bin_MvMailTo_LDFLAGS = $(QT_LDFLAGS) $(QT_LIBS)  $(LDFLAGS) -L../../lib
+bin_MvMailTo_LDADD = -lMvQtGui $(QT_LIBS) $(LDADD) $(STANDARD_METVIEW_LIBS) $(FLIBS) $(FDBLIB) -lMars  
+bin_MvMailTo_DEPENDENCIES = ../../lib/libMvQtGui.a
+bin_MvCompress_SOURCES = MvCompress.cc
+bin_MvCompress_CPPFLAGS = $(AM_CPPFLAGS)
+bin_MvCompress_LDFLAGS = $(LDFLAGS) -L../../lib
+bin_MvCompress_LDADD = $(LDADD) $(STANDARD_METVIEW_LIBS) $(FLIBS) $(FDBLIB)  
+nodist_bin_savepool_SOURCES = savepool.moc.cpp 
 bin_exampool_SOURCES = examcback.cc exammain.c examwidgets.h
 bin_exampool_CPPFLAGS = $(MV_MOTIF_FLAGS)
 bin_exampool_LDADD = $(MV_MOTIF_UTIL_LIB) $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB)
@@ -359,13 +437,13 @@ bin_checkdisplay_SOURCES = checkdisplay.cc
 bin_checkdisplay_CPPFLAGS = $(MV_MOTIF_FLAGS)
 bin_checkdisplay_LDADD = $(MV_MOTIF_UTIL_LIB) $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB)
 EXTRA_DIST = maill.l
-BUILT_SOURCES = bin
+BUILT_SOURCES = bin savepool.moc.cpp
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
-.SUFFIXES: .c .cc .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+.SUFFIXES: .moc.cpp .moc.cc .moc.cxx .moc.C .h .hh .hpp .ui .ui.h .ui.hh .ui.hpp .qrc .qrc.cpp .qrc.cc .qrc.cxx .qrc.C .c .cc .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/aux_build/autotroll.mk $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
@@ -441,6 +519,12 @@ clean-binPROGRAMS:
 bin/$(am__dirstamp):
 	@$(MKDIR_P) bin
 	@: > bin/$(am__dirstamp)
+bin/MvCompress$(EXEEXT): $(bin_MvCompress_OBJECTS) $(bin_MvCompress_DEPENDENCIES) bin/$(am__dirstamp)
+	@rm -f bin/MvCompress$(EXEEXT)
+	$(AM_V_CXXLD)$(bin_MvCompress_LINK) $(bin_MvCompress_OBJECTS) $(bin_MvCompress_LDADD) $(LIBS)
+bin/MvMailTo$(EXEEXT): $(bin_MvMailTo_OBJECTS) $(bin_MvMailTo_DEPENDENCIES) bin/$(am__dirstamp)
+	@rm -f bin/MvMailTo$(EXEEXT)
+	$(AM_V_CXXLD)$(bin_MvMailTo_LINK) $(bin_MvMailTo_OBJECTS) $(bin_MvMailTo_LDADD) $(LIBS)
 bin/checkdisplay$(EXEEXT): $(bin_checkdisplay_OBJECTS) $(bin_checkdisplay_DEPENDENCIES) bin/$(am__dirstamp)
 	@rm -f bin/checkdisplay$(EXEEXT)
 	$(AM_V_CXXLD)$(CXXLINK) $(bin_checkdisplay_OBJECTS) $(bin_checkdisplay_LDADD) $(LIBS)
@@ -463,6 +547,8 @@ mostlyclean-compile:
 distclean-compile:
 	-rm -f *.tab.c
 
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MvCompress-MvCompress.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MvMailTo-MvMailTo.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_checkdisplay-checkdisplay.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_exampool-examcback.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_exampool-exammain.Po at am__quote@
@@ -472,6 +558,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_mvnews-newscback.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_mvnews-newsmain.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_savepool-savepool.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_savepool-savepool.moc.Po at am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -617,6 +704,38 @@ bin_mvnews-maill.obj: maill.c
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
 
+bin_MvCompress-MvCompress.o: MvCompress.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvCompress_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvCompress-MvCompress.o -MD -MP -MF $(DEPDIR)/bin_MvCompress-MvCompress.Tpo -c -o bin_MvCompress-MvCompress.o `test -f 'MvCompress.cc' || echo '$(srcdir)/'`MvCompress.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvCompress-MvCompress.Tpo $(DEPDIR)/bin_MvCompress-MvCompress.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvCompress.cc' object='bin_MvCompress-MvCompress.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvCompress_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvCompress-MvCompress.o `test -f 'MvCompress.cc' || echo '$(srcdir)/'`MvCompress.cc
+
+bin_MvCompress-MvCompress.obj: MvCompress.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvCompress_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvCompress-MvCompress.obj -MD -MP -MF $(DEPDIR)/bin_MvCompress-MvCompress.Tpo -c -o bin_MvCompress-MvCompress.obj `if test -f 'MvCompress.cc'; then $(CYGPATH_W) 'MvCompress.cc'; else $(CYGPATH_W) '$(srcdir)/MvCompress.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvCompress-MvCompress.Tpo $(DEPDIR)/bin_MvCompress-MvCompress.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvCompress.cc' object='bin_MvCompress-MvCompress.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvCompress_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvCompress-MvCompress.obj `if test -f 'MvCompress.cc'; then $(CYGPATH_W) 'MvCompress.cc'; else $(CYGPATH_W) '$(srcdir)/MvCompress.cc'; fi`
+
+bin_MvMailTo-MvMailTo.o: MvMailTo.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMailTo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMailTo-MvMailTo.o -MD -MP -MF $(DEPDIR)/bin_MvMailTo-MvMailTo.Tpo -c -o bin_MvMailTo-MvMailTo.o `test -f 'MvMailTo.cc' || echo '$(srcdir)/'`MvMailTo.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMailTo-MvMailTo.Tpo $(DEPDIR)/bin_MvMailTo-MvMailTo.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvMailTo.cc' object='bin_MvMailTo-MvMailTo.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMailTo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMailTo-MvMailTo.o `test -f 'MvMailTo.cc' || echo '$(srcdir)/'`MvMailTo.cc
+
+bin_MvMailTo-MvMailTo.obj: MvMailTo.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMailTo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMailTo-MvMailTo.obj -MD -MP -MF $(DEPDIR)/bin_MvMailTo-MvMailTo.Tpo -c -o bin_MvMailTo-MvMailTo.obj `if test -f 'MvMailTo.cc'; then $(CYGPATH_W) 'MvMailTo.cc'; else $(CYGPATH_W) '$(srcdir)/MvMailTo.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMailTo-MvMailTo.Tpo $(DEPDIR)/bin_MvMailTo-MvMailTo.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvMailTo.cc' object='bin_MvMailTo-MvMailTo.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMailTo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMailTo-MvMailTo.obj `if test -f 'MvMailTo.cc'; then $(CYGPATH_W) 'MvMailTo.cc'; else $(CYGPATH_W) '$(srcdir)/MvMailTo.cc'; fi`
+
 bin_checkdisplay-checkdisplay.o: checkdisplay.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_checkdisplay_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_checkdisplay-checkdisplay.o -MD -MP -MF $(DEPDIR)/bin_checkdisplay-checkdisplay.Tpo -c -o bin_checkdisplay-checkdisplay.o `test -f 'checkdisplay.cc' || echo '$(srcdir)/'`checkdisplay.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_checkdisplay-checkdisplay.Tpo $(DEPDIR)/bin_checkdisplay-checkdisplay.Po
@@ -665,6 +784,46 @@ bin_savepool-savepool.obj: savepool.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_savepool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_savepool-savepool.obj `if test -f 'savepool.cc'; then $(CYGPATH_W) 'savepool.cc'; else $(CYGPATH_W) '$(srcdir)/savepool.cc'; fi`
 
+bin_savepool-savepool.moc.o: savepool.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_savepool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_savepool-savepool.moc.o -MD -MP -MF $(DEPDIR)/bin_savepool-savepool.moc.Tpo -c -o bin_savepool-savepool.moc.o `test -f 'savepool.moc.cpp' || echo '$(srcdir)/'`savepool.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_savepool-savepool.moc.Tpo $(DEPDIR)/bin_savepool-savepool.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='savepool.moc.cpp' object='bin_savepool-savepool.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_savepool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_savepool-savepool.moc.o `test -f 'savepool.moc.cpp' || echo '$(srcdir)/'`savepool.moc.cpp
+
+bin_savepool-savepool.moc.obj: savepool.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_savepool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_savepool-savepool.moc.obj -MD -MP -MF $(DEPDIR)/bin_savepool-savepool.moc.Tpo -c -o bin_savepool-savepool.moc.obj `if test -f 'savepool.moc.cpp'; then $(CYGPATH_W) 'savepool.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/savepool.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_savepool-savepool.moc.Tpo $(DEPDIR)/bin_savepool-savepool.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='savepool.moc.cpp' object='bin_savepool-savepool.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_savepool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_savepool-savepool.moc.obj `if test -f 'savepool.moc.cpp'; then $(CYGPATH_W) 'savepool.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/savepool.moc.cpp'; fi`
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -785,13 +944,12 @@ distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 	-rm -f bin/$(am__dirstamp)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
 	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-clean: clean-am
-
 clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
 
 distclean: distclean-am
@@ -877,6 +1035,71 @@ uninstall-am: uninstall-binPROGRAMS
 	uninstall-binPROGRAMS
 
 
+ # ------------- #
+ # DOCUMENTATION #
+ # ------------- #
+
+# --- #
+# MOC #
+# --- #
+
+.hpp.moc.cpp:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.hh.moc.cpp:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.h.moc.cpp:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+
+.hpp.moc.cc:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.hh.moc.cc:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.h.moc.cc:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+
+.hpp.moc.cxx:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.hh.moc.cxx:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.h.moc.cxx:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+
+.hpp.moc.C:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.hh.moc.C:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.h.moc.C:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+
+# --- #
+# UIC #
+# --- #
+
+.ui.ui.hpp:
+	$(UIC) $< -o $@
+
+.ui.ui.hh:
+	$(UIC) $< -o $@
+
+.ui.ui.h:
+	$(UIC) $< -o $@
+
+# --- #
+# RCC #
+# --- #
+
+.qrc.qrc.cpp:
+	$(RCC) -name `echo "$<" | sed 's/\.qrc$$//'` $< -o $@
+
+.qrc.qrc.cc:
+	$(RCC) -name `echo "$<" | sed 's/\.qrc$$//'` $< -o $@
+
+.qrc.qrc.cxx:
+	$(RCC) -name `echo "$<" | sed 's/\.qrc$$//'` $< -o $@
+
+.qrc.qrc.C:
+	$(RCC) -name `echo "$<" | sed 's/\.qrc$$//'` $< -o $@
+
 maill.c : maill.l
 	$(LEX) $(LFLAGS) maill.l
 	sed -e s/yy/mail/g < lex.yy.c > $@
@@ -895,6 +1118,9 @@ clean-all: clean
 bin:
 	ln -s ../../bin bin
 
+clean:
+	-rm -f *.o *.moc.cpp *.qrc.cpp
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/src/AppMod/MvCompress.cc b/src/AppMod/MvCompress.cc
new file mode 100644
index 0000000..924a411
--- /dev/null
+++ b/src/AppMod/MvCompress.cc
@@ -0,0 +1,165 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 <unistd.h>
+#include <pwd.h>
+
+#include <iostream>
+#include <sstream>
+#include "Metview.h"
+#include "MvService.h"
+
+string ftmp;
+
+using namespace std;
+
+// Globals
+int          ac;
+char       **av;
+
+class Base : public MvService
+{
+protected:
+	Base(char* a) : MvService(a) {};
+};
+
+class MvCompress: public Base
+{
+public:
+	MvCompress() : Base("COMPRESS") {};
+	void serve(MvRequest&,MvRequest&);
+};
+
+void MvCompress::serve( MvRequest& in, MvRequest& out)
+{
+  	cout << "--------------MvCompress::serve()--------------" << endl;
+  	in.print();
+
+	vector<string> vals;
+	string errTxt;
+	in.getValue("ITEMS",vals,false,errTxt);
+
+	if(vals.size() == 0)
+	  	return;
+	
+	const char *id=in("PARAM");
+	if(!id) return;
+	
+	//Dump file name + tar file name
+	string fLog(marstmp());
+	string method;
+	
+	if(strcmp(id,"tar") == 0)
+	{  
+		method="tar";
+	}
+	else if(strcmp(id,"tgz") == 0)
+	{  
+		method="tgz";
+	}
+	else if(strcmp(id,"tbz") == 0)
+	{  
+		method="tbz";
+	}	
+	else if(strcmp(id,"tzip") == 0)
+	{  
+		method="tzip";
+	}	
+	else if(strcmp(id,"zip") == 0)
+	{  
+		method="zip";
+	}	
+	else
+	{  	
+	  	return;
+	}
+	
+	//Compress command
+	string cmd=string(getenv("METVIEW_BIN")) + "/mv_compress ";	
+	
+	cmd+=" -m \"" + method + "\" -l \"" + fLog + "\" ";
+	for(vector<string>::iterator it=vals.begin(); it != vals.end(); it++)
+	{
+		cmd+="\"" + (*it) + "\" ";
+	}
+	cmd+=" 2>&1";
+
+	cout << "command " << cmd << endl;
+	
+	int ret=system(cmd.c_str());
+	
+	//If the script failed read log file and
+	//write it into LOG_EROR
+	if(ret == -1 || WEXITSTATUS(ret) != 0)
+	{			
+		ifstream inLog(fLog.c_str());
+		string line;
+		string msg;
+		string detailed;
+		string st;
+		
+		if(WEXITSTATUS(ret) == 255)
+		{		
+			msg="Some of the icons could not be archived!";
+			st="WARNING";
+			marslog(LOG_WARN,"%s",msg.c_str());
+			while(getline(inLog,line))
+			{
+				marslog(LOG_WARN,"%s",line.c_str());
+				detailed+=line + "\n";
+			}
+			inLog.close();
+		}
+		else
+		{
+			st="ERROR";
+			if(WEXITSTATUS(ret) == 1)
+			{		
+				msg="Failed to archive the selected icons!";
+			}			
+			else
+			{
+		  		stringstream ss;
+				ss << "Icon archiving failed with exit code: " << WEXITSTATUS(ret) << "!"; 
+				msg=ss.str();				
+			}	
+		 		 
+			marslog(LOG_EROR,"%s",msg.c_str());
+			while(getline(inLog,line))
+			{
+				marslog(LOG_EROR,"%s",line.c_str());
+				detailed+=line + "\n";
+			}
+			inLog.close();
+		}
+		
+		out=MvRequest("MESSAGE");
+		out("STATUS")=st.c_str();
+		out("TEXT")=msg.c_str();
+		out("DETAILED")=detailed.c_str();
+		
+		if(st == "ERROR")
+		{
+		  	setError(13);
+			return;
+		}	
+	}
+}	
+
+int main( int argc, char **argv )
+{
+	ac = argc;
+  	av = argv;
+
+	MvApplication theApp(argc,argv,"MvCompress");
+
+    	MvCompress cmp;
+
+    	theApp.run();
+}
diff --git a/src/AppMod/MvMailTo.cc b/src/AppMod/MvMailTo.cc
new file mode 100644
index 0000000..87954b9
--- /dev/null
+++ b/src/AppMod/MvMailTo.cc
@@ -0,0 +1,229 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 <QApplication>
+
+#include <unistd.h>
+#include <pwd.h>
+
+#include <iostream>
+#include "Metview.h"
+#include "MvQService.h"
+
+#include <QDateTime>
+#include <QDebug>
+
+#include "MvQMailDialog.h"
+
+string ftmp;
+
+using namespace std;
+
+// Globals
+int          ac;
+char       **av;
+
+class Base : public MvQService
+{
+protected:
+	Base(char* a) : MvQService(a) {};
+};
+
+class MvMail: public Base
+{
+public:
+	MvMail() : Base("SENDMAIL") {};
+	void serve(MvRequest&,MvRequest&);
+};
+
+void MvMail::serve( MvRequest& in, MvRequest& /*out*/)
+{
+  	cout << "--------------MvMail::serve()--------------" << endl;
+  	in.print();
+
+	vector<string> vals;
+	string errTxt;
+	in.getValue("ITEMS",vals,false,errTxt);
+
+	if(vals.size() == 0)
+	  	return;
+	
+	//-----------------------------------
+	// Create tar file
+	//-----------------------------------
+	
+	string userName;
+	struct passwd *pw = getpwuid(getuid());
+	if(pw)
+	{
+		userName=string(pw->pw_name);
+	}
+	
+	string dateStr=QDateTime::currentDateTime().toString("yyyyMMdd_hhmm").toStdString();
+	
+	//Dump file name + tar file name
+	string fDump(marstmp());
+	string compressMethod="tgz";
+	string compressSuffix="tar.gz";
+	string fCompress = string(dirname(fDump.c_str())) + "/mv_icons_" + 
+	            userName + "_" +dateStr + compressSuffix;
+	string fLog=fDump + ".log";
+	
+	//Compress command
+	string cmd=string(getenv("METVIEW_BIN")) + "/mv_compress ";	
+	cmd+= " -f \"" + fCompress + "\" -d \"" + fDump + "\" -m \"" + compressMethod + "\" -l \"" + fLog + "\" ";
+	for(vector<string>::iterator it=vals.begin(); it != vals.end(); it++)
+	{
+		cmd+="\"" + (*it) + "\" ";
+	}
+	cmd+=" 2>&1";
+
+	cout << "command " << cmd << endl;
+	
+	int ret=system(cmd.c_str());
+	
+	//If the script failed read log file and
+	//write it into LOG_EROR
+	if(ret == -1 || WEXITSTATUS(ret) != 0)
+	{			
+		ifstream inLog(fLog.c_str());
+		string line;
+
+		if(WEXITSTATUS(ret) == 1)
+		{		
+			marslog(LOG_EROR,"Failed to perform compressiong icons!");
+			while(getline(inLog,line))
+			{
+				marslog(LOG_EROR,"%s",line.c_str());
+			}
+			inLog.close();
+			setError(13);
+			return;
+		}
+		else if(WEXITSTATUS(ret) > 1)
+		{		
+			marslog(LOG_EROR,"Compressing icons failed with exit code: %d !",WEXITSTATUS(ret));
+			while(getline(inLog,line))
+			{
+				marslog(LOG_EROR,"%s",line.c_str());
+			}
+			inLog.close();
+			setError(13);
+			return;
+		}
+		
+	}
+	//-----------------------------------
+	// Mail dialog
+	//-----------------------------------
+	
+	//Create the qt application
+	QApplication app(ac, av);
+	
+	//Initialise resorces from a static library (libMvQtGui)
+	Q_INIT_RESOURCE(mail);
+	
+	MvQMailDialog* md=new MvQMailDialog(fCompress,fDump);	
+	md->show();
+	
+	//Listen to the mars event loop!
+	setupSocketNotifier();
+	
+	//Enter the app loop
+ 	app.exec();
+	
+	//Now we have left the qt event loop
+	
+	//-----------------------------------
+	// Send mail
+	//-----------------------------------
+
+	if(md->result() == QDialog::Rejected || md->to().isEmpty())
+	{
+	 	//This should be deleted
+		//fCompress
+		delete md;
+	  	return;	
+	}
+
+	//mail command reuse log
+	cmd=string(getenv("METVIEW_BIN")) + "/mv_mail ";
+	
+	cmd+=" -t \"" + md->to().toStdString() + "\" ";
+	
+	if(!md->cc().isEmpty())
+	  	cmd+=" -c \"" + md->cc().toStdString() + "\" ";
+	
+	if(!md->subject().isEmpty())
+	  	cmd+=" -s \"" + md->subject().toStdString() + "\" ";
+	
+	if(!md->message().isEmpty())
+	  	cmd+=" -m \"" + md->message().toStdString() + "\" ";
+	
+	cmd+=" -f \"" + fCompress + "\" -l \"" + fLog + "\"" ;
+	
+	//cmd+= " -t \"" + md->to().toStdString() + "\" " +
+	//       (!md->cc().isEmpty())?( "-c \"" + md->cc().toStdString() + "\" "
+	//      "\" -s \"" + md->subject().toStdString() + "\" -m \"" + md->message().toStdString() + 
+	//      "\" -f \"" + fCompress + "\" -l \"" + fLog + "\"" ;
+	      
+	cmd+=" 2>&1";
+
+	cout << "command " << cmd << endl;
+	
+	ret=system(cmd.c_str());	
+	
+	//If the script failed read log file and
+	//write it into LOG_EROR
+	if(ret == -1 || WEXITSTATUS(ret) != 0)
+	{			
+		ifstream inLog(fLog.c_str());
+		string line;
+
+		if(WEXITSTATUS(ret) == 1)
+		{		
+			marslog(LOG_EROR,"Failed to perform sending mail!");
+			while(getline(inLog,line))
+			{
+				marslog(LOG_EROR,"%s",line.c_str());
+			}
+			inLog.close();
+			setError(13);
+			return;
+		}
+		else if(WEXITSTATUS(ret) > 1)
+		{		
+			marslog(LOG_EROR,"Sending mail failed with exit code: %d !",WEXITSTATUS(ret));
+			while(getline(inLog,line))
+			{
+				marslog(LOG_EROR,"%s",line.c_str());
+			}
+			inLog.close();
+			setError(13);
+			return;
+		}
+		
+	}
+	
+	delete md;  
+	  
+	//exit(0);
+}	
+
+int main( int argc, char **argv )
+{
+	ac = argc;
+  	av = argv;
+
+	MvApplication theApp(argc,argv);
+
+    	MvMail mail;
+
+    	theApp.run();
+}
\ No newline at end of file
diff --git a/src/AppMod/maill.c b/src/AppMod/maill.c
index bbcf68c..cbb003f 100644
--- a/src/AppMod/maill.c
+++ b/src/AppMod/maill.c
@@ -8,7 +8,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 33
+#define YY_FLEX_SUBMINOR_VERSION 35
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -30,7 +30,7 @@
 
 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
 
-#if __STDC_VERSION__ >= 199901L
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
 
 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
  * if you want the limit (max/min) macros for int types. 
@@ -93,11 +93,12 @@ typedef unsigned int flex_uint32_t;
 
 #else	/* ! __cplusplus */
 
-#if __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
 
 #define YY_USE_CONST
 
-#endif	/* __STDC__ */
+#endif	/* defined (__STDC__) */
 #endif	/* ! __cplusplus */
 
 #ifdef YY_USE_CONST
@@ -190,14 +191,9 @@ extern FILE *mailin, *mailout;
 
 #define unput(c) mailunput( c, (mailtext_ptr)  )
 
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-
 #ifndef YY_TYPEDEF_YY_SIZE_T
 #define YY_TYPEDEF_YY_SIZE_T
-typedef unsigned int mail_size_t;
+typedef size_t mail_size_t;
 #endif
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -522,8 +518,8 @@ static int *mail_full_state;
 { \
 *mail_cp = (mail_hold_char); /* undo effects of setting up mailtext */ \
 mail_cp = (mail_full_match); /* restore poss. backed-over text */ \
-(mail_lp) = mail_full_lp; /* restore orig. accepting pos. */ \
-(mail_state_ptr) = mail_full_state; /* restore orig. state */ \
+(mail_lp) = (mail_full_lp); /* restore orig. accepting pos. */ \
+(mail_state_ptr) = (mail_full_state); /* restore orig. state */ \
 mail_current_state = *(mail_state_ptr); /* restore curr. state */ \
 ++(mail_lp); \
 goto find_rule; \
@@ -554,7 +550,7 @@ char *mailtext_ptr;
  an Intergovernmental Organization or submit itself to any jurisdiction.
 
  ***************************** LICENSE END *************************************/
-#line 558 "lex.mail.c"
+#line 554 "lex.mail.c"
 
 #define INITIAL 0
 
@@ -572,6 +568,35 @@ char *mailtext_ptr;
 
 static int mail_init_globals (void );
 
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int maillex_destroy (void );
+
+int mailget_debug (void );
+
+void mailset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE mailget_extra (void );
+
+void mailset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *mailget_in (void );
+
+void mailset_in  (FILE * in_str  );
+
+FILE *mailget_out (void );
+
+void mailset_out  (FILE * out_str  );
+
+int mailget_leng (void );
+
+char *mailget_text (void );
+
+int mailget_lineno (void );
+
+void mailset_lineno (int line_number  );
+
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
  */
@@ -614,7 +639,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO (void) fwrite( mailtext, mailleng, 1, mailout )
+#define ECHO fwrite( mailtext, mailleng, 1, mailout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -625,7 +650,7 @@ static int input (void );
 	if ( YY_CURRENT_BUFFER_LVALUE->mail_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		int n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( mailin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -712,7 +737,7 @@ YY_DECL
     
 #line 10 "maill.l"
 
-#line 716 "lex.mail.c"
+#line 741 "lex.mail.c"
 
 	if ( !(mail_init) )
 		{
@@ -725,6 +750,8 @@ YY_DECL
         /* Create the reject buffer large enough to save one state per allowed character. */
         if ( ! (mail_state_buf) )
             (mail_state_buf) = (mail_state_type *)mailalloc(YY_STATE_BUF_SIZE  );
+            if ( ! (mail_state_buf) )
+                YY_FATAL_ERROR( "out of dynamic memory in maillex()" );
 
 		if ( ! (mail_start) )
 			(mail_start) = 1;	/* first start state */
@@ -788,28 +815,28 @@ find_rule: /* we branch to this label when backing up */
 				{
 				mail_act = mail_acclist[(mail_lp)];
 				if ( mail_act & YY_TRAILING_HEAD_MASK ||
-				     mail_looking_for_trail_begin )
+				     (mail_looking_for_trail_begin) )
 					{
-					if ( mail_act == mail_looking_for_trail_begin )
+					if ( mail_act == (mail_looking_for_trail_begin) )
 						{
-						mail_looking_for_trail_begin = 0;
+						(mail_looking_for_trail_begin) = 0;
 						mail_act &= ~YY_TRAILING_HEAD_MASK;
 						break;
 						}
 					}
 				else if ( mail_act & YY_TRAILING_MASK )
 					{
-					mail_looking_for_trail_begin = mail_act & ~YY_TRAILING_MASK;
-					mail_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
+					(mail_looking_for_trail_begin) = mail_act & ~YY_TRAILING_MASK;
+					(mail_looking_for_trail_begin) |= YY_TRAILING_HEAD_MASK;
 					(mail_full_match) = mail_cp;
-					mail_full_state = (mail_state_ptr);
-					mail_full_lp = (mail_lp);
+					(mail_full_state) = (mail_state_ptr);
+					(mail_full_lp) = (mail_lp);
 					}
 				else
 					{
 					(mail_full_match) = mail_cp;
-					mail_full_state = (mail_state_ptr);
-					mail_full_lp = (mail_lp);
+					(mail_full_state) = (mail_state_ptr);
+					(mail_full_lp) = (mail_lp);
 					break;
 					}
 				++(mail_lp);
@@ -876,7 +903,7 @@ YY_RULE_SETUP
 #line 18 "maill.l"
 ECHO;
 	YY_BREAK
-#line 880 "lex.mail.c"
+#line 907 "lex.mail.c"
 			case YY_STATE_EOF(INITIAL):
 				mailterminate();
 
@@ -1078,7 +1105,7 @@ static int mail_get_next_buffer (void)
 
 		/* Read in more data. */
 		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->mail_ch_buf[number_to_move]),
-			(mail_n_chars), num_to_read );
+			(mail_n_chars), (size_t) num_to_read );
 
 		YY_CURRENT_BUFFER_LVALUE->mail_n_chars = (mail_n_chars);
 		}
@@ -1102,6 +1129,14 @@ static int mail_get_next_buffer (void)
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
+	if ((mail_size_t) ((mail_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->mail_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		mail_size_t new_size = (mail_n_chars) + number_to_move + ((mail_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->mail_ch_buf = (char *) mailrealloc((void *) YY_CURRENT_BUFFER_LVALUE->mail_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->mail_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in mail_get_next_buffer()" );
+	}
+
 	(mail_n_chars) += number_to_move;
 	YY_CURRENT_BUFFER_LVALUE->mail_ch_buf[(mail_n_chars)] = YY_END_OF_BUFFER_CHAR;
 	YY_CURRENT_BUFFER_LVALUE->mail_ch_buf[(mail_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
@@ -1523,7 +1558,9 @@ static void mailensure_buffer_stack (void)
 		(mail_buffer_stack) = (struct mail_buffer_state**)mailalloc
 								(num_to_alloc * sizeof(struct mail_buffer_state*)
 								);
-		
+		if ( ! (mail_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in mailensure_buffer_stack()" );
+								  
 		memset((mail_buffer_stack), 0, num_to_alloc * sizeof(struct mail_buffer_state*));
 				
 		(mail_buffer_stack_max) = num_to_alloc;
@@ -1541,6 +1578,8 @@ static void mailensure_buffer_stack (void)
 								((mail_buffer_stack),
 								num_to_alloc * sizeof(struct mail_buffer_state*)
 								);
+		if ( ! (mail_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in mailensure_buffer_stack()" );
 
 		/* zero only the new slots.*/
 		memset((mail_buffer_stack) + (mail_buffer_stack_max), 0, grow_size * sizeof(struct mail_buffer_state*));
@@ -1585,7 +1624,7 @@ YY_BUFFER_STATE mail_scan_buffer  (char * base, mail_size_t  size )
 
 /** Setup the input buffer state to scan a string. The next call to maillex() will
  * scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
+ * @param mailstr a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
diff --git a/src/AppMod/savepool.cc b/src/AppMod/savepool.cc
index a02174a..819a273 100644
--- a/src/AppMod/savepool.cc
+++ b/src/AppMod/savepool.cc
@@ -7,424 +7,237 @@
 
  ***************************** LICENSE END *************************************/
 
-//-- hack of savemain.c + savecback.cc, 010312/vk
-//-- (undebuggable crash inside X11 on Linux)
+#include "savepool.h"
 
-#include <iostream>
+#include <QApplication>
+#include <QDebug>
 
-#include <Xm/Xm.h>
-#include <Xm/FileSB.h>
-#include <Xm/Form.h>
-#include <Xm/SelectioB.h>
-#include <Xm/ToggleB.h>
+#include "MvQFileDialog.h"
 
 #include <ctype.h>
 #include <sys/types.h>
 #include <sys/stat.h> 
 
 #include <unistd.h> 
-
 #include "mars.h"
-#include "xec.h"
 
 static int    gac;
 static char** gav;
 static svc*   gs = NULL;
 
-static XtAppContext  app_context;
 static svcid        *s_id = NULL;
 static const char   *path = NULL;
-static const char   *nam  = NULL;
+static const char   *iconName  = NULL;
 static char         *cptr = NULL;
-static Boolean       boo  = false;
-
-static Widget topw = (Widget)NULL;
-static Widget frmw = (Widget)NULL;
-static Widget fsb  = (Widget)NULL;
-
-static Widget create_toggle = (Widget)NULL;
 
+void cleanup(const char* file);
+void save(svcid* id,request* r,void* );
 
+//================================
+// MvQSavePool
+//================================
 
-void create_top( char*, int, char** );
-void cleanup( char* file );
-static char *lower(char *s);
-
-extern "C" 
+MvQSavePool::MvQSavePool(QString iconDir)
 {
-  void fsb_ok_callback       ( Widget, XtPointer, XtPointer );
-  void fsb_cancel_callback   ( Widget, XtPointer, XtPointer );
-  void create_toggle_callback( Widget, XtPointer, XtPointer );
-
-  void save( svcid* id, request* r, void* );
-}
-
-
-//_____________________________________________________________________
-
-void cleanup( char* file )
-{
-  char pth[1024];
-  char buf[1024];
-
-  if( s_id )
-    {
-      if( file )
-	{
-	  err err_code = 0;
-	  if( cptr && strcmp( cptr, "GRIB" ) == 0 )
-	    {
-	      request *r = empty_request("WRITE");
-	      set_value(r,"TARGET",  "%s",file);
-	      set_value( r, "FIELDSET", "%s", nam );
-	      err_code = handle_write(r,NULL);
-	      free_all_requests(r);
-	    }
-	  else
-	    {
-	      err_code = copyfile( path, file );
-	    }
-
-	  if( err_code == 0 )
-	    {
-				// If icon in metview directory
-	      
-	      strcpy(pth,dirname(makepath(dirname(file),"dummy")));
-	      strcpy(buf,dirname(makepath(getenv("METVIEW_USER_DIRECTORY"),
-					  "dummy")));
-
-				// patch for /tmp_mnt
-
-	      char *q = pth; if(strncmp(q,"/tmp_mnt",8)==0) q += 8;
-	      char *t = buf; if(strncmp(t,"/tmp_mnt",8)==0) t += 8;
-
-	      printf("%s\n%s\n",q,t);
-
-	      if( cptr && ( strcmp(q,t) == 0 ) )
-		{
-		  request *u = empty_request("STATUS");
-
-		  q = file;
-		  if( strncmp( q, "/tmp_mnt", 8) == 0 )
-		  {
-		    q += 8;
-		  }
-		  q += strlen(t);
-
-		  set_value( u, "NAME",      "%s", q);
-		  set_value( u, "CLASS",     "%s", cptr);
-		  set_value( u, "TYPE",      "%s", cptr);
-		  set_value( u, "ICON_CLASS","%s", cptr);
-		  set_value( u, "STATUS",    "CREATED");
-		  send_message( gs, u );
-		  free_all_requests(u);
-		}
-
-	      if( boo )
-		{
-		  int cnt = 2;
-		  request *r = empty_request("READ");
-		  set_value(r,"SOURCE","%s",file);
-
-
-		  sprintf( buf, "%s (saved)", nam );
-		  sprintf(pth,"%s/%s",getenv("METVIEW_USER_DIRECTORY"),buf);
-
-		  while(access(pth,0) == 0)
-		    {
-		      sprintf( buf, "%s (saved %d)", nam, cnt++ );
-		      sprintf(pth,"%s/%s",
-			      getenv("METVIEW_USER_DIRECTORY"),buf);
-		    }
-
-		  FILE *f = fopen(pth,"w");
-		  if(f)
-		    {
-		      save_all_requests(f,r);
-		      fclose(f);
-
-		      request *u = empty_request("STATUS");
-		      set_value(u,"NAME", "%s", buf);
-		      set_value(u,"CLASS","READ");
-		      set_value(u,"TYPE","READ");
-		      set_value(u,"ICON_CLASS","READ");
-		      set_value(u,"STATUS","CREATED");
-		      send_message( gs, u );
-		      free_all_requests(u);
-		    }
-		  else  //-- !f
-		    {
-		      set_svc_msg( s_id, "Cannot add icon" );
-		    }
-
-		  free_all_requests(r);
-		  
-		}      //-- boo
+	fDialog_ = new MvQFileDialog(iconDir,tr("Save as"));
+	fDialog_->setAcceptMode(QFileDialog::AcceptSave);
+	
+	connect(fDialog_,SIGNAL(accepted()),
+		this,SLOT(slotAccept()));
 		
-	    }          //-- err_code == 0
+	fDialog_->show();
+}	
+	
+MvQSavePool::~MvQSavePool()
+{
+  	delete fDialog_;
+}	
 
-	  set_svc_msg( s_id, "Data from %s saved in %s", nam, file);
-	}
-      else             //-- !file
+void MvQSavePool::slotAccept()
+{  
+  	QStringList lst=fDialog_->selectedFiles();
+  	if(lst.count() > 0)
 	{
-	  set_svc_msg( s_id, "Data from %s not saved", nam );
+	  	selectedFile_=lst[0];
 	}
+	
+	//We leave the event loop
+	QApplication::quit(); 	
+}  
 
-      send_reply( s_id, NULL );
-
-      s_id  = NULL;
-      path = NULL;
-      nam = NULL;
-    }
-}
-
-//_____________________________________________________________________
-
-void fsb_ok_callback( Widget
-                    , XtPointer
-		    , XtPointer cb )  // XmFileSelectionBoxCallbackStruct* cb )
-{
-  //struct stat s;
-
-  char* f   = xec_GetString( ((XmFileSelectionBoxCallbackStruct*)cb)->value );
-  char* dir = xec_GetString( ((XmFileSelectionBoxCallbackStruct*)cb)->dir );
-
-  char filename[1024];
-  strcpy( filename, makepath( dir, f ) );
-
-  XtFree( f );
-  XtFree( dir );
-
-  // if ( (stat(filename,&s) == 0) && S_ISDIR(s.st_mode))
-  //   strcat(filename,name);
-
-  cleanup(filename);
-  XtPopdown(topw);
-  XtUnmanageChild(frmw);
-  exit(0);
-}
-
-//_____________________________________________________________________
-
-void fsb_cancel_callback( Widget 
-                        , XtPointer
-			, XtPointer )  // XmFileSelectionBoxCallbackStruct* )
-{
-  cleanup(NULL);
-  XtPopdown(topw);
-  XtUnmanageChild(frmw);
-  exit(0);
-}
-
-//_____________________________________________________________________
-
-void create_toggle_callback( Widget 
-                           , XtPointer
-                           , XtPointer cb )
+void MvQSavePool::slotCancel()
 {
-  boo = ((XmToggleButtonCallbackStruct*)cb)->set;
-}
-
+  	//We leave the event loop
+	QApplication::quit(); 	
+}  
+
+//=======================================================
+// Main part, reused from the original Xt-based version
+//=======================================================
+
+void cleanup(const char* file)
+{	
+  	if(s_id)
+    	{
+      		if(file)
+		{
+	  		err err_code = 0;
+	  		if( cptr && strcmp( cptr, "GRIB" ) == 0 )
+	    		{
+	      			request *r = empty_request("WRITE");
+	      			set_value(r,"TARGET",  "%s",file);
+	      			set_value( r, "FIELDSET", "%s", iconName);
+	      			err_code = handle_write(r,NULL);
+	      			free_all_requests(r);
+	    		}
+	  		else
+	    		{
+	      			err_code = copyfile( path, file );
+	    		}
+	
+			set_svc_msg( s_id, "Data from %s saved as %s",iconName, file);
+		}
+     		else
+		{
+	  		set_svc_msg( s_id, "Data from %s not saved", iconName );
+		}
 
-//_____________________________________________________________________
+      		send_reply( s_id, NULL );
 
-static char *lower(char *s)
-{
-  static char buf[2];
-  int i = 0;
-
-  while(*s)
-    {
-      if (isupper(*s))
-	buf[i++] = tolower(*s);
-      else
-	buf[i++] = *s;
-      s++;
-    }
-  buf[i]= 0;
-
-  return buf;
+      		s_id  = NULL;
+      		path = NULL;
+      		iconName = NULL;
+    	}
 }
 
-//_____________________________________________________________________
-
-void save( svcid*   id
-         , request* r
-         , void* )
+void save(svcid* id,request* r,void* )
 {
-
-  if( fork_service(id) > 0 )
-    return;
+	if( fork_service(id) > 0 )
+    		return;
  
-  s_id = id;
-
-  const char *verb=request_verb(r);
-  if( ! verb )
-    {
-      set_svc_err(id, 1);
-      set_svc_msg(id, "This data cannot be saved");
-      return;
-    }
-
-  printf("verb=%s\n",verb);	
-
-  char *pathStr;
-
-  if(strcmp(verb,"ODB_GEO_POINTS") == 0 || strcmp(verb,"ODB_GEO_VECTORS") == 0 ||
-     strcmp(verb,"ODB_XY_POINTS") == 0  || strcmp(verb,"ODB_XY_VECTORS") == 0 ||  
-     strcmp(verb,"ODB_XY_BINNING") == 0 )
-  {	
-	pathStr = (char *)get_value( r, "ODB_FILENAME",  0 );	
-   } 	
-  else
-  {
-  	pathStr = (char*) get_value( r, "PATH",  0 );
-  	/*nam  = get_value( r, "_NAME", 0 );
-  	cptr = r->name;*/
-  }
-
-  nam  = get_value( r, "_NAME", 0 );
-  cptr = r->name;
-
-  path=pathStr;	
+  	s_id = id;
+
+  	const char *verb=request_verb(r);
+  	if( ! verb )
+    	{
+      		set_svc_err(id, 1);
+      		set_svc_msg(id, "This data cannot be saved");
+      		return;
+    	}
+
+  	printf("verb=%s\n",verb);	
+
+  	char *pathStr;
+
+  	if(strcmp(verb,"ODB_GEO_POINTS") == 0 || strcmp(verb,"ODB_GEO_VECTORS") == 0 ||
+     	   strcmp(verb,"ODB_XY_POINTS") == 0  || strcmp(verb,"ODB_XY_VECTORS") == 0 ||  
+           strcmp(verb,"ODB_XY_BINNING") == 0 )
+  	{	
+		pathStr = (char *)get_value( r, "ODB_FILENAME",  0 );	
+   	} 	
+  	else
+  	{
+  		pathStr = (char*) get_value( r, "PATH",  0 );
+  		/*iconName  = get_value( r, "_NAME", 0 );
+  		cptr = r->name;*/
+  	}
+
+  	iconName  = get_value( r, "_NAME", 0 );
+  	cptr = r->name;
+
+  	path=pathStr;	
 	
-  if( ! pathStr )
-    {
-      printf("no path\n");
-      set_svc_err(id, 1);
-      set_svc_msg(id, "This data cannot be saved");
-      return;
-    }
-
-  if( strcmp( cptr, "GRIB" ) == 0 )
-    {
-      new_variable( nam, request_to_fieldset(r), 0 );
-    } 
-   if( strcmp( cptr, "PRASTER" ) == 0 )
-    {
-        cptr = (char*) get_value( r, "IMPORT_FILE_TYPE",  0 );
-        boo = false;
-    }
-
-  Arg al[64];               /* Arg List */
-  int ac = 0;               /* Arg Count */
-  XmString xmstrings[15];   /* temporary storage for XmStrings */
-  Widget   children[13];    /* Children to manage */
-
-  topw = XtVaAppInitialize( &app_context, "Metview", NULL, 0, &gac, gav, NULL, NULL );
-
-  ac = 0;
-  XtSetArg(al[ac], XmNautoUnmanage, FALSE); ac++;
-  frmw = XmCreateForm ( topw, "form", al, ac );
-
-  fsb  = XmCreateFileSelectionDialog( frmw, "Save", NULL, 0 );
- 
-  /* Find out initial directory	*/ 
-
-  char *mvDir=getenv("METVIEW_USER_DIRECTORY");
-  if(mvDir)	
-  { 	
-	/*printf("mvDir %s \n",mvDir);*/
-
-	const char* buf=dirname(nam);
-	if(buf)
+  	if(!pathStr )
+    	{
+      		printf("no path\n");
+      		set_svc_err(id, 1);
+      		set_svc_msg(id, "This data cannot be saved");
+      		return;
+    	}
+
+  	if( strcmp( cptr, "GRIB" ) == 0 )
+    	{
+      		new_variable( iconName, request_to_fieldset(r), 0 );
+    	} 
+   	if( strcmp( cptr, "PRASTER" ) == 0 )
+    	{
+        	cptr = (char*) get_value( r, "IMPORT_FILE_TYPE",  0 );
+    	} 
+  
+  	const char* senderAppl = (char*) get_value(r,"_APPL", 0);
+	
+	//Find out start directory
+	string iconDir;
+	if(senderAppl && strcmp(senderAppl,"Desktop") == 0)
 	{
-		/*printf("buf %s \n",buf);*/
-
-		char namDir[600];
-		sprintf(namDir,"%s/%s",mvDir,buf);	
-  		/*printf("namDir %s \n",namDir);*/
-
-		struct stat namDirStat;
-  		if(stat(namDir,&namDirStat) >=0 && namDirStat.st_mode & S_IFDIR)
-		{	
-	 		XmString s = XmStringCreateSimple(namDir );
-			XtVaSetValues( fsb, XmNdirectory, s, NULL );
-			XmStringFree( s );
+		const char* buf=dirname(iconName);
+	  	if(buf)
+		{
+			struct stat iconDirStat;
+  			if(stat(buf,&iconDirStat) >=0 && iconDirStat.st_mode & S_IFDIR)
+			{	
+		  		iconDir=string(buf);
+			}
 		}
 	}
+	else
+	{  
+		char *mvDir=getenv("METVIEW_USER_DIRECTORY");
+  		const char* buf=dirname(iconName);
+		
+		if(mvDir && buf)	  		
+		{ 											  	
+			iconDir=string(mvDir) + "/" + string(buf);						
+			struct stat iconDirStat;
+  			if(! (stat(iconDir.c_str(),&iconDirStat) >=0 && iconDirStat.st_mode & S_IFDIR))
+			{	
+		  		iconDir=string();
+			}
+		}
+		if(mvDir && iconDir.empty())
+		{
+		  	iconDir=string(mvDir);
+		}	
+	}	
+	
+	
+	//Create the qt application
+	QApplication app(gac, gav);
+	
+	MvQSavePool *qSavepool=new MvQSavePool(QString::fromStdString(iconDir));
+	
+ 	//Enter the qt app loop
+ 	app.exec();
+	
+	//Now we have left the qt event loop
+	QString fName=qSavepool->selectedFile();
+	delete qSavepool;
+	
+	//The real save operation
+	if(!fName.isEmpty())
+	{ 
+	  	cleanup(fName.toStdString().c_str()); 
+	}
+	else
+	{
+	 	cleanup(0);
+	}
+	
+	exit(0);
+}  
 
-  }
-
-  ac = 0;
-  xmstrings[0] = XmStringCreateLtoR("Create a Metview icon", (XmStringCharSet)XmSTRING_DEFAULT_CHARSET);
-  XtSetArg(al[ac], XmNlabelString, xmstrings[0]); ac++;
-  XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
-
-  create_toggle = XmCreateToggleButton ( frmw, "create_toggle", al, ac );
-  XmStringFree ( xmstrings [ 0 ] );
-
-  ac = 0;
-  XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
-  XtSetArg(al[ac], XmNtopOffset, 5); ac++;
-  XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
-  XtSetArg(al[ac], XmNbottomOffset, 5); ac++;
-  XtSetArg(al[ac], XmNbottomWidget, create_toggle); ac++;
-  XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
-  XtSetArg(al[ac], XmNleftOffset, 5); ac++;
-  XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
-  XtSetArg(al[ac], XmNrightOffset, 5); ac++;
-  XtSetValues ( fsb, al, ac );
-
-  ac = 0;
-  XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++;
-  XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
-  XtSetArg(al[ac], XmNbottomOffset, 5); ac++;
-  XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
-  XtSetArg(al[ac], XmNleftOffset, 5); ac++;
-  XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
-  XtSetArg(al[ac], XmNrightOffset, 5); ac++;
-  XtSetValues ( create_toggle,al, ac );
-
-  XtAddCallback( fsb, XmNcancelCallback, fsb_cancel_callback, (XtPointer)0 );
-  XtAddCallback( fsb, XmNokCallback,     fsb_ok_callback,     (XtPointer)0 );
-  XtAddCallback( create_toggle, XmNvalueChangedCallback, create_toggle_callback, (XtPointer)0 );
-
-  ac = 0;
-  children[ac++] = fsb;
-  children[ac++] = create_toggle;
-  XtManageChildren(children, ac);
-
-  XtManageChild ( frmw );
-
-  char name[512];
-	char* pname = name;
-  //	sprintf( pname, "Save data from %s", nam );
-  //	XtVaSetValues(topw,XmNtitle,pname,NULL);
-
-
-	sprintf( pname, "%s", mbasename( nam ) );
-	char* pp = pname;
-	while( *pp ) { if(!isalnum(*pp)) *pp = '_'; pp++; };
-	strcat( pname, "." );
-	strcat( pname, lower( cptr ) );
-
-	printf("pname: %s\n",pname);
-
-	XmString s = XmStringCreateSimple( pname );
-	XtVaSetValues( fsb, XmNdirSpec, s, NULL );
-	XmStringFree( s );
-
-	//	if(!XtIsRealized(topw))
-	//		XtRealizeWidget(topw);
-
-	//	XtPopup( topw, XtGrabNone );
-
-  XtAppMainLoop( app_context );
-}
 
-//_____________________________________________________________________
 
 int main( int argc, char** argv )
 {
-  marsinit( &argc, argv, 0, 0, 0 );
-
-  gac = argc;
-  gav = argv;
+	marsinit( &argc, argv, 0, 0, 0 );
 
-  gs  = create_service( progname() );
-  add_service_callback( gs, NULL, save,  NULL );
+	gac = argc;
+  	gav = argv;
+ 	
+  	gs  = create_service(progname());
+  	add_service_callback(gs,NULL,save,NULL);
 
-  service_run( gs );
+  	service_run(gs);
 }
 
diff --git a/src/AppMod/savepool.h b/src/AppMod/savepool.h
new file mode 100644
index 0000000..cd85630
--- /dev/null
+++ b/src/AppMod/savepool.h
@@ -0,0 +1,37 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 savepool_H
+#define savepool_H
+
+#include <QObject>
+#include <QString>
+
+class MvQFileDialog;
+
+class MvQSavePool : public QObject
+{
+Q_OBJECT
+
+public:
+	MvQSavePool(QString);
+	~MvQSavePool();
+	QString selectedFile() {return selectedFile_;}
+	
+public slots:
+	void slotAccept();
+	void slotCancel();
+	
+protected:	
+        MvQFileDialog* fDialog_;
+	QString selectedFile_;
+};	
+
+
+#endif
diff --git a/src/BufrExaminer/Makefile.in b/src/BufrExaminer/Makefile.in
index c1f8e8b..10ae0f8 100644
--- a/src/BufrExaminer/Makefile.in
+++ b/src/BufrExaminer/Makefile.in
@@ -178,6 +178,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -193,6 +194,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -219,11 +222,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/CptecAccess/CptecAccess.cc b/src/CptecAccess/CptecAccess.cc
index 350983a..955a849 100755
--- a/src/CptecAccess/CptecAccess.cc
+++ b/src/CptecAccess/CptecAccess.cc
@@ -74,7 +74,7 @@ in.print();
         {
              string error = "FILE NOT FOUND: ";
              error += ffile.c_str();
-             setError(1, error.c_str());
+             setError(0, error.c_str());
              return;
         }
 
diff --git a/src/CptecAccess/Makefile.in b/src/CptecAccess/Makefile.in
index ea5bd59..3bb3e5e 100644
--- a/src/CptecAccess/Makefile.in
+++ b/src/CptecAccess/Makefile.in
@@ -158,6 +158,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -173,6 +174,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -199,11 +202,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/Datacoverage/Makefile.in b/src/Datacoverage/Makefile.in
index 5e699a8..4c342ca 100644
--- a/src/Datacoverage/Makefile.in
+++ b/src/Datacoverage/Makefile.in
@@ -133,6 +133,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -148,6 +149,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -174,11 +177,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/DebugTools/Makefile.am b/src/DebugTools/Makefile.am
index 311dfaf..a10be1e 100644
--- a/src/DebugTools/Makefile.am
+++ b/src/DebugTools/Makefile.am
@@ -1,5 +1,6 @@
+include $(top_srcdir)/aux_build/autotroll.mk
 
-bin_PROGRAMS = bin/mvmon  bin/xserv
+bin_PROGRAMS = bin/mvmon  bin/xserv bin/MvMonitor
 
 
 bin_mvmon_SOURCES  = moncback.cc mvmon.c
@@ -7,12 +8,29 @@ bin_mvmon_CPPFLAGS = $(MV_MOTIF_FLAGS)
 bin_mvmon_LDADD    = $(MV_MOTIF_UTIL_LIB) $(STANDARD_METVIEW_LIBS_NO_UTIL)
 
 
-bin_xserv_SOURCES  = xserv.c cback.c
-bin_xserv_CPPFLAGS = $(MV_MOTIF_FLAGS)
-bin_xserv_LDADD    = $(MV_MOTIF_UTIL_LIB) $(STANDARD_METVIEW_LIBS_NO_UTIL)
+bin_xserv_SOURCES  = XServ.cc XServ.h XServ.qrc.cpp
+nodist_bin_xserv_SOURCES =  XServ.moc.cpp
+bin_xserv_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil
+bin_xserv_LDFLAGS  = $(QT_LDFLAGS)  $(LDFLAGS) -L../../lib
+bin_xserv_LDADD    = $(LDADD) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(QT_LIBS)
 
 
-BUILT_SOURCES = bin
+bin_MvMonitor_SOURCES  = MvMainMonitor.cc ProcMonitor.cc MvProcNode.cc MvQProcModel.cc \
+ 		            ProcMonitor.h MvProcNode.h MvQProcModel.h debug.qrc
+
+nodist_bin_MvMonitor_SOURCES =  ProcMonitor.moc.cpp debug.qrc.cpp
+bin_MvMonitor_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil
+bin_MvMonitor_LDFLAGS  = $(QT_LDFLAGS)  $(LDFLAGS) -L../../lib
+bin_MvMonitor_LDADD    = $(LDADD) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(QT_LIBS)
+
+AM_LDFLAGS         = $(QT_LDFLAGS)
+
+BUILT_SOURCES = bin XServ.moc.cpp XServ.qrc.cpp ProcMonitor.moc.cpp debug.qrc.cpp
+
+EXTRA_DIST = procInfo.css
 
 bin:
 	ln -s ../../bin bin
+
+clean:
+	-rm -f bin/xserv bin/mvmon *.o *.moc.cpp *.qrc.cpp
diff --git a/src/DebugTools/Makefile.in b/src/DebugTools/Makefile.in
index 795972d..27d6eed 100644
--- a/src/DebugTools/Makefile.in
+++ b/src/DebugTools/Makefile.in
@@ -15,6 +15,41 @@
 
 @SET_MAKE@
 
+# Makerules.
+# This file is part of AutoTroll.
+# Copyright (C) 2006, 2007, 2009, 2010  Benoit Sigoure.
+#
+# AutoTroll is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+#
+# In addition, as a special exception, the copyright holders of AutoTroll
+# give you unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the macros of
+# AutoTroll.  You need not follow the terms of the GNU General Public License
+# when using or distributing such scripts, even though portions of the text of
+# AutoTroll appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes AutoTroll.
+#
+# This special exception to the GPL applies to versions of AutoTroll
+# released by the copyright holders of AutoTroll.  Note that people who make
+# modified versions of AutoTroll are not obligated to grant this special
+# exception for their modified versions; it is their choice whether to do so.
+# The GNU General Public License gives permission to release a modified version
+# without this exception; this exception also makes it possible to release a
+# modified version which carries forward this exception.
+
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
@@ -35,9 +70,11 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-bin_PROGRAMS = bin/mvmon$(EXEEXT) bin/xserv$(EXEEXT)
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/aux_build/autotroll.mk
+bin_PROGRAMS = bin/mvmon$(EXEEXT) bin/xserv$(EXEEXT) \
+	bin/MvMonitor$(EXEEXT)
 subdir = src/DebugTools
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
 	$(top_srcdir)/configure.ac
@@ -49,19 +86,39 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
-am_bin_mvmon_OBJECTS = bin_mvmon-moncback.$(OBJEXT) \
-	bin_mvmon-mvmon.$(OBJEXT)
-bin_mvmon_OBJECTS = $(am_bin_mvmon_OBJECTS)
+am_bin_MvMonitor_OBJECTS = bin_MvMonitor-MvMainMonitor.$(OBJEXT) \
+	bin_MvMonitor-ProcMonitor.$(OBJEXT) \
+	bin_MvMonitor-MvProcNode.$(OBJEXT) \
+	bin_MvMonitor-MvQProcModel.$(OBJEXT)
+nodist_bin_MvMonitor_OBJECTS =  \
+	bin_MvMonitor-ProcMonitor.moc.$(OBJEXT) \
+	bin_MvMonitor-debug.qrc.$(OBJEXT)
+bin_MvMonitor_OBJECTS = $(am_bin_MvMonitor_OBJECTS) \
+	$(nodist_bin_MvMonitor_OBJECTS)
 am__DEPENDENCIES_1 =
-bin_mvmon_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+bin_MvMonitor_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
 AM_V_lt = $(am__v_lt_$(V))
 am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
 am__v_lt_0 = --silent
+bin_MvMonitor_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(AM_CXXFLAGS) $(CXXFLAGS) $(bin_MvMonitor_LDFLAGS) $(LDFLAGS) \
+	-o $@
 am__dirstamp = $(am__leading_dot)dirstamp
-am_bin_xserv_OBJECTS = bin_xserv-xserv.$(OBJEXT) \
-	bin_xserv-cback.$(OBJEXT)
-bin_xserv_OBJECTS = $(am_bin_xserv_OBJECTS)
+am_bin_mvmon_OBJECTS = bin_mvmon-moncback.$(OBJEXT) \
+	bin_mvmon-mvmon.$(OBJEXT)
+bin_mvmon_OBJECTS = $(am_bin_mvmon_OBJECTS)
+bin_mvmon_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_bin_xserv_OBJECTS = bin_xserv-XServ.$(OBJEXT) \
+	bin_xserv-XServ.qrc.$(OBJEXT)
+nodist_bin_xserv_OBJECTS = bin_xserv-XServ.moc.$(OBJEXT)
+bin_xserv_OBJECTS = $(am_bin_xserv_OBJECTS) \
+	$(nodist_bin_xserv_OBJECTS)
 bin_xserv_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+bin_xserv_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(bin_xserv_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
 depcomp = $(SHELL) $(top_srcdir)/config/depcomp
 am__depfiles_maybe = depfiles
@@ -104,8 +161,11 @@ am__v_CXXLD_0 = @echo "  CXXLD " $@;
 AM_V_GEN = $(am__v_GEN_$(V))
 am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
 am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = $(bin_mvmon_SOURCES) $(bin_xserv_SOURCES)
-DIST_SOURCES = $(bin_mvmon_SOURCES) $(bin_xserv_SOURCES)
+SOURCES = $(bin_MvMonitor_SOURCES) $(nodist_bin_MvMonitor_SOURCES) \
+	$(bin_mvmon_SOURCES) $(bin_xserv_SOURCES) \
+	$(nodist_bin_xserv_SOURCES)
+DIST_SOURCES = $(bin_MvMonitor_SOURCES) $(bin_mvmon_SOURCES) \
+	$(bin_xserv_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -137,6 +197,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -152,6 +213,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -178,11 +241,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -310,19 +376,37 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+
+# See autotroll.m4 :)
+SUFFIXES = .moc.cpp .moc.cc .moc.cxx .moc.C .h .hh .hpp \
+			.ui .ui.h .ui.hh .ui.hpp \
+			.qrc .qrc.cpp .qrc.cc .qrc.cxx .qrc.C
+
+DISTCLEANFILES = $(BUILT_SOURCES)
 bin_mvmon_SOURCES = moncback.cc mvmon.c
 bin_mvmon_CPPFLAGS = $(MV_MOTIF_FLAGS)
 bin_mvmon_LDADD = $(MV_MOTIF_UTIL_LIB) $(STANDARD_METVIEW_LIBS_NO_UTIL)
-bin_xserv_SOURCES = xserv.c cback.c
-bin_xserv_CPPFLAGS = $(MV_MOTIF_FLAGS)
-bin_xserv_LDADD = $(MV_MOTIF_UTIL_LIB) $(STANDARD_METVIEW_LIBS_NO_UTIL)
-BUILT_SOURCES = bin
+bin_xserv_SOURCES = XServ.cc XServ.h XServ.qrc.cpp
+nodist_bin_xserv_SOURCES = XServ.moc.cpp
+bin_xserv_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil
+bin_xserv_LDFLAGS = $(QT_LDFLAGS)  $(LDFLAGS) -L../../lib
+bin_xserv_LDADD = $(LDADD) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(QT_LIBS)
+bin_MvMonitor_SOURCES = MvMainMonitor.cc ProcMonitor.cc MvProcNode.cc MvQProcModel.cc \
+ 		            ProcMonitor.h MvProcNode.h MvQProcModel.h debug.qrc
+
+nodist_bin_MvMonitor_SOURCES = ProcMonitor.moc.cpp debug.qrc.cpp
+bin_MvMonitor_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil
+bin_MvMonitor_LDFLAGS = $(QT_LDFLAGS)  $(LDFLAGS) -L../../lib
+bin_MvMonitor_LDADD = $(LDADD) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(QT_LIBS)
+AM_LDFLAGS = $(QT_LDFLAGS)
+BUILT_SOURCES = bin XServ.moc.cpp XServ.qrc.cpp ProcMonitor.moc.cpp debug.qrc.cpp
+EXTRA_DIST = procInfo.css
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
-.SUFFIXES: .c .cc .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+.SUFFIXES: .moc.cpp .moc.cc .moc.cxx .moc.C .h .hh .hpp .ui .ui.h .ui.hh .ui.hpp .qrc .qrc.cpp .qrc.cc .qrc.cxx .qrc.C .c .cc .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/aux_build/autotroll.mk $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
@@ -398,12 +482,15 @@ clean-binPROGRAMS:
 bin/$(am__dirstamp):
 	@$(MKDIR_P) bin
 	@: > bin/$(am__dirstamp)
+bin/MvMonitor$(EXEEXT): $(bin_MvMonitor_OBJECTS) $(bin_MvMonitor_DEPENDENCIES) bin/$(am__dirstamp)
+	@rm -f bin/MvMonitor$(EXEEXT)
+	$(AM_V_CXXLD)$(bin_MvMonitor_LINK) $(bin_MvMonitor_OBJECTS) $(bin_MvMonitor_LDADD) $(LIBS)
 bin/mvmon$(EXEEXT): $(bin_mvmon_OBJECTS) $(bin_mvmon_DEPENDENCIES) bin/$(am__dirstamp)
 	@rm -f bin/mvmon$(EXEEXT)
 	$(AM_V_CXXLD)$(CXXLINK) $(bin_mvmon_OBJECTS) $(bin_mvmon_LDADD) $(LIBS)
 bin/xserv$(EXEEXT): $(bin_xserv_OBJECTS) $(bin_xserv_DEPENDENCIES) bin/$(am__dirstamp)
 	@rm -f bin/xserv$(EXEEXT)
-	$(AM_V_CCLD)$(LINK) $(bin_xserv_OBJECTS) $(bin_xserv_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(bin_xserv_LINK) $(bin_xserv_OBJECTS) $(bin_xserv_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -411,10 +498,17 @@ mostlyclean-compile:
 distclean-compile:
 	-rm -f *.tab.c
 
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MvMonitor-MvMainMonitor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MvMonitor-MvProcNode.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MvMonitor-MvQProcModel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MvMonitor-ProcMonitor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MvMonitor-ProcMonitor.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MvMonitor-debug.qrc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_mvmon-moncback.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_mvmon-mvmon.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_xserv-cback.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_xserv-xserv.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_xserv-XServ.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_xserv-XServ.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_xserv-XServ.qrc.Po at am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -456,38 +550,6 @@ bin_mvmon-mvmon.obj: mvmon.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_mvmon_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bin_mvmon-mvmon.obj `if test -f 'mvmon.c'; then $(CYGPATH_W) 'mvmon.c'; else $(CYGPATH_W) '$(srcdir)/mvmon.c'; fi`
 
-bin_xserv-xserv.o: xserv.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bin_xserv-xserv.o -MD -MP -MF $(DEPDIR)/bin_xserv-xserv.Tpo -c -o bin_xserv-xserv.o `test -f 'xserv.c' || echo '$(srcdir)/'`xserv.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_xserv-xserv.Tpo $(DEPDIR)/bin_xserv-xserv.Po
- at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xserv.c' object='bin_xserv-xserv.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bin_xserv-xserv.o `test -f 'xserv.c' || echo '$(srcdir)/'`xserv.c
-
-bin_xserv-xserv.obj: xserv.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bin_xserv-xserv.obj -MD -MP -MF $(DEPDIR)/bin_xserv-xserv.Tpo -c -o bin_xserv-xserv.obj `if test -f 'xserv.c'; then $(CYGPATH_W) 'xserv.c'; else $(CYGPATH_W) '$(srcdir)/xserv.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_xserv-xserv.Tpo $(DEPDIR)/bin_xserv-xserv.Po
- at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xserv.c' object='bin_xserv-xserv.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bin_xserv-xserv.obj `if test -f 'xserv.c'; then $(CYGPATH_W) 'xserv.c'; else $(CYGPATH_W) '$(srcdir)/xserv.c'; fi`
-
-bin_xserv-cback.o: cback.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bin_xserv-cback.o -MD -MP -MF $(DEPDIR)/bin_xserv-cback.Tpo -c -o bin_xserv-cback.o `test -f 'cback.c' || echo '$(srcdir)/'`cback.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_xserv-cback.Tpo $(DEPDIR)/bin_xserv-cback.Po
- at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='cback.c' object='bin_xserv-cback.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bin_xserv-cback.o `test -f 'cback.c' || echo '$(srcdir)/'`cback.c
-
-bin_xserv-cback.obj: cback.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bin_xserv-cback.obj -MD -MP -MF $(DEPDIR)/bin_xserv-cback.Tpo -c -o bin_xserv-cback.obj `if test -f 'cback.c'; then $(CYGPATH_W) 'cback.c'; else $(CYGPATH_W) '$(srcdir)/cback.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_xserv-cback.Tpo $(DEPDIR)/bin_xserv-cback.Po
- at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='cback.c' object='bin_xserv-cback.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bin_xserv-cback.obj `if test -f 'cback.c'; then $(CYGPATH_W) 'cback.c'; else $(CYGPATH_W) '$(srcdir)/cback.c'; fi`
-
 .cc.o:
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@@ -512,6 +574,102 @@ bin_xserv-cback.obj: cback.c
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
 
+bin_MvMonitor-MvMainMonitor.o: MvMainMonitor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMonitor-MvMainMonitor.o -MD -MP -MF $(DEPDIR)/bin_MvMonitor-MvMainMonitor.Tpo -c -o bin_MvMonitor-MvMainMonitor.o `test -f 'MvMainMonitor.cc' || echo '$(srcdir)/'`MvMainMonitor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMonitor-MvMainMonitor.Tpo $(DEPDIR)/bin_MvMonitor-MvMainMonitor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvMainMonitor.cc' object='bin_MvMonitor-MvMainMonitor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMonitor-MvMainMonitor.o `test -f 'MvMainMonitor.cc' || echo '$(srcdir)/'`MvMainMonitor.cc
+
+bin_MvMonitor-MvMainMonitor.obj: MvMainMonitor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMonitor-MvMainMonitor.obj -MD -MP -MF $(DEPDIR)/bin_MvMonitor-MvMainMonitor.Tpo -c -o bin_MvMonitor-MvMainMonitor.obj `if test -f 'MvMainMonitor.cc'; then $(CYGPATH_W) 'MvMainMonitor.cc'; else $(CYGPATH_W) '$(srcdir)/MvMainMonitor.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMonitor-MvMainMonitor.Tpo $(DEPDIR)/bin_MvMonitor-MvMainMonitor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvMainMonitor.cc' object='bin_MvMonitor-MvMainMonitor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMonitor-MvMainMonitor.obj `if test -f 'MvMainMonitor.cc'; then $(CYGPATH_W) 'MvMainMonitor.cc'; else $(CYGPATH_W) '$(srcdir)/MvMainMonitor.cc'; fi`
+
+bin_MvMonitor-ProcMonitor.o: ProcMonitor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMonitor-ProcMonitor.o -MD -MP -MF $(DEPDIR)/bin_MvMonitor-ProcMonitor.Tpo -c -o bin_MvMonitor-ProcMonitor.o `test -f 'ProcMonitor.cc' || echo '$(srcdir)/'`ProcMonitor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMonitor-ProcMonitor.Tpo $(DEPDIR)/bin_MvMonitor-ProcMonitor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ProcMonitor.cc' object='bin_MvMonitor-ProcMonitor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMonitor-ProcMonitor.o `test -f 'ProcMonitor.cc' || echo '$(srcdir)/'`ProcMonitor.cc
+
+bin_MvMonitor-ProcMonitor.obj: ProcMonitor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMonitor-ProcMonitor.obj -MD -MP -MF $(DEPDIR)/bin_MvMonitor-ProcMonitor.Tpo -c -o bin_MvMonitor-ProcMonitor.obj `if test -f 'ProcMonitor.cc'; then $(CYGPATH_W) 'ProcMonitor.cc'; else $(CYGPATH_W) '$(srcdir)/ProcMonitor.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMonitor-ProcMonitor.Tpo $(DEPDIR)/bin_MvMonitor-ProcMonitor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ProcMonitor.cc' object='bin_MvMonitor-ProcMonitor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMonitor-ProcMonitor.obj `if test -f 'ProcMonitor.cc'; then $(CYGPATH_W) 'ProcMonitor.cc'; else $(CYGPATH_W) '$(srcdir)/ProcMonitor.cc'; fi`
+
+bin_MvMonitor-MvProcNode.o: MvProcNode.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMonitor-MvProcNode.o -MD -MP -MF $(DEPDIR)/bin_MvMonitor-MvProcNode.Tpo -c -o bin_MvMonitor-MvProcNode.o `test -f 'MvProcNode.cc' || echo '$(srcdir)/'`MvProcNode.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMonitor-MvProcNode.Tpo $(DEPDIR)/bin_MvMonitor-MvProcNode.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvProcNode.cc' object='bin_MvMonitor-MvProcNode.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMonitor-MvProcNode.o `test -f 'MvProcNode.cc' || echo '$(srcdir)/'`MvProcNode.cc
+
+bin_MvMonitor-MvProcNode.obj: MvProcNode.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMonitor-MvProcNode.obj -MD -MP -MF $(DEPDIR)/bin_MvMonitor-MvProcNode.Tpo -c -o bin_MvMonitor-MvProcNode.obj `if test -f 'MvProcNode.cc'; then $(CYGPATH_W) 'MvProcNode.cc'; else $(CYGPATH_W) '$(srcdir)/MvProcNode.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMonitor-MvProcNode.Tpo $(DEPDIR)/bin_MvMonitor-MvProcNode.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvProcNode.cc' object='bin_MvMonitor-MvProcNode.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMonitor-MvProcNode.obj `if test -f 'MvProcNode.cc'; then $(CYGPATH_W) 'MvProcNode.cc'; else $(CYGPATH_W) '$(srcdir)/MvProcNode.cc'; fi`
+
+bin_MvMonitor-MvQProcModel.o: MvQProcModel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMonitor-MvQProcModel.o -MD -MP -MF $(DEPDIR)/bin_MvMonitor-MvQProcModel.Tpo -c -o bin_MvMonitor-MvQProcModel.o `test -f 'MvQProcModel.cc' || echo '$(srcdir)/'`MvQProcModel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMonitor-MvQProcModel.Tpo $(DEPDIR)/bin_MvMonitor-MvQProcModel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQProcModel.cc' object='bin_MvMonitor-MvQProcModel.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMonitor-MvQProcModel.o `test -f 'MvQProcModel.cc' || echo '$(srcdir)/'`MvQProcModel.cc
+
+bin_MvMonitor-MvQProcModel.obj: MvQProcModel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMonitor-MvQProcModel.obj -MD -MP -MF $(DEPDIR)/bin_MvMonitor-MvQProcModel.Tpo -c -o bin_MvMonitor-MvQProcModel.obj `if test -f 'MvQProcModel.cc'; then $(CYGPATH_W) 'MvQProcModel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQProcModel.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMonitor-MvQProcModel.Tpo $(DEPDIR)/bin_MvMonitor-MvQProcModel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQProcModel.cc' object='bin_MvMonitor-MvQProcModel.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMonitor-MvQProcModel.obj `if test -f 'MvQProcModel.cc'; then $(CYGPATH_W) 'MvQProcModel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQProcModel.cc'; fi`
+
+bin_MvMonitor-ProcMonitor.moc.o: ProcMonitor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMonitor-ProcMonitor.moc.o -MD -MP -MF $(DEPDIR)/bin_MvMonitor-ProcMonitor.moc.Tpo -c -o bin_MvMonitor-ProcMonitor.moc.o `test -f 'ProcMonitor.moc.cpp' || echo '$(srcdir)/'`ProcMonitor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMonitor-ProcMonitor.moc.Tpo $(DEPDIR)/bin_MvMonitor-ProcMonitor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ProcMonitor.moc.cpp' object='bin_MvMonitor-ProcMonitor.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMonitor-ProcMonitor.moc.o `test -f 'ProcMonitor.moc.cpp' || echo '$(srcdir)/'`ProcMonitor.moc.cpp
+
+bin_MvMonitor-ProcMonitor.moc.obj: ProcMonitor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMonitor-ProcMonitor.moc.obj -MD -MP -MF $(DEPDIR)/bin_MvMonitor-ProcMonitor.moc.Tpo -c -o bin_MvMonitor-ProcMonitor.moc.obj `if test -f 'ProcMonitor.moc.cpp'; then $(CYGPATH_W) 'ProcMonitor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/ProcMonitor.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMonitor-ProcMonitor.moc.Tpo $(DEPDIR)/bin_MvMonitor-ProcMonitor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ProcMonitor.moc.cpp' object='bin_MvMonitor-ProcMonitor.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMonitor-ProcMonitor.moc.obj `if test -f 'ProcMonitor.moc.cpp'; then $(CYGPATH_W) 'ProcMonitor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/ProcMonitor.moc.cpp'; fi`
+
+bin_MvMonitor-debug.qrc.o: debug.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMonitor-debug.qrc.o -MD -MP -MF $(DEPDIR)/bin_MvMonitor-debug.qrc.Tpo -c -o bin_MvMonitor-debug.qrc.o `test -f 'debug.qrc.cpp' || echo '$(srcdir)/'`debug.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMonitor-debug.qrc.Tpo $(DEPDIR)/bin_MvMonitor-debug.qrc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='debug.qrc.cpp' object='bin_MvMonitor-debug.qrc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMonitor-debug.qrc.o `test -f 'debug.qrc.cpp' || echo '$(srcdir)/'`debug.qrc.cpp
+
+bin_MvMonitor-debug.qrc.obj: debug.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MvMonitor-debug.qrc.obj -MD -MP -MF $(DEPDIR)/bin_MvMonitor-debug.qrc.Tpo -c -o bin_MvMonitor-debug.qrc.obj `if test -f 'debug.qrc.cpp'; then $(CYGPATH_W) 'debug.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/debug.qrc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MvMonitor-debug.qrc.Tpo $(DEPDIR)/bin_MvMonitor-debug.qrc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='debug.qrc.cpp' object='bin_MvMonitor-debug.qrc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MvMonitor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MvMonitor-debug.qrc.obj `if test -f 'debug.qrc.cpp'; then $(CYGPATH_W) 'debug.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/debug.qrc.cpp'; fi`
+
 bin_mvmon-moncback.o: moncback.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_mvmon_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_mvmon-moncback.o -MD -MP -MF $(DEPDIR)/bin_mvmon-moncback.Tpo -c -o bin_mvmon-moncback.o `test -f 'moncback.cc' || echo '$(srcdir)/'`moncback.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_mvmon-moncback.Tpo $(DEPDIR)/bin_mvmon-moncback.Po
@@ -528,6 +686,78 @@ bin_mvmon-moncback.obj: moncback.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_mvmon_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_mvmon-moncback.obj `if test -f 'moncback.cc'; then $(CYGPATH_W) 'moncback.cc'; else $(CYGPATH_W) '$(srcdir)/moncback.cc'; fi`
 
+bin_xserv-XServ.o: XServ.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_xserv-XServ.o -MD -MP -MF $(DEPDIR)/bin_xserv-XServ.Tpo -c -o bin_xserv-XServ.o `test -f 'XServ.cc' || echo '$(srcdir)/'`XServ.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_xserv-XServ.Tpo $(DEPDIR)/bin_xserv-XServ.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='XServ.cc' object='bin_xserv-XServ.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_xserv-XServ.o `test -f 'XServ.cc' || echo '$(srcdir)/'`XServ.cc
+
+bin_xserv-XServ.obj: XServ.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_xserv-XServ.obj -MD -MP -MF $(DEPDIR)/bin_xserv-XServ.Tpo -c -o bin_xserv-XServ.obj `if test -f 'XServ.cc'; then $(CYGPATH_W) 'XServ.cc'; else $(CYGPATH_W) '$(srcdir)/XServ.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_xserv-XServ.Tpo $(DEPDIR)/bin_xserv-XServ.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='XServ.cc' object='bin_xserv-XServ.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_xserv-XServ.obj `if test -f 'XServ.cc'; then $(CYGPATH_W) 'XServ.cc'; else $(CYGPATH_W) '$(srcdir)/XServ.cc'; fi`
+
+bin_xserv-XServ.qrc.o: XServ.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_xserv-XServ.qrc.o -MD -MP -MF $(DEPDIR)/bin_xserv-XServ.qrc.Tpo -c -o bin_xserv-XServ.qrc.o `test -f 'XServ.qrc.cpp' || echo '$(srcdir)/'`XServ.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_xserv-XServ.qrc.Tpo $(DEPDIR)/bin_xserv-XServ.qrc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='XServ.qrc.cpp' object='bin_xserv-XServ.qrc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_xserv-XServ.qrc.o `test -f 'XServ.qrc.cpp' || echo '$(srcdir)/'`XServ.qrc.cpp
+
+bin_xserv-XServ.qrc.obj: XServ.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_xserv-XServ.qrc.obj -MD -MP -MF $(DEPDIR)/bin_xserv-XServ.qrc.Tpo -c -o bin_xserv-XServ.qrc.obj `if test -f 'XServ.qrc.cpp'; then $(CYGPATH_W) 'XServ.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/XServ.qrc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_xserv-XServ.qrc.Tpo $(DEPDIR)/bin_xserv-XServ.qrc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='XServ.qrc.cpp' object='bin_xserv-XServ.qrc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_xserv-XServ.qrc.obj `if test -f 'XServ.qrc.cpp'; then $(CYGPATH_W) 'XServ.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/XServ.qrc.cpp'; fi`
+
+bin_xserv-XServ.moc.o: XServ.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_xserv-XServ.moc.o -MD -MP -MF $(DEPDIR)/bin_xserv-XServ.moc.Tpo -c -o bin_xserv-XServ.moc.o `test -f 'XServ.moc.cpp' || echo '$(srcdir)/'`XServ.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_xserv-XServ.moc.Tpo $(DEPDIR)/bin_xserv-XServ.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='XServ.moc.cpp' object='bin_xserv-XServ.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_xserv-XServ.moc.o `test -f 'XServ.moc.cpp' || echo '$(srcdir)/'`XServ.moc.cpp
+
+bin_xserv-XServ.moc.obj: XServ.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_xserv-XServ.moc.obj -MD -MP -MF $(DEPDIR)/bin_xserv-XServ.moc.Tpo -c -o bin_xserv-XServ.moc.obj `if test -f 'XServ.moc.cpp'; then $(CYGPATH_W) 'XServ.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/XServ.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_xserv-XServ.moc.Tpo $(DEPDIR)/bin_xserv-XServ.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='XServ.moc.cpp' object='bin_xserv-XServ.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_xserv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_xserv-XServ.moc.obj `if test -f 'XServ.moc.cpp'; then $(CYGPATH_W) 'XServ.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/XServ.moc.cpp'; fi`
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -648,13 +878,12 @@ distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 	-rm -f bin/$(am__dirstamp)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
 	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-clean: clean-am
-
 clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
 
 distclean: distclean-am
@@ -740,9 +969,77 @@ uninstall-am: uninstall-binPROGRAMS
 	uninstall-binPROGRAMS
 
 
+ # ------------- #
+ # DOCUMENTATION #
+ # ------------- #
+
+# --- #
+# MOC #
+# --- #
+
+.hpp.moc.cpp:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.hh.moc.cpp:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.h.moc.cpp:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+
+.hpp.moc.cc:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.hh.moc.cc:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.h.moc.cc:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+
+.hpp.moc.cxx:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.hh.moc.cxx:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.h.moc.cxx:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+
+.hpp.moc.C:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.hh.moc.C:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.h.moc.C:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+
+# --- #
+# UIC #
+# --- #
+
+.ui.ui.hpp:
+	$(UIC) $< -o $@
+
+.ui.ui.hh:
+	$(UIC) $< -o $@
+
+.ui.ui.h:
+	$(UIC) $< -o $@
+
+# --- #
+# RCC #
+# --- #
+
+.qrc.qrc.cpp:
+	$(RCC) -name `echo "$<" | sed 's/\.qrc$$//'` $< -o $@
+
+.qrc.qrc.cc:
+	$(RCC) -name `echo "$<" | sed 's/\.qrc$$//'` $< -o $@
+
+.qrc.qrc.cxx:
+	$(RCC) -name `echo "$<" | sed 's/\.qrc$$//'` $< -o $@
+
+.qrc.qrc.C:
+	$(RCC) -name `echo "$<" | sed 's/\.qrc$$//'` $< -o $@
+
 bin:
 	ln -s ../../bin bin
 
+clean:
+	-rm -f bin/xserv bin/mvmon *.o *.moc.cpp *.qrc.cpp
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/src/DebugTools/MvMainMonitor.cc b/src/DebugTools/MvMainMonitor.cc
new file mode 100644
index 0000000..c2cc1e5
--- /dev/null
+++ b/src/DebugTools/MvMainMonitor.cc
@@ -0,0 +1,64 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 <Metview.h>
+#include "mars.h"
+#include <iostream>
+
+#include "MvQApplication.h"
+
+#include "ProcMonitor.h"
+
+svc          *s = NULL;
+int          ac;
+char       **av;
+
+ProcMonitor *mon;
+
+void browse_cb(svcid *id,request *r,void *)
+{  
+    	mon->input(id,r);
+}
+
+void dummy_cb(svcid *id,request */*r*/,void *)
+{
+  	send_reply(id,NULL);
+}
+
+void monitor()
+{
+	request *t = empty_request("MONITOR");
+	call_switchboard(s,t);
+	free_all_requests(t);
+}
+
+int main(int argc, char **argv)
+{
+	MvQApplication app(argc,argv);
+	
+	//Initialise resorces from a static library (libMvQtGui)
+	Q_INIT_RESOURCE(window);
+	
+	QApplication::setWindowIcon(
+		QIcon(QPixmap(QString::fromUtf8(":/window/metview_logo"))));
+		
+	s=app.getService();
+	add_service_callback(s,NULL,dummy_cb,NULL);
+	add_progress_callback(s,NULL,browse_cb,NULL);
+	
+	mon=new ProcMonitor(s);	
+	
+	//start
+	monitor();	
+	
+	mon->show();
+	
+	return app.exec();
+}
+
diff --git a/src/DebugTools/MvProcNode.cc b/src/DebugTools/MvProcNode.cc
new file mode 100644
index 0000000..d080d12
--- /dev/null
+++ b/src/DebugTools/MvProcNode.cc
@@ -0,0 +1,618 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvProcNode.h"
+
+#include <algorithm> 
+#include <iostream>
+#include <sstream>
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <signal.h>
+
+unsigned long MvProcStat::uptime_=0;
+long MvProcStat::pageSize_=0;
+
+vector<MvProcNode*> MvProcNode::items_; 
+vector<MvProcRequest*> MvProcNode::procRequests_; 
+MvProcNode* MvProcNode::root_=0; 
+MvProcNodeObserver* MvProcNode::observer_=0;
+
+//=============================================
+//
+// MvProcStat
+//
+//=============================================
+
+MvProcStat::MvProcStat(const string& /*host*/,long pid)	:
+  cpu_(0)
+{
+ 	stringstream ss;
+	ss << pid;
+
+	procPath_="/proc/" + ss.str() + "/stat";
+	sysPath_="/proc/stat";
+
+	if(pageSize_==0)
+		pageSize_=sysconf(_SC_PAGESIZE);
+
+	if(!hasUptime())
+	{
+		readUptime();
+	}
+	readStartTime();
+}
+
+void MvProcStat::readUptime()
+{
+	//Get the system uptime	
+	//We need to read it only once 
+	FILE *fp;
+
+	if((fp=fopen("/proc/uptime","r")))
+	{
+	  	float fv;
+		if(fscanf(fp,"%f",&fv) != EOF)
+		{
+			uptime_=static_cast<long>(fv);
+
+			cout << "uptime " << uptime_ << endl;  
+		} 
+		fclose(fp);
+	}
+}
+
+void MvProcStat::readStartTime()
+{	
+	if(!hasUptime() )
+	  	return;
+  
+  	FILE *fp;
+
+	if((fp=fopen(procPath_.c_str(),"r")) != NULL)
+	{
+		for(int i=0; i < 21; i++)
+		{
+			if(fscanf(fp,"%*s") == EOF)
+			{
+				fclose(fp);
+				return;
+			}	  
+		} 
+		long lv;
+		if(fscanf(fp,"%ld",&lv) != EOF)
+		{
+			startTime_=time(0)-(uptime_-lv/sysconf(_SC_CLK_TCK));	
+			cout << "start time " << startTime_ << " " << lv << endl;
+		}
+	}
+	
+	fclose(fp);
+	
+}
+
+bool MvProcStat::update()
+{
+	int cpuOri=cpu_;
+	string vmRssOri=vmRss_;
+	string vmSharedOri=vmShared_;
+
+	if(updateStats())
+		return false;
+
+	if(cpuOri != cpu_ ||
+	   vmRssOri != vmRss_ ||
+	   vmSharedOri != vmShared_ || 
+	   lastElapsedTime_ != elapsedTime())
+	{	
+		return true;
+	}
+
+	return false;
+}
+
+int MvProcStat::updateStats()
+{    	
+    	FILE *fpP, *fpS;	
+	CpuTime actCpuTime;
+
+	if((fpP=fopen(procPath_.c_str(),"r")) == NULL)
+	{
+        	return -1;
+    	}
+
+	if((fpS=fopen(sysPath_.c_str(),"r")) == NULL)
+	{  
+        	return -1;
+    	}
+  
+	long int rss;
+
+    	//Read process cpu time from /proc/pid/stat
+    	if (fscanf(fpP, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %lu"
+                "%lu %ld %ld %*d %*d %*d %*d %*u %*u %ld",
+                &actCpuTime.uTime_, &actCpuTime.sTime_,
+                &actCpuTime.cuTime_, &actCpuTime.csTime_,&rss) == EOF) 
+	{
+        	fclose(fpP);
+        	return -1;
+    	}
+  
+    	fclose(fpP);
+    
+	//Get rss memory
+	vmRss_=byteToMbyte(rss*pageSize_);
+
+    	//Read system cpu time from proc/stat
+    	long unsigned int cpuSys[10];
+    	memset(cpuSys, 0, sizeof(cpuSys));
+    	if (fscanf(fpS, "%*s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu",
+                &cpuSys[0], &cpuSys[1], &cpuSys[2], &cpuSys[3],
+                &cpuSys[4], &cpuSys[5], &cpuSys[6], &cpuSys[7],
+                &cpuSys[8], &cpuSys[9]) == EOF)
+	{
+		fclose(fpS);
+        	return -1;
+    	}
+    	fclose(fpS);
+	
+	//Sum up the numbers to get the total cpu time
+    	long unsigned int v=0;
+    	for(int i=0; i < 10;i++)
+	  	v+=cpuSys[i];
+	
+        actCpuTime.total_=v;
+	
+	//Cpu usage
+	if(!prevCpuTime_.isEmpty())
+	{
+		cpu_=getCpuUsage(&actCpuTime,&prevCpuTime_);
+	}
+	prevCpuTime_=actCpuTime;
+	
+	return 0;
+}
+
+string MvProcStat::elapsedTime()
+{ 	
+	time_t t=time(0)-startTime_;
+	int h=t/3600;
+	int m=(t-h*3600)/60;
+
+	stringstream ss;
+   	ss << h << "h:" << m  << "m";
+   	lastElapsedTime_=ss.str();
+	return lastElapsedTime_;
+}
+
+//Calculates the elapsed CPU usage between 2 measuring points. in percent
+int MvProcStat::getCpuUsage(CpuTime* current,CpuTime* prev)
+{
+    	long unsigned int tdiff = current->total_-prev->total_;
+
+	//cout << "cpu " << tdiff << " " << current->uTime_ << " " << prev->uTime_ << endl;
+
+    	return static_cast<int>(100. * ((current->uTime_ + current->cuTime_)
+                    - (prev->uTime_ + prev->cuTime_))
+                    / static_cast<float>(tdiff));
+
+	
+	//*scpu_usage = 100 * ((((current->stime_ticks + current->cstime_ticks)
+    //                - (prev->stime_ticks + prev->cstime_ticks))) /
+    //                (double) total_time_diff);
+}	
+
+string MvProcStat::byteToMbyte(unsigned long int bv)
+{
+	stringstream ss;
+	ss.setf( std::ios::fixed, std:: ios::floatfield );
+	ss.precision(1);
+	ss << static_cast<double>(bv)/1048576. << " M";
+	
+	return ss.str();
+}
+
+//=============================================
+//
+// MvProcNode
+//
+//=============================================
+
+MvProcNode::MvProcNode(long ref,request *r) :
+	ref_(ref),
+	pid_(-50),
+	stats_(0),
+	killLevel_(0),
+	procRequest_(0),
+	parent_(0)	
+{
+	if(r)
+	{
+		if(const char *v=get_value(r,"NAME",0))		
+		  	name_=string(v);
+		if(const char *v=get_value(r,"HOST",0))
+			host_=string(v);
+		if(const char* v=get_value(r,"USER",0))
+			user_=string(v);		
+		if(const char* v=get_value(r,"PID",0))
+		{
+			pidStr_=string(v);		
+			pid_=atol(pidStr_.c_str());
+			if(pid_ > 0)			
+			{				
+				stats_=new MvProcStat(host_,pid_);
+				updateStats();
+			}
+		}
+		
+		niceName_=name_;
+		queryNiceName();
+	}
+
+	items_.push_back(this);
+}
+
+MvProcNode::~MvProcNode()
+{	
+	if(items_.size() >0)
+	{  
+		vector<MvProcNode*>::iterator it=std::find(items_.begin(),items_.end(),this);
+		if(it != items_.end())
+			items_.erase(it);
+	}
+	
+  	if(stats_)
+		delete stats_;
+		
+	//Delete children
+	for(vector<MvProcNode*>::iterator it=children_.begin(); it != children_.end(); it++)
+	{
+		delete *it;
+	}
+	
+	children_.clear();
+	
+	if(procRequest_)
+	  	delete procRequest_;
+}
+
+void MvProcNode::queryNiceName()
+{
+	request *s  = mars.setup;
+	while(s)
+	{
+		if( strcmp(s->name,"service") == 0)
+		{
+			const char *n = get_value(s,"name",0);
+			if(n && strcmp(n,name_.c_str()) == 0)
+			{
+				const char *p = get_value(s,"fullname",0);
+				if(p)
+				{
+					niceName_=string(p);
+					return;
+				}
+			}
+		}
+		s = s->next;
+	}
+} 
+
+MvProcNode* MvProcNode::root()
+{
+	if(!root_)
+	{
+	  	root_=new MvProcNode(-1,0);
+	}
+	
+	return root_;
+}
+
+MvProcNode* MvProcNode::childAt(int i) const 
+{
+	return (i>=0 && i < static_cast<int>(children_.size()))?children_.at(i):0;
+}
+
+int MvProcNode::indexOfChild(MvProcNode* item) const 
+{
+	for(int i=0; i < static_cast<int>(children_.size()); i++)
+		if(children_.at(i) == item)
+			return i;
+
+	return -1;
+}
+
+void MvProcNode::add(long ref,request* r)
+{
+  	MvProcNode* proc=new MvProcNode(ref,r);
+	
+	for(vector<MvProcNode*>::iterator it=items_.begin(); it != items_.end(); it++)
+	{
+	  	if(*it != root_ && proc != *it && 
+		   proc->name().find((*it)->name()) == 0 && proc->name().find("@") != string::npos)
+		{
+		  	proc->setParent(*it);
+			return;
+		}
+	}
+	
+	proc->setParent(root_);
+	
+	//Reparent existing items if needed
+	if(!proc->name().find("@") != string::npos)
+	{ 
+		for(vector<MvProcNode*>::iterator it=items_.begin(); it != items_.end(); it++)
+		{
+	  		if(*it != root_ && proc != *it && (*it)->name().find("@") != string::npos)
+			{
+			  	string s=(*it)->name().substr(0,(*it)->name().find("@"));
+				if(s==proc->name())
+					(*it)->setParent(proc);
+			}
+		}	
+	}	
+}  
+
+void MvProcNode::remove(long ref,string name)
+{
+	MvProcNode *proc=find(ref,name);
+	if(proc)
+	{
+	  	if(proc->parent())
+		{
+		  	proc->parent()->removeChild(proc);
+		  	delete proc;
+		}	
+	}
+}
+
+void MvProcNode::setProcRequest(MvProcRequest* req)
+{  	
+	if(procRequest_)
+	{
+	  	delete  procRequest_;
+		procRequest_=0;
+	}	
+  
+	procRequest_=req;
+}
+
+void MvProcNode::setParent(MvProcNode* p) 
+{
+  	if(parent_)
+	{
+	  	parent_->removeChild(this);
+	}	
+	  
+	parent_=p;
+	parent_->addChild(this);
+}
+
+void MvProcNode::addChild(MvProcNode* item)
+{
+  	children_.push_back(item); 
+} 
+
+void MvProcNode::removeChild(MvProcNode* item)
+{
+	if(children_.size() > 0)
+	{  
+  		vector<MvProcNode*>::iterator it=std::find(children_.begin(),children_.end(),item);
+		if(it != children_.end()) 	
+			children_.erase(it); 
+	}	
+} 
+
+void MvProcNode::updateInfo()
+{
+ 	for(vector<MvProcNode*>::iterator it=items_.begin(); it != items_.end(); it++)
+	{	  	
+  		(*it)->updateStats();
+	}	 
+}  
+
+void MvProcNode::updateStats()
+{
+	if(pid_ <0 || !stats_)
+	  	return;
+  	
+	if(stats_->update() && observer_)
+		observer_->infoChanged(this);
+}
+
+MvProcNode* MvProcNode::find(long r,string name)
+{
+	for(vector<MvProcNode*>::iterator it=items_.begin(); it != items_.end(); it++)
+	{
+	  	if((*it)->ref() == r && (*it)->name() == name)
+		  	return *it;
+		
+	}	
+	return 0;
+}
+
+void MvProcNode::killProc()
+{
+	int sig;
+	switch(killLevel_++)
+	{
+		case 0:  sig = 15; break;
+		default: sig = 9;  break;
+	}
+	
+	kill(pid_,sig);
+}
+
+
+void MvProcNode::addProcRequest(long reqId,long ref, const string& name,request *r)
+{  	
+	procRequests_.push_back(new MvProcRequest(r));
+	assignProcRequest(reqId,ref,name);
+}
+
+
+void MvProcNode::assignProcRequest(long reqId,long ref, const string& name)
+{  	
+	for(vector<MvProcRequest*>::iterator it=procRequests_.begin();
+	    it != procRequests_.end(); it++)
+	{
+		if((*it)->reqId() == reqId)
+		{
+			if(MvProcNode *proc=find(ref,name))
+			{
+			  	if(proc->parent() != root_) 
+				{
+			  		proc->setProcRequest(*it);
+					procRequests_.erase(it);
+					return;
+				}	
+			}
+		}
+	}		  
+}
+
+//===========================================
+//  MvProcRequest
+//===========================================
+
+MvProcRequest::MvProcRequest(request *r) :
+    req_(0)
+{
+	reqId_ = atol(get_value(r,"REQ_ID",    0));
+	sourceRef_ = atol(get_value(r,"SOURCE_REF",0));
+
+	if(const char *ch=get_value(r,"TARGET",0))
+	  	target_=string(ch);
+	
+	if(const char *ch=get_value(r,"SOURCE",0))
+	  	source_=string(ch);	
+	
+	const char *x   = get_value(r,"WAITMODE",0);
+	int sync  = x?atoi(x):0;
+
+	if(r->next)
+	{	  
+	 	req_=clone_all_requests(r->next);
+		
+		if(const char *ch = get_value(req_,"_CLASS",0))
+		{
+		  	className_=string(ch);
+		}
+		else
+		{
+		  	className_="REQUEST";
+		}
+		
+		if(const char *ch = get_value(req_,"_NAME",0))
+		{
+		  	name_=string(ch); //mbasename(
+		}
+		else
+		{
+		  	name_=string(req_->name);
+		}
+		
+		if(sync)
+		{
+			name_+=" (synchrone)";
+		}
+		
+		if(char *rc=request2string(req_))
+			reqStr_=string(rc);		
+		
+	}
+}
+
+MvProcRequest::~MvProcRequest()
+{
+	if(req_)
+	  	free_all_requests(req_);
+}	
+
+
+
+MvServiceInfo::MvServiceInfo(long ref,request *r) : MvProcNode(ref,r)
+{	
+	//name        = strcache(get_value(r,"NAME",0));
+
+	// Look for  @
+	//int at  = 0;
+	//const char *p = name;
+	//while(*p) { if(*p == '@') at++; p++; }
+
+	//host        = strcache(get_value(r,"HOST",0));
+	//user        = strcache(get_value(r,"USER",0));
+	//pid         = atol(get_value(r,"PID",0));
+
+    //const char *refp = get_value(r,"REF",0);
+    //if( refp ) ref = atol( refp );
+	//else       ref = 0;
+
+	//name        = strcache(nice_name(name));
+	//if(!at) icon  = DragAddIcon(drag_service,"SERVICE",name,this,0,0);
+	killLevel_  = 0;
+}
+
+void MvServiceInfo::debug()
+{
+	//kill(pid_,SIGUSR2);
+}
+
+/*void MvServiceInfo::kill()
+{
+	int sig;
+	switch(killLevel_++)
+	{
+		case 0:  sig = 15; break;
+		default: sig = 9;  break;
+	}
+	//kill(pid_,sig);
+}*/
+
+void MvServiceInfo::open()
+{
+	//Info::Open();
+	//char buf[1024];
+	//sprintf(buf,"Host: %s\nUser: %s\nPID : %d",
+	//	host,user,pid);
+	//	XmTextSetString(request_text,buf);
+}
+
+
+MvRequestInfo::MvRequestInfo(long ref,long f,long t,request *s,int sync) : 
+	MvProcNode(ref,s),
+	from_(f),
+	to_(t)
+{
+	req_       = clone_all_requests(s);
+	const char *c = get_value(req_,"_CLASS",0);
+	const char *n = mbasename(get_value(req_,"_NAME",0));
+
+	if(!c || !*c) c = "REQUEST";
+	if(!n || !*n) n = req_->name;
+
+	if(sync)
+	{
+		char buf[1024];
+		sprintf(buf,"%s (synchrone)",n);
+		name_ = string(strcache(buf));
+	}
+	else name_ = string(strcache(n));
+
+	//icon    = DragAddIcon(drag_request,c,name,this,0,0);
+}
+
+MvRequestInfo::~MvRequestInfo()
+{
+	free_all_requests(req_);
+}
+
+
+
diff --git a/src/DebugTools/MvProcNode.h b/src/DebugTools/MvProcNode.h
new file mode 100644
index 0000000..388ee25
--- /dev/null
+++ b/src/DebugTools/MvProcNode.h
@@ -0,0 +1,238 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvProcNode_H
+#define MvProcNode_H
+
+#include "mars.h"
+
+#include <string>
+#include <vector>
+
+using namespace std;
+
+class MvProcNode;
+class MvProcRequest;
+
+class CpuTime
+{
+public:
+    	CpuTime() {clear();}
+ 	void clear() {uTime_=0; sTime_=0; cuTime_=0; csTime_=0; total_=0;}
+ 	bool isEmpty() const {return total_ == 0;}
+
+ 	long unsigned int 	uTime_;
+	long int		sTime_;
+ 	long unsigned int	cuTime_;
+	long int		csTime_;
+	long unsigned int	total_;
+};
+
+class  MvProcStat
+{
+public:
+	MvProcStat(const string&,long);
+
+	string vmSize() const {return vmSize_;}
+	string vmRss() const {return vmRss_;}
+	string vmShared() const {return vmShared_;}
+	int cpu() const {return cpu_;}
+	string elapsedTime();
+        bool update();
+       
+protected:
+	void readStartTime();
+        int updateStats();
+        int getCpuUsage(CpuTime*,CpuTime*);
+        string byteToMbyte(unsigned long int);
+	static void readUptime();
+        static bool hasUptime() {return uptime_ > 0;}	
+
+        string procPath_;
+	string sysPath_;
+	string vmSize_;
+	string vmRss_;
+	string vmShared_;
+        int cpu_;
+	CpuTime prevCpuTime_;
+        time_t startTime_;
+	string lastElapsedTime_;
+        static long pageSize_;
+	static unsigned long uptime_;	
+};
+
+
+class MvProcNodeObserver 
+{
+public:
+	MvProcNodeObserver() {};
+	virtual void infoChanged(MvProcNode*) {};
+};
+
+class MvProcNode
+{
+public:
+	string name() {return name_;}
+	string niceName() {return niceName_;}
+	long pid() {return pid_;}
+	string pidAsString() {return pidStr_;}
+	string host() {return host_;}
+	string user() {return user_;}
+	long ref() {return ref_;}
+
+	MvProcStat* stats() const {return stats_;}
+
+	void killProc();
+	virtual void debug() {};
+	virtual void open() {};
+
+	MvProcNode* childAt(int) const;
+	int indexOfChild(MvProcNode*) const;
+	MvProcNode* parent() const {return parent_;}
+	int childrenCount() const {return static_cast<int>(children_.size());}	
+	void setProcRequest(MvProcRequest*);
+	MvProcRequest* procRequest() {return procRequest_;}
+		
+	static MvProcNode* root();
+	static void add(long,request *r);
+	static void remove(long,string);
+	static void updateInfo();
+	static void setObserver(MvProcNodeObserver* o) {observer_=o;}
+	static MvProcNode* find(long,string);
+	static void addProcRequest(long,long,const string&,request*);
+	static void assignProcRequest(long,long,const string&);
+
+protected:
+	MvProcNode(long,request *r);
+	~MvProcNode();
+	
+	void queryNiceName();
+	void setParent(MvProcNode*);
+	void addChild(MvProcNode*);
+	void removeChild(MvProcNode*);
+	void updateStats();
+	
+	string name_;
+	string niceName_;
+	long ref_;
+	long pid_;
+	string pidStr_;
+	string host_;
+	string user_;
+	MvProcStat* stats_;
+	int killLevel_;
+	MvProcRequest *procRequest_;
+
+	MvProcNode* parent_;
+	vector<MvProcNode*> children_;	
+	
+	static MvProcNode* root_;
+	static MvProcNodeObserver* observer_;
+	static vector<MvProcNode*> items_;
+	static vector<MvProcRequest*> procRequests_;
+};
+
+class MvProcRequest
+{
+public:
+	MvProcRequest(request*);
+	~MvProcRequest();
+  
+	long reqId() const {return reqId_;}
+	const string& source() const {return source_;} 	
+	const string& target() const {return target_;} 	
+	const string& className() const {return className_;} 
+	const string& name() const {return name_;} 
+	const string& reqStr() const {return reqStr_;} 		
+	
+private: 
+	string source_;
+	string target_;
+	long reqId_;
+	long sourceRef_;
+	
+	request *req_;
+	string reqStr_;
+	string className_;
+	string name_;
+};
+
+
+
+class MvServiceInfo : public MvProcNode 
+{
+public:
+	MvServiceInfo(long,request*);
+	~MvServiceInfo();
+	
+private:
+  	int     killLevel_;
+	/*string host_;
+	string user_;
+	long    pid_;
+	long    ref_;
+	int     killLevel_;
+	
+	long memTotal_;	
+    	long memFree_;
+	long maxrss_;
+
+	string vmSize_;
+	string vmRss_;*/
+
+	//void kill();
+	void debug();
+	void open();
+};
+
+
+
+class MvRequestInfo : public MvProcNode
+{
+public:
+	MvRequestInfo(long,long,long,request*,int);
+	~MvRequestInfo();
+  
+private:
+        request *req_;
+	long from_;
+	long to_;
+	//void kill();
+	//void debug();
+	//void update(request*);
+	void update(long t)     { to_ = t; }
+	void open() {};
+};
+
+/*class MvQWaitInfo : public MvProcNode
+{
+public:
+	MvQWaitInfo(long,long,const char*,request*);
+	~MvQWaitInfo();
+
+private:
+    	request *req_;
+	//long from_;
+	//char *to_;
+	void kill()  {           }
+	void debug() {           }
+	void open() {};
+};*/
+
+
+
+
+
+
+
+
+
+
+
+#endif
diff --git a/src/DebugTools/MvQProcModel.cc b/src/DebugTools/MvQProcModel.cc
new file mode 100644
index 0000000..54bb2aa
--- /dev/null
+++ b/src/DebugTools/MvQProcModel.cc
@@ -0,0 +1,229 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 <QDebug>
+
+#include "MvQProcModel.h"
+#include "MvQPixmapCache.h"
+
+#include "MvProcNode.h"
+
+
+MvQProcModel::MvQProcModel() :
+	rootItem_(0)
+{
+	pm_=new MvQPixmapCache(QPixmap());	
+  
+  	cpuYellow_=QColor(255,255,0);
+	cpuOrange_=QColor(255,188,46);
+	cpuRed_=QColor(255,102,102);	
+}
+
+void MvQProcModel::dataIsAboutToChange()
+{
+	beginResetModel();
+}
+
+
+void MvQProcModel::setData(MvProcNode* data)
+{	
+	beginResetModel();
+	rootItem_=data;
+	rootItem_->setObserver(this);
+	endResetModel();
+}
+
+
+void MvQProcModel::updateData()
+{	
+	//beginResetModel();
+	endResetModel();
+}
+
+int MvQProcModel::columnCount( const QModelIndex& /* parent */ ) const
+{
+   	 return 4;
+}
+
+int MvQProcModel::rowCount( const QModelIndex& parent) const
+{
+	if(!rootItem_)
+		return 0;
+
+	MvProcNode* parentItem=itemForIndex(parent);
+	return parentItem ? parentItem->childrenCount() : 0;
+}
+
+
+QVariant MvQProcModel::data( const QModelIndex& index, int role ) const
+{
+	if( !index.isValid() || 
+	   (role != Qt::DisplayRole && role != Qt::BackgroundRole &&
+	    role != Qt::DecorationRole && role != Qt::TextAlignmentRole))
+        {			
+		return QVariant();
+	}
+	
+	MvProcNode *item = itemForIndex(index);
+	if(!item)
+		return QVariant();
+	
+	MvProcStat *st=item->stats();
+	if(!st && index.column() > 0)
+		return QVariant();		
+ 
+	if(role == Qt::DisplayRole)
+	{  
+		switch (index.column()) 
+		{
+     		case 0: return QString::fromStdString(item->niceName());
+		case 1: return (st->cpu() > 1)?(QString::number(st->cpu()) + " %"):QString();
+		case 2: return QString::fromStdString(st->vmRss());
+		case 3: return QString::fromStdString(st->elapsedTime());	
+		default: return QString();
+    		}
+	}
+	else if(role ==  Qt::DecorationRole && index.column() == 0)
+	{
+	  	if(MvProcRequest *req=item->procRequest())
+		{
+		  	return pm_->pixmap(QString::fromStdString(req->className()));
+		}
+		else
+		  	return QVariant();
+	}		
+	else if(role == Qt::BackgroundRole && index.column() == 1 )
+	{  
+		int cpu=st->cpu();
+		if(cpu > 75)
+		  	return cpuRed_;
+		else if(cpu > 40)
+		  	return cpuOrange_;		
+	 	else if(cpu > 25)
+		  	return cpuYellow_;
+		else
+		  	return QVariant();
+	}
+	else if(role == Qt::TextAlignmentRole)
+	{
+	  	if(index.column() == 0 || index.column() == 3)
+		  	return QVariant();
+		else
+		  	return Qt::AlignRight;
+	}
+	
+	return QVariant();
+} 
+
+
+QVariant MvQProcModel::headerData( const int section, const Qt::Orientation orient , const int role ) const
+{
+	if ( orient != Qt::Horizontal)
+      		  return QAbstractItemModel::headerData( section, orient, role );
+
+   	if(role == Qt::DisplayRole)
+	{
+		switch ( section ) 
+		{
+  		case 0: return QObject::tr("Name");
+		case 1: return QObject::tr("CPU %");
+		case 2: return QObject::tr("Memory");
+		case 3: return QObject::tr("Time");
+		default: return QVariant();
+   		}
+	}
+	else if(role == Qt::ToolTipRole)
+	{
+		switch ( section ) 
+		{
+  		case 0: return QObject::tr("The process name");
+		case 1: return QObject::tr("The current <b>CPU usage</b> of the process <br> per processor core core");
+		case 2: return QObject::tr("The <b>resident set size</b> of memory <br> used by the process");
+		case 3: return QObject::tr("The running time of the process");
+		default: return QVariant();
+   		}
+	}
+	
+	
+    	return QVariant();
+}
+
+MvProcNode* MvQProcModel::itemForIndex(const QModelIndex& index) const
+{
+	if(index.isValid())
+	{
+	  	if(MvProcNode* item=static_cast<MvProcNode*>(index.internalPointer()))
+		{
+		  	return item;
+		}
+	}
+	
+	return rootItem_; 
+}  
+
+QModelIndex MvQProcModel::indexForItem(MvProcNode* proc,int column)
+{
+	if(!proc->parent())
+	 	return QModelIndex();	
+		
+	else 
+	{  	int row=proc->parent()->indexOfChild(proc);
+		return createIndex(row,column,proc);
+	}
+}	
+
+QModelIndex MvQProcModel::index( int row, int column, const QModelIndex & parent) const
+{
+	if(!rootItem_ || row <0 || column < 0)
+	  	return QModelIndex();
+  
+	MvProcNode *parentItem=itemForIndex(parent);
+	if(MvProcNode *item = parentItem->childAt(row))
+	{
+	  	QModelIndex index=createIndex(row,column,item);
+	  	return index;
+	}
+	
+	return QModelIndex();
+}
+
+QModelIndex MvQProcModel::parent( const QModelIndex& index) const
+{		
+	if(!index.isValid())
+	  	return QModelIndex();
+	
+	if(MvProcNode* childItem= itemForIndex(index))
+	{
+	  	if(MvProcNode* parentItem =childItem->parent())
+		{
+		  	if(parentItem == rootItem_)
+			{
+			  	return QModelIndex();
+			}
+			else if(MvProcNode* grandParentItem = parentItem->parent())
+			{  
+			 	int row=grandParentItem->indexOfChild(parentItem);
+				return createIndex(row,0,parentItem);
+			}
+		}
+	}
+	
+	return QModelIndex();
+	
+}
+
+void  MvQProcModel::infoChanged(MvProcNode* proc)
+{
+	if(!proc)
+	  	return;
+		
+	emit dataChanged(indexForItem(proc,3),
+			 indexForItem(proc,6));
+			 
+}  
diff --git a/src/DebugTools/MvQProcModel.h b/src/DebugTools/MvQProcModel.h
new file mode 100644
index 0000000..80a2f37
--- /dev/null
+++ b/src/DebugTools/MvQProcModel.h
@@ -0,0 +1,60 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQProcModel_H
+#define MvQProcModel_H
+
+#include <QAbstractItemModel>
+#include <QColor>
+#include <QSortFilterProxyModel>
+
+#include "MvProcNode.h"
+
+class MvQPixmapCache;
+
+class MvQProcModel : public QAbstractItemModel, public MvProcNodeObserver
+{
+
+public:
+   	MvQProcModel();
+ 	
+   	int columnCount (const QModelIndex& parent = QModelIndex() ) const;
+   	int rowCount (const QModelIndex& parent = QModelIndex() ) const;
+
+   	QVariant data (const QModelIndex& , int role = Qt::DisplayRole ) const;
+	QVariant headerData(int,Qt::Orientation,int role = Qt::DisplayRole ) const;
+ 
+   	QModelIndex index (int, int, const QModelIndex& parent = QModelIndex() ) const;
+   	QModelIndex parent (const QModelIndex & ) const;
+	
+	void dataIsAboutToChange();
+	void setData(MvProcNode*);
+	void updateData();
+	MvProcNode* itemForIndex(const QModelIndex&) const;
+	MvQPixmapCache* pixmapCache() {return pm_;}
+	
+	//Observer method
+	void infoChanged(MvProcNode*);
+
+protected:
+	QModelIndex indexForItem(MvProcNode*,int);
+		
+	MvProcNode* rootItem_;	
+	QColor cpuYellow_;
+	QColor cpuOrange_;
+	QColor cpuRed_;
+	
+	MvQPixmapCache *pm_;
+};
+
+#endif
+
+
+
+
diff --git a/src/DebugTools/ProcMonitor.cc b/src/DebugTools/ProcMonitor.cc
new file mode 100644
index 0000000..87b0edf
--- /dev/null
+++ b/src/DebugTools/ProcMonitor.cc
@@ -0,0 +1,499 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 <QAction>
+#include <QCloseEvent>
+#include <QDebug>
+#include <QDialogButtonBox>
+#include <QFile>
+#include <QMenu> 
+#include <QPushButton>
+#include <QSplitter>
+#include <QSettings>
+#include <QString>
+#include <QStringList>
+#include <QTextEdit>
+#include <QTimer>
+#include <QVBoxLayout>
+
+#include "ProcMonitor.h"
+
+#include <iostream>
+ 
+#include "MvQPixmapCache.h"
+#include "MvProcNode.h"
+#include "MvQProcModel.h"
+#include "MvQTreeView.h"
+
+using namespace std;
+
+ProcMonitor::ProcMonitor(svc *service,QWidget*parent) : 
+    QMainWindow(parent)
+{
+	service_=service;
+	
+	setAttribute(Qt::WA_DeleteOnClose);
+	
+	setWindowTitle("Metview - Process Monitor");
+
+	//---------------------------------------------------include <QTextEdit>--
+	// The main layout (the upper part of mainSplitter)
+	//-----------------------------------------------------
+  
+	QVBoxLayout *mainLayout = new QVBoxLayout;
+        mainLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+	mainLayout->setContentsMargins(0,0,0,0);
+	
+	QWidget *w=new QWidget(this);
+	w->setLayout(mainLayout);
+	setCentralWidget(w);
+	
+	mainSplitter_=new QSplitter(this);
+	mainSplitter_->setOpaqueResize(false);
+	//mainSplitter_->setOrientation(Qt::Vertical);
+	
+	mainLayout->addWidget(mainSplitter_);
+	
+	//------------------
+	// File info label
+	//------------------
+      
+ 	//Add to layout 
+	//mainLayout->addWidget(examinerBase_->fileInfoLabel());
+	
+	//---------------------------
+	// Process tree to the left
+	//---------------------------
+	
+	procModel_= new MvQProcModel();
+	
+	loadIcons(procModel_->pixmapCache());
+	
+	/*messageSortModel_= new MvQBufrDumpSortFilterModel;
+        messageSortModel_->setSourceModel(messageModel_);
+	messageSortModel_->setDynamicSortFilter(true);
+	messageSortModel_->setFilterRole(Qt::UserRole);
+	//messageSortModel_->setFilterRegExp(QRegExp("[1]"));
+	messageSortModel_->setFilterFixedString("1");
+	messageSortModel_->setFilterKeyColumn(0);*/
+
+	procTree_=new MvQTreeView;
+	procTree_->setObjectName("messageTree");
+	procTree_->setProperty("mvStyle",0);
+	procTree_->setSortingEnabled(true); 
+	procTree_->sortByColumn (0,Qt::AscendingOrder); 
+	procTree_->setAlternatingRowColors(true);
+        procTree_->setAllColumnsShowFocus(true);
+	procTree_->setModel(procModel_);	
+	procTree_->setActvatedByKeyNavigation(true);
+	procTree_->setRootIsDecorated(false);
+
+	mainSplitter_->addWidget(procTree_);
+	
+	//Add context menu
+	procTree_->setContextMenuPolicy(Qt::CustomContextMenu);
+	
+	//Context menu 
+    	connect(procTree_, SIGNAL(customContextMenuRequested(const QPoint &)),
+                this, SLOT(slotContextMenu(const QPoint &)));
+			
+	connect(procTree_,SIGNAL(clicked(const QModelIndex&)),
+                this, SLOT(slotProcInfo(const QModelIndex&)));
+		
+	//Init model	
+	procModel_->setData(MvProcNode::root());	
+		
+	//---------------------------------
+	// Process info to right
+	//---------------------------------
+	
+	//Read css for the text formatting
+	QString cssDoc;
+	QFile f(":/debug/procInfo.css");
+	QTextStream in(&f);
+	if(f.open(QIODevice::ReadOnly | QIODevice::Text))
+	{
+       		cssDoc=QString(f.readAll());
+	}
+	f.close();
+
+	procInfo_=new QTextEdit(this);	
+	procInfo_->setReadOnly(true);
+	procInfo_->document()->setDefaultStyleSheet(cssDoc);	
+	procInfo_->setLineWrapMode(QTextEdit::NoWrap);
+	
+	//procInfo_->setWordWrapMode(QTextOption::WordWrap);
+	
+	
+	mainSplitter_->addWidget(procInfo_);
+		
+	//--------------------------------------
+	// Buttons
+	//--------------------------------------
+	
+	buttonBox_= new QDialogButtonBox(this);
+	
+	buttonBox_->addButton(QDialogButtonBox::Close);
+	
+	connect(buttonBox_, SIGNAL(clicked(QAbstractButton*)), 
+		this, SLOT(slotButtonClicked(QAbstractButton*)));
+	
+	mainLayout->addWidget(buttonBox_);
+	
+	//Starts stats update
+	startService();
+	
+	//Read settings
+	readSettings();
+}
+
+void ProcMonitor::closeEvent(QCloseEvent* event)
+{
+	writeSettings();
+	close();
+	event->accept();
+}
+
+void ProcMonitor::slotButtonClicked(QAbstractButton* button)
+{
+	if(!button) return;
+	
+	if(buttonBox_->standardButton(button) == QDialogButtonBox::Close)
+	{
+		writeSettings();
+		close();
+		//accept();  	
+	}  
+}  
+
+void ProcMonitor::input(svcid *id,request *r)
+{ 	
+	//ref is not always present in tQModelIndex index=indexAt(position);	he request, so we get it from the id
+  	long ref   = atol(get_value(id->r,"REF",0));
+	QString name(get_value(id->r,"NAME",0));
+	QString mode(get_value(id->r,"MODE",0));	
+
+	//cout << ref << " " << name << " " << mode << endl;
+
+	cout << "id->r ------------------------>" << endl;
+	
+	print_all_requests(id->r);
+	
+	cout << "r ----------------------->" << endl;
+	
+	print_all_requests(r);
+		
+	
+	//cout << r << " " << id->r << endl;
+	
+	//print_all_requests(id->r);
+	
+	if(mode == "REPLY")
+	{
+		long reqid = atol(get_value(r,"REQ_ID",    0));
+		
+		qDebug() << "reply" << name << reqid ;
+		
+		//Info *p = Info::Find(reqid);
+		//delete p;
+	}
+	else if(mode == "WAIT")
+	{
+		long reqid = atol(get_value(r,"REQ_ID",    0));
+		long from  = atol(get_value(r,"SOURCE_REF",0));
+		const char *to   = get_value(r,"TARGET",0);
+
+		qDebug() << "wait" << name << reqid << from << to;
+		
+		//Info *p = Info::Find(reqid);
+		//delete p;
+		//new Wait(reqid,from,to,r->next);
+	}
+	else if(mode == "REGISTER")
+	{
+		qDebug() << "register" << name << ref; 
+		
+		procModel_->dataIsAboutToChange();
+		MvProcNode::add(ref,r);		
+	  	procModel_->updateData();
+		procTree_->expandAll();
+	}
+	else if(mode == "BUSY")
+	{
+		r = r->next;		
+		long reqid = atol(get_value(r,"REQ_ID",    0));
+		
+		qDebug() << "busy" << name << reqid; 
+		
+		//Info *p = Info::Find(reqid);
+		//delete p;
+	}
+	else if(mode == "SERVICE")
+	{
+		long reqid = atol(get_value(r,"REQ_ID",    0));
+		
+		MvProcNode::addProcRequest(reqid,ref,name.toStdString(),r);
+	  
+	  	//MvProcNode *proc=MvProcNode::find(ref,name.toStdString());
+		//if(proc)
+		//  	proc->setServiceRequest(r);
+	  
+	  	long reqId = atol(get_value(r,"REQ_ID",    0));
+		long from  = atol(get_value(r,"SOURCE_REF",0));
+
+		const char *x   = get_value(r,"WAITMODE",0);
+		int sync  = x?atoi(x):0;
+
+		qDebug() << "service" << name << ref << reqid << from << sync; 
+		
+		if(r->next)
+		  	print_all_requests(r->next);
+		
+		//Info *p = Info::Find(reqid);
+		//delete p;
+		//if( r->next )  //-- Q&D, 000810/vk
+		//    new Request(reqid,from,ref,r->next,sync);
+	} 
+	else if(mode == "EXIT")
+	{
+		qDebug() << "exit" << name << ref; 
+		
+		procModel_->dataIsAboutToChange();
+		MvProcNode::remove(ref,name.toStdString());
+	  	procModel_->updateData();
+		
+		//Info *p = Info::Find(ref);
+		//delete p;
+	}
+	else if(mode == "PROGRESS")
+	{
+		long reqid = atol(get_value(r,"REQ_ID",    0));
+		
+		//Info *p = Info::Find(reqid);
+		qDebug() << "progress" << name << reqid; 
+		
+		//Info *p = Info::Find(reqid);
+		//if(p) p->Update(r);
+	}
+	else if(mode == "FOLLOWUP")
+	{
+		long reqid = atol(get_value(r,"REQ_ID",    0));
+		
+		MvProcNode::assignProcRequest(reqid,ref,name.toStdString());
+		
+		qDebug() << "followup" << name << reqid; 
+		
+		//Info *p = Info::Find(reqid);
+		//if(p) p->Update(ref);
+	}
+		
+	cout << "<-----------------------" << endl;
+	cout << endl;
+	
+	/*if(mode == _REPLY)
+	{
+		long reqid = atol(get_value(r,"REQ_ID",    0));
+		Info *p = Info::Find(reqid);
+		delete p;
+	}
+	else if(mode == _WAIT)
+	{
+		long reqid = atol(get_value(r,"REQ_ID",    0));
+		long from  = atol(get_value(r,"SOURCE_REF",0));
+		const char *to   = get_value(r,"TARGET",0);
+
+		Info *p = Info::Find(reqid);
+		delete p;
+		new Wait(reqid,from,to,r->next);
+	}
+	else if(mode == _REGISTER)
+	{
+		Info *p = Info::Find(ref);
+		delete p;
+		new Service(ref,r);
+	}
+	else if(mode == _BUSY)
+	{
+		r = r->next;		
+		long reqid = atol(get_value(r,"REQ_ID",    0));
+		Info *p = Info::Find(reqid);
+		delete p;
+	}
+	else if(mode == _SERVICE)
+	{
+		long reqid = atol(get_value(r,"REQ_ID",    0));
+		long from  = atol(get_value(r,"SOURCE_REF",0));
+
+		const char *x   = get_value(r,"WAITMODE",0);
+		int sync  = x?atoi(x):0;
+
+		Info *p = Info::Find(reqid);
+		delete p;
+		if( r->next )  //-- Q&D, 000810/vk
+		    new Request(reqid,from,ref,r->next,sync);
+	} 
+	else if(mode == _EXIT)
+	{
+		Info *p = Info::Find(ref);
+		delete p;
+	}
+	else if(mode == _PROGRESS)
+	{
+		long reqid = atol(get_value(r,"REQ_ID",    0));
+		Info *p = Info::Find(reqid);
+		if(p) p->Update(r);
+	}
+	else if(mode == _FOLLOWUP)
+	{
+		long reqid = atol(get_value(r,"REQ_ID",    0));
+		Info *p = Info::Find(reqid);
+		if(p) p->Update(ref);
+	}*/
+
+}
+
+
+void ProcMonitor::startService()
+{
+	QTimer *timer= new QTimer(this);
+	timer->setInterval(5000);
+	timer->start();
+
+	connect(timer,SIGNAL(timeout()),
+		this,SLOT(slotProcessService()));
+		
+	//Adjust treeview column size to contents	
+	for(int i=0; i < procModel_->columnCount()-1; i++)
+	  	procTree_->resizeColumnToContents(i);	
+		
+}
+
+void ProcMonitor::slotProcessService()
+{
+	MvProcNode::updateInfo();
+}
+
+void ProcMonitor::slotContextMenu(const QPoint& position)
+{
+	MvProcNode *proc=procModel_->itemForIndex(procTree_->indexAt(position));
+ 	if(proc)
+	{
+	  	QList<QAction*> lst;
+		
+		QAction *infoAction=new QAction(tr("Information"),this);		
+		lst << infoAction;
+	  	
+	  	QAction *abortAction=new QAction(tr("Abort"),this);
+		abortAction->setShortcut(tr("Del"));
+		abortAction->setIcon(QPixmap(":/debug/remove.svg"));
+		
+		lst << abortAction;
+		
+		QAction *ac=QMenu::exec(lst,procTree_->mapToGlobal(position),infoAction,this);
+		if(ac == infoAction)
+		{
+			showInfo(proc);  
+		}
+		else if(ac == abortAction)
+		{
+		  	proc->killProc();
+		}  
+	}
+}  
+
+void ProcMonitor::slotProcInfo(const QModelIndex& index)
+{
+	showInfo(procModel_->itemForIndex(index));
+}  
+
+void ProcMonitor::showInfo(MvProcNode *proc)
+{
+	if(!proc)
+	  	procInfo_->clear();
+	
+	QString txt;
+	txt+="<table>";
+		
+	//
+	addInfoRow("Name",proc->name(),txt);
+	addInfoRow("Full name",proc->niceName(),txt);
+	addInfoRow("Host",proc->host(),txt);
+	addInfoRow("User",proc->user(),txt);
+	addInfoRow("Pid",proc->pidAsString(),txt);
+		
+	//Request
+	MvProcRequest *r=proc->procRequest();
+	if(r)
+	{
+		addTitleInfoRow(tr("Request"),txt,2);	
+	  
+	  	addInfoRow("Class",r->className(),txt);
+		addInfoRow("Name",r->name(),txt);
+		addInfoRow("Sender",r->source(),txt);
+		addInfoRow("Receiver",r->target(),txt);
+		addInfoRow("Request",r->reqStr(),txt);
+	}
+	
+	txt+="</tr></table>";
+		
+	procInfo_->setHtml(txt);	
+}  
+
+void ProcMonitor::addInfoRow(QString label,const string& val,QString &info)
+{	
+	info+="<tr><td class=\"first\">" + label + "</td><td>" + QString::fromStdString(val) + "</td></tr>";
+}
+
+void ProcMonitor::addTitleInfoRow(QString label,QString &info, int colSpan)
+{
+	info+="<tr><td class=\"title\" align=\"center\" colspan=\"" + QString::number(colSpan+1) + + "\">" + label + "</td></tr>";
+}
+
+void ProcMonitor::loadIcons(MvQPixmapCache *pm)
+{
+	request *r = mars.setup;
+
+	while(r)
+	{
+		if(strcmp(r->name,"object") == 0)
+		{
+			const char *p = get_value(r,"class",0);
+			const char *q = get_value(r,"pixmap",0);
+			if(p && q)
+			{
+				pm->addMvIconPath(QString(p),QString(q));
+			}
+		}
+		r = r->next;
+	}
+}
+
+
+void ProcMonitor::writeSettings()
+{
+	QSettings settings("ECMWF","MV4-MvMonitor");
+	
+	//We have to clear it not to remember all the previous windows
+	settings.clear();
+	
+	settings.beginGroup("main");
+	settings.setValue("geometry",saveGeometry());
+	settings.setValue("mainSplitter",mainSplitter_->saveState());
+	settings.endGroup();
+}
+
+void ProcMonitor::readSettings()
+{
+	QSettings settings("ECMWF","MV4-MvMonitor");
+  	
+	settings.beginGroup("main");
+	restoreGeometry(settings.value("geometry").toByteArray());
+	mainSplitter_->restoreState(settings.value("mainSplitter").toByteArray());
+	settings.endGroup();	
+}	
\ No newline at end of file
diff --git a/src/DebugTools/ProcMonitor.h b/src/DebugTools/ProcMonitor.h
new file mode 100644
index 0000000..2c7a722
--- /dev/null
+++ b/src/DebugTools/ProcMonitor.h
@@ -0,0 +1,65 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 ProcMonitor_H
+#define ProcMonitor_H
+
+#include "mars.h"
+
+#include <QList>
+#include <QMainWindow>
+
+#include <string>
+
+using namespace std;
+
+class QAbstractButton;
+class QDialogButtonBox;
+class QModelIndex;
+class QTextEdit;
+class QSplitter;
+
+class MvQPixmapCache;
+class MvQProcModel;
+class MvProcNode;
+class MvQTreeView;
+
+class ProcMonitor : public QMainWindow
+{
+	Q_OBJECT
+public:
+	ProcMonitor(svc*,QWidget * parent = 0 );
+	void input(svcid *,request *);
+
+public slots:
+	void slotProcessService();
+	void slotButtonClicked(QAbstractButton*);
+	void slotContextMenu(const QPoint&);
+	void slotProcInfo(const QModelIndex&);
+	
+protected:
+	void closeEvent(QCloseEvent*);	
+	void showInfo(MvProcNode*);
+	void addInfoRow(QString,const string&,QString &);
+	void addTitleInfoRow(QString,QString &, int);
+	void loadIcons(MvQPixmapCache *);
+	void startService();
+	void readSettings();
+	void writeSettings();
+	
+	svc*	service_;
+	QSplitter *mainSplitter_;
+	
+	MvQProcModel* procModel_;
+	MvQTreeView *procTree_;
+	QTextEdit *procInfo_;
+	QDialogButtonBox* buttonBox_;
+};
+#endif
diff --git a/src/DebugTools/XServ.cc b/src/DebugTools/XServ.cc
new file mode 100644
index 0000000..b130746
--- /dev/null
+++ b/src/DebugTools/XServ.cc
@@ -0,0 +1,96 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <QApplication>
+#include <stdio.h>
+#include "mars.h"
+#include "MvRequest.h"
+#include "XServ.h"
+
+
+XServBar::XServBar(svc *s)
+{
+    service_ = s;
+
+    setLayout(&layoutMain_);
+    layoutMain_.addWidget(&scrollArea_);
+    scrollAreaInternalWidget_ = new QWidget(this);
+    scrollAreaInternalWidget_->setLayout(&buttonLayout_);
+    scrollArea_.setWidget(scrollAreaInternalWidget_);
+    scrollArea_.setWidgetResizable(true);
+    move(0,0);  // set the window to the top-left of the screen
+
+
+    // populate the bar with buttons - one for each available service
+    request *r = mars.setup;
+    int n = 0;
+    while(r)
+    {
+        if(strcmp(r->name,"service")==0)
+        {
+            const char *y = no_quotes(get_value(r,"name",0));
+            QPushButton *button =new QPushButton(QString(y), this);
+            buttonLayout_.addWidget(button, n%25, n/25);
+            connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()));
+            n++;
+        }
+        r = r->next;
+    }
+
+
+
+    QSizePolicy sp(QSizePolicy::Preferred, QSizePolicy::Preferred);
+    scrollAreaInternalWidget_->setSizePolicy(sp);
+    updateGeometry();
+
+
+    show();
+    scrollArea_.show();
+    
+    QRect rect = buttonLayout_.cellRect ( 0, 1 );
+
+    QPoint tl = rect.topLeft();
+    QPoint qp = scrollAreaInternalWidget_->mapTo(this, tl);
+    //QScrollBar *sb = scrollArea_.verticalScrollBar();
+    //wsize = qp.x() + rect.right() + sb->width();
+    int wsize = qp.x() + 22;//sb->width();
+    resize(wsize, 400);
+}
+
+
+void XServBar::buttonClicked()
+{
+    QPushButton *button = (QPushButton *)sender();
+    QString name(button->text());
+    //printf("CLICKED: %s\n", name.toUtf8().constData());
+
+    request *r = empty_request("START");
+    set_value(r,"NAME","%s",name.toUtf8().constData());
+    call_switchboard(service_,r);
+    free_all_requests(r);
+}
+
+
+int main (int argc, char **argv)
+{
+    QApplication qapp(argc, argv);
+    QApplication::setWindowIcon(QIcon(QPixmap(QString::fromUtf8(":/xserv/metview_logo"))));
+
+    marsinit(&argc,argv,0,0,0);
+
+    svc *s = create_service(mbasename(argv[0]));
+    if(s)
+        svc_connect(s);
+
+    XServBar bar(s);
+
+    return qapp.exec();
+}
+
diff --git a/src/DebugTools/XServ.h b/src/DebugTools/XServ.h
new file mode 100644
index 0000000..6c8e5c1
--- /dev/null
+++ b/src/DebugTools/XServ.h
@@ -0,0 +1,40 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 XServ_H
+#define XServ_H
+
+#include "mars.h"
+#undef D  /// MARS
+#include <QtGui>
+
+class XServBar : public QWidget
+{
+    Q_OBJECT
+
+public:
+
+    XServBar(svc *s);
+    ~XServBar() {};
+
+
+public slots:
+    void buttonClicked();
+
+
+private:
+    svc         *service_;
+    QHBoxLayout layoutMain_;
+    QScrollArea scrollArea_;
+    QGridLayout buttonLayout_;
+    QWidget     *scrollAreaInternalWidget_;
+};
+
+
+#endif
diff --git a/src/DebugTools/XServ.qrc.cpp b/src/DebugTools/XServ.qrc.cpp
new file mode 100644
index 0000000..93d02d6
--- /dev/null
+++ b/src/DebugTools/XServ.qrc.cpp
@@ -0,0 +1,154 @@
+/****************************************************************************
+** Resource object code
+**
+** Created: 
+**      by: The Resource Compiler for Qt version 4.6.3
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include <QtCore/qglobal.h>
+
+static const unsigned char qt_resource_data[] = {
+  // /vol/metview/data/p4/mv4dev_suse113_inst/metview/src/images/metview_logo.png
+  0x0,0x0,0x5,0x30,
+  0x89,
+  0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
+  0x0,0x0,0x38,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0x47,0x3,0xbb,0xe8,
+  0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,
+  0x0,0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,
+  0x79,0x71,0xc9,0x65,0x3c,0x0,0x0,0x4,0xd2,0x49,0x44,0x41,0x54,0x78,0xda,0xd4,
+  0x59,0xff,0x4e,0x13,0x41,0x10,0xde,0x9e,0x45,0x41,0xa,0x5e,0x55,0xe4,0x87,0x55,
+  0x4f,0x83,0x3f,0x12,0x4d,0x6c,0xa2,0x89,0xfe,0x61,0x62,0x7d,0x2,0xfb,0x0,0x46,
+  0xeb,0x1b,0xf4,0x11,0xea,0x1b,0xd4,0x37,0x38,0x8c,0xf,0x80,0x4f,0x60,0xf9,0xc3,
+  0xc4,0x7f,0x88,0xc5,0x20,0x21,0x6a,0xf4,0x44,0x14,0x14,0xd4,0x8a,0x55,0x40,0xaa,
+  0x71,0xbe,0xeb,0x1c,0x2e,0xdb,0xdd,0xf6,0xa,0x8d,0xad,0x93,0x5c,0xa0,0xf4,0x66,
+  0x77,0xbe,0xf9,0x66,0x66,0x67,0x96,0x88,0x30,0xc8,0xc9,0x1b,0xf7,0x8e,0xd1,0x8f,
+  0x2c,0x3d,0x49,0x7a,0x52,0xd2,0x57,0x45,0x7e,0xc6,0x5f,0xdc,0xbf,0xf9,0xc0,0xa0,
+  0x97,0xe6,0x7,0xba,0x36,0x7f,0xe5,0x5,0x7a,0xac,0xfb,0x55,0xb4,0x48,0x68,0xcf,
+  0x7d,0xf4,0x23,0xcf,0x7b,0xda,0xbc,0x47,0x8e,0xf6,0x98,0x8a,0x18,0xc,0x74,0x1,
+  0x6a,0xa3,0xbb,0x5b,0x94,0x7,0xe,0x8a,0xf5,0xbe,0x98,0xa8,0xf4,0x74,0xfb,0xdf,
+  0xf7,0x7c,0x29,0xf9,0xcf,0x5e,0x7a,0xd8,0xe8,0x2c,0x80,0xf2,0x26,0x39,0x7c,0xfe,
+  0x15,0x8d,0x8a,0xef,0xac,0x87,0x27,0xd0,0xdb,0xf3,0xad,0x2c,0x62,0x4b,0xcb,0xf8,
+  0x58,0x62,0x3,0xee,0xb6,0x8,0xe0,0x13,0xda,0x33,0xf9,0xf9,0x84,0x23,0xb0,0x77,
+  0xff,0xc2,0x22,0xec,0xc3,0x1e,0xa9,0x88,0xf2,0xe2,0x75,0x80,0x23,0x60,0xf6,0x87,
+  0xb3,0x67,0xc4,0x6a,0xdc,0x36,0x2e,0x1a,0x5d,0x5d,0x13,0x7,0x5e,0x79,0xfe,0x62,
+  0xec,0xb1,0x24,0x2d,0xee,0x2c,0x9d,0x1a,0x15,0xdf,0x46,0x86,0x8c,0x7a,0xd6,0x46,
+  0x45,0xd8,0x6f,0xe7,0x7d,0x5d,0x92,0x2,0xbc,0xbe,0x13,0x36,0xc9,0xe6,0x5b,0xb0,
+  0xf9,0xcd,0xa5,0x8b,0xe2,0x27,0x3b,0x13,0x72,0x78,0xb2,0x8,0x90,0xe3,0x11,0xf5,
+  0xc5,0x95,0xe1,0x21,0x1,0x23,0x7f,0x77,0x45,0x43,0x6d,0xd0,0xfb,0x71,0x59,0xc,
+  0xce,0xcc,0x8a,0xa,0xb1,0x3d,0x7f,0x21,0x19,0x5a,0x6f,0x37,0xb1,0x99,0x20,0x23,
+  0x76,0x55,0x2a,0x8,0xdb,0xd4,0x76,0x41,0x92,0xdd,0xaf,0xc9,0x66,0x7,0x84,0xc8,
+  0xd2,0xf7,0x7e,0x51,0xc,0xcd,0xcc,0x96,0x2c,0x7e,0xe9,0x3c,0x62,0x18,0xe0,0xf0,
+  0x62,0x58,0x23,0x21,0xdf,0xf,0x1d,0x14,0x73,0xe4,0xbd,0x66,0xc0,0x41,0xe0,0x6d,
+  0xe8,0x20,0xb4,0x38,0x25,0xb6,0x3,0xe,0x11,0xe7,0x7c,0xa2,0xd0,0x54,0x5,0xe9,
+  0x80,0x54,0xb0,0xf8,0x73,0x7e,0x3d,0x16,0xb3,0x55,0x2f,0x84,0x15,0xe4,0x67,0x33,
+  0xe0,0x64,0x90,0xb,0xe7,0xcf,0xe1,0xd7,0x34,0x1b,0xdb,0xac,0x64,0x7f,0x50,0x1a,
+  0x5,0xf5,0x41,0x16,0x4e,0x1d,0x37,0x4a,0xb,0x5f,0x45,0x88,0x2c,0x9d,0x1e,0xd5,
+  0xae,0x80,0xe2,0x60,0xcf,0xcd,0xb,0xab,0x52,0xa9,0x32,0x46,0xc5,0x3,0x4c,0x37,
+  0x2,0x84,0x10,0x8c,0x93,0x5e,0x74,0x6d,0xcd,0xff,0x4c,0xe,0x14,0x28,0x2,0xaa,
+  0x1e,0xf2,0x1c,0xeb,0x91,0x41,0xa8,0x82,0xf,0x9a,0x60,0xcf,0xb7,0xfb,0xb3,0x86,
+  0x3d,0x84,0xe7,0xae,0xaa,0xbd,0x2e,0x76,0xcb,0x60,0x73,0x5d,0x41,0x19,0x7c,0x36,
+  0x1b,0x78,0xa2,0xc0,0x8f,0x43,0x89,0x9b,0xee,0x7f,0xbf,0x68,0xd7,0xb,0x49,0x8e,
+  0x7f,0x21,0x1d,0xb,0x36,0xe9,0x65,0x68,0x2d,0x5f,0x4f,0x2e,0x6,0x90,0x2f,0x47,
+  0x13,0xd8,0xc7,0x81,0xd1,0x94,0x8b,0x13,0xcd,0xb0,0xa7,0xb3,0x9b,0xb,0x98,0x4b,
+  0x6b,0xbd,0x81,0x85,0xa9,0x15,0x4d,0xd5,0x43,0xf1,0x60,0x70,0x19,0x7a,0x71,0x4c,
+  0xf2,0x5c,0x6e,0x4f,0xb9,0x5c,0x18,0x7e,0x3a,0xed,0xbc,0xbb,0x90,0xd4,0x56,0x57,
+  0x6,0x87,0xd,0x6e,0xcb,0x7a,0xe4,0xd5,0xc2,0xc8,0xd4,0x74,0xd2,0xbb,0x72,0xb9,
+  0x26,0x54,0x61,0x2c,0x39,0x1,0xc7,0xcc,0xb5,0x10,0xec,0xf9,0x67,0x2d,0x98,0xd7,
+  0x39,0xb7,0xab,0x1a,0x35,0x39,0xbf,0x6a,0x83,0x95,0x75,0xc5,0xa3,0x10,0x94,0x72,
+  0x36,0x72,0x4c,0xfe,0x3b,0xbc,0x2,0xd0,0x38,0x7,0x1,0xa6,0x46,0x6f,0xce,0xd7,
+  0xf3,0x64,0x70,0xac,0x87,0x2a,0x99,0xc6,0xe6,0x30,0x42,0x15,0xe,0xb5,0x14,0x87,
+  0x5e,0x23,0xc9,0xe1,0x8c,0xd6,0x1d,0x47,0x41,0xee,0xb1,0x9d,0xc2,0x32,0xad,0xc0,
+  0x7,0x79,0x41,0xf7,0x5d,0x10,0x46,0xec,0xa9,0xad,0xd5,0xab,0xec,0x57,0x2f,0xd7,
+  0xa0,0x87,0x4d,0x5d,0xe,0xa1,0x9a,0x5c,0x44,0xaa,0xc0,0x79,0x21,0xd8,0xcb,0xe8,
+  0x2a,0xa7,0xd4,0x80,0x6c,0xee,0x6f,0x35,0xf0,0x94,0x27,0x5a,0x2f,0x39,0x13,0x8b,
+  0xc8,0x45,0x18,0xcf,0x20,0x4c,0x92,0x31,0xb1,0xb7,0x9f,0x9b,0x7,0x39,0x8f,0x2d,
+  0xf1,0x8f,0x85,0x59,0x1c,0xe7,0x50,0xda,0x22,0x30,0x1a,0xc6,0x7,0xf9,0x63,0xe8,
+  0x39,0xb3,0xba,0x9a,0x81,0xaa,0xcd,0xec,0x6d,0xd1,0xfd,0xe7,0x0,0x83,0x73,0x77,
+  0x2f,0xf7,0xb4,0xaa,0x70,0xe8,0x99,0x58,0x44,0x9f,0x6b,0x97,0x8e,0x24,0x6a,0xbe,
+  0x88,0xff,0xcd,0xfd,0x89,0xb6,0x3,0x64,0x23,0xa,0xfb,0x35,0xb9,0x8,0x16,0xd1,
+  0x30,0x1b,0x72,0x31,0x5b,0xa2,0x30,0x56,0x8f,0x27,0x14,0x3b,0x8e,0x88,0x1a,0xe6,
+  0xdb,0xc5,0xe0,0x26,0x8b,0xba,0x4a,0x5c,0xaa,0xe6,0x62,0x96,0x43,0x52,0xee,0x95,
+  0x6d,0xdd,0xd1,0xc0,0x45,0xcb,0x53,0x2b,0x7e,0x5b,0x1,0xf2,0x2c,0xe9,0xe9,0x2a,
+  0x2a,0x42,0x10,0xa1,0xc8,0xf3,0xe8,0x66,0x71,0x2,0x38,0xb5,0x2d,0xc3,0x74,0xd2,
+  0x5b,0x1d,0xc1,0xf2,0xda,0xe9,0x45,0xb4,0x57,0x72,0x8,0x2d,0x95,0x45,0x84,0x20,
+  0x33,0x95,0x91,0xd8,0xd3,0x36,0xd5,0x38,0xaf,0xa9,0x81,0x28,0x99,0x8e,0xa6,0xb6,
+  0x2,0xe4,0x90,0xf2,0xb8,0x39,0xd0,0x85,0xa9,0xc3,0xe0,0x32,0x18,0xbc,0x75,0xec,
+  0xb1,0x6e,0xde,0x34,0x6e,0xb5,0x9b,0x41,0xdf,0x38,0xb0,0x8,0x63,0xd5,0x9,0x85,
+  0x59,0x44,0xe8,0xa5,0x18,0x70,0x4d,0xd7,0xc2,0xec,0xe5,0x8d,0x3,0x76,0x7,0x0,
+  0x74,0x61,0x24,0xb7,0x86,0xba,0x23,0xc3,0x36,0x35,0xd5,0xcc,0x5e,0xdd,0xfb,0x9d,
+  0xb6,0x3,0x64,0xe3,0xf2,0xfe,0x48,0xa6,0x61,0x11,0xa1,0x69,0x1a,0x89,0xe4,0xa6,
+  0xba,0x93,0x19,0xf4,0xc3,0x10,0xf3,0x1b,0x57,0xc3,0x2d,0x82,0xeb,0x93,0x46,0x23,
+  0x51,0xc7,0x3,0x64,0x16,0xb5,0x4d,0xb8,0x6e,0x5a,0x47,0x7,0xc4,0xec,0xe5,0x1b,
+  0xad,0x6d,0x5,0x9d,0x80,0xda,0x19,0x84,0x10,0xf,0x33,0xa3,0x5a,0xd5,0x82,0xbb,
+  0x90,0x56,0x36,0xe1,0x75,0x9a,0xea,0xa9,0x30,0x0,0xdd,0x81,0xe7,0x2f,0x37,0xfb,
+  0x42,0x80,0xa3,0xa1,0xd4,0x9f,0xc6,0x1b,0x4c,0xd7,0x6e,0x9c,0xa,0x43,0x50,0xe2,
+  0x1,0xe,0xb7,0x6b,0xf5,0xce,0xa4,0x10,0x4d,0xb8,0x1b,0xd7,0x1c,0x19,0x86,0x91,
+  0x28,0x17,0x66,0x5d,0x34,0x75,0x59,0x32,0xca,0x49,0x4c,0x16,0x53,0xd2,0xdf,0x8b,
+  0x8d,0xe6,0x32,0x32,0xe8,0xe,0x9d,0x51,0x36,0x39,0x27,0xb,0x7,0x5,0xc7,0xd7,
+  0x4e,0xae,0x0,0x1,0x90,0xe6,0xc9,0xc,0x40,0x98,0xee,0x64,0xfb,0xab,0xc,0x17,
+  0xc2,0x5e,0x6d,0xc8,0xf7,0xa2,0xb8,0x3a,0xb4,0xe5,0x81,0x36,0xe4,0xe5,0xf,0xba,
+  0x7e,0xa7,0x59,0xbd,0x3a,0xeb,0x3d,0xa4,0x63,0x21,0x65,0xba,0xe,0x39,0xfe,0xe8,
+  0x71,0xcd,0x35,0x4a,0x28,0x80,0x9d,0x22,0x7c,0x65,0x51,0xc0,0xe5,0x94,0xca,0x22,
+  0x5f,0x82,0xa1,0xa9,0x3e,0x1e,0x76,0x3d,0xab,0xd3,0x0,0x72,0x14,0x14,0xd5,0xf6,
+  0xad,0xde,0x48,0xf4,0x5f,0x1,0xc,0x2a,0x2a,0xfe,0x49,0x33,0x4c,0xc5,0xe,0xf9,
+  0x88,0x6a,0x1d,0x14,0x3e,0xbe,0x86,0xc,0x2d,0x91,0xe,0x5,0x18,0x5c,0xcb,0xe7,
+  0x83,0xfc,0x16,0xdb,0xfc,0x47,0xcd,0x1f,0x1,0x6,0x0,0xb5,0xab,0x9a,0xef,0xa2,
+  0xb8,0x98,0x4,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
+  
+};
+
+static const unsigned char qt_resource_name[] = {
+  // xserv
+  0x0,0x5,
+  0x0,0x7f,0x9c,0x96,
+  0x0,0x78,
+  0x0,0x73,0x0,0x65,0x0,0x72,0x0,0x76,
+    // metview_logo
+  0x0,0xc,
+  0x2,0xaf,0x4c,0x3f,
+  0x0,0x6d,
+  0x0,0x65,0x0,0x74,0x0,0x76,0x0,0x69,0x0,0x65,0x0,0x77,0x0,0x5f,0x0,0x6c,0x0,0x6f,0x0,0x67,0x0,0x6f,
+  
+};
+
+static const unsigned char qt_resource_struct[] = {
+  // :
+  0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,
+  // :/xserv
+  0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2,
+  // :/xserv/metview_logo
+  0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,
+
+};
+
+QT_BEGIN_NAMESPACE
+
+extern Q_CORE_EXPORT bool qRegisterResourceData
+    (int, const unsigned char *, const unsigned char *, const unsigned char *);
+
+extern Q_CORE_EXPORT bool qUnregisterResourceData
+    (int, const unsigned char *, const unsigned char *, const unsigned char *);
+
+QT_END_NAMESPACE
+
+
+int QT_MANGLE_NAMESPACE(qInitResources_XServ)()
+{
+    QT_PREPEND_NAMESPACE(qRegisterResourceData)
+        (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
+    return 1;
+}
+
+Q_CONSTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qInitResources_XServ))
+
+int QT_MANGLE_NAMESPACE(qCleanupResources_XServ)()
+{
+    QT_PREPEND_NAMESPACE(qUnregisterResourceData)
+       (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
+    return 1;
+}
+
+Q_DESTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qCleanupResources_XServ))
+
diff --git a/src/DebugTools/cback.c b/src/DebugTools/cback.c
deleted file mode 100644
index dc06e5a..0000000
--- a/src/DebugTools/cback.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 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 <Xm/Xm.h>
-#include <Xm/PushB.h>
-#include "mars.h"
-
-extern XtAppContext app_context;
-extern Widget row;
-
-static svc *s;
-
-typedef struct {
-	String *table;
-} Dtype,*Dptr;
-
-Dtype Data;
-
-static  XtResource  resources[] = {
-	{"A","A",XmRStringTable,sizeof(String*),XtOffset(Dptr,table),
-	XmRImmediate,NULL,},
-};
-
-void click(Widget w,void *a,void *b)
-{
-	request *r = empty_request("START");
-	set_value(r,"NAME","%s",XtName(w));
-	call_switchboard(s,r);
-	free_all_requests(r);
-}
-
-void fill(svcid *id,request *r,void *data)
-{
-	Widget w;
-
-
-	while(r)
-	{
-		if(strcmp(r->name,"service")==0)
-		{
-			w = (Widget)XmCreatePushButton(row,
-				no_quotes(get_value(r,"name",0)),NULL,0);
-			XtAddCallback(w,XmNactivateCallback,(XtCallbackProc) click, NULL);
-			XtManageChild(w);
-		}
-		r = r->next;
-	}
-}
-
-init(int argc,char **argv)
-{
-	extern Widget widget0;
-	request *t = empty_request("GETINFO");
-
-	marsinit(&argc,argv,0,0,0);
-
-	XtGetApplicationResources(widget0,(XtPointer)&Data,
-			resources,XtNumber(resources),NULL,0);
-	s = RegisterService(app_context,mbasename(argv[0]));
-	add_reply_callback(s,NULL,fill,NULL);
-
-	call_switchboard(s,t);
-
-	free_all_requests(t);
-
-
-}
diff --git a/src/DebugTools/debug.qrc b/src/DebugTools/debug.qrc
new file mode 100644
index 0000000..cbbcd5c
--- /dev/null
+++ b/src/DebugTools/debug.qrc
@@ -0,0 +1,7 @@
+<RCC>
+  <qresource prefix="debug" > 
+	<file alias="fileInfo.svg">../images/fileInfo.svg</file>  
+	<file alias="remove.svg">../images/remove.svg</file> 
+        <file alias="procInfo.css">procInfo.css</file> 
+  </qresource>
+</RCC>
\ No newline at end of file
diff --git a/src/DebugTools/procInfo.css b/src/DebugTools/procInfo.css
new file mode 100644
index 0000000..45aac3c
--- /dev/null
+++ b/src/DebugTools/procInfo.css
@@ -0,0 +1,81 @@
+/***************************** LICENSE START ***********************************
+ * Copyright 2012 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 *************************************/
+
+ html
+    {
+        color: #000000;
+        background-color: #FFFFFF;
+    }
+  
+    /*table
+    {
+	border-color:  #0000FF;
+	background-color: #FF0000;
+
+     }*/
+
+/*  table
+   {
+        background-color: #F6F6F6;
+        border: 1px solid #000000;
+        border-collapse: separate;
+        font-size: 11px;
+        margin-bottom: 25px; 
+	border-collapse: collapse;
+        border-spacing: 0;
+    }*/
+   td
+    {
+        padding: 3px 10px 3px 10px;
+	background-color: #F9F9F9;
+        color: #000000;
+    }
+
+   td.first
+    {
+        padding: 3px 10px 3px 10px;
+	font-weight: bold;
+	/*font-size: large;*/
+	background-color: #F6F6F6;
+        color: #000000;
+    }
+ 
+   td.image
+    {
+       background-color: #F9F9F9;
+       color: #F9F9F9;
+    }
+
+   td.title
+    {
+	font-weight: bold;
+	/*font-size: large;*/
+	background-color: #E7F6FF;
+        color: #000000;
+    }
+   td.highlight
+    {
+	/*font-size: large;*/
+	background-color: #E7F6FF;
+        color: #000000;
+    }
+  th
+    {
+       padding: 3px 10px 3px 10px;
+       background-color: #F9F9F9;
+       color: #000000;
+
+    }
+
+
+/*   tr
+    {
+        background-color: #F6F6F6;
+        color: #000000;
+    }
+  
+*/
\ No newline at end of file
diff --git a/src/DebugTools/xserv.c b/src/DebugTools/xserv.c
deleted file mode 100644
index 79095cc..0000000
--- a/src/DebugTools/xserv.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 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 *************************************/
-
-/*
-** Generated by X-Designer 
-*/
-/*
-**LIBS: -lXm -lXt -lX11
-*/
-
-#include <X11/Xatom.h>
-#include <X11/Intrinsic.h>
-#include <X11/Shell.h>
-
-#include <Xm/Xm.h>
-#include <Xm/DialogS.h>
-#include <Xm/RowColumn.h>
-#include <stdio.h>
-
-void XDmanage_link (w, client_data, call_data)
-Widget w;		/*  widget id           */
-Widget *client_data;	/*  data from application   */
-caddr_t call_data;      /*  data from widget class  */
-{
-    XtManageChild ( *client_data );
-}
-
-void XDunmanage_link (w, client_data, call_data)
-Widget w;		/*  widget id           */
-Widget *client_data;	/*  data from application   */
-caddr_t call_data;      /*  data from widget class  */
-{
-    XtUnmanageChild ( *client_data );
-}
-
-void XDpopup_link (w, client_data, call_data)
-Widget w;		/*  widget id           */
-Widget *client_data;	/*  data from application   */
-caddr_t call_data;      /*  data from widget class  */
-{
-    XtPopup ( *client_data, XtGrabNone );
-}
-
-void XDpopdown_link (w, client_data, call_data)
-Widget w;		/*  widget id           */
-Widget *client_data;	/*  data from application   */
-caddr_t call_data;      /*  data from widget class  */
-{
-    XtPopdown ( *client_data );
-}
-
-void XDmap_link (w, client_data, call_data)
-Widget w;		/*  widget id           */
-Widget *client_data;	/*  data from application   */
-caddr_t call_data;      /*  data from widget class  */
-{
-    XtMapWidget (*client_data);
-}
-
-void XDunmap_link (w, client_data, call_data)
-Widget w;		/*  widget id           */
-Widget *client_data;	/*  data from application   */
-caddr_t call_data;      /*  data from widget class  */
-{
-    XtUnmapWidget (*client_data);
-}
-
-void XDenable_link (w, client_data, call_data)
-Widget w;		/*  widget id           */
-Widget *client_data;	/*  data from application   */
-caddr_t call_data;      /*  data from widget class  */
-{
-    XtSetSensitive (*client_data, TRUE);
-}
-
-void XDdisable_link (w, client_data, call_data)
-Widget w;		/*  widget id           */
-Widget *client_data;	/*  data from application   */
-caddr_t call_data;      /*  data from widget class  */
-{
-    XtSetSensitive (*client_data, FALSE);
-}
-
-
-
-Widget widget0 = (Widget)NULL;
-Widget row = (Widget)NULL;
-
-
-void create_widget0 (display, app_name, app_argc, app_argv)
-Display *display;
-char *app_name;
-int app_argc;
-char **app_argv;
-{
-	Widget children[1];      /* Children to manage */
-	Arg al[64];           /* Arg List */
-	register int ac = 0;      /* Arg Count */
-	char from_s [256];    /* For font list conversion */
-	XrmValue from_value, to_value; /* ditto */
-	int fg, bg;           /* colour values for pixmaps */ 
-	XmString *list_items; /* For list items */
-	int list_item;        /* Index for list_items */
-	XmString xmstrings[15];    /* temporary storage for XmStrings */
-
-	XtSetArg(al[ac], XmNallowShellResize, TRUE); ac++;
-	XtSetArg(al[ac], XmNargc, app_argc); ac++;
-	XtSetArg(al[ac], XmNargv, app_argv); ac++;
-	widget0 = XtAppCreateShell ( app_name, "XApplication", applicationShellWidgetClass, display, al, ac );
-	ac = 0;
-	XtSetArg(al[ac], XmNentryAlignment, XmALIGNMENT_CENTER); ac++;
-	row = XmCreateRowColumn ( widget0, "row", al, ac );
-	ac = 0;
-init(app_argc,app_argv);
-	XtManageChild ( row);
-}
-
-
-
-
-XtAppContext app_context;
-Display *display;       /*  Display             */
-
-int main (argc,argv)
-int    argc;
-char            **argv;
-{
-	XtToolkitInitialize ();
-	app_context = XtCreateApplicationContext ();
-	display = XtOpenDisplay (app_context, NULL, argv[0], "XApplication",
-	                         NULL, 0, &argc, argv);
-	if (!display)
-	{
-	    printf("%s: can't open display, exiting...\n", argv[0]);
-	    exit (-1);
-	}
-	/* Register converters, just in case you are really unlucky !! */
-	XmRegisterConverters();
-	/* String to unit type doesn't get added !! */
-	XtAddConverter ( XmRString, XmRUnitType, XmCvtStringToUnitType, NULL, 0 );
-	create_widget0 ( display, argv[0], argc, argv );
-	XtRealizeWidget (widget0);
-	XtAppMainLoop (app_context);
-	exit (0);
-}
-
diff --git a/src/Desktop/Action.cc b/src/Desktop/Action.cc
new file mode 100644
index 0000000..b472d62
--- /dev/null
+++ b/src/Desktop/Action.cc
@@ -0,0 +1,43 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Action.h"
+
+Action::Action(const string& name,const string& mode):
+	name_(name),
+	mode_(mode)
+{
+}
+
+Action::~Action()
+{
+}
+
+const string& Action::name() const
+{
+	return name_;
+}
+
+const string& Action::mode() const
+{
+	return mode_;
+}
+
+void Action::print(ostream& s) const
+{
+	s << "Action(" << name_ << "," << mode_ << ")";
+}
+
+bool Action::operator<(const Action& other) const
+{
+	if(name_ == other.name_)
+		return mode_ < other.mode_;
+	else
+		return name_ < other.name_;
+}
diff --git a/src/Desktop/Action.h b/src/Desktop/Action.h
new file mode 100644
index 0000000..2b5793c
--- /dev/null
+++ b/src/Desktop/Action.h
@@ -0,0 +1,45 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File Action.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef Action_H
+#define Action_H
+
+#include <string>
+#include <ostream>
+
+using namespace std;
+
+class Action {
+public:
+	Action(const string& = "*" ,const string& = "*" );
+	~Action(); // Change to virtual if base class
+
+	bool operator<(const Action&) const;
+	const string& name() const;
+	const string& mode() const;
+
+protected:
+	void print(ostream&) const; // Change to virtual if base class	
+
+private:
+	// No copy allowed
+	string name_;
+	string mode_;
+
+	friend ostream& operator<<(ostream& s,const Action& p)
+		{ p.print(s); return s; }
+
+};
+
+inline void destroy(Action**) {}
+
+#endif
diff --git a/src/Desktop/ActionCommand.cc b/src/Desktop/ActionCommand.cc
new file mode 100644
index 0000000..071b2fd
--- /dev/null
+++ b/src/Desktop/ActionCommand.cc
@@ -0,0 +1,36 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "ActionCommand.h"
+#include "IconObject.h"
+#include "Action.h"
+
+
+ActionCommand::ActionCommand(const string& name):
+	Command(name)
+{
+}
+
+ActionCommand::~ActionCommand()
+{
+	// Not called
+}
+
+void ActionCommand::execute(IconObject* o)
+{
+	o->action(name_);
+}	
+
+
+static ActionCommand saveCmd("save");
+static ActionCommand visualiseCmd("visualise");
+static ActionCommand examineCmd("examine");
+static ActionCommand executeCmd("execute");
+static ActionCommand analyseCmd("analyse");
+static ActionCommand extractCmd("extract");
diff --git a/src/Desktop/ActionCommand.h b/src/Desktop/ActionCommand.h
new file mode 100644
index 0000000..7a033e2
--- /dev/null
+++ b/src/Desktop/ActionCommand.h
@@ -0,0 +1,32 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File ActionCommand.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef ActionCommand_H
+#define ActionCommand_H
+
+#include "Command.h"
+
+class ActionCommand : public Command {
+public:
+	ActionCommand(const string& name);
+	virtual ~ActionCommand(); 
+
+	virtual void execute(IconObject*);
+	static void execute(const string&,IconObject*);
+
+private:
+	// No copy allowed
+	ActionCommand(const ActionCommand&);
+	ActionCommand& operator=(const ActionCommand&);
+};
+
+#endif
diff --git a/src/Desktop/Command.cc b/src/Desktop/Command.cc
new file mode 100644
index 0000000..ddb9bdc
--- /dev/null
+++ b/src/Desktop/Command.cc
@@ -0,0 +1,47 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Command.h"
+//#include "Log.h"
+
+#include <map>
+#include <iostream>
+
+static map<string,Command*>* actions = 0;
+
+Command::Command(const string& name):
+	name_(name)
+{
+	if(actions == 0)
+		actions = new map<string,Command*>;
+
+	(*actions)[name] = this;
+}
+
+Command::~Command()
+{
+	// Not called
+}
+
+
+void Command::execute(const string& name,IconObject* p)
+{
+	map<string,Command*>::iterator j = actions->find(name);
+	if(j == actions->end())
+		//Log::error(p) << name << ": action not found" << endl;
+		cout << name << ": action not found" << endl;
+	else
+		(*j).second->execute(p);
+}	
+
+bool Command::isValid(const string& name)
+{
+	map<string,Command*>::iterator j = actions->find(name);
+	return (j != actions->end());		
+}	
\ No newline at end of file
diff --git a/src/Desktop/Command.h b/src/Desktop/Command.h
new file mode 100644
index 0000000..950cf7a
--- /dev/null
+++ b/src/Desktop/Command.h
@@ -0,0 +1,40 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File Command.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef Command_H
+#define Command_H
+
+#include <string>
+
+using namespace std;
+
+class IconObject;
+
+class Command {
+public:
+	Command(const string& name);
+	virtual ~Command();
+
+	virtual void execute(IconObject*) = 0;
+	static void execute(const string&,IconObject*);
+	static bool isValid(const string&);
+
+protected:
+	string name_;
+
+private:
+	// No copy allowed
+	Command(const Command&);
+	Command& operator=(const Command&);
+};
+
+#endif
diff --git a/src/Desktop/ComputeEditor.cc b/src/Desktop/ComputeEditor.cc
new file mode 100644
index 0000000..638a230
--- /dev/null
+++ b/src/Desktop/ComputeEditor.cc
@@ -0,0 +1,102 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "ComputeEditor.h"
+
+#include <QPlainTextEdit>
+#include <QVBoxLayout>
+
+#include "EditorFactory.h"
+#include "IconObject.h"
+#include "Request.h"
+
+ComputeEditor::ComputeEditor(const IconClass& kind,const string& name) : 
+     MvQEditor(kind,name)
+{	
+  	te_=new QPlainTextEdit(this);
+	te_->setProperty("mvStyle","fileContents");
+	centralLayout_->addWidget(te_);
+	
+	//vector<string> classes;
+	//classes.push_back(kind.name());
+	
+	//connect(w,SIGNAL(iconDropped(IconObject*)),
+	//	 this,SLOT(slotIconDropped(IconObject*)));
+	
+	connect(te_,SIGNAL(textChanged()),
+		this,SLOT(slotTextChanged()));
+}
+
+ComputeEditor::~ComputeEditor()
+{
+}
+
+void ComputeEditor::apply()
+{
+	Request r("COMPUTE");	
+	r("FORMULA") = te_->toPlainText().toStdString().c_str();
+	r.save(current_->path());
+
+}
+
+void ComputeEditor::reset()
+{
+	Request r  = current_->request();
+	const char* f  = r("FORMULA");
+	
+	QString str;
+	if(f) str=QString(f);
+	
+	te_->setPlainText(str);
+
+	//modified_ = false;
+}
+
+void ComputeEditor::close()
+{
+	te_->clear();
+}
+
+void ComputeEditor::merge(IconObjectH)
+{
+	/*XMText text(text_);
+
+	string s = current_->relativeName(o);
+	bool quote = false;
+
+
+	//for(string::iterator i = s.begin(); i != s.end(); ++i)
+	for(int it=0; it<s.length(); ++it)
+	{
+		//if(i == s.begin() &&  *i != '_' && !isalpha(*i)) quote = true;
+		if(it == 0 &&  s[it] != '_' && !isalpha(s[it]))
+			quote = true;
+
+		//if(*i != '_' && !isalnum(*i)) quote = true;
+   		if(s[it] != '_' && !isalnum(s[it])) 
+			quote = true;
+	}
+
+
+	if(quote) 
+		s = string("\'") + s + string("\'");
+	text.insert(s);*/
+}
+
+void ComputeEditor::replace(IconObjectH)
+{	
+}
+
+void ComputeEditor::slotTextChanged()
+{
+  	changed();
+}	
+
+static EditorMaker<ComputeEditor> editorMaker("ComputeEditor");
+
diff --git a/src/Desktop/ComputeEditor.h b/src/Desktop/ComputeEditor.h
new file mode 100644
index 0000000..bbc2c6a
--- /dev/null
+++ b/src/Desktop/ComputeEditor.h
@@ -0,0 +1,49 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 ComputeEditor_H
+#define ComputeEditor_H
+
+#include "MvQEditor.h"
+
+class QPlainTextEdit;
+
+
+class ComputeEditor : public MvQEditor
+{
+Q_OBJECT  
+  
+public:
+	ComputeEditor(const IconClass&,const string&);
+	virtual ~ComputeEditor(); 
+
+public slots:
+    	void slotTextChanged();
+	
+protected: 	
+	void readSettings(QSettings&) {};
+	void writeSettings(QSettings&) {};
+  
+private:
+	ComputeEditor(const ComputeEditor&);
+	ComputeEditor& operator=(const ComputeEditor&);
+
+	virtual void apply();
+	virtual void reset();
+	virtual void close();
+	virtual void merge(IconObjectH);
+	virtual void replace(IconObjectH);
+	
+	QPlainTextEdit *te_;
+
+};
+
+inline void destroy(ComputeEditor**) {}
+
+#endif
diff --git a/src/Desktop/ConfigLoader.cc b/src/Desktop/ConfigLoader.cc
new file mode 100644
index 0000000..bc191f3
--- /dev/null
+++ b/src/Desktop/ConfigLoader.cc
@@ -0,0 +1,43 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "ConfigLoader.h"
+#include "IconClass.h"
+//#include "IconInfo.h"
+#include "StandardObject.h"
+//#include "stl.h"
+
+typedef multimap<pair<string,int>,ConfigLoader*> Map;
+
+static Map* makers = 0;
+
+ConfigLoader::ConfigLoader(const string& name,int order)
+{
+	if(makers == 0)
+		makers = new Map();
+
+	pair<string,int> p(name,order);
+	makers->insert(Map::value_type(p,this));
+}
+
+ConfigLoader::~ConfigLoader()
+{
+	// Not called
+}
+
+bool ConfigLoader::process(request *r,int order)
+{
+	pair<string,int> a(r->name,order);
+	pair<Map::iterator,Map::iterator> p = makers->equal_range(a);
+
+	for(Map::iterator j = p.first; j != p.second; ++j)
+		(*j).second->load(r);
+
+	return p.first != p.second;
+}	
diff --git a/src/Desktop/ConfigLoader.h b/src/Desktop/ConfigLoader.h
new file mode 100644
index 0000000..5e97329
--- /dev/null
+++ b/src/Desktop/ConfigLoader.h
@@ -0,0 +1,113 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File ConfigLoader.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef ConfigLoader_H
+#define ConfigLoader_H
+
+#include <string>
+using std::string;
+
+#ifndef Metview_H
+#include "Metview.h"
+#endif
+
+
+class ConfigLoader {
+public:
+
+// -- Exceptions
+	// None
+
+// -- Contructors
+
+	ConfigLoader(const string& name,int order);
+
+// -- Destructor
+
+	virtual ~ConfigLoader(); // Change to virtual if base class
+
+// -- Convertors
+	// None
+
+// -- Operators
+	// None
+
+// -- Methods
+
+	virtual void load(request*) = 0;
+
+// -- Overridden methods
+	// None
+
+// -- Class members
+	// None
+
+// -- Class methods
+
+	static bool process(request*,int);
+
+protected:
+
+// -- Members
+	// None
+
+// -- Methods
+	
+	// void print(ostream&) const; // Change to virtual if base class	
+
+// -- Overridden methods
+	// None
+
+// -- Class members
+	// None
+
+// -- Class methods
+	// None
+
+private:
+
+// No copy allowed
+
+	ConfigLoader(const ConfigLoader&);
+	ConfigLoader& operator=(const ConfigLoader&);
+
+// -- Members
+	// None
+
+// -- Methods
+	// None
+
+// -- Overridden methods
+	// None
+
+// -- Class members
+	// None
+
+// -- Class methods
+	// None
+
+// -- Friends
+
+	//friend ostream& operator<<(ostream& s,const ConfigLoader& p)
+	//	{ p.print(s); return s; }
+
+};
+
+template<class T>
+class SimpleLoader : public ConfigLoader {
+	void load(request* r) { T::load(r); }
+public:
+    SimpleLoader(const string& name,int order) : ConfigLoader(name,order) {}
+};
+
+
+#endif
diff --git a/src/Desktop/Counted.cc b/src/Desktop/Counted.cc
new file mode 100644
index 0000000..e0f66c4
--- /dev/null
+++ b/src/Desktop/Counted.cc
@@ -0,0 +1,78 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Counted.h"
+#include "Runnable.h"
+
+#include <set>
+
+class CountedGC : public Runnable 
+{
+public:
+	void push(Counted*);
+ 
+private:
+    	std::set<Counted*> dead_;
+	virtual void run();
+};
+
+void CountedGC::push(Counted* c)
+{
+	dead_.insert(c);
+	enable();
+}
+
+void CountedGC::run()
+{
+	if(dead_.size() == 0)
+	{
+		disable();
+		return;
+	}
+
+	Counted* c = *dead_.begin();
+	dead_.erase(c);
+
+	if(c->count_ != 0)
+		cout << "CountedGC " << *c << " has a non-zero count " 
+			<< c->count_ << endl;
+	else {
+	//	cout << "CountedGC delete " << *c << endl;
+		delete c;
+	}
+		
+}
+
+
+Counted::Counted():
+	count_(0)
+{
+}
+
+Counted::~Counted()
+{
+}
+
+void Counted::attach()
+{
+	count_++;
+}
+
+void Counted::detach()
+{
+	if(--count_ == 0) 
+	{
+		static CountedGC* gc = new CountedGC();
+		gc->push(this);
+	}
+}
+
+void Counted::print(ostream&) const
+{
+}
\ No newline at end of file
diff --git a/src/Desktop/Counted.h b/src/Desktop/Counted.h
new file mode 100644
index 0000000..6bf5de9
--- /dev/null
+++ b/src/Desktop/Counted.h
@@ -0,0 +1,81 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File Counted.h
+// Baudouin Raoult - ECMWF Dec 98
+
+#ifndef Counted_H
+#define Counted_H
+
+#include <iostream>
+
+using namespace std;
+
+class Counted 
+{
+public:  
+	Counted();
+
+	void attach();
+	void detach();
+	int count() {return count_;}
+
+protected:
+	virtual ~Counted(); // Change to virtual if base class
+	virtual void print(ostream&) const; // Change to virtual if base class	
+
+private:
+	Counted(const Counted&);
+	Counted& operator=(const Counted&);
+
+	int count_;
+
+	friend ostream& operator<<(ostream& s,const Counted& p)
+		{ p.print(s); return s; }
+	friend class CountedGC;
+};
+
+inline void destroy(Counted**) {}
+
+template<class T>
+class Handle {
+	T* ptr_;
+public:
+      
+	Handle(T* ptr = 0) : ptr_(ptr) 
+		{ if(ptr_) ptr_->attach(); }
+
+	virtual ~Handle()   
+		{ if(ptr_) ptr_->detach(); }
+
+	Handle(const Handle<T>& other): ptr_(other.ptr_) 
+		{ if(ptr_) ptr_->attach(); }
+
+	Handle<T>& operator=(const Handle<T>& other) 
+	{
+		if(ptr_ != other.ptr_)
+		{
+			if(ptr_) ptr_->detach();
+			ptr_ = other.ptr_;
+			if(ptr_) ptr_->attach();
+		}
+		return *this;
+	}
+
+	T* operator->() const { return ptr_; }
+	T& operator*()  const { return *ptr_; }
+
+	operator T*() const { return ptr_; }
+
+	bool operator<(const Handle<T>& other) const
+		{ return ptr_ < other.ptr_; }
+	
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/Dependancy.cc b/src/Desktop/Dependancy.cc
new file mode 100644
index 0000000..fcdea7c
--- /dev/null
+++ b/src/Desktop/Dependancy.cc
@@ -0,0 +1,18 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Dependancy.h"
+
+Dependancy::Dependancy()
+{
+}
+
+Dependancy::~Dependancy()
+{
+}
diff --git a/src/Desktop/Dependancy.h b/src/Desktop/Dependancy.h
new file mode 100644
index 0000000..e3437ab
--- /dev/null
+++ b/src/Desktop/Dependancy.h
@@ -0,0 +1,40 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File Dependancy.h
+// Baudouin Raoult - ECMWF Aug 99
+
+#ifndef Dependancy_H
+#define Dependancy_H
+
+#include "Counted.h"
+
+class IconObject;
+class Task;
+class Action;
+class Request;
+
+class Dependancy : public virtual Counted 
+{
+public:
+	Dependancy();
+	virtual ~Dependancy(); 
+
+	virtual Task* action(const Action&)   = 0;
+	virtual void  success(const Request&) = 0;
+	virtual void  failure() =0;
+
+};
+
+class DependancyH : public Handle<Dependancy> {
+public:
+	DependancyH(Dependancy* o = 0) : Handle<Dependancy>(o) {}
+};
+
+#endif
diff --git a/src/Desktop/Drop.cc b/src/Desktop/Drop.cc
new file mode 100644
index 0000000..444366d
--- /dev/null
+++ b/src/Desktop/Drop.cc
@@ -0,0 +1,110 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Drop.h"
+
+#include "Action.h"
+#include "Task.h"
+#include "IconClass.h"
+
+Drop::Drop(const set<IconObject*>& icons,
+		const Request& request,
+		const string& service,const Request& mode):
+
+	request_(request),
+	service_(service),
+	mode_(mode),
+	waiting_(0),
+	error_(false)
+{
+	for(set<IconObject*>::const_iterator j = icons.begin(); j != icons.end() ; ++j)
+	{
+		IconObjectH o = (*j);
+		requests_[o] = o->request();
+		Task* t = o->action( Action("prepare","*"));
+		
+		if(t) {
+			tasks_[t] = o;
+			waiting_++;
+			t->add(this);
+
+			// Add extra information about the target object
+			MvRequest reqCont = request.getSubrequest("_CONTEXT");
+			if ( reqCont )
+				t->addContext(reqCont);
+		}
+	}
+	check();
+}
+
+Drop::~Drop()
+{
+	cout << "Drop::~Drop()" << endl;
+}
+
+void Drop::success(Task* t,const Request& r)
+{
+	IconObjectH o = tasks_[t];
+	requests_[o] = r;
+	waiting_--;
+	check();
+}
+
+void Drop::failure(Task*)
+{
+	error_ = true;
+	waiting_--;
+	check();
+}
+
+void Drop::check()
+{
+	if(waiting_) return;
+
+	if(!error_)
+	{
+
+		// Request should be sorted
+		const char* null = 0;
+		map<int,vector<Request> > m;
+
+		for(map<IconObjectH,Request>::iterator j = requests_.begin(); j != 
+			requests_.end(); ++j)
+	    {
+			Request r     = (*j).second;
+			IconObject* o = (*j).first;
+			if(r && r.getVerb())
+			{
+				int priority = IconClass::find(r.getVerb()).priority();
+				if(null == r("_NAME"))  r("_NAME")  = o->fullName().c_str();
+				if(null == r("_CLASS")) r("_CLASS") = o->className().c_str();
+				m[priority].push_back(r);
+			}
+	 	}
+
+		Request req;
+
+		for(map<int,vector<Request> >::iterator k = m.begin(); k != m.end(); ++k)
+		{
+			Request r;
+			for(vector<Request>::iterator j = (*k).second.begin(); 
+				j != (*k).second.end(); ++j)
+					r = r + (*j) + req;
+			req = r;
+		}
+
+		request_ = request_ + req;
+		request_("_MODE") = mode_;
+
+		request_.print();
+
+		MvApplication::callService(service_.c_str(),request_,0);
+	}
+	delete this;
+}
diff --git a/src/Desktop/Drop.h b/src/Desktop/Drop.h
new file mode 100644
index 0000000..abd8f2b
--- /dev/null
+++ b/src/Desktop/Drop.h
@@ -0,0 +1,51 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File Drop.h
+// Baudouin Raoult - ECMWF Aug 99
+
+#ifndef Drop_H
+#define Drop_H
+
+#include "IconObject.h"
+#include "Request.h"
+#include "TaskObserver.h"
+
+class Drop : public TaskObserver
+{
+public:
+	Drop(const set<IconObject*>&,const Request&,const string&,const Request&);
+	virtual ~Drop();
+
+	void start();
+
+	MvRequest request() { return request_; }
+
+private:			
+	// No copy allowed
+	Drop(const Drop&);
+	Drop& operator=(const Drop&);
+
+	void check();
+      	virtual void success(Task*,const Request&);
+      	virtual void failure(Task*);
+
+	Request          request_;
+	string           service_;
+	Request          mode_;
+	bool             error_;
+	int              waiting_;
+
+	map<IconObjectH,Request> requests_;
+	map<Task*,IconObject*>   tasks_;
+};
+
+inline void destroy(Drop**) {}
+
+#endif
diff --git a/src/Desktop/EditTransaction.cc b/src/Desktop/EditTransaction.cc
new file mode 100644
index 0000000..dbfe19c
--- /dev/null
+++ b/src/Desktop/EditTransaction.cc
@@ -0,0 +1,117 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <string>
+using std::string;
+
+#include "Metview.h"
+#include "EditTransaction.h"
+#include "IconObject.h"
+#include "Request.h"
+#include "Task.h"
+#include "Folder.h"
+#include "IconFactory.h"
+#include "EditorObserver.h"
+#include "Editor.h"
+
+#include "Protocol.h"
+#include "MacroGuiObject.h"
+#include "Action.h"
+
+EditTransaction::EditTransaction(): 
+	Transaction("EDIT") 
+{ 
+}
+
+EditTransaction::~EditTransaction()
+{ 
+	//delete subClass_;
+}
+
+EditTransaction::EditTransaction(MvTransaction* t) :
+	Transaction(t)
+{
+}
+
+MvTransaction *EditTransaction::cloneSelf()
+{ 
+	return new EditTransaction(this); 
+}
+
+void EditTransaction::apply(IconObject*)
+{
+	Task* task = current_->action(Action("prepare"));
+	task->add(this);
+}
+
+void EditTransaction::close(IconObject*)
+{
+	setError(1,"Edit canceled");
+	sendReply(MvRequest());
+}
+
+void EditTransaction::success(Task*,const Request& r)
+{
+	sendReply(r);
+}
+
+void EditTransaction::failure(Task*)
+{
+	setError(1,"Edit canceled");
+	sendReply(MvRequest());
+}
+
+void EditTransaction::callback(MvRequest& r)
+{
+
+	r.print();
+
+    current_ = 0;
+
+	MvRequest def = r("DEFINITION");
+
+	if ( def ) 
+	{
+		const char* name = def("_NAME");
+		if ( name ) 
+	      	current_ = IconObject::search(name);
+
+	    if ( !current_ )
+			current_ = IconFactory::create(Folder::folder("temporary"),def);
+	}
+
+	else 
+	{
+		r.advance();
+
+		if ( r )
+		{
+			subClass_ = new MacroGuiObject(r);
+			Request t(subClass_->name().c_str());
+			current_ = IconFactory::create(Folder::folder("temporary"),t);
+		}
+
+		else 
+		{
+			close(current_);
+			return;
+		}
+			
+	}
+
+	current_->edit();
+
+	Editor* e = current_->editor();
+	e->observer(this);
+	e->temporary();
+
+
+}
+
+static ProtocolFactory<EditTransaction> edit;
diff --git a/src/Desktop/EditTransaction.h b/src/Desktop/EditTransaction.h
new file mode 100644
index 0000000..ca53e97
--- /dev/null
+++ b/src/Desktop/EditTransaction.h
@@ -0,0 +1,58 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File EditTransaction.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef EditTransaction_H
+#define EditTransaction_H
+
+#include "Transaction.h"
+#include "EditorObserver.h"
+#include "TaskObserver.h"
+#include "IconObject.h"
+
+class EditTransaction : 
+	public Transaction, 
+	public EditorObserver,
+	public TaskObserver
+{
+	IconObjectH current_;
+
+	virtual MvTransaction *cloneSelf();
+	virtual void callback(MvRequest&);
+	virtual void apply(IconObject*);
+	virtual void close(IconObject*);
+
+public:
+        EditTransaction(); 
+	EditTransaction(MvTransaction* t);
+	~EditTransaction();
+	
+private:
+	// No copy allowed
+	EditTransaction(const EditTransaction&);
+	EditTransaction& operator=(const EditTransaction&);
+
+	IconClass* subClass_;
+
+	virtual void success(Task*,const Request&);
+	virtual void failure(Task*);
+
+
+};
+
+inline void destroy(EditTransaction**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(EditTransaction);
+//#endif
+
+#endif
diff --git a/src/Desktop/Editor.cc b/src/Desktop/Editor.cc
new file mode 100644
index 0000000..2d0e7ad
--- /dev/null
+++ b/src/Desktop/Editor.cc
@@ -0,0 +1,123 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Editor.h"
+#include "EditorFactory.h"
+#include "EditorObserver.h"
+#include "Request.h"
+#include "IconClass.h"
+
+Editor::Editor(const IconClass& c,const string& kind):
+	class_(c),
+	kind_(kind),
+	temporary_(false),
+	current_(0),
+	observer_(0)
+{
+}
+
+Editor::~Editor()
+{
+	// Not called
+
+}
+
+void Editor::open(IconObject* icon)
+{
+	Editor *e = icon->editor();
+	if(e == 0) e = EditorFactory::find(icon->editorClass());
+	if(e)
+	  	e->edit(icon);
+}
+
+const IconClass& Editor::iconClass()
+{
+	return class_;
+}
+
+const string& Editor::kind()
+{
+	return kind_;
+}
+
+void Editor::edit(IconObject* icon)
+{
+	if(icon != current_)
+	{
+		temporary_ = false;
+		current_ = icon;
+		if(current_)  {
+			current_->editor(this);
+			edit();
+		}
+	}
+	if(current_) 
+	{
+	  	showIt();
+		raiseIt();
+	}	
+	else
+		empty();
+}
+
+void Editor::editDone()
+{
+	if(current_) current_->editor(0);
+	current_ = 0;
+}
+
+void Editor::observer(EditorObserver* o)
+{
+	observer_ = o;
+}
+
+void Editor::temporary()
+{
+	temporary_ = true;
+}	
+
+IconObject* Editor::current()
+{
+	return current_;
+}
+
+void Editor::empty()
+{
+}
+
+string Editor::alternateEditor()
+{
+	return "NoEditor";
+}
+
+void Editor::notifyObserverApply()
+{
+    if(observer_) {
+        observer_->apply(current_);
+        observer_ = 0;
+    }
+}
+
+void Editor::notifyObserverClose()
+{
+    if(observer_) {
+        observer_->close(current_);
+        observer_ = 0;
+    }
+}
+
+bool Editor::checkVerb()
+{
+	if(!current_)
+	  	return true;
+	
+	Request r=current_->request();	
+	return (r && strcmp(r.getVerb(),current_->iconClass().name().c_str()) ==0);
+}	  
+	  
\ No newline at end of file
diff --git a/src/Desktop/Editor.h b/src/Desktop/Editor.h
new file mode 100644
index 0000000..38d22f5
--- /dev/null
+++ b/src/Desktop/Editor.h
@@ -0,0 +1,72 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File Editor.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef Editor_H
+#define Editor_H
+
+
+#include <string>
+using std::string;
+
+class IconObject;
+class IconClass;
+class EditorDrawer;
+class EditorTool;
+class EditorObserver;
+
+#include "IconObject.h"
+
+class Editor 
+{
+public:
+	virtual ~Editor();
+
+	const IconClass& iconClass();
+	const string&    kind();
+	IconObject*      current();
+	void             observer(EditorObserver*);
+
+	void   edit(IconObject*);
+	void   editDone();
+
+	void   notifyObserverApply();
+	void   notifyObserverClose();
+
+	virtual void empty();
+	virtual void temporary();
+	virtual string alternateEditor();
+	virtual void changed()=0;
+	virtual void raiseIt()=0;
+	
+	static void open(IconObject*);
+
+protected:
+	Editor(const IconClass&,const string& kind);
+
+	const IconClass&    class_;
+	string              kind_;
+	EditorObserver*     observer_;
+	IconObjectH         current_;
+	bool                temporary_;
+	
+	virtual void edit()=0;
+	virtual void showIt()=0;
+	bool checkVerb();
+
+private:
+	Editor(const Editor&);
+	Editor& operator=(const Editor&);
+
+};
+
+
+#endif
diff --git a/src/Desktop/EditorDrawer.h b/src/Desktop/EditorDrawer.h
new file mode 100644
index 0000000..0821ec1
--- /dev/null
+++ b/src/Desktop/EditorDrawer.h
@@ -0,0 +1,30 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 EditorDrawer_H
+#define EditorDrawer_H
+
+#include <QString>
+
+class QWidget;
+class MvQEditor;
+
+class EditorDrawer
+{
+public:
+	EditorDrawer(MvQEditor *editor) : editor_(editor) {};
+	
+	virtual QString name()=0;
+	virtual QWidget* widget()=0;
+	
+protected:
+    	MvQEditor *editor_;
+};  
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/EditorDrawerFactory.cc b/src/Desktop/EditorDrawerFactory.cc
new file mode 100644
index 0000000..5990597
--- /dev/null
+++ b/src/Desktop/EditorDrawerFactory.cc
@@ -0,0 +1,40 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "EditorDrawerFactory.h"
+#include "EditorDrawer.h"
+
+typedef multimap<int,EditorDrawerFactory*> Map;
+
+static Map *makers= 0;
+
+EditorDrawerFactory::EditorDrawerFactory(int n)
+{
+	if(makers == 0)
+		makers = new Map();
+
+	makers->insert(Map::value_type(n,this));
+}
+
+EditorDrawerFactory::~EditorDrawerFactory()
+{
+	// Not called
+}
+
+map<string,EditorDrawer*> EditorDrawerFactory::create(MvQEditor *e)
+{
+	 map<string,EditorDrawer*> m;
+	 for(Map::iterator j = makers->begin(); j != makers->end(); ++j)
+	 {
+	 		EditorDrawer* d = (*j).second->make(e);
+			if(d != 0) m[d->name().toStdString()] = d;
+	 }
+	 return m;
+
+}
diff --git a/src/Desktop/EditorDrawerFactory.h b/src/Desktop/EditorDrawerFactory.h
new file mode 100644
index 0000000..21fca39
--- /dev/null
+++ b/src/Desktop/EditorDrawerFactory.h
@@ -0,0 +1,53 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 EditorDrawerFactory_H
+#define EditorDrawerFactory_H
+
+#include "inc_stl.h"
+using std::string;
+
+//UKMO/HP/aCC:
+#ifdef hp
+#include <MvQEditor.h>
+#endif
+
+class EditorDrawer;
+class MvQEditor;
+
+class EditorDrawerFactory 
+{
+public:
+
+	EditorDrawerFactory(int);
+	virtual ~EditorDrawerFactory();
+
+	virtual EditorDrawer* make(MvQEditor*) = 0;
+	static map<string,EditorDrawer*> create(MvQEditor*);
+
+private:
+	// No copy allowed
+	EditorDrawerFactory(const EditorDrawerFactory&);
+	EditorDrawerFactory& operator=(const EditorDrawerFactory&);
+
+};
+
+template<class T,class E>
+class EditorDrawerMaker : public EditorDrawerFactory {
+	EditorDrawer* make(MvQEditor* e) 
+	{ 
+		E* a = dynamic_cast<E*>(e);
+		return a ? new T(a) : 0;
+	}
+public:
+	EditorDrawerMaker(int n) : EditorDrawerFactory(n) {}
+};
+
+
+#endif
diff --git a/src/Desktop/EditorFactory.cc b/src/Desktop/EditorFactory.cc
new file mode 100644
index 0000000..c74bbe9
--- /dev/null
+++ b/src/Desktop/EditorFactory.cc
@@ -0,0 +1,94 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "EditorFactory.h"
+#include "IconClass.h"
+#include "Editor.h"
+#include "NoEditor.h"
+
+typedef multimap<pair<string,string>,Editor*> Map;
+static Map editors;
+
+static map<string,EditorFactory*>* makers = 0;
+
+EditorFactory::EditorFactory(const string& name):
+	name_(name)
+{
+	if(makers == 0)
+		makers = new map<string,EditorFactory*>;
+
+	(*makers)[name] = this;
+}
+
+EditorFactory::~EditorFactory()
+{
+	// Not called
+}
+
+Editor* EditorFactory::find(const IconClass& c)
+{
+	return find(c,c.editor());
+}
+
+Editor* EditorFactory::find(const IconClass& c,const string& type)
+{
+	//Cleaning
+	/*for(Map::iterator it = editors.begin(); it != editors.end(); )
+	{
+		if(it->second->current() == 0)
+		{
+		  	cout << "Editor deleted:  " <<  it->first.first << " " << it->first.second << endl;
+			
+			delete it->second;
+			editors.erase(it++);
+		}
+		else
+		{
+		  	++it;
+		}	
+	}*/	
+	
+	//Find or create
+	pair<string,string> name(c.name(),type);
+	Editor *e = 0;
+
+	pair<Map::iterator,Map::iterator> p = editors.equal_range(name);
+	for(Map::iterator j = p.first; j != p.second; ++j)
+	{
+		Editor* editor       = (*j).second;		
+		pair<string,string>  n(editor->iconClass().name(),editor->kind());
+
+		if(name == n && editor->current() == 0)
+		{
+			e = editor;
+			break;
+		}
+	}
+	
+	if(e == 0)
+	{
+		map<string,EditorFactory*>::iterator j = makers->find(type);
+		if(j == makers->end())
+		{		 	
+			e =  new NoEditor(c,"NoEditor");
+		}
+		else
+			e =  (*j).second->make(c);
+
+		editors.insert(Map::value_type(name,e));
+	}	
+	
+	cout << "Editors ---------->" << endl;
+	for(Map::iterator it = editors.begin(); it != editors.end();it++ )
+	{
+		cout << " editor: " <<  it->first.first << " " << it->first.second << endl;
+	}
+	
+	return e;
+}
diff --git a/src/Desktop/EditorFactory.h b/src/Desktop/EditorFactory.h
new file mode 100644
index 0000000..ba80a16
--- /dev/null
+++ b/src/Desktop/EditorFactory.h
@@ -0,0 +1,49 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 EditorFactory_H
+#define EditorFactory_H
+
+#include <string>
+using std::string;
+
+#include "mars.h"
+
+class Editor;
+class IconClass;
+
+class EditorFactory {
+public:
+
+	EditorFactory(const string& name);
+	virtual ~EditorFactory(); 
+
+	virtual Editor* make(const IconClass&) = 0;
+	
+	static Editor* find(const IconClass& name);
+	static Editor* find(const IconClass& name,const string& type);
+
+protected:
+	string name_;
+	
+private:
+	EditorFactory(const EditorFactory&);
+	EditorFactory& operator=(const EditorFactory&);
+
+};
+
+template<class T>
+class EditorMaker : public EditorFactory {
+	Editor* make(const IconClass& n) { return new T(n,name_); }
+public:
+	EditorMaker(const string& name) : EditorFactory(name) {}
+};
+
+
+#endif
diff --git a/src/Desktop/EditorObserver.h b/src/Desktop/EditorObserver.h
new file mode 100644
index 0000000..d84a222
--- /dev/null
+++ b/src/Desktop/EditorObserver.h
@@ -0,0 +1,27 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File EditorObserver.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef EditorObserver_H
+#define EditorObserver_H
+
+class IconObject;
+
+class EditorObserver {
+public:
+
+	virtual void apply(IconObject*) = 0;
+	virtual void close(IconObject*) = 0;
+
+};
+
+
+#endif
diff --git a/src/Desktop/FamilyEditor.cc b/src/Desktop/FamilyEditor.cc
new file mode 100644
index 0000000..adba294
--- /dev/null
+++ b/src/Desktop/FamilyEditor.cc
@@ -0,0 +1,296 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "FamilyEditor.h"
+
+#include <QComboBox>
+#include <QDebug>
+#include <QFrame>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QScrollArea>
+#include <QStackedWidget>
+#include <QVBoxLayout>
+
+#include "EditorFactory.h"
+#include "FamilyScanner.h"
+#include "IconClass.h"
+#include "IconFactory.h"
+#include "IconObject.h"
+//#include "Log.h"
+#include "RequestPanel.h"
+
+#include "MvQRequestPanelWidget.h"
+
+FamilyEditor::FamilyEditor(const IconClass& name,const string& kind):
+	MvQEditor(name,kind), 
+	scanner_(FamilyScanner::find(name))
+{
+	QFrame *w=new QFrame(this);
+	w->setFrameShape(QFrame::StyledPanel);
+	//w->setProperty("mvStyle","familyCombo");
+  
+  	QHBoxLayout *hb=new QHBoxLayout(this);
+	w->setLayout(hb);
+	centralLayout_->addWidget(w);
+	centralLayout_->addSpacing(4);
+  
+	comboLayout_=new QGridLayout;
+	comboLayout_->setVerticalSpacing(4);
+	comboLayout_->setHorizontalSpacing(4);
+	comboLayout_->setContentsMargins(2,4,2,4);
+	hb->addLayout(comboLayout_);
+	hb->addStretch(1);
+	
+	//pages
+	page_ = new QStackedWidget(this);
+	centralLayout_->addWidget(page_);
+	
+	Request r(name.name().c_str());
+	makePages(0,r);
+		
+	//Now we have all the combos defined we cand add signals-slots. 
+	foreach(QComboBox *cb,combos_)
+	{
+		 connect(cb,SIGNAL(currentIndexChanged(int)),
+        	         this, SLOT(slotChangePage(int)));	
+	}		 
+}
+
+FamilyEditor::~FamilyEditor()
+{
+}
+
+void FamilyEditor::setStartPage()
+{
+	if(!current_) return;
+  
+  	vector<string> keyValues;	
+	const Request& r=current_->requestForVerb(class_.name());
+	
+	const vector<string>& p = scanner_.params();
+	for(unsigned int i=0; i < p.size(); i++) 
+	{
+		const char* keyVal=r(p[i].c_str());
+		if(keyVal)
+		{  
+			QString qsv(keyVal);
+		  	for(int j=0;  j < combos_.at(i)->count(); j++)
+			{
+				if(combos_.at(i)->itemData(j,Qt::UserRole).toString() == qsv)
+				{
+				  	combos_.at(i)->setCurrentIndex(j);
+				}
+			}
+		}
+	}		
+}	
+	
+void FamilyEditor::makePages(int n,Request& r)
+{
+	const vector<string>& p = scanner_.params();
+	if(n >= static_cast<int>(p.size())) return;
+	
+	string paramName=p[n];
+	
+	const vector<string>& v = scanner_.values(paramName);
+	const vector<string>& b = scanner_.beau(paramName);
+	
+	for(unsigned int i = 0; i < v.size(); i++)
+	{
+		r(paramName.c_str()) = v[i].c_str();
+
+		if(combos_.count() < n+1)
+		{
+			int row=combos_.count();
+			QLabel *lab=new QLabel("<b>"+QString::fromStdString(paramName) + ": </b>",this);
+			QComboBox *combo=new QComboBox(this);
+			comboLayout_->addWidget(lab,row,0);
+			comboLayout_->addWidget(combo,row,1,Qt::AlignLeft);
+			combos_ << combo;			
+		}	
+	
+		QString name(b[i].c_str());
+		
+		if(combos_.at(n)->count() <  static_cast<int>(v.size()))
+		{  
+			QComboBox *combo=combos_.at(n);
+			combo->addItem(name,QString::fromStdString(v[i]));
+		}
+	
+		//Last keyword --> we create a panel
+		if(n == static_cast<int>(p.size()) - 1)
+		{						
+			Request s = class_.language().expand(r);
+			const char *type = s(scanner_.keyword().c_str());
+		
+			if(type)
+			{					  		
+			  	//Create panel
+				vector<string> classes;
+				classes.push_back(class_.name());
+	
+				MvQRequestPanelWidget *w=new MvQRequestPanelWidget(classes,this);
+				RequestPanel *panel=new RequestPanel(IconClass::find(type), w, this,type);
+				panels_.push_back(panel);
+			
+		 		QScrollArea *area=new QScrollArea(this);
+				area->setWidgetResizable(true);			
+				page_->addWidget(area);
+				area->setWidget(w);
+		
+				connect(w,SIGNAL(iconDropped(IconObject*)),
+		 			this,SLOT(slotIconDropped(IconObject*)));
+					
+			}
+		}	
+			
+		makePages(n+1,r);
+	}	  
+}  
+
+
+IconObject* FamilyEditor::copy(const string& /*name*/)
+{
+	//IconObject* o = IconFactory::create(name, class_);
+	//panel_.apply();
+	//o->request(panel_.request());
+	//return o;
+	return 0;
+}
+
+
+void FamilyEditor::apply()
+{	
+  	if(!current_) return;
+  
+  	Request r=current_->requestForVerb(class_.name());
+	
+	map<string,string> keyVals;
+	keyValues(keyVals);
+	for(map<string,string>::const_iterator it=keyVals.begin(); it != keyVals.end(); it++)
+	{
+		r(it->first.c_str())=it->second.c_str();
+	}	
+	
+	int i=page_->currentIndex();
+	if(i >= 0 &&  i < static_cast<int>(panels_.size()))
+	{
+	  	panels_.at(i)->apply();
+		r= r + panels_.at(i)->request();
+		r.print();
+	}
+	
+	current_->request(r);	
+}
+
+void FamilyEditor::edit()
+{  
+	if(!current_)
+	  	return;
+ 
+	objects_.clear();
+  	
+	for(unsigned int i=0; i < panels_.size(); i++)
+	{  	
+		const IconClass& kind=panels_.at(i)->iconClass();
+			
+		//Create icon object
+		Request panelReq=current_->requestForVerb(kind.name());
+		
+		if(!panelReq)
+			panelReq=Request(kind.name());
+		
+		panelReq.print();
+		
+		IconObjectH obj=IconFactory::createTemporary(current_,panelReq,&kind);
+		objects_.push_back(obj);		
+	}	
+		
+	MvQEditor::edit();
+	
+	setStartPage();
+}
+
+void FamilyEditor::reset()
+{
+	for(unsigned int i=0; i < panels_.size(); i++)
+	{ 
+		panels_.at(i)->reset(objects_.at(i));
+	}	
+}
+
+void FamilyEditor::close()
+{
+	for(unsigned int i=0; i < panels_.size(); i++)
+	{ 
+		panels_.at(i)->close();
+	}	
+	objects_.clear();	
+}
+
+//Request FamilyEditor::currentRequest(long custom_expand)
+//{
+	//panel_.apply();
+	//return custom_expand ? panel_.request(custom_expand) : panel_.request();
+//}
+
+void FamilyEditor::replace(IconObjectH /*o*/)
+{
+   	//panel_.replace(o);
+}
+
+void FamilyEditor::merge(IconObjectH /*o*/)
+{
+	//panel_.merge(o);
+}
+
+
+void  FamilyEditor::slotChangePage(int)
+{
+     	//Works only for two keywords (this is the maximum currently)!!!!
+    
+     	int index=0;
+     	if(combos_.count() ==1)
+     	{
+   		index=combos_.at(0)->currentIndex();
+	}
+	else if(combos_.count() ==2)
+	{
+		index=combos_.at(0)->currentIndex();
+		index*=combos_.at(1)->count();
+		index+=combos_.at(1)->currentIndex();		
+	}
+     
+     	page_->setCurrentIndex(index);
+
+}
+ 
+void  FamilyEditor::keyValues(map<string,string>& keyValues) 
+{
+	const vector<string>& p = scanner_.params();
+	for(unsigned int i=0; i < p.size(); i++) 
+	{
+		string keyVal=p[i];	
+		int index=combos_.at(i)->currentIndex();
+		if(index > -1)
+		{
+			keyValues[keyVal]=combos_.at(i)->itemData(index,Qt::UserRole).toString().toStdString();
+		}
+	}	
+}			
+ 
+ 
+void FamilyEditor::slotIconDropped(IconObject* obj)
+{	
+	merge(obj);	 
+}  
+
+
+static EditorMaker<FamilyEditor> maker1("FamilyEditor");
diff --git a/src/Desktop/FamilyEditor.h b/src/Desktop/FamilyEditor.h
new file mode 100644
index 0000000..f16bf20
--- /dev/null
+++ b/src/Desktop/FamilyEditor.h
@@ -0,0 +1,79 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 FamilyEditor_H
+#define FamilyEditor_H
+
+#include "MvQEditor.h"
+
+#include "RequestPanel.h"
+#include "Language.h"
+
+class QComboBox;
+class QStackedWidget;
+class QVBoxLayout;
+
+class IconObject;
+class FamilyScanner;
+class RequestPanel;
+class FamilyEditorObserver;
+
+class FamilyEditor : public MvQEditor 
+{
+Q_OBJECT
+public:
+	FamilyEditor(const IconClass&,const string&);
+	virtual ~FamilyEditor();
+
+	//Request currentRequest(long custom_expand=0);
+
+	virtual void replace(IconObjectH);
+	virtual void merge(IconObjectH);
+	
+public slots:
+    	void slotChangePage(int);
+  	void slotIconDropped(IconObject*);
+	
+
+protected: 	
+	void readSettings(QSettings&) {};
+	void writeSettings(QSettings&) {};
+  
+private:
+	FamilyEditor(const FamilyEditor&);
+	FamilyEditor& operator=(const FamilyEditor&);
+
+	void setStartPage();
+	void makePages(int,Request& r);
+	void keyValues(map<string,string>&); 
+	
+	virtual void apply();
+	virtual void reset();
+	virtual void close();
+	virtual void edit();
+
+	virtual IconObject* copy(const string&);
+	
+	FamilyScanner&  scanner_;
+	QList<QComboBox*>    combos_;
+	QGridLayout *comboLayout_;
+	
+        QStackedWidget* page_;
+	vector<RequestPanel*> panels_;
+	vector<IconObjectH> objects_;
+};
+
+inline void destroy(FamilyEditor**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(FamilyEditor);
+//#endif
+
+#endif
diff --git a/src/Desktop/FamilyObject.cc b/src/Desktop/FamilyObject.cc
new file mode 100644
index 0000000..f743fb5
--- /dev/null
+++ b/src/Desktop/FamilyObject.cc
@@ -0,0 +1,102 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "FamilyObject.h"
+
+#include "Request.h"
+#include "Language.h"
+#include "IconClass.h"
+#include "IconFactory.h"
+#include "FamilyScanner.h"
+
+FamilyObject::FamilyObject(Folder* parent,const IconClass& kind,
+	const string& name,IconInfo* info):
+	StandardObject(parent,kind,name,info) ,
+	scanner_(FamilyScanner::find(kind))
+{
+}
+
+FamilyObject::~FamilyObject()
+{
+}
+
+
+Request FamilyObject::request() const
+{
+	//return language().expand(selected());  
+        //return first();
+	return language().expand(second());
+	
+}
+
+void FamilyObject::request(const Request& actRec)
+{
+	Request r=actRec;  
+	Request f;
+	
+	//If actRec only contains the panel request
+	if(r.getVerb() != class_.name())
+	{  
+		f=first();	
+	}
+	else
+	{  
+  		f=r.justOneRequest();			
+		r.advance();		
+	}
+	
+	f = f + language().expand(r,EXPAND_NO_DEFAULT|EXPAND_2ND_NAME);
+	
+	cout << "family req" << endl;
+	f.print();
+	
+	f.save(path());
+}
+
+Request FamilyObject::first() const
+{
+	 Request r(path());               
+	 return class_.language().expand(r.justOneRequest());    
+}
+
+Request FamilyObject::second() const
+{
+	 Request r(path());               
+	 if(scanner_.validate(r))
+	 	r.save(path());
+	 r.advance();
+	 return r;
+}
+
+Request FamilyObject::requestForVerb(const string& verb) const
+{
+  	Request f=first();
+ 	if(f.getVerb() == verb)
+	  	return f;
+	else
+	{
+	  	f=second();
+		if(f.getVerb() == verb)
+		  	return f;
+	}
+	
+  	return Request();
+}	
+
+const IconClass& FamilyObject::editorClass() const
+{
+	return class_;
+}
+
+const IconClass& FamilyObject::iconClass() const
+{
+	return IconClass::find(second().getVerb()); 
+}
+
+static IconMaker<FamilyObject> maker("Family");
diff --git a/src/Desktop/FamilyObject.h b/src/Desktop/FamilyObject.h
new file mode 100644
index 0000000..6474249
--- /dev/null
+++ b/src/Desktop/FamilyObject.h
@@ -0,0 +1,51 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 FamilyObject_H
+#define FamilyObject_H
+
+#include "StandardObject.h"
+
+#include <map>
+#include <string>
+using std::map;
+using std::string;
+
+class FamilyScanner;
+
+class FamilyObject : public StandardObject 
+{
+public:
+	FamilyObject(Folder* parent,const IconClass& kind, const string& name,
+		IconInfo* info);
+	virtual ~FamilyObject(); 
+	
+private:
+	// No copy allowed
+	FamilyObject(const FamilyObject&);
+	FamilyObject& operator=(const FamilyObject&);
+
+	FamilyScanner& scanner_;
+
+	Request first() const;
+	Request second() const;
+	string  keyword() const;
+	
+	virtual Request request() const;
+	virtual void request(const Request&);
+	virtual Request requestForVerb(const string&) const;
+
+	virtual const IconClass& editorClass() const;
+	virtual const IconClass& iconClass() const;
+	
+};
+
+inline void destroy(FamilyObject**) {}
+
+#endif
diff --git a/src/Desktop/FamilyScanner.cc b/src/Desktop/FamilyScanner.cc
new file mode 100644
index 0000000..1340725
--- /dev/null
+++ b/src/Desktop/FamilyScanner.cc
@@ -0,0 +1,128 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "FamilyScanner.h"
+
+#include "IconClass.h"
+
+static map<string,FamilyScanner*> cache;
+
+
+FamilyScanner& FamilyScanner::find(const IconClass& kind)
+{
+     map<string,FamilyScanner*>::iterator j = cache.find(kind.name());
+     if(j != cache.end())
+        return *(*j).second;
+
+     return *(new FamilyScanner(kind));
+}
+ 
+
+FamilyScanner::FamilyScanner(const IconClass& kind):
+	class_(kind)
+{	
+	//cout << "FamilyScanner " << kind.name() << endl;
+
+	kind.language().scan(*this);
+	keyword_ = kind.language().getInfo();
+	if(keyword_ == "") keyword_ = "_SECOND_GROUP";
+
+	cache[kind.name()] = this;
+}
+
+FamilyScanner::~FamilyScanner()
+{
+}
+
+void FamilyScanner::next(const Parameter& param)
+{
+	params_.push_back(param.name());
+	param.scan(*this);
+}
+
+const vector<string>& FamilyScanner::params() const
+{
+	//cout << "FamilyScanner parans " << params_.size() << endl;
+	return params_; 
+}
+
+const vector<string>& FamilyScanner::values(const string& s) // const
+{
+	return values_[s]; 
+}
+
+const vector<string>& FamilyScanner::beau(const string& s) // const
+{
+	return beau_[s]; 
+}
+
+void FamilyScanner::next(const Parameter& p, const char* first,const char* second)
+{
+	const char* type = (second) ? second : first;
+	values_[p.name()].push_back(type);
+	beau_[p.name()].push_back(p.beautifiedName(first));
+	names_[type]    = type;
+}
+
+
+const string& FamilyScanner::keyword() const
+{
+	return keyword_;
+}
+
+bool FamilyScanner::validate(Request& r) const
+{
+	Request s = r;
+	s.advance();
+	if(!s) {
+
+		if(!r) r = Request(class_.name());
+
+		Request f = class_.language().expand(r.justOneRequest(), 
+			EXPAND_2ND_NAME);
+
+		const char* p = f(keyword_.c_str());
+		r = f + Request( p );
+		return true;
+
+
+	}
+#if 0
+	cout << "FamilyScanner::validate -> " << endl;
+	r.print();
+
+	Request f = class_.language().expand(s.justOneRequest(), EXPAND_2ND_NAME);
+	f.print();
+
+	if(!f || !f.getVerb() || class_.name() != f.getVerb())
+	{
+		r = Request(class_.name().c_str());
+		validate(r);
+		return true;
+	}
+
+	const char* v = s.getVerb();
+	const char* p = f(keyword_.c_str());
+
+	if(!v || /*names_.find(v) == names_.end() ||*/ v != p)
+	{
+		cout << "FamilyScanner::validate -> " << endl;
+		r.print();
+		r = f + Request( p );
+		r.print();
+		cout << "<- FamilyScanner::validate " << endl;
+		return true;
+	}
+
+#endif
+	return false;
+	
+}
+
+
diff --git a/src/Desktop/FamilyScanner.h b/src/Desktop/FamilyScanner.h
new file mode 100644
index 0000000..03d64b3
--- /dev/null
+++ b/src/Desktop/FamilyScanner.h
@@ -0,0 +1,56 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 FamilyScanner_H
+#define FamilyScanner_H
+
+#include "Language.h"
+#include "Parameter.h"
+
+class FamilyScanner : public ParameterScanner, public LanguageScanner 
+{
+public:
+	const string& keyword() const;
+	bool validate(Request&) const;
+	const vector<string>& params() const;
+	const vector<string>& values(const string&) ;//const;
+	const vector<string>& beau(const string&) ;//const;
+
+	static FamilyScanner& find(const IconClass&);
+
+protected:
+	FamilyScanner(const IconClass&);
+	virtual ~FamilyScanner();
+
+private:
+	FamilyScanner(const FamilyScanner&);
+	FamilyScanner& operator=(const FamilyScanner&);
+
+	string                      keyword_;
+	map<string,string>	    names_;
+	const IconClass&            class_;
+	vector<string>              params_;
+	map<string,vector<string> > values_;
+	map<string,vector<string> > beau_;
+
+	// From LanguageScanner
+	virtual void next(const Parameter&);
+
+	// From ParameterScanner
+	virtual void next(const Parameter&, const char*,const char*);
+};
+
+inline void destroy(FamilyScanner**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(FamilyScanner);
+//#endif
+
+#endif
diff --git a/src/Desktop/FileObject.cc b/src/Desktop/FileObject.cc
new file mode 100644
index 0000000..d16b746
--- /dev/null
+++ b/src/Desktop/FileObject.cc
@@ -0,0 +1,55 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "FileObject.h"
+#include "IconFactory.h"
+#include "Request.h"
+
+FileObject::FileObject(Folder* parent,const IconClass& kind,
+	const string& name,IconInfo* info):
+	IconObject(parent,kind,name,info)
+{
+}
+
+FileObject::~FileObject()
+{
+}
+
+void FileObject::doubleClick()
+{
+	edit();
+}
+
+set<string> FileObject::can()
+{
+	return IconObject::can();
+}
+
+void FileObject::createFiles()
+{
+	IconObject::createFiles();
+	Path p = path();
+	if(!link_ && !p.exists()) 
+		p.touch();
+}
+
+Request FileObject::request() const
+{
+	const char* n = className().c_str();
+	Request r(n);
+	r("PATH") = path().str().c_str();
+	return r;
+}
+
+void FileObject::request(const Request& r)
+{
+	//IconObject::request(r);
+}
+
+static IconMaker<FileObject> maker1("File");
diff --git a/src/Desktop/FileObject.h b/src/Desktop/FileObject.h
new file mode 100644
index 0000000..483f1e3
--- /dev/null
+++ b/src/Desktop/FileObject.h
@@ -0,0 +1,46 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 FileObject_H
+#define FileObject_H
+
+#include "IconObject.h"
+
+#include <string>
+using std::string;
+
+
+class FileObject : public IconObject {
+public:
+	FileObject(Folder* parent,
+		const IconClass& kind, const string& name,
+		IconInfo* info);
+
+	virtual ~FileObject(); 
+
+private:
+	FileObject(const FileObject&);
+	FileObject& operator=(const FileObject&);
+
+	virtual void doubleClick();
+	virtual set<string> can();
+
+	virtual void createFiles();
+	virtual Request request() const;
+	virtual void request(const Request&);
+};
+
+inline void destroy(FileObject**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(FileObject);
+//#endif
+
+#endif
diff --git a/src/Desktop/Folder.cc b/src/Desktop/Folder.cc
new file mode 100644
index 0000000..14a6f50
--- /dev/null
+++ b/src/Desktop/Folder.cc
@@ -0,0 +1,810 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Log.h"
+
+#include "Folder.h"
+
+#include "IconClass.h"
+#include "IconFactory.h"
+#include "RootFolder.h"
+#include "Items.h"
+#include "FolderInfo.h"
+#include "FolderObserver.h"
+#include "Request.h"
+///#include "FolderWindow.h"
+
+vector<Folder*> Folder::folders_;
+const unsigned int Folder::maxNokidsNum_=100;
+
+//Path stores the full path aka fullName
+//Name stores the directory name
+
+Folder::Folder(Folder *p,const IconClass& kind,
+	const string& name,IconInfo* info):
+	IconObject(p,kind,name,info),
+	ready_(false), 
+	scanIsOn_(false)
+{ 	
+	if(p)
+	{
+		folderInfo_ = new FolderInfo(path().add(".__metview_icon_").str());
+	}	
+}
+
+Folder::~Folder()
+{
+  	saveFolderInfo();
+}
+	
+int Folder::numOfIconKids()
+{
+	int cnt=0;
+	for(KidMap::iterator j = kids_.begin(); j != kids_.end(); ++j)
+		if(!j->second->isFolder())
+			cnt++;		
+	return cnt;	
+}
+  
+	
+void Folder::saveFolderInfo()
+{
+	if(!locked_)
+		folderInfo_->write();  
+}  
+	
+void Folder::addObserver(FolderObserver* o)
+{
+	if(o)
+	{
+		if(!observers_.insert(o).second)
+			return;
+		//if(!ready_)
+		//	scan();
+		//else 
+		//	for(KidMap::iterator j = kids_.begin(); j != kids_.end(); ++j)
+		//		o->arrived((*j).second);
+	}
+}
+
+void Folder::removeObserver(FolderObserver* o)
+{
+	observers_.erase(o);
+}
+
+IconObject* Folder::create(const string& name)
+{
+	IconObject *obj = find(name);
+	if(obj == 0)
+	{
+	  	if(noKids_.find(name) == noKids_.end())
+		{		
+		  	obj=IconFactory::create(this,name);
+			if(obj==0)
+			{
+			  	noKids_.insert(name);
+			}
+		}	
+	}
+	
+	return obj;	  
+}
+
+IconObject* Folder::find(const vector<string>& names)
+{
+	//cout << "Folder::find " << names.size() << endl;
+	//for(int i = 0; i < names.size() ; i++)
+		//cout << '|' << names[i] << '|';
+	//cout << endl;
+
+	if(names.size() == 0)
+		return this;
+
+	if(names.size() == 1)
+		return find(names[0]);
+
+	vector<string> rest(names.begin()+1,names.end());
+	IconObject *s = find(names[0]);
+
+	return s?s->find(rest):0;
+}
+
+IconObject* Folder::find(const string& name)
+{
+	if(!ready_)
+		scan();
+
+	KidMap::iterator j = kids_.find(name);
+
+	if(j == kids_.end())
+		return 0;
+	else
+		return (*j).second;
+
+}
+
+#if 0
+/*void Folder::edit()
+{
+	open();
+
+
+	// if the user wants to keep just one folder view open, then
+	// close the parent one
+
+	MvRequest myPref = MvApplication::getPreferences();
+	const char* openEachFolder = myPref( "OPEN_EACH_FOLDER" );
+
+	if ( (openEachFolder != NULL) && (strcmp( openEachFolder, "In Same Window") == 0))
+	{
+		if (parent_) parent_->close();
+	}
+}*/
+
+#endif
+
+/*string Folder::fullName() const
+{
+  	return path_.str(); 
+}  
+
+Path Folder::path() const
+{
+	return path_;
+}*/
+
+
+void Folder::scan()
+{
+	ready_ = true;
+	scanIsOn_=true;
+	
+	//cout << "Scan for: " << fullName() << endl;
+	
+	set<string> files = path().files();
+	
+	//Create and iconObject for each file/dir with the exception of the
+	//dirs ending with a # character.
+	for(set<string>::iterator i = files.begin(); i != files.end() ; ++i)
+	{
+		//if((*i).rfind("#") != (*i).size()-1)
+		//{  
+		  	create(*i);
+		//}
+	}
+	
+	//Remove non-existing icons
+	
+	vector<IconObjectH> erase;
+
+	for(KidMap::iterator j = kids_.begin(); j != kids_.end(); ++j)
+		if(files.find((*j).first) == files.end())
+			erase.push_back((*j).second);
+
+	for(vector<IconObjectH>::iterator k = erase.begin(); k != erase.end(); ++k)
+		release(*k);
+	
+	saveFolderInfo();
+	scanIsOn_=false;
+	
+	//Clear nokids if they overgrew
+	if(noKids_.size() > maxNokidsNum_)
+	  	noKids_.clear();
+}
+
+
+void Folder::scanForNewFile(const string& name,int x, int y)
+{
+	ready_ = true;
+	scanIsOn_=true;
+	
+	IconObject *obj = find(name);
+	if(obj == 0)
+	{
+		IconFactory::create(this,name,x,y);
+		saveFolderInfo();
+	}
+
+	saveFolderInfo();
+	scanIsOn_=false;
+}
+
+
+#if 0
+void Folder::visit(FolderVisitor& visitor) 
+{	    
+	if(!ready_)
+		scan();
+
+ 	 for(KidMap::iterator j = kids_.begin(); j != kids_.end(); ++j)
+	 	visitor.visit((*j).second);
+}
+
+//MODIF
+Folder* Folder::top()
+{
+  	return 0;
+	//static RootFolder root;
+	//return &root;
+}
+#endif
+
+#if 0  
+Folder* Folder::folder(const string& name,bool create)
+{
+
+  
+  
+ return 0;
+
+ 	Folder* f;
+
+	switch(name[0])
+	{
+		case 0:
+			return top();
+			//break;
+
+		case '/':
+			f = dynamic_cast<Folder*>(IconObject::search(name));
+			if(f == 0 && create)
+				f = dynamic_cast<Folder*>(IconFactory::create(name,IconClass::find("FOLDER")));
+			return f;
+			//break;
+
+		default:
+		   return dynamic_cast<Folder*>(Items::find(name));
+		   //break;
+	}
+}
+
+Folder* Folder::folder(const string& name1,const string& name2,bool create)
+{
+	return 0;
+	
+	Folder* f = folder(name1,create);
+	return f?folder(f->fullName()+"/"+name2,create):0;
+}
+
+Folder* Folder::folder(const string& name1,const string& name2,
+	const string& name3,bool create)
+{
+	return 0;
+	
+	Folder* f = folder(name1,name2);
+	return f?folder(f->fullName()+"/"+name3):0;
+}
+
+#endif	
+
+bool Folder::adopt(IconObject* o)
+{
+	if(find(o->name()) != 0)
+	{
+		// Log::error(o) << "Icon already exists" << endl;
+		return false;
+	}
+
+	Folder* f = dynamic_cast<Folder*>(o);
+	if(f && f->ancestor(this))
+	{
+		//Log::error(o) << "Oops loops" << endl;
+		cout << "Oops loops" << endl;
+		return false;
+	}
+
+	f = o->parent();
+	if(!f && o->iconClass().type() != "Folder")
+	{
+		cout << "Cannot adopt object without a parent! " << endl;
+		return false;
+	}
+
+	kids_[o->name()] = o;
+	folderInfo_->add(o->name(),&o->info());
+
+	if(f != this)
+	{
+		o->reparent(this);
+		if(f) f->release(o);
+	}
+
+	for(set<FolderObserver*>::iterator j = observers_.begin(); j != observers_.end(); ++j)
+		(*j)->arrived(o);
+
+	if(!scanIsOn_)
+		saveFolderInfo();
+	
+	//If we have not scanned the folder yet we nned to do it now!
+	if(!ready_)
+	{
+		scan();
+	}	
+	
+	return true;
+}
+
+bool Folder::release(IconObject* o)
+{
+	if(find(o->name()) == 0)
+	{
+		// Error("icon does not exist exists");
+		return false;
+	}
+
+	kids_.erase(o->name());
+	folderInfo_->remove(o->name());
+
+	for(set<FolderObserver*>::iterator j = observers_.begin(); j != observers_.end(); ++j)
+		(*j)->gone(o);
+
+	saveFolderInfo();
+	
+	return true;
+}
+
+#if 0
+void Folder::createFiles()
+{
+//MODIF
+	return;
+	IconObject::createFiles();
+	path().mkdir();
+}
+
+set<string> Folder::can()
+{
+	set<string> c = IconObject::can();
+	c.erase("examine");
+	return c;
+}
+#endif
+
+void Folder::createFiles()
+{
+	IconObject::createFiles();
+	if(!path().exists())
+		path().mkdir();
+}
+
+
+string Folder::uniqueName(const string& name)
+{
+	char buf[1024];
+	int i = 0;
+
+	if(kids_.find(name) == kids_.end())
+		return name;
+
+	do
+	{
+		sprintf(buf,"%s %d",name.c_str(),++i);
+	} while(kids_.find(buf) != kids_.end());
+		
+	return buf;
+}
+
+
+string Folder::duplicateName(const string& name)
+{
+	char buf[1024];
+	int i = 0;
+	int d = 0;
+
+	if(name.find("Copy ") == 0)
+	{
+		int n = name.find(" of ");
+		if(n != string::npos)
+		{
+			string s = name.substr(5,n-5);
+			if(is_number(s.c_str()))
+				d = n+4;
+		}
+	}
+
+	do
+	{
+		sprintf(buf,"Copy %d of %s",++i,name.c_str() + d);
+	} while(kids_.find(buf) != kids_.end());
+		
+	return buf;
+}
+
+
+void Folder::position(IconObject* o,int x,int y)
+{
+	for(set<FolderObserver*>::iterator j = observers_.begin(); j != observers_.end(); ++j)
+		(*j)->position(o,x,y);
+
+	if(observers_.size() == 0)
+		o->position(x,y);
+}
+
+
+void Folder::renamed(IconObject* o,const string& old_name,const string& new_name)
+{
+	IconObjectH save = o;
+	kids_.erase(old_name);
+	kids_[new_name] = o;
+
+	folderInfo_->rename(old_name,new_name);
+
+	for(set<FolderObserver*>::iterator j = observers_.begin(); j != observers_.end(); ++j)
+		(*j)->renamed(o,old_name);
+	
+	saveFolderInfo();
+}
+
+void Folder::tellObservers(TellObserverProc proc,IconObject* o)
+{
+	IconObjectH save = o;
+	for(set<FolderObserver*>::iterator j = observers_.begin(); j != observers_.end(); ++j)
+	{
+		FolderObserver* f = *j;
+		(f->*proc)(o);
+	}
+
+}
+
+#if 0
+
+void Folder::open()
+{
+//MODIF
+return;
+	//FolderWindow::open(this);
+}
+
+void Folder::close()
+{
+//MODIF
+return;
+	//FolderWindow::close(this);
+}
+
+
+#endif
+
+bool Folder::ancestor(IconObject* o)
+{
+	if(o == this)
+		return true;
+
+	for(KidMap::iterator j = kids_.begin(); j != kids_.end(); ++j)
+	{
+		IconObject *p = (*j).second;
+		if(o == p)
+			return true;
+
+		Folder* f = dynamic_cast<Folder*>(p);
+		if(f && f->ancestor(o))
+			return true;
+	}
+
+	return false;
+}
+
+bool Folder::descendant(Folder *f)
+{
+  	if(!f) return false;
+  	if(f == this) return true;	
+	return (parent())?parent()->descendant(f):false;
+}	
+
+#if 0
+
+class FolderCopier : public FolderVisitor {
+	FolderH target_;
+	virtual void visit(IconObject* o) { 
+		if(!target_->find(o->name()))
+			o->clone(target_, false); 
+	}
+public:
+	FolderCopier(Folder* f) : target_(f) {}
+};
+
+void Folder::copyContent(Folder* from)
+{
+//MODIF
+return;
+	
+	FolderCopier cp(this);
+	if(from) from->visit(cp);
+}
+
+
+class FolderCompare : public FolderVisitor {
+	FolderH other_;
+	virtual void visit(IconObject* o);
+	bool same_;
+public:
+	FolderCompare(Folder* f) : other_(f),same_(true) {}
+	bool same() const { return same_; }
+};
+
+void FolderCompare::visit(IconObject* o)
+{
+	if(!same_) return;
+
+	IconObject* x = other_->find(o->name());
+	if(x == 0) 
+		same_ = false;
+}
+
+bool Folder::sameAs(IconObject* other)
+{
+	Folder* f = dynamic_cast<Folder*>(other);
+	if(f == 0) return false;
+
+	FolderCompare cmp1(this);
+	f->visit(cmp1);
+
+	FolderCompare cmp2(f);
+	this->visit(cmp2);
+
+	return cmp1.same() && cmp2.same();
+
+}
+
+void Folder::notifyChanged()
+{
+	// When a folder changes, (its name... )
+	// mark all icons changed as well
+
+	IconObject::notifyChanged();
+
+	for(KidMap::iterator j = kids_.begin(); j != kids_.end(); ++j)
+	{
+		IconObject *p = (*j).second;
+		p->notifyChanged();
+	}
+}
+
+void Folder::destroy()
+{
+ //MODIF
+ return;
+ 
+ if( ! isLink() )     //-- do not delete contents if link!
+    {
+	//-- IBM/AIX/xlC+STL loops with this construct:
+	//for(KidMap::iterator j = kids_.begin(); j != kids_.end(); ++j)
+	//{
+	//	IconObject *p = (*j).second;
+	//	p->destroy();
+	//}
+
+	//-- this one ok for xlC+STL:
+	KidMap::iterator j = kids_.begin();
+	while( j != kids_.end() )
+	{
+		IconObject *p = (*j).second;
+		++j;
+		p->destroy();
+	}
+    }
+
+  IconObject::destroy();
+}
+
+void Folder::empty()
+{
+//MODIF
+return;
+
+	scan();
+	KidMap kids = kids_;
+	for(KidMap::iterator j = kids.begin(); j != kids.end(); ++j)
+	{
+		IconObject *p = (*j).second;
+		p->toWastebasket();
+	}
+	scan();
+
+}
+
+void Folder::drop(IconObject* o)
+{
+//MODIF
+return;
+
+if(!locked())
+	{
+		o->position(0,0);
+		adopt(o);
+		parent()->tellObservers(&FolderObserver::highlight,this);
+	}
+}
+
+#endif
+
+
+
+
+void Folder::destroy()
+{	
+  	if(!isLink() )     //-- do not delete contents if link!
+    	{
+		//-- IBM/AIX/xlC+STL loops with this construct:
+		//for(KidMap::iterator j = kids_.begin(); j != kids_.end(); ++j)
+		//{
+		//	IconObject *p = (*j).second;
+		//	p->destroy();
+		//}
+
+		//-- this one ok for xlC+STL:
+		KidMap::iterator j = kids_.begin();
+		while( j != kids_.end() )
+		{
+			IconObject *p = (*j).second;
+			++j;
+			p->destroy();
+		}
+    	}
+
+  	IconObject::destroy();
+}
+
+void Folder::iconClasses(map<string,IconObjectH>& res)
+{
+	KidMap::iterator j = kids_.begin();
+	while( j != kids_.end() )
+	{
+		res[(*j).second->className()] = (*j).second;
+		++j;
+	}
+} 
+
+set<string> Folder::can()
+{
+	set<string> c = IconObject::can();
+	c.erase("edit");
+	c.insert("open");
+	c.insert("openInTab");
+	c.insert("openInWin");
+	c.insert("bookmark");
+	return c;
+}
+
+Request  Folder::request() const 
+{
+	return Request("");
+}
+
+void  Folder::request(const Request&) 
+{
+}
+
+void Folder::setIconSizeLock(int size)
+{
+	folderInfo_->setIconSizeLock(size);
+}  
+		
+int Folder::iconSizeLock()
+{
+	return folderInfo_->iconSizeLock();
+}	 
+
+//========================================================
+//
+//  Static methods
+//
+//========================================================
+
+Folder* Folder::top()
+{ 	
+	static RootFolder root;
+	return &root;
+}
+
+
+Folder* Folder::folder(const string& name,bool create)
+{
+ 	Folder* f;
+
+	if(name == "/")
+	  	return top();
+	
+	switch(name[0])
+	{
+		case 0:
+			return 0;
+			//return top();
+			//break;
+
+		case '/':
+			f = dynamic_cast<Folder*>(IconObject::search(name));
+			if(f == 0 && create)
+				f = dynamic_cast<Folder*>(IconFactory::create(name,IconClass::find("FOLDER")));
+			return f;
+			//break;
+
+		default:
+		   return dynamic_cast<Folder*>(Items::find(name));
+		   //break;
+	} 
+}  
+/*  
+Folder* Folder::folder(const string&path,bool create) 
+{
+        if(path.empty()) return 0;
+	
+	if(path.find("/") != string::npos)
+	{
+		for(vector<Folder*>::iterator it=Folder::folders_.begin(); it != Folder::folders_.end(); it++)
+		{
+	  		if((*it)->path().str() == path)
+			{
+		  		return *it;
+			} 
+		}
+		
+		if(create)
+		{
+			IconObject* obj = IconFactory::create(0,path,IconClass::find("FOLDER"));	
+			if(obj)
+			{  
+				return static_cast<Folder*>(obj);
+			}
+		}	
+	}	
+	else
+	{  
+		return static_cast<Folder*>(Items::find(path));
+	}
+	
+	return 0;
+}*/
+
+Folder* Folder::folder(const string& name1,const string& name2,bool create)
+{
+	Folder* f = folder(name1,create);
+	return f?folder(f->fullName()+"/"+name2,create):0;
+}
+
+Folder* Folder::folder(const string& name1,const string& name2,
+	const string& name3,bool /*create*/)
+{
+	Folder* f = folder(name1,name2);
+	return f?folder(f->fullName()+"/"+name3):0;
+}
+
+IconObject* Folder::icon(const string& fullName)
+{
+  	/*Path p(fullName);
+	Folder *f=Folder::folder(p.directory().str());
+	
+	IconObject *obj=0;
+	
+	if(f)
+	{
+	  	obj=f->find(p.name());
+		if(!obj)
+		{
+			f->scan();
+			obj=f->find(p.name());
+		}	
+	}
+	
+	else
+	{
+	  	obj=IconFactory::create(p.directory().str(),IconClass::find("FOLDER"));
+		if(obj)
+		{
+		  	f=static_cast<Folder*>(obj);
+		  	obj=f->find(p.name());
+		}	
+	}
+	
+	return obj;*/
+	return 0;
+}
+
+static IconMaker<Folder> maker1("FOLDER");
+static IconMaker<Folder> maker2("Folder");
diff --git a/src/Desktop/Folder.h b/src/Desktop/Folder.h
new file mode 100644
index 0000000..6177d4b
--- /dev/null
+++ b/src/Desktop/Folder.h
@@ -0,0 +1,121 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 Folder_H
+#define Folder_H
+
+#include "IconObject.h"
+
+class FolderInfo;
+class FolderObserver;
+class Request;
+
+class FolderVisitor {
+public:
+	virtual void visit(IconObject*) = 0;
+};
+
+class Folder : public IconObject 
+{
+public:
+  	Folder(Folder*,const IconClass& kind, const string& name,
+		IconInfo* info);
+		
+	virtual ~Folder(); 
+	
+	virtual IconObject* find(const vector<string>&);
+	virtual IconObject* find(const string&);
+	virtual IconObject* create(const string&);
+
+	virtual bool adopt(IconObject*);
+	virtual bool release(IconObject*);
+
+	//virtual void visit(FolderVisitor&);
+
+	void addObserver(FolderObserver*);
+	void removeObserver(FolderObserver*);
+
+	string uniqueName(const string&);
+	string duplicateName(const string&);
+	void   position(IconObject*,int x,int y);
+	void   renamed(IconObject*,const string&,const string&); 
+
+	//virtual void empty();
+	virtual void destroy();
+	void scan();
+	void scanForNewFile(const string&,int x=0, int y=0);
+
+	//void copyContent(Folder*);
+	//virtual void drop(IconObject*);
+
+	typedef void (FolderObserver::*TellObserverProc)(IconObject*);
+	void tellObservers(TellObserverProc,IconObject*);
+
+	//void open();
+	//void close();
+
+	virtual bool ancestor(IconObject*);
+	virtual bool descendant(Folder *);
+	//virtual bool sameAs(IconObject*);
+	//virtual void notifyChanged();
+
+	int numOfIconKids();
+	const map<string,IconObjectH>& kids() const {return kids_;}
+	void iconClasses( map<string,IconObjectH>&);
+	virtual bool isFolder() {return true;}
+	
+	virtual Request request() const;
+	virtual void request(const Request&);
+		
+	static Folder* top();
+	static Folder* folder(const string&,bool create = true);
+	static Folder* folder(const string&,const string&,bool create = true);
+	static Folder* folder(const string&,const string&,const string&,bool create = true);	
+	static IconObject* icon(const string&);
+	
+	int iconSizeLock();
+	void setIconSizeLock(int size=-1);
+	FolderInfo* folderInfo() {return folderInfo_;}
+	
+protected:
+  	void saveFolderInfo();
+        virtual set<string> can();
+  
+	typedef map<string,IconObjectH> KidMap;
+	KidMap kids_;	
+	std::set<string> noKids_;
+	
+	static const unsigned int maxNokidsNum_;
+	bool  ready_;
+	bool scanIsOn_;
+	FolderInfo* folderInfo_;
+	
+	std::set<FolderObserver*> observers_;
+	
+	static vector<Folder*> folders_;
+	
+	virtual void createFiles();
+
+private:
+	// No copy allowed
+	Folder(const Folder&);
+	Folder& operator=(const Folder&);
+
+	// -- Overridden methods
+
+	// From IconObject
+	//virtual void edit();
+};
+
+class FolderH : public Handle<Folder>{
+public:
+	FolderH(Folder* f) : Handle<Folder>(f) {}
+};
+
+#endif
diff --git a/src/Desktop/FolderDatabase.cc b/src/Desktop/FolderDatabase.cc
new file mode 100644
index 0000000..72f0115
--- /dev/null
+++ b/src/Desktop/FolderDatabase.cc
@@ -0,0 +1,207 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "FolderDatabase.h"
+
+#include <iostream>
+#include <fstream>
+
+#include "Folder.h"
+#include "Path.h"
+#include "Tokenizer.h"
+
+vector<FolderDatabase*> FolderDatabase::db_;
+
+//===========================================
+//
+// Folderdatabase
+//
+//===========================================
+
+FolderDatabase::FolderDatabase()
+{
+	//Home	
+	char *mvhome=getenv("METVIEW_USER_DIRECTORY");
+ 	if(!mvhome)
+	{  
+		return;
+	 	cout << "error in FolderDatabase" << endl;
+		exit(1);		
+	}	
+		
+	//homePath_=Folder::path(Folder::HomeFolder);
+	homePath_=string(mvhome);
+	
+  	rootPath_=homePath_ + "/System/.icon_database";
+			
+  	db_.push_back(this);
+}
+
+void FolderDatabase::read()
+{
+	folders_.clear();;  
+		
+	ifstream in(dbFile_.c_str());	
+	if(!in.good())
+	  	return;
+	
+	string line;
+	//getline(in,line);
+
+	Tokenizer parse(",");
+	vector<string> n;
+		
+	while(getline(in,line))
+	{
+		parse(line,n);
+		if(n.size() == 2)
+		{
+			folders_[n[0]]=n[1];
+		}
+		n.clear();		
+	}	
+	in.close();	
+}
+
+void FolderDatabase::write()
+{
+	Path dbfPath(dbFile_);
+	Path parent=dbfPath.directory();
+	
+	if(!parent.exists())
+		parent.mkdir();  
+		
+	ofstream out(dbFile_.c_str());	
+	if(!out.good())
+	  	return;
+	
+	for(map<string,string>::iterator it=folders_.begin(); it != folders_.end(); it++)
+	{
+	  	out << it->first << "," << it->second << endl;
+	}
+	
+	out.close();
+}
+
+string FolderDatabase::path(const string& name)
+{
+	for(vector<FolderDatabase*>::iterator it=db_.begin(); it != db_.end(); it++)
+	{
+	  	if((*it)->isOwner(name))
+		{
+		  	string p=(*it)->find(name);
+			if(p.empty())
+			{
+			  	return (*it)->add(name);
+			}
+			return p;			
+		}
+	}
+	
+	return string();
+}
+
+string FolderDatabase::find(const string& name)
+{	
+	map<string,string>::iterator it=folders_.find(name);
+	if(it != folders_.end())
+	{
+	  	return dbPath_ + "/" + it->second;
+	}
+	
+	return string();	
+}	
+		
+
+string FolderDatabase::add(const string& name)
+{	
+	string dbItem=uniquePath();
+	if(!dbItem.empty())
+	{
+		Path p(dbPath_ + "/" + dbItem);
+		p.mkdir();
+		folders_[name]=dbItem;	
+		write();
+		return p.str();
+	}
+	else
+	{
+		cout << " db error" ;
+	}
+	
+	return string();
+}	
+
+
+string FolderDatabase::uniquePath()
+{
+	int id=0;
+	map<string,string>::const_iterator it;
+
+	while(id < 100000)
+	{  
+		stringstream sst;
+		sst << id;
+		string name="folder_" + sst.str();
+		
+		bool found=false;
+		for(map<string,string>::iterator it=folders_.begin(); it != folders_.end(); it++)
+		{
+			if(it->second  == name)
+			{
+			  	found=true;
+				break;
+			}			
+		}
+		
+		if(!found)
+		{
+			return name;
+		}
+		
+		id++;
+	}
+	
+	return string();
+}  
+
+//===========================================
+//
+// Folderdatabase
+//
+//===========================================
+
+
+InternalFolderDatabase::InternalFolderDatabase()
+{  
+	dbPath_=rootPath_ + "/internal";
+	dbFile_=dbPath_ + "/folders";
+	read();
+}
+
+bool InternalFolderDatabase::isOwner(const string& name)
+{
+	return (name.find(homePath_) == 0)?true:false;	  
+}
+
+ExternalFolderDatabase::ExternalFolderDatabase()
+{  
+  	dbPath_=rootPath_ + "/external";
+	dbFile_=dbPath_ + "/folders";
+	read();
+}
+
+bool ExternalFolderDatabase::isOwner(const string& name)
+{
+	return (name.find(homePath_) !=0 )?true:false;	  
+}
+
+
+static InternalFolderDatabase internalFolderDb;
+static ExternalFolderDatabase externalFolderDb;
diff --git a/src/Desktop/FolderDatabase.h b/src/Desktop/FolderDatabase.h
new file mode 100644
index 0000000..0246f55
--- /dev/null
+++ b/src/Desktop/FolderDatabase.h
@@ -0,0 +1,58 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 FolderDatabase_H
+#define FolderDatabase_H
+
+#include <map>
+#include <string>
+#include <vector>
+
+using namespace std;
+
+class FolderDatabase
+{
+public:
+	static string path(const string&);
+	
+protected:	
+	FolderDatabase();
+	
+	void read();
+	void write();
+	string find(const string&);
+	string add(const string&);
+	string uniquePath();
+        virtual bool isOwner(const string&)=0;
+
+	string homePath_;
+	string rootPath_;
+	string dbPath_;
+	string dbFile_;
+	map<string,string> folders_;
+	
+	static vector<FolderDatabase*> db_;
+};	
+
+class InternalFolderDatabase : public FolderDatabase
+{
+public:
+    	InternalFolderDatabase();  
+	bool isOwner(const string&);
+};
+
+class ExternalFolderDatabase : public FolderDatabase
+{
+public:
+    	ExternalFolderDatabase();  
+	bool isOwner(const string&);
+};
+
+
+#endif
diff --git a/src/Desktop/FolderInfo.cc b/src/Desktop/FolderInfo.cc
new file mode 100644
index 0000000..57101e4
--- /dev/null
+++ b/src/Desktop/FolderInfo.cc
@@ -0,0 +1,168 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "FolderInfo.h"
+
+#include <iostream>
+#include <fstream>
+
+#include "IconInfo.h"
+#include "Request.h"
+#include "Tokenizer.h"
+
+FolderInfo::FolderInfo(const string& path) : 
+	path_(path),
+	iconSizeLock_(-1)
+{
+  	read();
+}	
+
+void FolderInfo::read()
+{
+	info_.clear(); //need to delete the objects!!!
+	
+	ifstream in(path_.str().c_str());
+	if(!in.good())
+	  	return;
+		
+	string line;
+	
+	if(getline(in,line))
+	{
+		std::size_t pos=line.find("sizelock: ");
+		
+		if( pos != string::npos)
+		{
+		  	string val=line.substr(pos+10);
+			istringstream iss(val);
+			iss >> iconSizeLock_;
+		}
+	}	
+		
+	
+	//getline(in,line);
+
+	Tokenizer parse(",");
+	vector<string> n;
+	int cnt=0;
+	std::size_t pos;
+	
+	while(getline(in,line))
+	{
+		parse(line,n);
+		if(n.size() >= 4)
+		{
+			int x,y;
+		  	istringstream issX(n[0]);
+ 			issX >> x;
+ 			istringstream issY(n[1]);
+ 			issY >> y;
+ 				
+			pos=line.find("," + n[3]);
+			string name=line.substr(pos+1);
+						
+		  	info_[name]=new IconInfo(n[2],x,y);
+		}
+		else if(cnt == 0 && (pos=line.find("sizelock: ")) != string::npos)
+		{
+		  	string val=line.substr(pos+10);
+			istringstream iss(val);
+			iss >> iconSizeLock_;
+		}  	
+				
+		n.clear();
+		cnt++;
+	}
+	
+	in.close();
+}
+
+
+
+void FolderInfo::write()
+{
+	ofstream out;				
+	out.open(path_.str().c_str());
+	if(!out.good())
+	  	return;
+
+	out << "sizelock:" << " " << iconSizeLock_ << endl;
+	
+	for(map<string,IconInfo*>::iterator it=info_.begin(); it != info_.end();it++)
+	{	
+		out  << it->second->x() <<  "," << it->second->y() << "," << it->second->type() << "," << it->first << endl; 
+	}		
+
+	out.close();
+}
+
+IconInfo* FolderInfo::add(const string &name, IconInfo* info)
+{	
+	info_[name]=info;	
+	return info;
+}  
+
+IconInfo* FolderInfo::add(const string &name, const string& type)
+{
+	IconInfo* info=find(name);
+	
+	if(!info)
+	{  	
+		info=new IconInfo(type);
+		info_[name]=info;
+	}
+	
+	return info;
+}  
+
+IconInfo* FolderInfo::add(const string &name, const Request& dotInfo)
+{
+	IconInfo* info=new IconInfo(dotInfo);
+		
+	info_[name]=info;
+	
+	return info;
+}
+
+
+IconInfo* FolderInfo::find(const string& name)
+{
+	map<string,IconInfo*>::iterator it=info_.find(name);
+	return (it != info_.end())?it->second:0;
+}	
+
+void FolderInfo::remove(const string &name)
+{
+	map<string,IconInfo*>::iterator it=info_.find(name);
+	if(it != info_.end())
+		info_.erase(it);
+}  
+
+void FolderInfo::rename(const string &oldName,const string &newName)
+{
+	map<string,IconInfo*>::iterator it=info_.find(oldName);
+	if(it != info_.end())
+	{	
+	  	IconInfo *data=it->second;
+	  	info_.erase(it);
+		info_[newName]=data;
+	}	
+}  
+
+void FolderInfo::setIconSizeLock(int v) 
+{
+  	if(iconSizeLock_ != v)
+	{
+	  	iconSizeLock_=v;
+		write();
+	}	
+}
+
+
+
diff --git a/src/Desktop/FolderInfo.h b/src/Desktop/FolderInfo.h
new file mode 100644
index 0000000..da64b07
--- /dev/null
+++ b/src/Desktop/FolderInfo.h
@@ -0,0 +1,47 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 FolderInfo_H
+#define FolderInfo_H
+
+#include <map>
+#include <string>
+
+#include "Path.h"
+
+using namespace std;
+
+class IconInfo;
+class Request;
+
+class FolderInfo 
+{
+public:
+	FolderInfo(const string&);
+	
+	void read();
+	void write();
+	IconInfo* add(const string &, IconInfo*);
+	IconInfo* add(const string&,const string&);
+	IconInfo* add(const string &, const Request&);
+	IconInfo* find(const string&);
+	void remove(const string &);
+	void rename(const string &,const string &);
+	int iconSizeLock() const {return iconSizeLock_;}
+	void setIconSizeLock(int);
+
+protected:
+	Path path_;
+	std::map<string,IconInfo*> info_;
+	int iconSizeLock_;
+		
+};
+
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/FolderObserver.h b/src/Desktop/FolderObserver.h
new file mode 100644
index 0000000..60afcc6
--- /dev/null
+++ b/src/Desktop/FolderObserver.h
@@ -0,0 +1,36 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 FolderObserver_H
+#define FolderObserver_H
+
+class IconObject;
+class Folder;
+
+class FolderObserver {
+public:
+
+	virtual void arrived(IconObject*) = 0;
+	virtual void gone(IconObject*) = 0;
+	virtual void position(IconObject*,int,int) = 0;
+	virtual void renamed(IconObject*,const string&) = 0;
+
+
+	virtual void waiting(IconObject*)	{};
+	virtual void error(IconObject*)		{};
+	virtual void modified(IconObject*)	{};
+	virtual void ready(IconObject*)		{};
+	virtual void opened(IconObject*)	{};
+	virtual void closed(IconObject*)	{};
+
+	virtual void highlight(IconObject*) {};
+};
+
+
+#endif
diff --git a/src/Desktop/FolderPresenter.h b/src/Desktop/FolderPresenter.h
new file mode 100644
index 0000000..a0e7fc9
--- /dev/null
+++ b/src/Desktop/FolderPresenter.h
@@ -0,0 +1,22 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 FolderPresenter_H
+#define FolderPresenter_H
+
+class Folder;
+
+class FolderPresenter {
+public:
+
+	virtual Folder* currentFolder() = 0;
+};
+
+
+#endif
diff --git a/src/Desktop/HelpFactory.cc b/src/Desktop/HelpFactory.cc
new file mode 100644
index 0000000..8f0eeaa
--- /dev/null
+++ b/src/Desktop/HelpFactory.cc
@@ -0,0 +1,41 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "HelpFactory.h"
+#include "Request.h"
+#include "Parameter.h"
+
+static map<string,HelpFactory*>* makers = 0;
+
+HelpFactory::HelpFactory(const string& name)
+{
+	if(makers == 0)
+		makers = new map<string,HelpFactory*>;
+
+	(*makers)[name] = this;
+}
+
+HelpFactory::~HelpFactory()
+{
+	// Not called
+}
+
+MvQRequestPanelHelp* HelpFactory::create(RequestPanel& owner, const Parameter& param)
+{
+	const char* help = param.help();
+
+	if(help) 
+	{
+		map<string,HelpFactory*>::iterator j = makers->find(help);
+		if(j != makers->end())
+			return (*j).second->make(owner, param);
+	}
+
+	return 0;
+}
diff --git a/src/Desktop/HelpFactory.h b/src/Desktop/HelpFactory.h
new file mode 100644
index 0000000..16c8ea9
--- /dev/null
+++ b/src/Desktop/HelpFactory.h
@@ -0,0 +1,50 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef HelpFactory_H
+#define HelpFactory_H
+
+#include <string>
+using std::string;
+
+#include "mars.h"
+
+class MvQRequestPanelHelp;
+class RequestPanel;
+class Parameter;
+
+class HelpFactory 
+{
+public:
+
+	HelpFactory(const string& name);
+	virtual ~HelpFactory();
+
+	virtual MvQRequestPanelHelp* make(RequestPanel& owner, const Parameter& def) = 0;
+	static MvQRequestPanelHelp* create(RequestPanel& owner, const Parameter& info);
+	
+private:
+	// No copy allowed						
+	HelpFactory(const HelpFactory&);
+	HelpFactory& operator=(const HelpFactory&);
+};
+
+
+template<class T>
+class HelpMaker : public HelpFactory 
+{
+	MvQRequestPanelHelp* make(RequestPanel& owner, const Parameter& def) { return new T(owner, def); }
+public:
+	HelpMaker(const string& name) : HelpFactory(name) {}
+};
+
+
+#endif
diff --git a/src/Desktop/IconClass.cc b/src/Desktop/IconClass.cc
new file mode 100644
index 0000000..7a4277f
--- /dev/null
+++ b/src/Desktop/IconClass.cc
@@ -0,0 +1,627 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "IconClass.h"
+
+#include "ConfigLoader.h"
+#include "Service.h"
+#include "IconObject.h"
+#include "IconFactory.h"
+#include "Items.h"
+#include "Folder.h"
+#include "Language.h"
+#include "MvRequestUtil.hpp"
+#include "MvScanFileType.h"
+
+#include <algorithm>
+
+static map<string,const IconClass*> classes;
+
+// All icon classed subclass from this one
+static IconClass super("*",0);
+
+static set<string> allActions;
+
+IconClass::IconClass(const string& name,request* r,const IconClass* sup):
+	request_(r),
+	name_(name),
+	super_(sup)
+{
+	classes[name] = this;
+	if(!super_ && this != &super)
+		super_ = &super;
+}
+
+IconClass::~IconClass()
+{
+	// Never called
+	classes.erase(name_);
+	free_all_requests(request_);
+}
+
+void IconClass::scan(ClassScanner& s)
+{
+	map<string,const IconClass*>::iterator j;
+	for(j = classes.begin(); j != classes.end() ; ++j)
+		s.next(*(*j).second);
+}
+
+const string& IconClass::name() const
+{
+	return name_;
+}
+
+const IconClass& IconClass::find(const string& name)
+{
+	 map<string,const IconClass*>::iterator j = classes.find(name);
+	 if(j != classes.end())
+		return *(*j).second;
+
+	 return *(new IconClass(name,empty_request(0)));
+}
+
+void IconClass::find(const string& str,vector<const IconClass*>& res)
+{  
+	for(map<string,const IconClass*>::iterator it=classes.begin(); it != classes.end(); it++)
+	{	  
+		const IconClass* kind=it->second;
+		
+		if(kind->canBeCreated() == false)
+			continue;  
+		
+		string s;
+		
+		//Default name
+		s=kind->defaultName();
+	  	std::transform(s.begin(), s.end(), s.begin(), ::tolower);
+		if(s.find(str) != string::npos)
+		{
+		  	res.push_back(kind);
+			continue;
+		}
+		
+		//Name
+		s=kind->name();
+	  	std::transform(s.begin(), s.end(), s.begin(), ::tolower);
+		if(s.find(str) != string::npos)
+		{
+			res.push_back(kind);
+			continue;
+		}
+		
+		//Type
+		s=kind->type();
+	  	std::transform(s.begin(), s.end(), s.begin(), ::tolower);
+		if(s.find(str) != string::npos)
+		{
+		  	res.push_back(kind);
+			continue;
+		}
+		
+		//icon box
+		s=kind->iconBox();
+	  	std::transform(s.begin(), s.end(), s.begin(), ::tolower);
+		if(s.find(str) != string::npos)
+		{
+		  	res.push_back(kind);
+			continue;
+		}
+	}
+}
+
+void IconClass::load(request* r)
+{
+	new IconClass(get_value(r,"class",0),r);
+}
+
+bool IconClass::isSubClassOf(const IconClass& other) const 
+{
+	return this == &other;
+}
+
+string IconClass::editor() const
+{
+	const char* e = get_value(request_,"editor_type",0);
+	return e ? e : "NoEditor";
+}
+
+bool IconClass::canBecome(const IconClass& other) const 
+{
+	if ( isSubClassOf(other) ) return true;
+	
+	for(set<const IconClass*>::const_iterator k = outputs_.begin();
+		k != outputs_.end(); ++k)
+	{
+	        if ( 
+		(*k)->canBecome(other) ) return true;	
+	}
+	return false;
+}
+
+set<string> IconClass::can() const
+{
+
+	static Action all("*","*");
+	if(services_.find(all) != services_.end())
+		return allActions;
+
+	set<string> c;
+	if(super_) c = super_->can();
+
+	for(map<Action,Service*>::const_iterator j = services_.begin(); 
+		j != services_.end(); ++j)
+			c.insert((*j).first.name());
+
+	for(set<const IconClass*>::const_iterator k = outputs_.begin();
+		k != outputs_.end(); ++k)
+	{
+		// cout << name_ << " can, adding " << (*k)->name_ << endl;
+		set<string> oc = (*k)->can();
+		c.insert(oc.begin(),oc.end());
+	}
+	
+	if(editor() == "NoEditor")	
+		c.erase("edit");
+	else
+	  	c.insert("edit");
+	
+	return c;
+}
+
+void IconClass::service(const Action& action,const IconClass* output,Service* s)  const
+{
+	IconClass* self = const_cast<IconClass*>(this);
+	if(output) self->outputs_.insert(output);
+
+	if(services_.find(action) != services_.end())
+		return;
+
+	allActions.insert(action.name());
+
+	//cout << name_ << " can " << action << " ";
+	//if(output) cout << " output " << output->name_;
+	//cout << " with " << *s << endl;
+
+	self->services_[action] = s;
+}
+
+Service* IconClass::service(const Action& action) const
+{
+	//cout << "IconClass::service class " << name_ << endl;
+	//cout << "IconClass::service for " << action << endl;
+	map<Action,Service*>::const_iterator j = services_.find(action);
+	if(j == services_.end())
+	{
+		Service* s = super_?super_->service(action):0;
+		if(s == 0 && !(action.name() == "*"))
+			return service(Action("*",action.mode()));
+		else
+			return s;
+	}
+	 cout << * ( (*j).second ) << endl;
+	return (*j).second;
+}
+
+static SimpleLoader<IconClass> loadClasses("object",0);
+
+//===================================================================
+
+
+#if 0
+//
+// stuff moved to library
+//
+
+
+struct File {            //-- wrapper function always closes the file
+
+	FILE *f_;
+
+public:
+	File(const char *name,char *mode) { f_ = fopen(name,mode); };
+	~File()                     { if(f_) fclose(f_);   };
+};
+
+//
+// NOTE: a close cousin of scan_file(...) is in ./src/libMars/guess.c !!!
+//
+
+static const char *scan_file(const char *file)
+{
+
+  const int cMAXSHIFT = 8; //-- search tolerance for word "GRIB" or "BUFR"
+  const int cMINREAD  = 4; //-- need to be able to read at least this much
+
+	bool isBinary = IsBinaryOrMissingFile( file );
+
+	File f(file,"r");
+	if(!f.f_)
+	  return "BAD";                 //-- missing or non-readable file
+
+	union {
+		char  c;
+		short s;
+		long  l;
+		char  ch[ cMAXSHIFT + 4 ];
+	} buf;
+	memset(&buf,0,sizeof(buf));
+
+	int readCount = fread((char*)&buf,1,sizeof(buf),f.f_);
+	
+	if( readCount < cMINREAD )      //-- if not enough bytes for safe tests
+	  {
+	    return isBinary ? "BINARY" : "NOTE";
+	  }
+
+
+	if( isBinary )                  //-- first check for binary types
+	  {
+	    for( int s=0; s <= cMAXSHIFT; ++s ) //-- for GRIB & BUFR allow some leading rubbish
+	      {
+		if(strncmp(buf.ch+s,"GRIB",4) == 0) 
+		  return "GRIB";
+
+		if(strncmp(buf.ch+s,"BUFR",4) == 0) 
+		  return "BUFR";
+	      }
+
+	    if(strncmp(buf.ch,"TIDE",4) == 0) 
+	      return "GRIB";
+
+	    if(strncmp(buf.ch,"BUDG",4) == 0) 
+	      return "GRIB";
+
+
+	    if(strncmp(buf.ch,"CDF",3) == 0) 
+	      return "NETCDF";
+
+	    if(strncmp(buf.ch,"V5D",3) == 0) 
+	      return "VIS5D_FILE";
+
+	    if(strncmp(buf.ch+1,"PNG",3) == 0) 
+	      return "PNG";
+
+	    if(strncmp(buf.ch+6,"JFIF",4) == 0) 
+	      return "JPEG";                //--  JPEG - JFIF
+
+	    if(strncmp(buf.ch+6,"Exif",4) == 0) 
+	      return "JPEG";                //--  JPEG - EXIF/DCF
+	  }
+
+	if( isBinary )                  //-- rest of the known types are all text files
+	    return "BINARY";            //-- thus this one is of unknown binary type
+
+
+	                                //-- check for text types that cannot be requests
+	if(strncmp(buf.ch,"%!",2) == 0) 
+	  return "PSFILE";
+
+	if(strncmp(buf.ch,"#!",2) == 0) 
+	  return "SHELL";
+
+	if(strncmp(buf.ch,"#GEO",4) == 0) 
+	  return "GEOPOINTS";
+
+	if(strncmp(buf.ch,"#LLM",4) == 0) 
+	  return "LLMATRIX";
+
+	if(strncmp(buf.ch,"#LLV",4) == 0) 
+	  return "LLVALUE";
+
+	if(strncmp(buf.ch,"#MACRO",6) == 0)
+	  return "MACRO";
+
+	if(strncmp(buf.ch,"#Metview",8) == 0)
+	  return "MACRO";
+
+	if(strncmp(buf.ch,"# Metview",9) == 0)
+	  return "MACRO";
+
+	if(strncmp(buf.ch,"<magics>",8) == 0) 
+	  return "MAGML";
+
+	                                //-- check if a Metview request
+
+	                                     //-- WARNING (2004-05-10):
+	request *r = read_request_file(file);//-- a file NOT ending in CR can crash parser!!!
+	if(r != 0)
+	  {
+	    string name = r->name?r->name:"";
+	    free_all_requests(r);
+
+	    map<string,const IconClass*>::iterator j = classes.find(name);
+	    if(j != classes.end())
+	      {
+		return (*j).second->name().c_str();  //-- it is Metview request
+	      }
+	  }
+
+
+	rewind(f.f_);
+
+	unsigned char c = ' ';          //-- look for a Vis5D control script
+	char line[1024];
+	int i = 0;
+	line[0] = 0;
+	while(!feof(f.f_))
+	  {
+	    fread((char*)&c,1,1,f.f_);
+
+	    if(i == sizeof(line) || c == '\n')
+	      {
+		i = 0;
+		if(strncmp("vis5d_",line,6) == 0)
+		  return "VIS5D_SCRIPT";
+	      }
+	    else
+	      line[i++] = c;
+	  }
+
+
+	fclose( f.f_ );                 //-- destructor will not close (end-of-file => !f.f_)
+	f.f_ = 0;                       //-- but after fclose destructor would try and...
+
+	return "NOTE";                  //-- unknown text file; make it NOTE
+}
+
+
+static string guess_file(const char* file)
+{
+
+	struct stat buf;
+	
+	if(stat(file,&buf) <0)
+		return "BAD";
+
+	switch(buf.st_mode & S_IFMT)
+	{
+		case S_IFDIR:
+			return "FOLDER";
+
+		case S_IFREG:
+			return scan_file(file);
+
+		default:
+			return "SPECIAL";
+	}
+	
+}
+#else
+
+const string missing("///");
+
+static bool is_request(const char* file, string& s)
+{
+    const off_t LARGEST_REQUEST_FILE = 1024*1024;
+
+	                                //-- check if a Metview request
+	s = missing;
+
+
+    // first check whether this file is abnormally large, because it it is,
+    // then read_request_file() will spend ages trying to parse it (if it
+    // looks like a valid request file).
+    
+    Path file_path(file);
+    off_t size = file_path.sizeInBytes();
+    
+    if (size < LARGEST_REQUEST_FILE)
+    {
+	                                         //-- WARNING (2004-05-10):
+	    request *r = read_request_file(file);//-- a file NOT ending in CR can crash parser!!!
+	    if(r != 0)
+	      {
+	        string name = r->name?r->name:"";
+	        free_all_requests(r);
+
+	        map<string,const IconClass*>::iterator j = classes.find(name);
+	        if(j != classes.end())
+	          {
+		    s = (*j).second->name().c_str();  //-- it is Metview request
+	          }
+	      }
+        }
+
+	return s != missing;
+}
+
+static string guess_file(const char* file)
+{
+	struct stat buf;
+	
+	if(stat(file,&buf) <0)
+		return "BAD";
+
+	switch(buf.st_mode & S_IFMT)
+	{
+		case S_IFDIR:
+		     return ScanFileType(file);
+		
+		case S_IFREG:
+			//return scan_file(file);
+			{
+			  string ft = ScanFileType(file);
+			  if( ft != "NOTE" )
+			    return ft;
+
+			  string ft2;
+			  if( is_request( file, ft2 ) )
+			    return ft2;
+			  else
+			    return ft;
+			}
+
+		default:
+			return "SPECIAL";
+	}
+	
+}
+
+#endif
+
+const IconClass& IconClass::guess(const Path& file)
+{
+	return guess(file.str());
+}
+
+const IconClass& IconClass::guess(const string& file)
+{
+	string kind = guess_file(file.c_str());
+	return find(kind);
+}
+
+IconObject* IconClass::createOne(Folder* f,int x,int y) const
+{
+	return defaultObject()->clone(f,false,x,y);
+}
+
+IconObject* IconClass::createOneFromRequest(Folder* f,int x,int y) const
+{
+	Request r(name_);
+  	return IconFactory::create(f,r,x,y);
+}
+
+IconObject* IconClass::defaultObject() const
+{
+	Folder* f       = Folder::folder("defaults");
+	string name=defaultName();
+	
+	IconObject *obj=f->find(name);
+	if(obj)
+		return obj;
+	else	  	
+		return IconFactory::create(f,name,*this);
+		//return createOneFromRequest(f);
+	
+	return 0;
+}
+
+string IconClass::defaultName() const
+{
+	const char* def = get_value(request_,"default_name",0);
+	return def ? string(def) : name_;
+}
+
+string IconClass::iconBox() const
+{
+	const char* def = get_value(request_,"icon_box",0);
+	return def ? string(def) : string();
+}
+
+string IconClass::helpPage() const
+{
+	const char* def = get_value(request_,"help_page",0);
+	return def ? string(def) : name_;
+}
+
+string IconClass::doubleClickMethod() const
+{
+  	const char* def = get_value(request_,"doubleclick_method",0);
+	return def ? string(def) : string();
+}
+
+Path IconClass::pixmap() const
+{
+  	const char* def = get_value(request_,"pixmap",0);
+	if(def) 
+	{  		
+	  	Path p(def);
+		string fname=p.name();
+		string::size_type pos=fname.rfind(".icon");
+		if(pos != string::npos)
+		{
+		   	fname=fname.substr(0,pos);
+		}   	
+	
+		string s = getenv("METVIEW_DIR_SHARE");
+		string svgName=s + "/icons_mv5/" +  fname + ".svg";
+		
+		Path psvg(s + "/icons_mv5/" +  fname + ".svg");
+		if(psvg.exists())
+		{  
+			//cout << "svg " << psvg.str() << endl;
+			return psvg;
+		}
+		else
+		{	  
+			Path pxpm(s + "/icons_mv5/" +  fname + ".xpm");
+			if(pxpm.exists())
+			{  
+				//cout << "svg " << psvg.str() << endl;
+				return pxpm;
+			}
+		}
+		
+		return Path("");
+	}
+	
+	return Path("");
+}
+
+bool IconClass::canBeCreated() const
+{  
+	const char* def=get_value(request_,"can_be_created",0);
+	if(def)
+	{
+	  	return (strcmp(def,"True") == 0 || strcmp(def,"true") == 0)?true:false;
+	}
+	
+	return false;
+}	
+
+string IconClass::type() const
+{
+	const char* def = get_value(request_,"type",0);
+	return def ? string(def) : name_;
+}
+
+Path IconClass::definitionFile() const
+{
+	const char* def = get_value(request_,"definition_file",0);
+	if(def == 0) def = "/dev/null";
+	return Path(def);
+}
+
+Path IconClass::rulesFile() const
+{
+	const char* def = get_value(request_,"rules_file",0);
+	if(def == 0) def = "/dev/null";
+	return Path(def);
+}
+
+long IconClass::expandFlags() const
+{
+	const char* def = get_value(request_,"expand",0);
+	return def?atol(def):EXPAND_MARS;
+}
+
+Language& IconClass::language() const
+{
+	return Language::find(this);
+}
+
+// This should be in ObjectList...
+
+// Visdef -> 1
+// Data,File, Macro, Family, ..   -> 2
+// View   -> 3
+// Window -> 4
+
+int IconClass::priority() const
+{
+	// Very, very UGLY if....
+
+	string t = type();
+
+	if(t == "Visdef") return 1;
+	if(t == "View")   return 3;
+	if(t == "Window") return 4;
+
+	return 2;
+}
diff --git a/src/Desktop/IconClass.h b/src/Desktop/IconClass.h
new file mode 100644
index 0000000..842004a
--- /dev/null
+++ b/src/Desktop/IconClass.h
@@ -0,0 +1,107 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File IconClass.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef IconClass_H
+#define IconClass_H
+
+#include <string>
+
+#include "Metview.h"
+#include "Action.h"
+
+class Service;
+class IconObject;
+class Folder;
+class Path;
+class Language;
+
+using std::string;
+
+
+class IconClass;
+struct ClassScanner {
+	virtual void next(const IconClass&) = 0;
+};
+
+class IconClass {
+public:
+
+	IconClass(const string&,request*,const IconClass* = 0);
+	virtual ~IconClass();
+	
+	virtual const string& name() const;
+	virtual string editor() const;
+	virtual string type() const;
+	virtual string defaultName() const;
+	virtual string iconBox() const;
+	virtual string helpPage() const;
+	virtual string doubleClickMethod() const;
+	virtual Path pixmap() const;
+	virtual bool canBeCreated() const;
+	virtual Path definitionFile() const;
+	virtual Path rulesFile() const;
+	virtual long expandFlags() const;
+
+	virtual bool isSubClassOf(const IconClass&) const;
+	virtual bool canBecome(const IconClass&) const;
+
+	virtual Service* service(const Action&) const;
+	virtual void service(const Action&,const IconClass*,Service*) const;
+	virtual set<string> can() const;
+
+	virtual IconObject* defaultObject() const;
+	virtual IconObject* createOne(Folder*,int x=0, int y=0) const;
+        virtual IconObject* createOneFromRequest(Folder*,int x=0,int y=0) const;
+
+	virtual Language& language() const;
+
+	virtual int priority() const;
+
+	static const IconClass& find(const string&);
+	static void find(const string&,vector<const IconClass*>&);
+	static void load(request*);
+	static void globalService(const string&,Service*);
+
+	static void scan(ClassScanner&);
+
+	static const IconClass& guess(const Path&);
+	static const IconClass& guess(const string&);
+
+	// Uncomment for persistent, remove otherwise
+	// static os_typespec* get_os_typespec();
+
+private:
+
+// No copy allowed
+	IconClass(const IconClass&);
+	IconClass& operator=(const IconClass&);
+
+	const IconClass*     super_;
+	string               name_;
+	request*             request_;
+	
+	map<Action,Service*> services_;
+	set<const IconClass*>      outputs_;
+
+	//friend ostream& operator<<(ostream& s,const IconClass& p)
+	//	{ p.print(s); return s; }
+
+};
+
+inline void destroy(IconClass**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(IconClass);
+//#endif
+
+#endif
diff --git a/src/Desktop/IconFactory.cc b/src/Desktop/IconFactory.cc
new file mode 100644
index 0000000..3b719dd
--- /dev/null
+++ b/src/Desktop/IconFactory.cc
@@ -0,0 +1,291 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "IconFactory.h"
+
+#include "IconClass.h"
+#include "IconInfo.h"
+//#include "Unknown.h"
+#include "Folder.h"
+
+#include "FolderInfo.h"
+#include "Request.h"
+#include "TemporaryObject.h"
+
+#include <assert.h>
+
+static map<string,IconFactory*>* makers = 0;
+
+IconFactory::IconFactory(const string& name)
+{
+	if(makers == 0)
+		makers = new map<string,IconFactory*>;
+
+	(*makers)[name] = this;
+}
+
+IconFactory::~IconFactory()
+{
+	// Not called
+}
+
+//For folders name should contain the full path!!!
+IconObject* IconFactory::create(Folder* parent,const string& name,const IconClass& kind,IconInfo *info)
+{ 		
+	IconObject* o = 0;
+
+	//cout << "IconFactory::create " << name << endl;
+
+	// Try class, then type
+	map<string,IconFactory*>::iterator j = makers->find(kind.name());
+	if(j == makers->end()) j = makers->find(kind.type());
+	if(j == makers->end())
+	{
+		cout << "  -->  oops, no factory for " << kind.type() << endl;
+		// o = new Unknown(parent,kind,name,info);
+		o = 0;
+	}
+	else o =  (*j).second->make(parent,kind,name,info);
+
+	if(o != 0)
+	{
+		
+		parent->adopt(o);
+		o->createFiles();
+	}
+
+	return o;
+
+}
+
+IconObject* IconFactory::createTemporary(IconObject* o,const Request& r,const IconClass* c)
+{
+	return new TemporaryObject(o,r,c);
+}
+
+/*
+
+//For folders with  no parents the fullpath is needed!
+//For folders with parent the relativ name is needed!
+IconObject* IconFactory::create(Folder* parent,const string& name,const IconClass& kind,int x, int y)
+{
+	IconInfo *info=new IconInfo(kind.name(),x,y);
+	
+	string fileName=name;	
+	if(kind.type() == "Folder")
+	{
+		if(parent)
+		{
+  			Path path=parent->path(); 		
+			fileName = path.add(name).str();
+		}		
+	}  
+		
+	return create(parent,fileName,kind,info);
+}
+
+IconObject* IconFactory::create(Folder* parent,const string& name,const IconClass& kind)
+{
+	string fileName=name;	
+	if(kind.type() == "Folder")
+	{
+		if(parent)
+		{
+  			Path path=parent->path(); 		
+			fileName = path.add(name).str();
+		}		
+	}  
+	
+	return create(parent,fileName,kind,0);
+}
+
+IconObject* IconFactory::create(Folder* parent,const string& name, int x, int y)
+{
+	FolderInfo* folderInfo=0;
+	IconInfo* info=0;	
+	string 	dirName, fileName;
+	
+	if(!parent)
+	{
+		dirName = string(dirname(name.c_str()));
+		fileName = name;
+	}
+	else
+	{  
+  		Path path=parent->path(); 		
+  		dirName = path.str(); 
+		fileName = path.add(name).str();
+		folderInfo=parent->folderInfo();
+		info=folderInfo->find(name);
+	}	
+
+	const IconClass&  ic = (info) ? IconClass::find(info->type()) : IconClass::guess(fileName);
+	
+	//Folders can be created with no parent. We need to check if the
+	//current item is such an already existing object. If it is we set
+	//the x/y position for it if it is possible.
+	if(ic.type() == "Folder")
+	{
+	  	IconObject *f=Folder::folder(fileName,false);
+		if(f) 
+		{
+		  	if(info) f->position(info->x(),info->y());
+			if(!f->parent() && parent) parent->adopt(f);
+			return f;
+		}
+	}	
+	
+	
+	string iconName=(ic.type() == "Folder")?fileName:name;
+		
+	//If there is no folderinfo available we see if there is a 
+	//dotfile to get the positions
+	if(!info)
+	{
+		Path path(dirName);
+	  	Path dot  = path.add(string(".") + name);  		
+		Request dotInfo(dot);
+		
+		if(!dotInfo) 
+		{
+			dotInfo = Request("USER_INTERFACE");
+		}	
+		dotInfo("ICON_CLASS") = ic.name().c_str();
+		
+		info=new IconInfo(dotInfo);
+		if(x != 0 || y != 0)
+			info->position(x,y);
+		
+	}
+	
+	return create(parent,iconName,ic,info);
+
+	//cout << "create " << name << " in " << *parent << endl;
+	//cout << "  " << file << endl;
+	//cout << dot << endl;
+
+}
+
+*/
+
+
+IconObject* IconFactory::create(Folder* parent,const string& name,const IconClass& kind)
+{
+	return create(parent,name,kind,0);
+}
+
+IconObject* IconFactory::create(Folder* parent,const string& name,const IconClass& kind,int x, int y)
+{
+	IconInfo *info=new IconInfo(kind.name(),x,y);
+	return create(parent,name,kind,info);
+}
+
+IconObject* IconFactory::create(Folder* parent,const string& name, int x, int y)
+{
+	FolderInfo* folderInfo=0;
+	IconInfo* info=0;	
+	string 	dirName, fileName;
+		
+	Path path=parent->path(); 		
+  	dirName = path.str(); 
+	fileName = path.add(name).str();
+	folderInfo=parent->folderInfo();
+	info=folderInfo->find(name);
+	
+	if(info)
+	{
+		const IconClass&  ic = IconClass::find(info->type());
+		return create(parent,name,ic,info);
+	}
+	
+	//If there is no folderinfo available we see if there is a 
+	//dotfile to get the type and the positions
+	else
+	{	  		
+		Path path(dirName);
+	  	Path dot  = path.add(string(".") + name);  		
+		Request dotInfo(dot);
+		
+		//If there is no dotfile we guess the file type
+		if(!dotInfo) 
+		{
+			dotInfo = Request("USER_INTERFACE");
+			const IconClass&  ic = IconClass::guess(fileName);
+			dotInfo("ICON_CLASS") = ic.name().c_str();
+			
+			info=new IconInfo(dotInfo);
+			if(x != 0 || y != 0)
+				info->position(x,y);
+		
+			return create(parent,name,ic,info);	
+			
+		}	
+		else
+		{  
+			const char* type=dotInfo("ICON_CLASS");
+		  	const IconClass&  ic = IconClass::find(type);
+		
+			info=new IconInfo(dotInfo);
+			if(x != 0 || y != 0)
+				info->position(x,y);
+		
+			return create(parent,name,ic,info);
+		}	
+	}
+}
+
+
+IconObject* IconFactory::create(const string& name,const IconClass& kind)
+{	
+	IconObject* o = IconObject::search(name);
+	if(o) return o;
+
+	//cout << "IconFactory::create " << name << endl;
+	string dir  = dirname(name.c_str());
+	string base = mbasename(name.c_str());
+	
+	Folder* f   = dynamic_cast<Folder*>(create(dir,IconClass::find("FOLDER")));
+	return f?create(f,base,kind):0;
+}
+
+IconObject* IconFactory::create(IconObject* o,const Request& r,
+	const IconClass* c)
+{
+	assert(0);
+  
+        //MODIF
+	return 0;
+	//return new Temporary(o,r,c);
+}
+
+IconObject* IconFactory::create(Folder* parent,const Request& r,int x, int y)
+{	
+	const char* kind = r.getVerb();
+	const char* name = r("_NAME");
+
+	string kind1(kind);    //it is needed on alpha
+	const IconClass& c = IconClass::find(kind1);
+
+// The command below was causing memory problems on alpha.
+// Therefore, it was re-coded in a different way
+//	string n = name?mbasename(name):c.defaultName();
+	string n;
+	if (name)
+	      n = mbasename(name);
+	else
+	      n = c.defaultName();
+
+	n = parent->uniqueName(n);
+
+	IconObject* o = create(parent,n,c,x,y);
+
+	r.save(o->path());
+	return o;
+}
+
diff --git a/src/Desktop/IconFactory.h b/src/Desktop/IconFactory.h
new file mode 100644
index 0000000..60e4cf4
--- /dev/null
+++ b/src/Desktop/IconFactory.h
@@ -0,0 +1,70 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 IconFactory_H
+#define IconFactory_H
+
+#include <string>
+
+using namespace std;
+
+class IconObject;
+class IconClass;
+class IconInfo;
+class Folder;
+class Request;
+
+class IconFactory 
+{
+public:
+	IconFactory(const string& name);
+	virtual ~IconFactory();
+
+	virtual IconObject* make(Folder* parent,const IconClass& kind,
+						const string& name,IconInfo* info) = 0;
+
+	static IconObject* create(Folder* parent,const string& name,const IconClass&,IconInfo*);
+	static IconObject* createTemporary(IconObject*,const Request&,const IconClass* = 0);
+	static IconObject* create(Folder* parent,const string& name,const IconClass&);
+	static IconObject* create(Folder* parent,const string& name,const IconClass& kind,int x, int y);
+	static IconObject* create(Folder* parent,const string& name,int x=0, int y=0);
+	static IconObject* create(const string& name,const IconClass&);
+	static IconObject* create(IconObject*,const Request&,const IconClass* = 0);
+	static IconObject* create(Folder*,const Request&,int x=0, int y=0);
+						
+	/*static IconObject* create(IconObject*,const Request&,const IconClass* = 0);
+	static IconObject* create(Folder*,const Request&,int x=0, int y=0);
+	static IconObject* create(const string& name);
+	static IconObject* create(const string& name,const IconClass&);
+	static IconObject* create(Folder* parent,const string& name,const IconClass& kind,int x, int y);
+	static IconObject* create(Folder* parent,const string& name,int x=0, int y=0);
+	static IconObject* create(Folder* parent,const string& name,const IconClass&);
+	static IconObject* create(Folder* parent,const string& name,const IconClass&,IconInfo*);
+	static IconObject* createTemporary(IconObject*,const Request&,const IconClass* = 0);*/
+
+private:
+	// No copy allowed
+	IconFactory(const IconFactory&);
+	IconFactory& operator=(const IconFactory&);
+
+};
+
+template<class T>
+class IconMaker : public IconFactory {
+	IconObject* make(Folder* parent,const IconClass& kind,
+			const string& name,IconInfo* info) 
+		{
+			return new T(parent,kind,name,info);			
+		}
+public:
+	IconMaker(const string& name) : IconFactory(name) {}
+};
+
+
+#endif
diff --git a/src/Desktop/IconGroupTools.cc b/src/Desktop/IconGroupTools.cc
new file mode 100644
index 0000000..b76ba60
--- /dev/null
+++ b/src/Desktop/IconGroupTools.cc
@@ -0,0 +1,69 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "IconGroupTools.h"
+#include "ConfigLoader.h"
+#include "Request.h"
+
+static vector<IconGroupTools*> tools;
+
+IconGroupTools::IconGroupTools(request* r) :
+	request_(r)
+{
+}
+
+IconGroupTools::~IconGroupTools()
+{
+}
+
+string IconGroupTools::name() 
+{
+  	return string(get_value(request_, "name", 0));
+}
+ 
+bool IconGroupTools::can(const string& name)	
+{
+  	for(vector<IconGroupTools*>::iterator it=tools.begin(); it != tools.end(); it++)
+		if((*it)->name() == name)
+		  	return true;
+	return false;	
+}
+
+void IconGroupTools::run(const string& name,const vector<IconObject*>& items)
+{
+  	for(vector<IconGroupTools*>::iterator it=tools.begin(); it != tools.end(); it++)
+		if((*it)->name() == name)
+		  	(*it)->run(items);
+}		
+
+void IconGroupTools::run(const vector<IconObject*>& items)
+{		
+	MvRequest r(get_value(request_, "action", 0)); 
+  
+	if(const char *par=get_value(request_, "param", 0))
+	{  	
+		r.setValue("PARAM",par);
+	}	
+	
+	for(vector<IconObject*>::const_iterator it=items.begin(); it!=items.end(); it++)
+	{
+		r.addValue("ITEMS",(*it)->fullName().c_str());
+	} 	
+	
+  	MvApplication::callService(get_value(request_, "service", 0), r, 0);
+}
+
+
+void IconGroupTools::load(request* r)
+{
+	tools.push_back(new IconGroupTools(r));
+}
+
+
+static SimpleLoader<IconGroupTools> loadClasses("desktop_icon_group_tool",1);
diff --git a/src/Desktop/IconGroupTools.h b/src/Desktop/IconGroupTools.h
new file mode 100644
index 0000000..9f5a56a
--- /dev/null
+++ b/src/Desktop/IconGroupTools.h
@@ -0,0 +1,38 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 IconGroupTools_H
+#define IconGroupTools_H
+
+#include "Metview.h"
+#include "IconObject.h"
+
+class IconGroupTools
+{  
+public:
+	IconGroupTools(request*);
+	~IconGroupTools();
+	
+	string name();
+	static void load(request*);
+	static void run(const string&,const vector<IconObject*>& items);
+	static bool can(const string&);	
+	
+private:
+	// No copy allowed
+	IconGroupTools(const IconGroupTools&);
+	IconGroupTools& operator=(const IconGroupTools&);
+	void run(const vector<IconObject*>& items);
+		
+	request*    request_;
+};
+
+inline void destroy(IconGroupTools**) {}
+
+#endif
diff --git a/src/Desktop/IconInfo.cc b/src/Desktop/IconInfo.cc
new file mode 100644
index 0000000..cd773b3
--- /dev/null
+++ b/src/Desktop/IconInfo.cc
@@ -0,0 +1,81 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "IconInfo.h"
+#include "Path.h"
+//  04 50 53 25 42
+
+IconInfo::IconInfo(const Request& r):
+	info_(r)
+{
+	if(!info_) info_ = Request("USER_INTERFACE");
+	const char* p = info_("ICON_CLASS");
+	if(p)
+	{
+		type_=string(info_("ICON_CLASS"));
+	}
+}
+
+
+IconInfo::IconInfo(const string& type) : 
+	type_(type)
+{
+	info_ = Request("USER_INTERFACE");
+	info_("ICON_CLASS") = type.c_str();
+}
+
+
+IconInfo::IconInfo(const string& type,int x, int y) : 
+	type_(type), 
+	x_(x), 
+	y_(y)
+{
+	info_ = Request("USER_INTERFACE");
+	info_("ICON_CLASS") = type.c_str();
+	info_("X")=x;
+	info_("Y")=y;
+}
+
+IconInfo::~IconInfo()
+{
+}
+
+int IconInfo::x() const
+{
+	return info_("X");
+}
+
+int IconInfo::y() const
+{
+	return info_("Y");
+}
+
+void IconInfo::position(int x,int y)
+{
+	info_("X") = x;
+	info_("Y") = y;
+}
+
+void IconInfo::save(const Path& s)
+{
+	info_.save(s);
+	//cout << "Save into " << s.str() << endl;
+	//info_.print();
+}
+
+bool IconInfo::fix(const string& kind)
+{
+	const char* p = info_("ICON_CLASS");
+	if(kind != p)
+	{
+		info_("ICON_CLASS") = kind.c_str();
+		return true;
+	}
+	return false;
+}
diff --git a/src/Desktop/IconInfo.h b/src/Desktop/IconInfo.h
new file mode 100644
index 0000000..973692d
--- /dev/null
+++ b/src/Desktop/IconInfo.h
@@ -0,0 +1,48 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File IconInfo.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef IconInfo_H
+#define IconInfo_H
+
+#include "Request.h"
+
+class IconInfo 
+{
+public:
+	IconInfo(const Request&);
+	IconInfo(const string&);
+	IconInfo(const string&,int,int);
+	~IconInfo();
+
+	int x() const;
+	int y() const;
+	void position(int,int);
+	void save(const Path&);
+	bool fix(const string&);
+	string type() {return type_;}
+
+private:
+	// No copy allowed
+	IconInfo(const IconInfo&);
+	IconInfo& operator=(const IconInfo&);
+
+	bool    modified_;
+	Request info_;
+	int x_;
+	int y_;
+	string type_;
+};
+
+inline void destroy(IconInfo**) {}
+
+
+#endif
diff --git a/src/Desktop/IconObject.cc b/src/Desktop/IconObject.cc
new file mode 100644
index 0000000..d3d1629
--- /dev/null
+++ b/src/Desktop/IconObject.cc
@@ -0,0 +1,889 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "Log.h"
+
+#include "IconObject.h"
+
+#include "IconClass.h"
+#include "IconInfo.h"
+#include "IconFactory.h"
+
+#include "State.h"
+#include "Folder.h"
+#include "Editor.h"
+#include "Service.h"
+#include "Command.h"
+#include "Language.h"
+#include "Request.h"
+#include "Queue.h"
+#include "Parameter.h"
+#include "Path.h"
+#include "FolderObserver.h"
+#include "Tokenizer.h"
+#include "Dependancy.h"
+#include "MvQLogDialog.h"
+
+#include <sstream>
+#include <assert.h>
+
+#include "Metview.h"
+
+#include <sys/stat.h>
+vector<IconObject*> IconObject::objects_;
+
+
+IconObject::IconObject(Folder* parent,const IconClass& kind,const string& name,
+		IconInfo* info):
+	name_(name),
+	parent_(parent),
+	class_(kind),
+	info_(info),
+	queue_(0),
+	log_(0),
+	editor_(0),
+	logWindow_(0),
+	locked_(false),
+	link_(false),
+	status_(DefaultStatus)
+{
+	string p;
+	if(parent_)  
+	{
+		parent_->attach();
+		p = path().str();
+	}
+	else
+	{
+	  	p=name;
+	}
+	
+	struct stat s;
+	if(lstat(p.c_str(),&s) == 0)
+	{
+		link_ = S_ISLNK(s.st_mode);
+		locked_ = faccess(p.c_str(),W_OK);
+		//else locked_ = true;
+	}
+		//else locked_ = true;
+	
+	objects_.push_back(this);
+}
+
+IconObject::~IconObject()
+{	  
+	reset(); 
+	if ( parent_ )  parent_->detach();
+	delete info_;
+	
+	
+	vector<IconObject*>::iterator it;
+	for(it=objects_.begin(); it != objects_.end(); it++)
+	{
+	  	if(*it == this)		  
+		{
+		  	objects_.erase(it);
+			break;
+		}	
+	}	
+}
+
+const string& IconObject::name() const
+{
+	return name_;
+}
+
+Folder* IconObject::parent() const
+{
+	return parent_;
+}
+
+IconInfo& IconObject::info() const
+{
+	if(info_ == 0)
+	{
+		Request info("USER_INTERFACE");
+		info("ICON_CLASS") = className().c_str();
+
+		IconObject* o = const_cast<IconObject*>(this);
+		o->info_ = new IconInfo(info);
+		o->saveInfo();
+	}
+
+	return *info_;
+}
+
+string IconObject::fullName() const
+{
+	string p=parent()->fullName();
+	if(p != "/")
+	  	return p + "/"+ name();
+	else
+	  	return p + name();
+}
+
+Path IconObject::path() const
+{
+	return parent()->path().add(name());
+}
+
+string IconObject::dotName(const string& n) const
+{
+	return string(".") + n;
+}
+
+Path IconObject::dotPath() const
+{
+	return parent()->path().add(dotName(name()));
+}
+
+string IconObject::embeddedName(const string& n) const
+{
+	return  n + "#";
+}
+
+Path IconObject::embeddedPath() const
+{
+	return parent()->path().add(embeddedName(name()));
+}
+
+Folder* IconObject::embeddedFolder(const string& n,bool create) const
+{	
+	return Folder::folder(parent()->fullName(),embeddedName(name()),n,create);
+}
+
+Folder* IconObject::embeddedFolder(bool create) const
+{
+	return Folder::folder(parent()->fullName(),embeddedName(name()),create);
+}
+
+bool IconObject::isEmbedded()
+{
+	//Needs to be improved!
+	return (parent()->path().str().find("#") != string::npos);
+}	  
+
+const string& IconObject::className() const
+{
+	return iconClass().name();
+}
+
+const IconClass& IconObject::iconClass() const
+{
+	return class_;
+}
+
+const IconClass& IconObject::editorClass() const
+{
+	return iconClass();
+}
+
+void IconObject::doubleClick()
+{	
+  	edit();
+}
+
+void IconObject::print(ostream& s) const
+{
+	s << className() << " - " << fullName();
+}
+
+
+void IconObject::command(const string& name)
+{
+	Command::execute(name,this);
+}
+
+Task* IconObject::action(const Action& a)
+{
+	Service* s = iconClass().service(a);
+	if(s == 0) s = Service::find("InternalDesktopService");
+
+	if(s != 0) {
+		Task* t = s->task(a,this);
+		if(t != 0)
+		{
+			if(queue_ == 0) queue_ = new Queue(this);
+			queue_->push(t);
+			return t;
+		}
+	}
+	return 0;
+}
+
+
+Log& IconObject::log()
+{
+	if(log_ == 0) log_ = new Log(this);
+	return *log_;
+}
+
+Path IconObject::logPath()
+{
+	return log().path();
+}
+
+/*Request IconObject::request() const
+{
+	cout << "Oops, should not be called..." << endl;
+	return Request("");
+}
+
+void IconObject::request(const Request&)
+{
+	cout << "Oops, should not be called..." << endl;
+}*/
+
+Request IconObject::fullRequest() const
+{
+	return request();
+}
+
+Request IconObject::requestForVerb(const string& verb) const
+{
+	Request r=request();
+	if(r.getVerb() == verb)
+	  	return r;
+	
+	return Request();
+}  
+
+Language& IconObject::language() const
+{
+	return iconClass().language();
+}
+
+IconObject* IconObject::search(const string& fullName)
+{
+	//cout << "search " << fullName << endl;
+		
+	//return Folder::icon(fullName);
+	
+	if(fullName[0] != '/') return 0;
+
+	Tokenizer parse("/");
+	vector<string> n;
+	parse(fullName,n);
+
+	vector<string> names; 
+
+	for(vector<string>::iterator j = n.begin(); j != n.end(); ++j)
+	{
+		if(*j == "" || *j == ".") 	
+			continue;
+
+		if(*j == "..")
+			names.pop_back();
+		else
+			names.push_back(*j);
+	}
+
+	return Folder::top()->find(names);
+}
+
+IconObject* IconObject::search(IconObject& /*o*/,const string& /*relativeName*/)
+{
+	return 0;
+}
+
+IconObject* IconObject::find(const vector<string>& n)
+{
+	return (n.size() == 0) ? this : 0;
+}
+
+IconObject* IconObject::find(const string& /*name*/)
+{
+	return 0;
+}	
+
+void IconObject::saveInfo()
+{
+	//info().save(dotPath());
+}
+
+void IconObject::reparent(Folder* parent)
+{
+	if(parent_ != parent)
+	{
+		modified();
+
+		Path old_path = path();
+		Path old_emb  = embeddedPath();
+
+		parent_->detach();
+		parent_ = parent;		
+		parent_->attach();
+
+		Path new_path = path();
+		Path new_emb  = embeddedPath();
+
+		old_path.rename(new_path);
+		if(old_emb.exists())
+			old_emb.rename(new_emb);
+
+		modified();
+	}
+}
+
+bool IconObject::checkNewName(const string& new_name)
+{
+  	if(name_ == new_name)
+		return false;
+
+	if(!renamable())
+	{
+		 Log::error(this) << "Object cannot be renamed" << endl;
+		 return false;
+	}
+
+	if(parent()->find(new_name))
+	{
+		Log::error(this) << "Cannot rename " << name() << " to " << new_name << ", an icon already exists" << endl;
+		return false;
+	}
+
+	if( (new_name[0] == '.' && name_[0] != '.') 
+		|| new_name.find("/") != string::npos 
+		|| new_name.length()  == 0)
+	{
+		Log::error(this) << "Cannot rename " << name() << " to " << new_name << ", invalid name" << endl;
+		return false;
+	}
+	
+	return true;
+}  
+
+
+bool IconObject::rename(const string& new_name)
+{
+	if(!checkNewName(new_name))
+	  	return false;
+
+	modified();
+
+	string old_name = name_;
+	string old_embedded_name=embeddedName(name_);
+
+	Path old_path = path();
+	Path old_embedded_path = embeddedPath();	
+	Folder* old_emb  = embeddedFolder(false);
+
+	name_ = new_name;
+	
+	Path new_path = path();
+	old_path.rename(new_path);
+	
+	//If there is embedded folder
+	if(old_embedded_path.exists())
+	{
+		if(old_emb)
+		{
+			old_emb->rename(embeddedName(name())); 
+		}
+		else
+		{
+		  	old_embedded_path.rename(embeddedPath());
+		}
+	}
+	
+	parent()->renamed(this,old_name,new_name);
+	modified();
+
+	return true;
+}
+
+void IconObject::position(int x,int y)
+{
+    info().position(x,y);
+    saveInfo();
+}
+
+void IconObject::createFiles()
+{
+}
+
+set<string> IconObject::can()
+{
+  	set<string> c = iconClass().can();
+	
+	if(log_ != 0) c.insert("log");
+	
+	if(parent()->descendant(Folder::folder("wastebasket")))
+		c.erase("delete");
+	else 	
+		c.erase("destroy");
+	
+	if(locked())
+	{
+	  	c.erase("cut");
+	  	c.erase("delete");
+		c.erase("destroy");
+	}	
+	
+	if(isBrokenLink())
+	{
+		c.erase("duplicate");
+		c.erase("copy");
+	}
+	
+	if(c.find("save") == c.end())
+	 	c.erase("clear"); 
+	
+
+	c.insert("remove");
+	//c.insert("output");
+	c.insert("mergeIcon");
+	c.insert("replaceIcon");
+	
+	return c;
+}
+
+//-------------------------------------------------------------------------
+void IconObject::toWastebasket()
+{
+	Folder* f = Folder::folder("wastebasket");
+	if(f == 0)
+	{
+	  	Log::error(this) << "Can't find wastebasket!" << endl;
+	}
+	else 
+	{
+		//position(0,0);
+		f->adopt(this);
+	}
+}
+
+
+void IconObject::edit()
+{
+	set<string> c = iconClass().can();
+  	if(c.find("edit") != c.end())
+	{
+  		Editor::open(this);
+	}
+}
+
+void IconObject::edit2()
+{
+	//Editor::open(this,"ExternalTextEditor");
+}
+
+void IconObject::showLog()
+{
+	MvQLogDialog::open(this);
+}
+
+//-------------------------------------------------------------------------
+
+void IconObject::duplicate()
+{
+	clone(parent(),false,info().x()+20,info().y()+20);
+	//parent()->position(c,info().x()+20,info().y()+20);
+}
+
+IconObject* IconObject::clone(Folder* f, bool update, int x, int y)
+{
+	//createFiles();
+	
+	string new_name;
+	
+	f->scan();
+		
+	if (update)
+		new_name = name();
+	else if (f == parent())
+		new_name = f->duplicateName(name());
+	else
+		new_name = f->uniqueName(name());
+	
+	Path old_path = path();
+	Path old_emb  = embeddedPath();
+
+	Path new_path = f->path().add(new_name);
+	Path new_emb  = f->path().add(embeddedName(new_name));
+
+	old_path.copy(new_path);
+	if(old_emb.exists())
+	{
+	  	old_emb.copy(new_emb);
+	}	
+		
+	IconObject *obj=IconFactory::create(f,new_name,class_,x,y);
+	
+	return obj;
+}
+
+
+//-------------------------------------------------------------------------
+
+void IconObject::editor(Editor* e)
+{
+	if(editor_ != e)
+	{
+		editor_ = e;
+		if(e) 
+			notifyOpened();
+		else 
+			notifyClosed();
+	}
+}
+
+Editor* IconObject::editor()
+{
+	return editor_;
+}
+
+void IconObject::raiseEditor()
+{
+	if(editor_)
+		editor_->raiseIt();
+}	
+
+//-------------------------------------------------------------------------
+
+void IconObject::logWindow(MvQLogDialog* e)
+{
+	logWindow_ = e;
+}
+
+MvQLogDialog* IconObject::logWindow()
+{
+	return logWindow_;
+}
+
+//-------------------------------------------------------------------------
+
+void IconObject::removeFiles()
+{
+	modified();
+	path().remove();
+	if(embeddedPath().exists())
+		embeddedPath().remove();
+}
+
+//-------------------------------------------------------------------------
+
+void IconObject::modified()
+{
+	MvApplication::notifyIconModified(
+		fullName().c_str(),
+		className().c_str());
+
+	// Forget any outstanding task
+	reset();
+	notifyChanged();
+}
+
+void IconObject::created()
+{
+	MvApplication::notifyIconCreation(
+		fullName().c_str(),
+		className().c_str());
+}
+
+string IconObject::dropText() const
+{
+	Request r = request();
+	return request2string(r);
+}
+
+string IconObject::relativeName(IconObject* other) const
+{
+	return relpath(fullName().c_str(),other->fullName().c_str());
+}
+
+string IconObject::makeFullName(const string& name) const
+{
+	return makepath(parent()->fullName().c_str(),name.c_str());	
+}
+
+//-------------------------------------------------------------------------
+
+void IconObject::reset()
+{
+	if(logWindow_) logWindow_->reject();
+
+	if(log_)
+	{
+	  	delete log_;
+		log_ = 0;
+	}	
+
+	if(queue_) queue_->ownerGone();
+	queue_	= 0;
+
+	dependancies_.clear();
+}
+
+//-------------------------------------------------------------------------
+
+void IconObject::notifyWaiting()
+{
+	status_=WaitingStatus;
+	if(parent_)
+	  	parent()->tellObservers(&FolderObserver::waiting,this);
+}
+
+void IconObject::notifyError()
+{
+	status_=ErrorStatus;
+	if(parent_)
+	  	parent()->tellObservers(&FolderObserver::error,this);	
+}
+
+void IconObject::notifyDestroyed()
+{
+	for(set<IconObserver*>::iterator j = observers_.begin(); j != observers_.end(); ++j)
+ 		(*j)->iconDestroyed(this);
+}
+
+void IconObject::notifyChanged()
+{
+	status_=DefaultStatus;
+	parent_->tellObservers(&FolderObserver::modified,this);
+	
+	for(set<IconObserver*>::iterator j = observers_.begin(); j != observers_.end(); ++j)
+		(*j)->iconChanged(this);
+}
+
+void IconObject::notifyReady()
+{
+	status_=ReadyStatus;
+  	if(parent_)
+  		parent_->tellObservers(&FolderObserver::ready,this);	
+}
+void IconObject::notifyOpened()
+{
+	if(parent_)
+		parent_->tellObservers(&FolderObserver::opened,this);	
+}
+void IconObject::notifyClosed()
+{
+	if(parent_)
+		parent_->tellObservers(&FolderObserver::closed,this);	
+}
+
+
+
+//-------------------------------------------------------------------------
+
+void IconObject::addObserver(IconObserver* o)
+{
+	observers_.insert(o);
+}
+
+void IconObject::removeObserver(IconObserver* o)
+{
+	observers_.erase(o);
+}
+
+//-------------------------------------------------------------------------
+
+const set<DependancyH>& IconObject::dependancies()
+{
+	return dependancies_;
+}
+
+//-------------------------------------------------------------------------
+
+void IconObject::destroy()
+{
+	IconObjectH save = this;
+	removeFiles();	
+	parent()->release(this); //this notify the folderobservers!!
+	
+	//Do we need it?
+	notifyDestroyed();
+	
+	if(editor_) editor_->empty();
+}
+
+void IconObject::empty()
+{
+	// Not called, obly wastebasket
+}
+
+bool IconObject::renamable() const
+{
+	//return !locked() && !parent()->locked() && editor_ == 0;
+	return !locked() && !parent()->locked();
+}
+
+bool IconObject::locked() const
+{
+	return locked_;
+}
+
+void IconObject::lock()
+{
+	locked_ = true;
+}
+
+bool IconObject::temporary() const
+{
+	return false;
+}
+
+//=================================================================
+
+vector<IconObjectH> IconObject::subObjects(const string& param,const Request& r)
+{ 
+	int i = 0;
+	bool more = false;
+	vector<IconObjectH> result;
+
+	do 
+	{
+		MvRequest   a = r(param.c_str(),i);
+		const char* b = r(param.c_str(),i);
+
+		more = false;
+		IconObjectH o = 0;
+
+		if(a)
+		{
+			a.print();
+			if(b)
+			  	cout << b << endl;
+			
+			more = true;
+			// Embbeded object:
+			// We need to create a temporary
+
+			cout << "Embedded object" << endl;
+			o = IconFactory::create(this,a);
+
+		}
+
+		if(b && strcmp(b,"#") )
+		{  
+			more = true;
+			// Real object
+			string name = makeFullName(b);
+			o = search(name);
+			if(o == 0) cout << "Cannot find " << name << endl;
+						
+		}
+
+		if(o != 0) result.push_back(o);
+
+		i++;
+
+	} while(more);
+
+	return result;	
+}
+
+
+void IconObject::setSubObjects(const string& name,
+	const vector<IconObjectH>& sub,Request& r,bool clean)
+{
+	//Delete the unused embedded subObjects
+  	if(clean)
+	{
+		vector<IconObjectH> oriSub = subObjects(name,r);
+		for(vector<IconObjectH>::const_iterator j = oriSub.begin(); j != oriSub.end(); ++j)	
+		{
+	  		IconObject* o = *j;
+			if(o && o->isEmbedded())
+			{
+		  		if(std::find(sub.begin(),sub.end(),o) == sub.end())
+				{
+			  		o->destroy();
+				}	
+			}
+		}	
+	}	  
+	
+	r.unsetParam(name.c_str());
+
+	// We cannot mix embedded objects and real objects
+
+	for(vector<IconObjectH>::const_iterator j = sub.begin(); j != sub.end(); ++j)
+	{
+		IconObject* o = *j;
+		if(o->temporary())
+		{
+			r(name.c_str()) += o->request();			
+		}
+		else
+		{
+			string rel = relativeName(o);
+			r(name.c_str()) += rel.c_str();
+			cout << "subObjects " << *this << endl;
+			cout << " subObjects " << *o << endl;
+			cout << " subObjects " << rel << endl;
+		}
+	}
+	
+	r.print(); 
+
+}
+
+bool IconObject::visible() const
+{
+	return name_[name_.length() - 1] != '#';
+}
+
+bool IconObject::sameAs(IconObject* other)
+{
+	if(&iconClass() != &other->iconClass())
+		return false;
+
+	Path p1 = this->path();
+	Path p2 = other->path();
+
+	FILE *f1 = fopen(p1.str().c_str(),"r");
+	FILE *f2 = fopen(p2.str().c_str(),"r");
+
+	bool same = f1 && f2;
+
+	while(same )
+	{
+		int c1 = getc(f1);
+		int c2 = getc(f2);
+		same = (c1 == c2);
+		if(c1 == EOF || c2 == EOF) break;
+	}
+
+	if(f1) fclose(f1);
+	if(f2) fclose(f2);
+
+	return same;
+}
+
+void IconObject::touch()
+{
+	path().touch();
+}
+
+bool IconObject::isLink() const
+{
+	return link_;
+}
+
+bool IconObject::isBrokenLink() const
+{
+  	if(!link_)
+	  	return false;
+	else
+	{
+		return !path().exists();
+	}
+}
+
+bool IconObject::isInTimer() const
+{
+	return false;
+}
+
+void IconObject::drop(IconObject*)
+{
+}
+
diff --git a/src/Desktop/IconObject.h b/src/Desktop/IconObject.h
new file mode 100644
index 0000000..5c86247
--- /dev/null
+++ b/src/Desktop/IconObject.h
@@ -0,0 +1,240 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 IconObject_H
+#define IconObject_H
+
+#include "Counted.h"
+
+class IconClass;
+class IconInfo;
+//class FolderObserver;
+class Action;
+class Queue;
+class Folder;
+//class CommandObserver;
+class Editor;
+class Action;
+class Request;
+class Task;
+class Log;
+class MvQLogDialog;
+class Language;
+class Parameter;
+
+#include "Metview.h"
+#include "Path.h"
+#include "Dependancy.h"
+#include "IconObserver.h"
+
+class IconObject;
+class IconObjectH;
+
+
+class IconPosition
+{
+public:
+  	IconPosition(int x=0, int y=0) : x_(x), y_(y) {}
+ 	void setPosition(int x, int y) {x_=x; y_=y;}
+ 	int x() const {return x_;}
+ 	int y() const {return y_;}
+
+protected: 	
+	int x_;
+	int y_;
+};
+
+
+class IconObject : public virtual Counted 
+{
+public:
+	enum IconStatus {DefaultStatus,ReadyStatus,WaitingStatus,ErrorStatus};
+  
+  	IconObject(Folder*,const IconClass&,const string&,IconInfo*);
+	virtual ~IconObject();
+
+	virtual const string& name() const;
+	virtual const string& className() const;
+
+	virtual string dotName(const string&) const;
+	virtual string embeddedName(const string&) const;
+	virtual string fullName() const;
+
+	virtual string relativeName(IconObject*) const;
+	virtual string makeFullName(const string&) const;
+
+	virtual Path path() const;
+	// This Path method will only be all by the Shell Task.
+	// For all object it will call the path method.
+	// For Temporary Objects, it will return the PATH of the attached request.
+	// This is done to enable the visualisation of the MAGML Objects 
+	// without possible side effects! 
+	virtual Path pathForShellTask() const { return path(); }
+	virtual Path dotPath()  const;
+	virtual Path embeddedPath()  const;
+
+	virtual const IconClass& iconClass() const;
+	virtual const IconClass& editorClass() const;
+
+	virtual Folder*    parent()    const;
+	virtual Folder*    embeddedFolder(const string&,bool create = true)    const;
+	virtual Folder*    embeddedFolder(bool create = true)    const;
+	virtual bool       isEmbedded();
+	virtual bool       isFolder() {return false;}
+
+	// Info
+
+	virtual IconInfo& info() const;
+	virtual void saveInfo();
+	
+	IconPosition& tmpPos() {return tmpPos_;} 
+
+	virtual bool visible() const;
+
+	// Actions
+
+	virtual void doubleClick();
+	virtual void command(const string&);
+	virtual Task* action(const Action&);
+	virtual set<string> can();
+
+	virtual void toWastebasket();
+	virtual void duplicate();
+	virtual void removeFiles();
+	virtual void edit();
+	virtual void edit2();
+	virtual void showLog();
+
+	virtual void destroy();
+	virtual void empty();
+
+	virtual IconObject* clone(Folder*, bool update = false,int x=0, int y=0);
+
+	virtual void editor(Editor*);
+	virtual Editor* editor();
+	void raiseEditor();
+
+	virtual void logWindow(MvQLogDialog*);
+	virtual MvQLogDialog* logWindow();
+
+	virtual Request request() const=0;
+	virtual Request fullRequest() const;
+	virtual Language& language() const;
+        virtual Request requestForVerb(const string&) const;
+	virtual void request(const Request&)=0;
+
+	virtual string dropText() const;
+
+	virtual void drop(IconObject*);
+
+
+	virtual const set<DependancyH>& dependancies();
+
+	// Find
+
+	virtual IconObject* find(const vector<string>&);
+	virtual IconObject* find(const string&);
+
+
+	// Move
+
+	virtual void reparent(Folder*);
+	virtual bool checkNewName(const string&);
+	virtual bool rename(const string&);
+	virtual bool renamable() const;
+	virtual bool temporary() const;
+
+	void position(int,int);
+	virtual bool locked() const;
+	virtual bool isLink() const;
+	virtual bool isBrokenLink() const;
+	virtual bool isInTimer() const;
+	virtual void lock();
+
+	// 
+
+	void addObserver(IconObserver*);
+	void removeObserver(IconObserver*);
+
+	//
+
+	virtual void notifyWaiting();
+	virtual void notifyError();
+	virtual void notifyChanged();
+	virtual void notifyReady();
+	virtual void notifyOpened();
+	virtual void notifyClosed();
+	virtual void notifyDestroyed();
+
+
+	virtual bool sameAs(IconObject*);
+	virtual void touch();
+	//
+
+
+	virtual void createFiles();
+
+	// Status
+
+	virtual void created();
+	virtual void modified();
+
+	virtual Log& log();
+	virtual Path logPath();
+
+	// --- 
+	virtual vector<IconObjectH> subObjects(const string&,const Request&);	
+	virtual void setSubObjects(const string&,const vector<IconObjectH>&,Request&,bool clean=false);
+
+	static IconObject* search(const string& fullName);
+	static IconObject* search(IconObject&,const string& relativeName);
+	
+	IconStatus status() const {return status_;}
+	
+	
+	static vector<IconObject*> objects() {return objects_;}
+
+protected:
+	virtual void print(ostream&) const; 
+	virtual void reset();
+	
+	string           name_;
+	Folder*          parent_;
+	const IconClass& class_;
+	IconInfo*        info_;
+	Queue*           queue_;
+	Log*             log_;
+	Editor*          editor_;
+	MvQLogDialog*    logWindow_;
+	bool             locked_;
+	bool             link_;
+	IconPosition	 tmpPos_;	 		 
+	
+	set<DependancyH> dependancies_;
+	set<IconObserver*> observers_;
+	IconStatus status_;
+	
+	static vector<IconObject*> objects_;
+
+private:
+	// No copy allowed
+	IconObject(const IconObject&);
+	IconObject& operator=(const IconObject&);
+
+	friend ostream& operator<<(ostream& s,const IconObject& p)
+		{ p.print(s); return s; }
+
+};
+
+class IconObjectH : public  Handle<IconObject> {
+public:
+	IconObjectH(IconObject* o = 0) : Handle<IconObject>(o) {}
+};
+
+#endif
diff --git a/src/Desktop/IconObserver.h b/src/Desktop/IconObserver.h
new file mode 100644
index 0000000..1c5cfab
--- /dev/null
+++ b/src/Desktop/IconObserver.h
@@ -0,0 +1,29 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File IconObserver.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef IconObserver_H
+#define IconObserver_H
+
+class IconObject;
+
+class IconObserver 
+{
+public:
+	virtual void iconChanged(IconObject*) {}
+	virtual void iconDestroyed(IconObject*) {}
+	virtual void iconEdited(IconObject*) {}
+	virtual void iconClosed(IconObject*) {}
+
+};
+
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/Input.cc b/src/Desktop/Input.cc
new file mode 100644
index 0000000..9f5a475
--- /dev/null
+++ b/src/Desktop/Input.cc
@@ -0,0 +1,71 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Input.h"
+
+#include <QSocketNotifier>
+
+
+Input::Input():
+	file_(0),
+	notifier_(0)
+{
+}
+
+Input::~Input()
+{
+	stop();
+}
+
+void Input::stop()
+{
+	if(file_)
+	{
+		if(notifier_)
+		{
+		  	delete notifier_;
+			notifier_=0;
+		}	
+		file_ = 0;
+	}
+}
+
+void Input::start(FILE* f)
+{
+	if(file_ == 0 && f != 0)
+	{
+		file_ = f;
+		
+		int n=fileno(f);
+		
+		if(!notifier_)
+		{
+		  	//WARNING!!!!
+			//It works only on UNIX!!!
+		  	notifier_=new QSocketNotifier(n,QSocketNotifier::Read);
+		
+			connect(notifier_,SIGNAL(activated(int)),
+				this,SLOT(slotInput(int)));
+		}		
+	}
+}
+
+
+void Input::slotInput(int)
+{
+	char buf[1024];
+
+	if(fgets(buf,sizeof(buf),file_))
+	{
+		if(buf[0]) buf[strlen(buf)-1] = 0;
+		ready(buf);
+	}
+	else 
+		done(file_);
+}
diff --git a/src/Desktop/Input.h b/src/Desktop/Input.h
new file mode 100644
index 0000000..e1ac991
--- /dev/null
+++ b/src/Desktop/Input.h
@@ -0,0 +1,46 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 Input_H
+#define Input_H
+
+#include <QObject>
+
+#include <stdio.h>
+
+class QSocketNotifier;
+
+class Input : public QObject
+{
+Q_OBJECT  
+  
+public:
+	Input();
+	virtual ~Input(); 
+
+	void start(FILE*);
+	void stop();
+
+	virtual void ready(const char*) = 0;
+	virtual void done(FILE*)        = 0;
+
+protected slots:
+	void slotInput(int);    
+	
+private:
+	// No copy allowed
+	Input(const Input&);
+	Input& operator=(const Input&);
+
+	FILE*       file_;
+	QSocketNotifier* notifier_;
+
+};
+
+#endif
diff --git a/src/Desktop/InternalService.cc b/src/Desktop/InternalService.cc
new file mode 100644
index 0000000..e1d3e2a
--- /dev/null
+++ b/src/Desktop/InternalService.cc
@@ -0,0 +1,28 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "InternalService.h"
+#include "InternalTask.h"
+
+InternalService::InternalService():
+	Service("InternalDesktopService")
+{
+}
+
+InternalService::~InternalService()
+{
+}
+
+Task* InternalService::task(const Action& action,IconObject* o)
+{
+	return new InternalTask(action,o);
+}
+
+static InternalService internalService;
+
diff --git a/src/Desktop/InternalService.h b/src/Desktop/InternalService.h
new file mode 100644
index 0000000..41328a3
--- /dev/null
+++ b/src/Desktop/InternalService.h
@@ -0,0 +1,35 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File InternalService.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef InternalService_H
+#define InternalService_H
+
+#include "Service.h"
+
+class InternalService : public Service 
+{
+public:
+	InternalService();
+	virtual ~InternalService(); 
+
+private:
+	// No copy allowed
+	InternalService(const InternalService&);
+	InternalService& operator=(const InternalService&);
+
+	virtual Task* task(const Action&,IconObject*);
+
+};
+
+inline void destroy(InternalService**) {}
+
+#endif
diff --git a/src/Desktop/InternalTask.cc b/src/Desktop/InternalTask.cc
new file mode 100644
index 0000000..683cf9d
--- /dev/null
+++ b/src/Desktop/InternalTask.cc
@@ -0,0 +1,101 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Metview.h"
+#include "InternalTask.h"
+#include "IconObject.h"
+//#include "Log.h"
+#include "Request.h"
+#include "Dependancy.h"
+#include "IconFactory.h"
+
+//=================================================================
+
+InternalTask::InternalTask(const Action& action,IconObject* o):
+	action_(action),
+	object_(o),
+	error_(false),
+	waiting_(0)
+	
+{
+}
+
+InternalTask::~InternalTask()
+{
+	cout << "InternalTask::~InternalTask " << *object_ << endl;
+}
+
+void InternalTask::start()
+{
+	const set<DependancyH>& dep = object_->dependancies();
+
+	Action action("prepare","*");
+
+	for(set<DependancyH>::const_iterator j = dep.begin(); j != dep.end(); ++j)
+	{
+		Task* t = (*j)->action(action);
+		if(t) {
+			tasks_[t] = *j;
+			waiting_++;
+			t->add(this);
+		}
+	}
+	check();
+}
+
+void InternalTask::check()
+{
+	cout << *this << endl;
+
+	if(waiting_) 
+		return;
+
+	if(error_)
+	{
+		Task::failure();
+		return;
+	}
+
+	MvRequest r   = object_->fullRequest();
+	const char* null = 0;
+
+	if(null == r("_NAME"))    r("_NAME")    = object_->fullName().c_str();
+	if(null == r("_CLASS"))   r("_CLASS")   = object_->className().c_str();
+	if(null == r("_ACTION"))  r("_ACTION")  = action_.name().c_str();
+	Task::success(r);
+}
+
+void InternalTask::success(Task* t,const Request& r)
+{
+	cout << "InternalTask::success " << *t << endl;
+	tasks_[t]->success(r);
+	waiting_--;
+	check();
+}
+
+void InternalTask::failure(Task* t)
+{
+	cout << "InternalTask::failure " << *t << endl;
+	error_ = true;
+	tasks_[t]->failure();
+	waiting_--;
+	check();
+}
+
+void InternalTask::print(ostream& s) const
+{
+	s << "InternalTask[" 
+	  << "," 
+      << action_.name() 
+	  << ","  
+	  << action_.mode() 
+	  << ","
+      << *object_ 
+	  << "]";
+}
diff --git a/src/Desktop/InternalTask.h b/src/Desktop/InternalTask.h
new file mode 100644
index 0000000..27e9d72
--- /dev/null
+++ b/src/Desktop/InternalTask.h
@@ -0,0 +1,55 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File InternalTask.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef InternalTask_H
+#define InternalTask_H
+
+#include "Task.h"
+#include "Action.h"
+#include "ReplyObserver.h"
+#include "TaskObserver.h"
+#include "IconObject.h"
+#include "Dependancy.h"
+
+class InternalTask : public TaskObserver, public Task 
+{
+public:
+	InternalTask(const Action&,IconObject*);
+	virtual ~InternalTask(); 
+	
+	virtual void addContext (const Request&) { };
+
+protected:
+	 void print(ostream&) const; 
+	 
+private:
+	// No copy allowed
+	InternalTask(const InternalTask&);
+	InternalTask& operator=(const InternalTask&);
+
+	void check();
+	virtual void start();
+	virtual void success(Task*,const Request&);
+	virtual void failure(Task*);
+		
+	Action      action_;
+	IconObjectH object_;
+	bool        error_;
+	int         waiting_;
+
+	typedef map<TaskH,DependancyH> Map;
+	Map tasks_;
+};
+
+inline void destroy(InternalTask**) {}
+
+#endif
diff --git a/src/Desktop/Items.cc b/src/Desktop/Items.cc
new file mode 100644
index 0000000..efcf8b7
--- /dev/null
+++ b/src/Desktop/Items.cc
@@ -0,0 +1,100 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Items.h"
+
+#include "ConfigLoader.h"
+#include "Folder.h"
+#include "IconClass.h"
+#include "IconObject.h"
+#include "IconFactory.h"
+#include "Log.h"
+#include "Request.h"
+
+static map<string,Items*> items;
+
+Items::Items(request* r):
+	r_(r),
+	object_(0)
+{
+	items[get_value(r,"name",0)] = this;
+}
+
+Items::~Items()
+{
+}
+
+void Items::load(request* r)
+{
+  	new Items(r);
+}
+
+void Items::createAll()
+{  
+        for(map<string,Items*>::iterator it = items.begin() ; it != items.end(); it++)
+	{
+	  	it->second->object();
+	}	
+}  
+
+void Items::objects(vector<IconObject*> &ret)
+{
+	for(map<string,Items*>::iterator it = items.begin() ; it != items.end(); it++)
+	{
+	  	if(it->second->object())
+		  	ret.push_back(it->second->object());
+	}
+}	
+
+IconObject* Items::find(const string& a)
+{
+	// cout << "Items::find( " << a << endl;
+	map<string,Items*>::iterator j = items.find(a);
+	if(j == items.end())
+		return 0;
+	else
+		return (*j).second->object();
+}
+ 
+IconObject* Items::object()
+{
+	if(object_ != 0)
+		return object_;
+	
+	const char *kind = get_value(r_,"class",0);
+	const char *full = get_value(r_,"full_name",0);
+	const char *x    = get_value(r_,"x",0);
+	const char *y    = get_value(r_,"y",0);
+	const char *link = get_value(r_,"linked_to",0);
+	
+	object_ = IconObject::search(full); 
+	if(object_) return object_;
+
+	if(link)
+	{
+		Path path = Folder::top()->path();
+		path = path.add(full);
+		path.symlink(string(link));
+	}
+
+	
+	object_ = IconFactory::create(full,IconClass::find(kind));
+	/*if(object_) {
+		if(x && y) object_->parent()->position(object_,atol(x),atol(y));
+		return object_;
+	}*/
+
+	return object_;
+	
+	Log::error(0) << "Cannot create " << full << endl;
+	return 0;
+}
+ 
+  		
+static SimpleLoader<Items> loadClasses("special_folder",1);
diff --git a/src/Desktop/Items.h b/src/Desktop/Items.h
new file mode 100644
index 0000000..52d8c5a
--- /dev/null
+++ b/src/Desktop/Items.h
@@ -0,0 +1,47 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 Items_H
+#define Items_H
+
+#include <string>
+using std::string;
+
+#include "Metview.h"
+
+class IconObject;
+
+class Items {
+public:
+	Items(request*);
+	~Items(); 
+	
+	static void load(request*);
+	static void createAll();
+	static IconObject* find(const string&);
+	static void objects(vector<IconObject*>&);
+
+private:
+	Items(const Items&);
+	Items& operator=(const Items&);
+
+	IconObject* object();
+
+	request*    r_;	
+	IconObject* object_;
+};
+
+inline void destroy(Items**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(Items);
+//#endif
+
+#endif
diff --git a/src/Desktop/Language.cc b/src/Desktop/Language.cc
new file mode 100644
index 0000000..ffa489b
--- /dev/null
+++ b/src/Desktop/Language.cc
@@ -0,0 +1,271 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 Language_H
+#include "Language.h"
+#endif
+
+#ifndef Path_H
+#include "Path.h"
+#endif
+
+#ifndef IconClass_H
+#include "IconClass.h"
+#endif
+
+#ifndef Parameter_H
+#include "Parameter.h"
+#endif
+
+
+typedef map<string,Language*> Map;
+static Map languages;
+
+static map<string,request*> lang_cache;
+static map<string,rule*>    rule_cache;
+
+
+Language::Language(const IconClass* c):
+	inited_(false),
+	lang_(0),
+	rule_(0),
+	class_(c),
+	flags_(0)
+{
+	languages[c->name()] = this;
+	if(languages.size() == 1)
+		expand_flags(EXPAND_2ND_NAME);
+}
+
+Language::~Language()
+{
+	// Not called
+	free_all_requests(lang_);
+}
+const char* Language::getInfo()  const
+{
+	return lang_->info ? lang_->info : "";
+}
+
+const char* Language::getKind() const
+{
+	return lang_->kind;
+}
+
+Language& Language::find(const IconClass* c)
+{
+	Map::iterator j = languages.find(c->name());
+	if(j != languages.end())
+		return *(*j).second;
+	return *(new Language(c));
+}
+
+void Language::init()
+{
+	if(inited_) return;
+	
+	
+	inited_ = true;
+
+
+	string langs = class_->definitionFile().str();
+	map<string,request*>::iterator j = lang_cache.find(langs);
+	if(j != lang_cache.end())
+		lang_ = (*j).second;
+	else
+	{
+		cout << "read " << langs << endl;
+		lang_ = read_language_file(langs.c_str());
+		lang_cache[langs] = lang_;
+	}
+
+	string rules = class_->rulesFile().str();
+	map<string,rule*>::iterator k = rule_cache.find(rules);
+	if(k != rule_cache.end())
+		rule_ = (*k).second;
+	else
+	{
+		cout << "read " << rules << endl;
+		rule_ = read_check_file(rules.c_str());
+		rule_cache[rules] = rule_;
+	}
+	
+	flags_ = class_->expandFlags();
+
+	// Position to the right request
+	while(lang_ && !(class_->name() == lang_->name) )
+		lang_ = lang_->next;
+
+	if(lang_ == 0) {
+		lang_ = empty_request(0);
+	}
+
+	// Create the Parameters
+
+	parameter *p = lang_ ? lang_->params :0 ;
+	while(p)
+	{
+		params_.push_back(new Parameter(*this,p));
+		p = p->next;
+	}
+}
+
+
+Request Language::expand(const Request& r,long flags,bool ruleFlag)
+{
+	Request result = r;
+
+	init();
+
+	if(lang_ == 0)
+		return result;
+
+	reset_language(lang_);
+	long save = expand_flags(flags);
+	request *a;
+	if ( ruleFlag )
+		a = expand_all_requests(lang_,rule_,result);
+	else
+		a = expand_all_requests(lang_,0,result);
+
+	expand_flags(save);
+
+
+	if(a == 0)
+		return result;
+
+	return MvRequest(a,false);
+}
+
+Request Language::expand(const Request& r)
+{
+	return expand(r,flags_);
+}
+
+
+vector<string> Language::interfaces(const char* name)
+{
+	init();
+
+	// Need something a little bit more "C++"
+
+	vector<string> result;
+	parameter *p = lang_->params;
+	while(p)
+	{
+		if(p->interface)
+		{
+			const char* q = get_value(p->interface,"interface",0);
+			if(q && strcmp(q,name) == 0)
+				result.push_back(p->name);
+		}
+		p = p->next;
+	}
+
+	return result;
+}
+
+Request Language::interfaceRequest(const char* name) 
+{
+	init();
+  	parameter *p = lang_->params;
+	while(p)
+	{
+		if(p->interface)
+		{			
+		  	if(p->name && strcmp(p->name,name) ==0)
+			{
+				return Request(p->interface);	
+			}
+		}
+		
+		p = p->next;	
+	}
+	
+  	return Request();
+}
+
+void Language::scan(LanguageScanner& s)
+{
+	init();
+	for(vector<Parameter*>::iterator j = params_.begin(); j != params_.end(); ++j)
+		s.next(*(*j));
+
+}
+
+static value *find_values(const request *r,char *parname)
+{
+    if(r)
+    {
+        parameter *p = r->params;
+        while(p)
+        {
+            if(strcmp(p->name,parname) == 0)
+                return p->values;
+            p = p->next;
+        }
+    }
+    return NULL;
+
+}
+
+Language::Language(const IconClass* c, const Request& def) :
+	inited_(true),
+	rule_(0),
+	class_(c)
+{
+    const char *name, *ui;
+    parameter *param, *lastparam = NULL;
+    value     *val   = NULL;
+
+    const request* r = def;
+ 
+    lang_ = empty_request(c->name().c_str());
+    languages[c->name()] = this;
+
+    while (r) {
+        name = get_value(r, "name", 0);
+        if (!name) break;
+        param = new_parameter(strcache(name), NULL);
+        ui   = r->name;
+        val = find_values(r, "values");
+        param->values = clone_all_values(val);
+        val = find_values(r, "default");
+        param->default_values = clone_all_values(val);
+        param->current_values = clone_all_values(val);
+        param->interface = clone_one_request(r);
+
+        set_value(param->interface, "interface", ui);
+        strfree(param->interface->name);
+        param->interface->name = strcache(name);
+
+        if (lastparam) lastparam->next = param;
+        else lang_->params = param;
+        lastparam = param;
+
+        r = r->next;
+    }
+   	flags_ = class_->expandFlags();
+
+
+
+	// Position to the right request
+	while(lang_ && !(class_->name() == lang_->name) )
+		lang_ = lang_->next;
+
+	// Create the Parameters
+
+	parameter *p = lang_ ? lang_->params :0 ;
+	while(p)
+	{
+		params_.push_back(new Parameter(*this,p));
+		p = p->next;
+	}
+
+}
diff --git a/src/Desktop/Language.h b/src/Desktop/Language.h
new file mode 100644
index 0000000..769914a
--- /dev/null
+++ b/src/Desktop/Language.h
@@ -0,0 +1,135 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File Language.h
+// Baudouin Raoult - ECMWF Aug 99
+
+#ifndef Language_H
+#define Language_H
+
+#ifndef Path_H
+#include "Path.h"
+#endif
+
+#ifndef Request_H
+#include "Request.h"
+#endif
+
+class IconClass;
+class Parameter;
+
+class LanguageScanner {
+public:
+	virtual void next(const Parameter&) = 0;
+};
+
+
+class Language {
+public:
+
+// -- Exceptions
+	// None
+
+// -- Contructors
+
+	Language(const IconClass*);
+	Language(const IconClass*, const Request&);
+
+// -- Destructor
+
+	~Language(); // Change to virtual if base class
+
+// -- Convertors
+	// None
+
+// -- Operators
+	// None
+
+// -- Methods
+	const char* getInfo() const;
+	const char* getKind() const;
+
+	Request expand(const Request&);
+	Request expand(const Request&,long,bool=true);
+	void scan(LanguageScanner&);
+	vector<string> interfaces(const char*);
+	Request interfaceRequest(const char*); 
+
+// -- Overridden methods
+	// None
+
+// -- Class members
+	// None
+
+// -- Class methods
+	
+	static Language& find(const IconClass*);
+
+protected:
+
+// -- Members
+	// None
+
+// -- Methods
+	
+	// void print(ostream&) const; // Change to virtual if base class	
+
+// -- Overridden methods
+	// None
+
+// -- Class members
+	// None
+
+// -- Class methods
+	// None
+
+private:
+
+// No copy allowed
+
+	Language(const Language&);
+	Language& operator=(const Language&);
+
+// -- Members
+
+	bool               inited_;
+	request*           lang_;
+	rule*              rule_;
+	long               flags_;
+	const IconClass*   class_;
+	vector<Parameter*> params_;
+
+// -- Methods
+
+	void init();
+
+// -- Overridden methods
+	// None
+
+// -- Class members
+	// None
+
+// -- Class methods
+	// None
+
+// -- Friends
+
+	//friend ostream& operator<<(ostream& s,const Language& p)
+	//	{ p.print(s); return s; }
+
+};
+
+inline void destroy(Language**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(Language);
+//#endif
+
+#endif
diff --git a/src/Desktop/LineFactory.cc b/src/Desktop/LineFactory.cc
new file mode 100644
index 0000000..f14527c
--- /dev/null
+++ b/src/Desktop/LineFactory.cc
@@ -0,0 +1,49 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "LineFactory.h"
+
+#include "MvQRequestPanelLine.h"
+#include "Parameter.h"
+#include "Request.h"
+
+#include "MvQTextLine.h"
+
+static map<string,LineFactory*>* makers = 0;
+
+LineFactory::LineFactory(const string& name)
+{
+	if(makers == 0)
+		makers = new map<string,LineFactory*>;
+
+	// Put in reverse order...
+	(*makers)[name] = this;
+}
+
+LineFactory::~LineFactory()
+{
+	// Not called
+}
+
+MvQRequestPanelLine* LineFactory::create(RequestPanel& e,const Parameter& p)
+{
+	const char* o = p.interface();
+	if(o != 0)
+	{
+		map<string,LineFactory*>::iterator j = makers->find(o);
+		if(j != makers->end())
+			return (*j).second->make(e,p);
+	}
+
+	//Default
+	return  new MvQTextLine(e,p);
+	//return new MvQLineEditItem(e,p) ;
+	
+}
+
diff --git a/src/Desktop/LineFactory.h b/src/Desktop/LineFactory.h
new file mode 100644
index 0000000..afe45f9
--- /dev/null
+++ b/src/Desktop/LineFactory.h
@@ -0,0 +1,49 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File LineFactory.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef LineFactory_H
+#define LineFactory_H
+
+#include <string>
+using std::string;
+
+#include "mars.h"
+
+class MvQRequestPanelLine;
+
+class RequestPanel;
+class Parameter;
+
+class LineFactory 
+{
+public:
+	LineFactory(const string&);
+	virtual ~LineFactory();
+
+	virtual MvQRequestPanelLine* make(RequestPanel&,const Parameter&) = 0;
+	static MvQRequestPanelLine* create(RequestPanel&,const Parameter&);
+
+private:
+	LineFactory(const LineFactory&);
+	LineFactory& operator=(const LineFactory&);
+
+};
+
+template<class T>
+class LineMaker : public LineFactory {
+	MvQRequestPanelLine* make(RequestPanel& e,const Parameter& p) { return new T(e,p); }
+public:
+	LineMaker(const string& name) : LineFactory(name) {}
+};
+
+
+#endif
diff --git a/src/Desktop/Log.cc b/src/Desktop/Log.cc
new file mode 100644
index 0000000..90ba3be
--- /dev/null
+++ b/src/Desktop/Log.cc
@@ -0,0 +1,116 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Log.h"
+
+#include "Folder.h"
+
+#include <errno.h>
+#include <inc_iostream.h>
+
+#include "TeeStream.h"
+#include "IconObject.h"
+
+
+// which platform require this one?
+// (not SGI, and Linux get compiler errors
+//  because of different types...!)
+//extern char *sys_errlist[];
+extern int sys_nerr;
+
+
+Log::Log(IconObject* o):
+	path_(::marstmp()),
+	object_(o)
+{
+}
+
+Log::~Log()
+{
+	path_.remove();
+}
+
+ostream& Log::global()
+{
+	static ostream* g = 0;
+	if(g == 0)
+	{
+		g = &cout; // Avoid recursion
+		string p = Folder::top()->logPath().str();
+		g = new ofstream(p.c_str(),ios::app);
+		//Folder::top()->showLog();
+	}
+	return *g;
+}
+
+Log::operator ostream&()
+{
+	if(tee_.get() == 0)
+	{
+	
+		auto_ptr<ostream> o(new ofstream(path_.str().c_str(),ios::app));
+		out_ = o;
+		
+		auto_ptr<ostream> t(new TeeStream(global(),*out_));
+		tee_ = t;
+
+
+	}
+
+	global() << '['  << object_->name() << "] ";
+
+	return *tee_;
+}
+
+const Path& Log::path()
+{
+	return path_;
+}
+
+ostream& Log::syserr(ostream& s)
+{
+    int e = errno;
+   
+    if(e>0 && e < sys_nerr)
+        s << " (" << sys_errlist[e] << ") " ;
+    else
+        s << " (errno = " << e << ") ";
+    return s;
+}
+
+ostream& Log::error(IconObject* o)
+{
+	return info(o);
+}
+
+ostream& Log::info(IconObject* o)
+{
+	if(o == 0) o = Folder::top();
+	return o->log();
+}
+
+ostream& Log::warning(IconObject* o)
+{
+	return info(o);
+}
+
+ostream& Log::info(const string& p)
+{
+	return global() << '[' << p << "] ";	
+}
+
+ostream& Log::warning(const string& p)
+{
+	return info(p);
+}
+
+ostream& Log::error(const string& p)
+{
+	return info(p);
+}
diff --git a/src/Desktop/Log.h b/src/Desktop/Log.h
new file mode 100644
index 0000000..b1f45c2
--- /dev/null
+++ b/src/Desktop/Log.h
@@ -0,0 +1,59 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 Log_H
+#define Log_H
+
+#include "inc_iostream.h"
+#include "inc_stl.h"
+
+#include "Path.h"
+
+class IconObject;
+
+class Log 
+{
+public:
+	Log(IconObject*);
+	~Log(); 
+
+	operator ostream&() ;
+	const Path& path();
+
+	static ostream& info(IconObject*);
+	static ostream& warning(IconObject*);
+	static ostream& error(IconObject*);
+	static ostream& syserr(ostream&);
+
+	static ostream& info(const string&);
+	static ostream& warning(const string&);
+	static ostream& error(const string&);
+
+private:
+	// No copy allowed
+	Log(const Log&);
+	Log& operator=(const Log&);
+
+	Path              path_;
+	auto_ptr<ostream> out_;
+	auto_ptr<ostream> tee_;
+	IconObject* object_;
+
+	static ostream& global();
+
+};
+
+inline void destroy(Log**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(Log);
+//#endif
+
+#endif
diff --git a/src/Desktop/MacroGuiObject.cc b/src/Desktop/MacroGuiObject.cc
new file mode 100644
index 0000000..55cd2d7
--- /dev/null
+++ b/src/Desktop/MacroGuiObject.cc
@@ -0,0 +1,41 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MacroGuiObject.h"
+
+static string next_name()
+{
+	static int i = 0;
+	char buf[80];
+	sprintf(buf,"macro_lang%04d",i++);
+	return buf;
+}
+
+
+MacroGuiObject::MacroGuiObject(const Request& lang,const IconClass* super):
+	IconClass(next_name(), empty_request(""),super),
+	lang_(this, lang),
+	maker_(name())
+{
+}
+
+MacroGuiObject::~MacroGuiObject()
+{
+}
+
+Language& MacroGuiObject::language() const
+{ 
+	MacroGuiObject* c = const_cast<MacroGuiObject*>(this);
+	return c->lang_; 
+}
+
+string MacroGuiObject::editor() const
+{
+	return "TemporaryEditor";
+}
diff --git a/src/Desktop/MacroGuiObject.h b/src/Desktop/MacroGuiObject.h
new file mode 100644
index 0000000..e784963
--- /dev/null
+++ b/src/Desktop/MacroGuiObject.h
@@ -0,0 +1,39 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MacroGuiObject_H
+#define MacroGuiObject_H
+
+#include "Metview.h"
+#include "IconClass.h"
+#include "Language.h"
+#include "StandardObject.h"
+#include "IconFactory.h"
+
+class MacroGuiObject : public IconClass 
+{
+public:
+	MacroGuiObject(const Request& lang,const IconClass* = 0);
+	virtual ~MacroGuiObject(); 
+
+private:
+	// No copy allowed
+	MacroGuiObject(const MacroGuiObject&);
+	MacroGuiObject& operator=(const MacroGuiObject&);
+
+	virtual Language& language() const;
+	virtual string editor() const;
+	
+	Language         lang_;
+	IconMaker<StandardObject> maker_;
+};
+
+inline void destroy(MacroGuiObject**) {}
+
+#endif
diff --git a/src/Desktop/MacroObject.cc b/src/Desktop/MacroObject.cc
new file mode 100644
index 0000000..0205483
--- /dev/null
+++ b/src/Desktop/MacroObject.cc
@@ -0,0 +1,32 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MacroObject.h"
+#include "IconFactory.h"
+#include "Request.h"
+
+MacroObject::MacroObject(Folder* parent,const IconClass& kind,
+	const string& name,IconInfo* info):
+	FileObject(parent,kind,name,info)
+{
+}
+
+MacroObject::~MacroObject()
+{
+}
+
+void MacroObject::createFiles()
+{
+	IconObject::createFiles();
+	Path p = path();
+	if(!p.exists())
+		p.saveText("#Metview Macro");
+}
+
+static IconMaker<MacroObject> maker("Macro");
diff --git a/src/Desktop/MacroObject.h b/src/Desktop/MacroObject.h
new file mode 100644
index 0000000..56be641
--- /dev/null
+++ b/src/Desktop/MacroObject.h
@@ -0,0 +1,32 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MacroObject_H
+#define MacroObject_H
+
+#include "FileObject.h"
+
+#include <string>
+using std::string;
+
+class MacroObject : public FileObject {
+public:
+	MacroObject(Folder* parent,
+		const IconClass& kind, const string& name,
+		IconInfo* info);
+
+	virtual ~MacroObject(); 
+
+private:	
+	virtual void createFiles();
+};
+
+inline void destroy(MacroObject**) {}
+
+#endif
diff --git a/src/Desktop/MacroParamEditor.cc b/src/Desktop/MacroParamEditor.cc
new file mode 100644
index 0000000..8a23063
--- /dev/null
+++ b/src/Desktop/MacroParamEditor.cc
@@ -0,0 +1,247 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MacroParamEditor.h"
+
+#include <QDebug>
+#include <QLabel>
+#include <QScrollArea>
+#include <QVBoxLayout>
+
+#include "EditorFactory.h"
+#include "IconObject.h"
+#include "IconFactory.h"
+#include "RequestPanel.h"
+#include "IconClass.h"
+#include "MacroParamObject.h"
+
+#include "MvQIconHolder.h"
+#include "MvQRequestPanelWidget.h"
+
+MvQMacroParamDropWidget::MvQMacroParamDropWidget(MacroParamEditor* owner,const vector<string>& classes,QWidget* parent) : 
+   QWidget(parent),
+   owner_(owner)
+{
+	QVBoxLayout *layout=new QVBoxLayout(this);
+	layout->setSpacing(3); 
+	layout->setContentsMargins(1,1,1,1);
+
+	model_=new MvQIconHolderModel(classes,this);
+	view_ = new MvQIconHolderView(model_,0,this);
+	
+	QString title(tr("Icons: "));
+	for(vector<string>::const_iterator it = classes.begin(); it != classes.end(); ++it)
+	{	
+	  	if(it != classes.begin())
+		{  
+			title+=", ";	  
+		}  
+	  	title+=QString::fromStdString(IconClass::find(*it).defaultName());
+	}
+			
+	QLabel *titleLabel=new QLabel(title,this);	
+	
+	layout->addWidget(titleLabel);
+	layout->addWidget(view_);
+		  
+	connect(view_,SIGNAL(edited()),
+		this,SLOT(slotHolderEdited()));			
+}
+
+
+void MvQMacroParamDropWidget::reset(IconObjectH obj)
+{
+	vector<IconObjectH> lst;
+	lst.push_back(obj);
+	
+	//This will clear the unwanted iconobjects!!
+	model_->setIcons(lst); 
+}  
+
+
+void MvQMacroParamDropWidget::slotHolderEdited()
+{
+	vector<IconObjectH> vals;
+	model_->iconObjects(vals);
+	
+	if(vals.size() > 0)
+		owner_->editMacro(vals[0]);
+	else
+	  	owner_->editMacro(0);
+}
+
+//==============================
+//
+// MacroParamEditor
+//
+//==============================
+
+MacroParamEditor::MacroParamEditor(const IconClass& kind,const string& name) :
+  MvQEditor(kind,name),
+  paramPanelArea_(0),
+  paramPanel_(0)
+{
+	//Macro drop panel
+	vector<string> mc;
+	mc.push_back("MACRO");
+	macroDropWidget_=new MvQMacroParamDropWidget(this,mc,this);
+	centralLayout_->addWidget(macroDropWidget_);
+	
+	centralLayout_->addStretch(1);
+	
+  	//Params panel
+	classes_.push_back(kind.name());
+}
+
+MacroParamEditor::~MacroParamEditor()
+{
+  	deleteParamPanel();
+}
+
+void MacroParamEditor::createParamPanel()
+{	
+  	deleteParamPanel();
+	  	 		
+  	if(!macro_)
+	 	return;
+	
+  	centralLayout_->setStretch(1,0);
+		
+	paramPanelArea_=new QScrollArea(this);
+	paramPanelArea_->setWidgetResizable(true);	
+	centralLayout_->addWidget(paramPanelArea_,1);
+	
+	MvQRequestPanelWidget* w=new MvQRequestPanelWidget(classes_,this);
+	paramPanelArea_->setWidget(w);
+	
+	paramPanel_=new RequestPanel(state_->iconClass(),w,this);
+	paramPanel_->reset(state_->iconObject());
+}
+
+void MacroParamEditor::deleteParamPanel()
+{
+	if(paramPanelArea_)
+	{
+	  	centralLayout_->removeWidget(paramPanelArea_);
+	  	delete paramPanelArea_;
+		paramPanelArea_=0;
+		centralLayout_->setStretch(1,1);		
+	}	
+}
+
+
+MacroParamObject* MacroParamEditor::macroParamObject() const
+{
+	IconObject* cur = current_;
+	return  static_cast<MacroParamObject*>(cur);
+}
+
+IconObject* MacroParamEditor::copy(const string& name)
+{
+    /*IconObject* o = IconFactory::create(name, class_);
+    panel_->apply();
+    o->request(panel_->request());
+    return o;*/
+    return 0;
+}
+
+void MacroParamEditor::apply()
+{
+	if(paramPanelArea_)
+	{  
+  		paramPanel_->apply();
+		state_->request(paramPanel_->request());
+		macroParamObject()->state(state_);
+	}
+	else
+	{
+		MvRequest r;
+		state_->request(r);
+		macroParamObject()->state(state_);
+	}	
+	
+}
+
+void MacroParamEditor::reset()
+{   
+	MacroParamObject* obj = macroParamObject();
+	state_ = obj->state();
+	editMacro(state_->macro());
+}
+
+void MacroParamEditor::close()
+{      
+   	if ( macro_ ) macro_->removeObserver(this);
+   	macro_ = 0;
+   	deleteParamPanel();
+   	state_ = 0;
+}
+
+void MacroParamEditor::editMacro(IconObjectH macro)
+{     
+	if(macro_)
+		macro_->removeObserver(this);
+	
+	macro_ = macro;
+
+	if(macro) 
+	{
+		macroDropWidget_->reset(macro);
+		//macroArea_.add(macro);      
+		macro_->addObserver(this);
+	}
+
+	state_->macro(macro);
+
+	//Update param panel
+	createParamPanel();
+	
+}
+
+
+void MacroParamEditor::replace(IconObjectH obj)
+{
+    	//panel_->replace(obj);
+}
+
+void MacroParamEditor::merge(IconObjectH obj)
+{
+     	//panel_->merge(obj); 
+}
+
+void MacroParamEditor::slotIconDropped(IconObject* obj)
+{	
+	merge(obj);	 
+}  
+
+void MacroParamEditor::iconEdited(IconObject* o)
+{
+    	qDebug() << "edited";
+  	//macroArea_.openIcon(o);
+}
+
+void MacroParamEditor::iconChanged(IconObject* o)
+{
+	qDebug() << "changed";
+    	//editMacro(o);
+}
+
+void MacroParamEditor::iconDestroyed(IconObject* o)
+{
+    	qDebug() << "destroyed";
+	//editMacro(0);
+}
+
+void MacroParamEditor::iconClosed(IconObject* o)
+{
+     	qDebug() << "closed";
+     	//macroArea_.closeIcon(o);
+}
+
+static EditorMaker<MacroParamEditor> editorMaker("TwoLevelsEditor");
diff --git a/src/Desktop/MacroParamEditor.h b/src/Desktop/MacroParamEditor.h
new file mode 100644
index 0000000..dd79006
--- /dev/null
+++ b/src/Desktop/MacroParamEditor.h
@@ -0,0 +1,99 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MacroParamEditor_H
+#define MacroParamEditor_H
+
+#include "MvQEditor.h"
+
+#include "Parameter.h"
+#include "TaskObserver.h"
+#include "EditorObserver.h"
+#include "IconObject.h"
+#include "MacroParamState.h"
+
+class QScrollArea;
+
+class RequestPanel;
+class MacroParamEditor;
+class MacroParamObject;
+
+class MvQIconHolderModel;
+class MvQIconHolderView;
+
+ 
+class MvQMacroParamDropWidget : public QWidget
+{
+Q_OBJECT
+  
+public:
+	MvQMacroParamDropWidget(MacroParamEditor *,const vector<string>&,QWidget* parent=0); 
+	void reset(IconObjectH);
+	
+public slots:
+	void slotHolderEdited();
+
+protected:	
+	MacroParamEditor *owner_;
+	MvQIconHolderModel* model_;
+	MvQIconHolderView* view_;
+};
+
+class MacroParamEditor : public MvQEditor, public IconObserver
+{
+Q_OBJECT  
+  
+public:
+	MacroParamEditor(const IconClass&,const string&);
+	virtual ~MacroParamEditor();
+	       
+	void   editMacro(IconObjectH);
+	IconObject* macro() const;
+
+public slots:
+	void slotIconDropped(IconObject*);
+
+protected: 	
+	void readSettings(QSettings&) {};
+	void writeSettings(QSettings&) {};
+  
+private:
+	// No copy allowed
+	MacroParamEditor(const MacroParamEditor&);
+	MacroParamEditor& operator=(const MacroParamEditor&);
+
+	MacroParamObject* macroParamObject() const;
+	void createParamPanel();
+	void deleteParamPanel();
+	
+	virtual void apply();
+	virtual void reset();
+	virtual void close();
+	virtual void replace(IconObjectH);
+	virtual void merge(IconObjectH);
+
+	virtual IconObject* copy(const string&); 	
+	
+	virtual void iconEdited(IconObject*);
+	virtual void iconClosed(IconObject*);
+	virtual void iconChanged(IconObject*);
+	virtual void iconDestroyed(IconObject*);
+
+	MvQMacroParamDropWidget* macroDropWidget_;
+	QScrollArea*             paramPanelArea_;
+	RequestPanel*	   paramPanel_;
+	MacroParamStateH   state_;
+	IconObjectH        macro_;
+	vector<string> classes_;
+
+};
+
+inline void destroy(MacroParamEditor**) {}
+
+#endif
diff --git a/src/Desktop/MacroParamObject.cc b/src/Desktop/MacroParamObject.cc
new file mode 100644
index 0000000..f9b822c
--- /dev/null
+++ b/src/Desktop/MacroParamObject.cc
@@ -0,0 +1,108 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MacroParamObject.h"
+
+#include "IconFactory.h"
+#include "IconClass.h"
+
+MacroParamObject::MacroParamObject(Folder* parent,const IconClass& kind,
+	const string& name,IconInfo* info):
+	StandardObject(parent,kind,name,info)
+{
+}
+
+MacroParamObject::~MacroParamObject()
+{
+}
+
+void MacroParamObject::state(MacroParamState* state)
+{
+	IconObjectH macro = state->macro();
+
+	Request r("MACROPARAM");
+	if(macro)
+		r("MACRO") = relativeName(macro).c_str();
+
+	r = r + state->request();
+
+	r.save(path());
+}
+
+MacroParamState* MacroParamObject::state() const
+{
+	MacroParamObject* self = const_cast<MacroParamObject*>(this);
+	//if(state_ == 0)
+	{
+	    IconObject* macro = 0;
+
+	    Request r(path());
+	    const char *name = r("MACRO");
+	    if(name)
+	    {
+		string fullName  = makeFullName(name);
+		macro =  IconObject::search(fullName);
+	    }
+
+	    self->state_ = new MacroParamState(self,macro,r.advance());
+	}
+
+	return state_;
+}
+
+Language& MacroParamObject::language() const
+{
+    return state()->iconClass().language();
+}
+
+Request MacroParamObject::fullRequest() const
+{
+    Request r = StandardObject::fullRequest();
+
+    Request s(path());
+    const char *name = s("MACRO");
+    if(name) {
+	string fullName  = makeFullName(name);
+	IconObject* macro =  IconObject::search(fullName);
+	if(macro)
+		s("MACRO") = macro->request();
+    }
+
+
+    s =  s.justOneRequest() + r;
+    
+    s.print();
+    r.print();
+    
+    return s + r;
+}
+
+Request MacroParamObject::request() const
+{
+    Request r(path());
+    r.advance();
+
+    // For compatibility with old stuff
+    Request s(iconClass().name());
+    s.mars_merge(r);
+    
+    s.print();
+    
+    return s;
+}
+
+void MacroParamObject::request(const Request& r)
+{
+    Request s(path());
+    s =  s.justOneRequest() + r;
+    s.save(path());
+}
+
+
+static IconMaker<MacroParamObject> maker("MACROPARAM");
diff --git a/src/Desktop/MacroParamObject.h b/src/Desktop/MacroParamObject.h
new file mode 100644
index 0000000..095fa7e
--- /dev/null
+++ b/src/Desktop/MacroParamObject.h
@@ -0,0 +1,47 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MacroParamObject_H
+#define MacroParamObject_H
+
+#include "StandardObject.h"
+
+#include <string>
+using std::string;
+
+#include "MacroParamState.h"
+
+class MacroParamObject : public StandardObject 
+{
+public:
+	MacroParamObject(Folder* parent,
+		const IconClass& kind, const string& name,
+		IconInfo* info);
+	virtual ~MacroParamObject(); 
+	
+	MacroParamState* state() const;
+	void state(MacroParamState*);
+
+private:
+	// No copy allowed
+	MacroParamObject(const MacroParamObject&);
+	MacroParamObject& operator=(const MacroParamObject&);
+
+	Language& language() const;
+	Request fullRequest() const;
+	void request(const Request&);
+	Request request() const;
+	
+	
+	MacroParamStateH state_;
+};
+
+inline void destroy(MacroParamObject**) {}
+
+#endif
diff --git a/src/Desktop/MacroParamState.cc b/src/Desktop/MacroParamState.cc
new file mode 100644
index 0000000..9873f5b
--- /dev/null
+++ b/src/Desktop/MacroParamState.cc
@@ -0,0 +1,110 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MacroParamState.h"
+#include "MacroGuiObject.h"
+//#include "Log.h"
+#include "IconFactory.h"
+
+MacroParamState::MacroParamState(IconObject* o,IconObject* m,const Request& r):
+	owner_(o),
+	macro_(m),
+	request_("MACROPARAM"),
+	class_(0)
+{
+	request_.mars_merge(r);
+}
+
+MacroParamState::~MacroParamState()
+{
+	delete class_;
+}
+
+IconObject* MacroParamState::macro() const
+{
+	return macro_;
+}
+
+Request MacroParamState::request() const
+{
+	return temp_ ? temp_->request() : request_;
+}
+
+void MacroParamState::request(const Request& r)
+{
+	request_ = r;
+	temp_ = 0;
+}
+
+IconObject* MacroParamState::iconObject()
+{
+	if(!temp_)
+		temp_ = IconFactory::createTemporary(owner_,request_,&iconClass());
+
+	return temp_;
+}
+
+void MacroParamState::macro(IconObject* macro)
+{
+	if(macro_ != macro)
+		macro_ = macro;
+
+	temp_  = 0;
+	delete class_;
+	class_ = 0;
+}
+
+
+Request MacroParamState::interface() const
+{
+	Action action("edit","*");
+	MvRequest r   = requests();
+
+
+
+	r("_NAME")    = owner_->fullName().c_str();
+	r("_CLASS")   = owner_->iconClass().name().c_str();
+	r("_ACTION")  = "edit";
+	r("_SERVICE") = "macro";
+
+	r.print();
+
+	int error;
+	Request result = MvApplication::waitService("macro",r,error);
+
+	result.print();
+	return result;
+
+}
+
+Request MacroParamState::requests() const
+{
+	if(!macro_)
+	{
+		//Log::error(owner_) << "Missing macro icon" << endl;
+		return Request("");
+	}
+
+	Request r("MACROPARAM");
+	r("MACRO") = macro_->fullRequest();
+
+	return r + request_;
+}
+
+const IconClass& MacroParamState::iconClass()
+{
+    if(!class_)
+    {
+        Request i = interface();
+        class_ = new MacroGuiObject(i,&owner_->iconClass());
+    }
+    return *class_;
+}
+
+
diff --git a/src/Desktop/MacroParamState.h b/src/Desktop/MacroParamState.h
new file mode 100644
index 0000000..df827f3
--- /dev/null
+++ b/src/Desktop/MacroParamState.h
@@ -0,0 +1,55 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File MacroParamState.h
+// Baudouin Raoult - ECMWF Jun 00
+
+#ifndef MacroParamState_H
+#define MacroParamState_H
+
+#include "Request.h"
+#include "IconObject.h"
+
+class MacroParamState : public Counted 
+{
+public:
+	MacroParamState(IconObject*,IconObject*,const Request&);
+	~MacroParamState();
+
+	const IconClass& iconClass();
+	IconObject* iconObject();
+
+	IconObject* macro() const;
+	void macro(IconObject*);
+
+	Request request() const;
+	void request(const Request&);
+
+private:
+	// No copy allowed
+	MacroParamState(const MacroParamState&);
+	MacroParamState& operator=(const MacroParamState&);
+
+	Request requests() const;
+	Request interface() const;
+	
+	IconObjectH owner_;
+	IconObjectH temp_;
+	IconObjectH macro_;
+	Request     request_;
+	IconClass*  class_;
+
+};
+
+class MacroParamStateH : public  Handle<MacroParamState> {
+public:
+	MacroParamStateH(MacroParamState* o = 0) : Handle<MacroParamState>(o) {}
+};
+
+#endif
diff --git a/src/Desktop/Makefile.am b/src/Desktop/Makefile.am
new file mode 100644
index 0000000..5c2ef45
--- /dev/null
+++ b/src/Desktop/Makefile.am
@@ -0,0 +1,344 @@
+include $(top_srcdir)/aux_build/autotroll.mk
+
+bin_PROGRAMS = bin/Desktop
+
+bin_Desktop_SOURCES  = MvMainQtBrowser.cc \
+           MvQ.cc \
+	   MvQIconFolderViewBase.cc \
+           MvQBookmarks.cc \
+           MvQBoolLine.cc \
+           MvQClassBrowser.cc \
+           MvQColourHelp.cc \
+           MvQColourLine.cc \
+ 	   MvQColourListLine.cc \
+           MvQComboBoxLine.cc \
+	   MvQContextMenu.cc \
+           MvQDesktop.cc \
+           MvQDesktopSettings.cc \
+           MvQDetailedFolderView.cc \
+           MvQDrawerPanel.cc \
+           MvQDrawerView.cc \
+           MvQEditor.cc \
+           MvQExternalHelp.cc \
+           MvQFileBrowser.cc \
+           MvQFileSystemModel.cc \
+           MvQFileWatcher.cc \
+	   MvQFolderDrawerPanel.cc \
+           MvQFolderHistory.cc \
+           MvQFolderItemProperty.cc \
+	   MvQFolderModel.cc \
+	   MvQFolderNavigation.cc \
+           MvQFolderPanel.cc \
+	   MvQFolderViewBase.cc \
+           MvQFolderViewDelegate.cc \
+           MvQFolderViewHandler.cc \
+           MvQFolderWatcher.cc \
+           MvQFolderWidget.cc \
+           MvQGeoHelp.cc \
+	   MvQHelpBrowser.cc \
+           MvQIconFolderView.cc \
+           MvQIconHelp.cc \
+	   MvQIconHelpView.cc \
+           MvQIconHolder.cc \
+           MvQIconLine.cc \
+	   MvQIconMimeData.cc \
+           MvQIconObjectModel.cc \
+           MvQIconProvider.cc \
+           MvQListHelp.cc \
+           MvQLogDialog.cc \
+           MvQMessageBox.cc \
+           MvQNewIconWidget.cc \
+           MvQNoneLine.cc \
+           MvQObjectBrowser.cc \
+           MvQPageView.cc \
+           MvQPalette.cc \
+           MvQPathWidget.cc \
+           MvQProductBrowser.cc \
+           MvQRequestPanelHelp.cc \
+           MvQRequestPanelLine.cc \
+           MvQRequestPanelWidget.cc \
+	   MvQScriptHelp.cc \
+           MvQScrolledTextLine.cc \
+           MvQSliderLine.cc \
+           MvQStationsHelp.cc \
+           MvQStringLine.cc \
+           MvQTemplateDrawer.cc \
+           MvQTemporaryEditor.cc \
+           MvQTextLine.cc \
+	   MvQTools.cc \
+           MvQViewDrawer.cc \
+	   Action.cc \
+	   ActionCommand.cc \
+	   Command.cc \
+	   ComputeEditor.cc \
+	   ConfigLoader.cc \
+	   Counted.cc \
+	   Dependancy.cc \
+           Drop.cc \
+           Editor.cc  \
+           EditorDrawerFactory.cc \
+	   EditorFactory.cc \
+           EditTransaction.cc \
+           FamilyEditor.cc \
+           FamilyObject.cc \
+	   FamilyScanner.cc \
+           FileObject.cc \
+	   Folder.cc \
+           FolderDatabase.cc \
+           FolderInfo.cc \
+           HelpFactory.cc \
+	   IconClass.cc  \
+	   IconFactory.cc \
+	   IconGroupTools.cc \
+           IconInfo.cc \
+	   IconObject.cc \
+           Input.cc \
+           InternalService.cc \
+           InternalTask.cc \
+           Items.cc \
+           Language.cc \
+           LineFactory.cc \
+           Log.cc \
+           MacroGuiObject.cc \
+           MacroObject.cc \
+           MacroParamEditor.cc \
+           MacroParamObject.cc \
+	   MacroParamState.cc \
+           MessageObserver.cc \
+           MethodCommand.cc \
+	   MetviewService.cc \
+	   MetviewTask.cc \
+	   NoEditor.cc \
+           Parameter.cc \
+           Product.cc \
+	   ProductFolder.cc \
+           Protocol.cc \
+	   Queue.cc \
+           RequestPanel.cc \
+           RequestPanelItem.cc \
+	   ReplyObserver.cc \
+	   RootFolder.cc \
+           Runnable.cc \
+	   ShellService.cc \
+           ShellTask.cc \
+	   Service.cc \
+           ServiceEditor.cc \
+           SimpleEditor.cc \
+	   StandardObject.cc \
+	   State.cc \
+           SystemFolder.cc \
+	   Task.cc \
+           TeeBuffer.cc \
+           TeeStream.cc \
+           TemporaryEditor.cc \
+           TemporaryObject.cc \
+           Tools.cc \
+           Transaction.cc \
+           ViewEditor.cc \
+	   Wastebasket.cc \
+           MvQ.h \
+	   MvQIconFolderViewBase.h \
+           MvQBookmarks.h \
+           MvQBoolLine.h \
+	   MvQClassBrowser.h \
+           MvQColourHelp.h \
+           MvQColourLine.h \
+           MvQColourListLine.h \
+           MvQComboBoxLine.h \
+           MvQContextMenu.h \
+           MvQDesktop.h \
+	   MvQDesktopSettings.h \
+           MvQDetailedFolderView.h \
+           MvQDrawerPanel.h \
+           MvQDrawerView.h \
+           MvQEditor.h \
+           MvQEditorDrawerPanel.h \
+           MvQExternalHelp.h \
+           MvQFileBrowser.h \
+           MvQFileSystemModel.h \
+           MvQFileWatcher.h \
+           MvQFolderDrawerPanel.h \
+           MvQFolderHistory.h \
+           MvQFolderItemProperty.h \
+	   MvQFolderModel.h \
+           MvQFolderNavigation.h \
+           MvQFolderPanel.h \
+           MvQFolderViewBase.h \
+           MvQFolderViewDelegate.h \
+           MvQFolderViewHandler.h \
+           MvQFolderWatcher.h \
+           MvQFolderWidget.h \
+           MvQGeoHelp.h \
+           MvQHelpBrowser.h \
+           MvQIconFolderView.h \
+           MvQIconHelp.h \
+           MvQIconHelpView.h \
+           MvQIconHolder.h \
+           MvQIconLine.h \
+           MvQIconMimeData.h \
+           MvQIconObjectModel.h \
+           MvQIconProvider.h \
+           MvQListHelp.h \
+           MvQLogDialog.h \
+           MvQMessageBox.h \
+           MvQNewIconWidget.h \
+           MvQNoneLine.h \
+           MvQObjectBrowser.h \
+           MvQPageView.h \
+           MvQPalette.h \
+           MvQPathWidget.h \
+           MvQProductBrowser.h \
+           MvQRequestPanelHelp.h \
+           MvQRequestPanelLine.h \
+           MvQRequestPanelWidget.h \
+           MvQScriptHelp.h \
+           MvQScrolledTextLine.h \
+           MvQSliderLine.h \
+           MvQStationsHelp.h \
+           MvQStringLine.h \
+           MvQTemplateDrawer.h \
+           MvQTemporaryEditor.h \
+           MvQTextLine.h \
+	   MvQTools.h \
+           MvQViewDrawer.h \
+           MvQIconStripView.cc \
+           MvQIconStripView.h \
+           Action.h \
+	   ActionCommand.h \
+	   Command.h \
+           ComputeEditor.h \
+	   ConfigLoader.h \
+	   Counted.h \
+	   Dependancy.h \
+           Drop.h \
+           Editor.h \
+           EditorDrawer.h \
+           EditorDrawerFactory.h \
+           EditorFactory.h \
+           EditorObserver.h \
+           EditTransaction.h \
+           FamilyEditor.h \
+           FamilyObject.h \
+           FamilyScanner.h \
+           FileObject.h \
+           Folder.h \
+           FolderDatabase.h \
+	   FolderInfo.h \
+           FolderObserver.h \
+           FolderPresenter.h \
+           HelpFactory.h \
+	   IconClass.h \
+	   IconFactory.h \
+	   IconGroupTools.h \
+           IconInfo.h \
+	   IconObject.h \
+	   IconObserver.h \
+           Input.h \
+           InternalService.h \
+           InternalTask.h \
+           Items.h \
+	   Language.h \
+           LineFactory.h \
+           Log.h \
+           MacroGuiObject.h \
+           MacroObject.h \
+           MacroParamEditor.h \
+           MacroParamObject.h \
+	   MacroParamState.h \
+	   MessageObserver.h \
+           MethodCommand.h \
+	   MetviewService.h \
+	   MetviewTask.h \
+	   NoEditor.h \
+           Parameter.h \
+           Product.h \
+	   ProductFolder.h \
+           Protocol.h \
+           Queue.h \
+	   RequestPanel.h \
+           RequestPanelItem.h \
+           ReplyObserver.h \
+	   RootFolder.h \
+           Runnable.h \
+	   ShellService.h \
+           ShellTask.h\
+           Service.h \
+           ServiceEditor.h \
+           SimpleEditor.h \
+           StandardObject.h \
+	   State.h \
+           SystemFolder.h \
+	   Task.h \
+	   TaskObserver.h \
+           TeeBuffer.h \
+           TeeStream.h \
+           TemporaryEditor.h \
+           TemporaryObject.h \
+           Tools.h \
+           Transaction.h \
+           Wastebasket.h \
+           ViewEditor.h \
+           desktop.qrc
+	   
+nodist_bin_Desktop_SOURCES =  MvQIconFolderViewBase.moc.cpp \
+MvQBookmarks.moc.cpp \
+MvQEditor.moc.cpp \
+MvQFileBrowser.moc.cpp \
+MvQDetailedFolderView.moc.cpp   MvQIconMimeData.moc.cpp \
+MvQClassBrowser.moc.cpp \
+MvQColourListLine.moc.cpp \
+MvQDrawerPanel.moc.cpp \
+MvQPathWidget.moc.cpp  Runnable.moc.cpp \
+MvQFileWatcher.moc.cpp \
+MvQFolderDrawerPanel.moc.cpp \
+MvQFolderHistory.moc.cpp \
+MvQFolderPanel.moc.cpp MvQFolderWidget.moc.cpp \
+MvQFolderModel.moc.cpp \
+MvQIconFolderView.moc.cpp \
+MvQFolderViewDelegate.moc.cpp \
+MvQFolderWatcher.moc.cpp \
+MvQHelpBrowser.moc.cpp \
+MvQNewIconWidget.moc.cpp MvQRequestPanelLine.moc.cpp MvQBoolLine.moc.cpp MvQColourLine.moc.cpp MvQComboBoxLine.moc.cpp \
+MvQIconHolder.moc.cpp \
+MvQIconLine.moc.cpp MvQScrolledTextLine.moc.cpp MvQStringLine.moc.cpp MvQTextLine.moc.cpp \
+MvQRequestPanelHelp.moc.cpp MvQColourHelp.moc.cpp MvQListHelp.moc.cpp \
+MvQIconHelp.moc.cpp  \
+MvQLogDialog.moc.cpp \
+MvQObjectBrowser.moc.cpp \
+MvQPageView.moc.cpp \
+MvQProductBrowser.moc.cpp \
+MvQRequestPanelWidget.moc.cpp \
+MvQScriptHelp.moc.cpp \
+MvQSliderLine.moc.cpp \
+MvQStationsHelp.moc.cpp \
+MvQTemplateDrawer.moc.cpp \
+MvQTemporaryEditor.moc.cpp \
+MvQTools.moc.cpp \
+MvQViewDrawer.moc.cpp \
+ComputeEditor.moc.cpp \
+ViewEditor.moc.cpp \
+SimpleEditor.moc.cpp FamilyEditor.moc.cpp MacroParamEditor.moc.cpp\
+desktop.qrc.cpp \
+Tools.moc.cpp \
+Input.moc.cpp
+
+bin_Desktop_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil
+bin_Desktop_LDFLAGS  = $(QT_LDFLAGS)$(QT_LIBS)  $(LDFLAGS) -L../../lib
+bin_Desktop_LDADD    = $(QT_LIBS) $(LDADD) $(STANDARD_METVIEW_LIBS) $(FLIBS) -lMvQtGui -lMvQtUtil -lMetview -lUtil -lMars $(DBMLIB) 
+bin_Desktop_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
+AM_LDFLAGS = $(QT_LIBS)
+
+BUILT_SOURCES = bin \
+		desktop.qrc.cpp
+
+EXTRA_DIST = desktop.qrc
+
+#all: bin
+#	$(UPDATE_TITLE)
+
+bin:
+	ln -s ../../bin bin
+
+
+clean:
+	-rm -f *.o *.moc.cpp *.qrc.cpp
diff --git a/src/Desktop/Makefile.in b/src/Desktop/Makefile.in
new file mode 100644
index 0000000..785214b
--- /dev/null
+++ b/src/Desktop/Makefile.in
@@ -0,0 +1,4524 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# Makerules.
+# This file is part of AutoTroll.
+# Copyright (C) 2006, 2007, 2009, 2010  Benoit Sigoure.
+#
+# AutoTroll is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+#
+# In addition, as a special exception, the copyright holders of AutoTroll
+# give you unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the macros of
+# AutoTroll.  You need not follow the terms of the GNU General Public License
+# when using or distributing such scripts, even though portions of the text of
+# AutoTroll appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes AutoTroll.
+#
+# This special exception to the GPL applies to versions of AutoTroll
+# released by the copyright holders of AutoTroll.  Note that people who make
+# modified versions of AutoTroll are not obligated to grant this special
+# exception for their modified versions; it is their choice whether to do so.
+# The GNU General Public License gives permission to release a modified version
+# without this exception; this exception also makes it possible to release a
+# modified version which carries forward this exception.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/aux_build/autotroll.mk
+bin_PROGRAMS = bin/Desktop$(EXEEXT)
+subdir = src/Desktop
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/metview_config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_bin_Desktop_OBJECTS = bin_Desktop-MvMainQtBrowser.$(OBJEXT) \
+	bin_Desktop-MvQ.$(OBJEXT) \
+	bin_Desktop-MvQIconFolderViewBase.$(OBJEXT) \
+	bin_Desktop-MvQBookmarks.$(OBJEXT) \
+	bin_Desktop-MvQBoolLine.$(OBJEXT) \
+	bin_Desktop-MvQClassBrowser.$(OBJEXT) \
+	bin_Desktop-MvQColourHelp.$(OBJEXT) \
+	bin_Desktop-MvQColourLine.$(OBJEXT) \
+	bin_Desktop-MvQColourListLine.$(OBJEXT) \
+	bin_Desktop-MvQComboBoxLine.$(OBJEXT) \
+	bin_Desktop-MvQContextMenu.$(OBJEXT) \
+	bin_Desktop-MvQDesktop.$(OBJEXT) \
+	bin_Desktop-MvQDesktopSettings.$(OBJEXT) \
+	bin_Desktop-MvQDetailedFolderView.$(OBJEXT) \
+	bin_Desktop-MvQDrawerPanel.$(OBJEXT) \
+	bin_Desktop-MvQDrawerView.$(OBJEXT) \
+	bin_Desktop-MvQEditor.$(OBJEXT) \
+	bin_Desktop-MvQExternalHelp.$(OBJEXT) \
+	bin_Desktop-MvQFileBrowser.$(OBJEXT) \
+	bin_Desktop-MvQFileSystemModel.$(OBJEXT) \
+	bin_Desktop-MvQFileWatcher.$(OBJEXT) \
+	bin_Desktop-MvQFolderDrawerPanel.$(OBJEXT) \
+	bin_Desktop-MvQFolderHistory.$(OBJEXT) \
+	bin_Desktop-MvQFolderItemProperty.$(OBJEXT) \
+	bin_Desktop-MvQFolderModel.$(OBJEXT) \
+	bin_Desktop-MvQFolderNavigation.$(OBJEXT) \
+	bin_Desktop-MvQFolderPanel.$(OBJEXT) \
+	bin_Desktop-MvQFolderViewBase.$(OBJEXT) \
+	bin_Desktop-MvQFolderViewDelegate.$(OBJEXT) \
+	bin_Desktop-MvQFolderViewHandler.$(OBJEXT) \
+	bin_Desktop-MvQFolderWatcher.$(OBJEXT) \
+	bin_Desktop-MvQFolderWidget.$(OBJEXT) \
+	bin_Desktop-MvQGeoHelp.$(OBJEXT) \
+	bin_Desktop-MvQHelpBrowser.$(OBJEXT) \
+	bin_Desktop-MvQIconFolderView.$(OBJEXT) \
+	bin_Desktop-MvQIconHelp.$(OBJEXT) \
+	bin_Desktop-MvQIconHelpView.$(OBJEXT) \
+	bin_Desktop-MvQIconHolder.$(OBJEXT) \
+	bin_Desktop-MvQIconLine.$(OBJEXT) \
+	bin_Desktop-MvQIconMimeData.$(OBJEXT) \
+	bin_Desktop-MvQIconObjectModel.$(OBJEXT) \
+	bin_Desktop-MvQIconProvider.$(OBJEXT) \
+	bin_Desktop-MvQListHelp.$(OBJEXT) \
+	bin_Desktop-MvQLogDialog.$(OBJEXT) \
+	bin_Desktop-MvQMessageBox.$(OBJEXT) \
+	bin_Desktop-MvQNewIconWidget.$(OBJEXT) \
+	bin_Desktop-MvQNoneLine.$(OBJEXT) \
+	bin_Desktop-MvQObjectBrowser.$(OBJEXT) \
+	bin_Desktop-MvQPageView.$(OBJEXT) \
+	bin_Desktop-MvQPalette.$(OBJEXT) \
+	bin_Desktop-MvQPathWidget.$(OBJEXT) \
+	bin_Desktop-MvQProductBrowser.$(OBJEXT) \
+	bin_Desktop-MvQRequestPanelHelp.$(OBJEXT) \
+	bin_Desktop-MvQRequestPanelLine.$(OBJEXT) \
+	bin_Desktop-MvQRequestPanelWidget.$(OBJEXT) \
+	bin_Desktop-MvQScriptHelp.$(OBJEXT) \
+	bin_Desktop-MvQScrolledTextLine.$(OBJEXT) \
+	bin_Desktop-MvQSliderLine.$(OBJEXT) \
+	bin_Desktop-MvQStationsHelp.$(OBJEXT) \
+	bin_Desktop-MvQStringLine.$(OBJEXT) \
+	bin_Desktop-MvQTemplateDrawer.$(OBJEXT) \
+	bin_Desktop-MvQTemporaryEditor.$(OBJEXT) \
+	bin_Desktop-MvQTextLine.$(OBJEXT) \
+	bin_Desktop-MvQTools.$(OBJEXT) \
+	bin_Desktop-MvQViewDrawer.$(OBJEXT) \
+	bin_Desktop-Action.$(OBJEXT) \
+	bin_Desktop-ActionCommand.$(OBJEXT) \
+	bin_Desktop-Command.$(OBJEXT) \
+	bin_Desktop-ComputeEditor.$(OBJEXT) \
+	bin_Desktop-ConfigLoader.$(OBJEXT) \
+	bin_Desktop-Counted.$(OBJEXT) bin_Desktop-Dependancy.$(OBJEXT) \
+	bin_Desktop-Drop.$(OBJEXT) bin_Desktop-Editor.$(OBJEXT) \
+	bin_Desktop-EditorDrawerFactory.$(OBJEXT) \
+	bin_Desktop-EditorFactory.$(OBJEXT) \
+	bin_Desktop-EditTransaction.$(OBJEXT) \
+	bin_Desktop-FamilyEditor.$(OBJEXT) \
+	bin_Desktop-FamilyObject.$(OBJEXT) \
+	bin_Desktop-FamilyScanner.$(OBJEXT) \
+	bin_Desktop-FileObject.$(OBJEXT) bin_Desktop-Folder.$(OBJEXT) \
+	bin_Desktop-FolderDatabase.$(OBJEXT) \
+	bin_Desktop-FolderInfo.$(OBJEXT) \
+	bin_Desktop-HelpFactory.$(OBJEXT) \
+	bin_Desktop-IconClass.$(OBJEXT) \
+	bin_Desktop-IconFactory.$(OBJEXT) \
+	bin_Desktop-IconGroupTools.$(OBJEXT) \
+	bin_Desktop-IconInfo.$(OBJEXT) \
+	bin_Desktop-IconObject.$(OBJEXT) bin_Desktop-Input.$(OBJEXT) \
+	bin_Desktop-InternalService.$(OBJEXT) \
+	bin_Desktop-InternalTask.$(OBJEXT) bin_Desktop-Items.$(OBJEXT) \
+	bin_Desktop-Language.$(OBJEXT) \
+	bin_Desktop-LineFactory.$(OBJEXT) bin_Desktop-Log.$(OBJEXT) \
+	bin_Desktop-MacroGuiObject.$(OBJEXT) \
+	bin_Desktop-MacroObject.$(OBJEXT) \
+	bin_Desktop-MacroParamEditor.$(OBJEXT) \
+	bin_Desktop-MacroParamObject.$(OBJEXT) \
+	bin_Desktop-MacroParamState.$(OBJEXT) \
+	bin_Desktop-MessageObserver.$(OBJEXT) \
+	bin_Desktop-MethodCommand.$(OBJEXT) \
+	bin_Desktop-MetviewService.$(OBJEXT) \
+	bin_Desktop-MetviewTask.$(OBJEXT) \
+	bin_Desktop-NoEditor.$(OBJEXT) bin_Desktop-Parameter.$(OBJEXT) \
+	bin_Desktop-Product.$(OBJEXT) \
+	bin_Desktop-ProductFolder.$(OBJEXT) \
+	bin_Desktop-Protocol.$(OBJEXT) bin_Desktop-Queue.$(OBJEXT) \
+	bin_Desktop-RequestPanel.$(OBJEXT) \
+	bin_Desktop-RequestPanelItem.$(OBJEXT) \
+	bin_Desktop-ReplyObserver.$(OBJEXT) \
+	bin_Desktop-RootFolder.$(OBJEXT) \
+	bin_Desktop-Runnable.$(OBJEXT) \
+	bin_Desktop-ShellService.$(OBJEXT) \
+	bin_Desktop-ShellTask.$(OBJEXT) bin_Desktop-Service.$(OBJEXT) \
+	bin_Desktop-ServiceEditor.$(OBJEXT) \
+	bin_Desktop-SimpleEditor.$(OBJEXT) \
+	bin_Desktop-StandardObject.$(OBJEXT) \
+	bin_Desktop-State.$(OBJEXT) bin_Desktop-SystemFolder.$(OBJEXT) \
+	bin_Desktop-Task.$(OBJEXT) bin_Desktop-TeeBuffer.$(OBJEXT) \
+	bin_Desktop-TeeStream.$(OBJEXT) \
+	bin_Desktop-TemporaryEditor.$(OBJEXT) \
+	bin_Desktop-TemporaryObject.$(OBJEXT) \
+	bin_Desktop-Tools.$(OBJEXT) bin_Desktop-Transaction.$(OBJEXT) \
+	bin_Desktop-ViewEditor.$(OBJEXT) \
+	bin_Desktop-Wastebasket.$(OBJEXT) \
+	bin_Desktop-MvQIconStripView.$(OBJEXT)
+nodist_bin_Desktop_OBJECTS =  \
+	bin_Desktop-MvQIconFolderViewBase.moc.$(OBJEXT) \
+	bin_Desktop-MvQBookmarks.moc.$(OBJEXT) \
+	bin_Desktop-MvQEditor.moc.$(OBJEXT) \
+	bin_Desktop-MvQFileBrowser.moc.$(OBJEXT) \
+	bin_Desktop-MvQDetailedFolderView.moc.$(OBJEXT) \
+	bin_Desktop-MvQIconMimeData.moc.$(OBJEXT) \
+	bin_Desktop-MvQClassBrowser.moc.$(OBJEXT) \
+	bin_Desktop-MvQColourListLine.moc.$(OBJEXT) \
+	bin_Desktop-MvQDrawerPanel.moc.$(OBJEXT) \
+	bin_Desktop-MvQPathWidget.moc.$(OBJEXT) \
+	bin_Desktop-Runnable.moc.$(OBJEXT) \
+	bin_Desktop-MvQFileWatcher.moc.$(OBJEXT) \
+	bin_Desktop-MvQFolderDrawerPanel.moc.$(OBJEXT) \
+	bin_Desktop-MvQFolderHistory.moc.$(OBJEXT) \
+	bin_Desktop-MvQFolderPanel.moc.$(OBJEXT) \
+	bin_Desktop-MvQFolderWidget.moc.$(OBJEXT) \
+	bin_Desktop-MvQFolderModel.moc.$(OBJEXT) \
+	bin_Desktop-MvQIconFolderView.moc.$(OBJEXT) \
+	bin_Desktop-MvQFolderViewDelegate.moc.$(OBJEXT) \
+	bin_Desktop-MvQFolderWatcher.moc.$(OBJEXT) \
+	bin_Desktop-MvQHelpBrowser.moc.$(OBJEXT) \
+	bin_Desktop-MvQNewIconWidget.moc.$(OBJEXT) \
+	bin_Desktop-MvQRequestPanelLine.moc.$(OBJEXT) \
+	bin_Desktop-MvQBoolLine.moc.$(OBJEXT) \
+	bin_Desktop-MvQColourLine.moc.$(OBJEXT) \
+	bin_Desktop-MvQComboBoxLine.moc.$(OBJEXT) \
+	bin_Desktop-MvQIconHolder.moc.$(OBJEXT) \
+	bin_Desktop-MvQIconLine.moc.$(OBJEXT) \
+	bin_Desktop-MvQScrolledTextLine.moc.$(OBJEXT) \
+	bin_Desktop-MvQStringLine.moc.$(OBJEXT) \
+	bin_Desktop-MvQTextLine.moc.$(OBJEXT) \
+	bin_Desktop-MvQRequestPanelHelp.moc.$(OBJEXT) \
+	bin_Desktop-MvQColourHelp.moc.$(OBJEXT) \
+	bin_Desktop-MvQListHelp.moc.$(OBJEXT) \
+	bin_Desktop-MvQIconHelp.moc.$(OBJEXT) \
+	bin_Desktop-MvQLogDialog.moc.$(OBJEXT) \
+	bin_Desktop-MvQObjectBrowser.moc.$(OBJEXT) \
+	bin_Desktop-MvQPageView.moc.$(OBJEXT) \
+	bin_Desktop-MvQProductBrowser.moc.$(OBJEXT) \
+	bin_Desktop-MvQRequestPanelWidget.moc.$(OBJEXT) \
+	bin_Desktop-MvQScriptHelp.moc.$(OBJEXT) \
+	bin_Desktop-MvQSliderLine.moc.$(OBJEXT) \
+	bin_Desktop-MvQStationsHelp.moc.$(OBJEXT) \
+	bin_Desktop-MvQTemplateDrawer.moc.$(OBJEXT) \
+	bin_Desktop-MvQTemporaryEditor.moc.$(OBJEXT) \
+	bin_Desktop-MvQTools.moc.$(OBJEXT) \
+	bin_Desktop-MvQViewDrawer.moc.$(OBJEXT) \
+	bin_Desktop-ComputeEditor.moc.$(OBJEXT) \
+	bin_Desktop-ViewEditor.moc.$(OBJEXT) \
+	bin_Desktop-SimpleEditor.moc.$(OBJEXT) \
+	bin_Desktop-FamilyEditor.moc.$(OBJEXT) \
+	bin_Desktop-MacroParamEditor.moc.$(OBJEXT) \
+	bin_Desktop-desktop.qrc.$(OBJEXT) \
+	bin_Desktop-Tools.moc.$(OBJEXT) \
+	bin_Desktop-Input.moc.$(OBJEXT)
+bin_Desktop_OBJECTS = $(am_bin_Desktop_OBJECTS) \
+	$(nodist_bin_Desktop_OBJECTS)
+am__DEPENDENCIES_1 =
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+bin_Desktop_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(bin_Desktop_LDFLAGS) $(LDFLAGS) -o $@
+am__dirstamp = $(am__leading_dot)dirstamp
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_$(V))
+am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
+am__v_CXX_0 = @echo "  CXX   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_$(V))
+am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CXXLD_0 = @echo "  CXXLD " $@;
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(bin_Desktop_SOURCES) $(nodist_bin_Desktop_SOURCES)
+DIST_SOURCES = $(bin_Desktop_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AXX = @AXX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPLIBS = @CPPLIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DBMLIB = @DBMLIB@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
+EGREP = @EGREP@
+EMOS_LIB_NAME = @EMOS_LIB_NAME@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FDBLIB = @FDBLIB@
+FFIXED_FLAGS = @FFIXED_FLAGS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FLIBS = @FLIBS@
+GREP = @GREP@
+GRIBAPI_LIBS = @GRIBAPI_LIBS@
+GRIB_API_INC = @GRIB_API_INC@
+GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LDFLAGS_INLINE = @LDFLAGS_INLINE@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBNAME = @LIBNAME@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAGICS_CFLAGS = @MAGICS_CFLAGS@
+MAGICS_LIBS = @MAGICS_LIBS@
+MAGPLUS_CPPFLAGS = @MAGPLUS_CPPFLAGS@
+MAGPLUS_HOME = @MAGPLUS_HOME@
+MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
+MAGPLUS_LIB = @MAGPLUS_LIB@
+MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
+MAKEINFO = @MAKEINFO@
+MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
+MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
+METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
+METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
+METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
+METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
+METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
+METVIEW_NETCDF_FLAGS = @METVIEW_NETCDF_FLAGS@
+METVIEW_NETCDF_LIB = @METVIEW_NETCDF_LIB@
+METVIEW_PACKAGE_NAME = @METVIEW_PACKAGE_NAME@
+METVIEW_PACKAGE_RELEASE_DATE = @METVIEW_PACKAGE_RELEASE_DATE@
+METVIEW_PACKAGE_VERSION = @METVIEW_PACKAGE_VERSION@
+METVIEW_UTIL_LIB = @METVIEW_UTIL_LIB@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MVINCLUDE = @MVINCLUDE@
+MVSTARTDIR = @MVSTARTDIR@
+MV_EMOSLIB = @MV_EMOSLIB@
+MV_ENVIRON = @MV_ENVIRON@
+MV_MOTIF_FLAGS = @MV_MOTIF_FLAGS@
+MV_MOTIF_UTIL_LIB = @MV_MOTIF_UTIL_LIB@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+ODB1_BIN = @ODB1_BIN@
+ODB1_USE_SCRIPT = @ODB1_USE_SCRIPT@
+ODB1_VERSION = @ODB1_VERSION@
+ODB_CPPFLAGS = @ODB_CPPFLAGS@
+ODB_LDFLAGS = @ODB_LDFLAGS@
+ODB_LIBDIR = @ODB_LIBDIR@
+ODB_LIBS = @ODB_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@
+PKG_CONFIG = @PKG_CONFIG@
+PROJ4_LIBS = @PROJ4_LIBS@
+QMAKE = @QMAKE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_CPPFLAGS = @QT_CPPFLAGS@
+QT_CXXFLAGS = @QT_CXXFLAGS@
+QT_DEFINES = @QT_DEFINES@
+QT_INCPATH = @QT_INCPATH@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LFLAGS = @QT_LFLAGS@
+QT_LIBS = @QT_LIBS@
+QT_PATH = @QT_PATH@
+QT_VERSION = @QT_VERSION@
+QT_VERSION_MAJOR = @QT_VERSION_MAJOR@
+RANLIB = @RANLIB@
+RCC = @RCC@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SITE_NAME = @SITE_NAME@
+SITE_WMO_CODE = @SITE_WMO_CODE@
+STANDARD_METVIEW_LIBS = @STANDARD_METVIEW_LIBS@
+STANDARD_METVIEW_LIBS_NO_UTIL = @STANDARD_METVIEW_LIBS_NO_UTIL@
+STARTUP_SCRIPT = @STARTUP_SCRIPT@
+STRIP = @STRIP@
+UIC = @UIC@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# See autotroll.m4 :)
+SUFFIXES = .moc.cpp .moc.cc .moc.cxx .moc.C .h .hh .hpp \
+			.ui .ui.h .ui.hh .ui.hpp \
+			.qrc .qrc.cpp .qrc.cc .qrc.cxx .qrc.C
+
+DISTCLEANFILES = $(BUILT_SOURCES)
+bin_Desktop_SOURCES = MvMainQtBrowser.cc \
+           MvQ.cc \
+	   MvQIconFolderViewBase.cc \
+           MvQBookmarks.cc \
+           MvQBoolLine.cc \
+           MvQClassBrowser.cc \
+           MvQColourHelp.cc \
+           MvQColourLine.cc \
+ 	   MvQColourListLine.cc \
+           MvQComboBoxLine.cc \
+	   MvQContextMenu.cc \
+           MvQDesktop.cc \
+           MvQDesktopSettings.cc \
+           MvQDetailedFolderView.cc \
+           MvQDrawerPanel.cc \
+           MvQDrawerView.cc \
+           MvQEditor.cc \
+           MvQExternalHelp.cc \
+           MvQFileBrowser.cc \
+           MvQFileSystemModel.cc \
+           MvQFileWatcher.cc \
+	   MvQFolderDrawerPanel.cc \
+           MvQFolderHistory.cc \
+           MvQFolderItemProperty.cc \
+	   MvQFolderModel.cc \
+	   MvQFolderNavigation.cc \
+           MvQFolderPanel.cc \
+	   MvQFolderViewBase.cc \
+           MvQFolderViewDelegate.cc \
+           MvQFolderViewHandler.cc \
+           MvQFolderWatcher.cc \
+           MvQFolderWidget.cc \
+           MvQGeoHelp.cc \
+	   MvQHelpBrowser.cc \
+           MvQIconFolderView.cc \
+           MvQIconHelp.cc \
+	   MvQIconHelpView.cc \
+           MvQIconHolder.cc \
+           MvQIconLine.cc \
+	   MvQIconMimeData.cc \
+           MvQIconObjectModel.cc \
+           MvQIconProvider.cc \
+           MvQListHelp.cc \
+           MvQLogDialog.cc \
+           MvQMessageBox.cc \
+           MvQNewIconWidget.cc \
+           MvQNoneLine.cc \
+           MvQObjectBrowser.cc \
+           MvQPageView.cc \
+           MvQPalette.cc \
+           MvQPathWidget.cc \
+           MvQProductBrowser.cc \
+           MvQRequestPanelHelp.cc \
+           MvQRequestPanelLine.cc \
+           MvQRequestPanelWidget.cc \
+	   MvQScriptHelp.cc \
+           MvQScrolledTextLine.cc \
+           MvQSliderLine.cc \
+           MvQStationsHelp.cc \
+           MvQStringLine.cc \
+           MvQTemplateDrawer.cc \
+           MvQTemporaryEditor.cc \
+           MvQTextLine.cc \
+	   MvQTools.cc \
+           MvQViewDrawer.cc \
+	   Action.cc \
+	   ActionCommand.cc \
+	   Command.cc \
+	   ComputeEditor.cc \
+	   ConfigLoader.cc \
+	   Counted.cc \
+	   Dependancy.cc \
+           Drop.cc \
+           Editor.cc  \
+           EditorDrawerFactory.cc \
+	   EditorFactory.cc \
+           EditTransaction.cc \
+           FamilyEditor.cc \
+           FamilyObject.cc \
+	   FamilyScanner.cc \
+           FileObject.cc \
+	   Folder.cc \
+           FolderDatabase.cc \
+           FolderInfo.cc \
+           HelpFactory.cc \
+	   IconClass.cc  \
+	   IconFactory.cc \
+	   IconGroupTools.cc \
+           IconInfo.cc \
+	   IconObject.cc \
+           Input.cc \
+           InternalService.cc \
+           InternalTask.cc \
+           Items.cc \
+           Language.cc \
+           LineFactory.cc \
+           Log.cc \
+           MacroGuiObject.cc \
+           MacroObject.cc \
+           MacroParamEditor.cc \
+           MacroParamObject.cc \
+	   MacroParamState.cc \
+           MessageObserver.cc \
+           MethodCommand.cc \
+	   MetviewService.cc \
+	   MetviewTask.cc \
+	   NoEditor.cc \
+           Parameter.cc \
+           Product.cc \
+	   ProductFolder.cc \
+           Protocol.cc \
+	   Queue.cc \
+           RequestPanel.cc \
+           RequestPanelItem.cc \
+	   ReplyObserver.cc \
+	   RootFolder.cc \
+           Runnable.cc \
+	   ShellService.cc \
+           ShellTask.cc \
+	   Service.cc \
+           ServiceEditor.cc \
+           SimpleEditor.cc \
+	   StandardObject.cc \
+	   State.cc \
+           SystemFolder.cc \
+	   Task.cc \
+           TeeBuffer.cc \
+           TeeStream.cc \
+           TemporaryEditor.cc \
+           TemporaryObject.cc \
+           Tools.cc \
+           Transaction.cc \
+           ViewEditor.cc \
+	   Wastebasket.cc \
+           MvQ.h \
+	   MvQIconFolderViewBase.h \
+           MvQBookmarks.h \
+           MvQBoolLine.h \
+	   MvQClassBrowser.h \
+           MvQColourHelp.h \
+           MvQColourLine.h \
+           MvQColourListLine.h \
+           MvQComboBoxLine.h \
+           MvQContextMenu.h \
+           MvQDesktop.h \
+	   MvQDesktopSettings.h \
+           MvQDetailedFolderView.h \
+           MvQDrawerPanel.h \
+           MvQDrawerView.h \
+           MvQEditor.h \
+           MvQEditorDrawerPanel.h \
+           MvQExternalHelp.h \
+           MvQFileBrowser.h \
+           MvQFileSystemModel.h \
+           MvQFileWatcher.h \
+           MvQFolderDrawerPanel.h \
+           MvQFolderHistory.h \
+           MvQFolderItemProperty.h \
+	   MvQFolderModel.h \
+           MvQFolderNavigation.h \
+           MvQFolderPanel.h \
+           MvQFolderViewBase.h \
+           MvQFolderViewDelegate.h \
+           MvQFolderViewHandler.h \
+           MvQFolderWatcher.h \
+           MvQFolderWidget.h \
+           MvQGeoHelp.h \
+           MvQHelpBrowser.h \
+           MvQIconFolderView.h \
+           MvQIconHelp.h \
+           MvQIconHelpView.h \
+           MvQIconHolder.h \
+           MvQIconLine.h \
+           MvQIconMimeData.h \
+           MvQIconObjectModel.h \
+           MvQIconProvider.h \
+           MvQListHelp.h \
+           MvQLogDialog.h \
+           MvQMessageBox.h \
+           MvQNewIconWidget.h \
+           MvQNoneLine.h \
+           MvQObjectBrowser.h \
+           MvQPageView.h \
+           MvQPalette.h \
+           MvQPathWidget.h \
+           MvQProductBrowser.h \
+           MvQRequestPanelHelp.h \
+           MvQRequestPanelLine.h \
+           MvQRequestPanelWidget.h \
+           MvQScriptHelp.h \
+           MvQScrolledTextLine.h \
+           MvQSliderLine.h \
+           MvQStationsHelp.h \
+           MvQStringLine.h \
+           MvQTemplateDrawer.h \
+           MvQTemporaryEditor.h \
+           MvQTextLine.h \
+	   MvQTools.h \
+           MvQViewDrawer.h \
+           MvQIconStripView.cc \
+           MvQIconStripView.h \
+           Action.h \
+	   ActionCommand.h \
+	   Command.h \
+           ComputeEditor.h \
+	   ConfigLoader.h \
+	   Counted.h \
+	   Dependancy.h \
+           Drop.h \
+           Editor.h \
+           EditorDrawer.h \
+           EditorDrawerFactory.h \
+           EditorFactory.h \
+           EditorObserver.h \
+           EditTransaction.h \
+           FamilyEditor.h \
+           FamilyObject.h \
+           FamilyScanner.h \
+           FileObject.h \
+           Folder.h \
+           FolderDatabase.h \
+	   FolderInfo.h \
+           FolderObserver.h \
+           FolderPresenter.h \
+           HelpFactory.h \
+	   IconClass.h \
+	   IconFactory.h \
+	   IconGroupTools.h \
+           IconInfo.h \
+	   IconObject.h \
+	   IconObserver.h \
+           Input.h \
+           InternalService.h \
+           InternalTask.h \
+           Items.h \
+	   Language.h \
+           LineFactory.h \
+           Log.h \
+           MacroGuiObject.h \
+           MacroObject.h \
+           MacroParamEditor.h \
+           MacroParamObject.h \
+	   MacroParamState.h \
+	   MessageObserver.h \
+           MethodCommand.h \
+	   MetviewService.h \
+	   MetviewTask.h \
+	   NoEditor.h \
+           Parameter.h \
+           Product.h \
+	   ProductFolder.h \
+           Protocol.h \
+           Queue.h \
+	   RequestPanel.h \
+           RequestPanelItem.h \
+           ReplyObserver.h \
+	   RootFolder.h \
+           Runnable.h \
+	   ShellService.h \
+           ShellTask.h\
+           Service.h \
+           ServiceEditor.h \
+           SimpleEditor.h \
+           StandardObject.h \
+	   State.h \
+           SystemFolder.h \
+	   Task.h \
+	   TaskObserver.h \
+           TeeBuffer.h \
+           TeeStream.h \
+           TemporaryEditor.h \
+           TemporaryObject.h \
+           Tools.h \
+           Transaction.h \
+           Wastebasket.h \
+           ViewEditor.h \
+           desktop.qrc
+
+nodist_bin_Desktop_SOURCES = MvQIconFolderViewBase.moc.cpp \
+MvQBookmarks.moc.cpp \
+MvQEditor.moc.cpp \
+MvQFileBrowser.moc.cpp \
+MvQDetailedFolderView.moc.cpp   MvQIconMimeData.moc.cpp \
+MvQClassBrowser.moc.cpp \
+MvQColourListLine.moc.cpp \
+MvQDrawerPanel.moc.cpp \
+MvQPathWidget.moc.cpp  Runnable.moc.cpp \
+MvQFileWatcher.moc.cpp \
+MvQFolderDrawerPanel.moc.cpp \
+MvQFolderHistory.moc.cpp \
+MvQFolderPanel.moc.cpp MvQFolderWidget.moc.cpp \
+MvQFolderModel.moc.cpp \
+MvQIconFolderView.moc.cpp \
+MvQFolderViewDelegate.moc.cpp \
+MvQFolderWatcher.moc.cpp \
+MvQHelpBrowser.moc.cpp \
+MvQNewIconWidget.moc.cpp MvQRequestPanelLine.moc.cpp MvQBoolLine.moc.cpp MvQColourLine.moc.cpp MvQComboBoxLine.moc.cpp \
+MvQIconHolder.moc.cpp \
+MvQIconLine.moc.cpp MvQScrolledTextLine.moc.cpp MvQStringLine.moc.cpp MvQTextLine.moc.cpp \
+MvQRequestPanelHelp.moc.cpp MvQColourHelp.moc.cpp MvQListHelp.moc.cpp \
+MvQIconHelp.moc.cpp  \
+MvQLogDialog.moc.cpp \
+MvQObjectBrowser.moc.cpp \
+MvQPageView.moc.cpp \
+MvQProductBrowser.moc.cpp \
+MvQRequestPanelWidget.moc.cpp \
+MvQScriptHelp.moc.cpp \
+MvQSliderLine.moc.cpp \
+MvQStationsHelp.moc.cpp \
+MvQTemplateDrawer.moc.cpp \
+MvQTemporaryEditor.moc.cpp \
+MvQTools.moc.cpp \
+MvQViewDrawer.moc.cpp \
+ComputeEditor.moc.cpp \
+ViewEditor.moc.cpp \
+SimpleEditor.moc.cpp FamilyEditor.moc.cpp MacroParamEditor.moc.cpp\
+desktop.qrc.cpp \
+Tools.moc.cpp \
+Input.moc.cpp
+
+bin_Desktop_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil
+bin_Desktop_LDFLAGS = $(QT_LDFLAGS)$(QT_LIBS)  $(LDFLAGS) -L../../lib
+bin_Desktop_LDADD = $(QT_LIBS) $(LDADD) $(STANDARD_METVIEW_LIBS) $(FLIBS) -lMvQtGui -lMvQtUtil -lMetview -lUtil -lMars $(DBMLIB) 
+bin_Desktop_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
+AM_LDFLAGS = $(QT_LIBS)
+BUILT_SOURCES = bin \
+		desktop.qrc.cpp
+
+EXTRA_DIST = desktop.qrc
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .moc.cpp .moc.cc .moc.cxx .moc.C .h .hh .hpp .ui .ui.h .ui.hh .ui.hpp .qrc .qrc.cpp .qrc.cc .qrc.cxx .qrc.C .cc .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/aux_build/autotroll.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Desktop/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/Desktop/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p || test -f $$p1; \
+	  then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' `; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+bin/$(am__dirstamp):
+	@$(MKDIR_P) bin
+	@: > bin/$(am__dirstamp)
+bin/Desktop$(EXEEXT): $(bin_Desktop_OBJECTS) $(bin_Desktop_DEPENDENCIES) bin/$(am__dirstamp)
+	@rm -f bin/Desktop$(EXEEXT)
+	$(AM_V_CXXLD)$(bin_Desktop_LINK) $(bin_Desktop_OBJECTS) $(bin_Desktop_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Action.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-ActionCommand.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Command.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-ComputeEditor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-ComputeEditor.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-ConfigLoader.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Counted.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Dependancy.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Drop.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-EditTransaction.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Editor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-EditorDrawerFactory.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-EditorFactory.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-FamilyEditor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-FamilyEditor.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-FamilyObject.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-FamilyScanner.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-FileObject.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Folder.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-FolderDatabase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-FolderInfo.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-HelpFactory.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-IconClass.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-IconFactory.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-IconGroupTools.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-IconInfo.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-IconObject.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Input.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Input.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-InternalService.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-InternalTask.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Items.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Language.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-LineFactory.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Log.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MacroGuiObject.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MacroObject.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MacroParamEditor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MacroParamEditor.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MacroParamObject.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MacroParamState.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MessageObserver.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MethodCommand.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MetviewService.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MetviewTask.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvMainQtBrowser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQ.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQBookmarks.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQBookmarks.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQBoolLine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQBoolLine.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQClassBrowser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQColourHelp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQColourHelp.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQColourLine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQColourLine.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQColourListLine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQColourListLine.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQComboBoxLine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQComboBoxLine.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQContextMenu.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQDesktop.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQDesktopSettings.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQDetailedFolderView.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQDetailedFolderView.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQDrawerPanel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQDrawerPanel.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQDrawerView.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQEditor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQEditor.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQExternalHelp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFileBrowser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFileBrowser.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFileSystemModel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFileWatcher.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFileWatcher.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderHistory.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderHistory.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderItemProperty.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderModel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderModel.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderNavigation.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderPanel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderPanel.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderViewBase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderViewHandler.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderWatcher.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderWatcher.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderWidget.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderWidget.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQGeoHelp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQHelpBrowser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQHelpBrowser.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconFolderView.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconFolderView.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconHelp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconHelp.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconHelpView.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconHolder.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconHolder.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconLine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconLine.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconMimeData.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconMimeData.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconObjectModel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconProvider.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconStripView.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQListHelp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQListHelp.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQLogDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQLogDialog.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQMessageBox.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQNewIconWidget.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQNewIconWidget.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQNoneLine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQObjectBrowser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQPageView.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQPageView.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQPalette.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQPathWidget.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQPathWidget.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQProductBrowser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQProductBrowser.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQRequestPanelLine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQRequestPanelLine.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQScriptHelp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQScriptHelp.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQScrolledTextLine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQScrolledTextLine.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQSliderLine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQSliderLine.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQStationsHelp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQStationsHelp.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQStringLine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQStringLine.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTemplateDrawer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTemplateDrawer.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTemporaryEditor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTemporaryEditor.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTextLine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTextLine.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTools.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTools.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQViewDrawer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQViewDrawer.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-NoEditor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Parameter.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Product.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-ProductFolder.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Protocol.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Queue.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-ReplyObserver.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-RequestPanel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-RequestPanelItem.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-RootFolder.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Runnable.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Runnable.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Service.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-ServiceEditor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-ShellService.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-ShellTask.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-SimpleEditor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-SimpleEditor.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-StandardObject.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-State.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-SystemFolder.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Task.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-TeeBuffer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-TeeStream.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-TemporaryEditor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-TemporaryObject.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Tools.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Tools.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Transaction.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-ViewEditor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-ViewEditor.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Wastebasket.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-desktop.qrc.Po at am__quote@
+
+.cc.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+bin_Desktop-MvMainQtBrowser.o: MvMainQtBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvMainQtBrowser.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvMainQtBrowser.Tpo -c -o bin_Desktop-MvMainQtBrowser.o `test -f 'MvMainQtBrowser.cc' || echo '$(srcdir)/'`MvMainQtBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvMainQtBrowser.Tpo $(DEPDIR)/bin_Desktop-MvMainQtBrowser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvMainQtBrowser.cc' object='bin_Desktop-MvMainQtBrowser.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvMainQtBrowser.o `test -f 'MvMainQtBrowser.cc' || echo '$(srcdir)/'`MvMainQtBrowser.cc
+
+bin_Desktop-MvMainQtBrowser.obj: MvMainQtBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvMainQtBrowser.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvMainQtBrowser.Tpo -c -o bin_Desktop-MvMainQtBrowser.obj `if test -f 'MvMainQtBrowser.cc'; then $(CYGPATH_W) 'MvMainQtBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvMainQtBrowser.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvMainQtBrowser.Tpo $(DEPDIR)/bin_Desktop-MvMainQtBrowser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvMainQtBrowser.cc' object='bin_Desktop-MvMainQtBrowser.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvMainQtBrowser.obj `if test -f 'MvMainQtBrowser.cc'; then $(CYGPATH_W) 'MvMainQtBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvMainQtBrowser.cc'; fi`
+
+bin_Desktop-MvQ.o: MvQ.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQ.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQ.Tpo -c -o bin_Desktop-MvQ.o `test -f 'MvQ.cc' || echo '$(srcdir)/'`MvQ.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQ.Tpo $(DEPDIR)/bin_Desktop-MvQ.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQ.cc' object='bin_Desktop-MvQ.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQ.o `test -f 'MvQ.cc' || echo '$(srcdir)/'`MvQ.cc
+
+bin_Desktop-MvQ.obj: MvQ.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQ.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQ.Tpo -c -o bin_Desktop-MvQ.obj `if test -f 'MvQ.cc'; then $(CYGPATH_W) 'MvQ.cc'; else $(CYGPATH_W) '$(srcdir)/MvQ.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQ.Tpo $(DEPDIR)/bin_Desktop-MvQ.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQ.cc' object='bin_Desktop-MvQ.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQ.obj `if test -f 'MvQ.cc'; then $(CYGPATH_W) 'MvQ.cc'; else $(CYGPATH_W) '$(srcdir)/MvQ.cc'; fi`
+
+bin_Desktop-MvQIconFolderViewBase.o: MvQIconFolderViewBase.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconFolderViewBase.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Tpo -c -o bin_Desktop-MvQIconFolderViewBase.o `test -f 'MvQIconFolderViewBase.cc' || echo '$(srcdir)/'`MvQIconFolderViewBase.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Tpo $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconFolderViewBase.cc' object='bin_Desktop-MvQIconFolderViewBase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconFolderViewBase.o `test -f 'MvQIconFolderViewBase.cc' || echo '$(srcdir)/'`MvQIconFolderViewBase.cc
+
+bin_Desktop-MvQIconFolderViewBase.obj: MvQIconFolderViewBase.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconFolderViewBase.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Tpo -c -o bin_Desktop-MvQIconFolderViewBase.obj `if test -f 'MvQIconFolderViewBase.cc'; then $(CYGPATH_W) 'MvQIconFolderViewBase.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconFolderViewBase.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Tpo $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconFolderViewBase.cc' object='bin_Desktop-MvQIconFolderViewBase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconFolderViewBase.obj `if test -f 'MvQIconFolderViewBase.cc'; then $(CYGPATH_W) 'MvQIconFolderViewBase.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconFolderViewBase.cc'; fi`
+
+bin_Desktop-MvQBookmarks.o: MvQBookmarks.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQBookmarks.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQBookmarks.Tpo -c -o bin_Desktop-MvQBookmarks.o `test -f 'MvQBookmarks.cc' || echo '$(srcdir)/'`MvQBookmarks.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQBookmarks.Tpo $(DEPDIR)/bin_Desktop-MvQBookmarks.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQBookmarks.cc' object='bin_Desktop-MvQBookmarks.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQBookmarks.o `test -f 'MvQBookmarks.cc' || echo '$(srcdir)/'`MvQBookmarks.cc
+
+bin_Desktop-MvQBookmarks.obj: MvQBookmarks.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQBookmarks.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQBookmarks.Tpo -c -o bin_Desktop-MvQBookmarks.obj `if test -f 'MvQBookmarks.cc'; then $(CYGPATH_W) 'MvQBookmarks.cc'; else $(CYGPATH_W) '$(srcdir)/MvQBookmarks.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQBookmarks.Tpo $(DEPDIR)/bin_Desktop-MvQBookmarks.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQBookmarks.cc' object='bin_Desktop-MvQBookmarks.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQBookmarks.obj `if test -f 'MvQBookmarks.cc'; then $(CYGPATH_W) 'MvQBookmarks.cc'; else $(CYGPATH_W) '$(srcdir)/MvQBookmarks.cc'; fi`
+
+bin_Desktop-MvQBoolLine.o: MvQBoolLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQBoolLine.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQBoolLine.Tpo -c -o bin_Desktop-MvQBoolLine.o `test -f 'MvQBoolLine.cc' || echo '$(srcdir)/'`MvQBoolLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQBoolLine.Tpo $(DEPDIR)/bin_Desktop-MvQBoolLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQBoolLine.cc' object='bin_Desktop-MvQBoolLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQBoolLine.o `test -f 'MvQBoolLine.cc' || echo '$(srcdir)/'`MvQBoolLine.cc
+
+bin_Desktop-MvQBoolLine.obj: MvQBoolLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQBoolLine.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQBoolLine.Tpo -c -o bin_Desktop-MvQBoolLine.obj `if test -f 'MvQBoolLine.cc'; then $(CYGPATH_W) 'MvQBoolLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQBoolLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQBoolLine.Tpo $(DEPDIR)/bin_Desktop-MvQBoolLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQBoolLine.cc' object='bin_Desktop-MvQBoolLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQBoolLine.obj `if test -f 'MvQBoolLine.cc'; then $(CYGPATH_W) 'MvQBoolLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQBoolLine.cc'; fi`
+
+bin_Desktop-MvQClassBrowser.o: MvQClassBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQClassBrowser.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQClassBrowser.Tpo -c -o bin_Desktop-MvQClassBrowser.o `test -f 'MvQClassBrowser.cc' || echo '$(srcdir)/'`MvQClassBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQClassBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQClassBrowser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQClassBrowser.cc' object='bin_Desktop-MvQClassBrowser.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQClassBrowser.o `test -f 'MvQClassBrowser.cc' || echo '$(srcdir)/'`MvQClassBrowser.cc
+
+bin_Desktop-MvQClassBrowser.obj: MvQClassBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQClassBrowser.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQClassBrowser.Tpo -c -o bin_Desktop-MvQClassBrowser.obj `if test -f 'MvQClassBrowser.cc'; then $(CYGPATH_W) 'MvQClassBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQClassBrowser.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQClassBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQClassBrowser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQClassBrowser.cc' object='bin_Desktop-MvQClassBrowser.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQClassBrowser.obj `if test -f 'MvQClassBrowser.cc'; then $(CYGPATH_W) 'MvQClassBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQClassBrowser.cc'; fi`
+
+bin_Desktop-MvQColourHelp.o: MvQColourHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourHelp.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourHelp.Tpo -c -o bin_Desktop-MvQColourHelp.o `test -f 'MvQColourHelp.cc' || echo '$(srcdir)/'`MvQColourHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourHelp.Tpo $(DEPDIR)/bin_Desktop-MvQColourHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQColourHelp.cc' object='bin_Desktop-MvQColourHelp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQColourHelp.o `test -f 'MvQColourHelp.cc' || echo '$(srcdir)/'`MvQColourHelp.cc
+
+bin_Desktop-MvQColourHelp.obj: MvQColourHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourHelp.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourHelp.Tpo -c -o bin_Desktop-MvQColourHelp.obj `if test -f 'MvQColourHelp.cc'; then $(CYGPATH_W) 'MvQColourHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQColourHelp.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourHelp.Tpo $(DEPDIR)/bin_Desktop-MvQColourHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQColourHelp.cc' object='bin_Desktop-MvQColourHelp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQColourHelp.obj `if test -f 'MvQColourHelp.cc'; then $(CYGPATH_W) 'MvQColourHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQColourHelp.cc'; fi`
+
+bin_Desktop-MvQColourLine.o: MvQColourLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourLine.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourLine.Tpo -c -o bin_Desktop-MvQColourLine.o `test -f 'MvQColourLine.cc' || echo '$(srcdir)/'`MvQColourLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourLine.Tpo $(DEPDIR)/bin_Desktop-MvQColourLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQColourLine.cc' object='bin_Desktop-MvQColourLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQColourLine.o `test -f 'MvQColourLine.cc' || echo '$(srcdir)/'`MvQColourLine.cc
+
+bin_Desktop-MvQColourLine.obj: MvQColourLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourLine.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourLine.Tpo -c -o bin_Desktop-MvQColourLine.obj `if test -f 'MvQColourLine.cc'; then $(CYGPATH_W) 'MvQColourLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQColourLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourLine.Tpo $(DEPDIR)/bin_Desktop-MvQColourLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQColourLine.cc' object='bin_Desktop-MvQColourLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQColourLine.obj `if test -f 'MvQColourLine.cc'; then $(CYGPATH_W) 'MvQColourLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQColourLine.cc'; fi`
+
+bin_Desktop-MvQColourListLine.o: MvQColourListLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourListLine.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourListLine.Tpo -c -o bin_Desktop-MvQColourListLine.o `test -f 'MvQColourListLine.cc' || echo '$(srcdir)/'`MvQColourListLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourListLine.Tpo $(DEPDIR)/bin_Desktop-MvQColourListLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQColourListLine.cc' object='bin_Desktop-MvQColourListLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQColourListLine.o `test -f 'MvQColourListLine.cc' || echo '$(srcdir)/'`MvQColourListLine.cc
+
+bin_Desktop-MvQColourListLine.obj: MvQColourListLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourListLine.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourListLine.Tpo -c -o bin_Desktop-MvQColourListLine.obj `if test -f 'MvQColourListLine.cc'; then $(CYGPATH_W) 'MvQColourListLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQColourListLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourListLine.Tpo $(DEPDIR)/bin_Desktop-MvQColourListLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQColourListLine.cc' object='bin_Desktop-MvQColourListLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQColourListLine.obj `if test -f 'MvQColourListLine.cc'; then $(CYGPATH_W) 'MvQColourListLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQColourListLine.cc'; fi`
+
+bin_Desktop-MvQComboBoxLine.o: MvQComboBoxLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQComboBoxLine.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQComboBoxLine.Tpo -c -o bin_Desktop-MvQComboBoxLine.o `test -f 'MvQComboBoxLine.cc' || echo '$(srcdir)/'`MvQComboBoxLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQComboBoxLine.Tpo $(DEPDIR)/bin_Desktop-MvQComboBoxLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQComboBoxLine.cc' object='bin_Desktop-MvQComboBoxLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQComboBoxLine.o `test -f 'MvQComboBoxLine.cc' || echo '$(srcdir)/'`MvQComboBoxLine.cc
+
+bin_Desktop-MvQComboBoxLine.obj: MvQComboBoxLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQComboBoxLine.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQComboBoxLine.Tpo -c -o bin_Desktop-MvQComboBoxLine.obj `if test -f 'MvQComboBoxLine.cc'; then $(CYGPATH_W) 'MvQComboBoxLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQComboBoxLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQComboBoxLine.Tpo $(DEPDIR)/bin_Desktop-MvQComboBoxLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQComboBoxLine.cc' object='bin_Desktop-MvQComboBoxLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQComboBoxLine.obj `if test -f 'MvQComboBoxLine.cc'; then $(CYGPATH_W) 'MvQComboBoxLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQComboBoxLine.cc'; fi`
+
+bin_Desktop-MvQContextMenu.o: MvQContextMenu.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQContextMenu.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQContextMenu.Tpo -c -o bin_Desktop-MvQContextMenu.o `test -f 'MvQContextMenu.cc' || echo '$(srcdir)/'`MvQContextMenu.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQContextMenu.Tpo $(DEPDIR)/bin_Desktop-MvQContextMenu.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQContextMenu.cc' object='bin_Desktop-MvQContextMenu.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQContextMenu.o `test -f 'MvQContextMenu.cc' || echo '$(srcdir)/'`MvQContextMenu.cc
+
+bin_Desktop-MvQContextMenu.obj: MvQContextMenu.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQContextMenu.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQContextMenu.Tpo -c -o bin_Desktop-MvQContextMenu.obj `if test -f 'MvQContextMenu.cc'; then $(CYGPATH_W) 'MvQContextMenu.cc'; else $(CYGPATH_W) '$(srcdir)/MvQContextMenu.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQContextMenu.Tpo $(DEPDIR)/bin_Desktop-MvQContextMenu.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQContextMenu.cc' object='bin_Desktop-MvQContextMenu.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQContextMenu.obj `if test -f 'MvQContextMenu.cc'; then $(CYGPATH_W) 'MvQContextMenu.cc'; else $(CYGPATH_W) '$(srcdir)/MvQContextMenu.cc'; fi`
+
+bin_Desktop-MvQDesktop.o: MvQDesktop.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDesktop.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDesktop.Tpo -c -o bin_Desktop-MvQDesktop.o `test -f 'MvQDesktop.cc' || echo '$(srcdir)/'`MvQDesktop.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDesktop.Tpo $(DEPDIR)/bin_Desktop-MvQDesktop.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDesktop.cc' object='bin_Desktop-MvQDesktop.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDesktop.o `test -f 'MvQDesktop.cc' || echo '$(srcdir)/'`MvQDesktop.cc
+
+bin_Desktop-MvQDesktop.obj: MvQDesktop.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDesktop.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDesktop.Tpo -c -o bin_Desktop-MvQDesktop.obj `if test -f 'MvQDesktop.cc'; then $(CYGPATH_W) 'MvQDesktop.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDesktop.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDesktop.Tpo $(DEPDIR)/bin_Desktop-MvQDesktop.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDesktop.cc' object='bin_Desktop-MvQDesktop.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDesktop.obj `if test -f 'MvQDesktop.cc'; then $(CYGPATH_W) 'MvQDesktop.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDesktop.cc'; fi`
+
+bin_Desktop-MvQDesktopSettings.o: MvQDesktopSettings.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDesktopSettings.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDesktopSettings.Tpo -c -o bin_Desktop-MvQDesktopSettings.o `test -f 'MvQDesktopSettings.cc' || echo '$(srcdir)/'`MvQDesktopSettings.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDesktopSettings.Tpo $(DEPDIR)/bin_Desktop-MvQDesktopSettings.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDesktopSettings.cc' object='bin_Desktop-MvQDesktopSettings.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDesktopSettings.o `test -f 'MvQDesktopSettings.cc' || echo '$(srcdir)/'`MvQDesktopSettings.cc
+
+bin_Desktop-MvQDesktopSettings.obj: MvQDesktopSettings.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDesktopSettings.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDesktopSettings.Tpo -c -o bin_Desktop-MvQDesktopSettings.obj `if test -f 'MvQDesktopSettings.cc'; then $(CYGPATH_W) 'MvQDesktopSettings.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDesktopSettings.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDesktopSettings.Tpo $(DEPDIR)/bin_Desktop-MvQDesktopSettings.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDesktopSettings.cc' object='bin_Desktop-MvQDesktopSettings.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDesktopSettings.obj `if test -f 'MvQDesktopSettings.cc'; then $(CYGPATH_W) 'MvQDesktopSettings.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDesktopSettings.cc'; fi`
+
+bin_Desktop-MvQDetailedFolderView.o: MvQDetailedFolderView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDetailedFolderView.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDetailedFolderView.Tpo -c -o bin_Desktop-MvQDetailedFolderView.o `test -f 'MvQDetailedFolderView.cc' || echo '$(srcdir)/'`MvQDetailedFolderView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDetailedFolderView.Tpo $(DEPDIR)/bin_Desktop-MvQDetailedFolderView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDetailedFolderView.cc' object='bin_Desktop-MvQDetailedFolderView.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDetailedFolderView.o `test -f 'MvQDetailedFolderView.cc' || echo '$(srcdir)/'`MvQDetailedFolderView.cc
+
+bin_Desktop-MvQDetailedFolderView.obj: MvQDetailedFolderView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDetailedFolderView.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDetailedFolderView.Tpo -c -o bin_Desktop-MvQDetailedFolderView.obj `if test -f 'MvQDetailedFolderView.cc'; then $(CYGPATH_W) 'MvQDetailedFolderView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDetailedFolderView.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDetailedFolderView.Tpo $(DEPDIR)/bin_Desktop-MvQDetailedFolderView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDetailedFolderView.cc' object='bin_Desktop-MvQDetailedFolderView.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDetailedFolderView.obj `if test -f 'MvQDetailedFolderView.cc'; then $(CYGPATH_W) 'MvQDetailedFolderView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDetailedFolderView.cc'; fi`
+
+bin_Desktop-MvQDrawerPanel.o: MvQDrawerPanel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDrawerPanel.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDrawerPanel.Tpo -c -o bin_Desktop-MvQDrawerPanel.o `test -f 'MvQDrawerPanel.cc' || echo '$(srcdir)/'`MvQDrawerPanel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDrawerPanel.Tpo $(DEPDIR)/bin_Desktop-MvQDrawerPanel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDrawerPanel.cc' object='bin_Desktop-MvQDrawerPanel.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDrawerPanel.o `test -f 'MvQDrawerPanel.cc' || echo '$(srcdir)/'`MvQDrawerPanel.cc
+
+bin_Desktop-MvQDrawerPanel.obj: MvQDrawerPanel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDrawerPanel.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDrawerPanel.Tpo -c -o bin_Desktop-MvQDrawerPanel.obj `if test -f 'MvQDrawerPanel.cc'; then $(CYGPATH_W) 'MvQDrawerPanel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDrawerPanel.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDrawerPanel.Tpo $(DEPDIR)/bin_Desktop-MvQDrawerPanel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDrawerPanel.cc' object='bin_Desktop-MvQDrawerPanel.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDrawerPanel.obj `if test -f 'MvQDrawerPanel.cc'; then $(CYGPATH_W) 'MvQDrawerPanel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDrawerPanel.cc'; fi`
+
+bin_Desktop-MvQDrawerView.o: MvQDrawerView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDrawerView.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDrawerView.Tpo -c -o bin_Desktop-MvQDrawerView.o `test -f 'MvQDrawerView.cc' || echo '$(srcdir)/'`MvQDrawerView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDrawerView.Tpo $(DEPDIR)/bin_Desktop-MvQDrawerView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDrawerView.cc' object='bin_Desktop-MvQDrawerView.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDrawerView.o `test -f 'MvQDrawerView.cc' || echo '$(srcdir)/'`MvQDrawerView.cc
+
+bin_Desktop-MvQDrawerView.obj: MvQDrawerView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDrawerView.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDrawerView.Tpo -c -o bin_Desktop-MvQDrawerView.obj `if test -f 'MvQDrawerView.cc'; then $(CYGPATH_W) 'MvQDrawerView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDrawerView.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDrawerView.Tpo $(DEPDIR)/bin_Desktop-MvQDrawerView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDrawerView.cc' object='bin_Desktop-MvQDrawerView.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDrawerView.obj `if test -f 'MvQDrawerView.cc'; then $(CYGPATH_W) 'MvQDrawerView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDrawerView.cc'; fi`
+
+bin_Desktop-MvQEditor.o: MvQEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQEditor.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQEditor.Tpo -c -o bin_Desktop-MvQEditor.o `test -f 'MvQEditor.cc' || echo '$(srcdir)/'`MvQEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQEditor.Tpo $(DEPDIR)/bin_Desktop-MvQEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQEditor.cc' object='bin_Desktop-MvQEditor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQEditor.o `test -f 'MvQEditor.cc' || echo '$(srcdir)/'`MvQEditor.cc
+
+bin_Desktop-MvQEditor.obj: MvQEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQEditor.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQEditor.Tpo -c -o bin_Desktop-MvQEditor.obj `if test -f 'MvQEditor.cc'; then $(CYGPATH_W) 'MvQEditor.cc'; else $(CYGPATH_W) '$(srcdir)/MvQEditor.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQEditor.Tpo $(DEPDIR)/bin_Desktop-MvQEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQEditor.cc' object='bin_Desktop-MvQEditor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQEditor.obj `if test -f 'MvQEditor.cc'; then $(CYGPATH_W) 'MvQEditor.cc'; else $(CYGPATH_W) '$(srcdir)/MvQEditor.cc'; fi`
+
+bin_Desktop-MvQExternalHelp.o: MvQExternalHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQExternalHelp.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQExternalHelp.Tpo -c -o bin_Desktop-MvQExternalHelp.o `test -f 'MvQExternalHelp.cc' || echo '$(srcdir)/'`MvQExternalHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQExternalHelp.Tpo $(DEPDIR)/bin_Desktop-MvQExternalHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQExternalHelp.cc' object='bin_Desktop-MvQExternalHelp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQExternalHelp.o `test -f 'MvQExternalHelp.cc' || echo '$(srcdir)/'`MvQExternalHelp.cc
+
+bin_Desktop-MvQExternalHelp.obj: MvQExternalHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQExternalHelp.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQExternalHelp.Tpo -c -o bin_Desktop-MvQExternalHelp.obj `if test -f 'MvQExternalHelp.cc'; then $(CYGPATH_W) 'MvQExternalHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQExternalHelp.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQExternalHelp.Tpo $(DEPDIR)/bin_Desktop-MvQExternalHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQExternalHelp.cc' object='bin_Desktop-MvQExternalHelp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQExternalHelp.obj `if test -f 'MvQExternalHelp.cc'; then $(CYGPATH_W) 'MvQExternalHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQExternalHelp.cc'; fi`
+
+bin_Desktop-MvQFileBrowser.o: MvQFileBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFileBrowser.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFileBrowser.Tpo -c -o bin_Desktop-MvQFileBrowser.o `test -f 'MvQFileBrowser.cc' || echo '$(srcdir)/'`MvQFileBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFileBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQFileBrowser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileBrowser.cc' object='bin_Desktop-MvQFileBrowser.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFileBrowser.o `test -f 'MvQFileBrowser.cc' || echo '$(srcdir)/'`MvQFileBrowser.cc
+
+bin_Desktop-MvQFileBrowser.obj: MvQFileBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFileBrowser.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFileBrowser.Tpo -c -o bin_Desktop-MvQFileBrowser.obj `if test -f 'MvQFileBrowser.cc'; then $(CYGPATH_W) 'MvQFileBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFileBrowser.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFileBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQFileBrowser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileBrowser.cc' object='bin_Desktop-MvQFileBrowser.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFileBrowser.obj `if test -f 'MvQFileBrowser.cc'; then $(CYGPATH_W) 'MvQFileBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFileBrowser.cc'; fi`
+
+bin_Desktop-MvQFileSystemModel.o: MvQFileSystemModel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFileSystemModel.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFileSystemModel.Tpo -c -o bin_Desktop-MvQFileSystemModel.o `test -f 'MvQFileSystemModel.cc' || echo '$(srcdir)/'`MvQFileSystemModel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFileSystemModel.Tpo $(DEPDIR)/bin_Desktop-MvQFileSystemModel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileSystemModel.cc' object='bin_Desktop-MvQFileSystemModel.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFileSystemModel.o `test -f 'MvQFileSystemModel.cc' || echo '$(srcdir)/'`MvQFileSystemModel.cc
+
+bin_Desktop-MvQFileSystemModel.obj: MvQFileSystemModel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFileSystemModel.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFileSystemModel.Tpo -c -o bin_Desktop-MvQFileSystemModel.obj `if test -f 'MvQFileSystemModel.cc'; then $(CYGPATH_W) 'MvQFileSystemModel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFileSystemModel.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFileSystemModel.Tpo $(DEPDIR)/bin_Desktop-MvQFileSystemModel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileSystemModel.cc' object='bin_Desktop-MvQFileSystemModel.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFileSystemModel.obj `if test -f 'MvQFileSystemModel.cc'; then $(CYGPATH_W) 'MvQFileSystemModel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFileSystemModel.cc'; fi`
+
+bin_Desktop-MvQFileWatcher.o: MvQFileWatcher.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFileWatcher.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFileWatcher.Tpo -c -o bin_Desktop-MvQFileWatcher.o `test -f 'MvQFileWatcher.cc' || echo '$(srcdir)/'`MvQFileWatcher.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFileWatcher.Tpo $(DEPDIR)/bin_Desktop-MvQFileWatcher.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileWatcher.cc' object='bin_Desktop-MvQFileWatcher.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFileWatcher.o `test -f 'MvQFileWatcher.cc' || echo '$(srcdir)/'`MvQFileWatcher.cc
+
+bin_Desktop-MvQFileWatcher.obj: MvQFileWatcher.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFileWatcher.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFileWatcher.Tpo -c -o bin_Desktop-MvQFileWatcher.obj `if test -f 'MvQFileWatcher.cc'; then $(CYGPATH_W) 'MvQFileWatcher.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFileWatcher.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFileWatcher.Tpo $(DEPDIR)/bin_Desktop-MvQFileWatcher.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileWatcher.cc' object='bin_Desktop-MvQFileWatcher.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFileWatcher.obj `if test -f 'MvQFileWatcher.cc'; then $(CYGPATH_W) 'MvQFileWatcher.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFileWatcher.cc'; fi`
+
+bin_Desktop-MvQFolderDrawerPanel.o: MvQFolderDrawerPanel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderDrawerPanel.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.Tpo -c -o bin_Desktop-MvQFolderDrawerPanel.o `test -f 'MvQFolderDrawerPanel.cc' || echo '$(srcdir)/'`MvQFolderDrawerPanel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.Tpo $(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderDrawerPanel.cc' object='bin_Desktop-MvQFolderDrawerPanel.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderDrawerPanel.o `test -f 'MvQFolderDrawerPanel.cc' || echo '$(srcdir)/'`MvQFolderDrawerPanel.cc
+
+bin_Desktop-MvQFolderDrawerPanel.obj: MvQFolderDrawerPanel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderDrawerPanel.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.Tpo -c -o bin_Desktop-MvQFolderDrawerPanel.obj `if test -f 'MvQFolderDrawerPanel.cc'; then $(CYGPATH_W) 'MvQFolderDrawerPanel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderDrawerPanel.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.Tpo $(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderDrawerPanel.cc' object='bin_Desktop-MvQFolderDrawerPanel.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderDrawerPanel.obj `if test -f 'MvQFolderDrawerPanel.cc'; then $(CYGPATH_W) 'MvQFolderDrawerPanel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderDrawerPanel.cc'; fi`
+
+bin_Desktop-MvQFolderHistory.o: MvQFolderHistory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderHistory.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderHistory.Tpo -c -o bin_Desktop-MvQFolderHistory.o `test -f 'MvQFolderHistory.cc' || echo '$(srcdir)/'`MvQFolderHistory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderHistory.Tpo $(DEPDIR)/bin_Desktop-MvQFolderHistory.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderHistory.cc' object='bin_Desktop-MvQFolderHistory.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderHistory.o `test -f 'MvQFolderHistory.cc' || echo '$(srcdir)/'`MvQFolderHistory.cc
+
+bin_Desktop-MvQFolderHistory.obj: MvQFolderHistory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderHistory.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderHistory.Tpo -c -o bin_Desktop-MvQFolderHistory.obj `if test -f 'MvQFolderHistory.cc'; then $(CYGPATH_W) 'MvQFolderHistory.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderHistory.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderHistory.Tpo $(DEPDIR)/bin_Desktop-MvQFolderHistory.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderHistory.cc' object='bin_Desktop-MvQFolderHistory.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderHistory.obj `if test -f 'MvQFolderHistory.cc'; then $(CYGPATH_W) 'MvQFolderHistory.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderHistory.cc'; fi`
+
+bin_Desktop-MvQFolderItemProperty.o: MvQFolderItemProperty.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderItemProperty.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderItemProperty.Tpo -c -o bin_Desktop-MvQFolderItemProperty.o `test -f 'MvQFolderItemProperty.cc' || echo '$(srcdir)/'`MvQFolderItemProperty.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderItemProperty.Tpo $(DEPDIR)/bin_Desktop-MvQFolderItemProperty.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderItemProperty.cc' object='bin_Desktop-MvQFolderItemProperty.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderItemProperty.o `test -f 'MvQFolderItemProperty.cc' || echo '$(srcdir)/'`MvQFolderItemProperty.cc
+
+bin_Desktop-MvQFolderItemProperty.obj: MvQFolderItemProperty.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderItemProperty.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderItemProperty.Tpo -c -o bin_Desktop-MvQFolderItemProperty.obj `if test -f 'MvQFolderItemProperty.cc'; then $(CYGPATH_W) 'MvQFolderItemProperty.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderItemProperty.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderItemProperty.Tpo $(DEPDIR)/bin_Desktop-MvQFolderItemProperty.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderItemProperty.cc' object='bin_Desktop-MvQFolderItemProperty.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderItemProperty.obj `if test -f 'MvQFolderItemProperty.cc'; then $(CYGPATH_W) 'MvQFolderItemProperty.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderItemProperty.cc'; fi`
+
+bin_Desktop-MvQFolderModel.o: MvQFolderModel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderModel.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderModel.Tpo -c -o bin_Desktop-MvQFolderModel.o `test -f 'MvQFolderModel.cc' || echo '$(srcdir)/'`MvQFolderModel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderModel.Tpo $(DEPDIR)/bin_Desktop-MvQFolderModel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderModel.cc' object='bin_Desktop-MvQFolderModel.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderModel.o `test -f 'MvQFolderModel.cc' || echo '$(srcdir)/'`MvQFolderModel.cc
+
+bin_Desktop-MvQFolderModel.obj: MvQFolderModel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderModel.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderModel.Tpo -c -o bin_Desktop-MvQFolderModel.obj `if test -f 'MvQFolderModel.cc'; then $(CYGPATH_W) 'MvQFolderModel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderModel.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderModel.Tpo $(DEPDIR)/bin_Desktop-MvQFolderModel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderModel.cc' object='bin_Desktop-MvQFolderModel.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderModel.obj `if test -f 'MvQFolderModel.cc'; then $(CYGPATH_W) 'MvQFolderModel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderModel.cc'; fi`
+
+bin_Desktop-MvQFolderNavigation.o: MvQFolderNavigation.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderNavigation.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderNavigation.Tpo -c -o bin_Desktop-MvQFolderNavigation.o `test -f 'MvQFolderNavigation.cc' || echo '$(srcdir)/'`MvQFolderNavigation.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderNavigation.Tpo $(DEPDIR)/bin_Desktop-MvQFolderNavigation.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderNavigation.cc' object='bin_Desktop-MvQFolderNavigation.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderNavigation.o `test -f 'MvQFolderNavigation.cc' || echo '$(srcdir)/'`MvQFolderNavigation.cc
+
+bin_Desktop-MvQFolderNavigation.obj: MvQFolderNavigation.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderNavigation.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderNavigation.Tpo -c -o bin_Desktop-MvQFolderNavigation.obj `if test -f 'MvQFolderNavigation.cc'; then $(CYGPATH_W) 'MvQFolderNavigation.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderNavigation.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderNavigation.Tpo $(DEPDIR)/bin_Desktop-MvQFolderNavigation.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderNavigation.cc' object='bin_Desktop-MvQFolderNavigation.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderNavigation.obj `if test -f 'MvQFolderNavigation.cc'; then $(CYGPATH_W) 'MvQFolderNavigation.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderNavigation.cc'; fi`
+
+bin_Desktop-MvQFolderPanel.o: MvQFolderPanel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderPanel.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderPanel.Tpo -c -o bin_Desktop-MvQFolderPanel.o `test -f 'MvQFolderPanel.cc' || echo '$(srcdir)/'`MvQFolderPanel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderPanel.Tpo $(DEPDIR)/bin_Desktop-MvQFolderPanel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderPanel.cc' object='bin_Desktop-MvQFolderPanel.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderPanel.o `test -f 'MvQFolderPanel.cc' || echo '$(srcdir)/'`MvQFolderPanel.cc
+
+bin_Desktop-MvQFolderPanel.obj: MvQFolderPanel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderPanel.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderPanel.Tpo -c -o bin_Desktop-MvQFolderPanel.obj `if test -f 'MvQFolderPanel.cc'; then $(CYGPATH_W) 'MvQFolderPanel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderPanel.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderPanel.Tpo $(DEPDIR)/bin_Desktop-MvQFolderPanel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderPanel.cc' object='bin_Desktop-MvQFolderPanel.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderPanel.obj `if test -f 'MvQFolderPanel.cc'; then $(CYGPATH_W) 'MvQFolderPanel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderPanel.cc'; fi`
+
+bin_Desktop-MvQFolderViewBase.o: MvQFolderViewBase.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderViewBase.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderViewBase.Tpo -c -o bin_Desktop-MvQFolderViewBase.o `test -f 'MvQFolderViewBase.cc' || echo '$(srcdir)/'`MvQFolderViewBase.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderViewBase.Tpo $(DEPDIR)/bin_Desktop-MvQFolderViewBase.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderViewBase.cc' object='bin_Desktop-MvQFolderViewBase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderViewBase.o `test -f 'MvQFolderViewBase.cc' || echo '$(srcdir)/'`MvQFolderViewBase.cc
+
+bin_Desktop-MvQFolderViewBase.obj: MvQFolderViewBase.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderViewBase.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderViewBase.Tpo -c -o bin_Desktop-MvQFolderViewBase.obj `if test -f 'MvQFolderViewBase.cc'; then $(CYGPATH_W) 'MvQFolderViewBase.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderViewBase.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderViewBase.Tpo $(DEPDIR)/bin_Desktop-MvQFolderViewBase.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderViewBase.cc' object='bin_Desktop-MvQFolderViewBase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderViewBase.obj `if test -f 'MvQFolderViewBase.cc'; then $(CYGPATH_W) 'MvQFolderViewBase.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderViewBase.cc'; fi`
+
+bin_Desktop-MvQFolderViewDelegate.o: MvQFolderViewDelegate.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderViewDelegate.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.Tpo -c -o bin_Desktop-MvQFolderViewDelegate.o `test -f 'MvQFolderViewDelegate.cc' || echo '$(srcdir)/'`MvQFolderViewDelegate.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.Tpo $(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderViewDelegate.cc' object='bin_Desktop-MvQFolderViewDelegate.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderViewDelegate.o `test -f 'MvQFolderViewDelegate.cc' || echo '$(srcdir)/'`MvQFolderViewDelegate.cc
+
+bin_Desktop-MvQFolderViewDelegate.obj: MvQFolderViewDelegate.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderViewDelegate.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.Tpo -c -o bin_Desktop-MvQFolderViewDelegate.obj `if test -f 'MvQFolderViewDelegate.cc'; then $(CYGPATH_W) 'MvQFolderViewDelegate.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderViewDelegate.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.Tpo $(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderViewDelegate.cc' object='bin_Desktop-MvQFolderViewDelegate.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderViewDelegate.obj `if test -f 'MvQFolderViewDelegate.cc'; then $(CYGPATH_W) 'MvQFolderViewDelegate.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderViewDelegate.cc'; fi`
+
+bin_Desktop-MvQFolderViewHandler.o: MvQFolderViewHandler.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderViewHandler.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderViewHandler.Tpo -c -o bin_Desktop-MvQFolderViewHandler.o `test -f 'MvQFolderViewHandler.cc' || echo '$(srcdir)/'`MvQFolderViewHandler.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderViewHandler.Tpo $(DEPDIR)/bin_Desktop-MvQFolderViewHandler.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderViewHandler.cc' object='bin_Desktop-MvQFolderViewHandler.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderViewHandler.o `test -f 'MvQFolderViewHandler.cc' || echo '$(srcdir)/'`MvQFolderViewHandler.cc
+
+bin_Desktop-MvQFolderViewHandler.obj: MvQFolderViewHandler.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderViewHandler.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderViewHandler.Tpo -c -o bin_Desktop-MvQFolderViewHandler.obj `if test -f 'MvQFolderViewHandler.cc'; then $(CYGPATH_W) 'MvQFolderViewHandler.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderViewHandler.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderViewHandler.Tpo $(DEPDIR)/bin_Desktop-MvQFolderViewHandler.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderViewHandler.cc' object='bin_Desktop-MvQFolderViewHandler.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderViewHandler.obj `if test -f 'MvQFolderViewHandler.cc'; then $(CYGPATH_W) 'MvQFolderViewHandler.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderViewHandler.cc'; fi`
+
+bin_Desktop-MvQFolderWatcher.o: MvQFolderWatcher.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderWatcher.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderWatcher.Tpo -c -o bin_Desktop-MvQFolderWatcher.o `test -f 'MvQFolderWatcher.cc' || echo '$(srcdir)/'`MvQFolderWatcher.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderWatcher.Tpo $(DEPDIR)/bin_Desktop-MvQFolderWatcher.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderWatcher.cc' object='bin_Desktop-MvQFolderWatcher.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderWatcher.o `test -f 'MvQFolderWatcher.cc' || echo '$(srcdir)/'`MvQFolderWatcher.cc
+
+bin_Desktop-MvQFolderWatcher.obj: MvQFolderWatcher.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderWatcher.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderWatcher.Tpo -c -o bin_Desktop-MvQFolderWatcher.obj `if test -f 'MvQFolderWatcher.cc'; then $(CYGPATH_W) 'MvQFolderWatcher.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderWatcher.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderWatcher.Tpo $(DEPDIR)/bin_Desktop-MvQFolderWatcher.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderWatcher.cc' object='bin_Desktop-MvQFolderWatcher.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderWatcher.obj `if test -f 'MvQFolderWatcher.cc'; then $(CYGPATH_W) 'MvQFolderWatcher.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderWatcher.cc'; fi`
+
+bin_Desktop-MvQFolderWidget.o: MvQFolderWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderWidget.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderWidget.Tpo -c -o bin_Desktop-MvQFolderWidget.o `test -f 'MvQFolderWidget.cc' || echo '$(srcdir)/'`MvQFolderWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderWidget.Tpo $(DEPDIR)/bin_Desktop-MvQFolderWidget.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderWidget.cc' object='bin_Desktop-MvQFolderWidget.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderWidget.o `test -f 'MvQFolderWidget.cc' || echo '$(srcdir)/'`MvQFolderWidget.cc
+
+bin_Desktop-MvQFolderWidget.obj: MvQFolderWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderWidget.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderWidget.Tpo -c -o bin_Desktop-MvQFolderWidget.obj `if test -f 'MvQFolderWidget.cc'; then $(CYGPATH_W) 'MvQFolderWidget.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderWidget.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderWidget.Tpo $(DEPDIR)/bin_Desktop-MvQFolderWidget.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderWidget.cc' object='bin_Desktop-MvQFolderWidget.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderWidget.obj `if test -f 'MvQFolderWidget.cc'; then $(CYGPATH_W) 'MvQFolderWidget.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFolderWidget.cc'; fi`
+
+bin_Desktop-MvQGeoHelp.o: MvQGeoHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQGeoHelp.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQGeoHelp.Tpo -c -o bin_Desktop-MvQGeoHelp.o `test -f 'MvQGeoHelp.cc' || echo '$(srcdir)/'`MvQGeoHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQGeoHelp.Tpo $(DEPDIR)/bin_Desktop-MvQGeoHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQGeoHelp.cc' object='bin_Desktop-MvQGeoHelp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQGeoHelp.o `test -f 'MvQGeoHelp.cc' || echo '$(srcdir)/'`MvQGeoHelp.cc
+
+bin_Desktop-MvQGeoHelp.obj: MvQGeoHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQGeoHelp.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQGeoHelp.Tpo -c -o bin_Desktop-MvQGeoHelp.obj `if test -f 'MvQGeoHelp.cc'; then $(CYGPATH_W) 'MvQGeoHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQGeoHelp.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQGeoHelp.Tpo $(DEPDIR)/bin_Desktop-MvQGeoHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQGeoHelp.cc' object='bin_Desktop-MvQGeoHelp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQGeoHelp.obj `if test -f 'MvQGeoHelp.cc'; then $(CYGPATH_W) 'MvQGeoHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQGeoHelp.cc'; fi`
+
+bin_Desktop-MvQHelpBrowser.o: MvQHelpBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQHelpBrowser.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQHelpBrowser.Tpo -c -o bin_Desktop-MvQHelpBrowser.o `test -f 'MvQHelpBrowser.cc' || echo '$(srcdir)/'`MvQHelpBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQHelpBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQHelpBrowser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQHelpBrowser.cc' object='bin_Desktop-MvQHelpBrowser.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQHelpBrowser.o `test -f 'MvQHelpBrowser.cc' || echo '$(srcdir)/'`MvQHelpBrowser.cc
+
+bin_Desktop-MvQHelpBrowser.obj: MvQHelpBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQHelpBrowser.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQHelpBrowser.Tpo -c -o bin_Desktop-MvQHelpBrowser.obj `if test -f 'MvQHelpBrowser.cc'; then $(CYGPATH_W) 'MvQHelpBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQHelpBrowser.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQHelpBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQHelpBrowser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQHelpBrowser.cc' object='bin_Desktop-MvQHelpBrowser.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQHelpBrowser.obj `if test -f 'MvQHelpBrowser.cc'; then $(CYGPATH_W) 'MvQHelpBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQHelpBrowser.cc'; fi`
+
+bin_Desktop-MvQIconFolderView.o: MvQIconFolderView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconFolderView.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconFolderView.Tpo -c -o bin_Desktop-MvQIconFolderView.o `test -f 'MvQIconFolderView.cc' || echo '$(srcdir)/'`MvQIconFolderView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconFolderView.Tpo $(DEPDIR)/bin_Desktop-MvQIconFolderView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconFolderView.cc' object='bin_Desktop-MvQIconFolderView.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconFolderView.o `test -f 'MvQIconFolderView.cc' || echo '$(srcdir)/'`MvQIconFolderView.cc
+
+bin_Desktop-MvQIconFolderView.obj: MvQIconFolderView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconFolderView.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconFolderView.Tpo -c -o bin_Desktop-MvQIconFolderView.obj `if test -f 'MvQIconFolderView.cc'; then $(CYGPATH_W) 'MvQIconFolderView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconFolderView.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconFolderView.Tpo $(DEPDIR)/bin_Desktop-MvQIconFolderView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconFolderView.cc' object='bin_Desktop-MvQIconFolderView.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconFolderView.obj `if test -f 'MvQIconFolderView.cc'; then $(CYGPATH_W) 'MvQIconFolderView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconFolderView.cc'; fi`
+
+bin_Desktop-MvQIconHelp.o: MvQIconHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconHelp.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconHelp.Tpo -c -o bin_Desktop-MvQIconHelp.o `test -f 'MvQIconHelp.cc' || echo '$(srcdir)/'`MvQIconHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconHelp.Tpo $(DEPDIR)/bin_Desktop-MvQIconHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconHelp.cc' object='bin_Desktop-MvQIconHelp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconHelp.o `test -f 'MvQIconHelp.cc' || echo '$(srcdir)/'`MvQIconHelp.cc
+
+bin_Desktop-MvQIconHelp.obj: MvQIconHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconHelp.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconHelp.Tpo -c -o bin_Desktop-MvQIconHelp.obj `if test -f 'MvQIconHelp.cc'; then $(CYGPATH_W) 'MvQIconHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconHelp.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconHelp.Tpo $(DEPDIR)/bin_Desktop-MvQIconHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconHelp.cc' object='bin_Desktop-MvQIconHelp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconHelp.obj `if test -f 'MvQIconHelp.cc'; then $(CYGPATH_W) 'MvQIconHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconHelp.cc'; fi`
+
+bin_Desktop-MvQIconHelpView.o: MvQIconHelpView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconHelpView.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconHelpView.Tpo -c -o bin_Desktop-MvQIconHelpView.o `test -f 'MvQIconHelpView.cc' || echo '$(srcdir)/'`MvQIconHelpView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconHelpView.Tpo $(DEPDIR)/bin_Desktop-MvQIconHelpView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconHelpView.cc' object='bin_Desktop-MvQIconHelpView.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconHelpView.o `test -f 'MvQIconHelpView.cc' || echo '$(srcdir)/'`MvQIconHelpView.cc
+
+bin_Desktop-MvQIconHelpView.obj: MvQIconHelpView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconHelpView.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconHelpView.Tpo -c -o bin_Desktop-MvQIconHelpView.obj `if test -f 'MvQIconHelpView.cc'; then $(CYGPATH_W) 'MvQIconHelpView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconHelpView.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconHelpView.Tpo $(DEPDIR)/bin_Desktop-MvQIconHelpView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconHelpView.cc' object='bin_Desktop-MvQIconHelpView.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconHelpView.obj `if test -f 'MvQIconHelpView.cc'; then $(CYGPATH_W) 'MvQIconHelpView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconHelpView.cc'; fi`
+
+bin_Desktop-MvQIconHolder.o: MvQIconHolder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconHolder.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconHolder.Tpo -c -o bin_Desktop-MvQIconHolder.o `test -f 'MvQIconHolder.cc' || echo '$(srcdir)/'`MvQIconHolder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconHolder.Tpo $(DEPDIR)/bin_Desktop-MvQIconHolder.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconHolder.cc' object='bin_Desktop-MvQIconHolder.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconHolder.o `test -f 'MvQIconHolder.cc' || echo '$(srcdir)/'`MvQIconHolder.cc
+
+bin_Desktop-MvQIconHolder.obj: MvQIconHolder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconHolder.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconHolder.Tpo -c -o bin_Desktop-MvQIconHolder.obj `if test -f 'MvQIconHolder.cc'; then $(CYGPATH_W) 'MvQIconHolder.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconHolder.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconHolder.Tpo $(DEPDIR)/bin_Desktop-MvQIconHolder.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconHolder.cc' object='bin_Desktop-MvQIconHolder.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconHolder.obj `if test -f 'MvQIconHolder.cc'; then $(CYGPATH_W) 'MvQIconHolder.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconHolder.cc'; fi`
+
+bin_Desktop-MvQIconLine.o: MvQIconLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconLine.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconLine.Tpo -c -o bin_Desktop-MvQIconLine.o `test -f 'MvQIconLine.cc' || echo '$(srcdir)/'`MvQIconLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconLine.Tpo $(DEPDIR)/bin_Desktop-MvQIconLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconLine.cc' object='bin_Desktop-MvQIconLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconLine.o `test -f 'MvQIconLine.cc' || echo '$(srcdir)/'`MvQIconLine.cc
+
+bin_Desktop-MvQIconLine.obj: MvQIconLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconLine.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconLine.Tpo -c -o bin_Desktop-MvQIconLine.obj `if test -f 'MvQIconLine.cc'; then $(CYGPATH_W) 'MvQIconLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconLine.Tpo $(DEPDIR)/bin_Desktop-MvQIconLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconLine.cc' object='bin_Desktop-MvQIconLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconLine.obj `if test -f 'MvQIconLine.cc'; then $(CYGPATH_W) 'MvQIconLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconLine.cc'; fi`
+
+bin_Desktop-MvQIconMimeData.o: MvQIconMimeData.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconMimeData.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconMimeData.Tpo -c -o bin_Desktop-MvQIconMimeData.o `test -f 'MvQIconMimeData.cc' || echo '$(srcdir)/'`MvQIconMimeData.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconMimeData.Tpo $(DEPDIR)/bin_Desktop-MvQIconMimeData.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconMimeData.cc' object='bin_Desktop-MvQIconMimeData.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconMimeData.o `test -f 'MvQIconMimeData.cc' || echo '$(srcdir)/'`MvQIconMimeData.cc
+
+bin_Desktop-MvQIconMimeData.obj: MvQIconMimeData.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconMimeData.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconMimeData.Tpo -c -o bin_Desktop-MvQIconMimeData.obj `if test -f 'MvQIconMimeData.cc'; then $(CYGPATH_W) 'MvQIconMimeData.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconMimeData.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconMimeData.Tpo $(DEPDIR)/bin_Desktop-MvQIconMimeData.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconMimeData.cc' object='bin_Desktop-MvQIconMimeData.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconMimeData.obj `if test -f 'MvQIconMimeData.cc'; then $(CYGPATH_W) 'MvQIconMimeData.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconMimeData.cc'; fi`
+
+bin_Desktop-MvQIconObjectModel.o: MvQIconObjectModel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconObjectModel.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconObjectModel.Tpo -c -o bin_Desktop-MvQIconObjectModel.o `test -f 'MvQIconObjectModel.cc' || echo '$(srcdir)/'`MvQIconObjectModel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconObjectModel.Tpo $(DEPDIR)/bin_Desktop-MvQIconObjectModel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconObjectModel.cc' object='bin_Desktop-MvQIconObjectModel.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconObjectModel.o `test -f 'MvQIconObjectModel.cc' || echo '$(srcdir)/'`MvQIconObjectModel.cc
+
+bin_Desktop-MvQIconObjectModel.obj: MvQIconObjectModel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconObjectModel.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconObjectModel.Tpo -c -o bin_Desktop-MvQIconObjectModel.obj `if test -f 'MvQIconObjectModel.cc'; then $(CYGPATH_W) 'MvQIconObjectModel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconObjectModel.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconObjectModel.Tpo $(DEPDIR)/bin_Desktop-MvQIconObjectModel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconObjectModel.cc' object='bin_Desktop-MvQIconObjectModel.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconObjectModel.obj `if test -f 'MvQIconObjectModel.cc'; then $(CYGPATH_W) 'MvQIconObjectModel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconObjectModel.cc'; fi`
+
+bin_Desktop-MvQIconProvider.o: MvQIconProvider.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconProvider.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconProvider.Tpo -c -o bin_Desktop-MvQIconProvider.o `test -f 'MvQIconProvider.cc' || echo '$(srcdir)/'`MvQIconProvider.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconProvider.Tpo $(DEPDIR)/bin_Desktop-MvQIconProvider.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconProvider.cc' object='bin_Desktop-MvQIconProvider.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconProvider.o `test -f 'MvQIconProvider.cc' || echo '$(srcdir)/'`MvQIconProvider.cc
+
+bin_Desktop-MvQIconProvider.obj: MvQIconProvider.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconProvider.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconProvider.Tpo -c -o bin_Desktop-MvQIconProvider.obj `if test -f 'MvQIconProvider.cc'; then $(CYGPATH_W) 'MvQIconProvider.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconProvider.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconProvider.Tpo $(DEPDIR)/bin_Desktop-MvQIconProvider.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconProvider.cc' object='bin_Desktop-MvQIconProvider.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconProvider.obj `if test -f 'MvQIconProvider.cc'; then $(CYGPATH_W) 'MvQIconProvider.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconProvider.cc'; fi`
+
+bin_Desktop-MvQListHelp.o: MvQListHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQListHelp.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQListHelp.Tpo -c -o bin_Desktop-MvQListHelp.o `test -f 'MvQListHelp.cc' || echo '$(srcdir)/'`MvQListHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQListHelp.Tpo $(DEPDIR)/bin_Desktop-MvQListHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQListHelp.cc' object='bin_Desktop-MvQListHelp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQListHelp.o `test -f 'MvQListHelp.cc' || echo '$(srcdir)/'`MvQListHelp.cc
+
+bin_Desktop-MvQListHelp.obj: MvQListHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQListHelp.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQListHelp.Tpo -c -o bin_Desktop-MvQListHelp.obj `if test -f 'MvQListHelp.cc'; then $(CYGPATH_W) 'MvQListHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQListHelp.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQListHelp.Tpo $(DEPDIR)/bin_Desktop-MvQListHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQListHelp.cc' object='bin_Desktop-MvQListHelp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQListHelp.obj `if test -f 'MvQListHelp.cc'; then $(CYGPATH_W) 'MvQListHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQListHelp.cc'; fi`
+
+bin_Desktop-MvQLogDialog.o: MvQLogDialog.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQLogDialog.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQLogDialog.Tpo -c -o bin_Desktop-MvQLogDialog.o `test -f 'MvQLogDialog.cc' || echo '$(srcdir)/'`MvQLogDialog.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQLogDialog.Tpo $(DEPDIR)/bin_Desktop-MvQLogDialog.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQLogDialog.cc' object='bin_Desktop-MvQLogDialog.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQLogDialog.o `test -f 'MvQLogDialog.cc' || echo '$(srcdir)/'`MvQLogDialog.cc
+
+bin_Desktop-MvQLogDialog.obj: MvQLogDialog.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQLogDialog.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQLogDialog.Tpo -c -o bin_Desktop-MvQLogDialog.obj `if test -f 'MvQLogDialog.cc'; then $(CYGPATH_W) 'MvQLogDialog.cc'; else $(CYGPATH_W) '$(srcdir)/MvQLogDialog.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQLogDialog.Tpo $(DEPDIR)/bin_Desktop-MvQLogDialog.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQLogDialog.cc' object='bin_Desktop-MvQLogDialog.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQLogDialog.obj `if test -f 'MvQLogDialog.cc'; then $(CYGPATH_W) 'MvQLogDialog.cc'; else $(CYGPATH_W) '$(srcdir)/MvQLogDialog.cc'; fi`
+
+bin_Desktop-MvQMessageBox.o: MvQMessageBox.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQMessageBox.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQMessageBox.Tpo -c -o bin_Desktop-MvQMessageBox.o `test -f 'MvQMessageBox.cc' || echo '$(srcdir)/'`MvQMessageBox.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQMessageBox.Tpo $(DEPDIR)/bin_Desktop-MvQMessageBox.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQMessageBox.cc' object='bin_Desktop-MvQMessageBox.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQMessageBox.o `test -f 'MvQMessageBox.cc' || echo '$(srcdir)/'`MvQMessageBox.cc
+
+bin_Desktop-MvQMessageBox.obj: MvQMessageBox.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQMessageBox.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQMessageBox.Tpo -c -o bin_Desktop-MvQMessageBox.obj `if test -f 'MvQMessageBox.cc'; then $(CYGPATH_W) 'MvQMessageBox.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMessageBox.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQMessageBox.Tpo $(DEPDIR)/bin_Desktop-MvQMessageBox.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQMessageBox.cc' object='bin_Desktop-MvQMessageBox.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQMessageBox.obj `if test -f 'MvQMessageBox.cc'; then $(CYGPATH_W) 'MvQMessageBox.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMessageBox.cc'; fi`
+
+bin_Desktop-MvQNewIconWidget.o: MvQNewIconWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQNewIconWidget.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQNewIconWidget.Tpo -c -o bin_Desktop-MvQNewIconWidget.o `test -f 'MvQNewIconWidget.cc' || echo '$(srcdir)/'`MvQNewIconWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQNewIconWidget.Tpo $(DEPDIR)/bin_Desktop-MvQNewIconWidget.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQNewIconWidget.cc' object='bin_Desktop-MvQNewIconWidget.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQNewIconWidget.o `test -f 'MvQNewIconWidget.cc' || echo '$(srcdir)/'`MvQNewIconWidget.cc
+
+bin_Desktop-MvQNewIconWidget.obj: MvQNewIconWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQNewIconWidget.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQNewIconWidget.Tpo -c -o bin_Desktop-MvQNewIconWidget.obj `if test -f 'MvQNewIconWidget.cc'; then $(CYGPATH_W) 'MvQNewIconWidget.cc'; else $(CYGPATH_W) '$(srcdir)/MvQNewIconWidget.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQNewIconWidget.Tpo $(DEPDIR)/bin_Desktop-MvQNewIconWidget.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQNewIconWidget.cc' object='bin_Desktop-MvQNewIconWidget.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQNewIconWidget.obj `if test -f 'MvQNewIconWidget.cc'; then $(CYGPATH_W) 'MvQNewIconWidget.cc'; else $(CYGPATH_W) '$(srcdir)/MvQNewIconWidget.cc'; fi`
+
+bin_Desktop-MvQNoneLine.o: MvQNoneLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQNoneLine.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQNoneLine.Tpo -c -o bin_Desktop-MvQNoneLine.o `test -f 'MvQNoneLine.cc' || echo '$(srcdir)/'`MvQNoneLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQNoneLine.Tpo $(DEPDIR)/bin_Desktop-MvQNoneLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQNoneLine.cc' object='bin_Desktop-MvQNoneLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQNoneLine.o `test -f 'MvQNoneLine.cc' || echo '$(srcdir)/'`MvQNoneLine.cc
+
+bin_Desktop-MvQNoneLine.obj: MvQNoneLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQNoneLine.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQNoneLine.Tpo -c -o bin_Desktop-MvQNoneLine.obj `if test -f 'MvQNoneLine.cc'; then $(CYGPATH_W) 'MvQNoneLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQNoneLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQNoneLine.Tpo $(DEPDIR)/bin_Desktop-MvQNoneLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQNoneLine.cc' object='bin_Desktop-MvQNoneLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQNoneLine.obj `if test -f 'MvQNoneLine.cc'; then $(CYGPATH_W) 'MvQNoneLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQNoneLine.cc'; fi`
+
+bin_Desktop-MvQObjectBrowser.o: MvQObjectBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQObjectBrowser.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQObjectBrowser.Tpo -c -o bin_Desktop-MvQObjectBrowser.o `test -f 'MvQObjectBrowser.cc' || echo '$(srcdir)/'`MvQObjectBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQObjectBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQObjectBrowser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQObjectBrowser.cc' object='bin_Desktop-MvQObjectBrowser.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQObjectBrowser.o `test -f 'MvQObjectBrowser.cc' || echo '$(srcdir)/'`MvQObjectBrowser.cc
+
+bin_Desktop-MvQObjectBrowser.obj: MvQObjectBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQObjectBrowser.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQObjectBrowser.Tpo -c -o bin_Desktop-MvQObjectBrowser.obj `if test -f 'MvQObjectBrowser.cc'; then $(CYGPATH_W) 'MvQObjectBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQObjectBrowser.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQObjectBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQObjectBrowser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQObjectBrowser.cc' object='bin_Desktop-MvQObjectBrowser.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQObjectBrowser.obj `if test -f 'MvQObjectBrowser.cc'; then $(CYGPATH_W) 'MvQObjectBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQObjectBrowser.cc'; fi`
+
+bin_Desktop-MvQPageView.o: MvQPageView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQPageView.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQPageView.Tpo -c -o bin_Desktop-MvQPageView.o `test -f 'MvQPageView.cc' || echo '$(srcdir)/'`MvQPageView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQPageView.Tpo $(DEPDIR)/bin_Desktop-MvQPageView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQPageView.cc' object='bin_Desktop-MvQPageView.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQPageView.o `test -f 'MvQPageView.cc' || echo '$(srcdir)/'`MvQPageView.cc
+
+bin_Desktop-MvQPageView.obj: MvQPageView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQPageView.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQPageView.Tpo -c -o bin_Desktop-MvQPageView.obj `if test -f 'MvQPageView.cc'; then $(CYGPATH_W) 'MvQPageView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQPageView.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQPageView.Tpo $(DEPDIR)/bin_Desktop-MvQPageView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQPageView.cc' object='bin_Desktop-MvQPageView.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQPageView.obj `if test -f 'MvQPageView.cc'; then $(CYGPATH_W) 'MvQPageView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQPageView.cc'; fi`
+
+bin_Desktop-MvQPalette.o: MvQPalette.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQPalette.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQPalette.Tpo -c -o bin_Desktop-MvQPalette.o `test -f 'MvQPalette.cc' || echo '$(srcdir)/'`MvQPalette.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQPalette.Tpo $(DEPDIR)/bin_Desktop-MvQPalette.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQPalette.cc' object='bin_Desktop-MvQPalette.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQPalette.o `test -f 'MvQPalette.cc' || echo '$(srcdir)/'`MvQPalette.cc
+
+bin_Desktop-MvQPalette.obj: MvQPalette.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQPalette.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQPalette.Tpo -c -o bin_Desktop-MvQPalette.obj `if test -f 'MvQPalette.cc'; then $(CYGPATH_W) 'MvQPalette.cc'; else $(CYGPATH_W) '$(srcdir)/MvQPalette.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQPalette.Tpo $(DEPDIR)/bin_Desktop-MvQPalette.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQPalette.cc' object='bin_Desktop-MvQPalette.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQPalette.obj `if test -f 'MvQPalette.cc'; then $(CYGPATH_W) 'MvQPalette.cc'; else $(CYGPATH_W) '$(srcdir)/MvQPalette.cc'; fi`
+
+bin_Desktop-MvQPathWidget.o: MvQPathWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQPathWidget.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQPathWidget.Tpo -c -o bin_Desktop-MvQPathWidget.o `test -f 'MvQPathWidget.cc' || echo '$(srcdir)/'`MvQPathWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQPathWidget.Tpo $(DEPDIR)/bin_Desktop-MvQPathWidget.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQPathWidget.cc' object='bin_Desktop-MvQPathWidget.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQPathWidget.o `test -f 'MvQPathWidget.cc' || echo '$(srcdir)/'`MvQPathWidget.cc
+
+bin_Desktop-MvQPathWidget.obj: MvQPathWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQPathWidget.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQPathWidget.Tpo -c -o bin_Desktop-MvQPathWidget.obj `if test -f 'MvQPathWidget.cc'; then $(CYGPATH_W) 'MvQPathWidget.cc'; else $(CYGPATH_W) '$(srcdir)/MvQPathWidget.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQPathWidget.Tpo $(DEPDIR)/bin_Desktop-MvQPathWidget.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQPathWidget.cc' object='bin_Desktop-MvQPathWidget.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQPathWidget.obj `if test -f 'MvQPathWidget.cc'; then $(CYGPATH_W) 'MvQPathWidget.cc'; else $(CYGPATH_W) '$(srcdir)/MvQPathWidget.cc'; fi`
+
+bin_Desktop-MvQProductBrowser.o: MvQProductBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQProductBrowser.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQProductBrowser.Tpo -c -o bin_Desktop-MvQProductBrowser.o `test -f 'MvQProductBrowser.cc' || echo '$(srcdir)/'`MvQProductBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQProductBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQProductBrowser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQProductBrowser.cc' object='bin_Desktop-MvQProductBrowser.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQProductBrowser.o `test -f 'MvQProductBrowser.cc' || echo '$(srcdir)/'`MvQProductBrowser.cc
+
+bin_Desktop-MvQProductBrowser.obj: MvQProductBrowser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQProductBrowser.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQProductBrowser.Tpo -c -o bin_Desktop-MvQProductBrowser.obj `if test -f 'MvQProductBrowser.cc'; then $(CYGPATH_W) 'MvQProductBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQProductBrowser.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQProductBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQProductBrowser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQProductBrowser.cc' object='bin_Desktop-MvQProductBrowser.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQProductBrowser.obj `if test -f 'MvQProductBrowser.cc'; then $(CYGPATH_W) 'MvQProductBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQProductBrowser.cc'; fi`
+
+bin_Desktop-MvQRequestPanelHelp.o: MvQRequestPanelHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRequestPanelHelp.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.Tpo -c -o bin_Desktop-MvQRequestPanelHelp.o `test -f 'MvQRequestPanelHelp.cc' || echo '$(srcdir)/'`MvQRequestPanelHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.Tpo $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQRequestPanelHelp.cc' object='bin_Desktop-MvQRequestPanelHelp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRequestPanelHelp.o `test -f 'MvQRequestPanelHelp.cc' || echo '$(srcdir)/'`MvQRequestPanelHelp.cc
+
+bin_Desktop-MvQRequestPanelHelp.obj: MvQRequestPanelHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRequestPanelHelp.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.Tpo -c -o bin_Desktop-MvQRequestPanelHelp.obj `if test -f 'MvQRequestPanelHelp.cc'; then $(CYGPATH_W) 'MvQRequestPanelHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQRequestPanelHelp.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.Tpo $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQRequestPanelHelp.cc' object='bin_Desktop-MvQRequestPanelHelp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRequestPanelHelp.obj `if test -f 'MvQRequestPanelHelp.cc'; then $(CYGPATH_W) 'MvQRequestPanelHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQRequestPanelHelp.cc'; fi`
+
+bin_Desktop-MvQRequestPanelLine.o: MvQRequestPanelLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRequestPanelLine.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRequestPanelLine.Tpo -c -o bin_Desktop-MvQRequestPanelLine.o `test -f 'MvQRequestPanelLine.cc' || echo '$(srcdir)/'`MvQRequestPanelLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRequestPanelLine.Tpo $(DEPDIR)/bin_Desktop-MvQRequestPanelLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQRequestPanelLine.cc' object='bin_Desktop-MvQRequestPanelLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRequestPanelLine.o `test -f 'MvQRequestPanelLine.cc' || echo '$(srcdir)/'`MvQRequestPanelLine.cc
+
+bin_Desktop-MvQRequestPanelLine.obj: MvQRequestPanelLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRequestPanelLine.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRequestPanelLine.Tpo -c -o bin_Desktop-MvQRequestPanelLine.obj `if test -f 'MvQRequestPanelLine.cc'; then $(CYGPATH_W) 'MvQRequestPanelLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQRequestPanelLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRequestPanelLine.Tpo $(DEPDIR)/bin_Desktop-MvQRequestPanelLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQRequestPanelLine.cc' object='bin_Desktop-MvQRequestPanelLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRequestPanelLine.obj `if test -f 'MvQRequestPanelLine.cc'; then $(CYGPATH_W) 'MvQRequestPanelLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQRequestPanelLine.cc'; fi`
+
+bin_Desktop-MvQRequestPanelWidget.o: MvQRequestPanelWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRequestPanelWidget.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.Tpo -c -o bin_Desktop-MvQRequestPanelWidget.o `test -f 'MvQRequestPanelWidget.cc' || echo '$(srcdir)/'`MvQRequestPanelWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.Tpo $(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQRequestPanelWidget.cc' object='bin_Desktop-MvQRequestPanelWidget.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRequestPanelWidget.o `test -f 'MvQRequestPanelWidget.cc' || echo '$(srcdir)/'`MvQRequestPanelWidget.cc
+
+bin_Desktop-MvQRequestPanelWidget.obj: MvQRequestPanelWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRequestPanelWidget.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.Tpo -c -o bin_Desktop-MvQRequestPanelWidget.obj `if test -f 'MvQRequestPanelWidget.cc'; then $(CYGPATH_W) 'MvQRequestPanelWidget.cc'; else $(CYGPATH_W) '$(srcdir)/MvQRequestPanelWidget.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.Tpo $(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQRequestPanelWidget.cc' object='bin_Desktop-MvQRequestPanelWidget.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRequestPanelWidget.obj `if test -f 'MvQRequestPanelWidget.cc'; then $(CYGPATH_W) 'MvQRequestPanelWidget.cc'; else $(CYGPATH_W) '$(srcdir)/MvQRequestPanelWidget.cc'; fi`
+
+bin_Desktop-MvQScriptHelp.o: MvQScriptHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQScriptHelp.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQScriptHelp.Tpo -c -o bin_Desktop-MvQScriptHelp.o `test -f 'MvQScriptHelp.cc' || echo '$(srcdir)/'`MvQScriptHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQScriptHelp.Tpo $(DEPDIR)/bin_Desktop-MvQScriptHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQScriptHelp.cc' object='bin_Desktop-MvQScriptHelp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQScriptHelp.o `test -f 'MvQScriptHelp.cc' || echo '$(srcdir)/'`MvQScriptHelp.cc
+
+bin_Desktop-MvQScriptHelp.obj: MvQScriptHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQScriptHelp.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQScriptHelp.Tpo -c -o bin_Desktop-MvQScriptHelp.obj `if test -f 'MvQScriptHelp.cc'; then $(CYGPATH_W) 'MvQScriptHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQScriptHelp.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQScriptHelp.Tpo $(DEPDIR)/bin_Desktop-MvQScriptHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQScriptHelp.cc' object='bin_Desktop-MvQScriptHelp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQScriptHelp.obj `if test -f 'MvQScriptHelp.cc'; then $(CYGPATH_W) 'MvQScriptHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQScriptHelp.cc'; fi`
+
+bin_Desktop-MvQScrolledTextLine.o: MvQScrolledTextLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQScrolledTextLine.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQScrolledTextLine.Tpo -c -o bin_Desktop-MvQScrolledTextLine.o `test -f 'MvQScrolledTextLine.cc' || echo '$(srcdir)/'`MvQScrolledTextLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQScrolledTextLine.Tpo $(DEPDIR)/bin_Desktop-MvQScrolledTextLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQScrolledTextLine.cc' object='bin_Desktop-MvQScrolledTextLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQScrolledTextLine.o `test -f 'MvQScrolledTextLine.cc' || echo '$(srcdir)/'`MvQScrolledTextLine.cc
+
+bin_Desktop-MvQScrolledTextLine.obj: MvQScrolledTextLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQScrolledTextLine.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQScrolledTextLine.Tpo -c -o bin_Desktop-MvQScrolledTextLine.obj `if test -f 'MvQScrolledTextLine.cc'; then $(CYGPATH_W) 'MvQScrolledTextLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQScrolledTextLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQScrolledTextLine.Tpo $(DEPDIR)/bin_Desktop-MvQScrolledTextLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQScrolledTextLine.cc' object='bin_Desktop-MvQScrolledTextLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQScrolledTextLine.obj `if test -f 'MvQScrolledTextLine.cc'; then $(CYGPATH_W) 'MvQScrolledTextLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQScrolledTextLine.cc'; fi`
+
+bin_Desktop-MvQSliderLine.o: MvQSliderLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQSliderLine.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQSliderLine.Tpo -c -o bin_Desktop-MvQSliderLine.o `test -f 'MvQSliderLine.cc' || echo '$(srcdir)/'`MvQSliderLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQSliderLine.Tpo $(DEPDIR)/bin_Desktop-MvQSliderLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQSliderLine.cc' object='bin_Desktop-MvQSliderLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQSliderLine.o `test -f 'MvQSliderLine.cc' || echo '$(srcdir)/'`MvQSliderLine.cc
+
+bin_Desktop-MvQSliderLine.obj: MvQSliderLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQSliderLine.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQSliderLine.Tpo -c -o bin_Desktop-MvQSliderLine.obj `if test -f 'MvQSliderLine.cc'; then $(CYGPATH_W) 'MvQSliderLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQSliderLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQSliderLine.Tpo $(DEPDIR)/bin_Desktop-MvQSliderLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQSliderLine.cc' object='bin_Desktop-MvQSliderLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQSliderLine.obj `if test -f 'MvQSliderLine.cc'; then $(CYGPATH_W) 'MvQSliderLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQSliderLine.cc'; fi`
+
+bin_Desktop-MvQStationsHelp.o: MvQStationsHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQStationsHelp.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQStationsHelp.Tpo -c -o bin_Desktop-MvQStationsHelp.o `test -f 'MvQStationsHelp.cc' || echo '$(srcdir)/'`MvQStationsHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQStationsHelp.Tpo $(DEPDIR)/bin_Desktop-MvQStationsHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQStationsHelp.cc' object='bin_Desktop-MvQStationsHelp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQStationsHelp.o `test -f 'MvQStationsHelp.cc' || echo '$(srcdir)/'`MvQStationsHelp.cc
+
+bin_Desktop-MvQStationsHelp.obj: MvQStationsHelp.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQStationsHelp.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQStationsHelp.Tpo -c -o bin_Desktop-MvQStationsHelp.obj `if test -f 'MvQStationsHelp.cc'; then $(CYGPATH_W) 'MvQStationsHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQStationsHelp.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQStationsHelp.Tpo $(DEPDIR)/bin_Desktop-MvQStationsHelp.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQStationsHelp.cc' object='bin_Desktop-MvQStationsHelp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQStationsHelp.obj `if test -f 'MvQStationsHelp.cc'; then $(CYGPATH_W) 'MvQStationsHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQStationsHelp.cc'; fi`
+
+bin_Desktop-MvQStringLine.o: MvQStringLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQStringLine.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQStringLine.Tpo -c -o bin_Desktop-MvQStringLine.o `test -f 'MvQStringLine.cc' || echo '$(srcdir)/'`MvQStringLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQStringLine.Tpo $(DEPDIR)/bin_Desktop-MvQStringLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQStringLine.cc' object='bin_Desktop-MvQStringLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQStringLine.o `test -f 'MvQStringLine.cc' || echo '$(srcdir)/'`MvQStringLine.cc
+
+bin_Desktop-MvQStringLine.obj: MvQStringLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQStringLine.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQStringLine.Tpo -c -o bin_Desktop-MvQStringLine.obj `if test -f 'MvQStringLine.cc'; then $(CYGPATH_W) 'MvQStringLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQStringLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQStringLine.Tpo $(DEPDIR)/bin_Desktop-MvQStringLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQStringLine.cc' object='bin_Desktop-MvQStringLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQStringLine.obj `if test -f 'MvQStringLine.cc'; then $(CYGPATH_W) 'MvQStringLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQStringLine.cc'; fi`
+
+bin_Desktop-MvQTemplateDrawer.o: MvQTemplateDrawer.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTemplateDrawer.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTemplateDrawer.Tpo -c -o bin_Desktop-MvQTemplateDrawer.o `test -f 'MvQTemplateDrawer.cc' || echo '$(srcdir)/'`MvQTemplateDrawer.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTemplateDrawer.Tpo $(DEPDIR)/bin_Desktop-MvQTemplateDrawer.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTemplateDrawer.cc' object='bin_Desktop-MvQTemplateDrawer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTemplateDrawer.o `test -f 'MvQTemplateDrawer.cc' || echo '$(srcdir)/'`MvQTemplateDrawer.cc
+
+bin_Desktop-MvQTemplateDrawer.obj: MvQTemplateDrawer.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTemplateDrawer.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTemplateDrawer.Tpo -c -o bin_Desktop-MvQTemplateDrawer.obj `if test -f 'MvQTemplateDrawer.cc'; then $(CYGPATH_W) 'MvQTemplateDrawer.cc'; else $(CYGPATH_W) '$(srcdir)/MvQTemplateDrawer.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTemplateDrawer.Tpo $(DEPDIR)/bin_Desktop-MvQTemplateDrawer.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTemplateDrawer.cc' object='bin_Desktop-MvQTemplateDrawer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTemplateDrawer.obj `if test -f 'MvQTemplateDrawer.cc'; then $(CYGPATH_W) 'MvQTemplateDrawer.cc'; else $(CYGPATH_W) '$(srcdir)/MvQTemplateDrawer.cc'; fi`
+
+bin_Desktop-MvQTemporaryEditor.o: MvQTemporaryEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTemporaryEditor.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTemporaryEditor.Tpo -c -o bin_Desktop-MvQTemporaryEditor.o `test -f 'MvQTemporaryEditor.cc' || echo '$(srcdir)/'`MvQTemporaryEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTemporaryEditor.Tpo $(DEPDIR)/bin_Desktop-MvQTemporaryEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTemporaryEditor.cc' object='bin_Desktop-MvQTemporaryEditor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTemporaryEditor.o `test -f 'MvQTemporaryEditor.cc' || echo '$(srcdir)/'`MvQTemporaryEditor.cc
+
+bin_Desktop-MvQTemporaryEditor.obj: MvQTemporaryEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTemporaryEditor.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTemporaryEditor.Tpo -c -o bin_Desktop-MvQTemporaryEditor.obj `if test -f 'MvQTemporaryEditor.cc'; then $(CYGPATH_W) 'MvQTemporaryEditor.cc'; else $(CYGPATH_W) '$(srcdir)/MvQTemporaryEditor.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTemporaryEditor.Tpo $(DEPDIR)/bin_Desktop-MvQTemporaryEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTemporaryEditor.cc' object='bin_Desktop-MvQTemporaryEditor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTemporaryEditor.obj `if test -f 'MvQTemporaryEditor.cc'; then $(CYGPATH_W) 'MvQTemporaryEditor.cc'; else $(CYGPATH_W) '$(srcdir)/MvQTemporaryEditor.cc'; fi`
+
+bin_Desktop-MvQTextLine.o: MvQTextLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTextLine.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTextLine.Tpo -c -o bin_Desktop-MvQTextLine.o `test -f 'MvQTextLine.cc' || echo '$(srcdir)/'`MvQTextLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTextLine.Tpo $(DEPDIR)/bin_Desktop-MvQTextLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTextLine.cc' object='bin_Desktop-MvQTextLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTextLine.o `test -f 'MvQTextLine.cc' || echo '$(srcdir)/'`MvQTextLine.cc
+
+bin_Desktop-MvQTextLine.obj: MvQTextLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTextLine.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTextLine.Tpo -c -o bin_Desktop-MvQTextLine.obj `if test -f 'MvQTextLine.cc'; then $(CYGPATH_W) 'MvQTextLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQTextLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTextLine.Tpo $(DEPDIR)/bin_Desktop-MvQTextLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTextLine.cc' object='bin_Desktop-MvQTextLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTextLine.obj `if test -f 'MvQTextLine.cc'; then $(CYGPATH_W) 'MvQTextLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQTextLine.cc'; fi`
+
+bin_Desktop-MvQTools.o: MvQTools.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTools.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTools.Tpo -c -o bin_Desktop-MvQTools.o `test -f 'MvQTools.cc' || echo '$(srcdir)/'`MvQTools.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTools.Tpo $(DEPDIR)/bin_Desktop-MvQTools.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTools.cc' object='bin_Desktop-MvQTools.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTools.o `test -f 'MvQTools.cc' || echo '$(srcdir)/'`MvQTools.cc
+
+bin_Desktop-MvQTools.obj: MvQTools.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTools.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTools.Tpo -c -o bin_Desktop-MvQTools.obj `if test -f 'MvQTools.cc'; then $(CYGPATH_W) 'MvQTools.cc'; else $(CYGPATH_W) '$(srcdir)/MvQTools.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTools.Tpo $(DEPDIR)/bin_Desktop-MvQTools.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTools.cc' object='bin_Desktop-MvQTools.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTools.obj `if test -f 'MvQTools.cc'; then $(CYGPATH_W) 'MvQTools.cc'; else $(CYGPATH_W) '$(srcdir)/MvQTools.cc'; fi`
+
+bin_Desktop-MvQViewDrawer.o: MvQViewDrawer.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQViewDrawer.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQViewDrawer.Tpo -c -o bin_Desktop-MvQViewDrawer.o `test -f 'MvQViewDrawer.cc' || echo '$(srcdir)/'`MvQViewDrawer.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQViewDrawer.Tpo $(DEPDIR)/bin_Desktop-MvQViewDrawer.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQViewDrawer.cc' object='bin_Desktop-MvQViewDrawer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQViewDrawer.o `test -f 'MvQViewDrawer.cc' || echo '$(srcdir)/'`MvQViewDrawer.cc
+
+bin_Desktop-MvQViewDrawer.obj: MvQViewDrawer.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQViewDrawer.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQViewDrawer.Tpo -c -o bin_Desktop-MvQViewDrawer.obj `if test -f 'MvQViewDrawer.cc'; then $(CYGPATH_W) 'MvQViewDrawer.cc'; else $(CYGPATH_W) '$(srcdir)/MvQViewDrawer.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQViewDrawer.Tpo $(DEPDIR)/bin_Desktop-MvQViewDrawer.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQViewDrawer.cc' object='bin_Desktop-MvQViewDrawer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQViewDrawer.obj `if test -f 'MvQViewDrawer.cc'; then $(CYGPATH_W) 'MvQViewDrawer.cc'; else $(CYGPATH_W) '$(srcdir)/MvQViewDrawer.cc'; fi`
+
+bin_Desktop-Action.o: Action.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Action.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Action.Tpo -c -o bin_Desktop-Action.o `test -f 'Action.cc' || echo '$(srcdir)/'`Action.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Action.Tpo $(DEPDIR)/bin_Desktop-Action.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Action.cc' object='bin_Desktop-Action.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Action.o `test -f 'Action.cc' || echo '$(srcdir)/'`Action.cc
+
+bin_Desktop-Action.obj: Action.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Action.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Action.Tpo -c -o bin_Desktop-Action.obj `if test -f 'Action.cc'; then $(CYGPATH_W) 'Action.cc'; else $(CYGPATH_W) '$(srcdir)/Action.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Action.Tpo $(DEPDIR)/bin_Desktop-Action.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Action.cc' object='bin_Desktop-Action.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Action.obj `if test -f 'Action.cc'; then $(CYGPATH_W) 'Action.cc'; else $(CYGPATH_W) '$(srcdir)/Action.cc'; fi`
+
+bin_Desktop-ActionCommand.o: ActionCommand.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ActionCommand.o -MD -MP -MF $(DEPDIR)/bin_Desktop-ActionCommand.Tpo -c -o bin_Desktop-ActionCommand.o `test -f 'ActionCommand.cc' || echo '$(srcdir)/'`ActionCommand.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ActionCommand.Tpo $(DEPDIR)/bin_Desktop-ActionCommand.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ActionCommand.cc' object='bin_Desktop-ActionCommand.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ActionCommand.o `test -f 'ActionCommand.cc' || echo '$(srcdir)/'`ActionCommand.cc
+
+bin_Desktop-ActionCommand.obj: ActionCommand.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ActionCommand.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-ActionCommand.Tpo -c -o bin_Desktop-ActionCommand.obj `if test -f 'ActionCommand.cc'; then $(CYGPATH_W) 'ActionCommand.cc'; else $(CYGPATH_W) '$(srcdir)/ActionCommand.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ActionCommand.Tpo $(DEPDIR)/bin_Desktop-ActionCommand.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ActionCommand.cc' object='bin_Desktop-ActionCommand.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ActionCommand.obj `if test -f 'ActionCommand.cc'; then $(CYGPATH_W) 'ActionCommand.cc'; else $(CYGPATH_W) '$(srcdir)/ActionCommand.cc'; fi`
+
+bin_Desktop-Command.o: Command.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Command.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Command.Tpo -c -o bin_Desktop-Command.o `test -f 'Command.cc' || echo '$(srcdir)/'`Command.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Command.Tpo $(DEPDIR)/bin_Desktop-Command.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Command.cc' object='bin_Desktop-Command.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Command.o `test -f 'Command.cc' || echo '$(srcdir)/'`Command.cc
+
+bin_Desktop-Command.obj: Command.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Command.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Command.Tpo -c -o bin_Desktop-Command.obj `if test -f 'Command.cc'; then $(CYGPATH_W) 'Command.cc'; else $(CYGPATH_W) '$(srcdir)/Command.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Command.Tpo $(DEPDIR)/bin_Desktop-Command.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Command.cc' object='bin_Desktop-Command.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Command.obj `if test -f 'Command.cc'; then $(CYGPATH_W) 'Command.cc'; else $(CYGPATH_W) '$(srcdir)/Command.cc'; fi`
+
+bin_Desktop-ComputeEditor.o: ComputeEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ComputeEditor.o -MD -MP -MF $(DEPDIR)/bin_Desktop-ComputeEditor.Tpo -c -o bin_Desktop-ComputeEditor.o `test -f 'ComputeEditor.cc' || echo '$(srcdir)/'`ComputeEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ComputeEditor.Tpo $(DEPDIR)/bin_Desktop-ComputeEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ComputeEditor.cc' object='bin_Desktop-ComputeEditor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ComputeEditor.o `test -f 'ComputeEditor.cc' || echo '$(srcdir)/'`ComputeEditor.cc
+
+bin_Desktop-ComputeEditor.obj: ComputeEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ComputeEditor.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-ComputeEditor.Tpo -c -o bin_Desktop-ComputeEditor.obj `if test -f 'ComputeEditor.cc'; then $(CYGPATH_W) 'ComputeEditor.cc'; else $(CYGPATH_W) '$(srcdir)/ComputeEditor.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ComputeEditor.Tpo $(DEPDIR)/bin_Desktop-ComputeEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ComputeEditor.cc' object='bin_Desktop-ComputeEditor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ComputeEditor.obj `if test -f 'ComputeEditor.cc'; then $(CYGPATH_W) 'ComputeEditor.cc'; else $(CYGPATH_W) '$(srcdir)/ComputeEditor.cc'; fi`
+
+bin_Desktop-ConfigLoader.o: ConfigLoader.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ConfigLoader.o -MD -MP -MF $(DEPDIR)/bin_Desktop-ConfigLoader.Tpo -c -o bin_Desktop-ConfigLoader.o `test -f 'ConfigLoader.cc' || echo '$(srcdir)/'`ConfigLoader.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ConfigLoader.Tpo $(DEPDIR)/bin_Desktop-ConfigLoader.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ConfigLoader.cc' object='bin_Desktop-ConfigLoader.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ConfigLoader.o `test -f 'ConfigLoader.cc' || echo '$(srcdir)/'`ConfigLoader.cc
+
+bin_Desktop-ConfigLoader.obj: ConfigLoader.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ConfigLoader.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-ConfigLoader.Tpo -c -o bin_Desktop-ConfigLoader.obj `if test -f 'ConfigLoader.cc'; then $(CYGPATH_W) 'ConfigLoader.cc'; else $(CYGPATH_W) '$(srcdir)/ConfigLoader.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ConfigLoader.Tpo $(DEPDIR)/bin_Desktop-ConfigLoader.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ConfigLoader.cc' object='bin_Desktop-ConfigLoader.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ConfigLoader.obj `if test -f 'ConfigLoader.cc'; then $(CYGPATH_W) 'ConfigLoader.cc'; else $(CYGPATH_W) '$(srcdir)/ConfigLoader.cc'; fi`
+
+bin_Desktop-Counted.o: Counted.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Counted.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Counted.Tpo -c -o bin_Desktop-Counted.o `test -f 'Counted.cc' || echo '$(srcdir)/'`Counted.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Counted.Tpo $(DEPDIR)/bin_Desktop-Counted.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Counted.cc' object='bin_Desktop-Counted.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Counted.o `test -f 'Counted.cc' || echo '$(srcdir)/'`Counted.cc
+
+bin_Desktop-Counted.obj: Counted.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Counted.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Counted.Tpo -c -o bin_Desktop-Counted.obj `if test -f 'Counted.cc'; then $(CYGPATH_W) 'Counted.cc'; else $(CYGPATH_W) '$(srcdir)/Counted.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Counted.Tpo $(DEPDIR)/bin_Desktop-Counted.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Counted.cc' object='bin_Desktop-Counted.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Counted.obj `if test -f 'Counted.cc'; then $(CYGPATH_W) 'Counted.cc'; else $(CYGPATH_W) '$(srcdir)/Counted.cc'; fi`
+
+bin_Desktop-Dependancy.o: Dependancy.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Dependancy.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Dependancy.Tpo -c -o bin_Desktop-Dependancy.o `test -f 'Dependancy.cc' || echo '$(srcdir)/'`Dependancy.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Dependancy.Tpo $(DEPDIR)/bin_Desktop-Dependancy.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Dependancy.cc' object='bin_Desktop-Dependancy.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Dependancy.o `test -f 'Dependancy.cc' || echo '$(srcdir)/'`Dependancy.cc
+
+bin_Desktop-Dependancy.obj: Dependancy.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Dependancy.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Dependancy.Tpo -c -o bin_Desktop-Dependancy.obj `if test -f 'Dependancy.cc'; then $(CYGPATH_W) 'Dependancy.cc'; else $(CYGPATH_W) '$(srcdir)/Dependancy.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Dependancy.Tpo $(DEPDIR)/bin_Desktop-Dependancy.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Dependancy.cc' object='bin_Desktop-Dependancy.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Dependancy.obj `if test -f 'Dependancy.cc'; then $(CYGPATH_W) 'Dependancy.cc'; else $(CYGPATH_W) '$(srcdir)/Dependancy.cc'; fi`
+
+bin_Desktop-Drop.o: Drop.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Drop.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Drop.Tpo -c -o bin_Desktop-Drop.o `test -f 'Drop.cc' || echo '$(srcdir)/'`Drop.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Drop.Tpo $(DEPDIR)/bin_Desktop-Drop.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Drop.cc' object='bin_Desktop-Drop.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Drop.o `test -f 'Drop.cc' || echo '$(srcdir)/'`Drop.cc
+
+bin_Desktop-Drop.obj: Drop.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Drop.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Drop.Tpo -c -o bin_Desktop-Drop.obj `if test -f 'Drop.cc'; then $(CYGPATH_W) 'Drop.cc'; else $(CYGPATH_W) '$(srcdir)/Drop.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Drop.Tpo $(DEPDIR)/bin_Desktop-Drop.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Drop.cc' object='bin_Desktop-Drop.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Drop.obj `if test -f 'Drop.cc'; then $(CYGPATH_W) 'Drop.cc'; else $(CYGPATH_W) '$(srcdir)/Drop.cc'; fi`
+
+bin_Desktop-Editor.o: Editor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Editor.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Editor.Tpo -c -o bin_Desktop-Editor.o `test -f 'Editor.cc' || echo '$(srcdir)/'`Editor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Editor.Tpo $(DEPDIR)/bin_Desktop-Editor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Editor.cc' object='bin_Desktop-Editor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Editor.o `test -f 'Editor.cc' || echo '$(srcdir)/'`Editor.cc
+
+bin_Desktop-Editor.obj: Editor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Editor.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Editor.Tpo -c -o bin_Desktop-Editor.obj `if test -f 'Editor.cc'; then $(CYGPATH_W) 'Editor.cc'; else $(CYGPATH_W) '$(srcdir)/Editor.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Editor.Tpo $(DEPDIR)/bin_Desktop-Editor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Editor.cc' object='bin_Desktop-Editor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Editor.obj `if test -f 'Editor.cc'; then $(CYGPATH_W) 'Editor.cc'; else $(CYGPATH_W) '$(srcdir)/Editor.cc'; fi`
+
+bin_Desktop-EditorDrawerFactory.o: EditorDrawerFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-EditorDrawerFactory.o -MD -MP -MF $(DEPDIR)/bin_Desktop-EditorDrawerFactory.Tpo -c -o bin_Desktop-EditorDrawerFactory.o `test -f 'EditorDrawerFactory.cc' || echo '$(srcdir)/'`EditorDrawerFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-EditorDrawerFactory.Tpo $(DEPDIR)/bin_Desktop-EditorDrawerFactory.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='EditorDrawerFactory.cc' object='bin_Desktop-EditorDrawerFactory.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-EditorDrawerFactory.o `test -f 'EditorDrawerFactory.cc' || echo '$(srcdir)/'`EditorDrawerFactory.cc
+
+bin_Desktop-EditorDrawerFactory.obj: EditorDrawerFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-EditorDrawerFactory.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-EditorDrawerFactory.Tpo -c -o bin_Desktop-EditorDrawerFactory.obj `if test -f 'EditorDrawerFactory.cc'; then $(CYGPATH_W) 'EditorDrawerFactory.cc'; else $(CYGPATH_W) '$(srcdir)/EditorDrawerFactory.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-EditorDrawerFactory.Tpo $(DEPDIR)/bin_Desktop-EditorDrawerFactory.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='EditorDrawerFactory.cc' object='bin_Desktop-EditorDrawerFactory.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-EditorDrawerFactory.obj `if test -f 'EditorDrawerFactory.cc'; then $(CYGPATH_W) 'EditorDrawerFactory.cc'; else $(CYGPATH_W) '$(srcdir)/EditorDrawerFactory.cc'; fi`
+
+bin_Desktop-EditorFactory.o: EditorFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-EditorFactory.o -MD -MP -MF $(DEPDIR)/bin_Desktop-EditorFactory.Tpo -c -o bin_Desktop-EditorFactory.o `test -f 'EditorFactory.cc' || echo '$(srcdir)/'`EditorFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-EditorFactory.Tpo $(DEPDIR)/bin_Desktop-EditorFactory.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='EditorFactory.cc' object='bin_Desktop-EditorFactory.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-EditorFactory.o `test -f 'EditorFactory.cc' || echo '$(srcdir)/'`EditorFactory.cc
+
+bin_Desktop-EditorFactory.obj: EditorFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-EditorFactory.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-EditorFactory.Tpo -c -o bin_Desktop-EditorFactory.obj `if test -f 'EditorFactory.cc'; then $(CYGPATH_W) 'EditorFactory.cc'; else $(CYGPATH_W) '$(srcdir)/EditorFactory.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-EditorFactory.Tpo $(DEPDIR)/bin_Desktop-EditorFactory.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='EditorFactory.cc' object='bin_Desktop-EditorFactory.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-EditorFactory.obj `if test -f 'EditorFactory.cc'; then $(CYGPATH_W) 'EditorFactory.cc'; else $(CYGPATH_W) '$(srcdir)/EditorFactory.cc'; fi`
+
+bin_Desktop-EditTransaction.o: EditTransaction.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-EditTransaction.o -MD -MP -MF $(DEPDIR)/bin_Desktop-EditTransaction.Tpo -c -o bin_Desktop-EditTransaction.o `test -f 'EditTransaction.cc' || echo '$(srcdir)/'`EditTransaction.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-EditTransaction.Tpo $(DEPDIR)/bin_Desktop-EditTransaction.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='EditTransaction.cc' object='bin_Desktop-EditTransaction.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-EditTransaction.o `test -f 'EditTransaction.cc' || echo '$(srcdir)/'`EditTransaction.cc
+
+bin_Desktop-EditTransaction.obj: EditTransaction.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-EditTransaction.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-EditTransaction.Tpo -c -o bin_Desktop-EditTransaction.obj `if test -f 'EditTransaction.cc'; then $(CYGPATH_W) 'EditTransaction.cc'; else $(CYGPATH_W) '$(srcdir)/EditTransaction.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-EditTransaction.Tpo $(DEPDIR)/bin_Desktop-EditTransaction.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='EditTransaction.cc' object='bin_Desktop-EditTransaction.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-EditTransaction.obj `if test -f 'EditTransaction.cc'; then $(CYGPATH_W) 'EditTransaction.cc'; else $(CYGPATH_W) '$(srcdir)/EditTransaction.cc'; fi`
+
+bin_Desktop-FamilyEditor.o: FamilyEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FamilyEditor.o -MD -MP -MF $(DEPDIR)/bin_Desktop-FamilyEditor.Tpo -c -o bin_Desktop-FamilyEditor.o `test -f 'FamilyEditor.cc' || echo '$(srcdir)/'`FamilyEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FamilyEditor.Tpo $(DEPDIR)/bin_Desktop-FamilyEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FamilyEditor.cc' object='bin_Desktop-FamilyEditor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FamilyEditor.o `test -f 'FamilyEditor.cc' || echo '$(srcdir)/'`FamilyEditor.cc
+
+bin_Desktop-FamilyEditor.obj: FamilyEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FamilyEditor.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-FamilyEditor.Tpo -c -o bin_Desktop-FamilyEditor.obj `if test -f 'FamilyEditor.cc'; then $(CYGPATH_W) 'FamilyEditor.cc'; else $(CYGPATH_W) '$(srcdir)/FamilyEditor.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FamilyEditor.Tpo $(DEPDIR)/bin_Desktop-FamilyEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FamilyEditor.cc' object='bin_Desktop-FamilyEditor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FamilyEditor.obj `if test -f 'FamilyEditor.cc'; then $(CYGPATH_W) 'FamilyEditor.cc'; else $(CYGPATH_W) '$(srcdir)/FamilyEditor.cc'; fi`
+
+bin_Desktop-FamilyObject.o: FamilyObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FamilyObject.o -MD -MP -MF $(DEPDIR)/bin_Desktop-FamilyObject.Tpo -c -o bin_Desktop-FamilyObject.o `test -f 'FamilyObject.cc' || echo '$(srcdir)/'`FamilyObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FamilyObject.Tpo $(DEPDIR)/bin_Desktop-FamilyObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FamilyObject.cc' object='bin_Desktop-FamilyObject.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FamilyObject.o `test -f 'FamilyObject.cc' || echo '$(srcdir)/'`FamilyObject.cc
+
+bin_Desktop-FamilyObject.obj: FamilyObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FamilyObject.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-FamilyObject.Tpo -c -o bin_Desktop-FamilyObject.obj `if test -f 'FamilyObject.cc'; then $(CYGPATH_W) 'FamilyObject.cc'; else $(CYGPATH_W) '$(srcdir)/FamilyObject.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FamilyObject.Tpo $(DEPDIR)/bin_Desktop-FamilyObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FamilyObject.cc' object='bin_Desktop-FamilyObject.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FamilyObject.obj `if test -f 'FamilyObject.cc'; then $(CYGPATH_W) 'FamilyObject.cc'; else $(CYGPATH_W) '$(srcdir)/FamilyObject.cc'; fi`
+
+bin_Desktop-FamilyScanner.o: FamilyScanner.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FamilyScanner.o -MD -MP -MF $(DEPDIR)/bin_Desktop-FamilyScanner.Tpo -c -o bin_Desktop-FamilyScanner.o `test -f 'FamilyScanner.cc' || echo '$(srcdir)/'`FamilyScanner.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FamilyScanner.Tpo $(DEPDIR)/bin_Desktop-FamilyScanner.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FamilyScanner.cc' object='bin_Desktop-FamilyScanner.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FamilyScanner.o `test -f 'FamilyScanner.cc' || echo '$(srcdir)/'`FamilyScanner.cc
+
+bin_Desktop-FamilyScanner.obj: FamilyScanner.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FamilyScanner.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-FamilyScanner.Tpo -c -o bin_Desktop-FamilyScanner.obj `if test -f 'FamilyScanner.cc'; then $(CYGPATH_W) 'FamilyScanner.cc'; else $(CYGPATH_W) '$(srcdir)/FamilyScanner.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FamilyScanner.Tpo $(DEPDIR)/bin_Desktop-FamilyScanner.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FamilyScanner.cc' object='bin_Desktop-FamilyScanner.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FamilyScanner.obj `if test -f 'FamilyScanner.cc'; then $(CYGPATH_W) 'FamilyScanner.cc'; else $(CYGPATH_W) '$(srcdir)/FamilyScanner.cc'; fi`
+
+bin_Desktop-FileObject.o: FileObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FileObject.o -MD -MP -MF $(DEPDIR)/bin_Desktop-FileObject.Tpo -c -o bin_Desktop-FileObject.o `test -f 'FileObject.cc' || echo '$(srcdir)/'`FileObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FileObject.Tpo $(DEPDIR)/bin_Desktop-FileObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FileObject.cc' object='bin_Desktop-FileObject.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FileObject.o `test -f 'FileObject.cc' || echo '$(srcdir)/'`FileObject.cc
+
+bin_Desktop-FileObject.obj: FileObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FileObject.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-FileObject.Tpo -c -o bin_Desktop-FileObject.obj `if test -f 'FileObject.cc'; then $(CYGPATH_W) 'FileObject.cc'; else $(CYGPATH_W) '$(srcdir)/FileObject.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FileObject.Tpo $(DEPDIR)/bin_Desktop-FileObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FileObject.cc' object='bin_Desktop-FileObject.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FileObject.obj `if test -f 'FileObject.cc'; then $(CYGPATH_W) 'FileObject.cc'; else $(CYGPATH_W) '$(srcdir)/FileObject.cc'; fi`
+
+bin_Desktop-Folder.o: Folder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Folder.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Folder.Tpo -c -o bin_Desktop-Folder.o `test -f 'Folder.cc' || echo '$(srcdir)/'`Folder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Folder.Tpo $(DEPDIR)/bin_Desktop-Folder.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Folder.cc' object='bin_Desktop-Folder.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Folder.o `test -f 'Folder.cc' || echo '$(srcdir)/'`Folder.cc
+
+bin_Desktop-Folder.obj: Folder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Folder.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Folder.Tpo -c -o bin_Desktop-Folder.obj `if test -f 'Folder.cc'; then $(CYGPATH_W) 'Folder.cc'; else $(CYGPATH_W) '$(srcdir)/Folder.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Folder.Tpo $(DEPDIR)/bin_Desktop-Folder.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Folder.cc' object='bin_Desktop-Folder.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Folder.obj `if test -f 'Folder.cc'; then $(CYGPATH_W) 'Folder.cc'; else $(CYGPATH_W) '$(srcdir)/Folder.cc'; fi`
+
+bin_Desktop-FolderDatabase.o: FolderDatabase.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FolderDatabase.o -MD -MP -MF $(DEPDIR)/bin_Desktop-FolderDatabase.Tpo -c -o bin_Desktop-FolderDatabase.o `test -f 'FolderDatabase.cc' || echo '$(srcdir)/'`FolderDatabase.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FolderDatabase.Tpo $(DEPDIR)/bin_Desktop-FolderDatabase.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FolderDatabase.cc' object='bin_Desktop-FolderDatabase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FolderDatabase.o `test -f 'FolderDatabase.cc' || echo '$(srcdir)/'`FolderDatabase.cc
+
+bin_Desktop-FolderDatabase.obj: FolderDatabase.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FolderDatabase.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-FolderDatabase.Tpo -c -o bin_Desktop-FolderDatabase.obj `if test -f 'FolderDatabase.cc'; then $(CYGPATH_W) 'FolderDatabase.cc'; else $(CYGPATH_W) '$(srcdir)/FolderDatabase.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FolderDatabase.Tpo $(DEPDIR)/bin_Desktop-FolderDatabase.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FolderDatabase.cc' object='bin_Desktop-FolderDatabase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FolderDatabase.obj `if test -f 'FolderDatabase.cc'; then $(CYGPATH_W) 'FolderDatabase.cc'; else $(CYGPATH_W) '$(srcdir)/FolderDatabase.cc'; fi`
+
+bin_Desktop-FolderInfo.o: FolderInfo.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FolderInfo.o -MD -MP -MF $(DEPDIR)/bin_Desktop-FolderInfo.Tpo -c -o bin_Desktop-FolderInfo.o `test -f 'FolderInfo.cc' || echo '$(srcdir)/'`FolderInfo.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FolderInfo.Tpo $(DEPDIR)/bin_Desktop-FolderInfo.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FolderInfo.cc' object='bin_Desktop-FolderInfo.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FolderInfo.o `test -f 'FolderInfo.cc' || echo '$(srcdir)/'`FolderInfo.cc
+
+bin_Desktop-FolderInfo.obj: FolderInfo.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FolderInfo.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-FolderInfo.Tpo -c -o bin_Desktop-FolderInfo.obj `if test -f 'FolderInfo.cc'; then $(CYGPATH_W) 'FolderInfo.cc'; else $(CYGPATH_W) '$(srcdir)/FolderInfo.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FolderInfo.Tpo $(DEPDIR)/bin_Desktop-FolderInfo.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FolderInfo.cc' object='bin_Desktop-FolderInfo.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FolderInfo.obj `if test -f 'FolderInfo.cc'; then $(CYGPATH_W) 'FolderInfo.cc'; else $(CYGPATH_W) '$(srcdir)/FolderInfo.cc'; fi`
+
+bin_Desktop-HelpFactory.o: HelpFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-HelpFactory.o -MD -MP -MF $(DEPDIR)/bin_Desktop-HelpFactory.Tpo -c -o bin_Desktop-HelpFactory.o `test -f 'HelpFactory.cc' || echo '$(srcdir)/'`HelpFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-HelpFactory.Tpo $(DEPDIR)/bin_Desktop-HelpFactory.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HelpFactory.cc' object='bin_Desktop-HelpFactory.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-HelpFactory.o `test -f 'HelpFactory.cc' || echo '$(srcdir)/'`HelpFactory.cc
+
+bin_Desktop-HelpFactory.obj: HelpFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-HelpFactory.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-HelpFactory.Tpo -c -o bin_Desktop-HelpFactory.obj `if test -f 'HelpFactory.cc'; then $(CYGPATH_W) 'HelpFactory.cc'; else $(CYGPATH_W) '$(srcdir)/HelpFactory.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-HelpFactory.Tpo $(DEPDIR)/bin_Desktop-HelpFactory.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HelpFactory.cc' object='bin_Desktop-HelpFactory.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-HelpFactory.obj `if test -f 'HelpFactory.cc'; then $(CYGPATH_W) 'HelpFactory.cc'; else $(CYGPATH_W) '$(srcdir)/HelpFactory.cc'; fi`
+
+bin_Desktop-IconClass.o: IconClass.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-IconClass.o -MD -MP -MF $(DEPDIR)/bin_Desktop-IconClass.Tpo -c -o bin_Desktop-IconClass.o `test -f 'IconClass.cc' || echo '$(srcdir)/'`IconClass.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-IconClass.Tpo $(DEPDIR)/bin_Desktop-IconClass.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='IconClass.cc' object='bin_Desktop-IconClass.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-IconClass.o `test -f 'IconClass.cc' || echo '$(srcdir)/'`IconClass.cc
+
+bin_Desktop-IconClass.obj: IconClass.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-IconClass.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-IconClass.Tpo -c -o bin_Desktop-IconClass.obj `if test -f 'IconClass.cc'; then $(CYGPATH_W) 'IconClass.cc'; else $(CYGPATH_W) '$(srcdir)/IconClass.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-IconClass.Tpo $(DEPDIR)/bin_Desktop-IconClass.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='IconClass.cc' object='bin_Desktop-IconClass.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-IconClass.obj `if test -f 'IconClass.cc'; then $(CYGPATH_W) 'IconClass.cc'; else $(CYGPATH_W) '$(srcdir)/IconClass.cc'; fi`
+
+bin_Desktop-IconFactory.o: IconFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-IconFactory.o -MD -MP -MF $(DEPDIR)/bin_Desktop-IconFactory.Tpo -c -o bin_Desktop-IconFactory.o `test -f 'IconFactory.cc' || echo '$(srcdir)/'`IconFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-IconFactory.Tpo $(DEPDIR)/bin_Desktop-IconFactory.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='IconFactory.cc' object='bin_Desktop-IconFactory.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-IconFactory.o `test -f 'IconFactory.cc' || echo '$(srcdir)/'`IconFactory.cc
+
+bin_Desktop-IconFactory.obj: IconFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-IconFactory.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-IconFactory.Tpo -c -o bin_Desktop-IconFactory.obj `if test -f 'IconFactory.cc'; then $(CYGPATH_W) 'IconFactory.cc'; else $(CYGPATH_W) '$(srcdir)/IconFactory.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-IconFactory.Tpo $(DEPDIR)/bin_Desktop-IconFactory.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='IconFactory.cc' object='bin_Desktop-IconFactory.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-IconFactory.obj `if test -f 'IconFactory.cc'; then $(CYGPATH_W) 'IconFactory.cc'; else $(CYGPATH_W) '$(srcdir)/IconFactory.cc'; fi`
+
+bin_Desktop-IconGroupTools.o: IconGroupTools.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-IconGroupTools.o -MD -MP -MF $(DEPDIR)/bin_Desktop-IconGroupTools.Tpo -c -o bin_Desktop-IconGroupTools.o `test -f 'IconGroupTools.cc' || echo '$(srcdir)/'`IconGroupTools.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-IconGroupTools.Tpo $(DEPDIR)/bin_Desktop-IconGroupTools.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='IconGroupTools.cc' object='bin_Desktop-IconGroupTools.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-IconGroupTools.o `test -f 'IconGroupTools.cc' || echo '$(srcdir)/'`IconGroupTools.cc
+
+bin_Desktop-IconGroupTools.obj: IconGroupTools.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-IconGroupTools.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-IconGroupTools.Tpo -c -o bin_Desktop-IconGroupTools.obj `if test -f 'IconGroupTools.cc'; then $(CYGPATH_W) 'IconGroupTools.cc'; else $(CYGPATH_W) '$(srcdir)/IconGroupTools.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-IconGroupTools.Tpo $(DEPDIR)/bin_Desktop-IconGroupTools.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='IconGroupTools.cc' object='bin_Desktop-IconGroupTools.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-IconGroupTools.obj `if test -f 'IconGroupTools.cc'; then $(CYGPATH_W) 'IconGroupTools.cc'; else $(CYGPATH_W) '$(srcdir)/IconGroupTools.cc'; fi`
+
+bin_Desktop-IconInfo.o: IconInfo.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-IconInfo.o -MD -MP -MF $(DEPDIR)/bin_Desktop-IconInfo.Tpo -c -o bin_Desktop-IconInfo.o `test -f 'IconInfo.cc' || echo '$(srcdir)/'`IconInfo.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-IconInfo.Tpo $(DEPDIR)/bin_Desktop-IconInfo.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='IconInfo.cc' object='bin_Desktop-IconInfo.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-IconInfo.o `test -f 'IconInfo.cc' || echo '$(srcdir)/'`IconInfo.cc
+
+bin_Desktop-IconInfo.obj: IconInfo.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-IconInfo.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-IconInfo.Tpo -c -o bin_Desktop-IconInfo.obj `if test -f 'IconInfo.cc'; then $(CYGPATH_W) 'IconInfo.cc'; else $(CYGPATH_W) '$(srcdir)/IconInfo.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-IconInfo.Tpo $(DEPDIR)/bin_Desktop-IconInfo.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='IconInfo.cc' object='bin_Desktop-IconInfo.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-IconInfo.obj `if test -f 'IconInfo.cc'; then $(CYGPATH_W) 'IconInfo.cc'; else $(CYGPATH_W) '$(srcdir)/IconInfo.cc'; fi`
+
+bin_Desktop-IconObject.o: IconObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-IconObject.o -MD -MP -MF $(DEPDIR)/bin_Desktop-IconObject.Tpo -c -o bin_Desktop-IconObject.o `test -f 'IconObject.cc' || echo '$(srcdir)/'`IconObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-IconObject.Tpo $(DEPDIR)/bin_Desktop-IconObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='IconObject.cc' object='bin_Desktop-IconObject.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-IconObject.o `test -f 'IconObject.cc' || echo '$(srcdir)/'`IconObject.cc
+
+bin_Desktop-IconObject.obj: IconObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-IconObject.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-IconObject.Tpo -c -o bin_Desktop-IconObject.obj `if test -f 'IconObject.cc'; then $(CYGPATH_W) 'IconObject.cc'; else $(CYGPATH_W) '$(srcdir)/IconObject.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-IconObject.Tpo $(DEPDIR)/bin_Desktop-IconObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='IconObject.cc' object='bin_Desktop-IconObject.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-IconObject.obj `if test -f 'IconObject.cc'; then $(CYGPATH_W) 'IconObject.cc'; else $(CYGPATH_W) '$(srcdir)/IconObject.cc'; fi`
+
+bin_Desktop-Input.o: Input.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Input.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Input.Tpo -c -o bin_Desktop-Input.o `test -f 'Input.cc' || echo '$(srcdir)/'`Input.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Input.Tpo $(DEPDIR)/bin_Desktop-Input.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Input.cc' object='bin_Desktop-Input.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Input.o `test -f 'Input.cc' || echo '$(srcdir)/'`Input.cc
+
+bin_Desktop-Input.obj: Input.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Input.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Input.Tpo -c -o bin_Desktop-Input.obj `if test -f 'Input.cc'; then $(CYGPATH_W) 'Input.cc'; else $(CYGPATH_W) '$(srcdir)/Input.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Input.Tpo $(DEPDIR)/bin_Desktop-Input.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Input.cc' object='bin_Desktop-Input.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Input.obj `if test -f 'Input.cc'; then $(CYGPATH_W) 'Input.cc'; else $(CYGPATH_W) '$(srcdir)/Input.cc'; fi`
+
+bin_Desktop-InternalService.o: InternalService.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-InternalService.o -MD -MP -MF $(DEPDIR)/bin_Desktop-InternalService.Tpo -c -o bin_Desktop-InternalService.o `test -f 'InternalService.cc' || echo '$(srcdir)/'`InternalService.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-InternalService.Tpo $(DEPDIR)/bin_Desktop-InternalService.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='InternalService.cc' object='bin_Desktop-InternalService.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-InternalService.o `test -f 'InternalService.cc' || echo '$(srcdir)/'`InternalService.cc
+
+bin_Desktop-InternalService.obj: InternalService.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-InternalService.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-InternalService.Tpo -c -o bin_Desktop-InternalService.obj `if test -f 'InternalService.cc'; then $(CYGPATH_W) 'InternalService.cc'; else $(CYGPATH_W) '$(srcdir)/InternalService.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-InternalService.Tpo $(DEPDIR)/bin_Desktop-InternalService.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='InternalService.cc' object='bin_Desktop-InternalService.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-InternalService.obj `if test -f 'InternalService.cc'; then $(CYGPATH_W) 'InternalService.cc'; else $(CYGPATH_W) '$(srcdir)/InternalService.cc'; fi`
+
+bin_Desktop-InternalTask.o: InternalTask.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-InternalTask.o -MD -MP -MF $(DEPDIR)/bin_Desktop-InternalTask.Tpo -c -o bin_Desktop-InternalTask.o `test -f 'InternalTask.cc' || echo '$(srcdir)/'`InternalTask.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-InternalTask.Tpo $(DEPDIR)/bin_Desktop-InternalTask.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='InternalTask.cc' object='bin_Desktop-InternalTask.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-InternalTask.o `test -f 'InternalTask.cc' || echo '$(srcdir)/'`InternalTask.cc
+
+bin_Desktop-InternalTask.obj: InternalTask.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-InternalTask.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-InternalTask.Tpo -c -o bin_Desktop-InternalTask.obj `if test -f 'InternalTask.cc'; then $(CYGPATH_W) 'InternalTask.cc'; else $(CYGPATH_W) '$(srcdir)/InternalTask.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-InternalTask.Tpo $(DEPDIR)/bin_Desktop-InternalTask.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='InternalTask.cc' object='bin_Desktop-InternalTask.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-InternalTask.obj `if test -f 'InternalTask.cc'; then $(CYGPATH_W) 'InternalTask.cc'; else $(CYGPATH_W) '$(srcdir)/InternalTask.cc'; fi`
+
+bin_Desktop-Items.o: Items.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Items.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Items.Tpo -c -o bin_Desktop-Items.o `test -f 'Items.cc' || echo '$(srcdir)/'`Items.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Items.Tpo $(DEPDIR)/bin_Desktop-Items.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Items.cc' object='bin_Desktop-Items.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Items.o `test -f 'Items.cc' || echo '$(srcdir)/'`Items.cc
+
+bin_Desktop-Items.obj: Items.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Items.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Items.Tpo -c -o bin_Desktop-Items.obj `if test -f 'Items.cc'; then $(CYGPATH_W) 'Items.cc'; else $(CYGPATH_W) '$(srcdir)/Items.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Items.Tpo $(DEPDIR)/bin_Desktop-Items.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Items.cc' object='bin_Desktop-Items.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Items.obj `if test -f 'Items.cc'; then $(CYGPATH_W) 'Items.cc'; else $(CYGPATH_W) '$(srcdir)/Items.cc'; fi`
+
+bin_Desktop-Language.o: Language.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Language.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Language.Tpo -c -o bin_Desktop-Language.o `test -f 'Language.cc' || echo '$(srcdir)/'`Language.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Language.Tpo $(DEPDIR)/bin_Desktop-Language.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Language.cc' object='bin_Desktop-Language.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Language.o `test -f 'Language.cc' || echo '$(srcdir)/'`Language.cc
+
+bin_Desktop-Language.obj: Language.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Language.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Language.Tpo -c -o bin_Desktop-Language.obj `if test -f 'Language.cc'; then $(CYGPATH_W) 'Language.cc'; else $(CYGPATH_W) '$(srcdir)/Language.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Language.Tpo $(DEPDIR)/bin_Desktop-Language.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Language.cc' object='bin_Desktop-Language.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Language.obj `if test -f 'Language.cc'; then $(CYGPATH_W) 'Language.cc'; else $(CYGPATH_W) '$(srcdir)/Language.cc'; fi`
+
+bin_Desktop-LineFactory.o: LineFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-LineFactory.o -MD -MP -MF $(DEPDIR)/bin_Desktop-LineFactory.Tpo -c -o bin_Desktop-LineFactory.o `test -f 'LineFactory.cc' || echo '$(srcdir)/'`LineFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-LineFactory.Tpo $(DEPDIR)/bin_Desktop-LineFactory.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='LineFactory.cc' object='bin_Desktop-LineFactory.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-LineFactory.o `test -f 'LineFactory.cc' || echo '$(srcdir)/'`LineFactory.cc
+
+bin_Desktop-LineFactory.obj: LineFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-LineFactory.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-LineFactory.Tpo -c -o bin_Desktop-LineFactory.obj `if test -f 'LineFactory.cc'; then $(CYGPATH_W) 'LineFactory.cc'; else $(CYGPATH_W) '$(srcdir)/LineFactory.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-LineFactory.Tpo $(DEPDIR)/bin_Desktop-LineFactory.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='LineFactory.cc' object='bin_Desktop-LineFactory.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-LineFactory.obj `if test -f 'LineFactory.cc'; then $(CYGPATH_W) 'LineFactory.cc'; else $(CYGPATH_W) '$(srcdir)/LineFactory.cc'; fi`
+
+bin_Desktop-Log.o: Log.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Log.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Log.Tpo -c -o bin_Desktop-Log.o `test -f 'Log.cc' || echo '$(srcdir)/'`Log.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Log.Tpo $(DEPDIR)/bin_Desktop-Log.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Log.cc' object='bin_Desktop-Log.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Log.o `test -f 'Log.cc' || echo '$(srcdir)/'`Log.cc
+
+bin_Desktop-Log.obj: Log.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Log.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Log.Tpo -c -o bin_Desktop-Log.obj `if test -f 'Log.cc'; then $(CYGPATH_W) 'Log.cc'; else $(CYGPATH_W) '$(srcdir)/Log.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Log.Tpo $(DEPDIR)/bin_Desktop-Log.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Log.cc' object='bin_Desktop-Log.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Log.obj `if test -f 'Log.cc'; then $(CYGPATH_W) 'Log.cc'; else $(CYGPATH_W) '$(srcdir)/Log.cc'; fi`
+
+bin_Desktop-MacroGuiObject.o: MacroGuiObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MacroGuiObject.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MacroGuiObject.Tpo -c -o bin_Desktop-MacroGuiObject.o `test -f 'MacroGuiObject.cc' || echo '$(srcdir)/'`MacroGuiObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MacroGuiObject.Tpo $(DEPDIR)/bin_Desktop-MacroGuiObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MacroGuiObject.cc' object='bin_Desktop-MacroGuiObject.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MacroGuiObject.o `test -f 'MacroGuiObject.cc' || echo '$(srcdir)/'`MacroGuiObject.cc
+
+bin_Desktop-MacroGuiObject.obj: MacroGuiObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MacroGuiObject.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MacroGuiObject.Tpo -c -o bin_Desktop-MacroGuiObject.obj `if test -f 'MacroGuiObject.cc'; then $(CYGPATH_W) 'MacroGuiObject.cc'; else $(CYGPATH_W) '$(srcdir)/MacroGuiObject.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MacroGuiObject.Tpo $(DEPDIR)/bin_Desktop-MacroGuiObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MacroGuiObject.cc' object='bin_Desktop-MacroGuiObject.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MacroGuiObject.obj `if test -f 'MacroGuiObject.cc'; then $(CYGPATH_W) 'MacroGuiObject.cc'; else $(CYGPATH_W) '$(srcdir)/MacroGuiObject.cc'; fi`
+
+bin_Desktop-MacroObject.o: MacroObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MacroObject.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MacroObject.Tpo -c -o bin_Desktop-MacroObject.o `test -f 'MacroObject.cc' || echo '$(srcdir)/'`MacroObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MacroObject.Tpo $(DEPDIR)/bin_Desktop-MacroObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MacroObject.cc' object='bin_Desktop-MacroObject.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MacroObject.o `test -f 'MacroObject.cc' || echo '$(srcdir)/'`MacroObject.cc
+
+bin_Desktop-MacroObject.obj: MacroObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MacroObject.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MacroObject.Tpo -c -o bin_Desktop-MacroObject.obj `if test -f 'MacroObject.cc'; then $(CYGPATH_W) 'MacroObject.cc'; else $(CYGPATH_W) '$(srcdir)/MacroObject.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MacroObject.Tpo $(DEPDIR)/bin_Desktop-MacroObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MacroObject.cc' object='bin_Desktop-MacroObject.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MacroObject.obj `if test -f 'MacroObject.cc'; then $(CYGPATH_W) 'MacroObject.cc'; else $(CYGPATH_W) '$(srcdir)/MacroObject.cc'; fi`
+
+bin_Desktop-MacroParamEditor.o: MacroParamEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MacroParamEditor.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MacroParamEditor.Tpo -c -o bin_Desktop-MacroParamEditor.o `test -f 'MacroParamEditor.cc' || echo '$(srcdir)/'`MacroParamEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MacroParamEditor.Tpo $(DEPDIR)/bin_Desktop-MacroParamEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MacroParamEditor.cc' object='bin_Desktop-MacroParamEditor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MacroParamEditor.o `test -f 'MacroParamEditor.cc' || echo '$(srcdir)/'`MacroParamEditor.cc
+
+bin_Desktop-MacroParamEditor.obj: MacroParamEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MacroParamEditor.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MacroParamEditor.Tpo -c -o bin_Desktop-MacroParamEditor.obj `if test -f 'MacroParamEditor.cc'; then $(CYGPATH_W) 'MacroParamEditor.cc'; else $(CYGPATH_W) '$(srcdir)/MacroParamEditor.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MacroParamEditor.Tpo $(DEPDIR)/bin_Desktop-MacroParamEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MacroParamEditor.cc' object='bin_Desktop-MacroParamEditor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MacroParamEditor.obj `if test -f 'MacroParamEditor.cc'; then $(CYGPATH_W) 'MacroParamEditor.cc'; else $(CYGPATH_W) '$(srcdir)/MacroParamEditor.cc'; fi`
+
+bin_Desktop-MacroParamObject.o: MacroParamObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MacroParamObject.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MacroParamObject.Tpo -c -o bin_Desktop-MacroParamObject.o `test -f 'MacroParamObject.cc' || echo '$(srcdir)/'`MacroParamObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MacroParamObject.Tpo $(DEPDIR)/bin_Desktop-MacroParamObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MacroParamObject.cc' object='bin_Desktop-MacroParamObject.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MacroParamObject.o `test -f 'MacroParamObject.cc' || echo '$(srcdir)/'`MacroParamObject.cc
+
+bin_Desktop-MacroParamObject.obj: MacroParamObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MacroParamObject.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MacroParamObject.Tpo -c -o bin_Desktop-MacroParamObject.obj `if test -f 'MacroParamObject.cc'; then $(CYGPATH_W) 'MacroParamObject.cc'; else $(CYGPATH_W) '$(srcdir)/MacroParamObject.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MacroParamObject.Tpo $(DEPDIR)/bin_Desktop-MacroParamObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MacroParamObject.cc' object='bin_Desktop-MacroParamObject.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MacroParamObject.obj `if test -f 'MacroParamObject.cc'; then $(CYGPATH_W) 'MacroParamObject.cc'; else $(CYGPATH_W) '$(srcdir)/MacroParamObject.cc'; fi`
+
+bin_Desktop-MacroParamState.o: MacroParamState.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MacroParamState.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MacroParamState.Tpo -c -o bin_Desktop-MacroParamState.o `test -f 'MacroParamState.cc' || echo '$(srcdir)/'`MacroParamState.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MacroParamState.Tpo $(DEPDIR)/bin_Desktop-MacroParamState.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MacroParamState.cc' object='bin_Desktop-MacroParamState.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MacroParamState.o `test -f 'MacroParamState.cc' || echo '$(srcdir)/'`MacroParamState.cc
+
+bin_Desktop-MacroParamState.obj: MacroParamState.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MacroParamState.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MacroParamState.Tpo -c -o bin_Desktop-MacroParamState.obj `if test -f 'MacroParamState.cc'; then $(CYGPATH_W) 'MacroParamState.cc'; else $(CYGPATH_W) '$(srcdir)/MacroParamState.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MacroParamState.Tpo $(DEPDIR)/bin_Desktop-MacroParamState.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MacroParamState.cc' object='bin_Desktop-MacroParamState.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MacroParamState.obj `if test -f 'MacroParamState.cc'; then $(CYGPATH_W) 'MacroParamState.cc'; else $(CYGPATH_W) '$(srcdir)/MacroParamState.cc'; fi`
+
+bin_Desktop-MessageObserver.o: MessageObserver.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MessageObserver.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MessageObserver.Tpo -c -o bin_Desktop-MessageObserver.o `test -f 'MessageObserver.cc' || echo '$(srcdir)/'`MessageObserver.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MessageObserver.Tpo $(DEPDIR)/bin_Desktop-MessageObserver.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MessageObserver.cc' object='bin_Desktop-MessageObserver.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MessageObserver.o `test -f 'MessageObserver.cc' || echo '$(srcdir)/'`MessageObserver.cc
+
+bin_Desktop-MessageObserver.obj: MessageObserver.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MessageObserver.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MessageObserver.Tpo -c -o bin_Desktop-MessageObserver.obj `if test -f 'MessageObserver.cc'; then $(CYGPATH_W) 'MessageObserver.cc'; else $(CYGPATH_W) '$(srcdir)/MessageObserver.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MessageObserver.Tpo $(DEPDIR)/bin_Desktop-MessageObserver.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MessageObserver.cc' object='bin_Desktop-MessageObserver.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MessageObserver.obj `if test -f 'MessageObserver.cc'; then $(CYGPATH_W) 'MessageObserver.cc'; else $(CYGPATH_W) '$(srcdir)/MessageObserver.cc'; fi`
+
+bin_Desktop-MethodCommand.o: MethodCommand.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MethodCommand.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MethodCommand.Tpo -c -o bin_Desktop-MethodCommand.o `test -f 'MethodCommand.cc' || echo '$(srcdir)/'`MethodCommand.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MethodCommand.Tpo $(DEPDIR)/bin_Desktop-MethodCommand.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MethodCommand.cc' object='bin_Desktop-MethodCommand.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MethodCommand.o `test -f 'MethodCommand.cc' || echo '$(srcdir)/'`MethodCommand.cc
+
+bin_Desktop-MethodCommand.obj: MethodCommand.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MethodCommand.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MethodCommand.Tpo -c -o bin_Desktop-MethodCommand.obj `if test -f 'MethodCommand.cc'; then $(CYGPATH_W) 'MethodCommand.cc'; else $(CYGPATH_W) '$(srcdir)/MethodCommand.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MethodCommand.Tpo $(DEPDIR)/bin_Desktop-MethodCommand.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MethodCommand.cc' object='bin_Desktop-MethodCommand.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MethodCommand.obj `if test -f 'MethodCommand.cc'; then $(CYGPATH_W) 'MethodCommand.cc'; else $(CYGPATH_W) '$(srcdir)/MethodCommand.cc'; fi`
+
+bin_Desktop-MetviewService.o: MetviewService.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MetviewService.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MetviewService.Tpo -c -o bin_Desktop-MetviewService.o `test -f 'MetviewService.cc' || echo '$(srcdir)/'`MetviewService.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MetviewService.Tpo $(DEPDIR)/bin_Desktop-MetviewService.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MetviewService.cc' object='bin_Desktop-MetviewService.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MetviewService.o `test -f 'MetviewService.cc' || echo '$(srcdir)/'`MetviewService.cc
+
+bin_Desktop-MetviewService.obj: MetviewService.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MetviewService.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MetviewService.Tpo -c -o bin_Desktop-MetviewService.obj `if test -f 'MetviewService.cc'; then $(CYGPATH_W) 'MetviewService.cc'; else $(CYGPATH_W) '$(srcdir)/MetviewService.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MetviewService.Tpo $(DEPDIR)/bin_Desktop-MetviewService.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MetviewService.cc' object='bin_Desktop-MetviewService.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MetviewService.obj `if test -f 'MetviewService.cc'; then $(CYGPATH_W) 'MetviewService.cc'; else $(CYGPATH_W) '$(srcdir)/MetviewService.cc'; fi`
+
+bin_Desktop-MetviewTask.o: MetviewTask.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MetviewTask.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MetviewTask.Tpo -c -o bin_Desktop-MetviewTask.o `test -f 'MetviewTask.cc' || echo '$(srcdir)/'`MetviewTask.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MetviewTask.Tpo $(DEPDIR)/bin_Desktop-MetviewTask.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MetviewTask.cc' object='bin_Desktop-MetviewTask.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MetviewTask.o `test -f 'MetviewTask.cc' || echo '$(srcdir)/'`MetviewTask.cc
+
+bin_Desktop-MetviewTask.obj: MetviewTask.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MetviewTask.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MetviewTask.Tpo -c -o bin_Desktop-MetviewTask.obj `if test -f 'MetviewTask.cc'; then $(CYGPATH_W) 'MetviewTask.cc'; else $(CYGPATH_W) '$(srcdir)/MetviewTask.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MetviewTask.Tpo $(DEPDIR)/bin_Desktop-MetviewTask.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MetviewTask.cc' object='bin_Desktop-MetviewTask.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MetviewTask.obj `if test -f 'MetviewTask.cc'; then $(CYGPATH_W) 'MetviewTask.cc'; else $(CYGPATH_W) '$(srcdir)/MetviewTask.cc'; fi`
+
+bin_Desktop-NoEditor.o: NoEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-NoEditor.o -MD -MP -MF $(DEPDIR)/bin_Desktop-NoEditor.Tpo -c -o bin_Desktop-NoEditor.o `test -f 'NoEditor.cc' || echo '$(srcdir)/'`NoEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-NoEditor.Tpo $(DEPDIR)/bin_Desktop-NoEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='NoEditor.cc' object='bin_Desktop-NoEditor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-NoEditor.o `test -f 'NoEditor.cc' || echo '$(srcdir)/'`NoEditor.cc
+
+bin_Desktop-NoEditor.obj: NoEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-NoEditor.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-NoEditor.Tpo -c -o bin_Desktop-NoEditor.obj `if test -f 'NoEditor.cc'; then $(CYGPATH_W) 'NoEditor.cc'; else $(CYGPATH_W) '$(srcdir)/NoEditor.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-NoEditor.Tpo $(DEPDIR)/bin_Desktop-NoEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='NoEditor.cc' object='bin_Desktop-NoEditor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-NoEditor.obj `if test -f 'NoEditor.cc'; then $(CYGPATH_W) 'NoEditor.cc'; else $(CYGPATH_W) '$(srcdir)/NoEditor.cc'; fi`
+
+bin_Desktop-Parameter.o: Parameter.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Parameter.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Parameter.Tpo -c -o bin_Desktop-Parameter.o `test -f 'Parameter.cc' || echo '$(srcdir)/'`Parameter.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Parameter.Tpo $(DEPDIR)/bin_Desktop-Parameter.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Parameter.cc' object='bin_Desktop-Parameter.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Parameter.o `test -f 'Parameter.cc' || echo '$(srcdir)/'`Parameter.cc
+
+bin_Desktop-Parameter.obj: Parameter.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Parameter.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Parameter.Tpo -c -o bin_Desktop-Parameter.obj `if test -f 'Parameter.cc'; then $(CYGPATH_W) 'Parameter.cc'; else $(CYGPATH_W) '$(srcdir)/Parameter.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Parameter.Tpo $(DEPDIR)/bin_Desktop-Parameter.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Parameter.cc' object='bin_Desktop-Parameter.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Parameter.obj `if test -f 'Parameter.cc'; then $(CYGPATH_W) 'Parameter.cc'; else $(CYGPATH_W) '$(srcdir)/Parameter.cc'; fi`
+
+bin_Desktop-Product.o: Product.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Product.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Product.Tpo -c -o bin_Desktop-Product.o `test -f 'Product.cc' || echo '$(srcdir)/'`Product.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Product.Tpo $(DEPDIR)/bin_Desktop-Product.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Product.cc' object='bin_Desktop-Product.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Product.o `test -f 'Product.cc' || echo '$(srcdir)/'`Product.cc
+
+bin_Desktop-Product.obj: Product.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Product.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Product.Tpo -c -o bin_Desktop-Product.obj `if test -f 'Product.cc'; then $(CYGPATH_W) 'Product.cc'; else $(CYGPATH_W) '$(srcdir)/Product.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Product.Tpo $(DEPDIR)/bin_Desktop-Product.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Product.cc' object='bin_Desktop-Product.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Product.obj `if test -f 'Product.cc'; then $(CYGPATH_W) 'Product.cc'; else $(CYGPATH_W) '$(srcdir)/Product.cc'; fi`
+
+bin_Desktop-ProductFolder.o: ProductFolder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ProductFolder.o -MD -MP -MF $(DEPDIR)/bin_Desktop-ProductFolder.Tpo -c -o bin_Desktop-ProductFolder.o `test -f 'ProductFolder.cc' || echo '$(srcdir)/'`ProductFolder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ProductFolder.Tpo $(DEPDIR)/bin_Desktop-ProductFolder.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ProductFolder.cc' object='bin_Desktop-ProductFolder.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ProductFolder.o `test -f 'ProductFolder.cc' || echo '$(srcdir)/'`ProductFolder.cc
+
+bin_Desktop-ProductFolder.obj: ProductFolder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ProductFolder.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-ProductFolder.Tpo -c -o bin_Desktop-ProductFolder.obj `if test -f 'ProductFolder.cc'; then $(CYGPATH_W) 'ProductFolder.cc'; else $(CYGPATH_W) '$(srcdir)/ProductFolder.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ProductFolder.Tpo $(DEPDIR)/bin_Desktop-ProductFolder.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ProductFolder.cc' object='bin_Desktop-ProductFolder.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ProductFolder.obj `if test -f 'ProductFolder.cc'; then $(CYGPATH_W) 'ProductFolder.cc'; else $(CYGPATH_W) '$(srcdir)/ProductFolder.cc'; fi`
+
+bin_Desktop-Protocol.o: Protocol.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Protocol.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Protocol.Tpo -c -o bin_Desktop-Protocol.o `test -f 'Protocol.cc' || echo '$(srcdir)/'`Protocol.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Protocol.Tpo $(DEPDIR)/bin_Desktop-Protocol.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Protocol.cc' object='bin_Desktop-Protocol.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Protocol.o `test -f 'Protocol.cc' || echo '$(srcdir)/'`Protocol.cc
+
+bin_Desktop-Protocol.obj: Protocol.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Protocol.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Protocol.Tpo -c -o bin_Desktop-Protocol.obj `if test -f 'Protocol.cc'; then $(CYGPATH_W) 'Protocol.cc'; else $(CYGPATH_W) '$(srcdir)/Protocol.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Protocol.Tpo $(DEPDIR)/bin_Desktop-Protocol.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Protocol.cc' object='bin_Desktop-Protocol.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Protocol.obj `if test -f 'Protocol.cc'; then $(CYGPATH_W) 'Protocol.cc'; else $(CYGPATH_W) '$(srcdir)/Protocol.cc'; fi`
+
+bin_Desktop-Queue.o: Queue.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Queue.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Queue.Tpo -c -o bin_Desktop-Queue.o `test -f 'Queue.cc' || echo '$(srcdir)/'`Queue.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Queue.Tpo $(DEPDIR)/bin_Desktop-Queue.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Queue.cc' object='bin_Desktop-Queue.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Queue.o `test -f 'Queue.cc' || echo '$(srcdir)/'`Queue.cc
+
+bin_Desktop-Queue.obj: Queue.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Queue.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Queue.Tpo -c -o bin_Desktop-Queue.obj `if test -f 'Queue.cc'; then $(CYGPATH_W) 'Queue.cc'; else $(CYGPATH_W) '$(srcdir)/Queue.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Queue.Tpo $(DEPDIR)/bin_Desktop-Queue.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Queue.cc' object='bin_Desktop-Queue.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Queue.obj `if test -f 'Queue.cc'; then $(CYGPATH_W) 'Queue.cc'; else $(CYGPATH_W) '$(srcdir)/Queue.cc'; fi`
+
+bin_Desktop-RequestPanel.o: RequestPanel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-RequestPanel.o -MD -MP -MF $(DEPDIR)/bin_Desktop-RequestPanel.Tpo -c -o bin_Desktop-RequestPanel.o `test -f 'RequestPanel.cc' || echo '$(srcdir)/'`RequestPanel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-RequestPanel.Tpo $(DEPDIR)/bin_Desktop-RequestPanel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='RequestPanel.cc' object='bin_Desktop-RequestPanel.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-RequestPanel.o `test -f 'RequestPanel.cc' || echo '$(srcdir)/'`RequestPanel.cc
+
+bin_Desktop-RequestPanel.obj: RequestPanel.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-RequestPanel.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-RequestPanel.Tpo -c -o bin_Desktop-RequestPanel.obj `if test -f 'RequestPanel.cc'; then $(CYGPATH_W) 'RequestPanel.cc'; else $(CYGPATH_W) '$(srcdir)/RequestPanel.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-RequestPanel.Tpo $(DEPDIR)/bin_Desktop-RequestPanel.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='RequestPanel.cc' object='bin_Desktop-RequestPanel.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-RequestPanel.obj `if test -f 'RequestPanel.cc'; then $(CYGPATH_W) 'RequestPanel.cc'; else $(CYGPATH_W) '$(srcdir)/RequestPanel.cc'; fi`
+
+bin_Desktop-RequestPanelItem.o: RequestPanelItem.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-RequestPanelItem.o -MD -MP -MF $(DEPDIR)/bin_Desktop-RequestPanelItem.Tpo -c -o bin_Desktop-RequestPanelItem.o `test -f 'RequestPanelItem.cc' || echo '$(srcdir)/'`RequestPanelItem.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-RequestPanelItem.Tpo $(DEPDIR)/bin_Desktop-RequestPanelItem.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='RequestPanelItem.cc' object='bin_Desktop-RequestPanelItem.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-RequestPanelItem.o `test -f 'RequestPanelItem.cc' || echo '$(srcdir)/'`RequestPanelItem.cc
+
+bin_Desktop-RequestPanelItem.obj: RequestPanelItem.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-RequestPanelItem.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-RequestPanelItem.Tpo -c -o bin_Desktop-RequestPanelItem.obj `if test -f 'RequestPanelItem.cc'; then $(CYGPATH_W) 'RequestPanelItem.cc'; else $(CYGPATH_W) '$(srcdir)/RequestPanelItem.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-RequestPanelItem.Tpo $(DEPDIR)/bin_Desktop-RequestPanelItem.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='RequestPanelItem.cc' object='bin_Desktop-RequestPanelItem.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-RequestPanelItem.obj `if test -f 'RequestPanelItem.cc'; then $(CYGPATH_W) 'RequestPanelItem.cc'; else $(CYGPATH_W) '$(srcdir)/RequestPanelItem.cc'; fi`
+
+bin_Desktop-ReplyObserver.o: ReplyObserver.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ReplyObserver.o -MD -MP -MF $(DEPDIR)/bin_Desktop-ReplyObserver.Tpo -c -o bin_Desktop-ReplyObserver.o `test -f 'ReplyObserver.cc' || echo '$(srcdir)/'`ReplyObserver.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ReplyObserver.Tpo $(DEPDIR)/bin_Desktop-ReplyObserver.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ReplyObserver.cc' object='bin_Desktop-ReplyObserver.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ReplyObserver.o `test -f 'ReplyObserver.cc' || echo '$(srcdir)/'`ReplyObserver.cc
+
+bin_Desktop-ReplyObserver.obj: ReplyObserver.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ReplyObserver.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-ReplyObserver.Tpo -c -o bin_Desktop-ReplyObserver.obj `if test -f 'ReplyObserver.cc'; then $(CYGPATH_W) 'ReplyObserver.cc'; else $(CYGPATH_W) '$(srcdir)/ReplyObserver.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ReplyObserver.Tpo $(DEPDIR)/bin_Desktop-ReplyObserver.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ReplyObserver.cc' object='bin_Desktop-ReplyObserver.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ReplyObserver.obj `if test -f 'ReplyObserver.cc'; then $(CYGPATH_W) 'ReplyObserver.cc'; else $(CYGPATH_W) '$(srcdir)/ReplyObserver.cc'; fi`
+
+bin_Desktop-RootFolder.o: RootFolder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-RootFolder.o -MD -MP -MF $(DEPDIR)/bin_Desktop-RootFolder.Tpo -c -o bin_Desktop-RootFolder.o `test -f 'RootFolder.cc' || echo '$(srcdir)/'`RootFolder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-RootFolder.Tpo $(DEPDIR)/bin_Desktop-RootFolder.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='RootFolder.cc' object='bin_Desktop-RootFolder.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-RootFolder.o `test -f 'RootFolder.cc' || echo '$(srcdir)/'`RootFolder.cc
+
+bin_Desktop-RootFolder.obj: RootFolder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-RootFolder.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-RootFolder.Tpo -c -o bin_Desktop-RootFolder.obj `if test -f 'RootFolder.cc'; then $(CYGPATH_W) 'RootFolder.cc'; else $(CYGPATH_W) '$(srcdir)/RootFolder.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-RootFolder.Tpo $(DEPDIR)/bin_Desktop-RootFolder.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='RootFolder.cc' object='bin_Desktop-RootFolder.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-RootFolder.obj `if test -f 'RootFolder.cc'; then $(CYGPATH_W) 'RootFolder.cc'; else $(CYGPATH_W) '$(srcdir)/RootFolder.cc'; fi`
+
+bin_Desktop-Runnable.o: Runnable.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Runnable.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Runnable.Tpo -c -o bin_Desktop-Runnable.o `test -f 'Runnable.cc' || echo '$(srcdir)/'`Runnable.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Runnable.Tpo $(DEPDIR)/bin_Desktop-Runnable.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Runnable.cc' object='bin_Desktop-Runnable.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Runnable.o `test -f 'Runnable.cc' || echo '$(srcdir)/'`Runnable.cc
+
+bin_Desktop-Runnable.obj: Runnable.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Runnable.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Runnable.Tpo -c -o bin_Desktop-Runnable.obj `if test -f 'Runnable.cc'; then $(CYGPATH_W) 'Runnable.cc'; else $(CYGPATH_W) '$(srcdir)/Runnable.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Runnable.Tpo $(DEPDIR)/bin_Desktop-Runnable.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Runnable.cc' object='bin_Desktop-Runnable.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Runnable.obj `if test -f 'Runnable.cc'; then $(CYGPATH_W) 'Runnable.cc'; else $(CYGPATH_W) '$(srcdir)/Runnable.cc'; fi`
+
+bin_Desktop-ShellService.o: ShellService.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ShellService.o -MD -MP -MF $(DEPDIR)/bin_Desktop-ShellService.Tpo -c -o bin_Desktop-ShellService.o `test -f 'ShellService.cc' || echo '$(srcdir)/'`ShellService.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ShellService.Tpo $(DEPDIR)/bin_Desktop-ShellService.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ShellService.cc' object='bin_Desktop-ShellService.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ShellService.o `test -f 'ShellService.cc' || echo '$(srcdir)/'`ShellService.cc
+
+bin_Desktop-ShellService.obj: ShellService.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ShellService.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-ShellService.Tpo -c -o bin_Desktop-ShellService.obj `if test -f 'ShellService.cc'; then $(CYGPATH_W) 'ShellService.cc'; else $(CYGPATH_W) '$(srcdir)/ShellService.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ShellService.Tpo $(DEPDIR)/bin_Desktop-ShellService.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ShellService.cc' object='bin_Desktop-ShellService.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ShellService.obj `if test -f 'ShellService.cc'; then $(CYGPATH_W) 'ShellService.cc'; else $(CYGPATH_W) '$(srcdir)/ShellService.cc'; fi`
+
+bin_Desktop-ShellTask.o: ShellTask.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ShellTask.o -MD -MP -MF $(DEPDIR)/bin_Desktop-ShellTask.Tpo -c -o bin_Desktop-ShellTask.o `test -f 'ShellTask.cc' || echo '$(srcdir)/'`ShellTask.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ShellTask.Tpo $(DEPDIR)/bin_Desktop-ShellTask.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ShellTask.cc' object='bin_Desktop-ShellTask.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ShellTask.o `test -f 'ShellTask.cc' || echo '$(srcdir)/'`ShellTask.cc
+
+bin_Desktop-ShellTask.obj: ShellTask.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ShellTask.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-ShellTask.Tpo -c -o bin_Desktop-ShellTask.obj `if test -f 'ShellTask.cc'; then $(CYGPATH_W) 'ShellTask.cc'; else $(CYGPATH_W) '$(srcdir)/ShellTask.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ShellTask.Tpo $(DEPDIR)/bin_Desktop-ShellTask.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ShellTask.cc' object='bin_Desktop-ShellTask.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ShellTask.obj `if test -f 'ShellTask.cc'; then $(CYGPATH_W) 'ShellTask.cc'; else $(CYGPATH_W) '$(srcdir)/ShellTask.cc'; fi`
+
+bin_Desktop-Service.o: Service.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Service.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Service.Tpo -c -o bin_Desktop-Service.o `test -f 'Service.cc' || echo '$(srcdir)/'`Service.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Service.Tpo $(DEPDIR)/bin_Desktop-Service.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Service.cc' object='bin_Desktop-Service.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Service.o `test -f 'Service.cc' || echo '$(srcdir)/'`Service.cc
+
+bin_Desktop-Service.obj: Service.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Service.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Service.Tpo -c -o bin_Desktop-Service.obj `if test -f 'Service.cc'; then $(CYGPATH_W) 'Service.cc'; else $(CYGPATH_W) '$(srcdir)/Service.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Service.Tpo $(DEPDIR)/bin_Desktop-Service.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Service.cc' object='bin_Desktop-Service.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Service.obj `if test -f 'Service.cc'; then $(CYGPATH_W) 'Service.cc'; else $(CYGPATH_W) '$(srcdir)/Service.cc'; fi`
+
+bin_Desktop-ServiceEditor.o: ServiceEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ServiceEditor.o -MD -MP -MF $(DEPDIR)/bin_Desktop-ServiceEditor.Tpo -c -o bin_Desktop-ServiceEditor.o `test -f 'ServiceEditor.cc' || echo '$(srcdir)/'`ServiceEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ServiceEditor.Tpo $(DEPDIR)/bin_Desktop-ServiceEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ServiceEditor.cc' object='bin_Desktop-ServiceEditor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ServiceEditor.o `test -f 'ServiceEditor.cc' || echo '$(srcdir)/'`ServiceEditor.cc
+
+bin_Desktop-ServiceEditor.obj: ServiceEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ServiceEditor.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-ServiceEditor.Tpo -c -o bin_Desktop-ServiceEditor.obj `if test -f 'ServiceEditor.cc'; then $(CYGPATH_W) 'ServiceEditor.cc'; else $(CYGPATH_W) '$(srcdir)/ServiceEditor.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ServiceEditor.Tpo $(DEPDIR)/bin_Desktop-ServiceEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ServiceEditor.cc' object='bin_Desktop-ServiceEditor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ServiceEditor.obj `if test -f 'ServiceEditor.cc'; then $(CYGPATH_W) 'ServiceEditor.cc'; else $(CYGPATH_W) '$(srcdir)/ServiceEditor.cc'; fi`
+
+bin_Desktop-SimpleEditor.o: SimpleEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-SimpleEditor.o -MD -MP -MF $(DEPDIR)/bin_Desktop-SimpleEditor.Tpo -c -o bin_Desktop-SimpleEditor.o `test -f 'SimpleEditor.cc' || echo '$(srcdir)/'`SimpleEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-SimpleEditor.Tpo $(DEPDIR)/bin_Desktop-SimpleEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='SimpleEditor.cc' object='bin_Desktop-SimpleEditor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-SimpleEditor.o `test -f 'SimpleEditor.cc' || echo '$(srcdir)/'`SimpleEditor.cc
+
+bin_Desktop-SimpleEditor.obj: SimpleEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-SimpleEditor.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-SimpleEditor.Tpo -c -o bin_Desktop-SimpleEditor.obj `if test -f 'SimpleEditor.cc'; then $(CYGPATH_W) 'SimpleEditor.cc'; else $(CYGPATH_W) '$(srcdir)/SimpleEditor.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-SimpleEditor.Tpo $(DEPDIR)/bin_Desktop-SimpleEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='SimpleEditor.cc' object='bin_Desktop-SimpleEditor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-SimpleEditor.obj `if test -f 'SimpleEditor.cc'; then $(CYGPATH_W) 'SimpleEditor.cc'; else $(CYGPATH_W) '$(srcdir)/SimpleEditor.cc'; fi`
+
+bin_Desktop-StandardObject.o: StandardObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-StandardObject.o -MD -MP -MF $(DEPDIR)/bin_Desktop-StandardObject.Tpo -c -o bin_Desktop-StandardObject.o `test -f 'StandardObject.cc' || echo '$(srcdir)/'`StandardObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-StandardObject.Tpo $(DEPDIR)/bin_Desktop-StandardObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='StandardObject.cc' object='bin_Desktop-StandardObject.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-StandardObject.o `test -f 'StandardObject.cc' || echo '$(srcdir)/'`StandardObject.cc
+
+bin_Desktop-StandardObject.obj: StandardObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-StandardObject.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-StandardObject.Tpo -c -o bin_Desktop-StandardObject.obj `if test -f 'StandardObject.cc'; then $(CYGPATH_W) 'StandardObject.cc'; else $(CYGPATH_W) '$(srcdir)/StandardObject.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-StandardObject.Tpo $(DEPDIR)/bin_Desktop-StandardObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='StandardObject.cc' object='bin_Desktop-StandardObject.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-StandardObject.obj `if test -f 'StandardObject.cc'; then $(CYGPATH_W) 'StandardObject.cc'; else $(CYGPATH_W) '$(srcdir)/StandardObject.cc'; fi`
+
+bin_Desktop-State.o: State.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-State.o -MD -MP -MF $(DEPDIR)/bin_Desktop-State.Tpo -c -o bin_Desktop-State.o `test -f 'State.cc' || echo '$(srcdir)/'`State.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-State.Tpo $(DEPDIR)/bin_Desktop-State.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='State.cc' object='bin_Desktop-State.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-State.o `test -f 'State.cc' || echo '$(srcdir)/'`State.cc
+
+bin_Desktop-State.obj: State.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-State.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-State.Tpo -c -o bin_Desktop-State.obj `if test -f 'State.cc'; then $(CYGPATH_W) 'State.cc'; else $(CYGPATH_W) '$(srcdir)/State.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-State.Tpo $(DEPDIR)/bin_Desktop-State.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='State.cc' object='bin_Desktop-State.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-State.obj `if test -f 'State.cc'; then $(CYGPATH_W) 'State.cc'; else $(CYGPATH_W) '$(srcdir)/State.cc'; fi`
+
+bin_Desktop-SystemFolder.o: SystemFolder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-SystemFolder.o -MD -MP -MF $(DEPDIR)/bin_Desktop-SystemFolder.Tpo -c -o bin_Desktop-SystemFolder.o `test -f 'SystemFolder.cc' || echo '$(srcdir)/'`SystemFolder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-SystemFolder.Tpo $(DEPDIR)/bin_Desktop-SystemFolder.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='SystemFolder.cc' object='bin_Desktop-SystemFolder.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-SystemFolder.o `test -f 'SystemFolder.cc' || echo '$(srcdir)/'`SystemFolder.cc
+
+bin_Desktop-SystemFolder.obj: SystemFolder.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-SystemFolder.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-SystemFolder.Tpo -c -o bin_Desktop-SystemFolder.obj `if test -f 'SystemFolder.cc'; then $(CYGPATH_W) 'SystemFolder.cc'; else $(CYGPATH_W) '$(srcdir)/SystemFolder.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-SystemFolder.Tpo $(DEPDIR)/bin_Desktop-SystemFolder.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='SystemFolder.cc' object='bin_Desktop-SystemFolder.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-SystemFolder.obj `if test -f 'SystemFolder.cc'; then $(CYGPATH_W) 'SystemFolder.cc'; else $(CYGPATH_W) '$(srcdir)/SystemFolder.cc'; fi`
+
+bin_Desktop-Task.o: Task.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Task.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Task.Tpo -c -o bin_Desktop-Task.o `test -f 'Task.cc' || echo '$(srcdir)/'`Task.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Task.Tpo $(DEPDIR)/bin_Desktop-Task.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Task.cc' object='bin_Desktop-Task.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Task.o `test -f 'Task.cc' || echo '$(srcdir)/'`Task.cc
+
+bin_Desktop-Task.obj: Task.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Task.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Task.Tpo -c -o bin_Desktop-Task.obj `if test -f 'Task.cc'; then $(CYGPATH_W) 'Task.cc'; else $(CYGPATH_W) '$(srcdir)/Task.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Task.Tpo $(DEPDIR)/bin_Desktop-Task.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Task.cc' object='bin_Desktop-Task.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Task.obj `if test -f 'Task.cc'; then $(CYGPATH_W) 'Task.cc'; else $(CYGPATH_W) '$(srcdir)/Task.cc'; fi`
+
+bin_Desktop-TeeBuffer.o: TeeBuffer.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-TeeBuffer.o -MD -MP -MF $(DEPDIR)/bin_Desktop-TeeBuffer.Tpo -c -o bin_Desktop-TeeBuffer.o `test -f 'TeeBuffer.cc' || echo '$(srcdir)/'`TeeBuffer.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-TeeBuffer.Tpo $(DEPDIR)/bin_Desktop-TeeBuffer.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TeeBuffer.cc' object='bin_Desktop-TeeBuffer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-TeeBuffer.o `test -f 'TeeBuffer.cc' || echo '$(srcdir)/'`TeeBuffer.cc
+
+bin_Desktop-TeeBuffer.obj: TeeBuffer.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-TeeBuffer.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-TeeBuffer.Tpo -c -o bin_Desktop-TeeBuffer.obj `if test -f 'TeeBuffer.cc'; then $(CYGPATH_W) 'TeeBuffer.cc'; else $(CYGPATH_W) '$(srcdir)/TeeBuffer.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-TeeBuffer.Tpo $(DEPDIR)/bin_Desktop-TeeBuffer.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TeeBuffer.cc' object='bin_Desktop-TeeBuffer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-TeeBuffer.obj `if test -f 'TeeBuffer.cc'; then $(CYGPATH_W) 'TeeBuffer.cc'; else $(CYGPATH_W) '$(srcdir)/TeeBuffer.cc'; fi`
+
+bin_Desktop-TeeStream.o: TeeStream.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-TeeStream.o -MD -MP -MF $(DEPDIR)/bin_Desktop-TeeStream.Tpo -c -o bin_Desktop-TeeStream.o `test -f 'TeeStream.cc' || echo '$(srcdir)/'`TeeStream.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-TeeStream.Tpo $(DEPDIR)/bin_Desktop-TeeStream.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TeeStream.cc' object='bin_Desktop-TeeStream.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-TeeStream.o `test -f 'TeeStream.cc' || echo '$(srcdir)/'`TeeStream.cc
+
+bin_Desktop-TeeStream.obj: TeeStream.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-TeeStream.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-TeeStream.Tpo -c -o bin_Desktop-TeeStream.obj `if test -f 'TeeStream.cc'; then $(CYGPATH_W) 'TeeStream.cc'; else $(CYGPATH_W) '$(srcdir)/TeeStream.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-TeeStream.Tpo $(DEPDIR)/bin_Desktop-TeeStream.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TeeStream.cc' object='bin_Desktop-TeeStream.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-TeeStream.obj `if test -f 'TeeStream.cc'; then $(CYGPATH_W) 'TeeStream.cc'; else $(CYGPATH_W) '$(srcdir)/TeeStream.cc'; fi`
+
+bin_Desktop-TemporaryEditor.o: TemporaryEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-TemporaryEditor.o -MD -MP -MF $(DEPDIR)/bin_Desktop-TemporaryEditor.Tpo -c -o bin_Desktop-TemporaryEditor.o `test -f 'TemporaryEditor.cc' || echo '$(srcdir)/'`TemporaryEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-TemporaryEditor.Tpo $(DEPDIR)/bin_Desktop-TemporaryEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TemporaryEditor.cc' object='bin_Desktop-TemporaryEditor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-TemporaryEditor.o `test -f 'TemporaryEditor.cc' || echo '$(srcdir)/'`TemporaryEditor.cc
+
+bin_Desktop-TemporaryEditor.obj: TemporaryEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-TemporaryEditor.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-TemporaryEditor.Tpo -c -o bin_Desktop-TemporaryEditor.obj `if test -f 'TemporaryEditor.cc'; then $(CYGPATH_W) 'TemporaryEditor.cc'; else $(CYGPATH_W) '$(srcdir)/TemporaryEditor.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-TemporaryEditor.Tpo $(DEPDIR)/bin_Desktop-TemporaryEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TemporaryEditor.cc' object='bin_Desktop-TemporaryEditor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-TemporaryEditor.obj `if test -f 'TemporaryEditor.cc'; then $(CYGPATH_W) 'TemporaryEditor.cc'; else $(CYGPATH_W) '$(srcdir)/TemporaryEditor.cc'; fi`
+
+bin_Desktop-TemporaryObject.o: TemporaryObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-TemporaryObject.o -MD -MP -MF $(DEPDIR)/bin_Desktop-TemporaryObject.Tpo -c -o bin_Desktop-TemporaryObject.o `test -f 'TemporaryObject.cc' || echo '$(srcdir)/'`TemporaryObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-TemporaryObject.Tpo $(DEPDIR)/bin_Desktop-TemporaryObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TemporaryObject.cc' object='bin_Desktop-TemporaryObject.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-TemporaryObject.o `test -f 'TemporaryObject.cc' || echo '$(srcdir)/'`TemporaryObject.cc
+
+bin_Desktop-TemporaryObject.obj: TemporaryObject.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-TemporaryObject.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-TemporaryObject.Tpo -c -o bin_Desktop-TemporaryObject.obj `if test -f 'TemporaryObject.cc'; then $(CYGPATH_W) 'TemporaryObject.cc'; else $(CYGPATH_W) '$(srcdir)/TemporaryObject.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-TemporaryObject.Tpo $(DEPDIR)/bin_Desktop-TemporaryObject.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TemporaryObject.cc' object='bin_Desktop-TemporaryObject.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-TemporaryObject.obj `if test -f 'TemporaryObject.cc'; then $(CYGPATH_W) 'TemporaryObject.cc'; else $(CYGPATH_W) '$(srcdir)/TemporaryObject.cc'; fi`
+
+bin_Desktop-Tools.o: Tools.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Tools.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Tools.Tpo -c -o bin_Desktop-Tools.o `test -f 'Tools.cc' || echo '$(srcdir)/'`Tools.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Tools.Tpo $(DEPDIR)/bin_Desktop-Tools.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Tools.cc' object='bin_Desktop-Tools.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Tools.o `test -f 'Tools.cc' || echo '$(srcdir)/'`Tools.cc
+
+bin_Desktop-Tools.obj: Tools.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Tools.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Tools.Tpo -c -o bin_Desktop-Tools.obj `if test -f 'Tools.cc'; then $(CYGPATH_W) 'Tools.cc'; else $(CYGPATH_W) '$(srcdir)/Tools.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Tools.Tpo $(DEPDIR)/bin_Desktop-Tools.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Tools.cc' object='bin_Desktop-Tools.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Tools.obj `if test -f 'Tools.cc'; then $(CYGPATH_W) 'Tools.cc'; else $(CYGPATH_W) '$(srcdir)/Tools.cc'; fi`
+
+bin_Desktop-Transaction.o: Transaction.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Transaction.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Transaction.Tpo -c -o bin_Desktop-Transaction.o `test -f 'Transaction.cc' || echo '$(srcdir)/'`Transaction.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Transaction.Tpo $(DEPDIR)/bin_Desktop-Transaction.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Transaction.cc' object='bin_Desktop-Transaction.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Transaction.o `test -f 'Transaction.cc' || echo '$(srcdir)/'`Transaction.cc
+
+bin_Desktop-Transaction.obj: Transaction.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Transaction.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Transaction.Tpo -c -o bin_Desktop-Transaction.obj `if test -f 'Transaction.cc'; then $(CYGPATH_W) 'Transaction.cc'; else $(CYGPATH_W) '$(srcdir)/Transaction.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Transaction.Tpo $(DEPDIR)/bin_Desktop-Transaction.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Transaction.cc' object='bin_Desktop-Transaction.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Transaction.obj `if test -f 'Transaction.cc'; then $(CYGPATH_W) 'Transaction.cc'; else $(CYGPATH_W) '$(srcdir)/Transaction.cc'; fi`
+
+bin_Desktop-ViewEditor.o: ViewEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ViewEditor.o -MD -MP -MF $(DEPDIR)/bin_Desktop-ViewEditor.Tpo -c -o bin_Desktop-ViewEditor.o `test -f 'ViewEditor.cc' || echo '$(srcdir)/'`ViewEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ViewEditor.Tpo $(DEPDIR)/bin_Desktop-ViewEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ViewEditor.cc' object='bin_Desktop-ViewEditor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ViewEditor.o `test -f 'ViewEditor.cc' || echo '$(srcdir)/'`ViewEditor.cc
+
+bin_Desktop-ViewEditor.obj: ViewEditor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ViewEditor.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-ViewEditor.Tpo -c -o bin_Desktop-ViewEditor.obj `if test -f 'ViewEditor.cc'; then $(CYGPATH_W) 'ViewEditor.cc'; else $(CYGPATH_W) '$(srcdir)/ViewEditor.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ViewEditor.Tpo $(DEPDIR)/bin_Desktop-ViewEditor.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ViewEditor.cc' object='bin_Desktop-ViewEditor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ViewEditor.obj `if test -f 'ViewEditor.cc'; then $(CYGPATH_W) 'ViewEditor.cc'; else $(CYGPATH_W) '$(srcdir)/ViewEditor.cc'; fi`
+
+bin_Desktop-Wastebasket.o: Wastebasket.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Wastebasket.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Wastebasket.Tpo -c -o bin_Desktop-Wastebasket.o `test -f 'Wastebasket.cc' || echo '$(srcdir)/'`Wastebasket.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Wastebasket.Tpo $(DEPDIR)/bin_Desktop-Wastebasket.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Wastebasket.cc' object='bin_Desktop-Wastebasket.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Wastebasket.o `test -f 'Wastebasket.cc' || echo '$(srcdir)/'`Wastebasket.cc
+
+bin_Desktop-Wastebasket.obj: Wastebasket.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Wastebasket.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Wastebasket.Tpo -c -o bin_Desktop-Wastebasket.obj `if test -f 'Wastebasket.cc'; then $(CYGPATH_W) 'Wastebasket.cc'; else $(CYGPATH_W) '$(srcdir)/Wastebasket.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Wastebasket.Tpo $(DEPDIR)/bin_Desktop-Wastebasket.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Wastebasket.cc' object='bin_Desktop-Wastebasket.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Wastebasket.obj `if test -f 'Wastebasket.cc'; then $(CYGPATH_W) 'Wastebasket.cc'; else $(CYGPATH_W) '$(srcdir)/Wastebasket.cc'; fi`
+
+bin_Desktop-MvQIconStripView.o: MvQIconStripView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconStripView.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconStripView.Tpo -c -o bin_Desktop-MvQIconStripView.o `test -f 'MvQIconStripView.cc' || echo '$(srcdir)/'`MvQIconStripView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconStripView.Tpo $(DEPDIR)/bin_Desktop-MvQIconStripView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconStripView.cc' object='bin_Desktop-MvQIconStripView.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconStripView.o `test -f 'MvQIconStripView.cc' || echo '$(srcdir)/'`MvQIconStripView.cc
+
+bin_Desktop-MvQIconStripView.obj: MvQIconStripView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconStripView.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconStripView.Tpo -c -o bin_Desktop-MvQIconStripView.obj `if test -f 'MvQIconStripView.cc'; then $(CYGPATH_W) 'MvQIconStripView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconStripView.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconStripView.Tpo $(DEPDIR)/bin_Desktop-MvQIconStripView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconStripView.cc' object='bin_Desktop-MvQIconStripView.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconStripView.obj `if test -f 'MvQIconStripView.cc'; then $(CYGPATH_W) 'MvQIconStripView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconStripView.cc'; fi`
+
+bin_Desktop-MvQIconFolderViewBase.moc.o: MvQIconFolderViewBase.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconFolderViewBase.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Tpo -c -o bin_Desktop-MvQIconFolderViewBase.moc.o `test -f 'MvQIconFolderViewBase.moc.cpp' || echo '$(srcdir)/'`MvQIconFolderViewBase.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconFolderViewBase.moc.cpp' object='bin_Desktop-MvQIconFolderViewBase.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconFolderViewBase.moc.o `test -f 'MvQIconFolderViewBase.moc.cpp' || echo '$(srcdir)/'`MvQIconFolderViewBase.moc.cpp
+
+bin_Desktop-MvQIconFolderViewBase.moc.obj: MvQIconFolderViewBase.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconFolderViewBase.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Tpo -c -o bin_Desktop-MvQIconFolderViewBase.moc.obj `if test -f 'MvQIconFolderViewBase.moc.cpp'; then $(CYGPATH_W) 'MvQIconFolderViewBase.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconFolderViewBase.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconFolderViewBase.moc.cpp' object='bin_Desktop-MvQIconFolderViewBase.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconFolderViewBase.moc.obj `if test -f 'MvQIconFolderViewBase.moc.cpp'; then $(CYGPATH_W) 'MvQIconFolderViewBase.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconFolderViewBase.moc.cpp'; fi`
+
+bin_Desktop-MvQBookmarks.moc.o: MvQBookmarks.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQBookmarks.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQBookmarks.moc.Tpo -c -o bin_Desktop-MvQBookmarks.moc.o `test -f 'MvQBookmarks.moc.cpp' || echo '$(srcdir)/'`MvQBookmarks.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQBookmarks.moc.Tpo $(DEPDIR)/bin_Desktop-MvQBookmarks.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQBookmarks.moc.cpp' object='bin_Desktop-MvQBookmarks.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQBookmarks.moc.o `test -f 'MvQBookmarks.moc.cpp' || echo '$(srcdir)/'`MvQBookmarks.moc.cpp
+
+bin_Desktop-MvQBookmarks.moc.obj: MvQBookmarks.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQBookmarks.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQBookmarks.moc.Tpo -c -o bin_Desktop-MvQBookmarks.moc.obj `if test -f 'MvQBookmarks.moc.cpp'; then $(CYGPATH_W) 'MvQBookmarks.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQBookmarks.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQBookmarks.moc.Tpo $(DEPDIR)/bin_Desktop-MvQBookmarks.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQBookmarks.moc.cpp' object='bin_Desktop-MvQBookmarks.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQBookmarks.moc.obj `if test -f 'MvQBookmarks.moc.cpp'; then $(CYGPATH_W) 'MvQBookmarks.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQBookmarks.moc.cpp'; fi`
+
+bin_Desktop-MvQEditor.moc.o: MvQEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQEditor.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQEditor.moc.Tpo -c -o bin_Desktop-MvQEditor.moc.o `test -f 'MvQEditor.moc.cpp' || echo '$(srcdir)/'`MvQEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQEditor.moc.Tpo $(DEPDIR)/bin_Desktop-MvQEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQEditor.moc.cpp' object='bin_Desktop-MvQEditor.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQEditor.moc.o `test -f 'MvQEditor.moc.cpp' || echo '$(srcdir)/'`MvQEditor.moc.cpp
+
+bin_Desktop-MvQEditor.moc.obj: MvQEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQEditor.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQEditor.moc.Tpo -c -o bin_Desktop-MvQEditor.moc.obj `if test -f 'MvQEditor.moc.cpp'; then $(CYGPATH_W) 'MvQEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQEditor.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQEditor.moc.Tpo $(DEPDIR)/bin_Desktop-MvQEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQEditor.moc.cpp' object='bin_Desktop-MvQEditor.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQEditor.moc.obj `if test -f 'MvQEditor.moc.cpp'; then $(CYGPATH_W) 'MvQEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQEditor.moc.cpp'; fi`
+
+bin_Desktop-MvQFileBrowser.moc.o: MvQFileBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFileBrowser.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFileBrowser.moc.Tpo -c -o bin_Desktop-MvQFileBrowser.moc.o `test -f 'MvQFileBrowser.moc.cpp' || echo '$(srcdir)/'`MvQFileBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFileBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFileBrowser.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileBrowser.moc.cpp' object='bin_Desktop-MvQFileBrowser.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFileBrowser.moc.o `test -f 'MvQFileBrowser.moc.cpp' || echo '$(srcdir)/'`MvQFileBrowser.moc.cpp
+
+bin_Desktop-MvQFileBrowser.moc.obj: MvQFileBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFileBrowser.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFileBrowser.moc.Tpo -c -o bin_Desktop-MvQFileBrowser.moc.obj `if test -f 'MvQFileBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQFileBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFileBrowser.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFileBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFileBrowser.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileBrowser.moc.cpp' object='bin_Desktop-MvQFileBrowser.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFileBrowser.moc.obj `if test -f 'MvQFileBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQFileBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFileBrowser.moc.cpp'; fi`
+
+bin_Desktop-MvQDetailedFolderView.moc.o: MvQDetailedFolderView.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDetailedFolderView.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDetailedFolderView.moc.Tpo -c -o bin_Desktop-MvQDetailedFolderView.moc.o `test -f 'MvQDetailedFolderView.moc.cpp' || echo '$(srcdir)/'`MvQDetailedFolderView.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDetailedFolderView.moc.Tpo $(DEPDIR)/bin_Desktop-MvQDetailedFolderView.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDetailedFolderView.moc.cpp' object='bin_Desktop-MvQDetailedFolderView.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDetailedFolderView.moc.o `test -f 'MvQDetailedFolderView.moc.cpp' || echo '$(srcdir)/'`MvQDetailedFolderView.moc.cpp
+
+bin_Desktop-MvQDetailedFolderView.moc.obj: MvQDetailedFolderView.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDetailedFolderView.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDetailedFolderView.moc.Tpo -c -o bin_Desktop-MvQDetailedFolderView.moc.obj `if test -f 'MvQDetailedFolderView.moc.cpp'; then $(CYGPATH_W) 'MvQDetailedFolderView.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQDetailedFolderView.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDetailedFolderView.moc.Tpo $(DEPDIR)/bin_Desktop-MvQDetailedFolderView.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDetailedFolderView.moc.cpp' object='bin_Desktop-MvQDetailedFolderView.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDetailedFolderView.moc.obj `if test -f 'MvQDetailedFolderView.moc.cpp'; then $(CYGPATH_W) 'MvQDetailedFolderView.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQDetailedFolderView.moc.cpp'; fi`
+
+bin_Desktop-MvQIconMimeData.moc.o: MvQIconMimeData.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconMimeData.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconMimeData.moc.Tpo -c -o bin_Desktop-MvQIconMimeData.moc.o `test -f 'MvQIconMimeData.moc.cpp' || echo '$(srcdir)/'`MvQIconMimeData.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconMimeData.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconMimeData.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconMimeData.moc.cpp' object='bin_Desktop-MvQIconMimeData.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconMimeData.moc.o `test -f 'MvQIconMimeData.moc.cpp' || echo '$(srcdir)/'`MvQIconMimeData.moc.cpp
+
+bin_Desktop-MvQIconMimeData.moc.obj: MvQIconMimeData.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconMimeData.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconMimeData.moc.Tpo -c -o bin_Desktop-MvQIconMimeData.moc.obj `if test -f 'MvQIconMimeData.moc.cpp'; then $(CYGPATH_W) 'MvQIconMimeData.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconMimeData.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconMimeData.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconMimeData.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconMimeData.moc.cpp' object='bin_Desktop-MvQIconMimeData.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconMimeData.moc.obj `if test -f 'MvQIconMimeData.moc.cpp'; then $(CYGPATH_W) 'MvQIconMimeData.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconMimeData.moc.cpp'; fi`
+
+bin_Desktop-MvQClassBrowser.moc.o: MvQClassBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQClassBrowser.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Tpo -c -o bin_Desktop-MvQClassBrowser.moc.o `test -f 'MvQClassBrowser.moc.cpp' || echo '$(srcdir)/'`MvQClassBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQClassBrowser.moc.cpp' object='bin_Desktop-MvQClassBrowser.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQClassBrowser.moc.o `test -f 'MvQClassBrowser.moc.cpp' || echo '$(srcdir)/'`MvQClassBrowser.moc.cpp
+
+bin_Desktop-MvQClassBrowser.moc.obj: MvQClassBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQClassBrowser.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Tpo -c -o bin_Desktop-MvQClassBrowser.moc.obj `if test -f 'MvQClassBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQClassBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQClassBrowser.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQClassBrowser.moc.cpp' object='bin_Desktop-MvQClassBrowser.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQClassBrowser.moc.obj `if test -f 'MvQClassBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQClassBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQClassBrowser.moc.cpp'; fi`
+
+bin_Desktop-MvQColourListLine.moc.o: MvQColourListLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourListLine.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourListLine.moc.Tpo -c -o bin_Desktop-MvQColourListLine.moc.o `test -f 'MvQColourListLine.moc.cpp' || echo '$(srcdir)/'`MvQColourListLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourListLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQColourListLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQColourListLine.moc.cpp' object='bin_Desktop-MvQColourListLine.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQColourListLine.moc.o `test -f 'MvQColourListLine.moc.cpp' || echo '$(srcdir)/'`MvQColourListLine.moc.cpp
+
+bin_Desktop-MvQColourListLine.moc.obj: MvQColourListLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourListLine.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourListLine.moc.Tpo -c -o bin_Desktop-MvQColourListLine.moc.obj `if test -f 'MvQColourListLine.moc.cpp'; then $(CYGPATH_W) 'MvQColourListLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQColourListLine.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourListLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQColourListLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQColourListLine.moc.cpp' object='bin_Desktop-MvQColourListLine.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQColourListLine.moc.obj `if test -f 'MvQColourListLine.moc.cpp'; then $(CYGPATH_W) 'MvQColourListLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQColourListLine.moc.cpp'; fi`
+
+bin_Desktop-MvQDrawerPanel.moc.o: MvQDrawerPanel.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDrawerPanel.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDrawerPanel.moc.Tpo -c -o bin_Desktop-MvQDrawerPanel.moc.o `test -f 'MvQDrawerPanel.moc.cpp' || echo '$(srcdir)/'`MvQDrawerPanel.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDrawerPanel.moc.Tpo $(DEPDIR)/bin_Desktop-MvQDrawerPanel.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDrawerPanel.moc.cpp' object='bin_Desktop-MvQDrawerPanel.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDrawerPanel.moc.o `test -f 'MvQDrawerPanel.moc.cpp' || echo '$(srcdir)/'`MvQDrawerPanel.moc.cpp
+
+bin_Desktop-MvQDrawerPanel.moc.obj: MvQDrawerPanel.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDrawerPanel.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDrawerPanel.moc.Tpo -c -o bin_Desktop-MvQDrawerPanel.moc.obj `if test -f 'MvQDrawerPanel.moc.cpp'; then $(CYGPATH_W) 'MvQDrawerPanel.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQDrawerPanel.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDrawerPanel.moc.Tpo $(DEPDIR)/bin_Desktop-MvQDrawerPanel.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQDrawerPanel.moc.cpp' object='bin_Desktop-MvQDrawerPanel.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDrawerPanel.moc.obj `if test -f 'MvQDrawerPanel.moc.cpp'; then $(CYGPATH_W) 'MvQDrawerPanel.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQDrawerPanel.moc.cpp'; fi`
+
+bin_Desktop-MvQPathWidget.moc.o: MvQPathWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQPathWidget.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQPathWidget.moc.Tpo -c -o bin_Desktop-MvQPathWidget.moc.o `test -f 'MvQPathWidget.moc.cpp' || echo '$(srcdir)/'`MvQPathWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQPathWidget.moc.Tpo $(DEPDIR)/bin_Desktop-MvQPathWidget.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQPathWidget.moc.cpp' object='bin_Desktop-MvQPathWidget.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQPathWidget.moc.o `test -f 'MvQPathWidget.moc.cpp' || echo '$(srcdir)/'`MvQPathWidget.moc.cpp
+
+bin_Desktop-MvQPathWidget.moc.obj: MvQPathWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQPathWidget.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQPathWidget.moc.Tpo -c -o bin_Desktop-MvQPathWidget.moc.obj `if test -f 'MvQPathWidget.moc.cpp'; then $(CYGPATH_W) 'MvQPathWidget.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQPathWidget.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQPathWidget.moc.Tpo $(DEPDIR)/bin_Desktop-MvQPathWidget.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQPathWidget.moc.cpp' object='bin_Desktop-MvQPathWidget.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQPathWidget.moc.obj `if test -f 'MvQPathWidget.moc.cpp'; then $(CYGPATH_W) 'MvQPathWidget.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQPathWidget.moc.cpp'; fi`
+
+bin_Desktop-Runnable.moc.o: Runnable.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Runnable.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Runnable.moc.Tpo -c -o bin_Desktop-Runnable.moc.o `test -f 'Runnable.moc.cpp' || echo '$(srcdir)/'`Runnable.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Runnable.moc.Tpo $(DEPDIR)/bin_Desktop-Runnable.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Runnable.moc.cpp' object='bin_Desktop-Runnable.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Runnable.moc.o `test -f 'Runnable.moc.cpp' || echo '$(srcdir)/'`Runnable.moc.cpp
+
+bin_Desktop-Runnable.moc.obj: Runnable.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Runnable.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Runnable.moc.Tpo -c -o bin_Desktop-Runnable.moc.obj `if test -f 'Runnable.moc.cpp'; then $(CYGPATH_W) 'Runnable.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/Runnable.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Runnable.moc.Tpo $(DEPDIR)/bin_Desktop-Runnable.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Runnable.moc.cpp' object='bin_Desktop-Runnable.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Runnable.moc.obj `if test -f 'Runnable.moc.cpp'; then $(CYGPATH_W) 'Runnable.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/Runnable.moc.cpp'; fi`
+
+bin_Desktop-MvQFileWatcher.moc.o: MvQFileWatcher.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFileWatcher.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFileWatcher.moc.Tpo -c -o bin_Desktop-MvQFileWatcher.moc.o `test -f 'MvQFileWatcher.moc.cpp' || echo '$(srcdir)/'`MvQFileWatcher.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFileWatcher.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFileWatcher.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileWatcher.moc.cpp' object='bin_Desktop-MvQFileWatcher.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFileWatcher.moc.o `test -f 'MvQFileWatcher.moc.cpp' || echo '$(srcdir)/'`MvQFileWatcher.moc.cpp
+
+bin_Desktop-MvQFileWatcher.moc.obj: MvQFileWatcher.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFileWatcher.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFileWatcher.moc.Tpo -c -o bin_Desktop-MvQFileWatcher.moc.obj `if test -f 'MvQFileWatcher.moc.cpp'; then $(CYGPATH_W) 'MvQFileWatcher.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFileWatcher.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFileWatcher.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFileWatcher.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileWatcher.moc.cpp' object='bin_Desktop-MvQFileWatcher.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFileWatcher.moc.obj `if test -f 'MvQFileWatcher.moc.cpp'; then $(CYGPATH_W) 'MvQFileWatcher.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFileWatcher.moc.cpp'; fi`
+
+bin_Desktop-MvQFolderDrawerPanel.moc.o: MvQFolderDrawerPanel.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderDrawerPanel.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.moc.Tpo -c -o bin_Desktop-MvQFolderDrawerPanel.moc.o `test -f 'MvQFolderDrawerPanel.moc.cpp' || echo '$(srcdir)/'`MvQFolderDrawerPanel.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderDrawerPanel.moc.cpp' object='bin_Desktop-MvQFolderDrawerPanel.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderDrawerPanel.moc.o `test -f 'MvQFolderDrawerPanel.moc.cpp' || echo '$(srcdir)/'`MvQFolderDrawerPanel.moc.cpp
+
+bin_Desktop-MvQFolderDrawerPanel.moc.obj: MvQFolderDrawerPanel.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderDrawerPanel.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.moc.Tpo -c -o bin_Desktop-MvQFolderDrawerPanel.moc.obj `if test -f 'MvQFolderDrawerPanel.moc.cpp'; then $(CYGPATH_W) 'MvQFolderDrawerPanel.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderDrawerPanel.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderDrawerPanel.moc.cpp' object='bin_Desktop-MvQFolderDrawerPanel.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderDrawerPanel.moc.obj `if test -f 'MvQFolderDrawerPanel.moc.cpp'; then $(CYGPATH_W) 'MvQFolderDrawerPanel.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderDrawerPanel.moc.cpp'; fi`
+
+bin_Desktop-MvQFolderHistory.moc.o: MvQFolderHistory.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderHistory.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderHistory.moc.Tpo -c -o bin_Desktop-MvQFolderHistory.moc.o `test -f 'MvQFolderHistory.moc.cpp' || echo '$(srcdir)/'`MvQFolderHistory.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderHistory.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderHistory.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderHistory.moc.cpp' object='bin_Desktop-MvQFolderHistory.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderHistory.moc.o `test -f 'MvQFolderHistory.moc.cpp' || echo '$(srcdir)/'`MvQFolderHistory.moc.cpp
+
+bin_Desktop-MvQFolderHistory.moc.obj: MvQFolderHistory.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderHistory.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderHistory.moc.Tpo -c -o bin_Desktop-MvQFolderHistory.moc.obj `if test -f 'MvQFolderHistory.moc.cpp'; then $(CYGPATH_W) 'MvQFolderHistory.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderHistory.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderHistory.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderHistory.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderHistory.moc.cpp' object='bin_Desktop-MvQFolderHistory.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderHistory.moc.obj `if test -f 'MvQFolderHistory.moc.cpp'; then $(CYGPATH_W) 'MvQFolderHistory.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderHistory.moc.cpp'; fi`
+
+bin_Desktop-MvQFolderPanel.moc.o: MvQFolderPanel.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderPanel.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderPanel.moc.Tpo -c -o bin_Desktop-MvQFolderPanel.moc.o `test -f 'MvQFolderPanel.moc.cpp' || echo '$(srcdir)/'`MvQFolderPanel.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderPanel.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderPanel.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderPanel.moc.cpp' object='bin_Desktop-MvQFolderPanel.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderPanel.moc.o `test -f 'MvQFolderPanel.moc.cpp' || echo '$(srcdir)/'`MvQFolderPanel.moc.cpp
+
+bin_Desktop-MvQFolderPanel.moc.obj: MvQFolderPanel.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderPanel.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderPanel.moc.Tpo -c -o bin_Desktop-MvQFolderPanel.moc.obj `if test -f 'MvQFolderPanel.moc.cpp'; then $(CYGPATH_W) 'MvQFolderPanel.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderPanel.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderPanel.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderPanel.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderPanel.moc.cpp' object='bin_Desktop-MvQFolderPanel.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderPanel.moc.obj `if test -f 'MvQFolderPanel.moc.cpp'; then $(CYGPATH_W) 'MvQFolderPanel.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderPanel.moc.cpp'; fi`
+
+bin_Desktop-MvQFolderWidget.moc.o: MvQFolderWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderWidget.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderWidget.moc.Tpo -c -o bin_Desktop-MvQFolderWidget.moc.o `test -f 'MvQFolderWidget.moc.cpp' || echo '$(srcdir)/'`MvQFolderWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderWidget.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderWidget.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderWidget.moc.cpp' object='bin_Desktop-MvQFolderWidget.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderWidget.moc.o `test -f 'MvQFolderWidget.moc.cpp' || echo '$(srcdir)/'`MvQFolderWidget.moc.cpp
+
+bin_Desktop-MvQFolderWidget.moc.obj: MvQFolderWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderWidget.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderWidget.moc.Tpo -c -o bin_Desktop-MvQFolderWidget.moc.obj `if test -f 'MvQFolderWidget.moc.cpp'; then $(CYGPATH_W) 'MvQFolderWidget.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderWidget.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderWidget.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderWidget.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderWidget.moc.cpp' object='bin_Desktop-MvQFolderWidget.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderWidget.moc.obj `if test -f 'MvQFolderWidget.moc.cpp'; then $(CYGPATH_W) 'MvQFolderWidget.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderWidget.moc.cpp'; fi`
+
+bin_Desktop-MvQFolderModel.moc.o: MvQFolderModel.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderModel.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderModel.moc.Tpo -c -o bin_Desktop-MvQFolderModel.moc.o `test -f 'MvQFolderModel.moc.cpp' || echo '$(srcdir)/'`MvQFolderModel.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderModel.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderModel.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderModel.moc.cpp' object='bin_Desktop-MvQFolderModel.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderModel.moc.o `test -f 'MvQFolderModel.moc.cpp' || echo '$(srcdir)/'`MvQFolderModel.moc.cpp
+
+bin_Desktop-MvQFolderModel.moc.obj: MvQFolderModel.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderModel.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderModel.moc.Tpo -c -o bin_Desktop-MvQFolderModel.moc.obj `if test -f 'MvQFolderModel.moc.cpp'; then $(CYGPATH_W) 'MvQFolderModel.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderModel.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderModel.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderModel.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderModel.moc.cpp' object='bin_Desktop-MvQFolderModel.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderModel.moc.obj `if test -f 'MvQFolderModel.moc.cpp'; then $(CYGPATH_W) 'MvQFolderModel.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderModel.moc.cpp'; fi`
+
+bin_Desktop-MvQIconFolderView.moc.o: MvQIconFolderView.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconFolderView.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconFolderView.moc.Tpo -c -o bin_Desktop-MvQIconFolderView.moc.o `test -f 'MvQIconFolderView.moc.cpp' || echo '$(srcdir)/'`MvQIconFolderView.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconFolderView.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconFolderView.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconFolderView.moc.cpp' object='bin_Desktop-MvQIconFolderView.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconFolderView.moc.o `test -f 'MvQIconFolderView.moc.cpp' || echo '$(srcdir)/'`MvQIconFolderView.moc.cpp
+
+bin_Desktop-MvQIconFolderView.moc.obj: MvQIconFolderView.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconFolderView.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconFolderView.moc.Tpo -c -o bin_Desktop-MvQIconFolderView.moc.obj `if test -f 'MvQIconFolderView.moc.cpp'; then $(CYGPATH_W) 'MvQIconFolderView.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconFolderView.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconFolderView.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconFolderView.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconFolderView.moc.cpp' object='bin_Desktop-MvQIconFolderView.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconFolderView.moc.obj `if test -f 'MvQIconFolderView.moc.cpp'; then $(CYGPATH_W) 'MvQIconFolderView.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconFolderView.moc.cpp'; fi`
+
+bin_Desktop-MvQFolderViewDelegate.moc.o: MvQFolderViewDelegate.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderViewDelegate.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.moc.Tpo -c -o bin_Desktop-MvQFolderViewDelegate.moc.o `test -f 'MvQFolderViewDelegate.moc.cpp' || echo '$(srcdir)/'`MvQFolderViewDelegate.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderViewDelegate.moc.cpp' object='bin_Desktop-MvQFolderViewDelegate.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderViewDelegate.moc.o `test -f 'MvQFolderViewDelegate.moc.cpp' || echo '$(srcdir)/'`MvQFolderViewDelegate.moc.cpp
+
+bin_Desktop-MvQFolderViewDelegate.moc.obj: MvQFolderViewDelegate.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderViewDelegate.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.moc.Tpo -c -o bin_Desktop-MvQFolderViewDelegate.moc.obj `if test -f 'MvQFolderViewDelegate.moc.cpp'; then $(CYGPATH_W) 'MvQFolderViewDelegate.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderViewDelegate.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderViewDelegate.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderViewDelegate.moc.cpp' object='bin_Desktop-MvQFolderViewDelegate.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderViewDelegate.moc.obj `if test -f 'MvQFolderViewDelegate.moc.cpp'; then $(CYGPATH_W) 'MvQFolderViewDelegate.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderViewDelegate.moc.cpp'; fi`
+
+bin_Desktop-MvQFolderWatcher.moc.o: MvQFolderWatcher.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderWatcher.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderWatcher.moc.Tpo -c -o bin_Desktop-MvQFolderWatcher.moc.o `test -f 'MvQFolderWatcher.moc.cpp' || echo '$(srcdir)/'`MvQFolderWatcher.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderWatcher.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderWatcher.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderWatcher.moc.cpp' object='bin_Desktop-MvQFolderWatcher.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderWatcher.moc.o `test -f 'MvQFolderWatcher.moc.cpp' || echo '$(srcdir)/'`MvQFolderWatcher.moc.cpp
+
+bin_Desktop-MvQFolderWatcher.moc.obj: MvQFolderWatcher.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFolderWatcher.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFolderWatcher.moc.Tpo -c -o bin_Desktop-MvQFolderWatcher.moc.obj `if test -f 'MvQFolderWatcher.moc.cpp'; then $(CYGPATH_W) 'MvQFolderWatcher.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderWatcher.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFolderWatcher.moc.Tpo $(DEPDIR)/bin_Desktop-MvQFolderWatcher.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFolderWatcher.moc.cpp' object='bin_Desktop-MvQFolderWatcher.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFolderWatcher.moc.obj `if test -f 'MvQFolderWatcher.moc.cpp'; then $(CYGPATH_W) 'MvQFolderWatcher.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFolderWatcher.moc.cpp'; fi`
+
+bin_Desktop-MvQHelpBrowser.moc.o: MvQHelpBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQHelpBrowser.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQHelpBrowser.moc.Tpo -c -o bin_Desktop-MvQHelpBrowser.moc.o `test -f 'MvQHelpBrowser.moc.cpp' || echo '$(srcdir)/'`MvQHelpBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQHelpBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQHelpBrowser.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQHelpBrowser.moc.cpp' object='bin_Desktop-MvQHelpBrowser.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQHelpBrowser.moc.o `test -f 'MvQHelpBrowser.moc.cpp' || echo '$(srcdir)/'`MvQHelpBrowser.moc.cpp
+
+bin_Desktop-MvQHelpBrowser.moc.obj: MvQHelpBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQHelpBrowser.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQHelpBrowser.moc.Tpo -c -o bin_Desktop-MvQHelpBrowser.moc.obj `if test -f 'MvQHelpBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQHelpBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQHelpBrowser.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQHelpBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQHelpBrowser.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQHelpBrowser.moc.cpp' object='bin_Desktop-MvQHelpBrowser.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQHelpBrowser.moc.obj `if test -f 'MvQHelpBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQHelpBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQHelpBrowser.moc.cpp'; fi`
+
+bin_Desktop-MvQNewIconWidget.moc.o: MvQNewIconWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQNewIconWidget.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQNewIconWidget.moc.Tpo -c -o bin_Desktop-MvQNewIconWidget.moc.o `test -f 'MvQNewIconWidget.moc.cpp' || echo '$(srcdir)/'`MvQNewIconWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQNewIconWidget.moc.Tpo $(DEPDIR)/bin_Desktop-MvQNewIconWidget.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQNewIconWidget.moc.cpp' object='bin_Desktop-MvQNewIconWidget.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQNewIconWidget.moc.o `test -f 'MvQNewIconWidget.moc.cpp' || echo '$(srcdir)/'`MvQNewIconWidget.moc.cpp
+
+bin_Desktop-MvQNewIconWidget.moc.obj: MvQNewIconWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQNewIconWidget.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQNewIconWidget.moc.Tpo -c -o bin_Desktop-MvQNewIconWidget.moc.obj `if test -f 'MvQNewIconWidget.moc.cpp'; then $(CYGPATH_W) 'MvQNewIconWidget.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQNewIconWidget.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQNewIconWidget.moc.Tpo $(DEPDIR)/bin_Desktop-MvQNewIconWidget.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQNewIconWidget.moc.cpp' object='bin_Desktop-MvQNewIconWidget.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQNewIconWidget.moc.obj `if test -f 'MvQNewIconWidget.moc.cpp'; then $(CYGPATH_W) 'MvQNewIconWidget.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQNewIconWidget.moc.cpp'; fi`
+
+bin_Desktop-MvQRequestPanelLine.moc.o: MvQRequestPanelLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRequestPanelLine.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRequestPanelLine.moc.Tpo -c -o bin_Desktop-MvQRequestPanelLine.moc.o `test -f 'MvQRequestPanelLine.moc.cpp' || echo '$(srcdir)/'`MvQRequestPanelLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRequestPanelLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQRequestPanelLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQRequestPanelLine.moc.cpp' object='bin_Desktop-MvQRequestPanelLine.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRequestPanelLine.moc.o `test -f 'MvQRequestPanelLine.moc.cpp' || echo '$(srcdir)/'`MvQRequestPanelLine.moc.cpp
+
+bin_Desktop-MvQRequestPanelLine.moc.obj: MvQRequestPanelLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRequestPanelLine.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRequestPanelLine.moc.Tpo -c -o bin_Desktop-MvQRequestPanelLine.moc.obj `if test -f 'MvQRequestPanelLine.moc.cpp'; then $(CYGPATH_W) 'MvQRequestPanelLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQRequestPanelLine.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRequestPanelLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQRequestPanelLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQRequestPanelLine.moc.cpp' object='bin_Desktop-MvQRequestPanelLine.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRequestPanelLine.moc.obj `if test -f 'MvQRequestPanelLine.moc.cpp'; then $(CYGPATH_W) 'MvQRequestPanelLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQRequestPanelLine.moc.cpp'; fi`
+
+bin_Desktop-MvQBoolLine.moc.o: MvQBoolLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQBoolLine.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQBoolLine.moc.Tpo -c -o bin_Desktop-MvQBoolLine.moc.o `test -f 'MvQBoolLine.moc.cpp' || echo '$(srcdir)/'`MvQBoolLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQBoolLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQBoolLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQBoolLine.moc.cpp' object='bin_Desktop-MvQBoolLine.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQBoolLine.moc.o `test -f 'MvQBoolLine.moc.cpp' || echo '$(srcdir)/'`MvQBoolLine.moc.cpp
+
+bin_Desktop-MvQBoolLine.moc.obj: MvQBoolLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQBoolLine.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQBoolLine.moc.Tpo -c -o bin_Desktop-MvQBoolLine.moc.obj `if test -f 'MvQBoolLine.moc.cpp'; then $(CYGPATH_W) 'MvQBoolLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQBoolLine.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQBoolLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQBoolLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQBoolLine.moc.cpp' object='bin_Desktop-MvQBoolLine.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQBoolLine.moc.obj `if test -f 'MvQBoolLine.moc.cpp'; then $(CYGPATH_W) 'MvQBoolLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQBoolLine.moc.cpp'; fi`
+
+bin_Desktop-MvQColourLine.moc.o: MvQColourLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourLine.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourLine.moc.Tpo -c -o bin_Desktop-MvQColourLine.moc.o `test -f 'MvQColourLine.moc.cpp' || echo '$(srcdir)/'`MvQColourLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQColourLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQColourLine.moc.cpp' object='bin_Desktop-MvQColourLine.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQColourLine.moc.o `test -f 'MvQColourLine.moc.cpp' || echo '$(srcdir)/'`MvQColourLine.moc.cpp
+
+bin_Desktop-MvQColourLine.moc.obj: MvQColourLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourLine.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourLine.moc.Tpo -c -o bin_Desktop-MvQColourLine.moc.obj `if test -f 'MvQColourLine.moc.cpp'; then $(CYGPATH_W) 'MvQColourLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQColourLine.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQColourLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQColourLine.moc.cpp' object='bin_Desktop-MvQColourLine.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQColourLine.moc.obj `if test -f 'MvQColourLine.moc.cpp'; then $(CYGPATH_W) 'MvQColourLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQColourLine.moc.cpp'; fi`
+
+bin_Desktop-MvQComboBoxLine.moc.o: MvQComboBoxLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQComboBoxLine.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQComboBoxLine.moc.Tpo -c -o bin_Desktop-MvQComboBoxLine.moc.o `test -f 'MvQComboBoxLine.moc.cpp' || echo '$(srcdir)/'`MvQComboBoxLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQComboBoxLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQComboBoxLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQComboBoxLine.moc.cpp' object='bin_Desktop-MvQComboBoxLine.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQComboBoxLine.moc.o `test -f 'MvQComboBoxLine.moc.cpp' || echo '$(srcdir)/'`MvQComboBoxLine.moc.cpp
+
+bin_Desktop-MvQComboBoxLine.moc.obj: MvQComboBoxLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQComboBoxLine.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQComboBoxLine.moc.Tpo -c -o bin_Desktop-MvQComboBoxLine.moc.obj `if test -f 'MvQComboBoxLine.moc.cpp'; then $(CYGPATH_W) 'MvQComboBoxLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQComboBoxLine.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQComboBoxLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQComboBoxLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQComboBoxLine.moc.cpp' object='bin_Desktop-MvQComboBoxLine.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQComboBoxLine.moc.obj `if test -f 'MvQComboBoxLine.moc.cpp'; then $(CYGPATH_W) 'MvQComboBoxLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQComboBoxLine.moc.cpp'; fi`
+
+bin_Desktop-MvQIconHolder.moc.o: MvQIconHolder.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconHolder.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconHolder.moc.Tpo -c -o bin_Desktop-MvQIconHolder.moc.o `test -f 'MvQIconHolder.moc.cpp' || echo '$(srcdir)/'`MvQIconHolder.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconHolder.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconHolder.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconHolder.moc.cpp' object='bin_Desktop-MvQIconHolder.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconHolder.moc.o `test -f 'MvQIconHolder.moc.cpp' || echo '$(srcdir)/'`MvQIconHolder.moc.cpp
+
+bin_Desktop-MvQIconHolder.moc.obj: MvQIconHolder.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconHolder.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconHolder.moc.Tpo -c -o bin_Desktop-MvQIconHolder.moc.obj `if test -f 'MvQIconHolder.moc.cpp'; then $(CYGPATH_W) 'MvQIconHolder.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconHolder.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconHolder.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconHolder.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconHolder.moc.cpp' object='bin_Desktop-MvQIconHolder.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconHolder.moc.obj `if test -f 'MvQIconHolder.moc.cpp'; then $(CYGPATH_W) 'MvQIconHolder.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconHolder.moc.cpp'; fi`
+
+bin_Desktop-MvQIconLine.moc.o: MvQIconLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconLine.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconLine.moc.Tpo -c -o bin_Desktop-MvQIconLine.moc.o `test -f 'MvQIconLine.moc.cpp' || echo '$(srcdir)/'`MvQIconLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconLine.moc.cpp' object='bin_Desktop-MvQIconLine.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconLine.moc.o `test -f 'MvQIconLine.moc.cpp' || echo '$(srcdir)/'`MvQIconLine.moc.cpp
+
+bin_Desktop-MvQIconLine.moc.obj: MvQIconLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconLine.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconLine.moc.Tpo -c -o bin_Desktop-MvQIconLine.moc.obj `if test -f 'MvQIconLine.moc.cpp'; then $(CYGPATH_W) 'MvQIconLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconLine.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconLine.moc.cpp' object='bin_Desktop-MvQIconLine.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconLine.moc.obj `if test -f 'MvQIconLine.moc.cpp'; then $(CYGPATH_W) 'MvQIconLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconLine.moc.cpp'; fi`
+
+bin_Desktop-MvQScrolledTextLine.moc.o: MvQScrolledTextLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQScrolledTextLine.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQScrolledTextLine.moc.Tpo -c -o bin_Desktop-MvQScrolledTextLine.moc.o `test -f 'MvQScrolledTextLine.moc.cpp' || echo '$(srcdir)/'`MvQScrolledTextLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQScrolledTextLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQScrolledTextLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQScrolledTextLine.moc.cpp' object='bin_Desktop-MvQScrolledTextLine.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQScrolledTextLine.moc.o `test -f 'MvQScrolledTextLine.moc.cpp' || echo '$(srcdir)/'`MvQScrolledTextLine.moc.cpp
+
+bin_Desktop-MvQScrolledTextLine.moc.obj: MvQScrolledTextLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQScrolledTextLine.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQScrolledTextLine.moc.Tpo -c -o bin_Desktop-MvQScrolledTextLine.moc.obj `if test -f 'MvQScrolledTextLine.moc.cpp'; then $(CYGPATH_W) 'MvQScrolledTextLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQScrolledTextLine.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQScrolledTextLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQScrolledTextLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQScrolledTextLine.moc.cpp' object='bin_Desktop-MvQScrolledTextLine.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQScrolledTextLine.moc.obj `if test -f 'MvQScrolledTextLine.moc.cpp'; then $(CYGPATH_W) 'MvQScrolledTextLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQScrolledTextLine.moc.cpp'; fi`
+
+bin_Desktop-MvQStringLine.moc.o: MvQStringLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQStringLine.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQStringLine.moc.Tpo -c -o bin_Desktop-MvQStringLine.moc.o `test -f 'MvQStringLine.moc.cpp' || echo '$(srcdir)/'`MvQStringLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQStringLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQStringLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQStringLine.moc.cpp' object='bin_Desktop-MvQStringLine.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQStringLine.moc.o `test -f 'MvQStringLine.moc.cpp' || echo '$(srcdir)/'`MvQStringLine.moc.cpp
+
+bin_Desktop-MvQStringLine.moc.obj: MvQStringLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQStringLine.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQStringLine.moc.Tpo -c -o bin_Desktop-MvQStringLine.moc.obj `if test -f 'MvQStringLine.moc.cpp'; then $(CYGPATH_W) 'MvQStringLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQStringLine.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQStringLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQStringLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQStringLine.moc.cpp' object='bin_Desktop-MvQStringLine.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQStringLine.moc.obj `if test -f 'MvQStringLine.moc.cpp'; then $(CYGPATH_W) 'MvQStringLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQStringLine.moc.cpp'; fi`
+
+bin_Desktop-MvQTextLine.moc.o: MvQTextLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTextLine.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTextLine.moc.Tpo -c -o bin_Desktop-MvQTextLine.moc.o `test -f 'MvQTextLine.moc.cpp' || echo '$(srcdir)/'`MvQTextLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTextLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQTextLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTextLine.moc.cpp' object='bin_Desktop-MvQTextLine.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTextLine.moc.o `test -f 'MvQTextLine.moc.cpp' || echo '$(srcdir)/'`MvQTextLine.moc.cpp
+
+bin_Desktop-MvQTextLine.moc.obj: MvQTextLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTextLine.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTextLine.moc.Tpo -c -o bin_Desktop-MvQTextLine.moc.obj `if test -f 'MvQTextLine.moc.cpp'; then $(CYGPATH_W) 'MvQTextLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQTextLine.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTextLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQTextLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTextLine.moc.cpp' object='bin_Desktop-MvQTextLine.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTextLine.moc.obj `if test -f 'MvQTextLine.moc.cpp'; then $(CYGPATH_W) 'MvQTextLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQTextLine.moc.cpp'; fi`
+
+bin_Desktop-MvQRequestPanelHelp.moc.o: MvQRequestPanelHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRequestPanelHelp.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.moc.Tpo -c -o bin_Desktop-MvQRequestPanelHelp.moc.o `test -f 'MvQRequestPanelHelp.moc.cpp' || echo '$(srcdir)/'`MvQRequestPanelHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.moc.Tpo $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQRequestPanelHelp.moc.cpp' object='bin_Desktop-MvQRequestPanelHelp.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRequestPanelHelp.moc.o `test -f 'MvQRequestPanelHelp.moc.cpp' || echo '$(srcdir)/'`MvQRequestPanelHelp.moc.cpp
+
+bin_Desktop-MvQRequestPanelHelp.moc.obj: MvQRequestPanelHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRequestPanelHelp.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.moc.Tpo -c -o bin_Desktop-MvQRequestPanelHelp.moc.obj `if test -f 'MvQRequestPanelHelp.moc.cpp'; then $(CYGPATH_W) 'MvQRequestPanelHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQRequestPanelHelp.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.moc.Tpo $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQRequestPanelHelp.moc.cpp' object='bin_Desktop-MvQRequestPanelHelp.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRequestPanelHelp.moc.obj `if test -f 'MvQRequestPanelHelp.moc.cpp'; then $(CYGPATH_W) 'MvQRequestPanelHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQRequestPanelHelp.moc.cpp'; fi`
+
+bin_Desktop-MvQColourHelp.moc.o: MvQColourHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourHelp.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourHelp.moc.Tpo -c -o bin_Desktop-MvQColourHelp.moc.o `test -f 'MvQColourHelp.moc.cpp' || echo '$(srcdir)/'`MvQColourHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourHelp.moc.Tpo $(DEPDIR)/bin_Desktop-MvQColourHelp.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQColourHelp.moc.cpp' object='bin_Desktop-MvQColourHelp.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQColourHelp.moc.o `test -f 'MvQColourHelp.moc.cpp' || echo '$(srcdir)/'`MvQColourHelp.moc.cpp
+
+bin_Desktop-MvQColourHelp.moc.obj: MvQColourHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourHelp.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourHelp.moc.Tpo -c -o bin_Desktop-MvQColourHelp.moc.obj `if test -f 'MvQColourHelp.moc.cpp'; then $(CYGPATH_W) 'MvQColourHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQColourHelp.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourHelp.moc.Tpo $(DEPDIR)/bin_Desktop-MvQColourHelp.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQColourHelp.moc.cpp' object='bin_Desktop-MvQColourHelp.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQColourHelp.moc.obj `if test -f 'MvQColourHelp.moc.cpp'; then $(CYGPATH_W) 'MvQColourHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQColourHelp.moc.cpp'; fi`
+
+bin_Desktop-MvQListHelp.moc.o: MvQListHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQListHelp.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQListHelp.moc.Tpo -c -o bin_Desktop-MvQListHelp.moc.o `test -f 'MvQListHelp.moc.cpp' || echo '$(srcdir)/'`MvQListHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQListHelp.moc.Tpo $(DEPDIR)/bin_Desktop-MvQListHelp.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQListHelp.moc.cpp' object='bin_Desktop-MvQListHelp.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQListHelp.moc.o `test -f 'MvQListHelp.moc.cpp' || echo '$(srcdir)/'`MvQListHelp.moc.cpp
+
+bin_Desktop-MvQListHelp.moc.obj: MvQListHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQListHelp.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQListHelp.moc.Tpo -c -o bin_Desktop-MvQListHelp.moc.obj `if test -f 'MvQListHelp.moc.cpp'; then $(CYGPATH_W) 'MvQListHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQListHelp.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQListHelp.moc.Tpo $(DEPDIR)/bin_Desktop-MvQListHelp.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQListHelp.moc.cpp' object='bin_Desktop-MvQListHelp.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQListHelp.moc.obj `if test -f 'MvQListHelp.moc.cpp'; then $(CYGPATH_W) 'MvQListHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQListHelp.moc.cpp'; fi`
+
+bin_Desktop-MvQIconHelp.moc.o: MvQIconHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconHelp.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconHelp.moc.Tpo -c -o bin_Desktop-MvQIconHelp.moc.o `test -f 'MvQIconHelp.moc.cpp' || echo '$(srcdir)/'`MvQIconHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconHelp.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconHelp.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconHelp.moc.cpp' object='bin_Desktop-MvQIconHelp.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconHelp.moc.o `test -f 'MvQIconHelp.moc.cpp' || echo '$(srcdir)/'`MvQIconHelp.moc.cpp
+
+bin_Desktop-MvQIconHelp.moc.obj: MvQIconHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconHelp.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconHelp.moc.Tpo -c -o bin_Desktop-MvQIconHelp.moc.obj `if test -f 'MvQIconHelp.moc.cpp'; then $(CYGPATH_W) 'MvQIconHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconHelp.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconHelp.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconHelp.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQIconHelp.moc.cpp' object='bin_Desktop-MvQIconHelp.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconHelp.moc.obj `if test -f 'MvQIconHelp.moc.cpp'; then $(CYGPATH_W) 'MvQIconHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconHelp.moc.cpp'; fi`
+
+bin_Desktop-MvQLogDialog.moc.o: MvQLogDialog.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQLogDialog.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQLogDialog.moc.Tpo -c -o bin_Desktop-MvQLogDialog.moc.o `test -f 'MvQLogDialog.moc.cpp' || echo '$(srcdir)/'`MvQLogDialog.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQLogDialog.moc.Tpo $(DEPDIR)/bin_Desktop-MvQLogDialog.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQLogDialog.moc.cpp' object='bin_Desktop-MvQLogDialog.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQLogDialog.moc.o `test -f 'MvQLogDialog.moc.cpp' || echo '$(srcdir)/'`MvQLogDialog.moc.cpp
+
+bin_Desktop-MvQLogDialog.moc.obj: MvQLogDialog.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQLogDialog.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQLogDialog.moc.Tpo -c -o bin_Desktop-MvQLogDialog.moc.obj `if test -f 'MvQLogDialog.moc.cpp'; then $(CYGPATH_W) 'MvQLogDialog.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQLogDialog.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQLogDialog.moc.Tpo $(DEPDIR)/bin_Desktop-MvQLogDialog.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQLogDialog.moc.cpp' object='bin_Desktop-MvQLogDialog.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQLogDialog.moc.obj `if test -f 'MvQLogDialog.moc.cpp'; then $(CYGPATH_W) 'MvQLogDialog.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQLogDialog.moc.cpp'; fi`
+
+bin_Desktop-MvQObjectBrowser.moc.o: MvQObjectBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQObjectBrowser.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Tpo -c -o bin_Desktop-MvQObjectBrowser.moc.o `test -f 'MvQObjectBrowser.moc.cpp' || echo '$(srcdir)/'`MvQObjectBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQObjectBrowser.moc.cpp' object='bin_Desktop-MvQObjectBrowser.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQObjectBrowser.moc.o `test -f 'MvQObjectBrowser.moc.cpp' || echo '$(srcdir)/'`MvQObjectBrowser.moc.cpp
+
+bin_Desktop-MvQObjectBrowser.moc.obj: MvQObjectBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQObjectBrowser.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Tpo -c -o bin_Desktop-MvQObjectBrowser.moc.obj `if test -f 'MvQObjectBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQObjectBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQObjectBrowser.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQObjectBrowser.moc.cpp' object='bin_Desktop-MvQObjectBrowser.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQObjectBrowser.moc.obj `if test -f 'MvQObjectBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQObjectBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQObjectBrowser.moc.cpp'; fi`
+
+bin_Desktop-MvQPageView.moc.o: MvQPageView.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQPageView.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQPageView.moc.Tpo -c -o bin_Desktop-MvQPageView.moc.o `test -f 'MvQPageView.moc.cpp' || echo '$(srcdir)/'`MvQPageView.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQPageView.moc.Tpo $(DEPDIR)/bin_Desktop-MvQPageView.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQPageView.moc.cpp' object='bin_Desktop-MvQPageView.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQPageView.moc.o `test -f 'MvQPageView.moc.cpp' || echo '$(srcdir)/'`MvQPageView.moc.cpp
+
+bin_Desktop-MvQPageView.moc.obj: MvQPageView.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQPageView.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQPageView.moc.Tpo -c -o bin_Desktop-MvQPageView.moc.obj `if test -f 'MvQPageView.moc.cpp'; then $(CYGPATH_W) 'MvQPageView.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQPageView.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQPageView.moc.Tpo $(DEPDIR)/bin_Desktop-MvQPageView.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQPageView.moc.cpp' object='bin_Desktop-MvQPageView.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQPageView.moc.obj `if test -f 'MvQPageView.moc.cpp'; then $(CYGPATH_W) 'MvQPageView.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQPageView.moc.cpp'; fi`
+
+bin_Desktop-MvQProductBrowser.moc.o: MvQProductBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQProductBrowser.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQProductBrowser.moc.Tpo -c -o bin_Desktop-MvQProductBrowser.moc.o `test -f 'MvQProductBrowser.moc.cpp' || echo '$(srcdir)/'`MvQProductBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQProductBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQProductBrowser.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQProductBrowser.moc.cpp' object='bin_Desktop-MvQProductBrowser.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQProductBrowser.moc.o `test -f 'MvQProductBrowser.moc.cpp' || echo '$(srcdir)/'`MvQProductBrowser.moc.cpp
+
+bin_Desktop-MvQProductBrowser.moc.obj: MvQProductBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQProductBrowser.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQProductBrowser.moc.Tpo -c -o bin_Desktop-MvQProductBrowser.moc.obj `if test -f 'MvQProductBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQProductBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQProductBrowser.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQProductBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQProductBrowser.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQProductBrowser.moc.cpp' object='bin_Desktop-MvQProductBrowser.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQProductBrowser.moc.obj `if test -f 'MvQProductBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQProductBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQProductBrowser.moc.cpp'; fi`
+
+bin_Desktop-MvQRequestPanelWidget.moc.o: MvQRequestPanelWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRequestPanelWidget.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.moc.Tpo -c -o bin_Desktop-MvQRequestPanelWidget.moc.o `test -f 'MvQRequestPanelWidget.moc.cpp' || echo '$(srcdir)/'`MvQRequestPanelWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.moc.Tpo $(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQRequestPanelWidget.moc.cpp' object='bin_Desktop-MvQRequestPanelWidget.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRequestPanelWidget.moc.o `test -f 'MvQRequestPanelWidget.moc.cpp' || echo '$(srcdir)/'`MvQRequestPanelWidget.moc.cpp
+
+bin_Desktop-MvQRequestPanelWidget.moc.obj: MvQRequestPanelWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRequestPanelWidget.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.moc.Tpo -c -o bin_Desktop-MvQRequestPanelWidget.moc.obj `if test -f 'MvQRequestPanelWidget.moc.cpp'; then $(CYGPATH_W) 'MvQRequestPanelWidget.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQRequestPanelWidget.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.moc.Tpo $(DEPDIR)/bin_Desktop-MvQRequestPanelWidget.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQRequestPanelWidget.moc.cpp' object='bin_Desktop-MvQRequestPanelWidget.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRequestPanelWidget.moc.obj `if test -f 'MvQRequestPanelWidget.moc.cpp'; then $(CYGPATH_W) 'MvQRequestPanelWidget.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQRequestPanelWidget.moc.cpp'; fi`
+
+bin_Desktop-MvQScriptHelp.moc.o: MvQScriptHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQScriptHelp.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQScriptHelp.moc.Tpo -c -o bin_Desktop-MvQScriptHelp.moc.o `test -f 'MvQScriptHelp.moc.cpp' || echo '$(srcdir)/'`MvQScriptHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQScriptHelp.moc.Tpo $(DEPDIR)/bin_Desktop-MvQScriptHelp.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQScriptHelp.moc.cpp' object='bin_Desktop-MvQScriptHelp.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQScriptHelp.moc.o `test -f 'MvQScriptHelp.moc.cpp' || echo '$(srcdir)/'`MvQScriptHelp.moc.cpp
+
+bin_Desktop-MvQScriptHelp.moc.obj: MvQScriptHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQScriptHelp.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQScriptHelp.moc.Tpo -c -o bin_Desktop-MvQScriptHelp.moc.obj `if test -f 'MvQScriptHelp.moc.cpp'; then $(CYGPATH_W) 'MvQScriptHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQScriptHelp.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQScriptHelp.moc.Tpo $(DEPDIR)/bin_Desktop-MvQScriptHelp.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQScriptHelp.moc.cpp' object='bin_Desktop-MvQScriptHelp.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQScriptHelp.moc.obj `if test -f 'MvQScriptHelp.moc.cpp'; then $(CYGPATH_W) 'MvQScriptHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQScriptHelp.moc.cpp'; fi`
+
+bin_Desktop-MvQSliderLine.moc.o: MvQSliderLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQSliderLine.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQSliderLine.moc.Tpo -c -o bin_Desktop-MvQSliderLine.moc.o `test -f 'MvQSliderLine.moc.cpp' || echo '$(srcdir)/'`MvQSliderLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQSliderLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQSliderLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQSliderLine.moc.cpp' object='bin_Desktop-MvQSliderLine.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQSliderLine.moc.o `test -f 'MvQSliderLine.moc.cpp' || echo '$(srcdir)/'`MvQSliderLine.moc.cpp
+
+bin_Desktop-MvQSliderLine.moc.obj: MvQSliderLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQSliderLine.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQSliderLine.moc.Tpo -c -o bin_Desktop-MvQSliderLine.moc.obj `if test -f 'MvQSliderLine.moc.cpp'; then $(CYGPATH_W) 'MvQSliderLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQSliderLine.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQSliderLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQSliderLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQSliderLine.moc.cpp' object='bin_Desktop-MvQSliderLine.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQSliderLine.moc.obj `if test -f 'MvQSliderLine.moc.cpp'; then $(CYGPATH_W) 'MvQSliderLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQSliderLine.moc.cpp'; fi`
+
+bin_Desktop-MvQStationsHelp.moc.o: MvQStationsHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQStationsHelp.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQStationsHelp.moc.Tpo -c -o bin_Desktop-MvQStationsHelp.moc.o `test -f 'MvQStationsHelp.moc.cpp' || echo '$(srcdir)/'`MvQStationsHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQStationsHelp.moc.Tpo $(DEPDIR)/bin_Desktop-MvQStationsHelp.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQStationsHelp.moc.cpp' object='bin_Desktop-MvQStationsHelp.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQStationsHelp.moc.o `test -f 'MvQStationsHelp.moc.cpp' || echo '$(srcdir)/'`MvQStationsHelp.moc.cpp
+
+bin_Desktop-MvQStationsHelp.moc.obj: MvQStationsHelp.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQStationsHelp.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQStationsHelp.moc.Tpo -c -o bin_Desktop-MvQStationsHelp.moc.obj `if test -f 'MvQStationsHelp.moc.cpp'; then $(CYGPATH_W) 'MvQStationsHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQStationsHelp.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQStationsHelp.moc.Tpo $(DEPDIR)/bin_Desktop-MvQStationsHelp.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQStationsHelp.moc.cpp' object='bin_Desktop-MvQStationsHelp.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQStationsHelp.moc.obj `if test -f 'MvQStationsHelp.moc.cpp'; then $(CYGPATH_W) 'MvQStationsHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQStationsHelp.moc.cpp'; fi`
+
+bin_Desktop-MvQTemplateDrawer.moc.o: MvQTemplateDrawer.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTemplateDrawer.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTemplateDrawer.moc.Tpo -c -o bin_Desktop-MvQTemplateDrawer.moc.o `test -f 'MvQTemplateDrawer.moc.cpp' || echo '$(srcdir)/'`MvQTemplateDrawer.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTemplateDrawer.moc.Tpo $(DEPDIR)/bin_Desktop-MvQTemplateDrawer.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTemplateDrawer.moc.cpp' object='bin_Desktop-MvQTemplateDrawer.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTemplateDrawer.moc.o `test -f 'MvQTemplateDrawer.moc.cpp' || echo '$(srcdir)/'`MvQTemplateDrawer.moc.cpp
+
+bin_Desktop-MvQTemplateDrawer.moc.obj: MvQTemplateDrawer.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTemplateDrawer.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTemplateDrawer.moc.Tpo -c -o bin_Desktop-MvQTemplateDrawer.moc.obj `if test -f 'MvQTemplateDrawer.moc.cpp'; then $(CYGPATH_W) 'MvQTemplateDrawer.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQTemplateDrawer.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTemplateDrawer.moc.Tpo $(DEPDIR)/bin_Desktop-MvQTemplateDrawer.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTemplateDrawer.moc.cpp' object='bin_Desktop-MvQTemplateDrawer.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTemplateDrawer.moc.obj `if test -f 'MvQTemplateDrawer.moc.cpp'; then $(CYGPATH_W) 'MvQTemplateDrawer.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQTemplateDrawer.moc.cpp'; fi`
+
+bin_Desktop-MvQTemporaryEditor.moc.o: MvQTemporaryEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTemporaryEditor.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTemporaryEditor.moc.Tpo -c -o bin_Desktop-MvQTemporaryEditor.moc.o `test -f 'MvQTemporaryEditor.moc.cpp' || echo '$(srcdir)/'`MvQTemporaryEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTemporaryEditor.moc.Tpo $(DEPDIR)/bin_Desktop-MvQTemporaryEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTemporaryEditor.moc.cpp' object='bin_Desktop-MvQTemporaryEditor.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTemporaryEditor.moc.o `test -f 'MvQTemporaryEditor.moc.cpp' || echo '$(srcdir)/'`MvQTemporaryEditor.moc.cpp
+
+bin_Desktop-MvQTemporaryEditor.moc.obj: MvQTemporaryEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTemporaryEditor.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTemporaryEditor.moc.Tpo -c -o bin_Desktop-MvQTemporaryEditor.moc.obj `if test -f 'MvQTemporaryEditor.moc.cpp'; then $(CYGPATH_W) 'MvQTemporaryEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQTemporaryEditor.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTemporaryEditor.moc.Tpo $(DEPDIR)/bin_Desktop-MvQTemporaryEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTemporaryEditor.moc.cpp' object='bin_Desktop-MvQTemporaryEditor.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTemporaryEditor.moc.obj `if test -f 'MvQTemporaryEditor.moc.cpp'; then $(CYGPATH_W) 'MvQTemporaryEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQTemporaryEditor.moc.cpp'; fi`
+
+bin_Desktop-MvQTools.moc.o: MvQTools.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTools.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTools.moc.Tpo -c -o bin_Desktop-MvQTools.moc.o `test -f 'MvQTools.moc.cpp' || echo '$(srcdir)/'`MvQTools.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTools.moc.Tpo $(DEPDIR)/bin_Desktop-MvQTools.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTools.moc.cpp' object='bin_Desktop-MvQTools.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTools.moc.o `test -f 'MvQTools.moc.cpp' || echo '$(srcdir)/'`MvQTools.moc.cpp
+
+bin_Desktop-MvQTools.moc.obj: MvQTools.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTools.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTools.moc.Tpo -c -o bin_Desktop-MvQTools.moc.obj `if test -f 'MvQTools.moc.cpp'; then $(CYGPATH_W) 'MvQTools.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQTools.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTools.moc.Tpo $(DEPDIR)/bin_Desktop-MvQTools.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQTools.moc.cpp' object='bin_Desktop-MvQTools.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTools.moc.obj `if test -f 'MvQTools.moc.cpp'; then $(CYGPATH_W) 'MvQTools.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQTools.moc.cpp'; fi`
+
+bin_Desktop-MvQViewDrawer.moc.o: MvQViewDrawer.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQViewDrawer.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQViewDrawer.moc.Tpo -c -o bin_Desktop-MvQViewDrawer.moc.o `test -f 'MvQViewDrawer.moc.cpp' || echo '$(srcdir)/'`MvQViewDrawer.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQViewDrawer.moc.Tpo $(DEPDIR)/bin_Desktop-MvQViewDrawer.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQViewDrawer.moc.cpp' object='bin_Desktop-MvQViewDrawer.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQViewDrawer.moc.o `test -f 'MvQViewDrawer.moc.cpp' || echo '$(srcdir)/'`MvQViewDrawer.moc.cpp
+
+bin_Desktop-MvQViewDrawer.moc.obj: MvQViewDrawer.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQViewDrawer.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQViewDrawer.moc.Tpo -c -o bin_Desktop-MvQViewDrawer.moc.obj `if test -f 'MvQViewDrawer.moc.cpp'; then $(CYGPATH_W) 'MvQViewDrawer.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQViewDrawer.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQViewDrawer.moc.Tpo $(DEPDIR)/bin_Desktop-MvQViewDrawer.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQViewDrawer.moc.cpp' object='bin_Desktop-MvQViewDrawer.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQViewDrawer.moc.obj `if test -f 'MvQViewDrawer.moc.cpp'; then $(CYGPATH_W) 'MvQViewDrawer.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQViewDrawer.moc.cpp'; fi`
+
+bin_Desktop-ComputeEditor.moc.o: ComputeEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ComputeEditor.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-ComputeEditor.moc.Tpo -c -o bin_Desktop-ComputeEditor.moc.o `test -f 'ComputeEditor.moc.cpp' || echo '$(srcdir)/'`ComputeEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ComputeEditor.moc.Tpo $(DEPDIR)/bin_Desktop-ComputeEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ComputeEditor.moc.cpp' object='bin_Desktop-ComputeEditor.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ComputeEditor.moc.o `test -f 'ComputeEditor.moc.cpp' || echo '$(srcdir)/'`ComputeEditor.moc.cpp
+
+bin_Desktop-ComputeEditor.moc.obj: ComputeEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ComputeEditor.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-ComputeEditor.moc.Tpo -c -o bin_Desktop-ComputeEditor.moc.obj `if test -f 'ComputeEditor.moc.cpp'; then $(CYGPATH_W) 'ComputeEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/ComputeEditor.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ComputeEditor.moc.Tpo $(DEPDIR)/bin_Desktop-ComputeEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ComputeEditor.moc.cpp' object='bin_Desktop-ComputeEditor.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ComputeEditor.moc.obj `if test -f 'ComputeEditor.moc.cpp'; then $(CYGPATH_W) 'ComputeEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/ComputeEditor.moc.cpp'; fi`
+
+bin_Desktop-ViewEditor.moc.o: ViewEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ViewEditor.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-ViewEditor.moc.Tpo -c -o bin_Desktop-ViewEditor.moc.o `test -f 'ViewEditor.moc.cpp' || echo '$(srcdir)/'`ViewEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ViewEditor.moc.Tpo $(DEPDIR)/bin_Desktop-ViewEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ViewEditor.moc.cpp' object='bin_Desktop-ViewEditor.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ViewEditor.moc.o `test -f 'ViewEditor.moc.cpp' || echo '$(srcdir)/'`ViewEditor.moc.cpp
+
+bin_Desktop-ViewEditor.moc.obj: ViewEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ViewEditor.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-ViewEditor.moc.Tpo -c -o bin_Desktop-ViewEditor.moc.obj `if test -f 'ViewEditor.moc.cpp'; then $(CYGPATH_W) 'ViewEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/ViewEditor.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ViewEditor.moc.Tpo $(DEPDIR)/bin_Desktop-ViewEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ViewEditor.moc.cpp' object='bin_Desktop-ViewEditor.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ViewEditor.moc.obj `if test -f 'ViewEditor.moc.cpp'; then $(CYGPATH_W) 'ViewEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/ViewEditor.moc.cpp'; fi`
+
+bin_Desktop-SimpleEditor.moc.o: SimpleEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-SimpleEditor.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-SimpleEditor.moc.Tpo -c -o bin_Desktop-SimpleEditor.moc.o `test -f 'SimpleEditor.moc.cpp' || echo '$(srcdir)/'`SimpleEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-SimpleEditor.moc.Tpo $(DEPDIR)/bin_Desktop-SimpleEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='SimpleEditor.moc.cpp' object='bin_Desktop-SimpleEditor.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-SimpleEditor.moc.o `test -f 'SimpleEditor.moc.cpp' || echo '$(srcdir)/'`SimpleEditor.moc.cpp
+
+bin_Desktop-SimpleEditor.moc.obj: SimpleEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-SimpleEditor.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-SimpleEditor.moc.Tpo -c -o bin_Desktop-SimpleEditor.moc.obj `if test -f 'SimpleEditor.moc.cpp'; then $(CYGPATH_W) 'SimpleEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/SimpleEditor.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-SimpleEditor.moc.Tpo $(DEPDIR)/bin_Desktop-SimpleEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='SimpleEditor.moc.cpp' object='bin_Desktop-SimpleEditor.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-SimpleEditor.moc.obj `if test -f 'SimpleEditor.moc.cpp'; then $(CYGPATH_W) 'SimpleEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/SimpleEditor.moc.cpp'; fi`
+
+bin_Desktop-FamilyEditor.moc.o: FamilyEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FamilyEditor.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-FamilyEditor.moc.Tpo -c -o bin_Desktop-FamilyEditor.moc.o `test -f 'FamilyEditor.moc.cpp' || echo '$(srcdir)/'`FamilyEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FamilyEditor.moc.Tpo $(DEPDIR)/bin_Desktop-FamilyEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FamilyEditor.moc.cpp' object='bin_Desktop-FamilyEditor.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FamilyEditor.moc.o `test -f 'FamilyEditor.moc.cpp' || echo '$(srcdir)/'`FamilyEditor.moc.cpp
+
+bin_Desktop-FamilyEditor.moc.obj: FamilyEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FamilyEditor.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-FamilyEditor.moc.Tpo -c -o bin_Desktop-FamilyEditor.moc.obj `if test -f 'FamilyEditor.moc.cpp'; then $(CYGPATH_W) 'FamilyEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/FamilyEditor.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FamilyEditor.moc.Tpo $(DEPDIR)/bin_Desktop-FamilyEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='FamilyEditor.moc.cpp' object='bin_Desktop-FamilyEditor.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FamilyEditor.moc.obj `if test -f 'FamilyEditor.moc.cpp'; then $(CYGPATH_W) 'FamilyEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/FamilyEditor.moc.cpp'; fi`
+
+bin_Desktop-MacroParamEditor.moc.o: MacroParamEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MacroParamEditor.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MacroParamEditor.moc.Tpo -c -o bin_Desktop-MacroParamEditor.moc.o `test -f 'MacroParamEditor.moc.cpp' || echo '$(srcdir)/'`MacroParamEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MacroParamEditor.moc.Tpo $(DEPDIR)/bin_Desktop-MacroParamEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MacroParamEditor.moc.cpp' object='bin_Desktop-MacroParamEditor.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MacroParamEditor.moc.o `test -f 'MacroParamEditor.moc.cpp' || echo '$(srcdir)/'`MacroParamEditor.moc.cpp
+
+bin_Desktop-MacroParamEditor.moc.obj: MacroParamEditor.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MacroParamEditor.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MacroParamEditor.moc.Tpo -c -o bin_Desktop-MacroParamEditor.moc.obj `if test -f 'MacroParamEditor.moc.cpp'; then $(CYGPATH_W) 'MacroParamEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MacroParamEditor.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MacroParamEditor.moc.Tpo $(DEPDIR)/bin_Desktop-MacroParamEditor.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MacroParamEditor.moc.cpp' object='bin_Desktop-MacroParamEditor.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MacroParamEditor.moc.obj `if test -f 'MacroParamEditor.moc.cpp'; then $(CYGPATH_W) 'MacroParamEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MacroParamEditor.moc.cpp'; fi`
+
+bin_Desktop-desktop.qrc.o: desktop.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-desktop.qrc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-desktop.qrc.Tpo -c -o bin_Desktop-desktop.qrc.o `test -f 'desktop.qrc.cpp' || echo '$(srcdir)/'`desktop.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-desktop.qrc.Tpo $(DEPDIR)/bin_Desktop-desktop.qrc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='desktop.qrc.cpp' object='bin_Desktop-desktop.qrc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-desktop.qrc.o `test -f 'desktop.qrc.cpp' || echo '$(srcdir)/'`desktop.qrc.cpp
+
+bin_Desktop-desktop.qrc.obj: desktop.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-desktop.qrc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-desktop.qrc.Tpo -c -o bin_Desktop-desktop.qrc.obj `if test -f 'desktop.qrc.cpp'; then $(CYGPATH_W) 'desktop.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/desktop.qrc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-desktop.qrc.Tpo $(DEPDIR)/bin_Desktop-desktop.qrc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='desktop.qrc.cpp' object='bin_Desktop-desktop.qrc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-desktop.qrc.obj `if test -f 'desktop.qrc.cpp'; then $(CYGPATH_W) 'desktop.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/desktop.qrc.cpp'; fi`
+
+bin_Desktop-Tools.moc.o: Tools.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Tools.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Tools.moc.Tpo -c -o bin_Desktop-Tools.moc.o `test -f 'Tools.moc.cpp' || echo '$(srcdir)/'`Tools.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Tools.moc.Tpo $(DEPDIR)/bin_Desktop-Tools.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Tools.moc.cpp' object='bin_Desktop-Tools.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Tools.moc.o `test -f 'Tools.moc.cpp' || echo '$(srcdir)/'`Tools.moc.cpp
+
+bin_Desktop-Tools.moc.obj: Tools.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Tools.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Tools.moc.Tpo -c -o bin_Desktop-Tools.moc.obj `if test -f 'Tools.moc.cpp'; then $(CYGPATH_W) 'Tools.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/Tools.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Tools.moc.Tpo $(DEPDIR)/bin_Desktop-Tools.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Tools.moc.cpp' object='bin_Desktop-Tools.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Tools.moc.obj `if test -f 'Tools.moc.cpp'; then $(CYGPATH_W) 'Tools.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/Tools.moc.cpp'; fi`
+
+bin_Desktop-Input.moc.o: Input.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Input.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-Input.moc.Tpo -c -o bin_Desktop-Input.moc.o `test -f 'Input.moc.cpp' || echo '$(srcdir)/'`Input.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Input.moc.Tpo $(DEPDIR)/bin_Desktop-Input.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Input.moc.cpp' object='bin_Desktop-Input.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Input.moc.o `test -f 'Input.moc.cpp' || echo '$(srcdir)/'`Input.moc.cpp
+
+bin_Desktop-Input.moc.obj: Input.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-Input.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-Input.moc.Tpo -c -o bin_Desktop-Input.moc.obj `if test -f 'Input.moc.cpp'; then $(CYGPATH_W) 'Input.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/Input.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-Input.moc.Tpo $(DEPDIR)/bin_Desktop-Input.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Input.moc.cpp' object='bin_Desktop-Input.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-Input.moc.obj `if test -f 'Input.moc.cpp'; then $(CYGPATH_W) 'Input.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/Input.moc.cpp'; fi`
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+	-rm -rf bin/.libs bin/_libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-rm -f bin/$(am__dirstamp)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-libtool ctags distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-binPROGRAMS
+
+
+ # ------------- #
+ # DOCUMENTATION #
+ # ------------- #
+
+# --- #
+# MOC #
+# --- #
+
+.hpp.moc.cpp:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.hh.moc.cpp:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.h.moc.cpp:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+
+.hpp.moc.cc:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.hh.moc.cc:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.h.moc.cc:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+
+.hpp.moc.cxx:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.hh.moc.cxx:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.h.moc.cxx:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+
+.hpp.moc.C:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.hh.moc.C:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+.h.moc.C:
+	$(MOC) $(QT_CPPFLAGS) $(EXTRA_CPPFLAGS) $< -o $@
+
+# --- #
+# UIC #
+# --- #
+
+.ui.ui.hpp:
+	$(UIC) $< -o $@
+
+.ui.ui.hh:
+	$(UIC) $< -o $@
+
+.ui.ui.h:
+	$(UIC) $< -o $@
+
+# --- #
+# RCC #
+# --- #
+
+.qrc.qrc.cpp:
+	$(RCC) -name `echo "$<" | sed 's/\.qrc$$//'` $< -o $@
+
+.qrc.qrc.cc:
+	$(RCC) -name `echo "$<" | sed 's/\.qrc$$//'` $< -o $@
+
+.qrc.qrc.cxx:
+	$(RCC) -name `echo "$<" | sed 's/\.qrc$$//'` $< -o $@
+
+.qrc.qrc.C:
+	$(RCC) -name `echo "$<" | sed 's/\.qrc$$//'` $< -o $@
+
+#all: bin
+#	$(UPDATE_TITLE)
+
+bin:
+	ln -s ../../bin bin
+
+clean:
+	-rm -f *.o *.moc.cpp *.qrc.cpp
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Desktop/MessageObserver.cc b/src/Desktop/MessageObserver.cc
new file mode 100644
index 0000000..60aebaa
--- /dev/null
+++ b/src/Desktop/MessageObserver.cc
@@ -0,0 +1,59 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "inc_stl.h"
+#include "Metview.h"
+
+#include "MessageObserver.h"
+
+#include "Request.h"
+
+static set<MessageObserver*> observers_;
+ 
+class MessageHandler : public MvMessage {
+    void callback(MvRequest& r);
+};
+
+void MessageHandler::callback(MvRequest& in)
+{
+	MessageObserver::broadcast(in);
+}
+
+//=================================================================
+
+MessageObserver::MessageObserver()
+{
+     static MessageHandler messages;
+}
+
+
+MessageObserver::~MessageObserver()
+{
+	observers_.erase(this);
+}
+
+void MessageObserver::observe()
+{
+	observers_.insert(this);
+}
+void MessageObserver::stop()
+{
+	observers_.erase(this);
+}
+
+
+
+
+void MessageObserver::broadcast(const Request& msg)
+{
+	for ( set<MessageObserver*>::iterator j = observers_.begin(); j != observers_.end(); ++j)
+		(*j)->message(msg);
+}
+
+
diff --git a/src/Desktop/MessageObserver.h b/src/Desktop/MessageObserver.h
new file mode 100644
index 0000000..8d9370e
--- /dev/null
+++ b/src/Desktop/MessageObserver.h
@@ -0,0 +1,45 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File MessageObserver.h
+// Baudouin Raoult - ECMWF Aug 99
+
+#ifndef MessageObserver_H
+#define MessageObserver_H
+
+#include "Counted.h"
+
+class Request;
+
+class MessageObserver : public virtual Counted  
+{
+public:
+	MessageObserver();
+	virtual ~MessageObserver();
+
+	virtual void message(const Request&) = 0;
+	void observe();
+	void stop();
+	
+	static void broadcast(const Request&);
+
+private:
+	// No copy allowed
+	MessageObserver(const MessageObserver&);
+	MessageObserver& operator=(const MessageObserver&);
+
+};
+
+
+class MessageObserverH : public Handle<MessageObserver> {
+public:
+	MessageObserverH(MessageObserver* o) : Handle<MessageObserver>(o) {}
+};
+
+#endif
diff --git a/src/Desktop/MethodCommand.cc b/src/Desktop/MethodCommand.cc
new file mode 100644
index 0000000..85ab736
--- /dev/null
+++ b/src/Desktop/MethodCommand.cc
@@ -0,0 +1,37 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MethodCommand.h"
+#include "IconObject.h"
+
+MethodCommand::MethodCommand(const string& name,Proc proc):
+	Command(name),
+	proc_(proc)
+{
+}
+
+MethodCommand::~MethodCommand()
+{
+	// Not called
+}
+
+void MethodCommand::execute(IconObject* o)
+{
+	(o->*proc_)();
+}	
+
+static MethodCommand editCmd("edit",&IconObject::edit);
+static MethodCommand copyCmd("copy",&IconObject::duplicate);
+static MethodCommand cutCmd("cut",&IconObject::duplicate);
+static MethodCommand duplicateCmd("duplicate",&IconObject::duplicate);
+static MethodCommand deleteCmd("delete",&IconObject::toWastebasket);
+static MethodCommand infoCmd("log",&IconObject::showLog);
+static MethodCommand emptyCmd("empty",&IconObject::empty);
+static MethodCommand destroyCmd("destroy",&IconObject::destroy);
+static MethodCommand clearCmd("clear",&IconObject::modified);
\ No newline at end of file
diff --git a/src/Desktop/MethodCommand.h b/src/Desktop/MethodCommand.h
new file mode 100644
index 0000000..4f0556a
--- /dev/null
+++ b/src/Desktop/MethodCommand.h
@@ -0,0 +1,40 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File MethodCommand.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef MethodCommand_H
+#define MethodCommand_H
+
+#include "Command.h"
+
+class MethodCommand : public Command 
+{
+public:
+	typedef void (IconObject::*Proc)();
+
+	MethodCommand(const string&,Proc);
+	virtual ~MethodCommand(); 
+
+	virtual void execute(IconObject*);
+	static void execute(const string&,IconObject*);
+
+protected:
+	string name_;
+
+private:
+	// No copy allowed
+	MethodCommand(const MethodCommand&);
+	MethodCommand& operator=(const MethodCommand&);
+
+	Proc proc_;
+};
+
+#endif
diff --git a/src/Desktop/MetviewService.cc b/src/Desktop/MetviewService.cc
new file mode 100644
index 0000000..ba0413a
--- /dev/null
+++ b/src/Desktop/MetviewService.cc
@@ -0,0 +1,26 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MetviewService.h"
+#include "MetviewTask.h"
+
+MetviewService::MetviewService(const string& name):
+	Service(name)
+{
+}
+
+MetviewService::~MetviewService()
+{
+}
+
+Task* MetviewService::task(const Action& action,IconObject* o)
+{
+	return new MetviewTask(name_,action,o);
+}
+
diff --git a/src/Desktop/MetviewService.h b/src/Desktop/MetviewService.h
new file mode 100644
index 0000000..2392d7c
--- /dev/null
+++ b/src/Desktop/MetviewService.h
@@ -0,0 +1,38 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File MetviewService.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef MetviewService_H
+#define MetviewService_H
+
+#include "Service.h"
+
+class Task;
+class IconObject;
+
+class MetviewService : public Service 
+{
+public:
+	MetviewService(const string&);
+	virtual ~MetviewService(); 
+
+private:
+	// No copy allowed
+	MetviewService(const MetviewService&);
+	MetviewService& operator=(const MetviewService&);
+
+	virtual Task* task(const Action&,IconObject*);
+
+};
+
+inline void destroy(MetviewService**) {}
+
+#endif
diff --git a/src/Desktop/MetviewTask.cc b/src/Desktop/MetviewTask.cc
new file mode 100644
index 0000000..044a6dc
--- /dev/null
+++ b/src/Desktop/MetviewTask.cc
@@ -0,0 +1,146 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Metview.h"
+
+#include "MetviewTask.h"
+#include "IconObject.h"
+#include "Log.h"
+//#include "Editor.h"
+#include "Request.h"
+#include "Dependancy.h"
+#include "IconFactory.h"
+#include "IconClass.h"
+
+//=================================================================
+
+MetviewTask::MetviewTask(const string& service,const Action& action,IconObject* o):
+	action_(action),
+	object_(o),
+	service_(service),
+	waiting_(0),
+	error_(false)
+{
+}
+
+MetviewTask::~MetviewTask()
+{
+	cout << "MetviewTask::~MetviewTask " << *object_ << endl;
+}
+
+void MetviewTask::start()
+{
+	const set<DependancyH>& dep = object_->dependancies();
+
+	Action action("prepare","*");
+
+	for(set<DependancyH>::const_iterator j = dep.begin(); j != dep.end(); ++j)
+	{
+		Task* t = (*j)->action(action);
+		if(t) {
+			tasks_[t] = *j;
+			waiting_++;
+			t->add(this);
+		}
+
+	}
+
+	check();
+
+}
+
+void MetviewTask::check()
+{
+	if(waiting_) 
+		return;
+
+	if(error_)
+	{
+		Task::failure();
+		return;
+	}
+
+	MvRequest r   = object_->fullRequest();
+	const char* null = 0;
+
+	if(null == r("_NAME"))    r("_NAME")    = object_->fullName().c_str();
+	if(null == r("_CLASS"))   r("_CLASS")   = object_->className().c_str();
+	if(null == r("_ACTION"))  r("_ACTION")  = action_.name().c_str();
+	if(null == r("_SERVICE")) r("_SERVICE") = service_.c_str();
+
+	// Add extra information from the dropped target object
+	if ( context_ )
+		r("_CONTEXT") = context_;
+
+	cout << " ---> send " << *this << endl;
+	r.print();
+
+	callService(service_,r);
+
+	cout << " <--- send " << *this << endl;
+}
+
+void MetviewTask::progress(const Request& r)
+{
+}
+
+
+
+void MetviewTask::reply(const Request& r,int err)
+{
+	if(err) 
+		Task::failure();
+	else {
+		cout << " ---> reply " << *this << endl;
+		r.print();
+		cout << " <--- reply " << *this << endl;
+
+		if(r) {
+			IconObjectH o = IconFactory::createTemporary(object_,r);
+			TaskH       t = o->action(action_);
+		 }
+		
+		Task::success(r);
+	}
+}
+
+void MetviewTask::message(const string& s)
+{
+	Log::info(object_) << s << endl;
+}
+
+void MetviewTask::success(Task* t,const Request& r)
+{
+	cout << "MetviewTask::success " << *t << endl;
+	tasks_[t]->success(r);
+	waiting_--;
+	check();
+}
+
+void MetviewTask::failure(Task* t)
+{
+	cout << "MetviewTask::failure " << *t << endl;
+	error_ = true;
+	tasks_[t]->failure();
+	waiting_--;
+	check();
+}
+
+void MetviewTask::print(ostream& s) const
+{
+	s << "MetviewTask[" 
+	  << service_ 
+	  << "," 
+      << action_.name() 
+	  << ","  
+	  << action_.mode() 
+	  << ","
+      << *object_ 
+	  << "]";
+}
diff --git a/src/Desktop/MetviewTask.h b/src/Desktop/MetviewTask.h
new file mode 100644
index 0000000..8451a57
--- /dev/null
+++ b/src/Desktop/MetviewTask.h
@@ -0,0 +1,71 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File MetviewTask.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef MetviewTask_H
+#define MetviewTask_H
+
+#include "Task.h"
+#include "Action.h"
+#include "ReplyObserver.h"
+
+#include "TaskObserver.h"
+#include "IconObject.h"
+#include "Dependancy.h"
+#include "Request.h"
+
+class MetviewTask : public Task, public ReplyObserver, public TaskObserver 
+{
+public:
+	MetviewTask(const string&,const Action&,IconObject*);
+	virtual ~MetviewTask();
+	
+	void addContext (const Request& req) { context_ = req; }
+
+protected:
+	 void print(ostream&) const;
+
+private:
+	// No copy allowed
+	MetviewTask(const MetviewTask&);
+	MetviewTask& operator=(const MetviewTask&);
+
+	void check();
+
+	string      service_;
+	Action      action_;
+	IconObjectH object_;
+	bool        error_;
+	int         waiting_;
+	Request     context_;
+
+	typedef map<TaskH,DependancyH> Map;
+	Map tasks_;
+
+	// -- Overridden methods
+
+	// From Task
+	virtual void start();
+
+	// From ReplyObserver
+	virtual void reply(const Request&,int);
+	virtual void progress(const Request&);
+	virtual void message(const string&);
+
+	// From TaskObserver
+	virtual void success(Task*,const Request&);
+	virtual void failure(Task*);
+
+};
+
+inline void destroy(MetviewTask**) {}
+
+#endif
diff --git a/src/Desktop/MvMainQtBrowser.cc b/src/Desktop/MvMainQtBrowser.cc
new file mode 100644
index 0000000..206a333
--- /dev/null
+++ b/src/Desktop/MvMainQtBrowser.cc
@@ -0,0 +1,37 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <QApplication>
+#include <QPixmap>
+#include <QSplashScreen>
+
+#include "MvQDesktop.h"
+
+int main(int argc, char **argv)
+{
+	MvQDesktop *app= new MvQDesktop(argc,argv,"Desktop");
+	
+	//Initialise resorces from a static library (libMvQtGui)
+	Q_INIT_RESOURCE(edit);
+	
+	QPixmap pixmap(":/desktop/splash_screen.png");
+     	QSplashScreen splash(pixmap);
+	splash.showMessage("Loading resources ...",Qt::AlignBottom | Qt::AlignLeft);
+     	splash.show();
+     	app->processEvents();
+     
+     	app->init();
+	
+     	//splash.finish(&window);
+	splash.close();
+	
+	app->showBrowsers();
+
+	return app->exec();
+}
diff --git a/src/Desktop/MvQ.cc b/src/Desktop/MvQ.cc
new file mode 100644
index 0000000..c19f388
--- /dev/null
+++ b/src/Desktop/MvQ.cc
@@ -0,0 +1,30 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQ.h"
+
+#include <QMessageBox>
+#include "Folder.h"
+
+namespace MvQ
+{
+  
+void emptyWasteBasket()
+{
+	if(QMessageBox::warning(0,QObject::tr("Empty Wastebin"),
+	       QObject::tr("Do you really want to empty the Wastebin? All items will be deleted!"),
+		QMessageBox::Yes | QMessageBox::Cancel,QMessageBox::Cancel) == QMessageBox::Yes)
+	{
+	
+		Folder *wbo=Folder::folder("wastebasket");
+		if(wbo) wbo->empty();	
+	}
+}
+
+}
\ No newline at end of file
diff --git a/src/Desktop/MvQ.h b/src/Desktop/MvQ.h
new file mode 100644
index 0000000..7e8e40a
--- /dev/null
+++ b/src/Desktop/MvQ.h
@@ -0,0 +1,21 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 _MvQ_H
+#define _MvQ_H
+
+namespace MvQ
+{
+	enum FolderViewMode {NoViewMode,IconViewMode,DetailedViewMode};
+	enum GridSortMode {GridSortByName,GridSortBySize,GridSortByType};
+	
+	void emptyWasteBasket();
+}
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQBookmarks.cc b/src/Desktop/MvQBookmarks.cc
new file mode 100644
index 0000000..d3596f7
--- /dev/null
+++ b/src/Desktop/MvQBookmarks.cc
@@ -0,0 +1,922 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 <QAction>
+#include <QApplication>
+#include <QDebug>
+#include <QDialogButtonBox>
+#include <QGridLayout>
+#include <QMap>
+
+#include <QLabel>
+#include <QLineEdit>
+#include <QListView>
+#include <QMenu>
+#include <QMessageBox>
+#include <QPair>
+#include <QPlainTextEdit>
+#include <QToolButton>
+#include <QVBoxLayout>
+
+#include "MvQBookmarks.h"
+
+#include "MvQ.h"
+#include "MvQContextMenu.h"
+#include "MvQFileBrowser.h"
+#include "MvQKeyManager.h"
+#include "MvQKeyModel.h"
+#include "MvQIconProvider.h"
+
+#include "Folder.h"
+#include "IconClass.h"
+#include "IconFactory.h"
+#include "IconObject.h"
+#include "MvKeyProfile.h"
+#include "Path.h"
+ 
+MvQKeyManager* MvQBookmarks::manager_=0;
+MvQBookmarksModel* MvQBookmarks::model_=0;
+MvKeyProfile* MvQBookmarks::prof_=0;
+
+//=============================================
+// 
+// MvQBookmarksModel
+//
+//=============================================
+
+QVariant MvQBookmarksModel::data( const QModelIndex& index, int role ) const
+{
+	if( !index.isValid() || index.column() !=0 ||  
+	    (role != Qt::DisplayRole && role != Qt::ToolTipRole  && 
+	     role != Qt::DecorationRole))
+        {			
+		return QVariant();
+	}
+	
+	MvKey  *key=profile_->at(index.row());	
+	if(role == Qt::DisplayRole)
+	{
+		 return QString::fromStdString(key->shortName()); 
+	}
+	else if(role == Qt::ToolTipRole)
+	{
+	  
+	  	string cntStr=key->metaData("path_count");
+		if(!cntStr.empty())
+			return "Bookmark for a <b>group of folders</b>";
+		else				  
+		{
+		  	//Check if path exist
+		 	Path p=Folder::top()->path();
+			if(p.add(key->name()).exists())
+		  		return QString::fromStdString(key->name());
+			else
+			  	return "<b>Folder does not exsist!</b><br>" + QString::fromStdString(key->name());
+		}	
+			
+	}
+	else if(role == Qt::DecorationRole)
+	{	
+		return MvQIconProvider::bookmarkPixmap(key->name(),24);
+	}	
+	  
+	return  QVariant();
+}
+
+//================================================
+// 
+//  MvQBookmarks
+//
+//================================================
+
+MvQBookmarks::MvQBookmarks(QWidget *parent) : QObject(parent)
+{
+} 
+
+//Static
+void MvQBookmarks::init()
+{	
+	if(manager_)
+	  	return;
+  
+  	manager_=new MvQKeyManager(MvQKeyManager::BookmarkType);
+	manager_->loadProfiles();
+	
+	prof_=0;
+	if(manager_->data().size() > 0)
+	{  
+		prof_=manager_->data().at(0);
+	}
+	else
+	{
+	  	prof_=new MvKeyProfile("custom");
+		manager_->addProfile(prof_);
+	}	
+
+	model_=new MvQBookmarksModel(prof_);
+
+}
+
+//Static
+MvQContextItemSet* MvQBookmarks::cmSet()
+{
+	static MvQContextItemSet cm("Bookmarks");
+	return &cm;
+}
+
+
+/*void MvQBookmarks::setupContextMenu()
+{  
+  	if(cmIconItems_.count() != 0)
+	  	return;
+	
+	QString wbPath;
+	IconObject *wbo=Folder::folder("wastebasket");
+	if(wbo) wbPath=QString::fromStdString(wbo->fullName());
+	
+	static MvQContextAction     	openBk(tr("Open"),"","open","","!FOLDERGROUP");
+	static MvQContextAction     	openInTab(tr("Open in new tab"),"","openInTab","","!FOLDERGROUP");
+  	static MvQContextAction		openInWin(tr("Open in new window"),"","openInWin","","!FOLDERGROUP");
+	static MvQContextAction		loadTabs(tr("Open tabs"),"","openGroup","","FOLDERGROUP");
+	static MvQContextAction		loadTabsInWin(tr("Open tabs in new window"),"","openGroupInWin","","FOLDERGROUP");
+        static MvQContextSeparator 	sep;
+	static MvQContextAction 	editEntry(tr("&Edit"),tr("Ctrl+E"),"editEntry",":/desktop/edit.svg");
+	static MvQContextAction 	dupEntry(tr("&Duplicate"),tr("Ctrl+D"),"duplicateEntry",":/desktop/duplicate.svg");
+	static MvQContextAction 	removeEntry(tr("&Remove"),tr("Del"),"removeEntry",":/desktop/remove.svg");
+	static MvQContextSeparator 	sep1;
+	static MvQContextAction 	empty(tr("Empty &wastebin"),tr("Ctrl+W"),"empty","",wbPath);
+		
+	cmIconItems_ << &openBk << &openInTab << &openInWin << &loadTabs << &loadTabsInWin <<
+	                &sep <<
+	                &editEntry << &dupEntry << &removeEntry << 
+	                &sep1 << 
+	                ∅
+		
+	static MvQContextAction 	addEntry("Bookmark this folder","","addEntry",":/desktop/add_bookmark.svg");
+	static MvQContextAction 	addTab("&Bookmark these tabs","","addTabs",":/desktop/add_bookmark_group.svg");
+	static MvQContextSeparator 	sepDesk;
+	static MvQContextAction 	addBookmark("New bookmark","","addBookmark",":/desktop/add.svg");
+	 
+	cmDesktopItems_ << &addEntry << &addTab << &sepDesk << &addBookmark;
+}*/
+
+//Static
+void MvQBookmarks::save()
+{
+	manager_->saveProfiles();
+}
+
+void MvQBookmarks::defaultCommand(const QModelIndex &index)
+{
+ 	MvKeyProfile *prof=model_->profile();
+	MvKey *key=0;
+	if(prof && index.row() <= static_cast<int>(prof->size()-1))
+	{
+	  	key=prof->at(index.row());
+	}
+	else 
+	  	return;
+	
+	if(!key)
+	  	return;
+	
+	QString fullName=QString::fromStdString(key->name());
+	if(!isFolderGroup(key))
+		emit openInBrowser(fullName);
+	else
+	  	emit openGroupInTabs(getPathsFromKey(key));
+}	
+
+void MvQBookmarks::command(QString name,const QModelIndex &index)
+{
+	if(!index.isValid())
+		return;
+	
+	MvKeyProfile *prof=model_->profile();
+	MvKey *key=0;
+	if(prof && index.row() <= static_cast<int>(prof->size()-1))
+	{
+	  	key=prof->at(index.row());
+	}
+	else 
+	  	return;
+	
+	if(!key)
+	  	return;
+	
+	QString fullName=QString::fromStdString(key->name());
+		
+	if(name == "open" && !isFolderGroup(key))
+	{
+	  	emit openInBrowser(fullName);
+	}
+	else if(name == "openInTab" && !isFolderGroup(key))
+	{
+	  	emit openInTab(fullName);
+	}
+	else if(name == "openInWin" && !isFolderGroup(key))
+	{
+	  	emit openInWin(fullName);
+	}
+	else if(name == "editEntry")
+	{
+	  	editItem(index);
+	}
+	else if(name == "duplicateEntry")
+	{
+	  	duplicateItem(index);
+	}
+	else if(name == "removeEntry")
+	{
+	  	deleteItem(index);
+	}
+	else if(name == "openGroup")
+	{
+	  	emit openGroupInTabs(getPathsFromKey(key));
+	}
+	else if (name == "openGroupInWin")
+	{	  
+		emit openGroupInWin(getPathsFromKey(key));
+	}
+	else if (name == "empty")
+	{	  	
+	  	MvQ::emptyWasteBasket();	
+	}
+}
+
+void MvQBookmarks::command(QString name)
+{
+	if(name == "addEntry")
+	{
+	  	emit bookmarkFolder();
+	}	
+	else if(name == "addTabs")
+	{
+	  	emit  bookmarkTabs();
+	}
+	else if(name == "addBookmark")
+	{
+		addItem(0); 
+	}		
+}
+
+//Static
+void MvQBookmarks::addItem(IconObject *obj)
+{
+	if(obj && !obj->isFolder())  	
+  		return;
+	
+	MvKey *key=new MvKey;		
+  	if(obj)
+	{
+	  	key->setName(obj->fullName());
+		key->setShortName(obj->name());
+	}
+			
+	MvQBookmarksDialog dialog(key,tr("Add bookmark"));
+
+	if(dialog.exec() == QDialog::Accepted && 
+	  !key->name().empty() &&  !key->shortName().empty())
+	{
+		model_->profileIsAboutToChange();
+		prof_->addKey(key);
+		model_->setKeyProfile(prof_);
+	}
+	else
+	{
+	  	delete key;
+	}
+}  
+
+//Static
+void MvQBookmarks::addItem(QString path)
+{
+	if(path.isEmpty())
+	  	return;
+	
+	Path p=Folder::top()->path();
+	Path realPath=p.add(path.toStdString());
+	
+	if(!realPath.exists())
+		return;
+	
+	MvKey *key=new MvKey;		
+	key->setName(path.toStdString());
+	key->setShortName(realPath.name());
+			
+	MvQBookmarksDialog dialog(key,tr("Add bookmark"));
+
+	if(dialog.exec() == QDialog::Accepted && 
+	  !key->name().empty() &&  !key->shortName().empty())
+	{
+		model_->profileIsAboutToChange();
+		prof_->addKey(key);
+		model_->setKeyProfile(prof_);
+	}
+	else
+	{
+	  	delete key;
+	}
+}  
+
+//Static
+void MvQBookmarks::addItem(QList<Folder*> folderLst)
+{
+	MvKey *key=new MvKey;	
+	//Foldergroup bookmarks' name maust be FOLDERGROUP !!!
+  	key->setName("FOLDERGROUP");
+	key->setShortName("Tabs");
+	
+	//Set data for the paths
+	key->setMetaData("path_count",QString::number(folderLst.count()).toStdString());	
+	for(int i=0; i < folderLst.count(); i++)
+	{
+	  	QString id;
+                id.sprintf("path_%02d",i);
+	  	key->setMetaData(id.toStdString(),folderLst.at(i)->fullName());
+	}	
+	
+	MvQBookmarksGroupDialog dialog(key,tr("Add new bookmark group"));
+
+	if(dialog.exec() == QDialog::Accepted && 
+	  !key->name().empty() &&  !key->shortName().empty())
+	{
+		model_->profileIsAboutToChange();
+		prof_->addKey(key);
+		model_->setKeyProfile(prof_);
+	}
+	else
+	{
+	  	delete key;
+	}
+}  
+
+void MvQBookmarks::editItem(const QModelIndex& index)
+{
+	MvKeyProfile *prof=model_->profile();
+	MvKey *key=0;
+	if(prof && index.isValid() && index.row() <= static_cast<int>(prof->size()-1))
+	{
+	  	key=prof->at(index.row());	
+	}
+	else
+	  	return;
+		
+	bool accepted=false; 
+	if(key->name() == "FOLDERGROUP" && !key->metaData("path_count").empty())
+	{
+		MvQBookmarksGroupDialog dialog(key,tr("Edit bookmark group"));
+		if(dialog.exec()  == QDialog::Accepted)
+		{
+			accepted=true;	
+		}
+	}
+	else
+	{  
+		MvQBookmarksDialog dialog(key,tr("Edit bookmark"));
+		if(dialog.exec()  == QDialog::Accepted)	
+		{
+			 accepted=true;
+		}
+	}	
+			
+	if(accepted)	
+	{
+		//Not too efficient
+		model_->profileIsAboutToChange();
+		model_->setKeyProfile(prof);
+	}
+}  
+
+void MvQBookmarks::duplicateItem(const QModelIndex& index)
+{
+	MvKeyProfile *prof=model_->profile();
+	MvKey *key=0;
+	if(prof && index.isValid() && index.row() <= static_cast<int>(prof->size()-1))
+	{
+	  	key=prof->at(index.row());	
+	}
+	else
+	  	return;
+		
+	MvKey *dupKey=key->clone();		
+	if(!dupKey->shortName().empty())
+	{
+		model_->profileIsAboutToChange();
+		prof->addKey(dupKey);
+		model_->setKeyProfile(prof);
+	}
+}  
+
+void MvQBookmarks::deleteItem(const QModelIndex& index)
+{
+	MvKeyProfile *prof=model_->profile();
+	if(prof==0 || !index.isValid() )
+		return;	
+	
+	MvKey *key=prof->at(index.row());
+	
+	QString str=tr("Are you sure that you want to delete entry <b>");
+	str+=QString::fromStdString(key->shortName());
+	str+="</b>?";
+
+ 	QMessageBox msgBox;
+	msgBox.setWindowTitle(tr("Delete bookmark"));
+	msgBox.setText(str);
+ 	msgBox.setIcon(QMessageBox::Warning);
+	msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel);
+	msgBox.setDefaultButton(QMessageBox::Cancel);
+	
+	int ret=msgBox.exec();
+
+	switch (ret) 
+	{
+   	case QMessageBox::Yes:
+       	{	
+		model_->profileIsAboutToChange();
+		prof->deleteKey(index.row());
+		model_->setKeyProfile(prof);
+	}
+      	break;
+   	case QMessageBox::Cancel:
+       	// Cancel was clicked
+       	break;
+   	default:
+       	// should never be reached
+      	 break;
+	}	
+}
+
+MvKey* MvQBookmarks::getKey(const QModelIndex& index)
+{
+	if(index.row() >=0)
+	{		
+		MvKeyProfile *prof=model_->profile();
+		if(prof && index.row() <= static_cast<int>(prof->size()-1))
+		{
+	  		return prof->at(index.row());	
+		}
+	}
+	
+	return 0;
+}  
+
+QString  MvQBookmarks::getPath(const QModelIndex& index)
+{
+	MvKey *key=getKey(index);
+	return (key)?QString::fromStdString(key->name()):QString();
+}	
+	
+QStringList MvQBookmarks::getPathsFromKey(MvKey* key)
+{
+	QStringList lst;
+	
+	if(!key)
+		return lst;
+	
+	string cntStr=key->metaData("path_count");
+	if(!cntStr.empty())
+	{			  	
+	  	int cnt=QString::fromStdString(cntStr).toInt();	  	
+	  	for(int i=0; i < cnt; i++)
+		{
+		  	QString id;
+                	id.sprintf("path_%02d",i);
+	  		string val=key->metaData(id.toStdString()); 
+	  		if(!val.empty())
+				lst << QString::fromStdString(val);							
+		}
+	}
+	
+	return lst;
+}
+
+bool MvQBookmarks::isFolderGroup(MvKey *key)
+{
+  	if(!key)
+	  	return false;
+		
+	return (key->name() == "FOLDERGROUP" && key->metaData("path_count").empty() == false);
+}	
+
+//================================================
+// 
+//  MvQBookmarksMenu
+//
+//================================================
+
+MvQBookmarksMenu::MvQBookmarksMenu(QWidget *parent,QMenu *menu) : 
+	MvQBookmarks(parent),
+	menu_(menu)
+{
+	actionFolder_ = new QAction(menu_);
+	actionFolder_->setIcon(QPixmap(":/desktop/add_bookmark.svg")); 
+	actionFolder_->setText(tr("Bookmark &folder"));
+        actionFolder_->setShortcut(tr("Ctrl+D"));
+	menu_->addAction(actionFolder_);
+
+	actionTabs_ = new QAction(menu_);
+	actionTabs_->setIcon(QPixmap(":/desktop/add_bookmark_group.svg")); 
+	actionTabs_->setText(tr("Bookmark &tabs"));
+        actionTabs_->setShortcut(tr("Ctrl+T"));
+	menu_->addAction(actionTabs_);
+
+	QAction *sep1=new QAction(this);
+	sep1->setSeparator(true);
+	menu_->addAction(sep1);
+	
+	actionAdd_ = new QAction(menu_);
+	actionAdd_->setIcon(QPixmap(":/desktop/add.svg")); 
+	actionAdd_->setText(tr("New bookmark"));
+        //addAction->setShortcut(tr("Ctrl+T"));
+	menu_->addAction(actionAdd_);
+
+	QAction *sep=new QAction(this);
+	sep->setSeparator(true);
+	menu_->addAction(sep);
+	
+	//Populate
+	slotUpdate();
+	
+  	connect(model_,SIGNAL(modelReset()),
+		this,SLOT(slotUpdate()));
+
+	connect(menu_,SIGNAL(triggered(QAction*)),
+		this,SLOT(slotMenu(QAction*))); 
+		
+	//Context menu 
+    	menu_->setContextMenuPolicy(Qt::CustomContextMenu);
+	
+	connect(menu_,SIGNAL(customContextMenuRequested(const QPoint &)),
+                this, SLOT(slotContextMenu(const QPoint &)));	  			
+}  
+			
+void MvQBookmarksMenu::slotContextMenu(const QPoint& pos)
+{
+	MvQContextItemSet *cms=cmSet();
+	if(!cms) return;
+	
+	QAction *ac=menu_->actionAt(pos);
+	QString path="path=" + getPath(ac);
+
+	if(!path.isEmpty())
+	{
+		QString selection=MvQContextMenu::instance()->exec(cms->icon(),menu_->mapToGlobal(pos),menu_,
+								   path);  		
+		if(!selection.isEmpty()) 
+		{
+		  	QModelIndex index=getIndex(ac);
+			command(selection,index);
+		}	
+	}	
+}	
+void MvQBookmarksMenu::slotUpdate()
+{
+	QList<QAction*> lst=menu_->actions();
+	
+	int cnt=model_->rowCount();
+	
+	for(int i=0; i < cnt; i++)
+	{
+	  	QAction *action;
+		if(lst.count() <= i+5)
+		{  
+			action=new QAction(menu_);
+			menu_->addAction(action);
+		}
+		else
+		{
+		  	action=lst.at(i+5);
+		}		
+			
+  		QModelIndex index=model_->index(i,0);
+	  	QString name=model_->data(index,Qt::DisplayRole).toString();
+	  	QString tooltip=model_->data(index,Qt::ToolTipRole).toString();
+	  	QPixmap pix=model_->data(index,Qt::DecorationRole).value<QPixmap>();
+		
+		action->setText(name);
+		action->setToolTip(tooltip);
+		action->setIcon(pix);
+		action->setData(i+1);
+	}
+	
+	while(lst.count() > cnt+5)
+	{
+	  	QAction *action=lst.takeLast();	
+		qDebug() << action->text();
+	  	menu_->removeAction(action);		
+		delete action;
+	}	  
+}  
+
+void MvQBookmarksMenu::slotMenu(QAction* ac)
+{	 
+	if(ac == actionFolder_)
+	  	command("addEntry");	
+  	else if(ac == actionTabs_)
+	  	command("addTabs");
+	else if( ac == actionAdd_)
+	  	command("addBookmark");
+  	else
+	  	defaultCommand(getIndex(ac));
+}  
+  
+QString  MvQBookmarksMenu::getPath(QAction* ac)
+{
+	if(ac && !ac->isSeparator())
+	{
+		QModelIndex index=getIndex(ac);
+		return MvQBookmarks::getPath(index);
+	}
+	
+	return QString();
+}  
+  
+MvKey* MvQBookmarksMenu::getKey(QAction* ac)
+{
+	if(ac && !ac->isSeparator())
+	{
+		QModelIndex index=getIndex(ac);
+		return MvQBookmarks::getKey(index);
+	}
+	
+	return 0;
+}  
+  
+QModelIndex MvQBookmarksMenu::getIndex(QAction *ac)
+{
+ 	if(ac && !ac->isSeparator())
+	{
+		int  i=ac->data().toInt()-1;
+		return model_->index(i,0);
+	} 
+	
+	return QModelIndex();
+}  
+  
+//================================================
+// 
+//  MvQBookmarksPanel
+//
+//================================================
+
+MvQBookmarksPanel::MvQBookmarksPanel(QWidget *parent) : 
+      MvQBookmarks(parent)
+{
+	widget_=new QWidget(parent);
+  
+  	QVBoxLayout *vb=new QVBoxLayout;
+	vb->setSpacing(0); 
+	vb->setContentsMargins(1,1,1,1);
+	widget_->setLayout(vb);
+	
+	QHBoxLayout *hb=new QHBoxLayout;
+	vb->addLayout(hb);
+	
+	hb->addSpacing(4);
+	
+	QLabel *label=new QLabel("<b>" + tr("Bookmarks") + "</b>",widget_);
+	hb->addWidget(label);
+	
+	QToolButton *addTb=new QToolButton(widget_);
+	addTb->setAutoRaise(true);	
+	addTb->setIcon(QPixmap(":/desktop/add_bookmark.svg")); 
+	addTb->setToolTip(tr("Add folder to bookmarks"));
+	hb->addWidget(addTb);
+	
+	connect(addTb,SIGNAL(clicked(bool)),
+		this,SLOT(slotAddItem(bool)));
+		
+	view_=new QListView(widget_);
+	vb->addWidget(view_);
+	
+	view_->setModel(model_);	
+	view_->setDragEnabled(true);
+ 	view_->setAcceptDrops(true);
+	
+	view_->setContextMenuPolicy(Qt::CustomContextMenu);
+	//view_->setProperty("mvStyle","bookmarks");
+	
+
+	connect(view_,SIGNAL(doubleClicked(const QModelIndex&)),
+		this,SLOT(slotDoubleClickItem(const QModelIndex&)));
+	
+	//Context menu 
+    	connect(view_,SIGNAL(customContextMenuRequested(const QPoint &)),
+                this, SLOT(slotContextMenu(const QPoint &))); 
+}
+
+void MvQBookmarksPanel::slotDoubleClickItem(const QModelIndex& index)
+{
+	defaultCommand(index);
+}  
+
+void MvQBookmarksPanel::slotContextMenu(const QPoint& pos)
+{
+	MvQContextItemSet* cms=cmSet();
+	if(!cms) return;
+	
+	QModelIndex index=view_->indexAt(pos);
+  
+	//Desktop action
+	if(!index.isValid())
+	{  
+		QString selection=MvQContextMenu::instance()->exec(cms->desktop(),view_->mapToGlobal(pos),view_);   	
+		if(!selection.isEmpty()) 
+		  	command(selection);  
+	}
+	
+	//Icon Actions
+	else if(model_->profile() && index.isValid())
+	{		
+	  	QString path="path=" + getPath(index);
+	  	QString selection=MvQContextMenu::instance()->exec(cms->icon(),view_->mapToGlobal(pos),view_,
+				    path);  
+		
+		if(!selection.isEmpty()) 
+		  	command(selection,index);
+	}	
+}	
+
+void MvQBookmarksPanel::slotAddItem(bool)
+{
+  	command("addEntry");
+}	
+
+//================================================
+// 
+//  MvQBookmarksDialog
+//
+//================================================
+
+MvQBookmarksDialog::MvQBookmarksDialog(MvKey* key,QString title,QWidget *parent) : 
+    QDialog(parent), 
+    key_(key)
+{
+	setWindowTitle(title);
+  	
+  	QVBoxLayout* vb=new QVBoxLayout;
+	setLayout(vb);
+		
+	QGridLayout* grid=new QGridLayout;
+	vb->addLayout(grid);
+	
+	QLabel *label;
+	
+	label=new QLabel(tr("&Label:"));
+	labelEdit_=new QLineEdit;
+	label->setBuddy(labelEdit_);
+	if(key_)
+	{
+		labelEdit_->setText(QString::fromStdString(key_->shortName()));
+	}
+	
+	grid->addWidget(label,0,0);
+	grid->addWidget(labelEdit_,0,1);
+	
+	label=new QLabel(tr("&Path:"));
+	pathEdit_=new QLineEdit;
+	label->setBuddy(pathEdit_);
+	if(key_)
+	{
+	  	pathEdit_->setText(QString::fromStdString(key_->name()));
+	}
+	grid->addWidget(label,1,0);
+	grid->addWidget(pathEdit_,1,1);
+	
+	// Buttonbox
+	QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
+                                      | QDialogButtonBox::Cancel);
+ 
+	connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
+     	connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
+		
+	//Try to find the optimal dialog width
+	QFont font;
+	QFontMetrics fm(font);
+	setMinimumWidth(fm.width(tr("Label"))+fm.width(pathEdit_->text())+100);
+	
+	vb->addWidget(buttonBox);
+}  
+
+void MvQBookmarksDialog::accept()
+{
+  	if(key_)
+	{
+	  	key_->setName(pathEdit_->text().toStdString());
+		key_->setShortName(labelEdit_->text().toStdString());
+	}
+	QDialog::accept();
+}	
+
+//================================================
+// 
+//  MvQBookmarksGroupDialog
+//
+//================================================
+
+MvQBookmarksGroupDialog::MvQBookmarksGroupDialog(MvKey* key,QString title,QWidget *parent) : 
+    QDialog(parent), 
+    key_(key)
+{
+	setWindowTitle(title);
+  	
+  	QVBoxLayout* vb=new QVBoxLayout;
+	setLayout(vb);
+		
+	QGridLayout* grid=new QGridLayout;
+	vb->addLayout(grid);
+	
+	QLabel *label;
+	
+	label=new QLabel(tr("&Label:"));
+	labelEdit_=new QLineEdit;
+	label->setBuddy(labelEdit_);
+	if(key_)
+	{
+		labelEdit_->setText(QString::fromStdString(key_->shortName()));
+	}
+	
+	grid->addWidget(label,0,0);
+	grid->addWidget(labelEdit_,0,1);
+	
+	label=new QLabel(tr("&Paths:"));
+	pathEdit_=new QPlainTextEdit;
+	label->setBuddy(pathEdit_);
+	pathEdit_->setPlainText(getPathsFromKey());
+	 
+	grid->addWidget(label,1,0);
+	grid->addWidget(pathEdit_,1,1);
+	
+	// Buttonbox
+	QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
+                                      | QDialogButtonBox::Cancel);
+ 
+	connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
+     	connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
+		
+	//Try to find the optimal dialog width
+	QFont font;
+	QFontMetrics fm(font);
+	//setMinimumWidth(fm.width(tr("Label"))+fm.width(pathEdit_->text())+100);
+	
+	vb->addWidget(buttonBox);
+}  
+
+QString MvQBookmarksGroupDialog::getPathsFromKey()
+{
+	QString str;
+	
+	if(!key_)
+		return str;
+	
+	string cntStr=key_->metaData("path_count");
+	if(!cntStr.empty())
+	{			  	
+	  	int cnt=QString::fromStdString(cntStr).toInt();	  	
+	  	for(int i=0; i < cnt; i++)
+		{
+		  	QString id;
+                	id.sprintf("path_%02d",i);
+	  		string val=key_->metaData(id.toStdString()); 
+	  		if(!val.empty())
+				str+=QString::fromStdString(val)+"\n";							
+		}
+	}
+	
+	return str;
+}
+
+void MvQBookmarksGroupDialog::accept()
+{
+  	if(key_)
+	{
+	  	//key_->setName(labelEdit_->text().toStdString());
+		key_->setShortName(labelEdit_->text().toStdString());
+		
+		//Figure out paths and add it to the key's metadata
+		key_->clearMetaData();		
+		QStringList lst=pathEdit_->toPlainText().split("\n");
+		int cnt=0;
+		foreach(QString s,lst)
+		{
+		  	QString p=s.simplified();
+			if(!p.isEmpty())
+			{
+				QString id;
+                		id.sprintf("path_%02d",cnt);
+				key_->setMetaData(id.toStdString(),p.toStdString());
+				cnt++;
+			}
+		}
+		key_->setMetaData("path_count",QString::number(cnt).toStdString());
+				
+	}
+	QDialog::accept();
+}	
diff --git a/src/Desktop/MvQBookmarks.h b/src/Desktop/MvQBookmarks.h
new file mode 100644
index 0000000..cfd144c
--- /dev/null
+++ b/src/Desktop/MvQBookmarks.h
@@ -0,0 +1,167 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQBookmarks_H
+#define MvQBookmarks_H
+
+#include <QDialog>
+#include <QMap>
+
+#include "MvQKeyModel.h"
+
+class QAction;
+class QLineEdit;
+class QListView;
+class QMenu;
+class QModelIndex;
+class QPlainTextEdit;
+
+class MvQContextItemSet;
+class MvQKeyManager;
+class MvQKeyModel;
+
+class Folder;
+class IconObject;
+class MvKey;
+class MvKeyProfile;
+
+class MvQBookmarksPanel;
+
+class MvQBookmarksModel : public MvQKeyModel
+{
+public:
+    	MvQBookmarksModel(MvKeyProfile* prof) : MvQKeyModel(prof,ShortNameMode) {};  
+	QVariant data (const QModelIndex& , int role = Qt::DisplayRole ) const;
+};
+
+
+class MvQBookmarks : public QObject
+{
+Q_OBJECT
+  
+public:
+    	MvQBookmarks(QWidget*);
+  	~MvQBookmarks() {};
+	
+	static void init();
+	static void save();
+	static void addItem(IconObject*);
+	static void addItem(QString);
+	static void addItem(QList<Folder*>);
+	
+signals:
+	void openInBrowser(QString);
+	void openInTab(QString);
+	void openInWin(QString);
+	void openGroupInTabs(QStringList);
+	void openGroupInWin(QStringList);
+	void bookmarkFolder();
+	void bookmarkTabs();
+		
+protected:
+	static MvQContextItemSet* cmSet();
+	void defaultCommand(const QModelIndex&);
+	void command(QString);
+	void command(QString,const QModelIndex&);
+	void editItem(const QModelIndex&);
+	void duplicateItem(const QModelIndex&);
+	void deleteItem(const QModelIndex&);
+	
+	MvKey* getKey(const QModelIndex&);
+	QString getPath(const QModelIndex&);		
+	QStringList getPathsFromKey(MvKey*);
+	bool isFolderGroup(MvKey*);
+		
+	static MvQKeyManager*  manager_;
+	static MvQBookmarksModel*    model_;
+	static MvKeyProfile*   prof_;
+};
+
+class MvQBookmarksMenu : public MvQBookmarks
+{  
+  Q_OBJECT  
+  
+public:
+	MvQBookmarksMenu(QWidget*,QMenu*);
+	~MvQBookmarksMenu() {}
+	
+public slots:
+    	void slotUpdate();
+	void slotMenu(QAction*);
+	void slotContextMenu(const QPoint&);
+	
+protected: 	
+	QString getPath(QAction*);
+	MvKey* getKey(QAction*);
+	QModelIndex getIndex(QAction*);
+	
+	QMenu* menu_;
+	QAction* actionFolder_;
+	QAction* actionTabs_;
+	QAction* actionAdd_;
+};
+
+class MvQBookmarksPanel : public MvQBookmarks
+{
+  Q_OBJECT
+
+public:
+    	MvQBookmarksPanel(QWidget*);
+  	~MvQBookmarksPanel() {};
+	
+	QWidget* widget() {return widget_;}
+	
+public slots:
+	void slotDoubleClickItem(const QModelIndex&);
+	void slotContextMenu(const QPoint&);
+	void slotAddItem(bool);
+		
+protected:
+	QWidget*      widget_;
+	QListView*    view_;
+};
+
+
+class MvQBookmarksDialog : public QDialog
+{
+Q_OBJECT
+  
+public:
+    	MvQBookmarksDialog(MvKey*,QString,QWidget *parent=0);
+  	~MvQBookmarksDialog() {};
+
+public slots:
+	void accept();
+  
+protected:
+  	MvKey* key_;
+	QLineEdit *labelEdit_;
+	QLineEdit *pathEdit_;
+};
+
+class MvQBookmarksGroupDialog : public QDialog
+{
+Q_OBJECT
+  
+public:
+    	MvQBookmarksGroupDialog(MvKey*,QString,QWidget *parent=0);
+  	~MvQBookmarksGroupDialog() {};
+
+public slots:
+	void accept();
+  
+protected:
+  	QString getPathsFromKey();
+  	
+  	MvKey* key_;
+	QLineEdit *labelEdit_;
+	QPlainTextEdit *pathEdit_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQBoolLine.cc b/src/Desktop/MvQBoolLine.cc
new file mode 100644
index 0000000..6765a50
--- /dev/null
+++ b/src/Desktop/MvQBoolLine.cc
@@ -0,0 +1,81 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <QDebug>
+#include <QHBoxLayout>
+#include <QRadioButton>
+
+#include "MvQBoolLine.h"
+
+#include "LineFactory.h"
+#include "RequestPanel.h"
+#include "Parameter.h"
+
+MvQBoolLine::MvQBoolLine(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelLine(owner,param) 
+{
+  	radioParent_=new QWidget(parentWidget_);
+	layout_= new QHBoxLayout(parentWidget_);
+	layout_->setSpacing(0); 
+	layout_->setContentsMargins(1,1,1,1);
+	
+	radioParent_->setLayout(layout_);
+	owner_.addWidget(radioParent_,row_,3);
+
+	QString strOnVal="On";
+	QString strOffVal="Off";
+	
+	//Radio buttons
+	radioOn_ = new QRadioButton(strOnVal,radioParent_); 
+	radioOff_= new QRadioButton(strOffVal,radioParent_);
+	layout_->addWidget(radioOn_);
+	layout_->addWidget(radioOff_,1);
+		
+	connect(radioOn_,SIGNAL(toggled(bool)),
+		this,SLOT(slotStatusChanged(bool)));
+}
+
+MvQBoolLine::~MvQBoolLine()
+{
+}
+	
+void MvQBoolLine::refresh(const vector<string>& values)
+{
+	//We need to set both radio buttons because before the event loop
+	//is started the autoexclusive feature does not work!
+  	if(values.size() > 0)
+	{
+		 char c = values[0][1];  //== ON or on
+		 if(c == 'N' || c == 'n')
+		 {		   	
+		 	radioOn_->setChecked(true);
+			if(radioOff_->isChecked())
+				radioOff_->setChecked(false);
+		 }
+		 else
+		 {  
+			radioOn_->setChecked(false);
+			if(!radioOff_->isChecked())
+				radioOff_->setChecked(true);		 
+		 }
+		 
+		 qDebug() << "onoff" << values[0].c_str() << param_.name() << radioOn_->isChecked() <<  radioOff_->isChecked();
+	}	 
+	
+	//changed_ = false;
+}	
+	
+void MvQBoolLine::slotStatusChanged(bool s)
+{	
+  	qDebug() << "radioOn: " << s;
+	
+	owner_.set(param_.name(),(radioOn_->isChecked())?"on":"off");
+}
+
+static LineMaker<MvQBoolLine> maker1("on_off");
diff --git a/src/Desktop/MvQBoolLine.h b/src/Desktop/MvQBoolLine.h
new file mode 100644
index 0000000..467f0c6
--- /dev/null
+++ b/src/Desktop/MvQBoolLine.h
@@ -0,0 +1,46 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQBoolLine_H
+#define MvQBoolLine_H
+
+#include <QString>
+
+#include "MvQRequestPanelLine.h"
+
+class QHBoxLayout;
+class QRadioButton;
+
+class  Request;
+class  RequestPanel;
+
+class MvQBoolLine : public MvQRequestPanelLine
+{
+Q_OBJECT
+
+public:
+	MvQBoolLine(RequestPanel& owner,const Parameter& param);
+	~MvQBoolLine();
+	
+	QString currentValue() {return QString();}
+	void addValue(QString) {}	
+	void refresh(const vector<string>&);
+
+public slots:
+    	void slotStatusChanged(bool);	
+
+protected:
+	 QWidget *radioParent_;
+	 QHBoxLayout* layout_;
+	 QRadioButton* radioOn_; 
+	 QRadioButton* radioOff_;		
+};	
+
+
+#endif
diff --git a/src/Desktop/MvQClassBrowser.cc b/src/Desktop/MvQClassBrowser.cc
new file mode 100644
index 0000000..ef60661
--- /dev/null
+++ b/src/Desktop/MvQClassBrowser.cc
@@ -0,0 +1,230 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQClassBrowser.h"
+
+#include <QAction>
+#include <QApplication>
+#include <QCloseEvent>
+#include <QDialogButtonBox>
+#include <QDebug>
+#include <QHBoxLayout>
+#include <QPushButton>
+#include <QSortFilterProxyModel>
+#include <QTreeView>
+#include <QVBoxLayout>
+
+#include "MvQIconProvider.h"
+
+//====================================
+//
+//	MvQClassModel
+//
+//====================================
+
+MvQClassModel::MvQClassModel(QObject *parent) : 
+     QAbstractItemModel(parent)
+{
+	IconClass::scan(*this);
+}  
+
+void MvQClassModel::next(const IconClass& c)
+{
+	classes_ << &c;
+}	
+
+int MvQClassModel::columnCount( const QModelIndex& parent) const
+{
+	 return parent.isValid() ? 0 : 6;
+}
+
+int MvQClassModel::rowCount( const QModelIndex& index) const
+{
+	if (!index.isValid() )
+	{
+	  	return  classes_.count();
+	}
+	else
+	{
+		return  0;
+	}
+}
+
+QVariant MvQClassModel::data( const QModelIndex& index, int role ) const
+{
+  	if (role != Qt::DisplayRole && role != Qt::DecorationRole)
+	{  	
+		return QVariant();
+	}
+	
+  	if(!index.isValid())
+		return QVariant();
+	
+	
+	if(index.row() < 0 || index.row() >= classes_.count())
+		return QVariant();
+		
+	const IconClass *kind=classes_[index.row()];
+	
+	if(role == Qt::DisplayRole)
+	{   
+	   	switch(index.column())
+		{
+		case 0:
+	  		return QString::fromStdString(kind->name());
+		case 1:
+	  		return QString::fromStdString(kind->type());
+		case 2:
+	  		return QString::fromStdString(kind->iconBox());
+		case 3:
+		  	return (kind->canBeCreated())?"yes":"no";	
+		case 4:
+		  	return QString::fromStdString(kind->editor()); 
+		case 5:
+		  	return QString::number(kind->expandFlags()); 	
+		default:
+		  	break;	
+		}	
+		
+	}
+	else if(role == Qt::DecorationRole)
+	{   
+		if(index.column() == 0)
+		 	return MvQIconProvider::pixmap(*kind,32);		 
+	}
+	
+	return QVariant();	  
+}
+
+QModelIndex MvQClassModel::index( int row, int column, const QModelIndex & /*parent */) const
+{
+	return createIndex(row,column,0);
+}
+
+
+QModelIndex MvQClassModel::parent( const QModelIndex & /*index*/ ) const
+{
+	return QModelIndex();
+}
+
+QVariant MvQClassModel::headerData(const int section, const Qt::Orientation orient , const int role ) const
+{
+	if (orient != Qt::Horizontal || role != Qt::DisplayRole)
+  		return QVariant();
+	
+  	switch(section)
+	{
+	case 0:
+		return tr("Name");
+	case 1: 
+	  	return tr("Type");
+	case 2: 
+	  	return tr("Group");
+	case 3: 
+	  	return tr("Can be created?");	
+	case 4: 
+	  	return tr("Editor");		
+	case 5: 
+	  	return tr("Flags");	
+	default:
+	  	break;
+	}
+	
+	return QVariant();
+}
+
+MvQClassBrowser::MvQClassBrowser(QWidget *parent) : 
+        QDialog(parent)       
+{		
+	//setAttribute(Qt::WA_DeleteOnClose);
+	
+	setWindowTitle("Metview - Icon classes");
+	
+	//Initial size
+	resize(QSize(1100,800));
+		
+	//----------------------------------
+	// Create the class  model
+	//----------------------------------
+
+	MvQClassModel *classModel=new MvQClassModel(this);
+	
+	QSortFilterProxyModel* sortModel=new QSortFilterProxyModel(this);
+	sortModel->setSourceModel(classModel);
+	
+	//-----------------------------
+	// Layout 
+	//-----------------------------
+	
+	QVBoxLayout *mainLayout = new QVBoxLayout(this);
+	mainLayout->setSpacing(0); 
+	mainLayout->setContentsMargins(1,1,1,1);
+		
+	//--------------------
+	// Icon view
+	//--------------------
+
+	classView_= new QTreeView(this);	
+	classView_->setRootIsDecorated(false);
+	classView_->setSortingEnabled(true); 
+	classView_->sortByColumn(0,Qt::AscendingOrder); 
+	classView_->setAlternatingRowColors(true);
+        classView_->setAllColumnsShowFocus(true);	
+	classView_->setModel(sortModel);
+	
+	classView_->setProperty("mvStyle","0");
+	classView_->sortByColumn(3,Qt::DescendingOrder);
+	classView_->resizeColumnToContents(0);
+	
+	mainLayout->addWidget(classView_,1);
+		
+	//--------------------------------------
+	// Buttons
+	//--------------------------------------
+	
+	buttonBox_= new QDialogButtonBox(this);
+	
+	buttonBox_->addButton(QDialogButtonBox::Close);
+	
+	connect(buttonBox_, SIGNAL(clicked(QAbstractButton*)), 
+		this, SLOT(slotButtonClicked(QAbstractButton*)));
+	
+	mainLayout->addWidget(buttonBox_);
+}
+
+MvQClassBrowser::~MvQClassBrowser()
+{	
+}
+
+void MvQClassBrowser::closeEvent(QCloseEvent* event)
+{
+	//emit aboutToClose(this);
+	close();
+	event->accept();
+}
+
+void MvQClassBrowser::slotButtonClicked(QAbstractButton* button)
+{
+	if(!button) return;
+	
+	if(buttonBox_->standardButton(button) == QDialogButtonBox::Close)
+	{
+		close();
+		accept();  	
+	}  
+  
+}  
+ 
+void MvQClassBrowser::writeSettings(QSettings &settings)
+{
+}	
+
+void MvQClassBrowser::readSettings(QSettings &settings)
+{
+}	
diff --git a/src/Desktop/MvQClassBrowser.h b/src/Desktop/MvQClassBrowser.h
new file mode 100644
index 0000000..4564fe1
--- /dev/null
+++ b/src/Desktop/MvQClassBrowser.h
@@ -0,0 +1,67 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQClassBrowser_H
+#define MvQClassBrowser_H
+ 
+#include <QAbstractItemModel>
+#include <QDialog>
+#include <QSettings>
+
+#include "IconClass.h"
+
+class IconClass;
+
+class QAbstractButton;
+class QCloseEvent;
+class QDialogButtonBox;
+class QTreeView;
+
+using namespace std;
+
+class MvQClassModel : public QAbstractItemModel, public ClassScanner 
+{
+public:
+    	MvQClassModel(QObject *parent=0);  
+  
+	int columnCount( const QModelIndex&) const;
+	int rowCount (const QModelIndex& parent = QModelIndex() ) const;
+	QVariant data (const QModelIndex& , int role = Qt::DisplayRole ) const;
+	QModelIndex index (int, int, const QModelIndex& parent = QModelIndex() ) const;
+   	QModelIndex parent (const QModelIndex & ) const;
+	QVariant headerData(const int section, const Qt::Orientation orient , const int role ) const;
+	
+	void next(const IconClass&);
+
+protected:		
+	QList<const IconClass*> classes_; 
+};	
+
+class MvQClassBrowser : public QDialog
+{
+    Q_OBJECT
+
+public:
+	MvQClassBrowser(QWidget* parent=0);
+	~MvQClassBrowser();
+	
+	void writeSettings(QSettings &);
+	void readSettings(QSettings &);
+
+public slots:	
+	void slotButtonClicked(QAbstractButton*);
+
+protected:
+	void closeEvent(QCloseEvent*);	
+	
+	QTreeView* classView_; 
+	QDialogButtonBox* buttonBox_;
+};
+
+#endif
diff --git a/src/Desktop/MvQColourHelp.cc b/src/Desktop/MvQColourHelp.cc
new file mode 100644
index 0000000..1cfaa24
--- /dev/null
+++ b/src/Desktop/MvQColourHelp.cc
@@ -0,0 +1,879 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQColourHelp.h"
+
+#include <QDebug>
+#include <QGridLayout>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QMouseEvent>
+#include <QPainter>
+#include <QPushButton>
+#include <QRegExpValidator>
+#include <QSpinBox>
+#include <QTabWidget>
+#include <QVBoxLayout>
+
+#include "HelpFactory.h"
+#include "RequestPanel.h"
+
+#include "MvQPalette.h"
+
+static const float toRadFactor=3.14159265359/180.;
+static const float toDegFactor=180./3.14159265359;
+
+
+
+//==============================
+// 
+// MvQColourGrid
+//
+//===============================
+
+MvQColourGrid::MvQColourGrid(QWidget *parent) : 
+  QWidget(parent),
+  cellsPerRow_(8)
+{
+	MvQPalette::scan(*this);
+	
+	setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum));
+	setMinimumSize(QSize(128,128));
+	
+	setMouseTracking(true);
+}  
+
+void MvQColourGrid::next(const string& name,QColor col)
+{
+  	names_ << name;
+	cols_ << col;		
+}
+
+void MvQColourGrid::resizeEvent(QResizeEvent */*event*/) 
+{
+	int w=width();
+    	int h=height(); 
+	gridSize_=(w<h)?w:h;
+	cellSize_=gridSize_/cellsPerRow_;
+    	
+    	createGrid();
+}
+
+void MvQColourGrid::paintEvent(QPaintEvent */*event*/)
+{
+	QPainter painter(this);
+	painter.setRenderHint(QPainter::Antialiasing);
+
+    	//Render ring pixmap
+    	painter.drawPixmap(0,0,pix_);
+}
+
+void MvQColourGrid::createGrid()
+{ 
+	QPalette pal=palette();
+	
+    	pix_=QPixmap(gridSize_,gridSize_);
+		
+	QPainter painter(&pix_);   
+    	//painter.setRenderHint(QPainter::Antialiasing);
+        //pal.window().color()
+	
+    	pix_.fill(pal.window().color());
+
+    	for(int i=0; i < cols_.count(); i++)
+	{
+	  	int row=i/cellsPerRow_;
+	        int col=i-row*cellsPerRow_;  
+	  	painter.fillRect(col*cellSize_,row*cellSize_,cellSize_,cellSize_,cols_[i]);
+	}
+	
+	painter.setPen(pal.window().color());
+	for(int i=1; i < cellsPerRow_; i++)
+	{
+	  	painter.drawLine(i*cellSize_,0,i*cellSize_,gridSize_);
+		painter.drawLine(0,i*cellSize_,gridSize_,i*cellSize_);
+	}		
+}
+
+void MvQColourGrid::mousePressEvent(QMouseEvent *event)
+{
+	int idx=index(event->pos());
+	if(idx >= 0 && idx < cols_.count())
+	{	  
+		emit selected(cols_[idx]);
+
+	}
+}
+
+void MvQColourGrid::mouseMoveEvent(QMouseEvent *event)
+{
+	if(event->buttons() != Qt::NoButton)
+		return;
+	
+	int idx=index(event->pos());
+	if(idx >= 0 && idx < cols_.count())
+	{	  
+		setToolTip(QString::fromStdString(names_[idx]));
+	
+	}
+}	
+
+int MvQColourGrid::index(QPoint pos)
+{
+  	int row=pos.y()/cellSize_;
+  	int col=pos.x()/cellSize_;
+	
+	return row*cellsPerRow_+col;
+}	
+
+//==============================
+// 
+// MvQColourWheel
+//
+//===============================
+
+MvQColourWheel::MvQColourWheel(QWidget *parent) : 
+  QWidget(parent),
+  ringWidth_(14),
+  outerRadius_(128),
+  innerRadius_(108),
+  hue_(0),
+  sat_(128),
+  lgt_(128),
+  lgtSatSelectorRadius_(4),
+  dragType_(NoDrag)
+{
+	huePenBlack_=QPen(Qt::black,2.,Qt::SolidLine);
+  	huePenWhite_=QPen(Qt::white,2.,Qt::SolidLine);
+  
+  	setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum));
+	setMinimumSize(QSize(128,128));
+	
+	setMouseTracking(true);
+}  
+  
+void MvQColourWheel::resizeEvent(QResizeEvent */*event*/) 
+{
+	int w=width();
+    	int h=height(); 
+	outerRadius_=(w<h)?w:h;
+	outerRadius_/=2;
+	innerRadius_=outerRadius_-ringWidth_;
+	centre_=QPoint(w/2,h/2);
+	
+	//Create a hue ring pixmap
+    	createRing();
+		
+	//Create the lgt-sat triangle pixmap
+	createTriangle();	
+}
+
+void MvQColourWheel::paintEvent(QPaintEvent */*event*/)
+{
+	QPainter painter(this);
+	painter.setRenderHint(QPainter::Antialiasing);
+
+    	//Render ring pixmap
+    	painter.drawPixmap(centre_.x()-outerRadius_,centre_.y()-outerRadius_,ringPix_);
+	
+	//Render the hue selector onto the ring
+	renderHueSelector(&painter);
+	
+	//Render lgt-sat triangle 
+	painter.drawPixmap(centre_.x()-innerRadius_,centre_.y()-innerRadius_,triPix_);
+		
+	//Render the lgt-sat selector onto the triangle 
+	renderLgtSatSelector(&painter);
+
+}
+
+//Render the ring into a pixmap  
+void MvQColourWheel::createRing()
+{ 
+	QPalette pal=palette();
+	
+    	ringPix_=QPixmap(2*outerRadius_,2*outerRadius_);
+		
+	QPainter painter(&ringPix_);   
+    	painter.setRenderHint(QPainter::Antialiasing);
+        
+    	ringPix_.fill(pal.window().color());
+
+    	QConicalGradient cg(0, 0, 0);
+    	cg.setColorAt(0.0, Qt::red);
+    	cg.setColorAt(60.0/360.0, Qt::yellow);
+    	cg.setColorAt(120.0/360.0, Qt::green);
+    	cg.setColorAt(180.0/360.0, Qt::cyan);
+    	cg.setColorAt(240.0/360.0, Qt::blue);
+    	cg.setColorAt(300.0/360.0, Qt::magenta);
+    	cg.setColorAt(1.0, Qt::red);
+    
+    	painter.translate(outerRadius_,outerRadius_);
+
+    	//Coloured circle
+   	QBrush brush(cg);
+   	painter.setPen(Qt::NoPen);
+    	painter.setBrush(brush);
+    	painter.drawEllipse(QPoint(0,0),outerRadius_,outerRadius_);
+    
+    	//Inner clipping circle
+   	painter.setBrush(pal.window());
+   	painter.drawEllipse(QPoint(0,0),innerRadius_,innerRadius_);	
+}
+
+void MvQColourWheel::createTriangle()
+{
+	int nx=256;
+    	int ny=256;
+    	float tFactor=sqrt(3)/2.;
+       	
+	QImage img(nx,ny,QImage::Format_ARGB32_Premultiplied);
+
+    	QColor col;   
+    	for(int j=0;j<ny;j++)
+    	{
+		int chroma=255-j;				
+		for(int i=0;i< nx; i++)
+		{           	
+	  		int lgt=i;
+		  	if(abs(nx/2-i) < j/2)
+			{  		  
+		 		int sat=saturation(chroma,lgt);				
+			  	col = QColor::fromHsl(hue_,sat,lgt);
+            			img.setPixel(i,j,col.rgb());
+			}
+			else
+			{
+				img.setPixel(i,j,qRgba(0,0,0,0));
+			}		
+       		}
+	}
+    
+    	float h=innerRadius_*1.5;
+    	float w=h/tFactor;   
+    	img = img.scaled(w,h,Qt::IgnoreAspectRatio,Qt::SmoothTransformation);
+    
+	triPix_=QPixmap(innerRadius_*2,innerRadius_*2);
+	triPix_.fill(Qt::transparent);
+	
+   	QPainter painter(&triPix_);   
+    	painter.setRenderHint(QPainter::Antialiasing);
+		
+	painter.translate(innerRadius_,innerRadius_); 
+    	painter.rotate(90-hue_);
+    	painter.translate(-w/2,-(innerRadius_));    
+    	painter.drawImage(0,0,img);
+}
+
+void MvQColourWheel::renderHueSelector(QPainter *painter)
+{
+	float alpha=-hue_*toRadFactor;
+  	float x=innerRadius_*cos(alpha);
+	float y=innerRadius_*sin(alpha);
+	float x1=outerRadius_*cos(alpha);
+	float y1=outerRadius_*sin(alpha);
+	
+	painter->translate(centre_.x(),centre_.y());
+	
+	if(hue_ > 20 && hue_ < 200)
+		painter->setPen(huePenBlack_);
+	else
+	  	painter->setPen(huePenWhite_);
+	painter->drawLine(x,y,x1,y1);
+	painter->translate(-centre_.x(),-centre_.y());
+}  
+  
+void MvQColourWheel::renderLgtSatSelector(QPainter *painter)
+{
+	QPointF pos;	
+	lgtSatToPos(pos);	
+	lgtSatPos_=pos.toPoint();
+	
+	painter->drawEllipse(centre_+ pos,lgtSatSelectorRadius_,lgtSatSelectorRadius_);
+}  
+      
+void MvQColourWheel::mousePressEvent(QMouseEvent *event)
+{
+	QPoint delta=event->pos()-centre_-lgtSatPos_;
+	
+	if(delta.x()*delta.x()+delta.y()*delta.y() <= lgtSatSelectorRadius_*lgtSatSelectorRadius_)
+	{
+	  	lgtSatOffset_=delta;
+		dragType_=TriangleDrag;
+	}	
+  	else
+	{
+	  	lgtSatOffset_=QPoint();
+	  	dragType_=checkPoint(event->pos());
+	}	
+}
+
+void MvQColourWheel::mouseMoveEvent(QMouseEvent *event)
+{
+	if(dragType_ == TriangleDrag)
+	{
+		dragTriangleSelector(event->pos());
+	}
+	else if(dragType_ == RingDrag)
+	{  	  
+	 	dragRingSelector(event->pos());
+	}	
+}
+
+void MvQColourWheel::mouseReleaseEvent(QMouseEvent* /*event*/)
+{
+	dragType_ = NoDrag;
+	lgtSatOffset_=QPoint(0,0);
+	dragPos_=QPoint();	
+}
+
+
+void MvQColourWheel::dragRingSelector(QPoint pos)
+{
+	if(dragType_ != RingDrag)
+	  	return;
+	
+	QPoint dp=pos-centre_;
+	int hue =atan2(dp.x() ,dp.y())*toDegFactor-90.;
+	if(hue < 0 ) hue+=360;
+		
+	setHue(hue);
+}
+
+void MvQColourWheel::dragTriangleSelector(QPoint pos)
+{
+	if(dragType_ != TriangleDrag)
+	  	return;
+	
+	QPoint dp=pos-lgtSatOffset_-centre_;	
+
+	int lgt,sat;
+	if(projectPosToLgtSat(dp,lgt,sat))
+	{
+		setLgtSat(lgt,sat);	
+	}		  
+}
+
+MvQColourWheel::DragType MvQColourWheel::checkPoint(QPoint pos)
+{
+	int fullRad=height()/2;
+  	int rad=height()/2-ringWidth_;
+	int dx=pos.x()-fullRad;
+	int dy=pos.y()-fullRad;
+	int d=sqrt(dx*dx+dy*dy);
+	
+	if(d > rad && d < rad+ringWidth_ && dragType_!= TriangleDrag)
+	{
+	  	int hue =atan2(dx ,dy)*180./3.14-90;
+		if(hue < 0 ) hue+=360;
+		
+		setHue(hue);
+		return RingDrag;
+	}
+	
+	else if(d <= rad && dragType_!=RingDrag)
+	{
+		QPointF pp(dx,dy);
+		int lgt,sat;
+		if(posToLgtSat(pp,lgt,sat))
+		{
+			setLgtSat(lgt,sat);	
+			return TriangleDrag;
+		}		  
+	}
+		
+	return NoDrag;
+}	
+
+bool MvQColourWheel::lgtSatToPos(QPointF &pos)
+{
+	int chromaVal=chroma(sat_,lgt_);
+  
+  	float yt=innerRadius_-(255.-chromaVal)*(1.5*static_cast<float>(innerRadius_))/255.;
+	float xt=static_cast<float>(innerRadius_)*sqrt(3.)*(lgt_-128)/255.;
+	
+	float alpha=(hue_-90)*toRadFactor;
+	float x=cos(alpha)*xt-sin(alpha)*yt;
+	float y=sin(alpha)*xt+cos(alpha)*yt; 
+	
+	pos=QPointF(x,-y);
+	
+	//qDebug() << "lgtSat" << sat_ << lgt_ << pos;
+	
+	return true;
+}
+
+bool MvQColourWheel::posToLgtSat(QPointF pos,int &lgt, int &sat)
+{
+	//Transform coordinate system 
+	float alpha=-(hue_-90)*toRadFactor;
+	float xt=cos(alpha)*pos.x()+sin(alpha)*pos.y();
+	float yt=sin(alpha)*pos.x()-cos(alpha)*pos.y(); 
+		
+	if(yt < innerRadius_ && yt > -innerRadius_/2. && 
+	   fabs(xt)  <= (innerRadius_-yt)/2 )
+	{
+		int chroma=255.-255.*(innerRadius_-yt)/(1.5*static_cast<float>(innerRadius_));
+		lgt=128.+255.*xt/(static_cast<float>(innerRadius_)*sqrt(3.));
+		sat=saturation(chroma,lgt);
+		
+		return true;
+	}
+	
+	return false;
+}
+
+bool MvQColourWheel::projectPosToLgtSat(QPointF pos,int &lgt, int &sat)
+{
+	//Transform coordinate system 
+	float alpha=-(hue_-90)*toRadFactor;
+	float xt=cos(alpha)*pos.x()+sin(alpha)*pos.y();
+	float yt=sin(alpha)*pos.x()-cos(alpha)*pos.y(); 
+		
+	if(yt < innerRadius_ && yt > -innerRadius_/2. && 
+	   fabs(xt)  <= (innerRadius_-yt)/2 )
+	{
+		int chroma=255.-255.*(innerRadius_-yt)/(1.5*static_cast<float>(innerRadius_));
+		lgt=128.+255.*xt/(static_cast<float>(innerRadius_)*sqrt(3.));
+		sat=saturation(chroma,lgt);
+		
+		return true;
+	}
+	else if(yt < innerRadius_ && yt > -innerRadius_/2.)
+	{
+	  	int chroma=255.-255.*(innerRadius_-yt)/(1.5*static_cast<float>(innerRadius_));
+		
+		lgt=128.+255.*((xt>0)?1:-1)*((innerRadius_-yt)/2)/(static_cast<float>(innerRadius_)*sqrt(3.));
+		
+		sat=saturation(chroma,lgt);		
+		return true;
+	}
+	else if(fabs(xt)  <= (innerRadius_-yt)/2 )
+	{
+		int chromaVal=chroma(sat_,lgt_);
+	  	lgt=128.+255.*xt/(static_cast<float>(innerRadius_)*sqrt(3.));
+		sat=saturation(chromaVal,lgt);	
+		return true;
+	}
+	
+	return false;
+}
+
+
+void MvQColourWheel::setHue(int hue)
+{
+	hue_=hue;
+	
+	createTriangle();
+	
+	update();
+	
+	emit hslSelected(hue_,sat_,lgt_);
+}	
+
+void MvQColourWheel::setLgtSat(int lgt, int sat)
+{
+	lgt_=lgt;
+	sat_=sat;
+	
+	update();
+	
+	emit hslSelected(hue_,sat_,lgt_);
+}	
+
+void MvQColourWheel::slotSetColour(int hue, int sat,int lgt)
+{
+  	hue_=hue;
+	lgt_=lgt;
+	sat_=sat;
+
+	createTriangle();
+	
+	update();
+}
+
+void MvQColourWheel::initColour(QColor col)
+{
+  	int hue=col.hslHue();
+	int lgt=col.lightness();
+	int sat=col.hslSaturation();
+	
+	slotSetColour(hue,sat,lgt);
+	
+	emit hslSelected(hue_,sat_,lgt_);
+}
+
+int MvQColourWheel::saturation(int chroma, int lgt)
+{  
+	float chromaNorm=static_cast<int>(chroma)/255.;
+	float lgtNorm=static_cast<int>(lgt)/255.;
+	
+	return (chroma == 0)?0:255.*chromaNorm/(1-fabs(2.*lgtNorm-1));
+}		
+			
+int MvQColourWheel::chroma(int sat, int lgt)
+{  
+	float satNorm=static_cast<int>(sat)/255.;
+	float lgtNorm=static_cast<int>(lgt)/255.;
+	
+	return (sat == 0)?0:255.*satNorm*(1-fabs(2.*lgtNorm-1));
+}
+
+//==============================
+// 
+// MvQColourSelectionWidget
+//
+//===============================
+
+MvQColourSelectionWidget::MvQColourSelectionWidget(QWidget *parent) : 
+    QWidget(parent), 
+    ignoreRgbSpin_(false),
+    ignoreHslSpin_(false),
+    ignoreHtmlEdit_(false)
+{	
+  	QLabel *label;
+	
+	QHBoxLayout *hb=new QHBoxLayout(this);
+	
+	//--------------
+	// Left
+	//--------------
+	
+	tab_=new QTabWidget(this);
+	hb->addWidget(tab_);
+	
+	wheel_= new MvQColourWheel(this);
+    	tab_->addTab(wheel_,tr("Wheel"));
+		
+	grid_= new MvQColourGrid(this);
+    	tab_->addTab(grid_,tr("Grid"));
+	
+	//----------------
+	// Right
+	//----------------
+	
+	QVBoxLayout *rightVb=new QVBoxLayout(); 
+	hb->addSpacing(4);
+	hb->addLayout(rightVb);
+	
+	//Col def hb
+	QHBoxLayout *colDefHb=new QHBoxLayout();
+	rightVb->addLayout(colDefHb);
+	
+	//RGB
+	QGridLayout *rgbGrid=new QGridLayout(); 
+	colDefHb->addLayout(rgbGrid);
+	
+	QStringList rgbNames;
+	rgbNames << tr("Red:") << tr("Green:")  << tr("Blue:"); 
+	for(int i=0; i < 3; i++)
+	{
+		label = new QLabel(rgbNames[i],this);
+		rgbGrid->addWidget(label,i,0);
+		
+		QSpinBox *sp=new QSpinBox(this);
+		sp->setRange(0,255);
+		rgbGrid->addWidget(sp,i,1);
+		rgbSpin_ << sp;
+	}	
+	rgbGrid->setColumnStretch(2,1);
+	
+	//HSL
+	QGridLayout *hslGrid=new QGridLayout();
+	colDefHb->addLayout(hslGrid);
+	
+	QStringList hslNames;
+	hslNames << tr("Hue:") << tr("Sat:")  << tr("Light:"); 
+	for(int i=0; i < 3; i++)
+	{
+		//QHBoxLayout *colHb=new QHBoxLayout(this); 	  
+		//hslgrid->addLayout(colHb,i,0);
+		
+		label = new QLabel(hslNames[i],this);
+		hslGrid->addWidget(label,i,0);
+		
+		QSpinBox *sp=new QSpinBox(this);
+		sp->setRange(0,(i==0)?359:255);
+		hslGrid->addWidget(sp,i,1);
+		hslSpin_ << sp;
+	}
+	hslGrid->setColumnStretch(2,1);	
+	
+	//colour rect
+	QHBoxLayout *selHb=new QHBoxLayout();
+	rightVb->addLayout(selHb);
+	
+	selectedColorBox_ = new QLabel(this);
+    	selectedColorBox_->setFixedHeight(34);
+     	selHb->addWidget(selectedColorBox_);
+    	
+	//Html
+	label=new QLabel(tr("HTML notation:"),this);
+	htmlEdit_=new QLineEdit(this);
+	selHb->addWidget(label);
+	selHb->addWidget(htmlEdit_);
+	
+	//HTML colour validator
+	QRegExp rx("#?[A-f|0-9]{6}");
+	QRegExpValidator *val=new QRegExpValidator(rx,this);
+	htmlEdit_->setValidator(val);
+	//selHb->addStretch(1);
+	
+	hb->addStretch(1);
+	
+	//----------------
+	//Bottom
+	//----------------
+	
+    	okPb_ = new QPushButton(tr("Select colour"),this);
+	rightVb->addWidget(okPb_);
+
+	//----------------
+	//Signals and slots
+	//----------------
+
+	//Wheel
+   	connect(wheel_, SIGNAL(hslSelected(int,int,int)), 
+		 this, SLOT(slotWheelChanged(int,int,int)));
+  
+	for(int i=0; i < 3; i++)	 
+	{
+	  	connect(hslSpin_[i],SIGNAL(valueChanged(int)),
+			this,SLOT(slotHslChanged(int)));
+	}
+	
+	for(int i=0; i < 3; i++)	 
+	{
+	  	connect(rgbSpin_[i],SIGNAL(valueChanged(int)),
+			this,SLOT(slotRgbChanged(int)));
+	}
+	
+	connect(htmlEdit_,SIGNAL(textChanged(QString)),
+			this,SLOT(slotHtmlChanged(QString)));
+		 
+	connect(this,SIGNAL(colourChanged(int,int,int)),
+		wheel_,SLOT(slotSetColour(int,int,int)));
+			
+	
+	//Grid	
+	connect(grid_, SIGNAL(selected(QColor)), 
+		 this, SLOT(slotGridSelected(QColor)));	
+		
+		
+	connect(okPb_,SIGNAL(clicked(bool)), 
+		this,SLOT(slotOk(bool)));
+		
+	//Init the colour
+    	//setColour(Qt::green); // must be done AFTER creating selectedColorBox_
+}
+
+void MvQColourSelectionWidget::setColour(QColor col)
+{  	
+  	wheel_->initColour(col);
+}  
+
+void MvQColourSelectionWidget::setColourBox(QColor colour)
+{
+    	QPixmap pixmap(30, 30);
+    	QPainter painter(&pixmap);
+    	painter.setPen(Qt::black);
+    	painter.setBrush(colour);
+    	painter.drawRect(0, 0, 29, 29);
+
+   	selectedColorBox_->setPixmap(pixmap);
+    	currentColour_ = colour;
+}
+
+void MvQColourSelectionWidget::slotGridSelected(QColor col)
+{
+	ignoreRgbSpin_=true;
+	ignoreHslSpin_=true;
+	ignoreHtmlEdit_=true;
+	
+	rgbSpin_[0]->setValue(col.red());
+	rgbSpin_[1]->setValue(col.green());
+	rgbSpin_[2]->setValue(col.blue());
+	
+	hslSpin_[0]->setValue(col.hslHue());
+	hslSpin_[1]->setValue(col.hslSaturation());
+	hslSpin_[2]->setValue(col.lightness());
+	
+	htmlEdit_->setText(col.name());
+	
+	setColourBox(col);
+	
+	ignoreRgbSpin_=false;
+	ignoreHslSpin_=false;
+	ignoreHtmlEdit_=false;	
+	
+	emit colourChanged(hslSpin_[0]->value(),
+		   	hslSpin_[1]->value(),
+		   	hslSpin_[2]->value());
+}
+
+void MvQColourSelectionWidget::slotWheelChanged(int hue, int sat,int lgt)
+{
+	QColor col=QColor::fromHsl(hue,sat,lgt);
+
+	ignoreRgbSpin_=true;
+	ignoreHslSpin_=true;
+	ignoreHtmlEdit_=true;
+	
+	rgbSpin_[0]->setValue(col.red());
+	rgbSpin_[1]->setValue(col.green());
+	rgbSpin_[2]->setValue(col.blue());
+	
+	hslSpin_[0]->setValue(hue);
+	hslSpin_[1]->setValue(sat);
+	hslSpin_[2]->setValue(lgt);
+	
+	htmlEdit_->setText(col.name());
+	
+	setColourBox(col);
+	
+	ignoreRgbSpin_=false;
+	ignoreHslSpin_=false;
+	ignoreHtmlEdit_=false;	
+}
+
+void MvQColourSelectionWidget::slotRgbChanged(int)
+{
+	if(ignoreRgbSpin_)
+	  	return;
+		
+	ignoreHslSpin_=true;
+	ignoreHtmlEdit_=true;
+	
+	QColor col(rgbSpin_[0]->value(),
+		   rgbSpin_[1]->value(),
+		   rgbSpin_[2]->value());
+	
+	hslSpin_[0]->setValue(col.hslHue());
+	hslSpin_[1]->setValue(col.hslSaturation());
+	hslSpin_[2]->setValue(col.lightness());
+		
+	htmlEdit_->setText(col.name());
+	
+	setColourBox(col);
+		
+	ignoreHslSpin_=false;
+	ignoreHtmlEdit_=false;	
+	
+	emit colourChanged(hslSpin_[0]->value(),
+		   	hslSpin_[1]->value(),
+		   	hslSpin_[2]->value());
+}
+
+void MvQColourSelectionWidget::slotHslChanged(int)
+{
+	if(ignoreHslSpin_)
+	  	return;
+	
+	ignoreRgbSpin_=true;
+	ignoreHtmlEdit_=true;
+	
+	QColor col=QColor::fromHsl(hslSpin_[0]->value(),
+		   hslSpin_[1]->value(),
+		   hslSpin_[2]->value());
+	
+	rgbSpin_[0]->setValue(col.red());
+	rgbSpin_[1]->setValue(col.green());
+	rgbSpin_[2]->setValue(col.blue());
+	
+	htmlEdit_->setText(col.name());
+	
+	setColourBox(col);
+	
+	ignoreRgbSpin_=false;
+	ignoreHtmlEdit_=false;
+	
+	emit colourChanged(hslSpin_[0]->value(),
+		   	hslSpin_[1]->value(),
+		   	hslSpin_[2]->value());
+}
+
+
+void MvQColourSelectionWidget::slotHtmlChanged(QString txt)
+{	
+	if(ignoreHtmlEdit_)
+	  	return;
+	
+	QColor col(txt);
+	if(!col.isValid())
+		return;
+	
+	ignoreRgbSpin_=true;
+	ignoreHslSpin_=true;
+	
+	rgbSpin_[0]->setValue(col.red());
+	rgbSpin_[1]->setValue(col.green());
+	rgbSpin_[2]->setValue(col.blue());
+	
+	hslSpin_[0]->setValue(col.hslHue());
+	hslSpin_[1]->setValue(col.hslSaturation());
+	hslSpin_[2]->setValue(col.lightness());
+	
+	setColourBox(col);
+	
+	ignoreRgbSpin_=false;
+	ignoreHslSpin_=false;  
+	
+	emit colourChanged(hslSpin_[0]->value(),
+		   	hslSpin_[1]->value(),
+		   	hslSpin_[2]->value());
+}
+
+void MvQColourSelectionWidget::slotOk(bool)
+{    	
+    	emit colourSelected(currentColour_);
+}
+
+
+//==================================================
+//
+//  MvQColourHelp
+//
+//==================================================
+
+MvQColourHelp::MvQColourHelp(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelHelp(owner,param)
+{
+	selector_=new MvQColourSelectionWidget(parentWidget_);//QWidget;
+  		
+	connect(selector_,SIGNAL(colourSelected(QColor)),
+			this,SLOT(slotSelected(QColor)));		
+}
+
+void MvQColourHelp::slotSelected(QColor col)
+{
+    	vector <string> vs;
+    
+    	vs.push_back(MvQPalette::toString(col));
+
+    	emit edited(vs);
+}
+
+void MvQColourHelp::refresh(const vector<string>& values)
+{
+	if(values.size() == 0)
+	  	return;
+	
+	if(MvQPalette::toString(selector_->currentColour()) == values[0])
+		return;  
+  	 	
+  	QColor col=MvQPalette::magics(values[0]);
+	if(col.isValid())
+	{
+	  	selector_->setColour(col);
+	}
+}
+
+static HelpMaker<MvQColourHelp> maker1("colour");
+static HelpMaker<MvQColourHelp> maker2("help_colour");
diff --git a/src/Desktop/MvQColourHelp.h b/src/Desktop/MvQColourHelp.h
new file mode 100644
index 0000000..79560db
--- /dev/null
+++ b/src/Desktop/MvQColourHelp.h
@@ -0,0 +1,180 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQColourHelp_H
+#define MvQColourHelp_H
+
+#include "MvQPalette.h"
+#include "MvQRequestPanelHelp.h"
+#include "Parameter.h"
+
+#include <QPen>
+#include <QWidget>
+
+class QLabel;
+class QLineEdit;
+class QPushButton;
+class QSpinBox;
+class QTabWidget;
+
+class  RequestPanel;
+
+class MvQColourGrid :  public QWidget, public PaletteScanner
+{
+Q_OBJECT  
+  
+public:
+      MvQColourGrid(QWidget *parent=0);	
+      void next(const string&,QColor);
+
+signals:
+      void selected(QColor);
+  
+  
+protected:
+      void paintEvent(QPaintEvent *event);
+      void resizeEvent (QResizeEvent * event );
+      void mousePressEvent(QMouseEvent *event);
+      void mouseMoveEvent(QMouseEvent *event);
+      void createGrid();
+      int index(QPoint);
+	
+      QList<string> names_;
+      QList<QColor> cols_;
+      int gridSize_;
+      int cellSize_;
+      int cellsPerRow_;
+      QPixmap pix_;
+};
+
+
+class MvQColourWheel :  public QWidget
+{
+Q_OBJECT
+
+public: 	
+  	MvQColourWheel(QWidget *parent=0);
+ 	void initColour(QColor);
+ 
+public slots:	
+	void slotSetColour(int,int,int);
+
+signals:
+    	void colourSelected(QColor colour);
+	void hslSelected(int,int,int);
+
+protected:
+    	enum DragType {NoDrag,RingDrag,TriangleDrag};
+	
+  	void paintEvent(QPaintEvent *event);
+    	void resizeEvent (QResizeEvent * event );
+	void mousePressEvent(QMouseEvent *event);
+    	void mouseMoveEvent(QMouseEvent *event);
+	void mouseReleaseEvent(QMouseEvent *event);
+	
+	void createRing();
+	void createTriangle();
+	void renderHueSelector(QPainter *);
+	void renderLgtSatSelector(QPainter *);
+	DragType checkPoint(QPoint);
+	void dragRingSelector(QPoint);
+	void dragTriangleSelector(QPoint);
+	void setHue(int);
+	void setLgtSat(int,int);
+	bool lgtSatToPos(QPointF&);
+	bool posToLgtSat(QPointF,int&,int&);
+	bool projectPosToLgtSat(QPointF,int &, int &);
+	int saturation(int,int);
+	int chroma(int,int);		
+	
+private:
+    	QPixmap ringPix_;
+	QPixmap triPix_;
+	int ringWidth_;
+	int outerRadius_;
+	int innerRadius_;
+	int hue_;
+	int sat_;
+	int lgt_; 
+	int lgtSatSelectorRadius_;
+	QPen huePenBlack_;
+	QPen huePenWhite_;
+	QPoint centre_;
+	DragType dragType_;
+	QPoint lgtSatPos_;
+	QPoint lgtSatOffset_;
+	QPoint dragPos_;
+};
+
+class MvQColourSelectionWidget : public QWidget
+{
+Q_OBJECT
+
+public:
+    	MvQColourSelectionWidget(QWidget *parent = 0);
+	void setColour(QColor);
+	QColor currentColour() {return currentColour_;}
+	
+public slots:
+    	void slotGridSelected(QColor);
+	void slotWheelChanged(int, int, int);
+    	void slotRgbChanged(int);
+    	void slotHslChanged(int);
+    	void slotHtmlChanged(QString);
+    	void slotOk(bool);
+
+signals:
+    	void colourChanged(int,int,int);
+    	void colourSelected(QColor);
+
+private:
+    	void setColourBox(QColor);
+	
+	QTabWidget* tab_;
+	MvQColourWheel   *wheel_;
+	MvQColourGrid* grid_;
+    	QLabel      *selectedColorBox_;
+    	QPushButton *okPb_;
+    	QObject     *parentObject_;
+    	QColor      currentColour_;
+    
+    	QList<QSpinBox*> rgbSpin_;
+    	QList<QSpinBox*> hslSpin_;
+   	QLineEdit* htmlEdit_;
+    
+    	bool ignoreRgbSpin_;
+    	bool ignoreHslSpin_;
+    	bool ignoreHtmlEdit_;
+};
+
+
+class MvQColourHelp : public MvQRequestPanelHelp
+{
+Q_OBJECT  
+
+public:
+	MvQColourHelp(RequestPanel& owner,const Parameter& param);
+	~MvQColourHelp() {};
+	
+	void start() {};
+	bool dialog() {return false;}	
+	QWidget* widget() {return selector_;}
+
+public slots:
+    	void slotSelected(QColor);
+
+protected:
+  	virtual void refresh(const vector<string>&);
+
+private:
+	MvQColourSelectionWidget* selector_;
+};	
+
+#endif
diff --git a/src/Desktop/MvQColourLine.cc b/src/Desktop/MvQColourLine.cc
new file mode 100644
index 0000000..d9d5f33
--- /dev/null
+++ b/src/Desktop/MvQColourLine.cc
@@ -0,0 +1,145 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQColourLine.h"
+
+#include <QComboBox>
+#include <QPainter>
+
+#include "MvQPalette.h"
+#include "MvQRequestPanelHelp.h"
+
+#include "LineFactory.h"
+#include "RequestPanel.h"
+
+
+/*void MvQColourComboBox::insertColor(int index, const QColor &color, const QString &name)
+{
+    QPixmap pix(12, 12);
+    QPainter painter(&pix);
+    if (color.isValid()) {
+	painter.setPen(Qt::gray);
+	painter.setBrush(QBrush(color));
+	painter.drawRect(0, 0, 12, 12);
+    }
+    QIcon icon;
+    icon.addPixmap(pix);
+
+    // Prevent adding of colors after the color dialog item.
+    if (colorDialogEnabled && index > colorCount()) index = colorCount() - 1;
+    insertItem(index, icon, name, color);
+}
+ */
+
+MvQColourLine::MvQColourLine(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelLine(owner,param) 
+{
+	colCb_ = new QComboBox(parentWidget_);
+	
+	QFont font;
+    	QFontMetrics fm(font);
+    	int h=fm.height()+4;
+   	int w=h*2;
+	colCb_->setIconSize(QSize(w,h));
+	   
+	param_.scan(*this);
+		
+	owner_.addWidget(colCb_,row_,3);
+	
+	connect(colCb_,SIGNAL(currentIndexChanged(int)),
+		this,SLOT(slotCurrentChanged(int)));
+}
+
+void MvQColourLine::next(const Parameter&, const char* first,const char* /*second*/)
+{
+        addColour(MvQPalette::magics(first),QString::fromStdString(param_.beautifiedName(first)),QString(first));
+}    
+
+void MvQColourLine::addColour(QColor color,QString name, QString realName)
+{
+    if(!color.isValid()) 
+      	return;
+    
+    int w=colCb_->iconSize().width();
+    int h=colCb_->iconSize().height();
+ 
+    QPixmap pixmap(w, h);
+    QPainter painter(&pixmap);
+    painter.setPen(Qt::black);
+    painter.setBrush(QBrush(color));
+    painter.drawRect(0, 0, w-1, h-1);
+ 
+    QIcon icon;
+    icon.addPixmap(pixmap);
+
+    if(colCb_->count() == 0)
+      	colCb_->addItem(icon,name,realName);
+    else
+    {
+      	int i=0;
+    	while(i < colCb_->count() && colCb_->itemText(i) < name) 
+		 i++;
+	colCb_->insertItem(i,icon,name,realName);
+    }	
+}
+
+
+void MvQColourLine::refresh(const vector<string>& values)
+{
+	if(values.size() > 0)
+	{
+		for(int i=0; i < colCb_->count(); i++)
+		{
+			if(colCb_->itemData(i).toString().toStdString() == values[0])
+			{
+			  	colCb_->setCurrentIndex(i);
+				return;
+			}	
+		}
+		
+		QString name=QString::fromStdString(values[0]);
+		addColour(MvQPalette::magics(values[0]),name,name);
+		colCb_->setCurrentIndex(colCb_->count()-1);		
+	}
+	
+	//changed_ = false;
+}
+
+void MvQColourLine::slotCurrentChanged(int index)
+{
+	if(index >=0 && index < colCb_->count())
+	{
+	  	owner_.set(param_.name(),colCb_->itemData(index).toString().toStdString());
+		updateHelper();
+	}	
+}
+
+void MvQColourLine::slotHelperEdited(const vector<string>& vals)
+{
+	if(vals.size() == 0)
+	  	return;
+
+	QString name=QString::fromStdString(vals[0]);
+	addColour(MvQPalette::magics(vals[0]),name,name);
+	colCb_->setCurrentIndex(colCb_->count()-1);
+}	
+
+void MvQColourLine::updateHelper()
+{
+  	if(!helper_)
+		return;
+	
+	int index=colCb_->currentIndex();
+	
+	vector<string> vals;	
+	vals.push_back(colCb_->itemData(index).toString().toStdString());
+	helper_->refresh(vals);
+}  		
+
+static LineMaker<MvQColourLine> maker1("colour");
diff --git a/src/Desktop/MvQColourLine.h b/src/Desktop/MvQColourLine.h
new file mode 100644
index 0000000..52d2cef
--- /dev/null
+++ b/src/Desktop/MvQColourLine.h
@@ -0,0 +1,50 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQColourLine_H
+#define MvQColourLine_H
+
+#include "MvQRequestPanelLine.h"
+#include "Parameter.h"
+
+#include <QString>
+
+class QColor;
+class QComboBox;
+
+class  RequestPanel;
+
+class MvQColourLine : public MvQRequestPanelLine, public ParameterScanner
+{
+Q_OBJECT  
+  
+public:
+	MvQColourLine(RequestPanel& owner,const Parameter& param);
+	~MvQColourLine() {};	
+	
+	QString currentValue() {return QString();}
+	void addValue(QString) {}
+	
+	void refresh(const vector<string>&);
+
+public slots:	
+        void slotCurrentChanged(int);	
+	void slotHelperEdited(const vector<string>&);
+	
+protected:
+	 void next(const Parameter&, const char* first,const char* second); 
+	 void addColour(QColor,QString,QString);
+	 void updateHelper();
+	 
+	 QComboBox *colCb_;    	
+	
+};	
+
+#endif
diff --git a/src/Desktop/MvQColourListLine.cc b/src/Desktop/MvQColourListLine.cc
new file mode 100644
index 0000000..3655f85
--- /dev/null
+++ b/src/Desktop/MvQColourListLine.cc
@@ -0,0 +1,298 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQColourListLine.h"
+
+#include <QAction>
+#include <QLabel>
+#include <QMenu>
+#include <QMouseEvent>
+#include <QPainter>
+
+#include "MvQPalette.h"
+#include "MvQRequestPanelHelp.h"
+
+#include "LineFactory.h"
+#include "RequestPanel.h"
+
+//==============================================
+//
+// MvQColourListWidget
+//
+//==============================================
+
+MvQColourListWidget::MvQColourListWidget(QWidget *parent) : 
+  QWidget(parent),
+  cellWidth_(0),
+  currentCell_(-1)
+{
+	blackPen_=QPen(Qt::black,2.,Qt::SolidLine);
+  	whitePen_=QPen(Qt::white,2.,Qt::SolidLine);
+  
+	setContextMenuPolicy(Qt::CustomContextMenu);	
+	
+	connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
+                this, SLOT(slotContextMenu(const QPoint &)));
+}  
+
+void MvQColourListWidget::setColours(QList<QColor> cols)
+{
+  	colours_=cols;
+	createPixmap();
+	update();
+}	
+
+void MvQColourListWidget::resizeEvent(QResizeEvent */*event*/) 
+{
+	createPixmap();
+	update();
+}
+
+void MvQColourListWidget::paintEvent(QPaintEvent */*event*/)
+{
+	QPainter painter(this);
+
+    	painter.drawPixmap(0,0,pix_);
+	
+	renderCurrentCell(&painter);
+}
+
+void MvQColourListWidget::mousePressEvent(QMouseEvent *event)
+{	 	
+	setCurrentCell(event->pos());
+}
+
+void MvQColourListWidget::setCurrentCell(QPoint pos)
+{
+  	int i=pos.x()/cellWidth_;
+	setCurrentCell(i);
+}
+
+void MvQColourListWidget::setCurrentCell(int index)
+{
+  	if(index >=0 && index < colours_.count())
+	{
+	  	currentCell_=index;
+		update();
+		emit currentChanged(colours_[currentCell_]);
+	}
+}
+
+void MvQColourListWidget::createPixmap()
+{
+	QFont font;
+    	QFontMetrics fm(font);
+    	int h=fm.height()+4;
+   	int w=width()/((colours_.count()>0)?colours_.count():1);
+	
+	cellWidth_=w;
+	
+	pix_=QPixmap(width(),h);
+	QPainter painter(&pix_);
+	painter.setPen(Qt::black);
+	 
+	for(int i=0; i < colours_.count(); i++)
+	{
+		painter.setBrush(colours_[i]);
+	  	painter.drawRect(i*w,0, w, h);		  	
+	}
+}	
+
+void MvQColourListWidget::renderCurrentCell(QPainter* painter)
+{	
+	if(currentCell_ >= 0 && currentCell_ < colours_.count())
+	{	  		
+  		int hue=colours_[currentCell_].hue();
+		if(hue > 30 && hue < 210)
+		  	painter->setPen(blackPen_);
+		else
+		  	painter->setPen(whitePen_);
+  	
+	  	painter->drawRect(currentCell_*cellWidth_,0, cellWidth_, pix_.height());	
+	}	
+}
+
+QColor MvQColourListWidget::currentColour() const
+{
+  	if(currentCell_ >= 0 && currentCell_ < colours_.count())
+	  	return colours_[currentCell_];
+	
+	return QColor();
+}
+
+void MvQColourListWidget::setCurrentColour(QColor col)
+{
+	if(col.isValid() &&  
+	   currentCell_ >= 0 && currentCell_ < colours_.count()) 
+	{
+		colours_[currentCell_]=col;
+		createPixmap();
+		update();
+		emit changed();
+	}	  
+}
+
+void MvQColourListWidget::slotContextMenu(const QPoint &pos)
+{
+  	setCurrentCell(pos);
+	
+	if(currentCell_ >= 0 && currentCell_ < colours_.count()) 
+	{ 
+  		QList<QAction*> actions;
+	
+		QAction *deleteAction=new QAction(this);
+		deleteAction->setText(tr("Delete"));
+		actions << deleteAction;	
+		
+		QAction *insertBeforeAction=new QAction(this);
+		insertBeforeAction->setText(tr("Insert before"));
+		actions << insertBeforeAction ;
+		
+		QAction *insertAfterAction=new QAction(this);
+		insertAfterAction->setText(tr("Insert after"));
+		actions << insertAfterAction ;
+
+		QAction *ac=QMenu::exec(actions,mapToGlobal(pos),deleteAction,this);
+		
+		if(ac == deleteAction)
+			deleteCell(currentCell_);		
+		else if(ac == insertBeforeAction)
+			insertBeforeCell(currentCell_);		
+		else if(ac == insertAfterAction)
+			insertAfterCell(currentCell_);
+		
+		foreach(QAction* a,actions)
+		  	delete a;
+	}	
+}	
+
+void MvQColourListWidget::deleteCell(int index)
+{
+	if(index >=0 && index < colours_.count())
+	{
+	  	colours_.removeAt(index);
+		
+		createPixmap();
+		if(index < colours_.count()-1)
+			setCurrentCell(index);
+		else
+		  	setCurrentCell(colours_.count()-1);
+		
+		emit changed();
+	}
+}
+
+
+void MvQColourListWidget::insertBeforeCell(int index)
+{
+	if(index >=0 && index < colours_.count())
+	{
+	  	QColor col=colours_[index];
+	  	colours_.insert(index,col);
+				
+		createPixmap();
+		setCurrentCell(index);
+		emit changed();
+	}
+}
+
+
+void MvQColourListWidget::insertAfterCell(int index)
+{
+	if(index >=0 && index < colours_.count())
+	{
+	  	QColor col=colours_[index];
+	  	colours_.insert(index+1,col);
+				
+		createPixmap();
+		setCurrentCell(index+1);
+		emit changed();
+	}
+}
+
+
+//==============================================
+//
+// MvQColourListLine
+//
+//==============================================
+
+MvQColourListLine::MvQColourListLine(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelLine(owner,param) 
+{
+	widget_ = new MvQColourListWidget(parentWidget_);
+	
+	QFont font;
+    	QFontMetrics fm(font);
+    	//int h=fm.height()+4;
+	
+	owner_.addWidget(widget_,row_,WidgetColumn);
+	
+	connect(widget_,SIGNAL(currentChanged(QColor)),
+		this,SLOT(slotCurrentChanged(QColor)));
+		
+	connect(widget_,SIGNAL(changed()),
+		this,SLOT(slotListChanged()));	
+}
+
+void MvQColourListLine::refresh(const vector<string>& values)
+{
+	if(values.size() > 0)
+	{
+		QList<QColor> colours;
+		
+		for(int i=0; i < static_cast<int>(values.size()); i++)
+		{
+		 	QString name=QString::fromStdString(values[i]);			
+			colours << MvQPalette::magics(values[i]);
+		}
+		
+		widget_->setColours(colours);
+	}
+	
+	//changed_ = false;
+}
+
+
+void MvQColourListLine::slotListChanged()
+{
+	vector<string> vals;
+	foreach(QColor col,widget_->colours())
+	{
+		vals.push_back(MvQPalette::toString(col));	  		  
+	}  
+	
+	owner_.set(param_.name(),vals);	
+}  
+
+void MvQColourListLine::updateHelper()
+{
+  	if(!helper_)
+		return;
+
+	vector<string> vals;	
+	vals.push_back(MvQPalette::toString(widget_->currentColour()));
+	helper_->refresh(vals);
+}  		
+
+void MvQColourListLine::slotCurrentChanged(QColor)
+{
+	updateHelper();	
+}
+
+void MvQColourListLine::slotHelperEdited(const vector<string>& vals)
+{
+	if(vals.size() == 0)
+	  	return;
+
+	QString name=QString::fromStdString(vals[0]);
+	widget_->setCurrentColour(MvQPalette::magics(vals[0]));
+}
+
+static LineMaker<MvQColourListLine> maker1("colourlist");
diff --git a/src/Desktop/MvQColourListLine.h b/src/Desktop/MvQColourListLine.h
new file mode 100644
index 0000000..a1c67d9
--- /dev/null
+++ b/src/Desktop/MvQColourListLine.h
@@ -0,0 +1,87 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQColourListLine_H
+#define MvQColourListLine_H
+
+#include "MvQRequestPanelLine.h"
+#include "Parameter.h"
+
+#include <QPen>
+#include <QString>
+#include <QWidget>
+
+class QColor;
+class QLabel;
+
+class  RequestPanel;
+
+class MvQColourListWidget : public QWidget
+{
+Q_OBJECT
+
+public:
+	MvQColourListWidget(QWidget* parent=0);
+	void setColours(QList<QColor>);
+	QColor currentColour() const;
+	void setCurrentColour(QColor);
+	QList<QColor> colours() {return colours_;}
+  
+public slots:
+        void slotContextMenu(const QPoint &);
+  
+signals:
+        void changed();
+    	void currentChanged(QColor);
+
+protected:	
+  	void resizeEvent(QResizeEvent *);
+	void paintEvent(QPaintEvent *);
+	void mousePressEvent(QMouseEvent *);
+	void createPixmap();
+	void renderCurrentCell(QPainter*);
+	void setCurrentCell(QPoint);
+	void setCurrentCell(int);
+	void deleteCell(int);
+	void insertBeforeCell(int);
+	void insertAfterCell(int);
+	
+	QPixmap pix_;
+  	QList<QColor> colours_;
+	int cellWidth_;	
+  	int currentCell_;
+	QPen blackPen_;
+	QPen whitePen_;
+};  
+
+class MvQColourListLine : public MvQRequestPanelLine
+{
+Q_OBJECT  
+  
+public:
+	MvQColourListLine(RequestPanel& owner,const Parameter& param);
+	~MvQColourListLine() {};	
+	
+	QString currentValue() {return QString();}
+	void refresh(const vector<string>&);
+	
+public slots: 
+    	void slotListChanged();
+    	void slotCurrentChanged(QColor);
+	void slotHelperEdited(const vector<string>&);
+
+protected:
+	 void updateHelper();
+	 
+	 MvQColourListWidget *widget_;
+	
+};	
+
+#endif
diff --git a/src/Desktop/MvQComboBoxLine.cc b/src/Desktop/MvQComboBoxLine.cc
new file mode 100644
index 0000000..018825c
--- /dev/null
+++ b/src/Desktop/MvQComboBoxLine.cc
@@ -0,0 +1,62 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <QComboBox>
+#include <QDebug>
+
+#include "MvQComboBoxLine.h"
+
+#include "LineFactory.h"
+#include "RequestPanel.h"
+
+MvQComboBoxLine::MvQComboBoxLine(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelLine(owner,param) 
+{
+	cbEdit_ = new QComboBox(parentWidget_);
+	owner_.addWidget(cbEdit_,row_,3);
+
+        param_.scan(*this);
+	
+	connect(cbEdit_,SIGNAL(currentIndexChanged(int)),
+		this,SLOT(slotCurrentChanged(int)));
+	
+	//combo_->setCurrentIndex(dindex);
+}
+	
+
+void MvQComboBoxLine::next(const Parameter&, const char* first,const char* second)
+{
+ 	if(!first) return; 	
+  	QString dataStr=(second)?QString(second):QString(first);	  	  
+	cbEdit_->addItem(QString::fromStdString(param_.beautifiedName(first)),dataStr);	
+}     	
+	
+void MvQComboBoxLine::refresh(const vector<string>& values)
+{
+	if(values.size() > 0)
+	{
+		for(int i=0; i < cbEdit_->count(); i++)
+		{
+		  	if(cbEdit_->itemData(i).toString().toStdString() == values[0])
+				cbEdit_->setCurrentIndex(i);
+		}
+	}	
+			
+	//changed_ = false;
+}	
+
+void MvQComboBoxLine::slotCurrentChanged(int index)
+{
+	if(index >=0 && index < cbEdit_->count())
+  		owner_.set(param_.name(),cbEdit_->itemData(index).toString().toStdString());
+}	
+
+
+static LineMaker<MvQComboBoxLine> maker1("menu");
+static LineMaker<MvQComboBoxLine> maker2("option_menu");
\ No newline at end of file
diff --git a/src/Desktop/MvQComboBoxLine.h b/src/Desktop/MvQComboBoxLine.h
new file mode 100644
index 0000000..e473442
--- /dev/null
+++ b/src/Desktop/MvQComboBoxLine.h
@@ -0,0 +1,46 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQComboBoxLine_H
+#define MvQComboBoxLine_H
+
+#include <QString>
+
+#include "MvQRequestPanelLine.h"
+#include "Parameter.h"
+
+class QComboBox;
+
+class  Request;
+class  RequestPanel;
+
+class MvQComboBoxLine : public MvQRequestPanelLine, public ParameterScanner
+{
+Q_OBJECT  
+  
+public:
+	MvQComboBoxLine(RequestPanel& owner,const Parameter& param);
+		
+	QString currentValue() {return QString();}
+	void addValue(QString) {}
+	
+	void refresh(const vector<string>&);
+
+public slots:	
+        void slotCurrentChanged(int);	
+
+protected:
+	 void next(const Parameter&, const char* first,const char* second);
+	 
+	 QComboBox *cbEdit_;    	
+	
+};	
+
+
+#endif
diff --git a/src/Desktop/MvQContextMenu.cc b/src/Desktop/MvQContextMenu.cc
new file mode 100644
index 0000000..2e274ba
--- /dev/null
+++ b/src/Desktop/MvQContextMenu.cc
@@ -0,0 +1,416 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 <QDebug>
+#include <QShortcut>
+
+#include "MvQContextMenu.h"
+
+#include "Command.h"
+#include "Folder.h"
+#include "IconObject.h"
+#include "MvRequest.h"
+
+MvQContextMenu* MvQContextMenu::instance_=0;
+
+//======================================
+//
+// MvQContextItemSet
+//
+//======================================
+
+MvQContextItemSet::MvQContextItemSet(const std::string& name)
+{
+	MvRequest r;
+	if(const char *dshare=getenv("METVIEW_DIR_SHARE"))
+	{
+		string p(dshare);
+		p+="/etc/UiSpec." + name;
+	  	r.read(p.c_str());
+		if(!r) return;
+		
+		do add(r);
+		while(r.advance());
+	}	
+}	
+  
+void MvQContextItemSet::add(const MvRequest& r)
+{
+	const char* verb=r.getVerb();
+	if(!verb) return;
+	
+	MvQContextItem *item=0;
+	
+	if(strcmp(verb,"icon_menu") ==0)
+	{
+		if((item=MvQContextItem::build(r,icon_))!=0)
+			icon_ << item;
+	}
+	if(strcmp(verb,"group_menu") ==0)
+	{
+	  	if((item=MvQContextItem::build(r,icon_))!=0)
+			multiIcon_ << item;
+	}
+	
+	else if(strcmp(verb,"desktop_menu") ==0)
+	{
+		if((item=MvQContextItem::build(r,desktop_))!=0)
+			desktop_ << item;
+	}
+}
+
+//======================================
+//
+// MvQContextItemCondition
+//
+//======================================
+
+MvQContextItemCondition::MvQContextItemCondition(QString c) :
+     valid_(false)
+{
+  	if(c.isEmpty())
+	  	return;
+  
+  	if(c.contains("!=")) operand_="!=";
+  	else if(c.contains("=")) operand_="=";
+  	else return;
+  	
+  	QStringList lst=c.split(operand_);
+	if(lst.count() == 2)
+	{
+	  	key_=lst[0];
+		value_=lst[1];
+		
+		//Need to resolve items paths
+		if(key_ == "path" && !value_.startsWith("/"))
+		{
+		 	IconObject *wbo=Folder::folder(value_.toStdString().c_str(),false);
+			if(wbo) value_=QString::fromStdString(wbo->fullName());
+		}
+		
+		valid_=true;
+	}
+}
+
+bool MvQContextItemCondition::check(QString c)
+{
+	if(!isValid()) return true;
+	
+  	MvQContextItemCondition cnd(c);
+	if(!cnd.isValid())
+		return true;
+	
+	if(cnd.isValid() && cnd.key() == key_)
+	{
+	  	if(operand_ == "=")
+			return (value_ == cnd.value());
+			
+		else if(operand_ == "!=")
+		  	return (value_ != cnd.value());
+	}
+	
+	return false;
+}	  
+	
+//======================================
+//
+// MvQContextItem
+//
+//======================================
+
+MvQContextItem* MvQContextItem::build(const MvRequest& r,QList<MvQContextItem*> items)
+{	
+	QMenu *parent=0;
+	MvQContextItem* item;
+	
+	const char *verb=r.getVerb();
+	if(verb && strcmp(verb,"group_menu") == 0)
+	{	  
+		const char *icon_menu_id=r("icon_menu_id");
+		if(icon_menu_id)
+		{
+		  	foreach(MvQContextItem* c,items)
+				if(!c->id().isEmpty() && c->id() == QString(icon_menu_id))
+					return c;
+		}
+	}	
+	
+	if(const char *parent_menu=r("parent_menu"))
+	{
+		foreach(MvQContextItem* c,items)
+			if(c->id() == QString(parent_menu))
+			{
+				MvQContextSubMenu* cs=static_cast<MvQContextSubMenu*>(c);
+				if(cs) parent=cs;
+				break;
+			}	
+	}
+	
+  	if(const char *type=r("type"))
+	{
+	  	if(strcmp(type,"separator") == 0)
+		{
+		  	item=new MvQContextSeparator(parent);
+			return (parent)?0:item;
+		}
+		else if(strcmp(type,"submenu") == 0)
+		{
+		  	return new MvQContextSubMenu(r);
+		}
+	}
+	else
+	{
+		item=new MvQContextAction(parent,r);
+		return (parent)?0:item;
+	}
+	
+	return 0;
+}	
+
+MvQContextItem::MvQContextItem() :
+	condition_("")
+{
+}	  
+
+MvQContextItem::MvQContextItem(const MvRequest& r) :
+  condition_(QString(r("condition")))
+{
+  	id_=QString(r("id"));
+	command_=QString(r("cmd"));
+	service_=QString(r("service"));	
+}
+
+bool MvQContextItem::checkCondition(QString txt)
+{
+	return condition_.check(txt);
+}
+
+QString MvQContextItem::iconPath(const MvRequest& r)
+{
+	  if(const char* ic=r("icon")) return ":desktop/" + QString(ic) + ".svg";
+	  return QString();
+}
+
+//======================================
+//
+// MvQContextSubMenu
+//
+//======================================
+
+MvQContextSubMenu::MvQContextSubMenu(QString text,QString iconPath) : 
+  QMenu(0)
+{ 	
+	setTitle(text);
+	if(!iconPath.isEmpty())
+	{
+	  	setIcon(QPixmap(iconPath));
+	}
+}
+
+MvQContextSubMenu::MvQContextSubMenu(const MvRequest& r) : 
+  QMenu(0), 
+  MvQContextItem(r)
+{ 	
+	QString text(r("label"));	
+  	QString ic=iconPath(r);
+	
+  	setTitle(text);
+	if(!ic.isEmpty())
+	{
+	  	setIcon(QPixmap(ic));
+	}
+}
+
+void MvQContextSubMenu::addToMenu(QMenu *m)
+{
+  	if(m)
+	  	m->addMenu(this);
+}
+
+//======================================
+//
+// MvQContextAction
+//
+//======================================
+
+MvQContextAction::MvQContextAction(QMenu *menu,const MvRequest& r) : 
+      QAction(0),
+      MvQContextItem(r)
+{
+  	QString text(r("label"));
+	QString shortcut(r("shortcut"));
+	QString ic=iconPath(r);
+	QString data(r("cmd"));
+	
+	init(text,shortcut,data,ic);
+	if(menu)
+	  	menu->addAction(this);	
+}  
+
+void MvQContextAction::init(QString text,QString shortcut,QString data,QString iconPath)
+{ 	
+	setText(text);
+	setShortcut(shortcut);
+	if(!iconPath.isEmpty())
+	{
+	  	setIcon(QPixmap(iconPath));
+	}
+	setData(data);
+}
+
+void MvQContextAction::addToMenu(QMenu *m)
+{
+  	if(m)
+	  	m->addAction(this);
+}	
+
+QShortcut *MvQContextAction::makeShortCut(QWidget *parent)
+{
+  	if(!shortcut().isEmpty())
+	{
+		QShortcut *sc=new QShortcut(shortcut(),parent);
+		sc->setContext(Qt::WidgetShortcut);
+		sc->setProperty("cmd",id());
+		return sc;
+	}
+	return 0;
+}	
+
+//======================================
+//
+// MvQContextSeparator
+//
+//======================================		
+
+MvQContextSeparator::MvQContextSeparator(QMenu* menu) : 
+  QAction(0)
+{
+  	setSeparator(true);
+	if(menu)
+		menu->addAction(this);
+}
+
+
+void MvQContextSeparator::addToMenu(QMenu *m)
+{
+  	if(m)
+	  	m->addAction(this);
+}
+
+//==================================
+//
+// MvQContextMenu
+//
+//==================================
+
+MvQContextMenu* MvQContextMenu::instance()
+{     
+  	if(!instance_)
+        	instance_= new MvQContextMenu;
+
+	return instance_;
+}
+
+MvQContextMenu::MvQContextMenu()
+{
+}
+
+QString MvQContextMenu::exec(QList<MvQContextItem*> lst,IconObject *obj,QPoint pos,QWidget *parent)
+{	
+	QMenu *menu=new QMenu(parent);	
+	QString retVal;
+	
+	std::set<string> iconCommands=obj->can();
+	
+	foreach(MvQContextItem* item,lst)
+	{	  	  				
+		if(item->command().isEmpty() || iconCommands.find(item->command().toStdString()) != iconCommands.end())
+		{
+			item->addToMenu(menu);
+		}
+	}			
+				
+	if(!menu->isEmpty())
+	{        	  
+	  	QAction *ac=menu->exec(pos);
+		
+		if(!ac || ac->isSeparator())
+		{
+		  	retVal=QString();
+		}
+		else
+			retVal=ac->data().toString();
+	}	
+			
+	delete menu;
+	
+	return retVal;
+}  
+
+QString MvQContextMenu::exec(QList<MvQContextItem*> lst,const std::vector<IconObject*>& objLst,QPoint pos,QWidget *parent)
+{	
+	QMenu *menu=new QMenu(parent);	
+	QString retVal;
+	
+	foreach(MvQContextItem* item,lst)
+	{	  	  				
+		bool shared=true;
+		for(std::vector<IconObject*>::const_iterator it=objLst.begin(); it != objLst.end(); it++)
+		{
+	  		std::set<string> iconCommands=(*it)->can();
+		  	if(!item->command().isEmpty() && iconCommands.find(item->command().toStdString()) == iconCommands.end())
+			{
+				  shared = false;
+				  break;
+			}	
+		}
+		if(shared == true)
+			item->addToMenu(menu);
+	}			
+				
+	if(!menu->isEmpty())
+	{        	  
+	  	QAction *ac=menu->exec(pos);
+		
+		if(!ac || ac->isSeparator())
+		{
+		  	retVal=QString();
+		}
+		else
+			retVal=ac->data().toString();
+	}	
+			
+	delete menu;
+	
+	return retVal;
+}  
+
+QString MvQContextMenu::exec(QList<MvQContextItem*> lst,QPoint pos,QWidget *parent,QString condition)
+{	
+	QMenu *menu=new QMenu(parent);	
+	QString retVal;
+	
+	foreach(MvQContextItem* item,lst)
+	{
+	  	if(item->checkCondition(condition))
+	  		item->addToMenu(menu);
+	}
+	
+	if(!menu->isEmpty())
+	{        	  
+	  	QAction *ac=menu->exec(pos);
+		
+		if(ac && !ac->isSeparator())
+		  	retVal=ac->data().toString();
+	}	
+			
+	delete menu;
+	
+	return retVal;
+}  
diff --git a/src/Desktop/MvQContextMenu.h b/src/Desktop/MvQContextMenu.h
new file mode 100644
index 0000000..44ca788
--- /dev/null
+++ b/src/Desktop/MvQContextMenu.h
@@ -0,0 +1,132 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQContextMenu_H
+#define MvQContextMenu_H
+
+#include <QAction>
+#include <QList>
+#include <QMenu>
+#include <QPoint>
+#include <QSet>
+#include <QString>
+
+#include <string>
+#include <vector>
+
+class QMenu;
+class QObject;
+class QShortcut;
+
+class IconObject;
+class MvRequest;
+
+class MvQContextItem;
+
+class MvQContextItemSet
+{
+public:
+  	MvQContextItemSet(const std::string& name);
+	QList<MvQContextItem*> icon() const {return icon_;}
+	QList<MvQContextItem*> multiIcon() const {return multiIcon_;}
+	QList<MvQContextItem*> desktop() const {return desktop_;}
+	
+private:
+  	void add(const MvRequest&);
+    	QList<MvQContextItem*> icon_;
+	QList<MvQContextItem*> multiIcon_;
+	QList<MvQContextItem*> desktop_;
+};	
+
+class MvQContextItemCondition
+{
+public:
+    	MvQContextItemCondition(QString);
+	bool check(QString);
+	bool isValid() const {return valid_;}
+	
+protected:	
+	QString operand() const {return operand_;}
+	QString key() const {return key_;}
+	QString value() const {return value_;}
+	
+	QString operand_;
+	QString key_;
+	QString value_;
+	bool valid_;
+	
+};
+
+class MvQContextItem
+{
+public:
+  	MvQContextItem();
+  	MvQContextItem(const MvRequest& r);
+  	
+	QString id() const {return id_;};
+	QString command() const {return command_;};
+	QString service() const {return service_;};
+	virtual void addToMenu(QMenu*)=0;
+	virtual QShortcut* makeShortCut(QWidget*)=0;
+	bool checkCondition(QString);	
+	static MvQContextItem* build(const MvRequest& r,QList<MvQContextItem*> items);
+	
+protected:
+    	QString iconPath(const MvRequest& r);
+	
+	MvQContextItemCondition condition_;
+	QString id_;
+	QString command_;
+	QString service_;
+}; 
+
+class MvQContextSubMenu : public QMenu, public MvQContextItem
+{
+public:
+    	MvQContextSubMenu(QString,QString iconPath=QString());
+	MvQContextSubMenu(const MvRequest& r);
+	void addToMenu(QMenu*);
+	QShortcut* makeShortCut(QWidget*) {return 0;};
+};
+
+class MvQContextAction : public QAction, public MvQContextItem
+{
+public:
+  	MvQContextAction(QMenu*,const MvRequest& r);
+	void addToMenu(QMenu*);
+	QShortcut* makeShortCut(QWidget *); 
+
+protected:	
+	void init(QString,QString,QString,QString);  	
+};
+
+class MvQContextSeparator : public QAction, public MvQContextItem
+{
+public:
+    	MvQContextSeparator(QMenu* menu=0);
+	void addToMenu(QMenu*);
+	QShortcut* makeShortCut(QWidget *) {return 0;}
+};  
+
+class MvQContextMenu 
+{
+public:
+	MvQContextMenu();
+	static MvQContextMenu* instance();
+	
+	QString exec(QList<MvQContextItem*>,IconObject *,QPoint,QWidget *);
+	QString exec(QList<MvQContextItem*> lst,const std::vector<IconObject*>& objLst,QPoint pos,QWidget *parent);
+	QString exec(QList<MvQContextItem*> lst,QPoint pos,QWidget *parent,QString condition=QString());
+	
+protected:	
+	static MvQContextMenu* instance_;
+};  
+
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQDesktop.cc b/src/Desktop/MvQDesktop.cc
new file mode 100644
index 0000000..a979756
--- /dev/null
+++ b/src/Desktop/MvQDesktop.cc
@@ -0,0 +1,213 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 <QDebug>
+
+#include "MvQDesktop.h"
+
+#include "MvQBookmarks.h"
+#include "MvQDrawerPanel.h"
+#include "MvQFileBrowser.h"
+#include "MvQMessageBox.h"
+
+#include "ConfigLoader.h"
+#include "Drop.h"
+#include "IconClass.h"
+#include "IconObject.h"
+#include "Folder.h"
+#include "Items.h"
+#include "Path.h"
+#include "Protocol.h"
+#include "MvRequest.h"
+//#include "PmContext.h"
+#include "MvTemplates.h"
+
+static void drop_request(svcid *id,request *r,void *data);
+static void reply_request(svcid *id,request *r,void *data);
+
+MvQDesktop::MvQDesktop(int &argc, char **argv,string appName) :  
+		MvQApplication(argc,argv,appName.c_str())
+		
+{		
+        //-----------------------------------------------------------
+  	// Initialise Qt resorces from static libraries (libMvQtGui)
+	//-----------------------------------------------------------
+	
+	Q_INIT_RESOURCE(window);
+	Q_INIT_RESOURCE(find);
+}
+
+MvQDesktop::~MvQDesktop()
+{
+}	
+
+void MvQDesktop::init()
+{		
+	//QPalette pal=QApplication::palette();
+	//pal.setBrush(QPalette::Window,QColor(190,216,238));
+	//QApplication::setPalette(pal);
+		
+	//---------------------------
+  	// Load resources
+	//---------------------------
+ 
+        QIcon icon;
+	
+	int order = 0;
+        bool more = true;
+ 
+	//marsinit(&argc,argv,0,0,0);
+
+	while(more || order <=2)
+        {
+                more = false;
+                request  *r = mars.setup;
+                while (r) 
+		{
+                        //MvRequest mvr(r);
+			//mvr.print();
+			//if(strcmp(r->name,"state") == 0)
+			//	qDebug() << "state";
+			if(ConfigLoader::process(r,order))
+                                 more = true;
+                        r = r->next;
+		}
+                order++;
+         }
+         
+         
+	//-----------------------------
+	// Protocol
+	//-----------------------------
+
+	Protocol::init();
+        
+	// Register this service
+	//registerTMvServe(*this,0);
+	
+	//-----------------------
+	// Special folders
+	//-----------------------
+
+	Items::createAll();
+	
+	//-------------------------------------
+	// Bookmarks - this needs the items!
+	//-------------------------------------
+	
+	MvQBookmarks::init();
+	
+	//------------------------------
+	// Start browsers
+	//------------------------------
+
+	MvQFileBrowser::init();
+     
+     	//------------------------------------------------
+	//Add drop callback to handle drops to uPlot
+	//------------------------------------------------
+	
+	add_drop_callback(MvApplication::getService(),NULL,drop_request,NULL);
+	
+	add_reply_callback(MvApplication::getService(),NULL,reply_request,NULL);
+}
+
+
+//This request is sent from uPlot when an icon is dropped from Desktop to uPlot.
+static void drop_request(svcid *id,request *r,void */*data*/)
+{
+  	//print_all_requests(r);
+	
+	MvRequest req = get_subrequest(r,"HEADER",0);
+		
+	//Service name
+	const char* serviceCh=get_svc_source(id);
+	if(!serviceCh)
+		return;
+	
+	string serviceName(serviceCh);	
+	req("_SERVICE") = serviceCh;
+	
+	//Context
+	req("_CONTEXT") = get_subrequest(r,"_CONTEXT",0);
+	
+	//Mode
+	MvRequest mode = get_subrequest(r,"MODE",0);
+	
+	std::set<IconObject*> icons;
+	
+	//Icons 
+	int cnt = req.iterInit("ICON_NAME" );
+	for(int i=0; i<cnt; i++)			
+	{
+	  	//Icon name
+		const char* iconChName;
+	  	req.iterGetNextValue(iconChName);
+	
+		//Find the iconobject
+		if(iconChName)
+		{  
+			string iconName(iconChName);
+			IconObject* obj=IconObject::search(iconName);
+			if(obj)
+				icons.insert(obj);
+		}
+	}	
+	
+	//Action type
+	int action=atoi(get_value(r,"ACTION",0));
+	
+	if(action == 3)
+	{
+		//Who will delete it????
+		new Drop(icons,req,serviceName,mode);
+	}
+}
+
+static void reply_request(svcid *id,request *r,void */*data*/)
+{
+ 	cout << "reply" << endl;
+	
+  	print_all_requests(r);
+	
+	//MvRequest req = get_subrequest(r,"HEADER",0);
+	
+	if(r && strcmp(r->name,"MESSAGE") == 0)
+	{	  	
+		MvQMessageBox m(r);
+	}	
+}	
+	
+
+// Serve Method
+// called by MvTransaction to process the request
+void
+MvQDesktop::serve ( MvProtocol& /*proto*/, MvRequest& inRequest )
+{
+	inRequest.print();
+  
+  	// Create a new context, based on the input Request
+	//PmContext * context = new PmContext ( proto, inRequest );
+
+	// Increment the reference counting
+	//context->Attach();
+
+	// Execute the context
+	//context->Execute();showBrowsers()
+
+	// Decrement the reference counting
+//	context->Detach();
+}
+
+
+void MvQDesktop::showBrowsers()
+{
+	MvQFileBrowser::showBrowsers();
+}  
+
diff --git a/src/Desktop/MvQDesktop.h b/src/Desktop/MvQDesktop.h
new file mode 100644
index 0000000..edab058
--- /dev/null
+++ b/src/Desktop/MvQDesktop.h
@@ -0,0 +1,34 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQDesktop_H
+#define MvQDesktop_H
+ 
+#include <QString>
+
+#include "MvQApplication.h"
+#include "MvRequest.h"
+#include "MvProtocol.h"
+
+using namespace std;
+
+class MvQDesktop : public MvQApplication 
+{
+public:  
+	MvQDesktop(int &argc, char **argv,string); 
+	~MvQDesktop();
+
+	void init();
+	void showBrowsers();
+	
+	// Processing the request
+	virtual void serve (MvProtocol&,MvRequest&);
+};
+
+#endif
diff --git a/src/Desktop/MvQDesktopSettings.cc b/src/Desktop/MvQDesktopSettings.cc
new file mode 100644
index 0000000..2e7e524
--- /dev/null
+++ b/src/Desktop/MvQDesktopSettings.cc
@@ -0,0 +1,59 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQDesktopSettings.h"
+
+#include <QStringList>
+
+MvQ::FolderViewMode MvQDesktopSettings::viewMode_=MvQ::IconViewMode;
+int MvQDesktopSettings::iconSize_=32;
+QList<bool> MvQDesktopSettings::headerVisible_;
+QList<int> MvQDesktopSettings::headerIndex_;
+
+//Writing/reading QLists for QSettings did not work whatever we 
+//tried with Q_DECLARE_METATYPE and qRegisterMetaType 
+//(got error: QVariant::load: unable to load type 257). 
+//So instead we need to use QStringlist here.
+
+void MvQDesktopSettings::writeSettings(QSettings& settings)
+{
+  	settings.beginGroup("detailedView");
+	
+	QStringList lst;
+	foreach(bool b,headerVisible_) lst << QString::number((b)?1:0);	  
+	settings.setValue("headerVisible",lst);
+		
+	lst.clear();
+	foreach(int i,headerIndex_) lst << QString::number(i);	
+	settings.setValue("headerIndex",lst);
+	
+	settings.endGroup();	  
+}
+
+void MvQDesktopSettings::readSettings(QSettings& settings)
+{
+  	settings.beginGroup("detailedView");
+	
+	headerVisible_.clear();
+		
+	QStringList lst=settings.value("headerVisible").toStringList();	
+	foreach(QString v,lst) 
+	{
+	  	bool b=(v == "1")?true:false;
+	  	headerVisible_ << b;
+	}
+
+	headerIndex_.clear();
+	lst=settings.value("headerIndex").toStringList();
+	foreach(QString v,lst ) headerIndex_ << v.toInt();
+	
+	settings.endGroup();	  
+}
+
+static MvQDesktopSettings globalInfo;
\ No newline at end of file
diff --git a/src/Desktop/MvQDesktopSettings.h b/src/Desktop/MvQDesktopSettings.h
new file mode 100644
index 0000000..2091b85
--- /dev/null
+++ b/src/Desktop/MvQDesktopSettings.h
@@ -0,0 +1,32 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQDesktopSettings_H
+#define MvQDesktopSettings_H
+
+#include <QList>
+#include <QSettings>
+
+#include "MvQ.h"
+
+class MvQDesktopSettings
+{
+public:
+    	MvQDesktopSettings(){};
+
+	static MvQ::FolderViewMode viewMode_;
+	static int iconSize_;
+	static QList<bool> headerVisible_;
+	static QList<int> headerIndex_;
+
+	static void writeSettings(QSettings&);
+	static void readSettings(QSettings&);
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQDetailedFolderView.cc b/src/Desktop/MvQDetailedFolderView.cc
new file mode 100644
index 0000000..eb8ca71
--- /dev/null
+++ b/src/Desktop/MvQDetailedFolderView.cc
@@ -0,0 +1,589 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 <QAction>
+#include <QApplication>
+#include <QDataStream>
+#include <QDebug>
+#include <QDrag>
+#include <QHeaderView>
+#include <QMenu>
+#include <QMouseEvent>
+#include <QPainter>
+#include <QScrollBar>
+#include <QShortcut>
+
+#include "MvQDetailedFolderView.h"
+
+#include "MvQContextMenu.h"
+#include "MvQFolderViewDelegate.h"
+#include "MvQFolderModel.h"
+#include "MvQDesktopSettings.h"
+#include "MvQIconMimeData.h"
+#include "MvQIconProvider.h"
+
+#include "Folder.h"
+#include "IconClass.h"
+
+static QList<MvQDetailedFolderView*> views; 
+
+MvQDetailedFolderView::MvQDetailedFolderView(MvQFolderModel *folderModel,QWidget *parent) : 
+    QTreeView(parent), 
+    MvQFolderViewBase(folderModel),
+    moveActionEnabled_(true)
+{
+	views << this;
+  
+  	setRootIsDecorated(false);
+	setSortingEnabled(true); 
+	sortByColumn(0,Qt::AscendingOrder); 
+	//setAlternatingRowColors(true);
+        setAllColumnsShowFocus(true);
+	setUniformRowHeights(true);
+	
+	//Drag and drop
+	setDragEnabled(true);
+ 	setAcceptDrops(true);
+ 	setDropIndicatorShown(true);
+	setDragDropMode(QAbstractItemView::DragDrop);
+	
+	setModel(filterModel_);
+	setContextMenuPolicy(Qt::CustomContextMenu);
+	
+	//Delegate
+	delegate_=new MvQDetailedViewDelegate(this);
+	setItemDelegate(delegate_);
+	
+	connect(delegate_,SIGNAL(repaintIt(const QModelIndex&)),
+		this,SLOT(update(const QModelIndex&)));
+	
+	setMouseTracking(true);
+	
+	setSelectionMode(QAbstractItemView::ExtendedSelection);
+	
+	//Context menu 
+    	connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
+                this, SLOT(slotContextMenu(const QPoint &)));
+				
+	connect(this,SIGNAL(doubleClicked(const QModelIndex&)),
+		this,SLOT(slotDoubleClickItem(const QModelIndex)));
+	
+	connect(this,SIGNAL(entered(const QModelIndex&)),
+		this,SLOT(slotEntered(const QModelIndex&)));
+		
+	//Selection form the list
+	connect(this,SIGNAL(clicked(const QModelIndex&)),
+		this,SLOT(slotSelectItem(const QModelIndex)));
+			
+	connect(folderModel_,SIGNAL(iconSizeChanged()),
+		this,SLOT(slotIconSizeChanged()));	
+		
+	connect(folderModel_,SIGNAL(objectRenamed(const QModelIndex&,QString)),	
+		this,SLOT(slotObjectRenamed(const QModelIndex& ,QString)));	
+	
+	//Set header ContextMenuPolicy	
+	header()->setMovable(false);
+	header()->setContextMenuPolicy(Qt::CustomContextMenu);
+
+	connect(header(),SIGNAL(customContextMenuRequested(const QPoint &)),
+                this, SLOT(slotHeaderContextMenu(const QPoint &)));
+
+	//init header
+	updateHeader();	
+	
+	
+	for(int i=0; i < folderModel_->columnCount(QModelIndex())-1; i++)
+	  	resizeColumnToContents(i);
+	
+	
+	/*connect(header(),SIGNAL(sectionMoved(int,int,int)),
+                this, SLOT(slotMessageTreeColumnMoved(int,int,int)));*/
+}
+
+MvQDetailedFolderView::~MvQDetailedFolderView()
+{
+  	views.removeOne(this);
+}
+
+MvQContextItemSet* MvQDetailedFolderView::cmSet()
+{
+	static MvQContextItemSet cmItems("DetailedFolderView");  
+  	return &cmItems;
+}
+
+
+void MvQDetailedFolderView::slotSelectItem(const QModelIndex& /*index*/)
+{	
+	/*if(isFolder(index,FilterModelIndex))
+	{   
+		changeFolder(index,FilterModelIndex);
+		emit currentFolderChanged(currentFolder());
+
+	}*/
+}
+
+void MvQDetailedFolderView::slotDoubleClickItem(const QModelIndex& index)
+{	 	
+	handleDoubleClick(index);
+}
+
+void  MvQDetailedFolderView::slotEntered(const QModelIndex& index)
+{  	
+	emit itemEntered(itemInfo(index,FilterModelIndex));
+}
+
+void MvQDetailedFolderView::setupShortCut()
+{
+  	if(shortCutInit_)
+	  	return;
+	else
+	  	shortCutInit_=true;
+	
+	/*foreach(MvQContextItem *cm,cmIconItems_)
+	{
+	  	QShortcut *sc=cm->makeShortCut(this);
+		
+	  	if(sc)
+		{
+		  	connect(sc,SIGNAL(activated()),
+				this,SLOT(slotIconShortCut()));
+		}
+	}*/
+	
+	if(MvQContextItemSet *cms=cmSet())
+	{
+		foreach(MvQContextItem *cm,cms->icon())
+		{
+	  		QShortcut *sc=cm->makeShortCut(this);
+		
+	 	 	if(sc)
+			{
+		  		connect(sc,SIGNAL(activated()),
+					this,SLOT(slotIconShortCut()));
+			}
+		}	
+	}
+}
+
+void MvQDetailedFolderView::slotIconShortCut()
+{
+	QShortcut *sc=static_cast<QShortcut*>(QObject::sender());
+  	if(sc)
+	{	QModelIndexList lst=selectedIndexes();
+		if(lst.count() > 0)
+		  	handleIconShortCut(sc,lst.at(0));
+	}	
+}
+
+void MvQDetailedFolderView::slotContextMenu(const QPoint &position)
+{
+	QModelIndexList lst;
+	foreach(QModelIndex idx,selectedIndexes())	
+	  	if(idx.column() == 0)
+		  	lst << idx;
+	
+	//QModelIndex index=indexAt(position);	
+	QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+	
+	handleContextMenu(indexAt(position),lst,mapToGlobal(position),position+scrollOffset,this);
+}
+
+void MvQDetailedFolderView::folderChanged()
+{
+  	emit currentFolderChanged(currentFolder());	
+}
+
+void MvQDetailedFolderView::iconCommand(QString name,IconObjectH obj)
+{
+	emit iconCommandRequested(name,obj);
+}
+
+void MvQDetailedFolderView::slotObjectRenamed(const QModelIndex& sourceIndex,QString /*oriName*/)
+{
+	QModelIndex index=filterModel_->mapFromSource(sourceIndex);
+	dataChanged(index,index);	
+}  
+
+//=================================================
+//
+//  Drag and drop. We need this cutom implementation 
+//  because the solution offered by the model-view
+//  framework was not satisfactory.
+//
+//=================================================
+
+//===========================
+// Drag
+//===========================
+
+void MvQDetailedFolderView::mousePressEvent(QMouseEvent *event)
+{
+  	if( event->button() == Qt::LeftButton || event->button() == Qt::MidButton)
+	{
+		startPos_=event->pos();
+	}
+		
+	QTreeView::mousePressEvent(event);
+}
+
+void MvQDetailedFolderView::mouseMoveEvent(QMouseEvent *event)
+{
+	if(event->buttons() & (Qt::LeftButton | Qt::MidButton))
+	{
+		int distance = (event->pos() - startPos_).manhattanLength();
+		if(distance >= QApplication::startDragDistance())
+		{
+		  	if(moveActionEnabled_)
+			{  		  
+		  		if(event->buttons() & Qt::LeftButton)		  
+		  			performDrag(Qt::MoveAction,event->pos());
+				else if(event->buttons() & Qt::MidButton)
+			  		performDrag(Qt::CopyAction,event->pos());
+			}
+			else
+			{
+			  	performDrag(Qt::CopyAction,event->pos());
+			}
+		}	
+	}
+	
+	QTreeView::mouseMoveEvent(event);
+}
+
+void MvQDetailedFolderView::performDrag(Qt::DropAction dropAction,QPoint pos)
+{
+	//We need only one index (the first column) for each row	
+  	QModelIndexList lstSel=selectedIndexes();
+	QModelIndexList lst;
+	QSet<int> rows;
+	foreach(QModelIndex index,lstSel)
+	{
+	 	if(!rows.contains(index.row())) 	
+		{
+		  	rows << index.row();
+		  	lst << filterModel_->index(index.row(),0);
+		}
+	}
+		
+	QModelIndex viewIndex=indexAt(pos);
+	QModelIndex index=filterModel_->mapToSource(viewIndex);
+
+	if(lst.contains(viewIndex) && index.isValid())
+	{
+		IconObject* dragObj=folderModel_->objectFromIndex(index);
+		
+		//No drag for edited icons
+		if(dragObj && !dragObj->editor())
+		{				  	
+		  	qDebug() << "drag" << dragObj->name().c_str(); 
+		  		  	
+			//Create drag object
+			QDrag *drag = new QDrag(this);
+			
+			//List of object to drag
+			QList<IconObject*> objLst;
+			foreach(QModelIndex idx,lst)
+			{
+			  	objLst << folderModel_->objectFromIndex(idx);
+			}		
+			
+			//Create and set the drag pixmap and set hotspot			
+			QPoint hotSpotInRect;			
+			if(lst.count() > 1)
+			{ 
+				//Find bounding box for selected visrects
+				QRect bbox;
+				foreach(QModelIndex idx,lst)
+				{
+					QRect vr=visualRect(idx);
+					vr.setWidth(getIconSize());
+				  	bbox=bbox.united(vr);
+				}
+				
+				//Render the drag pixmap
+				QPixmap pix(bbox.size());
+				pix.fill(Qt::transparent);
+				QPainter painter(&pix);
+				
+				for(int i=0; i < objLst.count(); i++)
+				{
+			 		QRect vr=visualRect(lst[i]);
+					vr.setWidth(getIconSize());
+			  		painter.drawPixmap(vr.topLeft()-bbox.topLeft(),
+						   MvQIconProvider::pixmap(objLst.at(i)->iconClass(),getIconSize()));			
+				}
+				
+				drag->setPixmap(pix);
+				
+				//Find the hotspot
+				QRect rect=visualRect(viewIndex);
+				rect.setWidth(getIconSize());
+				hotSpotInRect=pos-rect.topLeft();
+				QPoint hotSpot(pos.x()-rect.center().x()+getIconSize()/2,pos.y()-rect.top());
+				hotSpot=rect.topLeft()-bbox.topLeft()+hotSpot;
+				drag->setHotSpot(hotSpot);
+			}
+			else
+			{  			
+				drag->setPixmap(MvQIconProvider::pixmap(dragObj->iconClass(),getIconSize()));
+				
+				QRect rect=visualRect(viewIndex);
+				rect.setWidth(getIconSize());
+				hotSpotInRect=pos-rect.topLeft();
+				QPoint hotSpot(pos.x()-rect.center().x()+getIconSize()/2,pos.y()-rect.top());
+				drag->setHotSpot(hotSpot);
+			}
+			
+	
+			//Create and set drag mime data
+			MvQIconMimeData *mimeData= new MvQIconMimeData(folderModel_,
+								       dragObj,hotSpotInRect,
+								       objLst);
+			drag->setMimeData(mimeData);
+			
+			if(drag->exec(dropAction)  == dropAction)
+			{
+			}								  
+		}
+	}	
+}	
+
+/*
+QModelIndex index=filterModel_->mapToSource(indexAt(pos));
+	
+	if(index.isValid())
+	{
+		IconObject* obj=folderModel_->objectFromIndex(index);
+		if(obj)
+		{		
+		  	//No drag for edited icons
+			//if(obj->editor())
+			//	return;  
+			
+			QRect rect=visualRect(currentIndex());
+			QPoint hotSpot(getIconSize()/2,getIconSize()/2);
+			QPoint centeredHotSpot(getIconSize()/2,getIconSize()/2);
+					       
+			MvQIconMimeData *mimeData= new MvQIconMimeData(folderModel_,obj,rect,centeredHotSpot);
+			//mimeData->setFromHelper(helper_);
+			
+			QDrag *drag = new QDrag(this);
+			drag->setPixmap(MvQPixmapProvider::find(getIconSize())->pixmap(obj->iconClass()));
+			drag->setHotSpot(hotSpot);
+			drag->setMimeData(mimeData);	
+			
+			qDebug() << "drag" << rect << pos << hotSpot;
+			
+			qDebug() << "drag" << mimeData->path() << mimeData->className();
+			
+			if(drag->exec(dropAction)  == dropAction)
+			{
+			}								  
+		}
+	}	
+}	
+*/	
+	
+
+//===========================
+// Drop
+//===========================
+
+void MvQDetailedFolderView::dragEnterEvent(QDragEnterEvent *event)
+{
+	//qDebug() << event->mimeData()->formats();
+	//qDebug() << event->mimeData()->text();
+	//qDebug() << event->proposedAction();
+	
+	if(event->source() &&
+	   (event->proposedAction() == Qt::CopyAction ||
+	    event->proposedAction() == Qt::MoveAction))
+	{
+		//event->setDropAction(Qt::CopyAction);
+		event->accept();
+	}
+	else  
+		event->ignore();
+}
+
+void MvQDetailedFolderView::dragMoveEvent(QDragMoveEvent *event)
+{
+	if(event->source() &&
+	   (event->proposedAction() == Qt::CopyAction ||
+	    event->proposedAction() == Qt::MoveAction))
+	{
+		event->accept();
+	}
+	else
+		event->ignore();
+}
+
+void MvQDetailedFolderView::dropEvent(QDropEvent *event)
+{
+	qDebug() << "dropEvent" << folderModel_->fullName();
+	
+	if(folderModel_->folder()->locked())
+	{
+	  	event->ignore();
+		return;
+	}
+	
+	if(!event->source())
+	{
+	  	event->ignore();
+		return;
+	}	
+	
+	if(event->proposedAction() != Qt::CopyAction &&
+	   event->proposedAction() != Qt::MoveAction)
+	{
+	  	event->ignore();
+		return;
+	}	
+	
+	QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+	QPoint pos=event->pos()+scrollOffset;
+	
+	//--------------------------------------
+	// Drag and drop from another folder
+	//--------------------------------------
+	
+	if(event->mimeData()->hasFormat("metview/icon"))
+	{	
+		const MvQIconMimeData* mimeData=qobject_cast<const MvQIconMimeData*>(event->mimeData());
+				
+		if(!mimeData)
+		{
+			event->ignore();
+			return;
+		}	
+	
+		IconObject* dragObj=mimeData->dragObject();
+		QList<IconObject*> objLst=mimeData->objects();
+		MvQFolderModel *model=mimeData->model();
+				
+		//Drop from another view/model  --> copy or move
+		if(model && dragObj && 
+		   model != folderModel_ && model->folder() != folderModel_->folder())
+		{			
+			foreach(IconObject* obj, objLst)
+			{					  
+				//Cannot move/copy edited icons into another folder!!!
+				if(!obj->editor() && isAccepted(obj))
+				{
+				  	if(event->proposedAction() == Qt::CopyAction || moveActionEnabled_== false)
+					{					  
+					  	obj->clone(folderModel_->folder(),false);
+					}	
+				
+					else if(event->proposedAction() == Qt::MoveAction)
+					{  			
+						folderModel_->folder()->adopt(obj);
+					}
+				}	
+			}
+		}
+				
+		event->accept();
+		return;
+	}
+	
+	event->ignore();	
+}
+
+//=========================================
+// Icons
+//=========================================
+
+void MvQDetailedFolderView::slotIconSizeChanged()
+{
+  	reset();
+	for(int i=0; i < folderModel_->columnCount(QModelIndex())-1; i++)
+	  	resizeColumnToContents(i);
+}	
+
+void MvQDetailedFolderView::blink(const QModelIndex& index)
+{
+  	scrollTo(index);
+  	delegate_->blink(index);
+}  
+
+//=========================================
+// Header
+//=========================================
+
+void MvQDetailedFolderView::slotHeaderContextMenu(const QPoint &position)
+{
+	int section=header()->logicalIndexAt(position); 
+	
+	if(section< 0 || section >= header()->count())
+		return;
+
+	QList<QAction*> lst;
+	QMenu *menu=new QMenu(this);	
+	QAction *ac;
+	
+	for(int i=0; i <header()->count(); i++)
+	{
+	  	QString name=header()->model()->headerData(i,Qt::Horizontal).toString();
+		ac=new QAction(menu);
+		ac->setText(name);
+		ac->setCheckable(true);
+		ac->setData(i);
+		
+		if(i==0)
+		{
+		  	ac->setChecked(true);
+			ac->setEnabled(false);
+		}
+		else
+		{  
+			ac->setChecked(!(header()->isSectionHidden(i)));
+		}
+		
+		menu->addAction(ac);
+	}	
+		
+	ac=menu->exec(header()->mapToGlobal(position));
+	if(ac && ac->isEnabled() && ac->isCheckable())
+	{
+	  	int i=ac->data().toInt();
+	  	header()->setSectionHidden(i,!ac->isChecked());
+		MvQDesktopSettings::headerVisible_[i]=ac->isChecked();		
+		broadcastHeaderChange();	
+	}	
+	delete menu;
+}
+
+void MvQDetailedFolderView::updateHeader()
+{
+	if(header()->count() != MvQDesktopSettings::headerVisible_.count())
+	{
+	  	MvQDesktopSettings::headerVisible_.clear();
+		
+ 		for(int i=0; i < header()->count(); i++)
+				MvQDesktopSettings::headerVisible_ << !header()->isSectionHidden(i);
+		
+		qDebug() << MvQDesktopSettings::headerVisible_;
+	}
+	else
+	{  		  
+  		for(int i=0; i < MvQDesktopSettings::headerVisible_.count(); i++)
+		{
+			if(i!=0) 
+				header()->setSectionHidden(i,!MvQDesktopSettings::headerVisible_[i]);
+		}
+	}	
+}
+
+void MvQDetailedFolderView::broadcastHeaderChange()
+{
+  	foreach(MvQDetailedFolderView *v,views)
+		  	v->updateHeader();
+}	
\ No newline at end of file
diff --git a/src/Desktop/MvQDetailedFolderView.h b/src/Desktop/MvQDetailedFolderView.h
new file mode 100644
index 0000000..9c98301
--- /dev/null
+++ b/src/Desktop/MvQDetailedFolderView.h
@@ -0,0 +1,76 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQDetailedFolderView_H
+#define MvQDetailedFolderView_H
+
+#include <QSettings>
+#include <QTreeView>
+
+#include "MvQFolderViewBase.h"
+
+class MvQContextItemSet;
+class MvQDetailedViewDelegate;
+
+class Folder;
+
+#include "IconObject.h"
+
+class MvQDetailedFolderView : public QTreeView, public MvQFolderViewBase
+{
+Q_OBJECT
+
+public:
+	MvQDetailedFolderView(MvQFolderModel *,QWidget *parent=0);
+  	~MvQDetailedFolderView();
+	static void writeGlobalSettings(QSettings&);
+	static void readGlobalSettings(QSettings&);
+	
+public slots:
+  	void slotIconShortCut();
+	void slotContextMenu(const QPoint &);
+	void slotSelectItem(const QModelIndex&);
+	void slotEntered(const QModelIndex&);
+	void slotDoubleClickItem(const QModelIndex&);
+	void slotObjectRenamed(const QModelIndex&,QString);
+	void slotIconSizeChanged();
+	void slotHeaderContextMenu(const QPoint &);
+	
+signals:
+        void currentFolderChanged(Folder*); 
+	void itemEntered(QString);
+	void iconCommandRequested(QString,IconObjectH);
+	void desktopCommandRequested(QString,QPoint);
+	
+protected:
+	MvQContextItemSet* cmSet();
+	void setupShortCut();
+	void setPositions() {};
+	void blink(const QModelIndex&);
+	
+	void mousePressEvent(QMouseEvent*);
+	void mouseMoveEvent(QMouseEvent*);
+	void performDrag(Qt::DropAction,QPoint);
+	void dragEnterEvent(QDragEnterEvent*);
+	void dragMoveEvent(QDragMoveEvent*);
+ 	void dropEvent(QDropEvent*);  
+	
+	void folderChanged();
+	virtual void iconCommand(QString,IconObjectH);
+	virtual void desktopCommand(QString,QPoint) {};
+	
+	static void broadcastHeaderChange();
+	void updateHeader();
+	
+	QPoint startPos_;
+	bool moveActionEnabled_;
+	MvQDetailedViewDelegate* delegate_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQDrawerPanel.cc b/src/Desktop/MvQDrawerPanel.cc
new file mode 100644
index 0000000..838c8c0
--- /dev/null
+++ b/src/Desktop/MvQDrawerPanel.cc
@@ -0,0 +1,255 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 <QDebug>
+#include <QHBoxLayout>
+#include <QMouseEvent>
+#include <QStackedWidget>
+#include <QStyle>
+#include <QTabBar>
+#include <QToolButton>
+#include <QVBoxLayout>
+
+#include "MvQDrawerPanel.h"
+
+#include "MvQContextMenu.h"
+
+//==============================================
+//  	
+//     MvQDrawerTabBar
+//  	
+//==============================================  
+
+MvQDrawerTabBar::MvQDrawerTabBar(QWidget *parent) : QTabBar(parent)
+{
+}
+
+void MvQDrawerTabBar::mousePressEvent(QMouseEvent *event)
+{
+	if(event->button() == Qt::LeftButton)
+	{
+	  	event->ignore();
+	  	emit leftClicked(tabAt(event->pos()));
+		return;
+	}
+	
+	QTabBar::mousePressEvent(event);
+}  
+
+//==============================================
+//  	
+//     MvQDrawerPanel
+//  	
+//==============================================  	
+
+MvQDrawerPanel::MvQDrawerPanel(QWidget* parent) : 
+       QWidget(parent),
+       sorted_(true)        
+{	
+
+	QVBoxLayout *layout=new QVBoxLayout(this);
+	layout->setSpacing(0); 
+	layout->setContentsMargins(0,0,0,0);
+	
+	barLayout_=new QHBoxLayout;
+	barLayout_->setSpacing(0); 
+	barLayout_->setContentsMargins(0,0,0,0);
+	layout->addLayout(barLayout_);
+		
+	bar_=new MvQDrawerTabBar(this);
+
+	//bar_->setDrawBase(false);
+	bar_->setDocumentMode(true); 
+	bar_->setExpanding(true);
+	barLayout_->addWidget(bar_);
+
+	stacked_=new QStackedWidget(this);
+	stacked_->setFixedHeight(80);
+	stacked_->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
+	
+	layout->addWidget(stacked_);
+		
+	connect(bar_, SIGNAL(currentChanged(int)),
+		stacked_,SLOT(setCurrentIndex(int)));
+		
+	connect(bar_, SIGNAL(leftClicked(int)),
+		this,SLOT(slotTabClicked(int)));	
+	
+	//Contextmenu
+	bar_->setContextMenuPolicy(Qt::CustomContextMenu);
+	connect(bar_, SIGNAL(customContextMenuRequested(const QPoint &)),
+		this,SLOT(slotContextMenu(const QPoint &)));
+		
+}		
+
+MvQDrawerPanel::~MvQDrawerPanel()
+{
+}
+
+
+
+void MvQDrawerPanel::addCornerButton(QAbstractButton *b)
+{	
+  	barLayout_->addSpacing(4);
+  	barLayout_->addWidget(b);
+
+}  
+
+void MvQDrawerPanel::addDrawer(QWidget* w,QString name)
+{
+  	bar_->addTab(name);
+	stacked_->addWidget(w);
+	
+	if(sorted_)
+	  	sortDrawers();
+	
+	setCurrent(name);	
+}
+	
+	
+void MvQDrawerPanel::renameDrawer(int index,QString name)
+{
+  	if(index >=0 && index < bar_->count())
+	{
+		bar_->setTabText(index,name);
+		
+		if(sorted_)
+			sortDrawers();
+	
+	}
+}	
+	
+void MvQDrawerPanel::deleteDrawer(int index)
+{	
+	if(index >=0 && index < bar_->count())
+	{
+	  	QWidget *w=stacked_->widget(index);
+		bar_->removeTab(index);
+		stacked_->removeWidget(w);
+		w->hide();
+		w->deleteLater();
+	}		     	
+}
+
+void MvQDrawerPanel::sortDrawers()
+{
+  	QMap<QString,int> oriIdx;
+	QStringList ori, sorted;
+	
+  	for(int i=0; i < bar_->count(); i++)
+	{		
+		oriIdx[bar_->tabText(i)]=i;
+		ori << bar_->tabText(i);
+	}
+	
+
+	sorted=ori;
+	sorted.sort();
+	
+	//qDebug() << oriIdx;
+	//qDebug() << ori;
+	//qDebug() << sorted;
+		
+	for(int i=0; i < sorted.count(); i++)
+	{
+	  	//qDebug() << i << sorted[i] <<bar_->tabText(i);
+	
+	  	if(sorted[i] !=  bar_->tabText(i)) 
+		{
+			int from=oriIdx[sorted[i]];
+			int to=i;
+		  
+			//qDebug() << "--> to from" << to << from;
+						
+		  	bar_->moveTab(from,to);			
+			
+			QWidget *w=stacked_->widget(from);
+			stacked_->removeWidget(w);
+			stacked_->insertWidget(to,w);
+			
+		}
+	}
+}
+	
+void MvQDrawerPanel::setCurrent(QString name)
+{
+  	for(int i=0; i < bar_->count(); i++)
+	  	if(bar_->tabText(i) == name)
+		{
+		  	bar_->setCurrentIndex(i);
+			return;
+		}
+}	
+		
+	
+int MvQDrawerPanel::drawerCount()
+{
+  	return stacked_->count();
+}	
+		
+int MvQDrawerPanel::drawerIndex(QWidget* w)
+{
+	return stacked_->indexOf(w); 
+}
+
+QWidget *MvQDrawerPanel::drawer(int index)
+{
+  	return(index>=0 && index<stacked_->count())?stacked_->widget(index):0; 
+}  
+
+QString MvQDrawerPanel::drawerText(int index)
+{
+	return bar_->tabText(index);
+}	
+
+void MvQDrawerPanel::slotTabClicked(int index)
+{
+  	bool changed=false;
+	
+	if(index != bar_->currentIndex())
+	{
+		bar_->setCurrentIndex(index);
+		changed=true;
+	}
+	
+	if(changed)
+	  	stacked_->show();
+	else
+	{
+	  	if(!stacked_->isVisible())
+		  	stacked_->show();
+		else
+		  	stacked_->hide();
+	}
+}
+
+void MvQDrawerPanel::shrink()
+{	
+	stacked_->hide();
+}
+
+//----------------------------------------------
+// Context menu
+//----------------------------------------------
+
+void MvQDrawerPanel::slotContextMenu(const QPoint& pos)
+{
+	MvQContextItemSet *cms=cmSet();
+	if(!cms)
+	  	return;
+	
+  	if(pos.isNull())
+		return;
+ 
+	int index=bar_->tabAt(pos);
+
+	QString selected=MvQContextMenu::instance()->exec(cms->icon(),mapToGlobal(pos),this);
+	if(!selected.isEmpty()) 
+		  	command(selected,index);  
+}
diff --git a/src/Desktop/MvQDrawerPanel.h b/src/Desktop/MvQDrawerPanel.h
new file mode 100644
index 0000000..6eb502a
--- /dev/null
+++ b/src/Desktop/MvQDrawerPanel.h
@@ -0,0 +1,75 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQDrawerPanel_H
+#define MvQDrawerPanel_H
+
+#include <QTabBar>
+#include <string>
+
+using namespace std;
+
+class QAbstractButton;
+class QHBoxLayout;
+class QStackedWidget;
+class QTabBar;
+
+class MvQContextItemSet;
+
+class MvQDrawerTabBar :  public QTabBar
+{
+Q_OBJECT
+  
+public:
+        MvQDrawerTabBar(QWidget *parent=0);
+signals:
+	void leftClicked(int);    
+protected:	
+	void mousePressEvent(QMouseEvent*);
+};
+
+class MvQDrawerPanel :  public QWidget
+{
+Q_OBJECT
+
+public:
+    	MvQDrawerPanel(QWidget *parent=0);
+	~MvQDrawerPanel();		
+  	
+	void setSorted(bool b) {sorted_=b;}
+	int drawerCount();
+	int drawerIndex(QWidget*);
+	QWidget *drawer(int);
+	QString drawerText(int);
+	void addDrawer(QWidget*,QString);
+  	void shrink();
+	
+public slots:
+        void slotTabClicked(int);
+	void slotContextMenu(const QPoint &);
+
+protected:
+	virtual void command(QString,int)=0;
+	virtual MvQContextItemSet* cmSet()=0;
+	
+	void addCornerButton(QAbstractButton *);
+	void renameDrawer(int,QString);
+	void deleteDrawer(int);
+	void sortDrawers();
+	
+private:	
+	void setCurrent(QString);
+
+	QHBoxLayout *barLayout_;
+	MvQDrawerTabBar *bar_;
+	QStackedWidget *stacked_;
+	bool sorted_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQDrawerView.cc b/src/Desktop/MvQDrawerView.cc
new file mode 100644
index 0000000..31fd132
--- /dev/null
+++ b/src/Desktop/MvQDrawerView.cc
@@ -0,0 +1,61 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQDrawerView.h"
+
+#include "IconObject.h"
+#include "Folder.h"
+
+#include "MvQContextMenu.h"
+#include "MvQFolderModel.h"
+
+#include <QScrollBar>
+
+MvQDrawerView::MvQDrawerView(MvQFolderModel *folderModel,QWidget *parent) : 
+       MvQIconStripView(folderModel,parent)    
+{ 	
+	//verticalScrollBar()->setProperty("mvStyle","helper");
+	
+	//parListW_->setSpacing(2);
+	//parListW_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+	//parListW_->setItemDelegate(new MvQScmListDelegate(this));
+	
+	//setHelper(true);
+	
+	setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+	setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
+	
+	/*QScrollBar *hbar=horizontalScrollBar();
+	if(hbar)
+	{	
+		QFont font;
+		QFontMetrics fm(font);
+		//setMaximumHeight(fm.height()+hbar->size().height()+4+24);	
+	
+	
+	setFixedHeight(fm.height()+hbar->size().height()+4+24);
+	}
+	setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);*/
+	
+	
+	//setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Minimum);
+	
+	//setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
+}
+
+MvQDrawerView::~MvQDrawerView()
+{	
+}
+
+MvQContextItemSet* MvQDrawerView::cmSet()
+{
+	static MvQContextItemSet cmItems("DrawerView");  
+  	return &cmItems;
+}
+
diff --git a/src/Desktop/MvQDrawerView.h b/src/Desktop/MvQDrawerView.h
new file mode 100644
index 0000000..41755da
--- /dev/null
+++ b/src/Desktop/MvQDrawerView.h
@@ -0,0 +1,27 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQDrawerView_H
+#define MvQDrawerView_H
+
+#include "MvQIconStripView.h"
+
+class MvQContextItemSet;
+
+class MvQDrawerView : public MvQIconStripView
+{
+public:
+	MvQDrawerView(MvQFolderModel *,QWidget *parent=0);
+  	~MvQDrawerView();
+
+protected:
+	MvQContextItemSet* cmSet();
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQEditor.cc b/src/Desktop/MvQEditor.cc
new file mode 100644
index 0000000..af46ba4
--- /dev/null
+++ b/src/Desktop/MvQEditor.cc
@@ -0,0 +1,811 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQEditor.h"
+
+#include <QAction>
+#include <QActionGroup>
+#include <QCloseEvent>
+#include <QDateTime>
+#include <QDebug>
+#include <QDialogButtonBox>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QPlainTextEdit>
+#include <QPushButton>
+#include <QSettings>
+#include <QStyle>
+#include <QStackedLayout>
+#include <QStackedWidget>
+#include <QToolBar>
+#include <QToolButton>
+#include <QVBoxLayout>
+
+#include "EditorDrawerFactory.h"
+#include "Folder.h"
+#include "IconClass.h"
+#include "MvRequest.h"
+#include "Path.h"
+#include "Request.h"
+
+#include "MvQEditorDrawerPanel.h"
+#include "MvQFolderModel.h"
+#include "MvQTemplateDrawer.h"
+#include "MvQIconProvider.h"
+
+//================================================
+//
+// MvQEditorHeader
+//
+//================================================
+
+MvQEditorHeader::MvQEditorHeader(MvQEditor *owner,QPixmap pix) : 
+        QWidget(owner),
+        owner_(owner)
+{
+  	QHBoxLayout *hb=new QHBoxLayout(this);	
+  	hb->setSpacing(0); 
+	hb->setContentsMargins(1,1,1,1);	
+	
+	QFont font;
+	font.setBold(true);
+	QFontMetrics fm(font);
+	int txth=3*fm.height()+2*fm.leading()+8; 
+	txth=(txth > 32)?txth:32;
+			
+  	//Pixmap
+	QLabel *pixLabel=new QLabel(this);
+	pixLabel->setPixmap(pix);	
+	pixLabel->setFrameShape(QFrame::Box);
+        pixLabel->setFrameShape(QFrame::StyledPanel);
+	pixLabel->setObjectName(QString::fromUtf8("editorHeaderLabel"));
+	pixLabel->setMaximumHeight(txth);
+	hb->addWidget(pixLabel);
+	
+	stackLayout_=new QStackedLayout();
+	hb->addLayout(stackLayout_);
+	
+	//Info panel
+	QWidget *w=new QWidget;
+	QHBoxLayout *labelHb=new QHBoxLayout(w);	
+	labelHb->setSpacing(0); 
+	labelHb->setContentsMargins(2,1,2,1);		
+	stackLayout_->addWidget(w);
+	
+	label_=new QLabel("",this);
+	label_->setObjectName(QString::fromUtf8("editorHeaderLabel"));	
+	label_->setAlignment(Qt::AlignLeft| Qt::AlignVCenter);
+        label_->setAutoFillBackground(true);
+        label_->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse);
+	label_->setFrameShape(QFrame::Box);
+        label_->setFrameShape(QFrame::StyledPanel);
+	label_->setMargin(2);
+	label_->setMaximumHeight(txth);
+	labelHb->addWidget(label_);
+
+	renameTb_=new QToolButton(this);
+	renameTb_->setAutoRaise(true);
+	//renameTb_->setText(tr("Rename"));
+	renameTb_->setToolTip(tr("Click to rename icon"));
+	renameTb_->setIcon(QPixmap(QString::fromUtf8(":/desktop/edit.svg")));
+	labelHb->addWidget(renameTb_);
+	
+	connect(renameTb_,SIGNAL(clicked(bool)),
+		this,SLOT(slotStartEdit(bool)));
+	
+	//Editor
+	w=new QWidget;
+	QHBoxLayout *editHb=new QHBoxLayout(w);
+	editHb->setSpacing(0); 
+	editHb->setContentsMargins(2,1,2,1);
+	stackLayout_->addWidget(w);
+	
+	edit_=new QLineEdit(this);
+	editHb->addWidget(edit_);
+	
+	//Rename buttonBox_
+	
+	QToolButton *acceptTb=new QToolButton(this);
+	acceptTb->setAutoRaise(true);
+	acceptTb->setIcon(QPixmap(QString::fromUtf8(":/desktop/accept.svg")));
+	editHb->addWidget(acceptTb);
+	
+	QToolButton *cancelTb=new QToolButton(this);
+	cancelTb->setAutoRaise(true);
+	cancelTb->setIcon(QPixmap(QString::fromUtf8(":/desktop/cancel.svg")));
+	editHb->addWidget(cancelTb);
+	
+	connect(acceptTb,SIGNAL(clicked(bool)),
+		this,SLOT(slotAcceptEdit(bool)));	
+	
+	connect(cancelTb,SIGNAL(clicked(bool)),
+		this,SLOT(slotCancelEdit(bool)));	
+		
+}  
+
+void MvQEditorHeader::slotStartEdit(bool)
+{
+  	if(stackLayout_->currentIndex() == 0)
+	{	
+	  	stackLayout_->setCurrentIndex(1);
+		if(owner_->current())
+		  	edit_->setText(QString::fromStdString(owner_->current()->name()));
+		else
+		  	edit_->clear();
+	}
+}	
+
+void MvQEditorHeader::slotAcceptEdit(bool)
+{
+  	if(stackLayout_->currentIndex() == 1)
+	{
+	  	owner_->rename(edit_->text());
+		stackLayout_->setCurrentIndex(0);
+	}		
+}	
+
+void MvQEditorHeader::slotCancelEdit(bool)
+{
+  	if(stackLayout_->currentIndex() == 1)
+	{
+		stackLayout_->setCurrentIndex(0);
+		edit_->clear();
+	
+	}	
+}
+
+void MvQEditorHeader::updateLabel(IconObject* obj)
+{	
+  	if(!obj)
+	  	return;
+ 
+	QString str=tr("<b><font color=#505050> Icon name: </font>");
+	str+="<font color=#084cb3>" + QString::fromStdString(obj->name()) + "</font></b><br>";
+	
+	str+="<font color=#505050>";
+	
+	str+=tr("<b>Folder: </b>");
+	str+="mv:" + QString::fromStdString(obj->parent()->fullName()) + "<br>";
+	
+	str+=tr("<b>Type: </b> ");
+	str+=QString::fromStdString(obj->className());
+	
+  	QDateTime dt=QDateTime::fromTime_t(obj->path().lastModified());
+	str+=tr(" <b>Modified: </b>");	
+	str+=dt.toString("yyyy-MM-dd hh:mm");
+	
+	if(obj->locked())
+	  	str+=tr(" <b>Status: <font color=\'red\'>Read only</font></b>");	
+	
+	str+="</font>";
+	
+	label_->setText(str);
+
+	lock(obj->locked());
+}  
+
+void MvQEditorHeader::lock(bool b)
+{
+  	renameTb_->setEnabled(!b);
+}
+
+//================================================
+//
+// MvQEditorTextPanel
+//
+//================================================	
+
+MvQEditorTextPanel::MvQEditorTextPanel(const IconClass& c,Editor* owner,QWidget* parent) : 
+            QWidget(parent),
+            class_(c),
+            owner_(owner),
+            current_(0),
+            correct_(true),
+            beingLoaded_(false)
+{
+  	QVBoxLayout *vb=new QVBoxLayout;
+	setLayout(vb);
+	
+	vb->setSpacing(0); 
+	vb->setContentsMargins(0,0,0,0);	
+		
+	//Warning label
+	QHBoxLayout* warnLayout=new QHBoxLayout();
+	vb->addLayout(warnLayout);
+	
+	warnLabel_=new QLabel("This is the contents of the file storing your icon settings. Please only edit it at <b> your own <b>risk</b>!",this);
+	warnLabel_->setWordWrap(true);
+	warnLabel_->setObjectName("editorWarningLabel");	
+	warnLabel_->setAlignment(Qt::AlignCenter);
+        warnLabel_->setAutoFillBackground(true);
+	warnLayout->addWidget(warnLabel_,1);
+	
+	//Message label
+	QHBoxLayout* msgLayout=new QHBoxLayout();
+	vb->addLayout(msgLayout);
+	
+	msgLabel_=new QLabel("Hello",this);
+	msgLabel_->setObjectName("editorMessageLabel");
+	msgLabel_->setWordWrap(true);
+	msgLayout->addWidget(msgLabel_,1);	
+	msgLabel_->hide();
+
+	//Text editor
+	te_=new QPlainTextEdit(this);
+	te_->setProperty("mvStyle","fileContents");
+	vb->addWidget(te_,1); 
+	
+	connect(te_,SIGNAL(textChanged()),
+		this,SLOT(slotTextChanged()));
+}
+
+void MvQEditorTextPanel::setObject(IconObject* obj)
+{
+  	current_=obj;
+	
+	QString str=tr("This is the contents of the file storing your icon settings.");
+	
+	if(obj->locked())
+	{
+	  	te_->setReadOnly(true);
+		te_->setProperty("mvStyle","fileContentsReadOnly");
+	}
+	else	  	
+	{
+	  	te_->setReadOnly(false);
+		te_->setProperty("mvStyle","fileContents");
+		str+=tr("Please only edit it at <b> your own <b>risk</b>!");
+	}
+	
+	te_->update();	
+	warnLabel_->setText(str);
+}
+
+
+void MvQEditorTextPanel::loadRequestFile()
+{
+	beingLoaded_=true;
+	QFile f(QString::fromStdString(current_->path().str()));
+	f.open(QFile::ReadOnly | QFile::Text);	
+	QTextStream rs(&f);
+	te_->setPlainText(rs.readAll());
+  	f.close();
+	beingLoaded_=false;
+}
+
+/*bool MvQEditorTextPanel::checkVerb()
+{
+  	const char* v=current_->request().getVerb();
+        const char* ic=current_->iconClass().name().c_str();
+	
+  	if(strcmp(v,ic) != 0)
+	{
+	  	QString s="<b><font color=\'red\'> Error: </b></font> Request type <b>" + QString(v) + "</b> in text does not match icon type <b>"  + QString(ic) + "</b>! ";
+		s+="Please change request type to <b>" + QString(ic) + "</b> or revert the icon back to system default.";
+		
+		msgLabel_->setText(s);	
+		
+		return false;
+	}
+	
+	return true;
+}*/
+
+bool MvQEditorTextPanel::check(bool fromSave)
+{
+ 	QString s=te_->toPlainText(); 
+	Request r=Request::fromText(s.toStdString());
+	QString verb;
+	
+	qDebug() << "TEXT --->";
+	r.print();
+	qDebug() << "<--- TEXT";
+	
+	if(r)
+	    verb=QString(r.getVerb());
+	  	  
+	QString ic=QString::fromStdString(current_->iconClass().name());
+		
+	QString msg;	
+	bool failed=false;
+	if(verb != ic)
+	{
+	  	msg="Request type <b>" + verb + "</b> in text does not match icon type <b>"  + ic + "</b>! ";
+		msg+="Please change the request type to <b>" +ic + "</b> or revert the icon back to system defaults.";		
+		failed=true;
+	}
+	
+	if(failed)
+	{
+	 	QString s="<table><tr><td><img src=\':/desktop/error.svg\' /></td><td width=\'4\'/><td><b>Error: </b>";
+		if(fromSave)
+	  		s+="<u>Cannot save file!</u>";
+		else
+		  	s+="<u>Broken request!</u>";
+		
+		s+="<br>" + msg + "</td></tr></table>"; 	
+		msgLabel_->show();
+		msgLabel_->setText(s);
+	}
+	else
+	  	msgLabel_->hide();
+ 	
+	correct_=(!failed);
+	
+	return correct_;
+}  
+
+
+void MvQEditorTextPanel::slotTextChanged()
+{
+  	if(!beingLoaded_)
+	{
+	  	owner_->changed();
+		msgLabel_->hide();
+	}	
+}
+
+
+void MvQEditorTextPanel::save()
+{
+	FILE *f = fopen(current_->path().str().c_str(),"w");
+	if(f == NULL)
+	{
+		//marslog(LOG_EROR|LOG_PERR,"%s",tmp);
+	}
+		
+	qDebug() << te_->toPlainText() << current_->path().str().c_str();
+
+	fprintf(f,"%s\n",te_->toPlainText().toStdString().c_str());
+	fclose(f);
+}
+
+void MvQEditorTextPanel::load()
+{  	
+	loadRequestFile();
+	check(false);
+}
+
+//================================================
+//
+// MvQEditor
+//
+//================================================
+
+MvQEditor::MvQEditor(const IconClass& name,const string& kind, QWidget *parent) : 
+        QDialog(parent), 
+        Editor(name,kind),
+        drawerFilled_(false),
+        ignoreChange_(false)
+{
+  	QVBoxLayout *vb=new QVBoxLayout;
+	vb->setSpacing(0); 
+	vb->setContentsMargins(1,1,1,1);
+	setLayout(vb);
+
+	//Header		
+	headerPanel_=new MvQEditorHeader(this,MvQIconProvider::pixmap(name,32));
+	vb->addWidget(headerPanel_);
+	
+	//-------------------
+	// Toolbar
+	//-------------------
+	
+	toolBarLayout_=new QHBoxLayout;
+	vb->addLayout(toolBarLayout_);
+		
+	toolbarLeft_=new QToolBar(this);
+	toolbarLeft_->setIconSize(QSize(20,20)); 
+		
+	toolbarRight_=new QToolBar(this);
+	toolbarRight_->setIconSize(QSize(20,20)); 
+	
+	toolBarLayout_->addWidget(toolbarLeft_);
+	toolBarLayout_->addStretch(1);	
+	toolBarLayout_->addWidget(toolbarRight_);
+	
+	//Gui edit
+	guiAc_ =new QAction(this);
+	guiAc_->setIcon(QPixmap(":/desktop/gui_edit.svg"));	
+	guiAc_->setCheckable(true);
+	guiAc_->setToolTip(tr("GUI edit mode"));
+	toolbarRight_->addAction(guiAc_);
+	
+	//Text edit
+	textAc_ =new QAction(this);
+	textAc_->setIcon(QPixmap(":/desktop/text_edit.svg"));	
+	textAc_->setCheckable(true);
+	textAc_->setToolTip(tr("Text edit mode"));
+	toolbarRight_->addAction(textAc_);
+		
+	viewAg_=new QActionGroup(this);
+	viewAg_->setExclusive(true);
+	viewAg_->addAction(guiAc_);
+	viewAg_->addAction(textAc_);
+	
+	guiAc_->setChecked(true);
+	
+	connect(viewAg_,SIGNAL(triggered(QAction*)),
+		this,SLOT(slotChangeView(QAction*)));
+	
+	//Search 
+	//QSearchLine
+	//QLabel
+	//searchLine_=new QLineEdit(this);	
+		
+	//toolBarLayout_->addStretch(1);
+	
+	//---------------------
+	// Central part
+	//---------------------
+		
+	viewSw_=new QStackedWidget(this);
+	vb->addWidget(viewSw_,1);
+	
+	//Panel layout
+	QWidget *w= new QWidget(this);
+	centralLayout_=new QVBoxLayout;
+	centralLayout_->setSpacing(0); 
+	centralLayout_->setContentsMargins(1,1,1,1);	
+	w->setLayout(centralLayout_);
+	viewSw_->addWidget(w);
+	
+	//Text widget
+	textPanel_ = new MvQEditorTextPanel(name,this,this);
+	viewSw_->addWidget(textPanel_);
+        viewSw_->addWidget(textPanel_);
+	
+	viewSw_->setCurrentIndex(0);		
+	
+	//--------------------
+	// Drawer
+	//--------------------
+	
+	drawerPanel_=new MvQEditorDrawerPanel(this);
+	
+	/*map<string, EditorDrawer*> drawers=EditorDrawerFactory::create(this);
+	for(map<string, EditorDrawer*>::iterator j = drawers.begin();j != drawers.end(); ++j) 
+	{
+	  	drawerPanel_->addDrawer((*j).second->widget(),
+						(*j).second->name());
+	}*/
+	
+	vb->addWidget(drawerPanel_);
+	
+	drawerPanel_->shrink();
+	
+	//--------------------
+	// Buttonbox
+	//--------------------
+
+	buttonBox_= new QDialogButtonBox(this);
+	
+	savePb_=buttonBox_->addButton(QDialogButtonBox::Save);
+	okPb_=buttonBox_->addButton(QDialogButtonBox::Ok);
+	cancelPb_=buttonBox_->addButton(QDialogButtonBox::Cancel);	
+	resetPb_=buttonBox_->addButton(QDialogButtonBox::Reset);
+	
+	savePb_->setDefault(true);
+	savePb_->setEnabled(false);
+	resetPb_->setEnabled(false);
+	
+	/*QCheckBox* stayOpenCb= new QCheckBox(tr("Stay open"),this);
+	stayOpenCb->setChecked(false);
+	buttonBox_->addButton(stayOpenCb,QDialogButtonBox::YesRole);*/
+	
+	//buttonBox_->addButton(QDialogButtonBox::Close);
+
+	connect(buttonBox_, SIGNAL(clicked(QAbstractButton*)), 
+		this, SLOT(slotButtonClicked(QAbstractButton*)));
+	
+	vb->addWidget(buttonBox_);
+}
+	
+	
+MvQEditor::~MvQEditor()
+{
+}
+void MvQEditor::showIt() 
+{
+	show();
+	
+	//Mimimize the drawer
+	drawerPanel_->shrink();	
+}
+
+void MvQEditor::addToToolBar(QList<QAction*> lst)
+{
+  	toolbarLeft_->addActions(lst);
+}	
+
+void MvQEditor::changed()
+{
+	if(!temporary_ && !ignoreChange_)
+	{
+		savePb_->setEnabled(true);
+		resetPb_->setEnabled(true);		
+		viewAg_->setEnabled(false);
+	}
+	
+	//resetPb_->setEnabled(true);	
+}  
+
+void MvQEditor::edit()
+{	  
+  	if(!current_)
+	  	return;
+ 		
+	//Set default button status
+	savePb_->setEnabled(false);
+	resetPb_->setEnabled(false);
+	
+	//Populate drawers if needed
+	if(!drawerFilled_)
+	{
+	  	map<string, EditorDrawer*> drawers=EditorDrawerFactory::create(this);
+		for(map<string, EditorDrawer*>::iterator j = drawers.begin();j != drawers.end(); ++j) 
+		{
+	  		drawerPanel_->addDrawer((*j).second->widget(),
+						(*j).second->name());
+		}
+		drawerFilled_=true;
+	}	
+		
+	//Read the previous size
+	readSettings();
+
+	//Header
+	headerPanel_->updateLabel(current_);	
+	
+	//Text
+	textPanel_->setObject(current_);
+	
+	//If request is broken we switch to text mode
+	if(!checkVerb())
+	{
+	  	textPanel_->load();
+	  	viewAg_->setEnabled(false);
+		textAc_->setChecked(true);
+		slotChangeView(textAc_);
+		//textAc_->toggled();	
+	}	
+	//otherwise we start with gui mode
+	else
+	{  
+		viewAg_->setEnabled(true);
+		guiAc_->setChecked(true); 
+		slotChangeView(guiAc_); // this will call reset
+		viewAg_->setEnabled(true);
+	}
+	
+	savePb_->setEnabled(false);
+	resetPb_->setEnabled(false);
+	
+	okPb_->setEnabled(!current_->locked());	  	
+}
+
+bool MvQEditor::isTextMode()
+{
+  	return (viewSw_->currentIndex() == TextViewMode);
+}	
+   
+void MvQEditor::slotTextChanged()
+{
+  	changed();
+}	
+   
+void MvQEditor::raiseIt() 
+{
+	if(isMinimized()) 
+		showNormal();
+	
+	raise();
+}	
+
+void MvQEditor::rename(QString text)
+{
+	if(!current_)
+	  	return;
+  		
+	if(!text.isEmpty())
+        { 	
+	  	string n=text.toStdString();
+	  	if( n != current_->name())
+		{
+			current_->editor(0);
+			current_->rename(n);
+			current_->editor(this);
+		}
+		headerPanel_->updateLabel(current_);		
+	}	  
+}  
+
+void MvQEditor::slotChangeView(QAction *ac)
+{
+  	if(savePb_->isEnabled())
+	{
+	  	viewAg_->setEnabled(false);
+	  	return;
+	}
+	
+  	//From gui to text mode
+  	if(ac == textAc_)
+	{
+	 	viewSw_->setCurrentIndex(TextViewMode);		
+		ignoreChange_=true;
+		textPanel_->load();
+		ignoreChange_=false;
+	}
+	//From text to gui mode
+	else
+	{	  	
+	  	viewSw_->setCurrentIndex(LineViewMode);
+		ignoreChange_=true;
+		reset();
+		ignoreChange_=false;
+	}	
+}
+
+void MvQEditor::slotButtonClicked(QAbstractButton* button)
+{
+	if(!button) return;
+	
+	if(buttonBox_->standardButton(button) == QDialogButtonBox::Cancel)
+	{
+		writeSettings();
+		
+		savePb_->setEnabled(false);
+		resetPb_->setEnabled(false);
+		
+		close();
+		reject();  	
+	}
+	else if(buttonBox_->standardButton(button) == QDialogButtonBox::Ok)
+	{
+	  	writeSettings();
+	  	
+	  	//Text mode
+		if(isTextMode())
+		{
+		  	if(textPanel_->check())  
+			  	textPanel_->save();	
+			else 	
+			{
+			  	viewAg_->setEnabled(false);
+			  	return;
+			}	
+		}
+		//GUI mode
+		else  
+		{
+		  	ignoreChange_=true;
+			apply();
+			ignoreChange_=false;
+		}	
+		
+		current_->modified();
+		notifyObserverApply();
+		
+		savePb_->setEnabled(false);
+		resetPb_->setEnabled(false);
+		
+		close();
+		accept();
+	}	
+	else if(buttonBox_->standardButton(button) == QDialogButtonBox::Save)
+	{	  	
+		ignoreChange_=true;
+		
+		//Text mode
+		if(isTextMode())
+		{
+		  	if(textPanel_->check())  
+			  	textPanel_->save();	
+			else 	
+			{
+			  	viewAg_->setEnabled(false);
+			  	return;
+			}	
+		}
+		//GUI mode
+		else  
+		{
+		  	ignoreChange_=true;
+			apply();
+			ignoreChange_=false;
+		}
+		
+		current_->modified();
+		notifyObserverApply();
+		
+		savePb_->setEnabled(false);
+		resetPb_->setEnabled(false);
+		viewAg_->setEnabled(true);
+		
+	}
+	else if(buttonBox_->standardButton(button) == QDialogButtonBox::Reset)
+	{
+		//Text mode
+		if(isTextMode())
+			textPanel_->load();
+		else	  
+		{
+		  	ignoreChange_=true;
+			reset();
+			ignoreChange_=false;
+		}
+			
+		savePb_->setEnabled(false);
+		resetPb_->setEnabled(false);
+		viewAg_->setEnabled(true);
+	}	
+}  
+
+void MvQEditor::accept()
+{
+  	editDone();	
+  	QDialog::accept();
+}
+
+void MvQEditor::reject()
+{
+  	notifyObserverClose();
+	editDone();
+	QDialog::reject();
+}  
+
+void MvQEditor::temporary()
+{
+	Editor::temporary();
+	savePb_->setEnabled(false);
+	savePb_->setEnabled(true);
+	headerPanel_->lock(true);
+}
+
+void MvQEditor::closeEvent(QCloseEvent* event)
+{
+	writeSettings();
+	close();
+	accept();
+	event->accept();
+}
+
+void MvQEditor::writeSettings()
+{
+	QSettings settings("ECMWF","MV4-Desktop-Editor-" + QString::fromStdString(class_.name()));
+	
+	//We have to clear it so that should not remember all the previous values 
+	settings.clear();
+	
+	settings.beginGroup("main");
+	settings.setValue("size",size());
+	settings.endGroup();
+	
+	writeSettings(settings);
+}
+
+void MvQEditor::readSettings()
+{
+	QSettings settings("ECMWF","MV4-Desktop-Editor-" + QString::fromStdString(class_.name()));
+  	
+	settings.beginGroup("main");
+	if(settings.contains("size"))
+	{  
+		resize(settings.value("size").toSize());
+	}
+	else
+	{
+	  	resize(QSize(520,500));
+	}
+	
+	settings.endGroup(); 
+	
+	readSettings(settings);	
+}
diff --git a/src/Desktop/MvQEditor.h b/src/Desktop/MvQEditor.h
new file mode 100644
index 0000000..7f4a8f8
--- /dev/null
+++ b/src/Desktop/MvQEditor.h
@@ -0,0 +1,159 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQEditor_H
+#define MvQEditor_H
+
+#include <QDialog>
+#include <QLabel>
+#include <QSettings>
+
+#include "Editor.h"
+
+class QAbstractButton;
+class QAction;
+class QActionGroup;
+class QDialogButtonBox;
+class QHBoxLayout;
+class QLabel;
+class QLineEdit;
+class QPlainTextEdit;
+class QPushButton;
+class QStackedLayout;
+class QStackedWidget;
+class QToolBar;
+class QToolButton;
+class QVBoxLayout;
+
+class MvQDrawerPanel;
+class MvQFolderModel;
+class MvQIconTemplateView;
+
+class MvQEditor;
+
+
+class MvQEditorHeader : public QWidget
+{
+Q_OBJECT
+
+public:
+    	MvQEditorHeader(MvQEditor*,QPixmap);
+	void updateLabel(IconObject*);
+	void lock(bool);
+
+public slots:
+    	void slotStartEdit(bool);
+	void slotAcceptEdit(bool);
+	void slotCancelEdit(bool);
+
+protected:
+	MvQEditor* owner_;
+	QStackedLayout *stackLayout_;	
+	QLabel* label_;
+	QToolButton* renameTb_;
+	QLineEdit *edit_;
+	IconObject* obj_;
+};  
+
+class MvQEditorTextPanel : public QWidget
+{
+Q_OBJECT  
+  
+public:  
+	MvQEditorTextPanel(const IconClass&,Editor*,QWidget*);
+	bool check(bool fromSave=true);
+	void setObject(IconObject*);
+	void save();
+	void load();
+	
+public slots:
+	void slotTextChanged();
+  
+protected:
+	void loadRequestFile();
+	
+	const IconClass& class_;
+	Editor* owner_;
+	IconObject* current_;
+	QPlainTextEdit* te_;
+	QLabel* warnLabel_;	
+	QLabel* msgLabel_;
+	bool correct_;
+	bool beingLoaded_;
+};	
+
+class MvQEditor : public QDialog, public Editor
+{
+Q_OBJECT
+
+public:
+	MvQEditor(const IconClass& name,const string& kind, QWidget *parent=0);
+	~MvQEditor();
+	
+	void changed();
+	virtual void merge(IconObjectH)=0;
+	virtual void replace(IconObjectH)=0;
+	void rename(QString);	
+
+public slots:
+	void slotChangeView(QAction*);
+        void slotButtonClicked(QAbstractButton*);
+	void accept();
+	void reject();
+	void slotTextChanged();
+
+protected:
+  	enum ViewMode {LineViewMode=0,TextViewMode=1};
+  
+  	void addToToolBar(QList<QAction*>);
+  	void raiseIt();
+  	void showIt();
+	virtual void apply()=0;
+	virtual void reset()=0;
+	virtual void close()=0;
+	virtual void edit();
+	virtual void temporary();
+	void closeEvent(QCloseEvent*);
+	void readSettings();
+	void writeSettings();
+	virtual void readSettings(QSettings&)=0;
+	virtual void writeSettings(QSettings&)=0;
+	
+	bool isTextMode();
+	
+	QLabel* headerLabel_;
+	QLineEdit* headerEdit_;
+	MvQEditorHeader* headerPanel_;
+	//QToolButton* viewTb_;
+	QAction *guiAc_;
+	QAction *textAc_;
+	QActionGroup* viewAg_;
+	
+	QVBoxLayout *centralLayout_;
+	
+	QDialogButtonBox *buttonBox_;
+	QPushButton* savePb_;
+	QPushButton* okPb_;
+	QPushButton* cancelPb_;
+	QPushButton* resetPb_;
+	
+	QStackedWidget* viewSw_;
+	MvQDrawerPanel* drawerPanel_;
+	bool drawerFilled_; 
+	QToolBar* toolbarLeft_;
+	QToolBar* toolbarRight_;
+	MvQEditorTextPanel *textPanel_;
+	
+private:
+	QHBoxLayout* toolBarLayout_;
+	bool ignoreChange_;
+	
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQEditorDrawerPanel.h b/src/Desktop/MvQEditorDrawerPanel.h
new file mode 100644
index 0000000..a538015
--- /dev/null
+++ b/src/Desktop/MvQEditorDrawerPanel.h
@@ -0,0 +1,26 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQEditorDrawerPanel_H
+#define MvQEditorDrawerPanel_H
+
+#include "MvQDrawerPanel.h"
+
+class MvQEditorDrawerPanel :  public MvQDrawerPanel
+{
+public:
+    	MvQEditorDrawerPanel(QWidget *parent=0) : MvQDrawerPanel(parent) {setSorted(false);}
+	~MvQEditorDrawerPanel() {};
+	
+protected:
+	MvQContextItemSet* cmSet() {return 0;}	
+	void command(QString,int) {};
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQExternalHelp.cc b/src/Desktop/MvQExternalHelp.cc
new file mode 100644
index 0000000..7290d5c
--- /dev/null
+++ b/src/Desktop/MvQExternalHelp.cc
@@ -0,0 +1,83 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQExternalHelp.h"
+
+#include "HelpFactory.h"
+#include "Parameter.h"
+#include "RequestPanel.h"
+
+MvQExternalHelp::MvQExternalHelp(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelHelp(owner,param)
+{
+}
+
+void MvQExternalHelp::start()
+{
+    	attach(); // Will be decremented by ReplyHandler, so make sure it stays alive.
+
+	Request info = param_.interfaceRequest();
+
+	Request request((const char*) info("help_verb"));
+	request.merge(owner_.request());	
+	callService((const char*) info("help_module"), request);
+}  
+
+void MvQExternalHelp::refresh(const vector<string>& values)
+{
+	
+}
+
+void MvQExternalHelp::set(Request& r) 
+{
+	r.merge(request_);
+	request_ = Request();
+}
+
+void MvQExternalHelp::reply(const Request& reply, int error)
+{
+	  cout << "ExternalHelp::reply" << endl;
+	  if ( error == 0 ) reply.print();
+}
+
+void MvQExternalHelp::progress(const Request& progress)
+{
+	cout << "ExternalHelp::progress" << endl;
+	progress.print();
+	request_ = progress;
+	//owner_.changed(*this);
+}
+
+void MvQExternalHelp::message(const string& msg)
+{
+	 cout << "MvQExternalHelp::message" << msg << endl;
+}
+
+/*void MvQExternalHelp::message(const Request& msg)
+{
+	  string s = msg.getVerb();
+	  if (s != "INPUT") return;
+
+          request_ = owner_.request();
+	  request_.merge(msg);
+	  
+	 int cnt = msg.countValues(param_.name());
+	 vector<string> res;
+	 for(int i=0; i<cnt; ++i )
+	 {
+	   	const char *ch;
+		msg.getValue(ch,param_.name(),i);
+		res.push_back(string(ch));
+	 }
+	 owner_.set(param_.name(),res); 
+	 
+          //owner_.changed(*this);
+}*/
+
+//static HelpMaker<MvQExternalHelp> maker("help_external");
diff --git a/src/Desktop/MvQExternalHelp.h b/src/Desktop/MvQExternalHelp.h
new file mode 100644
index 0000000..5a0dcee
--- /dev/null
+++ b/src/Desktop/MvQExternalHelp.h
@@ -0,0 +1,45 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQExternalHelp_H
+#define MvQExternalHelp_H
+
+#include "MvQRequestPanelHelp.h"
+#include "Parameter.h"
+#include "ReplyObserver.h"
+#include "MessageObserver.h"
+
+#include <QMap>
+#include <QString>
+
+class MvQExternalHelp : public MvQRequestPanelHelp,
+                   public ReplyObserver               
+{
+public:
+	MvQExternalHelp(RequestPanel& owner,const Parameter& param);
+	~MvQExternalHelp() {};
+	
+	void start();
+	bool dialog() {return true;}	
+	QWidget* widget() {return 0;}
+  
+protected:
+	virtual void refresh(const vector<string>&);
+  	virtual long flags() {return 9;}
+	virtual void set(Request&);
+	
+	void reply(const Request&, int);
+	void progress(const Request&);
+	void message(const string&);
+	
+	Request request_;		
+};	
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQFileBrowser.cc b/src/Desktop/MvQFileBrowser.cc
new file mode 100644
index 0000000..c3c24d4
--- /dev/null
+++ b/src/Desktop/MvQFileBrowser.cc
@@ -0,0 +1,1159 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQFileBrowser.h"
+
+#include <QAction>
+#include <QActionGroup>
+#include <QApplication>
+#include <QCloseEvent>
+#include <QDebug>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QMenu>
+#include <QMenuBar>
+#include <QMessageBox>
+#include <QSplitter>
+#include <QStatusBar>
+#include <QToolBar>
+#include <QToolButton>
+#include <QVBoxLayout>
+
+#include "MvQBookmarks.h"
+#include "MvQFolderDrawerPanel.h" 
+#include "MvQFileDialog.h"
+#include "MvQFolderHistory.h"
+#include "MvQFolderNavigation.h"
+#include "MvQFolderPanel.h"
+#include "MvQDesktopSettings.h"
+#include "MvQNewIconWidget.h"
+#include "MvQIconProvider.h"
+#include "MvQPathWidget.h"
+#include "MvQSlider.h"
+#include "MvQTools.h"
+
+#include "MvApplication.h"
+#include "IconClass.h"
+#include "Items.h"
+#include "Path.h"
+#include "Folder.h"
+#include "Tools.h"
+ 
+bool MvQFileBrowser::quitStarted_=false;
+QList<MvQFileBrowser*> MvQFileBrowser::browsers_;
+
+MvQFileBrowser::MvQFileBrowser(QStringList relPathLst,QWidget *parent) : 
+        MvQMainWindow(parent),
+        ignoreIconSizeSlider_(false)
+{	 
+  	setAttribute(Qt::WA_DeleteOnClose);
+	
+	setWindowTitle("Metview - Desktop");
+	
+	//Initial size
+	setInitialSize(1100,800);
+	
+	//-----------------------------
+	// Layout 
+	//-----------------------------
+	
+	QVBoxLayout *mainLayout = new QVBoxLayout;
+	mainLayout->setSpacing(0); 
+	mainLayout->setContentsMargins(1,1,1,1);
+	
+	QWidget *w=new QWidget;
+	w->setLayout(mainLayout);
+
+	setCentralWidget(w);
+			
+	//------------------------------
+	// Central Splitter
+	//------------------------------
+	
+	mainSplitter_=new QSplitter(this);
+	mainSplitter_->setOpaqueResize(false);	
+	//drawerSplitter_->addWidget(mainSplitter_);
+	mainLayout->addWidget(mainSplitter_,1);
+	
+	//------------------------------
+	// Left side
+	//------------------------------
+	
+	//User bookmarks	
+	bookmarksPanel_=new MvQBookmarksPanel(this);
+	mainSplitter_->addWidget(bookmarksPanel_->widget());
+	mainSplitter_->setCollapsible(0,false);
+	connectBookmarksObject(bookmarksPanel_);
+	bookmarksPanel_->widget()->hide();
+		
+	//------------------------------
+	// Central part
+	//------------------------------
+
+	QVBoxLayout *centralVb=new QVBoxLayout;
+	centralVb->setSpacing(0); 
+	centralVb->setContentsMargins(1,1,1,1);
+	
+	w=new QWidget;
+	w->setLayout(centralVb);
+	mainSplitter_->addWidget(w);
+	mainSplitter_->setStretchFactor(1,1);
+		
+	//Folder panel to store all the widgets
+	folderPanel_=new MvQFolderPanel(this);
+	centralVb->addWidget(folderPanel_);
+		
+	connect(folderPanel_,SIGNAL(currentWidgetChanged()),
+		this,SLOT(slotCurrentFolderChanged()));
+	
+	connect(folderPanel_,SIGNAL(pathChanged(MvQFolderNavigation*)),
+		this,SLOT(slotUpdateNavigationActions(MvQFolderNavigation*)));
+	
+	connect(folderPanel_,SIGNAL(itemInfoChanged(QString)),
+		this,SLOT(slotItemInfo(QString)));	
+		
+	//Init splitters	
+	mainSplitter_->setCollapsible(1,false);
+
+	int spWidth=mainSplitter_->size().width();
+	if(spWidth > 0)
+	{
+		QList<int> spSize;
+		spSize << 150;
+		spSize << spWidth-spSize[0];
+		mainSplitter_->setSizes(spSize);
+	}
+	
+	//-----------------------------
+	// Bottom part  -- drawers
+	//-----------------------------
+	
+	drawerPanel_=new MvQFolderDrawerPanel(this);
+	mainLayout->addWidget(drawerPanel_);
+	
+	connect(drawerPanel_,SIGNAL(itemEntered(QString)),
+		this, SLOT(slotItemInfo(QString)));
+	
+	//--------------------------------------
+	// Setup actions for toolbars and menus
+	//--------------------------------------
+	
+	setupFileActions();
+	setupNavigateActions();
+	setupViewActions();
+	setupBookmarksActions();
+	setupHistoryActions();
+	setupSettingsActions();
+	setupToolsActions();
+
+	setupMenus(menuItems_);
+	
+	//----------------------------------------------------
+	// Add history menu to folder panel. Need to do it after
+	// the menus were created!!!
+	//-----------------------------------------------------
+
+	folderPanel_->setHistoryMenu(findMenu(MvQMainWindow::HistoryMenu));
+	
+	MvQBookmarksMenu *bookmarksMenu=new MvQBookmarksMenu(this,findMenu(MvQMainWindow::BookmarksMenu));
+	connectBookmarksObject(bookmarksMenu);
+	
+	//Setup
+	//updateNavigationActionState();	
+	
+	//-----------------------------
+	// Statusbar
+	//-----------------------------
+	
+	itemInfoLabel_=new QLabel(this);
+	statusBar()->addWidget(itemInfoLabel_);
+		
+	setupIconSizeWidget();
+	
+	if(relPathLst.count() > 0)
+	  	folderPanel_->resetWidgets(relPathLst);
+		
+	//IMPORTANT!!!
+	//We need to call it here because if the -stylesheet command line option is used
+	//Qt changes icon positions in the listview and arrange them on a grid. By calling 
+	//this function the original icon positions are regained in the view.
+	//iconView_->slotSetPositions();	
+	//drawerPanel_->setIconPositions();
+}
+
+MvQFileBrowser::~MvQFileBrowser()
+{
+}
+
+//Show the brower for the first time!
+void MvQFileBrowser::showIt()
+{
+  	show();
+	
+	//Minimise the drawer panel!
+	drawerPanel_->shrink();
+}	
+
+//==============================================================
+//
+//  Close and quit
+//
+//==============================================================
+
+void MvQFileBrowser::closeEvent(QCloseEvent* event)
+{
+	if(MvQFileBrowser::aboutToClose(this))
+	{	
+		browsers_.removeOne(this);
+		saveFolderInfo();		
+		event->accept();
+		//deleteLater();
+	}
+	else
+	{
+	  	event->ignore();
+	}	
+}
+ 
+void MvQFileBrowser::slotQuit()
+{
+	 MvQFileBrowser::aboutToQuit(this);  
+}  
+
+//==============================================================
+//
+//  Set up actions
+//
+//==============================================================
+
+
+void MvQFileBrowser::setupFileActions()
+{
+	//Close
+	QAction *closeAction=createAction(MvQMainWindow::CloseAction,this);
+	connect(closeAction,SIGNAL(triggered()),
+		this,SLOT(close()));
+				
+	//Quit application
+	QAction *quitAction=createAction(MvQMainWindow::QuitAction,this);
+	connect(quitAction,SIGNAL(triggered()),
+		this,SLOT(slotQuit()));	
+		
+	MvQMainWindow::MenuType menuType=MvQMainWindow::FileMenu;
+	
+	menuItems_[menuType].push_back(new MvQMenuItem(closeAction,MvQMenuItem::MenuTarget));
+	menuItems_[menuType].push_back(new MvQMenuItem(quitAction,MvQMenuItem::MenuTarget));
+}
+	
+void MvQFileBrowser::setupNavigateActions()
+{  
+	//Back
+	actionBack_ = new QAction(this);
+	actionBack_->setIcon(QPixmap(QString::fromUtf8(":/desktop/big_arrow_left.svg"))); 
+        actionBack_->setToolTip(tr("Back"));
+	actionBack_->setText(tr("Back"));
+        actionBack_->setShortcut(tr("Alt+Left"));
+
+	connect(actionBack_,SIGNAL(triggered()),
+		folderPanel_,SLOT(slotChFolderBack()));
+
+	//Forward
+	actionForward_ = new QAction(this);
+	actionForward_->setIcon(QPixmap(QString::fromUtf8(":/desktop/big_arrow_right.svg"))); 
+	actionForward_->setToolTip(tr("Forward"));
+	actionForward_->setText(tr("Forward"));
+        actionForward_->setShortcut(tr("Alt+Right"));
+
+	connect(actionForward_,SIGNAL(triggered()),
+		folderPanel_,SLOT(slotChFolderForward()));
+
+	//Parent
+	actionParent_= new QAction(this);
+	actionParent_->setIcon(QPixmap(QString::fromUtf8(":/desktop/big_arrow_up.svg"))); 
+        actionParent_->setToolTip(tr("Up"));
+	actionParent_->setText(tr("Up"));
+	actionParent_->setIconText(tr("Up"));
+        actionParent_->setShortcut(tr("Alt+Up"));
+
+	connect(actionParent_,SIGNAL(triggered()),
+		folderPanel_,SLOT(slotChFolderParent()));
+				
+	//Home
+	actionMvHome_= new QAction(this);
+	actionMvHome_->setIcon(QPixmap(QString::fromUtf8(":/desktop/home.svg")));
+        actionMvHome_->setToolTip(tr("Metview home"));
+	actionMvHome_->setText(tr("Mv home"));
+	actionMvHome_->setIconText(tr("home"));
+        actionMvHome_->setShortcut(tr("Alt+Home"));
+
+	connect(actionMvHome_,SIGNAL(triggered()),
+		folderPanel_,SLOT(slotChFolderMvHome()));
+		
+	//Wastebin
+	actionWastebasket_= new QAction(this);
+	actionWastebasket_->setIcon(QPixmap(QString::fromUtf8(":/desktop/wastebasket.svg")));
+        actionWastebasket_->setToolTip(tr("Wastebasket"));
+	actionWastebasket_->setText(tr("Wastebasket"));
+	actionWastebasket_->setIconText(tr("Wastebasket"));
+        actionWastebasket_->setShortcut(tr("Alt+W"));
+
+	connect(actionWastebasket_,SIGNAL(triggered()),
+		folderPanel_,SLOT(slotChFolderWastebasket()));	
+			
+	//Breadcrumbs
+	breadcrumbs_=new MvQPathWidget(this);
+	
+	connect(breadcrumbs_,SIGNAL(dirChanged(QString)),
+		folderPanel_,SLOT(slotChFolderFromBreadcrumbs(QString)));
+					
+	connect(breadcrumbs_,SIGNAL(commandRequested(QString,QString)),
+		folderPanel_,SLOT(slotPathCommand(QString,QString)));
+			
+	QAction *sep=new QAction(this);
+	sep->setSeparator(true);
+	
+	MvQMainWindow::MenuType menuType=MvQMainWindow::NavigateMenu;
+	
+	menuItems_[menuType].push_back(new MvQMenuItem(actionBack_));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionForward_));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionParent_));
+	menuItems_[menuType].push_back(new MvQMenuItem(sep,MvQMenuItem::MenuTarget));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionMvHome_,MvQMenuItem::MenuTarget));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionWastebasket_,MvQMenuItem::MenuTarget));
+	menuItems_[menuType].push_back(new MvQMenuItem(breadcrumbs_,MvQMenuItem::ToolBarTarget));
+	//menuItems_[menuType].push_back(new MvQMenuItem(locationCombo_,MvQMenuItem::ToolBarTarget));
+	
+	breadcrumbs_->setPath("/");
+} 
+
+void MvQFileBrowser::setupBookmarksActions()
+{	
+	//We need at least one action to create the menu. We will populati it later dinamically
+  	QAction *action=0;
+
+	MvQMainWindow::MenuType menuType=MvQMainWindow::BookmarksMenu;	
+	menuItems_[menuType].push_back(new MvQMenuItem(action,MvQMenuItem::MenuTarget));
+}
+
+void MvQFileBrowser::setupHistoryActions()
+{	
+	//We need at least one action to create the menu. We will populati it later dinamically
+  	QAction *action=0;
+
+	MvQMainWindow::MenuType menuType=MvQMainWindow::HistoryMenu;	
+	menuItems_[menuType].push_back(new MvQMenuItem(action,MvQMenuItem::MenuTarget));
+}
+		
+void MvQFileBrowser::setupViewActions()
+{		
+	QAction *action;
+	
+	//--------------
+	// View mode
+	//--------------
+	
+	QList<QAction*> viewModeLst;
+	
+	QMenu* viewModeMenu=new QMenu(this);
+	viewModeMenu->setObjectName(QString::fromUtf8("viewModeSubMenu"));
+	viewModeMenu->setTitle(tr("&View mode"));
+		
+        action = new QAction(this);
+        action->setObjectName(QString::fromUtf8("actionIconView"));
+        action->setCheckable(true);
+	action->setIcon(QPixmap(":/desktop/icon_view.svg"));
+	action->setText(tr("&Icons"));
+	action->setToolTip(tr("Icons view mode"));
+	action->setShortcut(tr("Ctrl+1"));
+	
+	actionViewMode_[MvQ::IconViewMode]=action;
+
+	action=new QAction(this);
+        action->setObjectName(QString::fromUtf8("actionDetailedView"));
+        action->setCheckable(true);
+	action->setIcon(QPixmap(":/desktop/detailed_view.svg"));
+	action->setText(tr("&Details"));
+	action->setToolTip(tr("Details view mode"));
+	action->setShortcut(tr("Ctrl+2"));
+	
+	actionViewMode_[MvQ::DetailedViewMode]=action;
+	
+	//-------------
+	// Sorting
+	//-------------
+	
+	gridMenu_=new QMenu(this);
+	gridMenu_->setObjectName(QString::fromUtf8("gridSubMenu"));
+	gridMenu_->setTitle(tr("&Arrange on grid by ..."));
+	
+	action = new QAction(this);
+	action->setText(tr("&Name"));
+	action->setData("toGridByName");
+	folderPanel_->addDesktopAction(action);
+	QAction* actionGridByName=action;
+			
+	action = new QAction(this);
+	action->setText(tr("&Size"));
+	action->setData("toGridBySize");
+	folderPanel_->addDesktopAction(action);
+	QAction* actionGridBySize=action;
+	
+	action = new QAction(this);
+	action->setText(tr("&Type"));
+	action->setData("toGridByType");
+	folderPanel_->addDesktopAction(action);
+	QAction* actionGridByType=action;
+	
+	connect(actionGridByName,SIGNAL(triggered(bool)),
+		folderPanel_,SLOT(slotGridByName(bool)));
+	
+	connect(actionGridBySize,SIGNAL(triggered(bool)),
+		folderPanel_,SLOT(slotGridBySize(bool)));	
+	
+	connect(actionGridByType,SIGNAL(triggered(bool)),
+		folderPanel_,SLOT(slotGridByType(bool)));
+		
+	//-------------------------
+	// Misc
+	//-------------------------	 
+		
+	action = new QAction(this);
+        action->setObjectName(QString::fromUtf8("actionReload"));
+	action->setText(tr("&Reload"));
+        action->setIcon(QPixmap(QString::fromUtf8(":/desktop/reload.svg")));
+	action->setShortcut(tr("F5"));				
+	action->setData("reload");
+	folderPanel_->addDesktopAction(action);
+	QAction* actionReload=action;	
+	
+	connect(actionReload, SIGNAL(triggered(bool)),
+		 folderPanel_, SLOT(slotReload(bool)));
+	
+		 
+	action = new QAction(this);
+        action->setObjectName(QString::fromUtf8("actionShowlast"));
+	action->setText(tr("&Show last icon created"));
+        //action->setIcon(QPixmap(QString::fromUtf8(":/desktop/reload.svg")));
+	//action->setShortcut(tr("F5"));				
+	action->setData("showLastIcon");
+	folderPanel_->addDesktopAction(action);
+	QAction* actionLastIcon=action;	
+	
+	connect(actionLastIcon, SIGNAL(triggered(bool)),
+		folderPanel_, SLOT(slotShowLastCreated(bool)));	 
+	
+	//-------------------------
+	// Sidebar
+	//-------------------------
+	
+	//Sidebar
+	actionSidebar_ = new QAction(this);
+        actionSidebar_->setObjectName(QString::fromUtf8("actionSidebar"));
+        actionSidebar_->setCheckable(true);
+	actionSidebar_->setChecked(false); //!!!
+	actionSidebar_->setText(tr("&Bookmarks"));
+        actionSidebar_->setIcon(QPixmap(QString::fromUtf8(":/desktop/bookmark.svg")));
+	actionSidebar_->setShortcut(tr("Ctrl+B"));	
+	
+	connect(actionSidebar_,SIGNAL(toggled(bool)),
+		bookmarksPanel_->widget(),SLOT(setVisible(bool)));
+				
+	//-------------------------
+	// Icon resize
+	//-------------------------
+	
+	const vector<int>& sVec=MvQIconProvider::sizes();
+	for(vector<int>::const_iterator it=sVec.begin(); it != sVec.end(); it++)
+	{
+		iconSizes_ << *it;
+	}
+	
+	//currentIconSize_=MvQPixmapProvider::defaultSize();
+	
+	action=new QAction(this);
+	action->setText(tr("Decrease size"));
+        action->setIcon(QIcon(QPixmap(QString::fromUtf8(":/desktop/size_down.svg"))));
+	action->setShortcut(tr("Ctrl+-"));
+	action->setData("sizeDown");
+	folderPanel_->addDesktopAction(action);
+	actionIconSizeDown_=action;
+	
+	action=new QAction(this);
+	action->setText(tr("Increase size"));
+	action->setIcon(QIcon(QPixmap(QString::fromUtf8(":/desktop/size_up.svg"))));
+	action->setShortcut(tr("Ctrl++"));
+	action->setData("sizeUp");
+	folderPanel_->addDesktopAction(action);
+	actionIconSizeUp_=action;	
+	
+	action=new QAction(this);
+	action->setText(tr("Lock size"));
+	action->setIcon(QIcon(QPixmap(QString::fromUtf8(":/desktop/padlock.svg"))));
+	//action->setShortcut(tr("Ctrl++"));
+	action->setToolTip(tr("Use unique icon size for this folder!"));
+	action->setData("sizeLock");
+	action->setCheckable(true);
+	action->setChecked(false);
+	folderPanel_->addDesktopAction(action);
+	actionIconSizeLock_=action;	
+		
+	connect(actionIconSizeDown_,SIGNAL(triggered()),
+		this,SLOT(slotIconSizeDown()));
+
+	connect(actionIconSizeUp_,SIGNAL(triggered()),
+		this,SLOT(slotIconSizeUp()));
+		
+	connect(actionIconSizeLock_,SIGNAL(toggled(bool)),
+		this,SLOT(slotIconSizeLock(bool)));
+		
+
+	QAction *sep=new QAction(this);
+	sep->setSeparator(true);
+	
+	QAction *sep1=new QAction(this);
+	sep1->setSeparator(true);
+	
+	QAction *sep2=new QAction(this);
+	sep2->setSeparator(true);
+	
+	MvQMainWindow::MenuType menuType=MvQMainWindow::ViewMenu;
+	
+	menuItems_[menuType].push_back(new MvQMenuItem(viewModeMenu));
+	
+	foreach(QAction* ac,actionViewMode_.values())
+	{  
+		menuItems_[menuType].push_back(new MvQMenuItem(ac,MvQMenuItem::SubMenuTarget | MvQMenuItem::ToolBarTarget));
+	} 
+	
+	menuItems_[menuType].push_back(new MvQMenuItem(gridMenu_));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionGridByName,MvQMenuItem::SubMenuTarget));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionGridBySize,MvQMenuItem::SubMenuTarget));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionGridByType,MvQMenuItem::SubMenuTarget));
+	
+	menuItems_[menuType].push_back(new MvQMenuItem(sep));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionSidebar_));
+	//menuItems_[menuType].push_back(new MvQMenuItem(actionDrawers_));
+	
+	menuItems_[menuType].push_back(new MvQMenuItem(sep1));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionReload));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionLastIcon,MvQMenuItem::MenuTarget));
+	
+	menuItems_[menuType].push_back(new MvQMenuItem(sep2,MvQMenuItem::MenuTarget));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionIconSizeDown_,MvQMenuItem::MenuTarget));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionIconSizeUp_,MvQMenuItem::MenuTarget));
+
+	viewModeAg_=new QActionGroup(this);
+	viewModeAg_->setExclusive(true);
+	foreach(QAction* ac,actionViewMode_.values())
+	{  
+		viewModeAg_->addAction(ac);
+	}
+
+	connect(viewModeAg_,SIGNAL(triggered(QAction*)),
+		this,SLOT(slotChangeViewMode(QAction*)));
+}
+
+void MvQFileBrowser::setupSettingsActions()
+{	
+	QAction *actionPref = new QAction(this);
+	//actionPref->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowLeft)); 
+        actionPref->setToolTip(tr("Preferences"));
+	actionPref->setText(tr("Preferences"));
+        //actionPref->setShortcut(tr("Alt+P"));
+
+	connect(actionPref,SIGNAL(triggered()),
+		this,SLOT(slotPreferences()));
+			
+	MvQMainWindow::MenuType menuType=MvQMainWindow::SettingsMenu;	
+	menuItems_[menuType].push_back(new MvQMenuItem(actionPref,MvQMenuItem::MenuTarget));
+}
+
+void MvQFileBrowser::setupToolsActions()
+{				
+	QList<QAction*> lst;	
+	Tools::make(lst,this);	
+		
+	QList<QAction*> lst1;
+	MvQTools::instance()->make(lst1,this);
+	
+	MvQMainWindow::MenuType menuType=MvQMainWindow::ToolsMenu;
+	
+	foreach(QAction* ac,lst)
+		menuItems_[menuType].push_back(new MvQMenuItem(ac,MvQMenuItem::MenuTarget)); 
+	
+	foreach(QAction* ac,lst1)
+		menuItems_[menuType].push_back(new MvQMenuItem(ac,MvQMenuItem::MenuTarget));	
+}
+
+void MvQFileBrowser::setupIconSizeWidget()
+{
+	//Descrease size
+	QToolButton *tb=new QToolButton(this);
+	tb->setDefaultAction(actionIconSizeDown_);
+	tb->setAutoRaise(true);
+	statusBar()->addPermanentWidget(tb);
+	
+	//Slider
+	iconSizeSlider_=new MvQSlider(this);
+	iconSizeSlider_->setOrientation(Qt::Horizontal);	
+	iconSizeSlider_->setRange(0,iconSizes_.count()-1);
+	//int index=iconSizes_.indexOf(currentIconSize_);
+	//iconSizeSlider_->setValue(index);
+	iconSizeSlider_->setMaximumWidth(90);
+	statusBar()->addPermanentWidget(iconSizeSlider_);
+	
+	connect(iconSizeSlider_,SIGNAL(valueChanged(int)),
+		this,SLOT(slotSetIconSizeByIndex(int)));
+		
+	//Increase size
+	tb=new QToolButton(this);
+	tb->setDefaultAction(actionIconSizeUp_);
+	tb->setAutoRaise(true);
+	statusBar()->addPermanentWidget(tb);
+		
+	//Lock size
+	tb=new QToolButton(this);
+	tb->setDefaultAction(actionIconSizeLock_);
+	tb->setAutoRaise(true);
+	statusBar()->addPermanentWidget(tb);
+	
+}
+
+
+void MvQFileBrowser::slotCurrentFolderChanged()
+{
+	 breadcrumbs_->setPath(folderPanel_->currentFolder());
+  	 slotUpdateNavigationActions(folderPanel_->folderNavigation());
+	 updateViewModeStatus(folderPanel_->viewMode());	 
+	 updateIconSizeActionState();
+}  
+
+void MvQFileBrowser::slotUpdateNavigationActions(MvQFolderNavigation *nav)
+{
+	if(!nav)
+		return;
+	
+	nav->print();
+	
+	breadcrumbs_->setPath(folderPanel_->currentFolder());	
+	updateIconSizeActionState();
+	
+  	if(nav->hasPrev())
+	{
+		actionBack_->setEnabled(true);
+	}
+	else
+	{
+		actionBack_->setEnabled(false);
+	}
+	
+	if(nav->hasNext())
+	{
+		actionForward_->setEnabled(true);
+	}
+	else
+	{
+		actionForward_->setEnabled(false);
+	}
+
+	if(nav->current() == "" || nav->current() == "/")
+	{
+		actionParent_->setEnabled(false);
+	}
+	else{
+		actionParent_->setEnabled(true);
+	}
+	
+	nav->print();
+	
+}
+
+void MvQFileBrowser::slotChangeViewMode(QAction* action)
+{
+  	MvQ::FolderViewMode mode=actionViewMode_.key(action);
+
+	folderPanel_->setViewMode(mode);
+	gridMenu_->setEnabled(folderPanel_->viewModeGrid());
+	
+	/*switch(mode)
+	{  
+	  case MvQ::IconViewMode:
+	    	folderPanel_->setViewMode(mode);
+		gridMenu_->setEnabled(true);
+		break;
+	  case MvQ::DetailedViewMode:
+	    	folderPanel_->setViewMode(mode);
+		gridMenu_->setEnabled(false);
+		break;	
+	  default:
+	        break;
+	}*/	
+}
+
+void MvQFileBrowser::updateViewModeStatus(MvQ::FolderViewMode mode)
+{
+	if(actionViewMode_.find(mode) != actionViewMode_.end())
+	{
+	  	actionViewMode_[mode]->setChecked(true);
+	}	
+}
+
+
+void MvQFileBrowser::slotItemInfo(QString msg)
+{ 
+	itemInfoLabel_->setText(msg);  
+}  
+
+void MvQFileBrowser::slotPreferences()
+{
+	IconObject* obj = Items::find("general");
+	if(obj) obj->edit(); 
+} 
+
+//=============================================
+//
+// Bookmarks
+//
+//=============================================
+
+void MvQFileBrowser::connectBookmarksObject(MvQBookmarks *bk)
+{ 
+	connect(bk,SIGNAL(openInBrowser(QString)),
+		this,SLOT(slotOpenInBrowser(QString)));
+
+	connect(bk,SIGNAL(openInTab(QString)),
+		this,SLOT(slotOpenInTab(QString)));
+		
+	connect(bk,SIGNAL(openInWin(QString)),
+		this,SLOT(slotOpenInWin(QString)));
+		
+	connect(bk,SIGNAL(openGroupInTabs(QStringList)),
+		this,SLOT(slotOpenInTabs(QStringList)));	
+
+	connect(bk,SIGNAL(openGroupInWin(QStringList)),
+		this,SLOT(slotOpenGroupInWin(QStringList)));
+		
+	connect(bk,SIGNAL(bookmarkFolder()),
+		this,SLOT(slotBookmarkFolder()));	
+		
+	connect(bk,SIGNAL(bookmarkTabs()),
+		this,SLOT(slotBookmarkTabs()));	
+}
+
+void MvQFileBrowser::slotOpenInBrowser(QString fullName)
+{
+  	folderPanel_->slotChFolderFromBookmarks(fullName);
+}
+
+void MvQFileBrowser::slotOpenInTab(QString fullName)
+{
+	folderPanel_->addWidget(fullName);
+}
+
+void MvQFileBrowser::slotOpenInWin(QString fullName)
+{
+  	MvQFileBrowser::openBrowser(fullName);
+}
+
+void MvQFileBrowser::slotOpenInTabs(QStringList lst)
+{
+	folderPanel_->resetWidgets(lst);
+}
+
+void MvQFileBrowser::slotOpenGroupInWin(QStringList lst)
+{
+	MvQFileBrowser::openBrowser(lst);
+}
+
+void MvQFileBrowser::slotBookmarkFolder()
+{
+	MvQBookmarks::addItem(folderPanel_->currentFolder());  
+}
+
+void MvQFileBrowser::slotBookmarkTabs()
+{
+	MvQBookmarks::addItem(folderPanel_->currentFolders()); 
+}
+
+//=============================================
+//
+// Icon size
+//
+//=============================================
+
+void MvQFileBrowser::updateIconSizeActionState()
+{
+	int index=iconSizes_.indexOf(folderPanel_->iconSize());
+	if(index <=0)
+	{
+	  	actionIconSizeDown_->setEnabled(false);	
+		actionIconSizeUp_->setEnabled(true);	
+	}	
+	else if(index >= iconSizes_.count()-1)
+	{
+	  	actionIconSizeUp_->setEnabled(false);
+		actionIconSizeDown_->setEnabled(true);	
+	}		
+	else
+	{
+	  	actionIconSizeDown_->setEnabled(true);
+		actionIconSizeUp_->setEnabled(true);
+	}
+	
+	ignoreIconSizeSlider_=true;
+	iconSizeSlider_->setValue(index);
+	ignoreIconSizeSlider_=false;
+	
+	actionIconSizeLock_->setChecked(folderPanel_->iconSizeLock());
+	
+}  
+
+void MvQFileBrowser::slotIconSizeDown()
+{
+  	int index=iconSizes_.indexOf(folderPanel_->iconSize());
+	if(index > 0) index--;
+	
+	int size=iconSizes_[index];
+	
+	if(useGlobalIconSize()) 
+	{
+	  	broadcastIconSize(size);
+	  	if(folderPanel_->iconSizeLock())
+			folderPanel_->setIconSize(size);
+	}	
+	else  
+	{
+	  	folderPanel_->setIconSize(size);
+		updateIconSizeActionState();	
+	}	
+}  
+
+void MvQFileBrowser::slotIconSizeUp()
+{
+  	int index=iconSizes_.indexOf(folderPanel_->iconSize());	
+	if(index < iconSizes_.count()-1) index++;
+	
+	int size=iconSizes_[index];	
+	if(useGlobalIconSize()) 
+	{
+	  	broadcastIconSize(size);
+	  	if(folderPanel_->iconSizeLock())
+			folderPanel_->setIconSize(size);
+	}	
+	else  
+	{
+	  	folderPanel_->setIconSize(size);
+		updateIconSizeActionState();	
+	}	
+}  
+//Callback from the slider
+void MvQFileBrowser::slotSetIconSizeByIndex(int index)
+{
+	if(ignoreIconSizeSlider_)
+	  	return;
+	
+	if(index >=0 && index <= iconSizes_.count()-1)
+	{  				
+		int size=iconSizes_[index];
+		if(useGlobalIconSize()) 
+		{
+	  		broadcastIconSize(size);
+	  		if(folderPanel_->iconSizeLock())
+				folderPanel_->setIconSize(size);
+		}	
+		else  
+		{
+	  		folderPanel_->setIconSize(size);
+			updateIconSizeActionState();	
+		}	
+	}	
+}  
+  
+void MvQFileBrowser::forceIconSize(int size)
+{
+ 	folderPanel_->forceIconSize(size);		
+	updateIconSizeActionState();		
+}  
+  
+void  MvQFileBrowser::slotIconSizeLock(bool b)
+{
+  	folderPanel_->setIconSizeLock(b);
+}  
+
+//========================================
+//
+// Other
+//
+//========================================
+
+void MvQFileBrowser::saveFolderInfo()
+{
+	 folderPanel_->saveFolderInfo();
+}	
+
+//====================================================
+//
+// Read/write settings
+//
+//====================================================
+
+void MvQFileBrowser::writeSettings(QSettings &settings)
+{
+	settings.setValue("geometry",saveGeometry());
+	settings.setValue("state",saveState());
+	//settings.setValue("drawerSplitter",drawerSplitter_->saveState());
+	settings.setValue("mainSplitter",mainSplitter_->saveState());
+	settings.setValue("minimized",(windowState() & Qt::WindowMinimized)?1:0);
+	
+	settings.setValue("sidebarStatus",actionSidebar_->isChecked());
+	//settings.setValue("drawersStatus",actionDrawers_->isChecked());
+	
+	folderPanel_->writeSettings(settings);	
+}	
+
+void MvQFileBrowser::readSettings(QSettings &settings)
+{
+	restoreGeometry(settings.value("geometry").toByteArray());
+	restoreState(settings.value("state").toByteArray());	
+	mainSplitter_->restoreState(settings.value("mainSplitter").toByteArray());
+	//drawerSplitter_->restoreState(settings.value("drawerSplitter").toByteArray());
+	
+	if(settings.value("minimized").toInt()== 1)
+	{
+	  	setWindowState(windowState() | Qt::WindowMinimized);
+	}	
+	
+	/*QString viewMode=settings.value("viewMode").toString();
+	if(viewMode == MvQFileBrowserWidget::DetailedViewMode)
+	 	actionIconView_->trigger();
+	else if(viewMode == MvQFileBrowserWidget::DetailedViewMode)
+	  	actionDetailedView_->trigger();*/
+	
+	QVariant var=settings.value("iconSize");
+	if(!var.isNull()) 
+	{
+	  	slotSetIconSizeByIndex(iconSizes_.indexOf(var.toInt()));
+	}
+	
+	if(settings.value("sidebarStatus").isNull())
+	{
+		actionSidebar_->setChecked(false);
+	}
+	else
+	{
+		actionSidebar_->setChecked(settings.value("sidebarStatus").toBool());
+	}
+	
+	/*if(settings.value("drawersStatus").isNull())
+	{
+		actionDrawers_->setChecked(false);
+	}
+	else
+	{
+		actionDrawers_->setChecked(settings.value("drawersStatus").toBool());
+	}*/
+		
+	folderPanel_->readSettings(settings);	
+}
+
+
+//====================================================
+//
+// Static methods
+//
+//====================================================
+
+MvQFileBrowser* MvQFileBrowser::makeBrowser(QSettings &settings)
+{
+   	MvQFileBrowser* browser=MvQFileBrowser::makeBrowser();
+	browser->readSettings(settings); 
+	return browser;
+}  
+
+MvQFileBrowser* MvQFileBrowser::makeBrowser()
+{	
+	QStringList pathLst;
+	return MvQFileBrowser::makeBrowser(pathLst);
+}
+
+MvQFileBrowser* MvQFileBrowser::makeBrowser(QString fullName)
+{	
+	QStringList pathLst;
+	pathLst << fullName;
+	return MvQFileBrowser::makeBrowser(pathLst);
+}	
+   
+MvQFileBrowser* MvQFileBrowser::makeBrowser(QStringList pathLst)
+{
+	MvQFileBrowser *browser=new MvQFileBrowser(pathLst);
+	
+	browsers_ << browser;
+	
+	return browser;
+}
+
+
+void MvQFileBrowser::openBrowser(QString fullName)
+{		
+  	MvQFileBrowser* browser=MvQFileBrowser::makeBrowser(fullName);
+	browser->showIt();
+}	
+
+void MvQFileBrowser::openBrowser(QStringList pathLst)
+{	
+	MvQFileBrowser* browser=MvQFileBrowser::makeBrowser( pathLst);
+	browser->showIt();
+}
+
+void MvQFileBrowser::showBrowsers()
+{
+  	foreach(MvQFileBrowser *browser,browsers_)  
+		browser->showIt();
+}	
+
+//Return true if close is allowed, false otherwise
+bool MvQFileBrowser::aboutToClose(MvQFileBrowser* browser)
+{
+	//If quit has already stared we ignore the close signal from
+	//the filebrowser windows.
+  	if(quitStarted_)
+	{	
+		return false;
+	}
+	
+	//Otherwise
+	else
+	{  
+  		if(browsers_.count() == 1)
+		{			
+			return MvQFileBrowser::aboutToQuit(browser);
+		}	
+		return true;
+	}	
+}	
+
+bool MvQFileBrowser::aboutToQuit(MvQFileBrowser* topBrowser)
+{
+  	if(QMessageBox::question(0,tr("Quit Metview"),tr("Do you want to quit Metview?"),
+			     QMessageBox::Yes | QMessageBox::Cancel,QMessageBox::Cancel) == QMessageBox::Yes)
+	{
+		quitStarted_=true;
+		
+		//Save bookmarks
+		MvQBookmarks::save();
+		
+		//Save browser settings
+		MvQFileBrowser::save(topBrowser);		
+		
+		//Exit metview
+		QApplication::quit();
+	}
+	
+	return false;
+}	
+	
+void MvQFileBrowser::init()
+{
+	//Set a custom location inside the metview home directory for qsettings 
+  	string sp(getenv("METVIEW_USER_DIRECTORY"));
+	sp+="/System/Preferences/.__config";
+	
+	qDebug() << "QSettings path is set to:" << QString::fromStdString(sp);
+	
+		
+  	QSettings::setPath(QSettings::NativeFormat,QSettings::UserScope,
+			   QString::fromStdString(sp));
+		
+	//Now read the settings
+  	QSettings settings("ECMWF","MV4-Desktop");
+  		
+	settings.beginGroup("main");
+  	int cnt=settings.value("browserCount").toInt();
+	int topBrowserId=settings.value("topBrowserId").toInt();
+	settings.endGroup();
+	
+	MvQDesktopSettings::readSettings(settings);
+	
+	if(cnt <0 || cnt > 100)
+		return;
+		
+	for(int i=0; i < cnt; i++)
+	{ 	
+		if(i != topBrowserId)
+		{
+	  		settings.beginGroup("browser_" + QString::number(i));		
+			MvQFileBrowser::makeBrowser(settings);
+			settings.endGroup();
+		}
+	}
+	
+	if(topBrowserId != -1)
+	{
+	 	settings.beginGroup("browser_" + QString::number(topBrowserId));
+		MvQFileBrowser::makeBrowser(settings); 		
+		settings.endGroup(); 	
+	}
+	
+	if(browsers_.count() == 0)
+	{  	
+		MvQFileBrowser::makeBrowser(QString::fromStdString(Folder::top()->fullName()));					
+	}	
+		
+}	
+
+
+void MvQFileBrowser::save(MvQFileBrowser *topBrowser)
+{
+	//Save folder info for all the open browsers
+	for(int i=0; i < browsers_.count(); i++)
+	{
+		browsers_.at(i)->saveFolderInfo();				  
+	}
+				
+	QSettings settings("ECMWF","MV4-Desktop");
+	
+	//We have to clear it not to remember all the previous windows
+	settings.clear();
+	
+	settings.beginGroup("main");
+	settings.setValue("browserCount",browsers_.count());
+	settings.setValue("topBrowserId",browsers_.indexOf(topBrowser));
+	settings.endGroup();
+	
+	MvQDesktopSettings::writeSettings(settings);
+	
+	for(int i=0; i < browsers_.count(); i++)
+	{		
+		settings.beginGroup("browser_" + QString::number(i));
+		browsers_.at(i)->writeSettings(settings);
+		settings.endGroup();
+	}	
+}
+
+void MvQFileBrowser::broadcastIconSize(int size)
+{
+	for(int i=0; i < browsers_.count(); i++)
+	{
+		browsers_.at(i)->forceIconSize(size);				  
+	}  	
+}
+
+bool MvQFileBrowser::useGlobalIconSize()
+{
+  	MvRequest r=MvApplication::getPreferences();
+
+	r.print();
+	
+	if(const char* c=r("FOLDER_ICON_SIZE_POLICY"))
+	  	return (strcmp(c,"UNIQUE") != 0);
+	
+	return true;
+}
+
+
diff --git a/src/Desktop/MvQFileBrowser.h b/src/Desktop/MvQFileBrowser.h
new file mode 100644
index 0000000..ed42d50
--- /dev/null
+++ b/src/Desktop/MvQFileBrowser.h
@@ -0,0 +1,154 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQFileBrowser_H
+#define MvQFileBrowser_H
+ 
+#include <QFileInfo>
+#include <QList>
+#include <QMap>
+#include <QMainWindow>
+#include <QList>
+#include <QSettings>
+#include <QString>
+
+#include "IconObject.h"
+
+#include "MvQ.h"
+#include "MvQMainWindow.h"
+
+class Folder;
+
+class IconClass;
+class IconObject;
+
+class QAction;
+class QActionGroup;
+class QCloseEvent;
+class QLabel;
+class QListView;
+class QMenu;
+class QSplitter;
+class QVBoxLayout;
+
+class MvQBookmarks;
+class MvQBookmarksPanel;
+class MvQDesktop;
+class MvQDrawerPanel;
+class MvQFileBrowserWidget;
+class MvQFolderHistory;
+class MvQFolderNavigation;
+class MvQFolderPanel;
+class MvQNewIconWidget;
+class MvQPathWidget;
+class MvQSlider;
+
+using namespace std;	
+
+class MvQFileBrowser : public MvQMainWindow
+{
+    Q_OBJECT
+
+public:
+	MvQFileBrowser(QStringList,QWidget* parent=0);
+	~MvQFileBrowser();
+	
+	static void init();
+	static void showBrowsers();
+	static void openBrowser(QString path);
+	static void openBrowser(QStringList);
+	
+public slots:
+	void slotQuit();
+	void slotOpenInBrowser(QString);
+	void slotOpenInTab(QString);
+	void slotOpenInWin(QString);
+	void slotOpenInTabs(QStringList);
+	void slotOpenGroupInWin(QStringList);
+	void slotBookmarkFolder();
+	void slotBookmarkTabs();
+	void slotItemInfo(QString);
+	void slotChangeViewMode(QAction*);
+	void slotIconSizeDown();
+	void slotIconSizeUp();
+	void slotIconSizeLock(bool);
+	void slotSetIconSizeByIndex(int);
+	void slotPreferences();	
+	void slotCurrentFolderChanged();
+	void slotUpdateNavigationActions(MvQFolderNavigation *);
+	
+protected:
+	void showIt();
+        void closeEvent(QCloseEvent*);
+	
+	void setupFileActions();
+	void setupNavigateActions();
+	void setupBookmarksActions();
+	void setupHistoryActions();
+	void setupViewActions();
+	void setupSettingsActions();
+	void setupToolsActions();
+
+	void connectBookmarksObject(MvQBookmarks*);
+	void updateViewModeStatus(MvQ::FolderViewMode);
+	void setupIconSizeWidget();
+	void updateIconSizeActionState();
+	void forceIconSize(int);
+	
+	void saveFolderInfo();
+	void writeSettings(QSettings &);
+	void readSettings(QSettings &);
+	
+	static MvQFileBrowser *makeBrowser(QSettings&);
+	static MvQFileBrowser *makeBrowser();	
+	static MvQFileBrowser *makeBrowser(QString path);
+	static MvQFileBrowser *makeBrowser(QStringList);
+	static bool aboutToClose(MvQFileBrowser*);
+	static bool aboutToQuit(MvQFileBrowser*);
+	static void save(MvQFileBrowser *);
+	static void broadcastIconSize(int);
+	static bool useGlobalIconSize();
+		
+	static bool quitStarted_;
+	static QList<MvQFileBrowser*> browsers_;	
+	
+	MvQMainWindow::MenuItemMap menuItems_;
+	
+	QActionGroup*  viewModeAg_;
+	QMap<MvQ::FolderViewMode,QAction*> actionViewMode_;
+	QAction*       actionBack_;
+	QAction*       actionForward_;
+	QAction*       actionParent_;
+	QAction*       actionMvHome_;
+	QAction*       actionWastebasket_;
+	QAction*       actionSidebar_;
+	QMenu*	       gridMenu_; 		
+	
+	QSplitter*	folderSplitter_;	
+	QSplitter*	mainSplitter_;
+        QSplitter*	drawerSplitter_;
+	
+	MvQBookmarksPanel* bookmarksPanel_;
+	
+	MvQFolderPanel* folderPanel_;
+	
+	MvQDrawerPanel* drawerPanel_;
+	
+	QAction*       actionIconSizeDown_;
+	QAction*       actionIconSizeUp_;
+	QAction*       actionIconSizeLock_;
+	QList<int>     iconSizes_;
+	MvQSlider*     iconSizeSlider_;
+	bool           ignoreIconSizeSlider_;
+	
+	QLabel *itemInfoLabel_;
+	MvQPathWidget* breadcrumbs_;
+};
+
+#endif
diff --git a/src/Desktop/MvQFileSystemModel.cc b/src/Desktop/MvQFileSystemModel.cc
new file mode 100644
index 0000000..32e0e6d
--- /dev/null
+++ b/src/Desktop/MvQFileSystemModel.cc
@@ -0,0 +1,241 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQFileSystemModel.h"
+
+#include <QDebug>
+
+#include "IconClass.h"
+#include "Path.h"
+
+/*MvQFileIconProvider::MvQFileIconProvider()
+{
+	char *mvhome=getenv("METVIEW_DIR_SHARE");
+
+ 	if (mvhome == 0)  
+	{
+		return;	
+	}
+	
+	path_= QString(mvhome);
+	path_.append("/icons/");
+}
+
+QIcon MvQFileIconProvider::icon(const QFileInfo& info) const
+{
+	const IconClass &ic=IconClass::guess(info.absoluteFilePath().toStdString()); 
+  
+  	QPixmap p(ic.pixmap().str().c_str());
+  	return QIcon(p);
+  	
+  	//QString suffix = info.suffix();
+	//if(suffix == "grb") 
+	//{	
+	//	QPixmap p("/var/tmp/cgr/PERFORCE/metview_4/share/metview/icons/GRIB.png");
+	//	p.scaled(QSize(16,16));
+	//	return QIcon(p);	
+	//}
+	//if(info.isFile() == true && suffix == "mc") 
+	//{	
+	//	QString str(path_);
+	//	str.append("MACRO.xpm");
+	//	QPixmap p(str);
+	//	p.scaled(QSize(16,16));
+	//	return QIcon(p);	
+	//}
+	//else 
+	//	return QFileIconProvider::icon(info);
+}*/	
+
+
+
+MvQFileSystemModel::MvQFileSystemModel()
+{
+}
+
+MvQFileSystemModel::~MvQFileSystemModel()
+{
+}
+
+int MvQFileSystemModel::columnCount( const QModelIndex& parent) const
+{
+   	return  QFileSystemModel::columnCount(parent);
+}
+
+QVariant MvQFileSystemModel::data( const QModelIndex& index, int role ) const
+{
+  	if(role == Qt::DecorationRole && index.column() == 0)
+	{
+	  	QString fname=fileName(index);
+	  	if(!class_.contains(fname))
+		{
+			class_[fname]=new MvQFileIconData(fname,IconClass::guess(filePath(index).toStdString()));
+		}
+		return QPixmap(class_[fname]->iconClass().pixmap().str().c_str());		
+	}
+	else
+	{
+	  	return QFileSystemModel::data(index,role);
+	}
+	
+  	/*if(role != Qt::ToolTipRole)
+	{
+		return QFileSystemModel::data(index,role);
+	}
+	else
+	{
+		QFileInfo info=fileInfo(index);	
+		//if(info.suffix() == "grb")	
+		//	return QString("GRIB file");
+		if(info.isFile() == true && info.suffix() == "mc")	
+		{
+			return getMacroHeader(info);
+			//return QString("Macro");
+		}
+		else
+			return QVariant();
+	}*/	
+}
+  
+ 
+QString MvQFileSystemModel::getMacroHeader(QFileInfo& info)
+{
+	//qDebug() << info.absoluteFilePath();
+
+/*	QFile file(info.absoluteFilePath()); 
+	if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
+        	return QString();
+
+	bool newItem=false;
+
+	QString res;
+
+	QStringList keys;
+	keys << "Function" << "Syntax" << "Category" << "Parameters";
+
+	//MvQMacroHeader header(keys);
+
+	QString key("Description");
+
+	QTextStream in(&file); 
+	while (!in.atEnd()) 
+	{
+		QString line = in.readLine().simplified();
+         	if(line.startsWith("#") == true)
+		{
+			QString expr("(^#\\s*");
+			expr.append(key);
+			expr.append("\\s*: )(\\S.*)");
+
+			QRegExp rx(expr);
+MvQFileSystemModel
+			if(rx.indexIn(line) > -1)
+			{
+				newItem = true;
+				res.append(rx.cap(2));
+			}
+			else if(newItem) 
+			{
+				if(line.contains(QRegExp("(^# \\S.*\\s*: )")))
+				{
+					newItem = false;
+					return res;
+				}
+				else
+				{		
+					res.append("\n");
+					QRegExp rx("(^#\\s*)(\\S.*)");
+					if(rx.indexIn(line) > -1)
+					{
+						res.append(rx.cap(2));
+					}
+					else
+					{
+						res.append("\n");
+					}
+				}
+			}
+		}
+     	}
+
+	file.close();
+
+	return res;*/
+
+	return QString();
+}
+
+/*MvQDirFilterModel::MvQDirFilterModel(QObject *parent) :  QSortFilterProxyModel(parent)
+{
+}
+
+void MvQDirFilterModel::setSourceModel(QAbstractItemModel* sourceModel)
+{
+	fsModel_=static_cast<MvQFileSystemModel*>(sourceModel);
+	QSortFilterProxyModel::setSourceModel(sourceModel);
+}
+
+bool MvQDirFilterModel::filterAcceptsRow(int sourceRow,
+         const QModelIndex &sourceParent) const
+{
+	QModelIndex index=fsModel_->index(sourceRow,0,sourceParent);
+	if(fsModel_->isDir(index))
+	{
+		if(!fsModel_->fileName(index).endsWith("#"))
+			return true;
+	}
+	
+	return false;
+}
+*/
+
+MvQCurrentDirFilterModel::MvQCurrentDirFilterModel(QObject *parent) :  QSortFilterProxyModel(parent)
+{
+}
+
+void MvQCurrentDirFilterModel::setSourceModel(QAbstractItemModel* sourceModel)
+{
+	fsModel_=static_cast<MvQFileSystemModel*>(sourceModel);
+	QSortFilterProxyModel::setSourceModel(sourceModel);
+}
+
+bool MvQCurrentDirFilterModel::filterAcceptsRow(int sourceRow,
+         const QModelIndex &sourceParent) const
+{
+	QModelIndex index=fsModel_->index(sourceRow,0,sourceParent);
+
+	//qDebug() << "filter:" << fsModel_->fileName(index);
+
+	QString fileName=fsModel_->fileName(index);
+
+	if(fsModel_->isDir(index) == true)
+	{
+	  	if(fileName.endsWith("#") == false)
+			return true;
+		else
+			return false;
+	}
+
+	if(fileName.startsWith(".") == false && 
+	fileName.startsWith("..") == false)
+	{
+		return true;	
+	}
+	
+	return false;
+}
+
+bool MvQCurrentDirFilterModel::filterAcceptsColumn(int source_column, const QModelIndex & source_parent ) const
+{
+	//qDebug() << "column index" << source_parent.column() << fsModel_->columnCount(QModelIndex());
+	
+	return true;
+}	
+
+
diff --git a/src/Desktop/MvQFileSystemModel.h b/src/Desktop/MvQFileSystemModel.h
new file mode 100644
index 0000000..2b088f7
--- /dev/null
+++ b/src/Desktop/MvQFileSystemModel.h
@@ -0,0 +1,77 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQFileSystemModel_H
+#define MvQFileSystemModel_H
+
+#include <QFileIconProvider>
+#include <QFileSystemModel>
+#include <QSortFilterProxyModel>
+
+class IconClass;
+
+/*class MvQFileIconProvider : public QFileIconProvider
+{
+public:
+	MvQFileIconProvider();
+	QIcon icon(const QFileInfo&) const;
+private:
+	QString path_;
+};*/
+
+class MvQFileIconData
+{
+public: 
+	MvQFileIconData(QString name,const IconClass& iconClass) :
+		name_(name), iconClass_(iconClass) {};
+	const IconClass& iconClass() {return iconClass_;}
+  protected:
+ 	QString name_;
+	const IconClass& iconClass_;
+};	
+
+
+class MvQFileSystemModel : public QFileSystemModel
+{
+public:
+	MvQFileSystemModel();
+	~MvQFileSystemModel();	
+	int columnCount( const QModelIndex&) const;
+	QVariant data( const QModelIndex&, int) const;
+
+	static QString getMacroHeader(QFileInfo&);
+	
+protected:	
+	mutable QMap<QString,MvQFileIconData*> class_;
+};
+
+/*class MvQDirFilterModel : public QSortFilterProxyModel
+{
+public:
+	MvQDirFilterModel(QObject *parent=0);
+	void setSourceModel(QAbstractItemModel*);
+	bool filterAcceptsRow(int,const QModelIndex &) const;
+
+protected:
+	MvQFileSystemModel *fsModel_;
+};*/
+
+class MvQCurrentDirFilterModel : public QSortFilterProxyModel
+{
+public:
+	MvQCurrentDirFilterModel(QObject *parent=0);
+	void setSourceModel(QAbstractItemModel*);
+	bool filterAcceptsRow(int,const QModelIndex &) const;
+	bool filterAcceptsColumn(int,const QModelIndex &) const;
+
+protected:
+	MvQFileSystemModel *fsModel_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQFileWatcher.cc b/src/Desktop/MvQFileWatcher.cc
new file mode 100644
index 0000000..c82cdad
--- /dev/null
+++ b/src/Desktop/MvQFileWatcher.cc
@@ -0,0 +1,73 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <stdio.h> 
+#include <strings.h>
+
+#include "MvQFileWatcher.h"
+
+#include <QFileSystemWatcher>
+
+MvQFileWatcher::MvQFileWatcher():
+	file_(0),
+	watcher_(0)
+{
+}
+
+MvQFileWatcher::~MvQFileWatcher()
+{
+	stop();
+}
+
+void MvQFileWatcher::stop()
+{
+	if(file_)
+	{
+		if(watcher_)
+		{
+		  	delete watcher_;
+			watcher_=0;
+		}	
+		  
+		file_ = 0;
+	}
+}
+
+void MvQFileWatcher::start(FILE* f,const string& path)
+{
+	if(file_ == 0 && f != 0)
+	{
+		file_ = f;
+		
+		int n=fileno(f);
+		
+		if(!watcher_)
+		{
+		  	watcher_=new QFileSystemWatcher(this);
+			watcher_->addPath(QString::fromStdString(path));
+		
+			connect(watcher_,SIGNAL(fileChanged(const QString&)),
+				this,SLOT(slotInput(const QString&)));
+		}		
+	}
+}
+
+
+void MvQFileWatcher::slotInput(const QString&)
+{
+	char buf[1024];
+
+	if(fgets(buf,sizeof(buf),file_))
+	{
+		if(buf[0]) buf[strlen(buf)-1] = 0;
+		emit ready(buf);
+	}
+	//else 
+	//	emit done(file_);
+}
diff --git a/src/Desktop/MvQFileWatcher.h b/src/Desktop/MvQFileWatcher.h
new file mode 100644
index 0000000..344a016
--- /dev/null
+++ b/src/Desktop/MvQFileWatcher.h
@@ -0,0 +1,50 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQFileWatcher_H
+#define MvQFileWatcher_H
+
+#include <QObject>
+
+#include <stdio.h>
+#include <string>
+
+using namespace std;
+
+class QFileSystemWatcher;
+
+class MvQFileWatcher : public QObject
+{
+Q_OBJECT  
+  
+public:
+	MvQFileWatcher();
+	virtual ~MvQFileWatcher(); 
+
+	void start(FILE*,const string&);
+	void stop();
+
+signals:
+	void ready(const char*);
+	void done(FILE*);
+
+protected slots:
+	void slotInput(const QString&);    
+	
+private:
+	// No copy allowed
+	MvQFileWatcher(const MvQFileWatcher&);
+	MvQFileWatcher& operator=(const MvQFileWatcher&);
+
+	FILE*       file_;
+	QFileSystemWatcher* watcher_;
+
+};
+
+#endif
diff --git a/src/Desktop/MvQFolderDrawerPanel.cc b/src/Desktop/MvQFolderDrawerPanel.cc
new file mode 100644
index 0000000..202180b
--- /dev/null
+++ b/src/Desktop/MvQFolderDrawerPanel.cc
@@ -0,0 +1,274 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <QDebug>
+#include <QInputDialog>
+#include <QMessageBox>
+#include <QToolButton>
+#include <QTabBar>
+#include <QStackedWidget>
+
+#include "MvQFolderDrawerPanel.h"
+
+#include "MvQContextMenu.h"
+#include "MvQDrawerView.h"
+#include "MvQFolderModel.h"
+
+#include "Folder.h"
+#include "IconClass.h"
+#include "IconFactory.h"
+#include "IconObject.h"
+
+MvQFolderDrawerPanel::MvQFolderDrawerPanel(QWidget *parent) : MvQDrawerPanel(parent)
+{   
+  	//Init
+	parentFolder_=Folder::folder("stationary");
+	if(parentFolder_)
+	{
+		parentFolder_->scan();
+		
+		const map<string,IconObjectH>& kids= parentFolder_->kids();
+		for(map<string,IconObjectH>::const_iterator it=kids.begin(); it != kids.end(); it++)
+		{						
+			IconObject *obj=it->second;
+			if(it->second->isFolder())
+			{
+			  	Folder *folder=static_cast<Folder*>(obj);
+				createDrawer(folder);		
+			}
+		}
+		
+		parentFolder_->addObserver(this);
+		
+	}	
+	
+	//Add cornerbutton
+	QToolButton *tb=new QToolButton(this);
+	tb->setIcon(QPixmap(QString::fromUtf8(":/desktop/add.svg")));
+	tb->setAutoRaise(true);
+	tb->setToolTip(tr("Add new drawer"));
+	addCornerButton(tb);
+	
+	//Selection
+	connect(tb,SIGNAL(clicked(bool)),
+		this,SLOT(slotCreateDrawer(bool)));
+}		
+
+MvQFolderDrawerPanel::~MvQFolderDrawerPanel()
+{
+	parentFolder_->removeObserver(this);
+}
+
+MvQContextItemSet* MvQFolderDrawerPanel::cmSet()
+{
+	static MvQContextItemSet cmItems("FolderDrawerPanel");  
+  	return &cmItems;
+}
+
+void MvQFolderDrawerPanel:: setIconPositions()
+{
+	/*for(int i=0; i < tab_->count(); i++)
+	{
+	  	MvQDrawerView* view  =static_cast<MvQDrawerView*>(stacked_->widget(i));	
+		if(view)
+		  	view->slotSetPositions();
+	}*/	 
+}
+
+//---------------------
+// 
+//---------------------
+
+void MvQFolderDrawerPanel::createDrawer(Folder *folder)
+{
+	MvQFolderModel *model=new MvQFolderModel(this);
+	model->setFolder(folder);
+  
+  	MvQDrawerView *drawer = new MvQDrawerView(model);
+	MvQDrawerPanel::addDrawer(drawer,QString::fromStdString(folder->name()));	
+	//drawer->setHelper(true);
+		
+	connect(drawer,SIGNAL(itemEntered(QString)),
+		this,SIGNAL(itemEntered(QString)));
+			
+	connect(drawer,SIGNAL(desktopCommandRequested(QString,QPoint)),
+	        this,SLOT(slotCommandFromView(QString,QPoint)));	
+		
+}
+
+
+//==============================================
+//
+// Context menu + button actions
+//
+//===============================================
+
+void MvQFolderDrawerPanel::slotCreateDrawer(bool)
+{
+	string offeredName=getUniqueName("Drawer");
+	  
+	bool ok;
+     	QString text = QInputDialog::getText(0, 
+			tr("Create new drawer"),
+                        tr("Drawer name:"), QLineEdit::Normal,
+                        QString::fromStdString(offeredName), &ok);		
+	
+	if(!ok || text.isEmpty())
+        	return; 	
+				
+	string name=text.toStdString();
+		
+	parentFolder_=Folder::folder("stationary");
+	if(!parentFolder_)
+		return;
+	
+	const IconClass &kind=IconClass::find("FOLDER");	
+	IconFactory::create(parentFolder_,name,kind);
+}  
+
+void MvQFolderDrawerPanel::renameDrawer(int index)
+{
+  	if(index<0 || index >= drawerCount())
+		return;
+		  
+	bool ok;
+     	QString text = QInputDialog::getText(0, 
+		tr("Rename drawer"),
+                tr("Drawer name:"), QLineEdit::Normal,
+                drawerText(index), &ok);		
+	
+	if(ok && !text.isEmpty())
+        { 	
+		Folder *folder=indexToFolder(index);		
+		string name=getUniqueName(text.toStdString());
+		if(folder)
+			folder->rename(name);
+	}
+}  
+
+void MvQFolderDrawerPanel::deleteDrawer(int index)
+{
+	if(index < 0 || index >= drawerCount())
+  		return;	
+	
+  	if(QMessageBox::question(0,tr("Delete drawer"),tr("Do you want to delete drawer") +" <b>" + drawerText(index) + "</b>?",
+			     QMessageBox::Yes | QMessageBox::Cancel,QMessageBox::Cancel) == QMessageBox::Cancel)
+	{
+	  	return;
+	}	
+		
+	Folder *folder=indexToFolder(index);
+	if(folder)
+		folder->toWastebasket();
+}  
+
+
+//----------------------------------------------
+// Observer methods
+//----------------------------------------------
+
+void MvQFolderDrawerPanel::arrived(IconObject *obj)
+{
+	Folder *folder=static_cast<Folder*>(obj);
+	if(!folder)
+	  	return;
+	
+	createDrawer(folder); 
+}  
+
+void MvQFolderDrawerPanel::renamed(IconObject *obj,const string&)
+{
+	Folder *folder=static_cast<Folder*>(obj);
+	if(!folder)
+	  	return;
+	
+	MvQDrawerPanel::renameDrawer(folderToIndex(folder),QString::fromStdString(folder->name()));
+}  
+
+void MvQFolderDrawerPanel::gone(IconObject *obj)
+{
+	Folder *folder=static_cast<Folder*>(obj);
+	if(!folder)
+	  	return;
+		
+	int index=folderToIndex(folder);
+	MvQFolderModel *model=indexToModel(index);
+	
+	MvQDrawerPanel::deleteDrawer(folderToIndex(folder));
+	
+	if(model)
+	  	delete model;
+}  
+
+//----------------------------------------------
+// Context menu
+//----------------------------------------------
+
+void MvQFolderDrawerPanel::command(QString name,int index)
+{
+	if(name == "deleteDrawer")
+	{
+	  	deleteDrawer(index);
+	}
+	else if(name == "renameDrawer")
+	{
+	  	renameDrawer(index);
+	}
+}  
+
+//Desktop menu signal from one of the views
+void MvQFolderDrawerPanel::slotCommandFromView(QString name,QPoint /*pos*/)
+{
+	if(name == "deleteDrawer" || name == "renameDrawer")
+	{    
+		MvQDrawerView *view=static_cast<MvQDrawerView*>(sender());
+		if(!view)
+			return;
+	
+		int index=drawerIndex(view);
+		if(index != 0)
+		  	command(name,index);	
+	}	  		
+} 
+	
+
+string MvQFolderDrawerPanel::getUniqueName(const string& name)
+{
+	Folder* folder=Folder::folder("stationary");
+	if(folder)
+	{
+		return folder->uniqueName(name);
+	}
+	return string(name);  
+}  
+
+int MvQFolderDrawerPanel::folderToIndex(Folder *f)
+{
+  	for(int i=0; i < drawerCount(); i++)
+	{
+	  	MvQDrawerView *view=static_cast<MvQDrawerView*>(drawer(i));
+		
+		if(view->currentFolder() == f)
+		  	return i;
+	}
+	
+	return -1;
+}
+
+Folder *MvQFolderDrawerPanel::indexToFolder(int index)
+{ 	
+	MvQDrawerView *view=static_cast<MvQDrawerView*>(drawer(index));		
+	return (view)?view->currentFolder():0;
+}	
+
+MvQFolderModel *MvQFolderDrawerPanel::indexToModel(int index)
+{
+  	MvQDrawerView *view=static_cast<MvQDrawerView*>(drawer(index));
+	return (view)?view->folderModel():0;
+}
diff --git a/src/Desktop/MvQFolderDrawerPanel.h b/src/Desktop/MvQFolderDrawerPanel.h
new file mode 100644
index 0000000..6f654fc
--- /dev/null
+++ b/src/Desktop/MvQFolderDrawerPanel.h
@@ -0,0 +1,65 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQFolderDrawerPanel_H
+#define MvQFolderDrawerPanel_H
+
+#include "MvQDrawerPanel.h"
+#include "FolderObserver.h"
+
+#include <string>
+
+using namespace std;
+
+class MvQContextItemSet;
+class MvQFolderModel;
+
+class Folder;
+class IconObject;
+
+class MvQFolderDrawerPanel :  public MvQDrawerPanel, public FolderObserver
+{
+Q_OBJECT
+
+public:
+    	MvQFolderDrawerPanel(QWidget *parent=0);
+	~MvQFolderDrawerPanel();
+		
+	void setIconPositions(); 
+  
+public slots:
+	void slotCreateDrawer(bool);
+	void slotCommandFromView(QString,QPoint);
+
+signals:
+    	void itemEntered(QString);
+	void commandRequested(Folder*,QString,QPoint);
+	
+protected:
+ 
+	void command(QString,int);
+  	void createDrawer(Folder *);
+	void renameDrawer(int);
+  	void deleteDrawer(int);
+	
+	void arrived(IconObject*);
+	void renamed(IconObject*,const std::string&);
+	void gone(IconObject*);
+	void position(IconObject*, int, int) {}
+
+	string getUniqueName(const string&);
+	int folderToIndex(Folder *);
+	Folder *indexToFolder(int);
+	MvQFolderModel* indexToModel(int);
+	MvQContextItemSet* cmSet();	
+	
+	Folder* parentFolder_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderHistory.cc b/src/Desktop/MvQFolderHistory.cc
new file mode 100644
index 0000000..f7da5f3
--- /dev/null
+++ b/src/Desktop/MvQFolderHistory.cc
@@ -0,0 +1,128 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQFolderHistory.h"
+
+#include <QAction>
+#include <QMenu>
+
+#include "MvQContextMenu.h"
+#include "MvQIconProvider.h"
+
+#include "Folder.h"
+
+MvQFolderHistory::MvQFolderHistory(QMenu *menu) : maxNum_(20), menu_(menu)
+{
+	if(!menu_)
+	  	return;
+
+	connect(menu_,SIGNAL(triggered(QAction*)),
+		this,SLOT(slotSelected(QAction*)));	
+		
+	menu_->setContextMenuPolicy(Qt::CustomContextMenu);		
+	connect(menu_,SIGNAL(customContextMenuRequested(const QPoint &)),
+                this, SLOT(slotContextMenu(const QPoint &)));	
+}  
+
+QAction* MvQFolderHistory::add(QString fullName)
+{
+	foreach(QAction* action,actions_)
+	{
+	  	if(action->text() == fullName)
+		{
+		  	return 0;
+		}
+	}	
+  
+  	if(actions_.count() < maxNum_)
+	{	  	
+		QAction *action=createAction(fullName);
+						  		
+		if(menu_->actions().count() == 0)
+		{
+			menu_->addAction(action);
+		}
+		else
+		{  
+			menu_->insertAction(actions_.front(),action);
+		}
+			
+		actions_.prepend(action);	
+		return action;
+	}
+	else
+	{
+		QAction *action;
+		while(actions_.count() >= maxNum_)
+		{
+			action=actions_.back();			
+			menu_->removeAction(action);
+			actions_.takeLast();
+			delete action;
+		}	
+		
+		action=createAction(fullName);		
+		menu_->insertAction(actions_.front(),action);
+		actions_.prepend(action);
+		return action;
+	}
+	
+	return 0;
+} 
+
+QString MvQFolderHistory::path(QAction* action)
+{
+  	if(!action)
+	  	return QString();
+	
+	int index=actions_.indexOf(action);
+	if(index != -1)
+	  	return actions_.at(index)->text();
+	
+	return QString();
+}	
+	
+QAction* MvQFolderHistory::createAction(QString fullName)
+{
+  	//Home
+	QAction *action = new QAction(menu_);
+	action->setText(fullName); 
+	
+	Folder* folder=Folder::folder(fullName.toStdString(),false);
+	if(folder)
+	{
+		action->setIcon(MvQIconProvider::pixmap(folder,24));
+	}
+	return action;
+}
+
+
+void MvQFolderHistory::slotSelected(QAction* ac)
+{
+  	if(ac)
+	  	emit itemSelected(path(ac));
+}
+
+void MvQFolderHistory::slotContextMenu(const QPoint& pos)
+{
+	if(menu_) 
+	{
+	  	static MvQContextItemSet cmItems("FolderHistory");  
+	
+		QAction *ac=menu_->actionAt(pos);
+		QString pt=path(ac);
+		if(pt.isEmpty())
+		  	return;
+		
+		QString selection=MvQContextMenu::instance()->exec(cmItems.icon(),menu_->mapToGlobal(pos),menu_);
+		if(!selection.isEmpty())
+			emit commandRequested(selection,pt);
+	}
+}	
+  
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderHistory.h b/src/Desktop/MvQFolderHistory.h
new file mode 100644
index 0000000..8b0a5b8
--- /dev/null
+++ b/src/Desktop/MvQFolderHistory.h
@@ -0,0 +1,49 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQFolderHistory_H
+#define MvQFolderHistory_H
+
+#include <QList>
+#include <QObject>
+#include <QPoint>
+#include <QString>
+
+class QAction;
+class QMenu;
+
+class MvQFolderHistory : public QObject
+{
+
+Q_OBJECT 
+
+public:
+	MvQFolderHistory(QMenu*);
+	~MvQFolderHistory() {}
+		
+	QAction* add(QString);
+
+protected slots:
+	void slotSelected(QAction*);
+	void slotContextMenu(const QPoint&);
+	
+signals:
+	void itemSelected(QString);  
+	void commandRequested(QString,QString);  
+	
+protected: 
+ 	QAction* createAction(QString);
+	QString  path(QAction*);
+	
+	QList<QAction*> actions_;
+	const int maxNum_;
+	QMenu* menu_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderItemProperty.cc b/src/Desktop/MvQFolderItemProperty.cc
new file mode 100644
index 0000000..6f4a7af
--- /dev/null
+++ b/src/Desktop/MvQFolderItemProperty.cc
@@ -0,0 +1,120 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQFolderItemProperty.h"
+
+#include <QApplication>
+
+MvQFolderItemProperty::MvQFolderItemProperty() :
+    fm_(QApplication::font()),
+    refFm_(fm_)
+    
+{ 
+	iconSize_=32;
+	refIconSize_=32;
+	scaling_=1.;
+	
+	font_=QApplication::font();   
+	fm_=QFontMetrics(font_);  
+	height_=iconSize_+5+fm_.height();
+	
+	refFont_=QApplication::font();   
+	refFm_=QFontMetrics(font_); 	
+	refHeight_=height_;
+}  
+
+
+bool MvQFolderItemProperty::setIconSize(int size)
+{
+  	if(iconSize_ == size)
+	  	return false;
+	  
+	iconSize_=size;	
+	if(iconSize_ != 32)
+	{
+	  	if(iconSize_ > 32)
+		{  
+	  		float dScale=static_cast<float>(iconSize_)/32.;	
+			int h=refFont_.pointSize();		
+			font_.setPointSize(2*(static_cast<int>(h*dScale)/2));   
+		}
+		
+		fm_=QFontMetrics(font_);
+		height_=iconSize_+5+fm_.height();
+		scaling_=static_cast<float>(height_)/static_cast<float>(refHeight_);
+	}
+	else
+	{  	
+	  	font_=refFont_;   
+		fm_=refFm_;
+		height_=refHeight_;
+		scaling_=1.;
+	}
+	
+	return true;
+}  
+
+QPoint MvQFolderItemProperty::position(QString name, QPoint refPos)
+{	
+	if(iconSize_ != 32)
+	{
+		//Ref centre
+		int refTextW=refFm_.width(name);
+		int refW=(refTextW < 32)?32:refTextW;
+		int cx=refPos.x()+refW/2;
+		//int cy=refPos.y()+refHeight_/2;
+			
+		//Item width
+		int textW=fm_.width(name);
+		int w=(textW < iconSize_)?iconSize_:textW;
+		
+		int x=cx-w/2;
+		int y=refPos.y()*scaling_;  //cy*scaling_-height_/2;		
+		return QPoint(x,y);
+	}
+	
+	return refPos;
+}
+
+QPoint MvQFolderItemProperty::referencePosition(QString name,QPoint pos)
+{	
+	if(iconSize_ != 32)
+	{
+		//Item width
+		int textW=fm_.width(name);
+		int w=(textW < iconSize_)?iconSize_:textW;
+		
+		//Item centre
+		int cx=pos.x()+w/2;
+		//int cy=pos.y()+height_/2;
+				
+		//Ref width
+		int refTextW=refFm_.width(name);
+		int refW=(refTextW < 32)?32:refTextW;
+		
+		//Ref
+		int refX=cx-refW/2;
+		int refY=pos.y()/scaling_; //cy/scaling_-refHeight_/2;
+		
+		return QPoint(refX,refY);
+	}
+	
+	return pos;
+}	
+
+QPoint MvQFolderItemProperty::adjsutReferencePosition(QString name,QString oriName,QPoint pos)
+{
+	//Ref width
+	int oriW=refFm_.width(oriName);
+	if(oriW < 32) oriW=32;
+	int w=refFm_.width(name);
+	if(w < 32) w=32;
+	
+	return QPoint(pos.x()-(w-oriW)/2.,pos.y());
+}
diff --git a/src/Desktop/MvQFolderItemProperty.h b/src/Desktop/MvQFolderItemProperty.h
new file mode 100644
index 0000000..845d8e2
--- /dev/null
+++ b/src/Desktop/MvQFolderItemProperty.h
@@ -0,0 +1,41 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQFolderItemProperty_H
+#define MvQFolderItemProperty_H
+
+#include <QFont>
+#include <QFontMetrics> 
+
+class MvQFolderItemProperty
+{
+public:
+    	MvQFolderItemProperty();
+	int iconSize() const {return iconSize_;}
+	QFont font() const {return font_;}
+        bool setIconSize(int);
+	QPoint position(QString,QPoint);
+	QPoint referencePosition(QString,QPoint);
+	QPoint adjsutReferencePosition(QString,QString,QPoint);
+	float scaling() const {return scaling_;}
+	
+protected:
+	int iconSize_;
+	int refIconSize_;
+	float scaling_;
+	
+	QFont font_;  
+	QFont refFont_;
+	QFontMetrics fm_;
+	QFontMetrics refFm_; 
+	int height_;
+	int refHeight_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderModel.cc b/src/Desktop/MvQFolderModel.cc
new file mode 100644
index 0000000..126c4f4
--- /dev/null
+++ b/src/Desktop/MvQFolderModel.cc
@@ -0,0 +1,742 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQFolderModel.h"
+
+#include <QApplication>
+#include <QDateTime>
+#include <QDebug>
+#include <QFont>
+#include <QFontMetrics> 
+#include <QMimeData>
+#include <QPainter>
+#include <QPixmap>
+
+#include "IconClass.h"
+#include "IconInfo.h"
+#include "Path.h"
+
+#include "Folder.h"
+#include "FolderInfo.h"
+
+#include "IconFactory.h"
+
+#include "MvQFolderItemProperty.h"
+#include "MvQIconProvider.h"
+
+#include <assert.h>
+#include <map>
+
+QMap<IconObject::IconStatus,QColor> MvQFolderModel::statusColour_;
+
+MvQFolderModel::MvQFolderModel(QObject *parent) : 
+    QAbstractItemModel(parent) 
+{ 
+	init();
+}
+
+
+MvQFolderModel::MvQFolderModel(int iconSize,QObject *parent) : 
+    QAbstractItemModel(parent)
+{ 
+	init();
+	itemProp_->setIconSize(iconSize);
+}
+
+void MvQFolderModel::init()
+{
+	folder_=0 ,
+    	initialScanIsOn_=false,
+    	lastArrived_=0;
+    
+    	itemProp_=new MvQFolderItemProperty();
+	
+	if(statusColour_.empty())
+	{
+	  	statusColour_[IconObject::DefaultStatus]=Qt::black;
+		statusColour_[IconObject::ReadyStatus]=QColor(0,205,0);
+		statusColour_[IconObject::WaitingStatus]=QColor(255,188,46);
+		statusColour_[IconObject::ErrorStatus]=QColor(255,0,0);  
+	}
+}
+  
+MvQFolderModel::~MvQFolderModel()
+{
+	saveFolderInfo();
+	if(folder_)
+	{  	
+		folder_->removeObserver(this);
+		((IconObject*)folder_)->removeObserver((IconObserver*)this);
+	}
+	
+	delete itemProp_;
+}
+
+bool MvQFolderModel::isDataSet() const
+{
+	return (folder_ == 0) ? false : true;		
+}
+
+void MvQFolderModel::folderIsAboutToChange()
+{
+	beginResetModel();
+}
+
+bool MvQFolderModel::setFolder(Folder *folder)
+{
+	bool retVal=false;
+	
+	if(folder == folder_)
+	  	return false;
+	
+	saveFolderInfo();
+	
+	beginResetModel();
+	
+	//Clear all the items!!!
+	items_.clear();
+	
+	if(folder_)
+	{
+	  	folder_->removeObserver(this);
+		((IconObject*)folder_)->removeObserver((IconObserver*)this);
+	}	
+		
+	folder_=folder;
+	lastArrived_=0;
+	
+	if(folder_)
+	{
+	  	//We are not an observer at the moment so arrived() will
+		//not be called!
+		folder_->scan();
+		
+		//Load items_ from folder
+		loadItems();
+		
+		//Ask the view to compute/adjust icon positions!!
+		emit updateObjectPositions();
+	
+		//Now we become an observer. Any changes afterwards will end up 
+		//in arrived(), gone() etc. observer methods!
+		folder_->addObserver(this);	
+		((IconObject*)folder_)->addObserver((IconObserver*)this);		
+		
+		retVal=true;
+	}
+	
+	endResetModel();
+	
+	return retVal;
+}
+
+bool MvQFolderModel::setFolder(QString fullName)
+{
+	if(folder_ && QString::fromStdString(folder_->fullName()) == fullName)
+		return false; 
+  
+  	return setFolder(Folder::folder(fullName.toStdString(),false));
+}		
+
+bool MvQFolderModel::setFolder(const QModelIndex& index )
+{	
+	IconObject*   obj=objectFromIndex(index);
+	if(obj && obj->isFolder())
+	{	
+  		setFolder(static_cast<Folder*>(obj));
+		return true;
+	}	  
+	
+	return false;
+}	
+	
+	
+bool MvQFolderModel::setFolderToParent()
+{	
+	if(!folder_) return false;
+	
+	IconObject*   obj=folder_->parent();
+	if(obj && obj->isFolder())
+	{
+  		return setFolder(static_cast<Folder*>(obj));
+	}
+	
+	return false;
+}	
+	
+int MvQFolderModel::columnCount( const QModelIndex& parent) const
+{
+   	if(!isDataSet())
+		return 0;
+	
+	 return parent.isValid() ? 0 : 6;
+}
+
+
+int MvQFolderModel::rowCount( const QModelIndex& index) const
+{
+    	if(!isDataSet())
+		return 0;
+	
+	if (!index.isValid() )
+	{
+		return items_.count();
+	}
+	else
+	{
+		return  0;
+	}
+}
+
+QVariant MvQFolderModel::data( const QModelIndex& index, int role ) const
+{
+	if (role != Qt::DisplayRole && role != Qt::DecorationRole  && 
+	    role != Qt::ForegroundRole  &&  role != Qt::FontRole && 
+	    role != ClassFilterRole && role != PositionRole && role != EditorRole &&
+ 	    role != Qt::EditRole && role != Qt::UserRole)
+	{  	
+		return QVariant();
+	}
+	
+  	if ( !index.isValid())
+	{
+		return QVariant();
+	}
+	
+	IconObject *obj=objectFromIndex(index);
+	if(!obj)
+		return QString();
+	
+	//First column: icon + name
+	if(index.column() == 0)
+	{	
+		switch(role)
+		{
+		case Qt::DecorationRole:  			
+		{
+		  	return MvQIconProvider::pixmap(obj,itemProp_->iconSize());
+		}	
+			
+		case Qt::DisplayRole:
+		case Qt::EditRole: 
+	  		return QString::fromStdString(obj->name());
+		
+		case Qt::ForegroundRole:
+			{
+	  			QMap<IconObject::IconStatus,QColor>::const_iterator it=statusColour_.find(obj->status());
+				if(it != statusColour_.end())
+				  	return it.value();
+				else
+				  	return QColor();
+			}
+			break;	
+			
+		case ClassFilterRole:
+		  	return isAccepted(obj);
+			
+		case PositionRole:
+			return QPoint(obj->info().x(),obj->info().y());
+		
+		case EditorRole:
+		  	return (obj->editor())?true:false;	
+			
+		case Qt::FontRole:
+			{
+		  		if(obj->isLink())
+				{
+				  	QFont font=itemProp_->font();
+					font.setItalic(true);
+					return font;
+				}
+				else
+				  	return itemProp_->font();
+			}	
+		  
+		default:
+		  	return QString();
+		} 	
+	}
+	else if(index.column() == 1)
+	{
+		if(role == Qt::DisplayRole)
+	  		return QString::fromStdString(obj->editorClass().name()); 
+	}  
+	else if(index.column() == 2)
+	{
+		if(role == Qt::DisplayRole)
+	  		return formatFileSize(obj->path().sizeInBytes());
+		else if(role == Qt::UserRole)
+		{
+		  	qint64 qs=obj->path().sizeInBytes();
+			return qs;
+ 		}
+	}  
+	else if(index.column() == 3)
+	{
+		if(role == Qt::DisplayRole)
+	  		return formatFileDate(obj->path().lastModified());
+		  	  
+	} 
+	else if(index.column() == 4)
+	{
+		if(role == Qt::DisplayRole)
+	  		return QString::fromStdString(obj->path().owner());
+		  	  
+	} 
+	else if(index.column() == 5)
+	{
+		if(role == Qt::DisplayRole)
+	  		return QString::fromStdString(obj->path().permissions());
+		  	  
+	} 
+	
+	
+	if(index.column() >=1 && index.column() <=3)
+	{			
+		if(role == Qt::ForegroundRole)
+		{
+	  		QMap<IconObject::IconStatus,QColor>::const_iterator it=statusColour_.find(obj->status());
+			if(it != statusColour_.end())
+				  return it.value();
+			else
+				  return QColor();
+		}
+		else if(role ==Qt::FontRole)
+		  	return itemProp_->font(); 
+	}
+			
+	return QString();
+}
+
+bool MvQFolderModel::setData( const QModelIndex& index, const QVariant & value, int role) 
+{		
+	if(!index.isValid() || (role != Qt::EditRole  &&  role != PositionRole) || index.column() != 0)
+	{
+		return false;	
+	}
+	
+	IconObject* obj=objectFromIndex(index);
+	
+	if(role == Qt::EditRole)
+	{  	  
+		qDebug() << "Edit:"  << index << value.toString();
+		  	
+		string new_name=value.toString().toStdString();
+	
+		if(obj && obj->name() != new_name)
+		{  
+			QString oriName=QString::fromStdString(obj->name());
+	  	
+			//This will call the renamed() observer method!
+			return obj->rename(new_name);
+		}
+	}
+	else if(role == PositionRole)
+	{
+		QPoint pos=value.toPoint();
+		//setReferencePosition(obj,pos);
+		//QPoint refPos=refrencePosition(value.toPoint());
+		//obj->info().position(refPos.x(),refPos.y()); 
+		obj->info().position(pos.x(),pos.y()); 	
+	}
+	
+	
+	return false;
+}
+
+QVariant MvQFolderModel::headerData(const int section, const Qt::Orientation orient , const int role ) const
+{
+	if ( orient != Qt::Horizontal || role != Qt::DisplayRole)
+  		return QVariant();
+	
+  	if(section == 0)
+	  	return "Name";	
+	else if(section == 1)
+	  	return "Class";
+	else if(section == 2)
+	  	return "Size";
+	else if(section == 3)
+	  	return "Date";
+	else if(section == 4)
+	  	return "Owner";
+	else if(section == 5)
+	  	return "Permissions";
+	
+	return QVariant();
+}
+
+
+QModelIndex MvQFolderModel::index( int row, int column, const QModelIndex & /*parent*/ ) const
+{
+   	if(!isDataSet())
+	{
+		return QModelIndex();
+	}
+
+	return createIndex(row,column,0);
+}
+
+
+QModelIndex MvQFolderModel::parent( const QModelIndex & /*index*/ ) const
+{
+    return QModelIndex();
+}
+
+Qt::ItemFlags MvQFolderModel::flags ( const QModelIndex & index) const
+{
+	Qt::ItemFlags defaultFlags;
+	
+	defaultFlags=Qt::ItemIsEnabled | Qt::ItemIsSelectable;
+		   
+	if(index.column() == 0)
+	{
+		IconObject* obj=objectFromIndex(index);
+		if(obj && !obj->locked() && !obj->editor())
+		{
+			return	Qt::ItemIsEditable | defaultFlags;	
+		}  
+	}	   		   
+	return defaultFlags;
+}
+ 
+IconObject* MvQFolderModel::objectFromIndex(const QModelIndex & index) const
+{
+  	if ( !index.isValid())
+	{
+		return 0;
+	}
+	
+	if(index.row() >=0 && index.row() < items_.count())
+	  	return items_.at(index.row());
+	
+	return 0;
+}
+
+QModelIndex MvQFolderModel::indexFromObject(IconObject *obj)
+{
+  	if(!obj)
+	  	return QModelIndex();
+  
+	int i=items_.indexOf(obj);
+	return (i >=0)?createIndex(i,0,0):QModelIndex();
+}
+
+//Should be called between beginResetModel() and endResetModel() !!
+void MvQFolderModel::loadItems()
+{
+ 	 items_.clear();
+	 if(!folder_)
+	 	return;
+	 
+	 const map<string,IconObjectH>& kids=folder_->kids();	
+	 for(map<string,IconObjectH>::const_iterator it=kids.begin(); it != kids.end(); it++)
+		if(isAccepted(it->second))
+		{
+		  	items_ << it->second;
+		}
+}  	
+
+//------------------------------------
+//
+//  Filtering
+//
+//-------------------------------------
+
+void  MvQFolderModel::setAcceptedClasses(const vector<string>& c)
+{
+	beginResetModel();
+	classes_=c;
+	loadItems();
+	endResetModel();
+}	
+  
+bool MvQFolderModel::isAccepted(const IconClass& kind) const
+{
+  	if(classes_.size()>0)
+	{
+  		for(vector<string>::const_iterator it =  classes_.begin(); it != classes_.end(); ++it)
+		{	
+			if(kind.canBecome(IconClass::find(*it)) )   
+				return true;			
+		}
+		return false;
+	}	
+		
+	return true;
+}  
+
+bool MvQFolderModel::isAccepted(IconObject *obj) const
+{
+	if(obj)
+	{
+		if(!obj->visible())
+		  	return false;
+		
+		const IconClass& kind=obj->editorClass();	
+	  	return isAccepted(kind);
+	}
+	
+	return false;
+}
+
+void MvQFolderModel::saveFolderInfo()
+{
+	if(folder_)
+	  	folder_->folderInfo()->write();
+}
+
+
+QString MvQFolderModel::fullName()
+{
+	return (folder_)?QString::fromStdString(folder_->fullName()):QString();
+}
+
+QString MvQFolderModel::fullName(const QModelIndex & index)
+{
+	IconObject*   obj=objectFromIndex(index);
+	return (obj)?QString::fromStdString(obj->fullName()):QString();
+}	
+
+bool MvQFolderModel::isFolder(const QModelIndex & index)
+{
+	IconObject*   obj=objectFromIndex(index);
+	return (obj && obj->isFolder())?true:false;
+}	
+
+QModelIndex MvQFolderModel::lastArrived()
+{
+  	if(lastArrived_)
+	{
+		return indexFromObject(lastArrived_);	
+	}
+	
+	return QModelIndex();
+}
+
+//---------------------------------------
+// Icon positions
+//---------------------------------------
+
+int MvQFolderModel::iconSize() const
+{
+  	return itemProp_->iconSize();
+}	
+
+void MvQFolderModel::setIconSize(int size)
+{
+  	if(!itemProp_->setIconSize(size))
+	  	return;
+			
+	emit iconSizeChanged();	
+}  
+
+void MvQFolderModel::setPositionHint(const string& cn,int x,int y)
+{
+	posHint_.className=cn;
+	posHint_.x=x;
+	posHint_.y=y;
+}	
+
+//----------------------------------------------
+//
+//  FolderObserver methods
+//
+//----------------------------------------------
+
+void MvQFolderModel::arrived(IconObject* obj)
+{
+	qDebug() << "arrived"; 
+ 	if(obj && isAccepted(obj))
+	{	  	
+	  	//beginInsertRows(), endInsertRows() were just resetting the whole view!
+		//It is easier just reset the model because our icon view knows what to do with the
+		//icon positions in this case		
+		beginResetModel();		
+		items_ << obj;		
+		lastArrived_=obj;
+		
+		if((posHint_.className.empty() || posHint_.className == obj->iconClass().name()) &&
+		   obj->info().x() == 0 && obj->info().y() == 0)
+		{
+			obj->info().position(posHint_.x,posHint_.y);
+		}
+		posHint_.clear();
+		
+		endResetModel();
+		
+		emit objectArrived(indexFromObject(obj));	
+	}
+}
+  
+void MvQFolderModel::gone(IconObject* obj) 
+{
+  	qDebug() << "gone";
+  	if(obj && items_.contains(obj))
+	{
+	  	beginResetModel();
+		items_.removeOne(obj);		
+		endResetModel();
+	}	
+}  
+  
+void MvQFolderModel::position(IconObject*,int,int)
+{
+	    
+}   
+
+void MvQFolderModel::renamed(IconObject* obj,const string& oriName)
+{
+    	qDebug() << "renamed()";
+    
+  	if(isAccepted(obj))
+	{
+		//We notify the view about the renaming
+	  	emit objectRenamed(indexFromObject(obj),QString::fromStdString(oriName));	  	
+	}  
+}  
+
+void MvQFolderModel::waiting(IconObject* obj)
+{	
+  	objectChanged(obj);
+} 
+ 
+void MvQFolderModel::error(IconObject* obj)	
+{
+  	objectChanged(obj);
+} 
+ 
+void MvQFolderModel::modified(IconObject* obj)	
+{
+  	objectChanged(obj);
+} 
+ 
+void MvQFolderModel::ready(IconObject* obj)	
+{
+	objectChanged(obj);
+}  
+ 
+void MvQFolderModel::opened(IconObject* obj)
+{
+  	objectChanged(obj);
+} 
+
+void MvQFolderModel::closed(IconObject* obj)
+{
+  	objectChanged(obj);
+}
+ 
+void MvQFolderModel::objectChanged(IconObject* obj)
+{
+	if(obj)
+	{
+		QModelIndex index=indexFromObject(obj);
+		emit dataChanged(index,index);
+	}
+}
+
+void MvQFolderModel::highlight(IconObject*)
+{
+}
+
+//This is an iconobserver method. It is called when the folder itself (e.g. name)
+//has been changed/
+void MvQFolderModel::iconChanged(IconObject* obj)
+{
+	if(obj == folder_)
+	{
+	  	emit folderChanged(folder_);
+	}
+}
+
+
+void MvQFolderModel::createNewFolder()
+{
+	//This will call in the end the arrived() observer method!
+  	IconClass::find("FOLDER").createOne(folder_); 
+}  
+
+QString MvQFolderModel::objectInfo( const QModelIndex & index)
+{
+  	IconObject* obj=objectFromIndex(index);	
+	if(obj)
+	{
+		QString txt="<b>" + QString::fromStdString(obj->name()); 
+		
+		txt+=" <font color=\"#5a5a5a\">(" +QString::fromStdString(obj->editorClass().name()) + ") </font> ";
+		
+		if(!obj->isFolder())
+		{  
+			txt+="<font color=\"#084cb3\">" + formatFileSize(obj->path().sizeInBytes()) + " </font> ";
+		}
+		
+		txt+=" " + formatFileDate(obj->path().lastModified());
+		txt+="</b";
+		
+		return txt;
+	}
+	
+	return QString();
+}	
+
+QString MvQFolderModel::formatFileSize(qint64 size) const
+{	
+  	if(size < 1024)
+	  	return QString::number(size) + " B";
+	else if(size < 1024*1024)
+	  	return QString::number(size/1024) + " KB";
+	else if(size < 1024*1024*1024)
+	  	return QString::number(size/(1024*1024)) + " MB";
+	else
+	  	return QString::number(size/(1024*1024*1024)) + " GB";
+
+ 	return QString();
+}
+
+QString MvQFolderModel::formatFileDate(time_t t) const
+{	
+  	QDateTime dt=QDateTime::fromTime_t(t);
+	return dt.toString("yyyy-MM-dd hh:mm");
+}
+
+//=======================================
+//
+// MvQFolderFilterModel:
+//
+//=======================================
+
+MvQFolderFilterModel::MvQFolderFilterModel(QObject *parent) :  QSortFilterProxyModel(parent)
+{
+}
+
+void MvQFolderFilterModel::setSourceModel(QAbstractItemModel* sourceModel)
+{
+	QSortFilterProxyModel::setSourceModel(sourceModel);
+}
+
+bool MvQFolderFilterModel::filterAcceptsRow(int sourceRow,
+         const QModelIndex &/*sourceParent*/) const
+{	
+	QModelIndex index=sourceModel()->index(sourceRow,0);	
+	return sourceModel()->data(index,MvQFolderModel::ClassFilterRole).toBool();
+}
+
+
+bool MvQFolderFilterModel::lessThan(const QModelIndex &left,
+                                       const QModelIndex &right) const
+{
+	QVariant leftData,rightData;	
+	if(left.column() == 2)
+	{
+	  	leftData = sourceModel()->data(left,Qt::UserRole);
+     		rightData = sourceModel()->data(right,Qt::UserRole); 
+		return leftData.toLongLong() <   rightData.toLongLong();
+	}
+	else
+	  	return QSortFilterProxyModel::lessThan(left,right); 
+}  
diff --git a/src/Desktop/MvQFolderModel.h b/src/Desktop/MvQFolderModel.h
new file mode 100644
index 0000000..3926981
--- /dev/null
+++ b/src/Desktop/MvQFolderModel.h
@@ -0,0 +1,151 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQFolderModel_H
+#define MvQFolderModel_H
+
+#include <QAbstractItemModel>
+#include <QAbstractListModel>
+#include <QFont>
+#include <QFontMetrics>
+#include <QSortFilterProxyModel>
+
+#include "IconObject.h"
+#include "FolderObserver.h"
+
+class QMimeData;
+
+class Folder;
+class IconClass;
+class IconObject;
+class MvQFolderItemProperty;
+
+class PositionHint
+{
+public:
+  	PositionHint() : className(""),x(0),y(0) {}
+  	void clear() {className="";x=0; y=0;} 
+	string className;
+	int x;
+	int y;
+};	
+
+class MvQFolderModel : public QAbstractItemModel, public FolderObserver, public IconObserver
+{
+
+Q_OBJECT
+  
+public:
+	MvQFolderModel(QObject *parent=0);
+	MvQFolderModel(int,QObject *parent=0);
+	~MvQFolderModel();
+	
+	enum CustomItemRole {ClassFilterRole = Qt::UserRole+1,
+	                     EditorRole = Qt::UserRole+2,
+	                     PositionRole=Qt::UserRole+3,
+	                     FontMetricsRole=Qt::UserRole+4};
+			    
+	int columnCount( const QModelIndex&) const;
+	int rowCount (const QModelIndex& parent = QModelIndex() ) const;
+
+	QVariant data (const QModelIndex& , int role = Qt::DisplayRole ) const;
+   	bool setData( const QModelIndex &, const QVariant &, int); 
+   	QVariant headerData(int,Qt::Orientation,int role = Qt::DisplayRole ) const;
+
+	QModelIndex index (int, int, const QModelIndex& parent = QModelIndex() ) const;
+   	QModelIndex parent (const QModelIndex & ) const;
+	Qt::ItemFlags flags ( const QModelIndex &) const;
+
+	void folderIsAboutToChange();
+	Folder* folder() {return folder_;}
+	bool setFolder(Folder*);
+	bool setFolder(QString);
+	bool setFolder(const QModelIndex &);
+	bool setFolderToParent();
+		
+	IconObject* objectFromIndex(const QModelIndex &) const;
+	QModelIndex indexFromObject(IconObject *);
+	QString fullName();
+	QString fullName(const QModelIndex &);
+	bool isFolder(const QModelIndex &);
+	QString objectInfo( const QModelIndex & index);
+	//int iconSize() const {return iconSize_;}
+	QModelIndex lastArrived();
+	
+	void createNewFolder();
+	void saveFolderInfo();
+	
+	//Observer methods
+	
+	void arrived(IconObject*);
+	void gone(IconObject*);
+	void position(IconObject*,int,int);
+	void renamed(IconObject*,const string&);
+
+	void waiting(IconObject*);
+	void error(IconObject*);
+	void modified(IconObject*);
+	void ready(IconObject*);
+	void opened(IconObject*);
+	void closed(IconObject*);
+	void highlight(IconObject*);	
+	void iconChanged(IconObject*);
+	
+	void setIconSize(int);
+	int iconSize() const;
+	MvQFolderItemProperty* itemProp() const {return itemProp_;}
+	
+	void setAcceptedClasses(const vector<string>&);
+	bool isAccepted(const IconClass&) const;
+	void setPositionHint(const string&,int,int);
+
+signals:	
+	void iconSizeChanged();
+	void updateObjectPositions();
+	void folderChanged(Folder*);
+	void objectArrived(const QModelIndex&);
+	void objectRenamed(const QModelIndex&,QString);
+
+protected:
+	void loadItems();
+        bool isDataSet() const;
+	QString formatFileSize(qint64) const;
+	QString formatFileDate(time_t) const;
+	bool isAccepted(IconObject*) const;
+	void objectChanged(IconObject*);
+	
+	Folder* folder_;
+	QList<IconObject*> items_;
+	bool initialScanIsOn_;	
+	vector<string> classes_;
+	IconObject* lastArrived_;
+	MvQFolderItemProperty* itemProp_;
+	static QMap<IconObject::IconStatus,QColor> statusColour_;
+	PositionHint posHint_;
+	
+private:
+        void init();
+};
+
+
+
+class MvQFolderFilterModel : public QSortFilterProxyModel
+{
+public:
+	MvQFolderFilterModel(QObject *parent=0);
+	void setSourceModel(QAbstractItemModel*);
+	bool filterAcceptsRow(int,const QModelIndex &) const;
+	bool lessThan(const QModelIndex &left,
+                                       const QModelIndex &right) const;
+
+protected:
+	MvQFolderModel *folderModel_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderNavigation.cc b/src/Desktop/MvQFolderNavigation.cc
new file mode 100644
index 0000000..ec2fe0f
--- /dev/null
+++ b/src/Desktop/MvQFolderNavigation.cc
@@ -0,0 +1,80 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQFolderNavigation.h"
+
+void MvQFolderNavigation::clear() 
+{
+	folders_.clear(); 
+	pos_=-1;
+}
+
+bool MvQFolderNavigation::isPosCorrect() 
+{
+	return (pos_ >=0 && pos_ < folders_.count());
+}
+
+bool MvQFolderNavigation::hasNext() 
+{ 
+	return ( pos_ >=0 && pos_ < folders_.count()-1);
+}
+	
+bool MvQFolderNavigation::hasPrev() 
+{ 
+  	return (pos_ > 0);
+}
+
+QString MvQFolderNavigation::next() 
+{ 
+	if(hasNext()) 
+	  	pos_++; 
+	return current();
+}
+
+QString MvQFolderNavigation::prev() 
+{ 
+	if(hasPrev()) 
+		pos_--; 
+	return current();
+}
+
+QString MvQFolderNavigation::current() 
+{ 
+	return (isPosCorrect())?folders_[pos_]:QString();
+}
+        
+void MvQFolderNavigation::add(QString path) 
+{
+	folders_ << path; 
+	pos_=folders_.count()-1;
+}
+
+void MvQFolderNavigation::removeAfterCurrent() 
+{
+	if(isPosCorrect())
+	{	
+		while(folders_.count() > pos_+1) 
+	        	folders_.takeLast();
+	}	
+}
+  	
+void MvQFolderNavigation::removeBeforeCurrent()
+{
+	if(isPosCorrect())
+	{
+		for(int i=0;i < pos_; i++)  
+			  folders_.takeFirst();
+		pos_=0;
+	}	
+}
+
+void MvQFolderNavigation::print() 
+{
+	//qDebug() << "history:" << pos_ << folders_.count();
+} 
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderNavigation.h b/src/Desktop/MvQFolderNavigation.h
new file mode 100644
index 0000000..cd70bc3
--- /dev/null
+++ b/src/Desktop/MvQFolderNavigation.h
@@ -0,0 +1,40 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQFolderNavigation_H
+#define MvQFolderNavigation_H
+
+#include <QDebug>
+#include <QStringList>
+
+class MvQFolderNavigation
+{
+public:
+	MvQFolderNavigation() : pos_(-1) {}
+	
+	void clear();	
+	bool hasNext(); 
+	bool hasPrev(); 
+	QString next(); 
+	QString prev(); 
+        QString current(); 
+        void add(QString path); 
+  	void removeAfterCurrent();   	
+        void removeBeforeCurrent();
+	void print(); 
+     
+protected:  
+	bool isPosCorrect();
+		
+  	QStringList folders_;
+	int 	    pos_;
+};
+
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderPanel.cc b/src/Desktop/MvQFolderPanel.cc
new file mode 100644
index 0000000..f72fba1
--- /dev/null
+++ b/src/Desktop/MvQFolderPanel.cc
@@ -0,0 +1,783 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQFolderPanel.h"
+
+#include <QAction>
+#include <QDebug>
+#include <QMenu>
+#include <QMessageBox>
+#include <QTabBar>
+#include <QStackedWidget>
+#include <QVBoxLayout>
+
+#include "MvQ.h"
+#include "MvQBookmarks.h"
+#include "MvQContextMenu.h"
+#include "MvQFileBrowser.h"
+#include "MvQFolderHistory.h"
+#include "MvQFolderNavigation.h"
+#include "MvQFolderWidget.h"
+#include "MvQIconProvider.h"
+#include "MvQDesktopSettings.h"
+
+#include "Folder.h"
+#include "IconClass.h"
+#include "IconObject.h"
+#include "Path.h"
+#include "MvRequest.h"
+
+//=============================================
+//
+//  MvQActionList
+//
+//=============================================
+
+bool MvQActionList::trigger(QString name)
+{
+	foreach(QAction* ac, lst_)
+	{
+	  	if(ac->data().toString() == name)
+		{
+		  	ac->trigger();
+			return true;
+		}
+	}
+	return false;
+}	
+
+//=============================================
+//
+//  MvQTabWidget
+//
+//=============================================
+
+MvQTabWidget::MvQTabWidget(QWidget* parent) :
+  QWidget(parent)
+{ 	  
+  	//Create layout
+	QVBoxLayout* layout=new QVBoxLayout(this); 	
+	layout->setSpacing(0); 
+	layout->setContentsMargins(0,0,0,0);  
+		
+	bar_=new QTabBar(this); 
+	layout->addWidget(bar_);
+		
+	bar_->setProperty("mvStyle","folder");
+	bar_->setMovable(true);
+	bar_->setExpanding(true);
+		
+	stacked_=new QStackedWidget(this);
+	stacked_->setMinimumHeight(1);	
+	stacked_->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Minimum);
+	layout->addWidget(stacked_);
+	
+	//Context menu
+	bar_->setContextMenuPolicy(Qt::CustomContextMenu);
+	
+	connect(bar_,SIGNAL(customContextMenuRequested(const QPoint &)),
+		this,SLOT(slotContextMenu(const QPoint &)));
+		
+	connect(bar_,SIGNAL(tabMoved(int,int)),
+		this,SLOT(tabMoved(int,int)));
+		
+	connect(bar_,SIGNAL(currentChanged(int)),
+	        this,SLOT(currentTabChanged(int)));
+		
+	connect(bar_,SIGNAL(tabCloseRequested(int)),
+	        this,SLOT(removeTab(int)));    
+		
+}
+
+void MvQTabWidget::slotContextMenu(const QPoint& pos)
+{
+	if(pos.isNull())
+		return;
+ 	
+	MvQContextItemSet *cms=cmSet();  
+	if(!cms)
+	  	return;
+ 
+	int index=bar_->tabAt(pos);
+	
+	QString selection=MvQContextMenu::instance()->exec(cms->icon(),mapToGlobal(pos),this,
+							   //QString::number(bar_->count()));
+							   "path=" + folderPath(index));
+	if(!selection.isEmpty()) 
+		tabBarCommand(selection,index);  
+}
+
+int MvQTabWidget::count() const
+{
+  	return bar_->count();
+}	
+
+int MvQTabWidget::currentIndex() const
+{
+  	return bar_->currentIndex();
+}	
+
+void  MvQTabWidget::setCurrentIndex(int index)
+{
+  	bar_->setCurrentIndex(index);
+}
+
+QWidget* MvQTabWidget::widget(int index) const
+{
+  	if(index >=0 && index < bar_->count())
+	{
+  		return stacked_->widget(index);
+	}
+	
+	return 0;
+}  
+
+QWidget* MvQTabWidget::currentWidget() const
+{
+  	return widget(bar_->currentIndex());
+}  
+
+int MvQTabWidget::indexOfWidget(QWidget *w) const
+{
+  	for(int i=0; i < stacked_->count(); i++)
+	  	if(w == stacked_->widget(i))
+		  	return i;
+		
+	return -1;
+}	
+
+void MvQTabWidget::clear()	
+{	
+	while(bar_->count() > 0)
+	{
+	  	removeTab(0);	  	
+	}
+}		
+	
+void MvQTabWidget::addTab(QWidget *w,QPixmap pix,QString name)
+{
+	stacked_->addWidget(w);
+	bar_->addTab(pix,name);
+	bar_->setCurrentIndex(count()-1);
+	checkTabStatus();
+}	
+
+void MvQTabWidget::removeTab(int index)
+{  
+  	if(index >=0 && index < bar_->count())
+	{
+	  	QWidget *w=stacked_->widget(index);
+		stacked_->removeWidget(w);
+		bar_->removeTab(index);
+		w->hide();
+		w->deleteLater();
+	}
+
+	checkTabStatus();
+}
+
+void MvQTabWidget::removeOtherTabs(int index)
+{ 
+	QWidget *actW=stacked_->widget(index);
+
+	while(bar_->count() > 0)
+	{
+	  	if(stacked_->widget(0) != actW)
+		{  	  	
+	 		 removeTab(0);
+		}
+		else
+		  	break;
+	}	
+	
+	while(bar_->count() > 1)
+	{
+	  	if(stacked_->widget(1) != actW)
+		{  	  	
+	 		 removeTab(1);
+		}
+	}	
+		
+	checkTabStatus();
+}
+
+void MvQTabWidget::currentTabChanged(int index)
+{
+	if(stacked_->count() == bar_->count())
+	{  
+  		stacked_->setCurrentIndex(index);
+  		emit currentIndexChanged(index);
+	}	
+}
+
+void MvQTabWidget::tabMoved(int from,int to)
+{
+	QWidget *w=stacked_->widget(from);
+	stacked_->removeWidget(w);
+	stacked_->insertWidget(to,w);
+	
+	//bar_->setCurrentIndex(to);
+	currentTabChanged(to);
+}
+
+void MvQTabWidget::setTabText(int index,QString txt)
+{	
+  	if(index >=0 && index < bar_->count())
+	{
+	  	bar_->setTabText(index,txt);
+	}
+}	
+	  	  
+void MvQTabWidget::setTabIcon(int index,QPixmap pix)
+{
+  	if(index >=0 && index < bar_->count())
+	{
+		bar_->setTabIcon(index,pix);
+	}
+}
+
+void MvQTabWidget::checkTabStatus()
+{
+	if(bar_->count()> 1)	
+	{
+	  	bar_->show();
+		bar_->setTabsClosable(true);
+	}	
+	else
+	{	bar_->hide();
+	  	bar_->setTabsClosable(false);
+	}	
+}
+ 
+
+
+//=============================================
+//
+//  MvQFolderPanel
+//
+//=============================================
+
+MvQFolderPanel::MvQFolderPanel(QWidget* parent) : 
+  MvQTabWidget(parent),
+  folderHistory_(0)
+{
+	mvHomePath_=QString::fromStdString(Folder::top()->fullName());
+	
+	connect(this,SIGNAL(currentIndexChanged(int)),
+		this,SLOT(slotCurrentWidgetChanged(int)));
+}  
+
+
+MvQFolderPanel::~MvQFolderPanel()
+{
+}  
+
+Folder* MvQFolderPanel::currentFolder()
+{
+	MvQFolderWidget* w=currentFolderWidget();
+  	return (w)?w->currentFolder():0;
+}
+
+QList<Folder*> MvQFolderPanel::currentFolders()
+{
+	QList<Folder*>  lst;
+	for(int i=0; i < count(); i++)
+	{
+		MvQFolderWidget* w=folderWidget(i);		
+		if(w) 
+		{
+		  	lst << w->currentFolder();	
+		}
+	}
+	return lst;	
+}
+
+QString  MvQFolderPanel::folderPath(int index)
+{
+	if(MvQFolderWidget* w=folderWidget(index))
+	{
+	  	if(Folder *f=w->currentFolder())
+			return QString::fromStdString(f->fullName());
+	}
+	return QString();	
+}
+
+void MvQFolderPanel::setHistoryMenu(QMenu *m)
+{
+  	if(folderHistory_)
+	  	return;
+	
+	folderHistory_ =new MvQFolderHistory(m);
+  	
+	connect(folderHistory_,SIGNAL(itemSelected(QString)),
+		this,SLOT(slotChFolderFromHistory(QString)));
+	
+	connect(folderHistory_,SIGNAL(commandRequested(QString,QString)),
+		this,SLOT(slotPathCommand(QString,QString)));					
+}  
+
+//=============================================
+//
+//  Tab management desktopAction
+//
+//=============================================
+
+MvQFolderWidget *MvQFolderPanel::addWidget(QString path)
+{ 	
+	//if(path.isEmpty())
+	//  	return 0;
+  
+  	MvQFolderWidget  *fw=new MvQFolderWidget(path,folderHistory_,this);		
+			
+	QString name=fw->currentFolderName();
+	QPixmap pix=MvQIconProvider::pixmap(fw->currentFolder(),24);
+	
+	addTab(fw,pix,name);  
+	  
+	connect(fw,SIGNAL(pathChanged()),
+		this,SLOT(slotPathChanged()));
+		
+	connect(fw,SIGNAL(iconCommandRequested(QString,IconObjectH)),
+		this,SLOT(slotIconCommand(QString,IconObjectH)));
+	
+	connect(fw,SIGNAL(desktopCommandRequested(QString,QPoint)),
+		this,SLOT(slotDesktopCommand(QString,QPoint)));		
+		
+	connect(fw,SIGNAL(itemInfoChanged(QString)),
+		this,SIGNAL(itemInfoChanged(QString)));	
+	
+	//IMPORTANT!!!
+	//We need to call it here because if the -stylesheet command-line option is used
+	//Qt changes icon positions in the listview and arrange them on a grid. By calling 
+	//this function the original icon positions are regained in the view.	
+	fw->initIconPositions();	
+	
+	setDefaults(this);
+	
+	return fw;
+}
+
+
+void MvQFolderPanel::resetWidgets(QStringList lst)
+{ 	
+	if(lst.count() ==0)
+		return;  
+	 
+	clear();	
+		
+	foreach(QString path,lst)
+	{
+	  	addWidget(path);
+	}	
+}
+
+
+MvQContextItemSet* MvQFolderPanel::cmSet()
+{
+	static MvQContextItemSet cmItems("FolderPanel");  
+  	return &cmItems;
+}
+
+//void MvQFolderPanel::slotCurrentWidgetChanged(int index)
+//{ 
+//	qDebug() << "current" << index;		
+//	emit currentWidgetChanged();	
+//}
+
+void MvQFolderPanel::tabBarCommand(QString name,int index)
+{
+  	if(name == "reloadTab")
+	{
+	  	MvQFolderWidget *w=folderWidget(index);
+		if(w) w->reload();
+	}
+	else if(name == "closeOtherTabs")
+	{
+	  	removeOtherTabs(index);
+	}
+	else if(name == "closeTab")
+	{
+	  	removeTab(index);
+	}  
+	else if(name == "bookmark")
+	{
+	  	MvQFolderWidget *w=folderWidget(index);
+		if(w) MvQBookmarks::addItem(w->currentFolder());				
+	} 
+	else if(name == "empty")
+	{
+		MvQ::emptyWasteBasket();
+	}  
+}  
+
+MvQFolderWidget *MvQFolderPanel::folderWidget(int index)
+{ 	
+  	QWidget *w=widget(index);
+  	return (w)?static_cast<MvQFolderWidget*>(w):0; 
+}
+
+MvQFolderWidget *MvQFolderPanel::currentFolderWidget()
+{ 	
+  	QWidget *w=currentWidget();
+  	return static_cast<MvQFolderWidget*>(w); 
+}
+
+void MvQFolderPanel::slotCurrentWidgetChanged(int /*index*/)
+{
+  	emit currentWidgetChanged();
+  	setDefaults(this);
+}
+
+//====================================================
+//   Navigation
+//===================================================
+
+/*void MvQFolderPanel::updateFolderHistory(QString)
+{
+	folderNavigation_->removeAfterCurrent();
+	folderNavigation_->add(path);
+	updateNavigationActionState();
+}*/
+
+void MvQFolderPanel::slotChFolderBack()
+{	
+	MvQFolderWidget *w=currentFolderWidget();	
+	if(w) w->chFolderBack();
+}
+
+void MvQFolderPanel::slotChFolderForward()
+{
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->chFolderForward();
+}
+
+void MvQFolderPanel::slotChFolderParent()
+{
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->chFolderParent();
+}
+
+void MvQFolderPanel::slotChFolderWastebasket()
+{
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w) 
+	{  
+	  	Folder *wbo=Folder::folder("wastebasket");
+		if(wbo) w->chFolderFromBookmarks(QString::fromStdString(wbo->fullName()));
+	}	
+}
+
+void MvQFolderPanel::slotChFolderMvHome()
+{
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w)
+	{  
+		w->chFolderFromBookmarks(mvHomePath_);
+	}
+	else
+	{
+	  	//If there is no widget at all we offer this way to create one!
+		if(count()!=0)
+			addWidget(mvHomePath_);
+	}	
+}
+
+/*void MvQFolderPanel::slotFolderChangedInView(QString path)
+{
+  	folderNavigation_->removeAfterCurrent();  	
+	folderNavigation_->add(path);
+	updateNavigationActionState();
+	folderHistory_->add(path);
+	pathWidget_->setPath(path);
+}*/ 
+
+void MvQFolderPanel::slotChFolderFromHistory(QString path)
+{
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->chFolderFromHistory(path);
+} 
+
+void MvQFolderPanel::slotChFolderFromBookmarks(QString path) 
+{	
+	qDebug() << path;
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->chFolderFromBookmarks(path);
+}
+
+void MvQFolderPanel::slotChFolderFromBreadcrumbs(QString p)
+{
+ 	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->chFolderFromBreadcrumbs(p); 
+}
+
+void MvQFolderPanel::setViewMode(MvQ::FolderViewMode mode)
+{
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->setViewMode(mode);
+	setDefaults(this);
+}
+
+MvQ::FolderViewMode MvQFolderPanel::viewMode()
+{
+  	MvQFolderWidget *w=currentFolderWidget();
+	return (w)?w->viewMode():MvQ::NoViewMode;
+} 
+
+bool MvQFolderPanel::viewModeGrid()
+{
+  	MvQFolderWidget *w=currentFolderWidget();
+	return (w)?w->viewModeGrid():false;
+	
+}
+
+void MvQFolderPanel::slotPathChanged()
+{
+	MvQFolderWidget *fw=static_cast<MvQFolderWidget*>(sender());
+  
+  	if(count() > 0 && fw)
+	{
+	  	int index=indexOfWidget(fw);
+		if(index >=0)
+		{  	setTabText(index,fw->currentFolderName());
+			QPixmap pix=MvQIconProvider::pixmap(fw->currentFolder(),24);
+			setTabIcon(index,pix);  
+		}
+	}
+	
+	if(fw)
+	  	emit pathChanged(fw->folderNavigation());
+	
+	setDefaults(this);
+}
+
+
+void MvQFolderPanel::slotIconCommand(QString name,IconObjectH obj)
+{
+	if(!obj)
+	  	return;
+
+	setDefaults(this);
+	
+	if(name  == "openInTab")
+	{
+		addWidget(QString::fromStdString(obj->fullName()));
+	}
+	if(name  == "bookmark")
+	{
+	  	if(obj->isFolder())
+	  		MvQBookmarks::addItem(obj);  
+	}
+	
+}
+
+void MvQFolderPanel::slotPathCommand(QString name,QString path)
+{
+	if(name  == "openInTab")
+	{
+		addWidget(path);
+	}
+	else if(name  == "openInWin")
+	{
+		MvQFileBrowser::openBrowser(path);
+	}	
+	else if(name == "bookmark")
+	{
+		MvQBookmarks::addItem(path);
+	} 
+	else if(name == "locate")
+	{
+	
+	} 
+}  
+
+void MvQFolderPanel::slotDesktopCommand(QString name, QPoint)
+{	
+	desktopActions_.trigger(name);
+}  
+
+void MvQFolderPanel::addDesktopAction(QAction* ac)
+{
+  	desktopActions_.add(ac);
+}
+	
+//==========================================================
+//
+// Snap to grid
+//
+//==========================================================
+
+void MvQFolderPanel::slotGridByName(bool)
+{
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->toGrid(MvQ::GridSortByName);
+}  
+
+void MvQFolderPanel::slotGridBySize(bool)
+{
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->toGrid(MvQ::GridSortBySize);
+}  
+
+void MvQFolderPanel::slotGridByType(bool)
+{
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->toGrid(MvQ::GridSortByType);
+}  
+
+void MvQFolderPanel::slotShowLastCreated(bool)
+{
+ 	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->showLastCreated();   
+}  
+
+void MvQFolderPanel::saveFolderInfo()
+{
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->saveFolderInfo();
+}	
+
+void MvQFolderPanel::setIconSize(int iconSize)
+{
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->setIconSize(iconSize);
+	setDefaults(this);
+}
+
+void MvQFolderPanel::forceIconSize(int iconSize)
+{
+	for(int i=0; i < count(); i++)
+	{  	
+		if(MvQFolderWidget* w=folderWidget(i))
+		{
+		  	Folder *f=w->currentFolder();
+			qDebug() << "LOCK" << QString::fromStdString(f->name()) << f->iconSizeLock();
+		  	if(f && f->iconSizeLock() == -1) 
+			{
+			  	qDebug() << "SET";
+			  	w->setIconSize(iconSize);
+			}	
+		}
+	}
+	setDefaults(this);		
+}
+
+bool MvQFolderPanel::iconSizeLock()
+{
+  	MvQFolderWidget *w=currentFolderWidget();
+	return (w)?w->iconSizeLock():false;
+}	
+
+void MvQFolderPanel::setIconSizeLock(bool b)
+{
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->setIconSizeLock(b);
+}
+
+
+int MvQFolderPanel::iconSize()
+{
+  	MvQFolderWidget *w=currentFolderWidget();
+	if(w) return w->iconSize();	
+	
+	return 32;
+}	
+
+MvQFolderNavigation* MvQFolderPanel::folderNavigation()
+{
+  	MvQFolderWidget *w=currentFolderWidget();
+	if(w) return w->folderNavigation();
+	
+	return 0;	
+}
+
+//==========================================================
+//
+// Rescan
+//
+//==========================================================
+
+void MvQFolderPanel::slotReload(bool)
+{
+	MvQFolderWidget *w=currentFolderWidget();
+	if(w) w->reload();
+} 
+
+//==========================================================
+//
+// Static methods
+//
+//==========================================================
+
+void MvQFolderPanel::setDefaults(MvQFolderPanel* panel)
+{
+	MvQDesktopSettings::viewMode_=panel->viewMode();
+	MvQDesktopSettings::iconSize_=panel->iconSize();  
+}  
+
+//==========================================================
+//
+// Save/restore settings
+//
+//==========================================================
+
+void MvQFolderPanel::writeSettings(QSettings &settings)
+{
+	settings.setValue("folderCount",count());
+	
+	settings.setValue("current",(currentIndex()>=0)?currentIndex():0);
+			  	
+	for(int i=0; i < count(); i++)
+	{  	
+		MvQFolderWidget* cw=folderWidget(i);
+	
+		settings.beginGroup("folder_" + QString::number(i));
+		cw->writeSettings(settings);
+		settings.endGroup();
+	}	
+}
+
+void MvQFolderPanel::readSettings(QSettings &settings)
+{	
+	//Create folder tabs
+	int cnt=settings.value("folderCount").toInt();
+	int currentIndex=settings.value("current").toInt();
+	
+	if(cnt >0)
+	{
+		for(int i=0; i < cnt; i++)
+		{  	
+			settings.beginGroup("folder_" + QString::number(i));
+			QString relPath=settings.value("path").toString();			
+			//Path mvPath(path.toStdString());
+			//if(mvPath.exists())
+			//{  			
+		  		MvQFolderWidget* fw=addWidget(relPath);
+				if(fw)
+					fw->readSettings(settings);
+			  				
+			//}	
+			settings.endGroup();
+		}
+		
+		//Set current tab
+		if(currentIndex >=0 && currentIndex < cnt)
+		{  
+			setCurrentIndex(currentIndex);
+		}
+	}
+	
+	else if(!mvHomePath_.isEmpty())
+	{
+		Path mvPath(mvHomePath_.toStdString());
+		if(mvPath.exists())
+			addWidget(mvHomePath_);
+	}
+	
+	setDefaults(this);
+}	
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderPanel.h b/src/Desktop/MvQFolderPanel.h
new file mode 100644
index 0000000..3237afc
--- /dev/null
+++ b/src/Desktop/MvQFolderPanel.h
@@ -0,0 +1,159 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQFolderPanel_H
+#define MvQFolderPanel_H
+ 
+#include <QList>
+#include <QSettings>
+#include <QString>
+#include <QWidget>
+
+#include "MvQ.h"
+
+class QMenu;
+class QStackedWidget;
+class QTabBar;
+class QVBoxLayout;
+
+class MvQContextItemSet;
+class MvQFolderHistory;
+class MvQFolderNavigation;
+class MvQFolderWidget;
+
+class Folder;
+
+#include "IconObject.h"
+
+using namespace std;	
+
+class MvQActionList
+{
+public:
+        MvQActionList() {}
+ 	void add(QAction* ac) {lst_ << ac;}
+	bool trigger(QString);
+
+protected:
+    	QList<QAction*> lst_;
+}; 
+
+ 
+class MvQTabWidget : public QWidget
+{
+    Q_OBJECT
+  
+public:
+    	MvQTabWidget(QWidget *parent=0);
+	
+	int currentIndex() const;
+	int indexOfWidget(QWidget*) const;
+	QWidget *widget(int) const;
+	QWidget *currentWidget() const;
+	void checkTabStatus();	
+	void addTab(QWidget *,QPixmap,QString);
+	void setTabText(int,QString);
+	void setTabIcon(int,QPixmap);
+	int count() const;
+	void clear();
+
+public slots:	
+	void removeTab(int);
+	void removeOtherTabs(int);
+	void setCurrentIndex(int);
+  
+private slots:	
+	void slotContextMenu(const QPoint&);
+	void currentTabChanged(int index);
+	void tabMoved(int from,int to);
+
+signals:
+    	void currentIndexChanged(int);
+	
+protected:
+	virtual MvQContextItemSet* cmSet()=0;
+	virtual void tabBarCommand(QString,int)=0;
+	virtual QString folderPath(int)=0;
+ 
+private:		
+	QTabBar *bar_;
+	QStackedWidget *stacked_;	
+};	
+
+class MvQFolderPanel : public MvQTabWidget
+{
+    Q_OBJECT
+
+public:
+	MvQFolderPanel(QWidget* parent=0);
+	~MvQFolderPanel();
+	
+	Folder* currentFolder();
+	QList<Folder*> currentFolders();
+	void setHistoryMenu(QMenu*);
+	void setViewMode(MvQ::FolderViewMode);
+	MvQ::FolderViewMode viewMode();
+	bool viewModeGrid();
+	void setIconSize(int);
+	int  iconSize();
+	void forceIconSize(int);
+	void setIconSizeLock(bool);
+	bool iconSizeLock();
+	MvQFolderNavigation* folderNavigation();
+	void saveFolderInfo();
+	MvQFolderWidget* addWidget(QString);
+	void resetWidgets(QStringList);
+	void addDesktopAction(QAction*);
+	void setDefaults() {setDefaults(this);}
+	
+	void writeSettings(QSettings &);
+	void readSettings(QSettings &);
+
+public slots:
+	void slotCurrentWidgetChanged(int);
+	void slotChFolderBack();	
+	void slotChFolderForward();
+	void slotChFolderParent();
+	void slotChFolderMvHome();
+	void slotChFolderWastebasket();
+	void slotChFolderFromHistory(QString);
+	void slotChFolderFromBookmarks(QString);
+	void slotChFolderFromBreadcrumbs(QString);
+	void slotIconCommand(QString,IconObjectH);
+	void slotPathCommand(QString,QString);
+	void slotDesktopCommand(QString,QPoint);
+	void slotGridByName(bool);
+	void slotGridBySize(bool);
+	void slotGridByType(bool);
+	void slotReload(bool);
+	void slotPathChanged();
+	void slotShowLastCreated(bool);
+
+signals:
+	void itemInfoChanged(QString);
+	void pathChanged(MvQFolderNavigation*);
+	void currentWidgetChanged();
+  
+protected:
+	MvQContextItemSet* cmSet();
+	MvQFolderWidget* currentFolderWidget();
+	MvQFolderWidget* folderWidget(int);
+	QString folderPath(int);
+	void tabBarCommand(QString, int);
+
+        QString   mvHomePath_;
+	
+	MvQFolderHistory* folderHistory_;
+	MvQActionList desktopActions_;
+
+private:	
+	static void setDefaults(MvQFolderPanel*);	
+};
+
+#endif
diff --git a/src/Desktop/MvQFolderViewBase.cc b/src/Desktop/MvQFolderViewBase.cc
new file mode 100644
index 0000000..5dda269
--- /dev/null
+++ b/src/Desktop/MvQFolderViewBase.cc
@@ -0,0 +1,418 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <QDebug>
+#include <QMessageBox>
+#include <QObject>
+#include <QShortcut>
+
+#include "MvQFolderViewBase.h"
+
+#include "MvQBookmarks.h"
+#include "MvQContextMenu.h"
+#include "MvQFileBrowser.h"
+#include "MvQFileDialog.h"
+#include "MvQFileSystemModel.h"
+#include "MvQFolderItemProperty.h"
+#include "MvQFolderModel.h"
+#include "MvQNewIconWidget.h"
+
+#include "Command.h"
+#include "Folder.h"
+#include "IconClass.h"
+#include "IconGroupTools.h"
+#include "IconInfo.h"
+#include "IconObject.h"
+
+
+
+MvQFolderViewBase::MvQFolderViewBase(MvQFolderModel *folderModel) :
+   folderModel_(folderModel),
+   //cmInit_(false),
+   shortCutInit_(false)
+{
+  	filterModel_= new MvQFolderFilterModel;  
+	filterModel_->setSourceModel(folderModel_);	
+	filterModel_->setDynamicSortFilter(true);
+	
+	itemProp_=folderModel_->itemProp();
+}
+	
+MvQFolderViewBase::~MvQFolderViewBase()
+{
+	delete filterModel_;	
+}
+
+QString MvQFolderViewBase::fullName(const QModelIndex& index,IndexType indexType)
+{
+	return (indexType == FilterModelIndex)?folderModel_->fullName(filterModel_->mapToSource(index)):folderModel_->fullName(index);
+}
+
+bool MvQFolderViewBase::isFolder(const QModelIndex& index,IndexType indexType)
+{
+  	return (indexType == FilterModelIndex)?folderModel_->isFolder(filterModel_->mapToSource(index)):folderModel_->isFolder(index);
+} 
+  
+Folder* MvQFolderViewBase::currentFolder()
+{
+	return folderModel_->folder();
+}	
+
+bool MvQFolderViewBase::changeFolderToParent()
+{	
+	bool retVal=folderModel_->setFolderToParent();
+	setPositions();
+	return retVal;
+}
+
+bool MvQFolderViewBase::changeFolder(const QModelIndex& index,IndexType indexType)
+{ 
+  	QModelIndex folderIndex=(indexType == FilterModelIndex)?filterModel_->mapToSource(index):index;
+		
+	bool retVal=folderModel_->setFolder(folderIndex);
+	setPositions();
+	return retVal;
+}
+
+bool MvQFolderViewBase::changeFolder(QString fullName)
+{
+ 	bool retVal=folderModel_->setFolder(fullName);
+	setPositions();
+	return retVal;
+}
+
+bool MvQFolderViewBase::changeFolder(Folder *folder)
+{
+ 	bool retVal=folderModel_->setFolder(folder);
+	setPositions();
+	return retVal;
+}
+
+QString MvQFolderViewBase::itemInfo(const QModelIndex& index,IndexType indexType)
+{
+	QModelIndex folderIndex=(indexType == FilterModelIndex)?filterModel_->mapToSource(index):index;
+
+	return folderModel_->objectInfo(folderIndex);
+}  
+
+void MvQFolderViewBase::handleDoubleClick(const QModelIndex& index)
+{
+	IconObject *obj=folderModel_->objectFromIndex(filterModel_->mapToSource(index));
+	if(obj)
+	{
+		QString method=QString::fromStdString(obj->iconClass().doubleClickMethod()).toLower();
+		
+		if(obj->isFolder())
+		{
+		  	if(changeFolder(index,FilterModelIndex))
+			{	  		
+				folderChanged();				
+			}
+			return;
+		}
+		else if(!method.isEmpty())
+		{
+		  	obj->command(method.toStdString());
+		}  
+		else 
+		{
+		  	obj->doubleClick();
+		}
+	}
+}	
+	
+void MvQFolderViewBase::handleContextMenu(QModelIndex indexClicked,QModelIndexList indexLst,QPoint globalPos,QPoint widgetPos,QWidget *widget)
+{	
+  	MvQContextItemSet *cms=cmSet();
+	if(!cms)
+	  	return;
+  
+  	//Icon actions
+  	if(indexClicked.isValid() && indexClicked.column() == 0)   //indexLst[0].isValid() && indexLst[0].column() == 0) 
+	{
+	  	vector<IconObject*> objLst;
+		for(int i=0; i < indexLst.count(); i++)
+		{
+	  		IconObject* obj=folderModel_->objectFromIndex(filterModel_->mapToSource(indexLst[i]));
+			if(obj) objLst.push_back(obj);
+		}	
+		
+		if(objLst.size() > 0)
+		{
+		  	QString selection;
+			if(objLst.size() ==1)
+			  	//selection=MvQContextMenu::instance()->exec(cmIconItems_,objLst[0],globalPos,widget);
+				selection=MvQContextMenu::instance()->exec(cms->icon(),objLst[0],globalPos,widget);
+			else 
+				//selection=MvQContextMenu::instance()->exec(cmMultiIconItems_,objLst,globalPos,widget);
+				selection=MvQContextMenu::instance()->exec(cms->multiIcon(),objLst,globalPos,widget);
+			
+			if(!selection.isEmpty())
+				handleIconCommand(objLst,selection);
+		}
+			
+		/*IconObject* obj=folderModel_->objectFromIndex(filterModel_->mapToSource(index));
+		if(obj)
+		{
+			QString selection=MvQContextMenu::instance()->exec(cmIconItems_,obj,globalPos,widget);
+		  				
+			if(!selection.isEmpty())
+				handleIconCommand(obj,selection);
+		}*/	
+	}
+	
+	//Desktop actions
+	else
+	{
+		//QString selection=MvQContextMenu::instance()->exec(cmDesktopItems_,globalPos,widget);
+		QString selection=MvQContextMenu::instance()->exec(cms->desktop(),globalPos,widget);
+		if(!selection.isEmpty())
+		{  
+			handleDesktopCommand(selection,widgetPos,widget); 
+		}
+	}	
+}	
+
+  
+void MvQFolderViewBase::handleIconShortCut(QShortcut* sc,const QModelIndex& index)
+{
+  	if(!sc)
+  		return;
+		
+  	//Icon actions
+  	if(index.isValid() && index.column() == 0) 
+	{
+		IconObject* obj=folderModel_->objectFromIndex(filterModel_->mapToSource(index));
+		//icon command
+		if(obj)
+		{
+			QString selection=sc->property("cmd").toString();
+		  	qDebug() << "selection" << selection;
+			if(!selection.isEmpty())
+			{  
+				handleIconCommand(obj,selection);
+			}
+		}
+	}	
+}
+
+
+void MvQFolderViewBase::handleIconCommand(const vector<IconObject*>& objLst,QString name)
+{
+	if(IconGroupTools::can(name.toStdString()))  
+	{
+	  	if(objLst.size() > 0)
+		{  
+			folderModel_->setPositionHint("",objLst[0]->info().x()+32,
+						         objLst[0]->info().y()+32);							 
+		}
+		
+		IconGroupTools::run(name.toStdString(),objLst);	  
+	}
+	else if(name == "destroy")
+	{
+	  	 if(confirmDelete(objLst.size()))
+		 {
+		  	for(vector<IconObject*>::const_iterator it=objLst.begin(); it!=objLst.end(); it++)				
+			 	(*it)->command(name.toStdString()); 	
+		 }
+	}  
+	else
+	{  
+		for(vector<IconObject*>::const_iterator it=objLst.begin(); it!=objLst.end(); it++)		  
+			  handleIconCommand(*it,name);
+	}
+}  
+    
+void MvQFolderViewBase::handleIconCommand(IconObject* obj,QString name)
+{
+	if(!obj)
+		return;
+	
+	//Delete icon (permanently)
+	if(name == "destroy")
+	{  								  
+		if(confirmDelete(1))
+		{
+			obj->command(name.toStdString());			
+		}
+	}
+	
+	//Other actions
+	else  if(Command::isValid(name.toStdString()))
+	{
+		obj->command(name.toStdString());
+	}
+	else if(name  == "open")
+	{
+		if(obj->isFolder() && changeFolder(folderModel_->indexFromObject(obj)))
+		{	  		
+			folderChanged();				
+		}
+	}	
+	else if(name  == "openInWin")
+	{
+		MvQFileBrowser::openBrowser(QString::fromStdString(obj->fullName()));
+	}	
+	else if(name == "bookmark")
+	{
+		MvQBookmarks::addItem(obj);
+	}  
+	else
+	{
+		iconCommand(name,obj); 
+	}	
+}	
+
+void MvQFolderViewBase::handleDesktopCommand(QString name,QPoint pos,QWidget *widget)
+{
+	Folder *folder=folderModel_->folder();
+	
+	if(name == "createFolder")
+	{
+	 	const IconClass &kind=IconClass::find("FOLDER");	
+		kind.createOne(folder,pos.x(),pos.y());
+	}
+	else if(name == "createMacro")
+	{
+	 	const IconClass &kind=IconClass::find("MACRO");	
+		kind.createOne(folder,pos.x(),pos.y());
+	}
+	else if(name == "createIcon")
+	{  
+		MvQNewIconDialog dialog(widget);
+
+        	if(dialog.exec() == QDialog::Accepted)
+		{
+	  		const IconClass &kind=dialog.selected();
+			kind.createOne(folder,pos.x(),pos.y());
+			showLastCreated();
+		}	
+	}
+	else if(name == "createLink")
+	{  
+		MvQFileDialog dialog(QString::fromStdString(folder->path().str()),QObject::tr("Create symbolic link"),widget);
+		dialog.setAcceptMode(QFileDialog::AcceptOpen);
+		
+		if(dialog.exec() == QDialog::Accepted)
+		{
+  			QStringList lst=dialog.selectedFiles();
+  			if(lst.count() > 0)
+			{
+				Path result(lst[0].toStdString());
+				string name = folder->uniqueName(result.name());
+				Path path   = folder->path().add(name);
+
+				path.symlink(result);		
+		
+				//The dot file for a link should not be created in the 
+				//link target's folder. By commenting out the line below we can prevent it!
+				//path.dot().symlink(result.dot());		
+
+				folder->scanForNewFile(name,pos.x(),pos.y());
+			}	
+		}	
+
+	}
+	else if(name == "bookmarkFolder")
+	{
+		MvQBookmarks::addItem(folder);
+	}  
+	else
+		desktopCommand(name,pos);  	
+}
+	  
+bool MvQFolderViewBase::confirmDelete(int count)
+{
+	QString txt1, txt2;
+	if(count == 1)
+	{	txt1=QObject::tr("Delete icon");
+		txt2=QObject::tr("Do you really want to delete this icon? It will be permanenly deleted from disk!");
+	}
+	else
+	{
+	  	txt1=QObject::tr("Delete icons");
+		txt2=QObject::tr("Do you really want to delete these ") + QString::number(count) + QObject::tr(" icons? They will be permanenly deleted from disk!");
+	}
+	
+  	return (QMessageBox::warning(0,txt1,txt2,
+		QMessageBox::Yes | QMessageBox::Cancel,QMessageBox::Cancel) == QMessageBox::Yes);
+		
+}
+
+QString  MvQFolderViewBase::formatFileSize(qint64 /*size*/)
+{
+#if 0
+if(size < 1024)
+	  	return QString::number(size) + " B";
+	else if(size < 1024*1024)
+	  	return QString::number(size/1024) + " KB";
+	else if(size < 1024*1024*1024)
+	  	return QString::number(size/(1024*1024)) + " MB";
+	else
+	  	return QString::number(size/(1024*1024*1024)) + " GB";
+#endif	
+	
+ return QString();
+}	
+
+QString  MvQFolderViewBase::formatFilePermissions(const QFile::Permissions& perm)
+{  
+//There is a bug in Qt 4.6.3 (it was the version used for the developments)!
+//QFileSystemModel::permissions() gives inversed results for the
+//write premissions. So the the code below had to be changed to cope
+//with it (the original code is still kept but commented out).
+  
+	return "-" +
+	       QString((perm.testFlag(QFile::ReadOwner))?"r":"-") +
+	       QString((perm.testFlag(QFile::WriteOwner))?"-":"w") +
+	       QString((perm.testFlag(QFile::ExeOwner))?"x":"-") +
+	       QString((perm.testFlag(QFile::ReadGroup))?"r":"-") +
+	       QString((perm.testFlag(QFile::WriteGroup))?"-":"w") +
+	       QString((perm.testFlag(QFile::ExeGroup))?"x":"-") +
+	       QString((perm.testFlag(QFile::ReadOther))?"r":"-") +
+	       QString((perm.testFlag(QFile::WriteOther))?"-":"w") +
+	       QString((perm.testFlag(QFile::ExeOther))?"x":"-");
+  
+#if 0 
+  	return "-" +
+	       QString((perm.testFlag(QFile::ReadOwner))?"r":"-") +
+	       QString((perm.testFlag(QFile::WriteOwner))?"w":"-") +
+	       QString((perm.testFlag(QFile::ExeOwner))?"x":"-") +
+	       QString((perm.testFlag(QFile::ReadGroup))?"r":"-") +
+	       QString((perm.testFlag(QFile::WriteGroup))?"w":"-") +
+	       QString((perm.testFlag(QFile::ExeGroup))?"x":"-") +
+	       QString((perm.testFlag(QFile::ReadOther))?"r":"-") +
+	       QString((perm.testFlag(QFile::WriteOther))?"w":"-") +
+	       QString((perm.testFlag(QFile::ExeOther))?"x":"-");
+#endif
+
+}
+
+bool MvQFolderViewBase::isAccepted(const IconClass& kind)
+{
+  	return folderModel_->isAccepted(kind);
+}  
+
+bool MvQFolderViewBase::isAccepted(IconObject *obj)
+{
+	const IconClass& ic = obj->iconClass();
+	return isAccepted(ic);
+}
+
+int MvQFolderViewBase::getIconSize() 
+{
+  	return itemProp_->iconSize();
+}	
+
+void MvQFolderViewBase::showLastCreated()
+{
+	QModelIndex index=filterModel_->mapFromSource(folderModel_->lastArrived());
+	blink(index);
+} 
diff --git a/src/Desktop/MvQFolderViewBase.h b/src/Desktop/MvQFolderViewBase.h
new file mode 100644
index 0000000..1a10b28
--- /dev/null
+++ b/src/Desktop/MvQFolderViewBase.h
@@ -0,0 +1,101 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQFolderViewBase_H
+#define MvQFolderViewBase_H
+
+#include <QDebug>
+#include <QFile>
+#include <QModelIndexList>
+#include <QPoint>
+#include <QStringList>
+
+#include "MvQ.h"
+
+#include <vector>
+#include <string>
+
+#include "mars.h"
+
+using std::string;
+using std::vector;
+
+class QModelIndex;
+class QShortcut;
+class QWidget;
+
+class MvQContextItemSet;
+class MvQFileSystemModel;
+class MvQFolderFilterModel;
+class MvQFolderItemProperty;
+class MvQFolderModel;
+
+class IconClass;
+class IconObject;
+class IconObjectH;
+class Folder;
+
+class MvQFolderViewBase 
+{
+
+public:
+        enum IndexType {FsModelIndex, FilterModelIndex}; 
+        
+	MvQFolderViewBase(MvQFolderModel*);
+  	virtual ~MvQFolderViewBase();
+	
+	Folder* currentFolder();
+	bool changeFolderToParent();
+	bool changeFolder(QString);
+	bool changeFolder(Folder*);
+	bool isFolder(const QModelIndex&,IndexType indexType=FsModelIndex);
+	QString fullName(const QModelIndex&,IndexType indexType=FsModelIndex);
+	MvQFolderModel* folderModel() const {return folderModel_;}
+	void showLastCreated();
+	
+	int  getIconSize(); 	
+	virtual void toGrid(MvQ::GridSortMode) {};
+	
+protected:
+	bool changeFolder(const QModelIndex&,IndexType indexType=FsModelIndex);
+	virtual void folderChanged()=0;
+	virtual void setPositions()=0;
+	virtual void blink(const QModelIndex&)=0;
+	virtual void iconSizeChanged() {};
+	
+	void handleDoubleClick(const QModelIndex&);
+	void handleContextMenu(QModelIndex,QModelIndexList,QPoint,QPoint,QWidget*);
+	void handleIconShortCut(QShortcut*,const QModelIndex&);
+	virtual void iconCommand(QString,IconObjectH)=0;
+	virtual void desktopCommand(QString,QPoint)=0;
+	
+	QString itemInfo(const QModelIndex&,IndexType);
+	QString formatFileSize(qint64);
+	QString formatFilePermissions(const QFile::Permissions&);
+	
+	bool isAccepted(const IconClass&);
+	bool isAccepted(IconObject*);
+	
+	virtual MvQContextItemSet* cmSet()=0;
+	
+	MvQFileSystemModel    *fsModel_;
+	MvQFolderFilterModel  *filterModel_;
+	MvQFolderModel	      *folderModel_;	
+	bool shortCutInit_;	
+	int iconSize_;
+	MvQFolderItemProperty* itemProp_;
+	
+private:
+    	void handleIconCommand(const vector<IconObject*>&,QString);
+    	void handleIconCommand(IconObject*,QString);
+	void handleDesktopCommand(QString,QPoint,QWidget*);
+	bool confirmDelete(int);
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderViewDelegate.cc b/src/Desktop/MvQFolderViewDelegate.cc
new file mode 100644
index 0000000..294e079
--- /dev/null
+++ b/src/Desktop/MvQFolderViewDelegate.cc
@@ -0,0 +1,427 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQFolderViewDelegate.h"
+
+#include <QApplication>
+#include <QDebug>
+#include <QLinearGradient>
+#include <QLineEdit>
+#include <QPainter>
+#include <QStyleOptionViewItem>
+#include <QTimer>
+
+#include "MvQFolderModel.h"
+
+QBrush MvQFolderViewDelegate::editBrush_;
+QPen MvQFolderViewDelegate::editPen_;
+QBrush MvQFolderViewDelegate::selectBrush_;
+QPen MvQFolderViewDelegate::selectPen_;
+QBrush MvQFolderViewDelegate::hoverBrush_;
+QPen MvQFolderViewDelegate::hoverPen_;
+bool MvQFolderViewDelegate::init_=false;
+
+//===========================================
+//
+//  MvQFolderViewDelegate
+//
+//===========================================
+
+MvQFolderViewDelegate::MvQFolderViewDelegate(QWidget *parent) : 
+      QStyledItemDelegate(parent),
+      timer_(0),
+      blinkCnt_(-1),
+      blinkNum_(3),
+      enablePaint_(true)
+{
+	if(init_)
+	  	return;
+	else
+	  	init_=true;
+	
+	editPen_=QPen(QColor(170,170,170));
+	editBrush_=QBrush(QColor(200,200,200,90));
+  
+  	editPen_=QPen(QColor(170,170,170));
+	editBrush_=QBrush(QColor(200,200,200));
+	 
+	QLinearGradient hoverGrad;
+	hoverGrad.setCoordinateMode(QGradient::ObjectBoundingMode);
+	hoverGrad.setStart(0,0);
+	hoverGrad.setFinalStop(0,1);
+     	hoverGrad.setColorAt(0, QColor(250,250,250));
+     	//hoverGrad.setColorAt(1, QColor(220,230,244));
+	hoverGrad.setColorAt(1, QColor(240,240,240));
+	hoverBrush_=QBrush(hoverGrad);
+	hoverPen_=QPen(QColor(127,154,191));
+			
+	QLinearGradient selectGrad;
+	selectGrad.setCoordinateMode(QGradient::ObjectBoundingMode);
+     	selectGrad.setStart(0,0);
+	selectGrad.setFinalStop(0,1);
+	selectGrad.setColorAt(0, QColor(220,235,252));
+     	selectGrad.setColorAt(1, QColor(193,220,252));
+	selectBrush_=QBrush(selectGrad);
+	selectPen_=QPen(QColor(127,154,191));
+}
+
+void MvQFolderViewDelegate::blink(const QModelIndex &index)
+{
+  	blinkIndex_=index;
+	if(!timer_)
+	{
+	  	timer_ = new QTimer(this);
+     		connect(timer_, SIGNAL(timeout()), 
+			this, SLOT(slotBlink()));
+	}
+	
+    	blinkCnt_=0;
+	timer_->start(200);
+}
+
+void  MvQFolderViewDelegate::slotBlink()
+{
+  	emit repaintIt(blinkIndex_);
+	if(blinkCnt_== 2*blinkNum_+1)
+	{
+	  	timer_->stop();
+		blinkIndex_=QModelIndex();
+		blinkCnt_=-1;
+	}
+	else
+	  	blinkCnt_++;
+}  
+
+QWidget* MvQFolderViewDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option,
+             const QModelIndex &index) const
+{
+    	if (index.column() == 0) 
+    	{
+        	QLineEdit *le = new QLineEdit(parent);
+        	//timeEdit->setDisplayFormat("mm:ss");
+        
+		//connect(le,SIGNAL(editingFinished()),
+                //	this,SLOT(commitAndCloseEditor()));
+		QFont font;
+		QFontMetrics fm(font);
+		le->setMinimumHeight(fm.height()+10);
+		return le;
+    	} 
+	else
+	{
+        	return QStyledItemDelegate::createEditor(parent, option, index);
+    	}
+}
+
+void MvQFolderViewDelegate::setEditorData(QWidget *editor,const QModelIndex &index) const
+{
+	if(index.column() == 0) 
+    	{
+        	QLineEdit *le = qobject_cast<QLineEdit *>(editor);
+		le->setObjectName("iconLabel");
+		QString txt=index.model()->data(index, Qt::EditRole).toString();		
+        	le->setText(txt);
+		
+		QFont font;
+		QFontMetrics fm(font);
+		le->setMinimumWidth(fm.width(txt)+16);
+		
+		le->setCursorPosition(0);
+		le->deselect();
+		
+		connect(le,SIGNAL(cursorPositionChanged(int,int)),
+			this,SLOT(slotInitEditor(int,int)));
+	}
+    	else 
+	{
+        	QStyledItemDelegate::setEditorData(editor, index);
+    	}
+}
+
+void MvQFolderViewDelegate::setModelData(QWidget *editor,
+                                 QAbstractItemModel *model,
+                                 const QModelIndex &index) const
+{
+	if (index.column() == 0) 
+	{
+        	QLineEdit *le = qobject_cast<QLineEdit *>(editor);              
+        	model->setData(index,le->text());
+    	} 
+    	else 
+	{
+        	QStyledItemDelegate::setModelData(editor, model, index);
+	}
+}
+
+void MvQFolderViewDelegate::slotInitEditor(int /*oldPos*/, int /*newPos*/)
+{
+ 	QLineEdit *le = qobject_cast<QLineEdit *>(sender()); 
+
+	le->setCursorPosition(0);
+	le->deselect();
+	
+	le->disconnect(SIGNAL(cursorPositionChanged(int,int)));
+} 
+
+void MvQFolderViewDelegate::changeSize(const QModelIndex& index)
+{
+ 	emit sizeHintChanged(index);
+	
+}  
+
+		
+//===========================================
+//
+//  MvQIconDelegate
+//
+//===========================================
+
+MvQIconDelegate::MvQIconDelegate(QWidget *parent) : MvQFolderViewDelegate(parent), stripeMode_(false)
+{
+}
+
+void MvQIconDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option,
+		           const QModelIndex& index) const
+{
+	if(!enablePaint_)
+	{
+		return;  
+	}  
+	  
+	if(index.column() == 0)
+	{
+		QStyleOptionViewItemV4 vopt(option);
+   		initStyleOption(&vopt, index);
+   
+    		const QStyle *style = vopt.widget ? vopt.widget->style() : QApplication::style();
+    		const QWidget* widget = vopt.widget;
+
+		QString txt=index.data(Qt::DisplayRole).toString();
+		QPixmap pixmap=index.data(Qt::DecorationRole).value<QPixmap>();
+		
+		//Save painter state
+		painter->save();
+	       
+		if(stripeMode_)
+		{
+			if(index.row() % 2 == 0)
+			  	painter->fillRect(QRect(option.rect.left()-5,0,option.rect.width()+10,painter->device()->height()),
+						  QColor(235,235,235));
+						  
+		}				  
+						  
+	        QString text=index.data(Qt::DisplayRole).toString();		
+		QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &vopt, widget);
+		
+		//Background
+		
+		//If the icon editor is open we render a transparent rect above the item
+		if(index.data(MvQFolderModel::EditorRole).toBool())
+		{  			
+			QRect fillRect=option.rect.adjusted(0,1,-1,-1);
+			painter->fillRect(fillRect,editBrush_);
+			painter->setPen(editPen_);
+			painter->drawRect(fillRect);
+		}
+		else if(option.state & QStyle::State_Selected)
+		{	
+			//QRect fillRect=option.rect.adjusted(0,1,-1,-textRect.height()-1);
+			QRect fillRect=option.rect.adjusted(0,1,-1,-1);
+			painter->fillRect(fillRect,selectBrush_);
+			painter->setPen(selectPen_);
+			painter->drawRect(fillRect);
+		}	
+		else if(option.state & QStyle::State_MouseOver)
+		{	
+			QRect fillRect=option.rect.adjusted(0,1,-1,-1);
+			painter->fillRect(fillRect,hoverBrush_);
+			painter->setPen(hoverPen_);
+			painter->drawRect(fillRect);
+		}
+		
+		//Pixmap
+                QRect iconRect = style->subElementRect(QStyle::SE_ItemViewItemDecoration, &vopt, widget);              
+		
+		//qDebug() << "icon rect size" << iconRect.size();
+		
+		
+		if(blinkCnt_ != -1 && (index == blinkIndex_ && blinkCnt_ % 2 ==0) )
+		{
+			QImage img=pixmap.toImage();
+			img.invertPixels();
+			painter->drawImage(iconRect,img);
+		}
+		else
+		{  		
+			painter->drawPixmap(iconRect,pixmap);
+		}
+		
+		//Text rect
+		QFont font = index.data(Qt::FontRole).value<QFont>();   
+		painter->setFont(font);
+		painter->setPen(index.data(Qt::ForegroundRole).value<QColor>());
+		
+		/*if(option.state & QStyle::State_Editing)
+		{
+			painter->setPen(Qt::black);
+			painter->drawRect(textRect);
+		}			  
+		else if(option.state & QStyle::State_Selected)
+		{	
+			painter->fillRect(textRect, index.data(Qt::ForegroundRole).value<QColor>());
+			painter->setPen(Qt::white);
+		}		
+		else
+		{
+		  	painter->setPen(index.data(Qt::ForegroundRole).value<QColor>());
+		}*/
+			
+		painter->drawText(textRect,Qt::AlignLeft,text);
+
+		if(stripeMode_)
+		{
+		        painter->setPen(QPen(QColor(210,210,210),1));
+		  	painter->drawLine(option.rect.topRight().x()+5,0,option.rect.topRight().x()+5,painter->device()->height());
+		}
+		
+		painter->restore();			
+	}		
+	else
+	{		
+		QStyledItemDelegate::paint(painter,option,index);
+	}
+}
+
+QSize MvQIconDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const
+{
+  	QSize s=QStyledItemDelegate::sizeHint(option,index);
+	
+	//qDebug() << "decoration" <<index.data(Qt::DisplayRole).toString() <<  option.decorationSize;
+	
+	return s;
+}
+
+//===========================================
+//
+//  MvDetailedViewDelegate
+//
+//===========================================
+
+MvQDetailedViewDelegate::MvQDetailedViewDelegate(QWidget *parent) : MvQFolderViewDelegate(parent)
+{
+}
+
+void MvQDetailedViewDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option,
+		           const QModelIndex& index) const
+{
+	if(index.column() <= 5)
+	{
+		QStyleOptionViewItemV4 vopt(option);
+   		initStyleOption(&vopt, index);
+   
+    		const QStyle *style = vopt.widget ? vopt.widget->style() : QApplication::style();
+    		const QWidget* widget = vopt.widget;
+
+		//Save painter state
+		painter->save();
+				
+		//Get current values from model
+		QString text=index.data(Qt::DisplayRole).toString();
+		QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &vopt, widget);
+		
+		//Background
+		if(index.column()==0)
+		{
+			QRect fillRect=QRect(option.rect.x(),option.rect.y(),painter->device()->width(),option.rect.height());
+				
+			//If the icon editor is open we render a transparent rect above the item
+			//QRect fillRect=option.rect.adjusted(0,1,-1,-1);
+		
+			if(index.data(MvQFolderModel::EditorRole).toBool())
+			{  			
+				painter->fillRect(fillRect,editBrush_);
+				painter->setPen(editPen_);
+				painter->drawLine(fillRect.topLeft(),fillRect.topRight());
+				painter->drawLine(fillRect.bottomLeft(),fillRect.bottomRight());			
+			}
+			else if(option.state & QStyle::State_Selected)
+			{	
+				//QRect fillRect=option.rect.adjusted(0,1,-1,-textRect.height()-1);			
+				painter->fillRect(fillRect,selectBrush_);
+				painter->setPen(selectPen_);
+				painter->drawLine(fillRect.topLeft(),fillRect.topRight());
+				painter->drawLine(fillRect.bottomLeft(),fillRect.bottomRight());
+			}	
+			else if(option.state & QStyle::State_MouseOver)
+			{	
+				//QRect fillRect=option.rect.adjusted(0,1,-1,-1);
+				painter->fillRect(fillRect,hoverBrush_);
+				painter->setPen(hoverPen_);
+				painter->drawLine(fillRect.topLeft(),fillRect.topRight());
+				painter->drawLine(fillRect.bottomLeft(),fillRect.bottomRight());
+			}
+		
+		}
+		
+		//Pixmap		
+		if(index.column() == 0)
+		{
+			QPixmap pixmap=index.data(Qt::DecorationRole).value<QPixmap>();
+			QRect iconRect = style->subElementRect(QStyle::SE_ItemViewItemDecoration, &vopt, widget);     
+			//iconRect.adjust(2,2,-2,-2);				
+			
+			if(blinkCnt_ != -1 && (index == blinkIndex_ && blinkCnt_ % 2 ==0) )
+			{
+				QImage img=pixmap.toImage();
+				img.invertPixels();
+				painter->drawImage(iconRect,img);
+			}
+			else
+			{  		
+				painter->drawPixmap(iconRect,pixmap);
+			}
+		}
+	
+		
+		//Text rect
+		QFont font = index.data(Qt::FontRole).value<QFont>();   
+		painter->setFont(font);
+		painter->setPen(index.data(Qt::ForegroundRole).value<QColor>());
+		
+		/*if(option.state & QStyle::State_Editing)
+		{
+			painter->setPen(Qt::black);
+			painter->drawRect(textRect);
+		}			  
+		else if(option.state & QStyle::State_Selected)
+		{	
+			painter->fillRect(textRect, index.data(Qt::ForegroundRole).value<QColor>());
+			painter->setPen(Qt::white);
+		}
+		else
+		{
+		  	painter->setPen(index.data(Qt::ForegroundRole).value<QColor>());
+		}*/
+			
+		painter->drawText(textRect,Qt::AlignLeft | Qt::AlignVCenter,text);
+			
+		//restore painter state
+		painter->restore();			
+	}		
+	else
+	{		
+		QStyledItemDelegate::paint(painter,option,index);
+	}
+}
+
+QSize MvQDetailedViewDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const
+{
+	QSize size=QStyledItemDelegate::sizeHint(option,index);
+	return size+QSize(0,4);
+}
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderViewDelegate.h b/src/Desktop/MvQFolderViewDelegate.h
new file mode 100644
index 0000000..7d04f7a
--- /dev/null
+++ b/src/Desktop/MvQFolderViewDelegate.h
@@ -0,0 +1,82 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQFolderViewDelegate_H
+#define MvQFolderViewDelegate_H
+
+#include <QPen>
+#include <QStyledItemDelegate>
+
+class QStyleOptionViewItem;
+class QTimer;
+
+class MvQFolderViewDelegate : public QStyledItemDelegate
+{
+Q_OBJECT  
+  
+public:
+	MvQFolderViewDelegate(QWidget* parent=0);
+	void blink(const QModelIndex &);
+	
+	QWidget* createEditor(QWidget*,const QStyleOptionViewItem&,const QModelIndex&) const;
+	void setEditorData(QWidget*,const QModelIndex& ) const;
+	void setModelData(QWidget *,QAbstractItemModel *,const QModelIndex &) const;
+	void setEnablePaint(bool b) {enablePaint_=b;}
+                                 
+public slots:
+	void slotBlink();
+	void slotInitEditor(int oldPos, int newPos);
+	void changeSize(const QModelIndex&);
+	
+signals:
+    	void repaintIt(const QModelIndex&);
+	
+protected:
+	static QPen editPen_;
+	static QBrush editBrush_;
+	static QPen hoverPen_;
+	static QBrush hoverBrush_;
+	static QPen selectPen_;
+	static QBrush selectBrush_;
+	static bool init_;
+	QTimer *timer_;
+	int blinkCnt_;
+	QModelIndex blinkIndex_;
+	int blinkNum_;
+	bool enablePaint_;
+	
+};
+
+class MvQIconDelegate : public MvQFolderViewDelegate
+{
+public:
+
+	MvQIconDelegate(QWidget* parent=0);
+	void paint(QPainter *painter,const QStyleOptionViewItem &option,
+		           const QModelIndex& index) const;
+	QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const;
+	void setStripeMode(bool b) {stripeMode_=b;}
+	
+protected:
+	bool stripeMode_;    	
+	
+};
+
+class MvQDetailedViewDelegate : public MvQFolderViewDelegate
+{
+public:
+
+	MvQDetailedViewDelegate(QWidget* parent=0);
+	void paint(QPainter *painter,const QStyleOptionViewItem &option,
+		           const QModelIndex& index) const;
+	QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const;
+
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderViewHandler.cc b/src/Desktop/MvQFolderViewHandler.cc
new file mode 100644
index 0000000..c0a5e04
--- /dev/null
+++ b/src/Desktop/MvQFolderViewHandler.cc
@@ -0,0 +1,92 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQFolderViewHandler.h"
+
+#include <QStackedLayout>
+#include <QWidget>
+
+#include "MvQFolderViewBase.h"
+
+map<MvQ::FolderViewMode,QString> MvQFolderViewHandler::modeIds_;
+
+MvQFolderViewHandler::MvQFolderViewHandler(QStackedLayout* p) : stacked_(p)
+{
+  	modeIds_[MvQ::NoViewMode]="";
+	modeIds_[MvQ::IconViewMode]="icon";
+        modeIds_[MvQ::DetailedViewMode]="detailed";
+	currentMode_=MvQ::NoViewMode;
+}  
+
+void MvQFolderViewHandler::add(MvQ::FolderViewMode mode,MvQFolderViewBase* b,QWidget* w)
+{
+  	bases_[mode]=b;
+	widgets_[mode]=w;
+	stacked_->addWidget(w);
+}	
+
+MvQFolderViewBase* MvQFolderViewHandler::base(MvQ::FolderViewMode mode) const
+{
+   	map<MvQ::FolderViewMode,MvQFolderViewBase*>::const_iterator it=bases_.find(mode);
+	return (it != bases_.end())?it->second:0;
+}  
+
+QWidget* MvQFolderViewHandler::widget(MvQ::FolderViewMode mode)
+{
+   	map<MvQ::FolderViewMode,QWidget*>::iterator it=widgets_.find(mode);
+	return (it != widgets_.end())?it->second:0;
+}  
+
+void MvQFolderViewHandler::setCurrentMode(MvQ::FolderViewMode mode)
+{
+	if(mode==MvQ::NoViewMode)
+	  	mode=MvQ::IconViewMode;
+		
+	if(mode == currentMode_)
+	  	return;
+	
+	MvQFolderViewBase* b=base(currentMode_);
+	QWidget* w=widget(currentMode_);
+	
+	MvQFolderViewBase* bNew=base(mode);
+	QWidget* wNew=widget(mode);
+	
+	//Set the mode
+	currentMode_=mode;
+	
+	//Update the view 
+	if(wNew && bNew)
+	{
+	  	wNew->setEnabled(true);
+		if(b) bNew->changeFolder(b->currentFolder());
+	
+		//Set layout
+		stacked_->setCurrentWidget(wNew);
+	}
+	
+	//Disable the other views
+	for(map<MvQ::FolderViewMode,QWidget*>::iterator it=widgets_.begin(); it != widgets_.end(); it++)
+	  	if(it->first != currentMode_ && it->second)
+		  	it->second->setEnabled(false);
+}
+
+void MvQFolderViewHandler::setCurrentMode(QString name)
+{
+  	for(map<MvQ::FolderViewMode,QString>::iterator it=modeIds_.begin(); it != modeIds_.end(); it++)
+	  	if(it->second == name)
+		  	setCurrentMode(it->first);
+}  
+  
+QString MvQFolderViewHandler::currentModeId() const
+{
+ 	 map<MvQ::FolderViewMode,QString>::iterator it=modeIds_.find(currentMode_);
+	 return (it != modeIds_.end())?it->second:"";	 
+}  
+
+
diff --git a/src/Desktop/MvQFolderViewHandler.h b/src/Desktop/MvQFolderViewHandler.h
new file mode 100644
index 0000000..70907be
--- /dev/null
+++ b/src/Desktop/MvQFolderViewHandler.h
@@ -0,0 +1,58 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQFolderViewHandler_H
+#define MvQFolderViewHandler_H
+ 
+#include <map>
+#include <QString>
+
+#include "IconObject.h"
+
+#include "MvQ.h"
+#include "FolderPresenter.h"
+
+class Folder;
+class MvQFolderModel;
+
+class IconClass;
+class IconObject;
+
+class QStackedLayout;
+class QWidget;
+
+class MvQFolderViewBase;
+
+using namespace std;	
+	
+class MvQFolderViewHandler
+{
+public:
+        MvQFolderViewHandler(QStackedLayout*);
+	
+	void add(MvQ::FolderViewMode,MvQFolderViewBase*,QWidget*);
+	MvQ::FolderViewMode currentMode() const {return currentMode_;}
+	void setCurrentMode(MvQ::FolderViewMode);
+	void setCurrentMode(QString);
+	MvQFolderViewBase* currentBase() const {return base(currentMode_);}
+	QString currentModeId() const;
+	
+private:
+	MvQFolderViewBase* base(MvQ::FolderViewMode) const;
+	QWidget* widget(MvQ::FolderViewMode);
+	
+	MvQ::FolderViewMode  currentMode_;
+  	map<MvQ::FolderViewMode,MvQFolderViewBase*> bases_;
+	map<MvQ::FolderViewMode,QWidget*> widgets_;
+	QStackedLayout* stacked_;
+	
+	static map<MvQ::FolderViewMode,QString> modeIds_;
+};	
+
+#endif
diff --git a/src/Desktop/MvQFolderWatcher.cc b/src/Desktop/MvQFolderWatcher.cc
new file mode 100644
index 0000000..2583c0c
--- /dev/null
+++ b/src/Desktop/MvQFolderWatcher.cc
@@ -0,0 +1,136 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQFolderWatcher.h"
+
+#include <QDebug>
+#include <QTimer>
+
+#include "Folder.h"
+#include "FolderPresenter.h"
+ 
+QList<MvQFolderWatcher*> MvQFolderWatcher::items_;	
+QMap<Folder*,time_t> MvQFolderWatcher::timeoutLog_;
+
+MvQFolderWatcher::MvQFolderWatcher(FolderPresenter *fp,int timeout) :
+ presenter_(fp),
+ timeout_(timeout)
+{
+  	timer_= new QTimer(this);
+	timer_->setInterval(timeout_);
+	
+	connect(timer_,SIGNAL(timeout()),
+		this,SLOT(slotTimeout()));
+		
+	timer_->start();	 
+}
+
+Folder* MvQFolderWatcher::folder() 
+{
+	return presenter_->currentFolder();
+}	
+
+void MvQFolderWatcher::doTimeout(bool forced)
+{
+  	Folder *f=folder();
+  	if(f && (forced || isTimeoutDue(time(0))))
+	{
+	  	timeoutLog_[f]=time(0);
+		f->scan();
+	}	
+}  
+
+bool MvQFolderWatcher::isTimeoutDue(time_t t)
+{
+  	QMap<Folder*,time_t>::iterator it=timeoutLog_.find(folder());
+	if(it != timeoutLog_.end())
+	{  
+		//if more than the 80% of the timeout period passed!!
+	  	return t  >= it.value()+8*timeout_/10000;
+	}
+	
+	return true;
+}
+
+void MvQFolderWatcher::cleanLog()
+{
+	QList<Folder*> lst;
+  	foreach(MvQFolderWatcher* item,items_)
+	{  	
+		lst << item->folder();
+	}
+		
+	QList<Folder*> keys=timeoutLog_.keys();
+	foreach(Folder* f,keys)
+	{
+		if(!lst.contains(f))  
+			timeoutLog_.remove(f);
+	}
+}
+	  
+
+void MvQFolderWatcher::slotTimeout()
+{
+  	doTimeout(false);
+}  
+
+void MvQFolderWatcher::reload()
+{
+	timer_->stop();
+	doTimeout(true);	
+	timer_->start();
+	
+	print();
+	
+}  
+
+void MvQFolderWatcher::add(FolderPresenter* fp)
+{
+	MvQFolderWatcher::
+	cleanLog();
+	
+	MvQFolderWatcher *fw=new MvQFolderWatcher(fp);
+	items_ << fw;
+}	
+	
+void MvQFolderWatcher::remove(FolderPresenter* fp)
+{
+  	foreach(MvQFolderWatcher* item,items_)
+	{
+	  	if(item->folderPresenter() == fp)
+		{
+			items_.removeAll(item);
+			delete item;
+			return;
+		}	
+	}
+}	
+
+void MvQFolderWatcher::reload(FolderPresenter* fp)
+{
+	foreach(MvQFolderWatcher* item,items_)
+	{
+	  	if(item->folderPresenter() == fp)
+		{
+			item->reload();
+			return;
+		}	
+	}  
+}
+
+void MvQFolderWatcher::print()
+{
+  	qDebug() << "Watched folders: \n----------------";
+  	
+  	foreach(MvQFolderWatcher* item,items_)
+	{	
+		qDebug() << QString::fromStdString(item->folder()->fullName()) << item->timeout()/1000 << "s";
+	}	
+}		
+		
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderWatcher.h b/src/Desktop/MvQFolderWatcher.h
new file mode 100644
index 0000000..cc7f83a
--- /dev/null
+++ b/src/Desktop/MvQFolderWatcher.h
@@ -0,0 +1,55 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQFolderWatcher_H
+#define MvQFolderWatcher_H
+ 
+#include <QList>
+#include <QMap>
+#include <QObject>
+
+#include <time.h>
+
+class Folder;
+class FolderPresenter;
+class QTimer;
+
+class MvQFolderWatcher : public QObject
+{
+Q_OBJECT  
+  
+public:
+	static void add(FolderPresenter*);
+	static void remove(FolderPresenter*);
+	static void print();
+	static void reload(FolderPresenter*);
+	
+	FolderPresenter* folderPresenter() {return presenter_;}
+	Folder* folder();
+	int timeout() const {return timeout_;}
+	
+public slots:
+	void slotTimeout();
+	
+protected: 
+	MvQFolderWatcher(FolderPresenter*,int timeout=10000);
+	void doTimeout(bool);
+	void reload();
+	
+	bool isTimeoutDue(time_t);
+	static void cleanLog();
+	
+	FolderPresenter* presenter_;
+	QTimer* timer_;
+	int timeout_;
+	static QList<MvQFolderWatcher*> items_;	
+	static QMap<Folder*,time_t> timeoutLog_;
+};
+
+#endif
diff --git a/src/Desktop/MvQFolderWidget.cc b/src/Desktop/MvQFolderWidget.cc
new file mode 100644
index 0000000..00b3dc6
--- /dev/null
+++ b/src/Desktop/MvQFolderWidget.cc
@@ -0,0 +1,503 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQFolderWidget.h"
+
+#include <QAction>
+#include <QDebug>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QMenu>
+#include <QStackedLayout>
+#include <QToolButton>
+#include <QVBoxLayout>
+
+#include "MvQDetailedFolderView.h"
+#include "MvQFolderHistory.h"
+#include "MvQFolderNavigation.h"
+#include "MvQFolderViewBase.h"
+#include "MvQFolderViewHandler.h"
+#include "MvQFolderWatcher.h"
+#include "MvQIconFolderView.h"
+#include "MvQDesktopSettings.h"
+
+#include "IconClass.h"
+#include "Path.h"
+#include "MvRequest.h"
+
+#include "MvQFolderModel.h"
+#include "Folder.h"
+
+MvQFolderWidget::MvQFolderWidget(QString rootFolder,MvQFolderHistory *folderHistory,
+				 QWidget *parent) : 
+        QWidget(parent), 
+        folderHistory_(folderHistory)
+{		
+  	//----------------------------------
+	// Create folder model
+	//----------------------------------
+
+	folderModel_=new MvQFolderModel(MvQDesktopSettings::iconSize_,this);
+	folderModel_->setFolder(rootFolder);
+		
+	connect(folderModel_,SIGNAL(folderChanged(Folder*)),
+		this,SLOT(slotFolderChanged(Folder*)));		
+		
+	//-----------------------------
+	// Layout 
+	//-----------------------------
+	
+	QVBoxLayout *mainLayout = new QVBoxLayout(this);
+	mainLayout->setSpacing(0); 
+	mainLayout->setContentsMargins(1,1,1,1);
+
+	//-----------------------------
+	// Top part 
+	//-----------------------------
+
+	folderNavigation_=new MvQFolderNavigation;
+	if(folderModel_->folder())
+	  	folderNavigation_->add(rootFolder);
+	
+	//------------------------------
+	// Central part
+	//------------------------------
+	
+	//View mode stacked widget
+	centralLayout_=new QStackedLayout;
+	mainLayout->addLayout(centralLayout_,1);
+	
+	//View handler
+	views_=new MvQFolderViewHandler(centralLayout_);	
+	
+	// Icon view	
+	iconView_= new MvQIconFolderView(folderModel_,this);	
+	views_->add(MvQ::IconViewMode,iconView_,iconView_);
+	
+	connect(iconView_,SIGNAL(currentFolderChanged(Folder*)),
+		this,SLOT(slotFolderReplacedInView(Folder*)));
+
+	connect(iconView_,SIGNAL(iconCommandRequested(QString,IconObjectH)),
+		this,SIGNAL(iconCommandRequested(QString,IconObjectH)));
+		
+	connect(iconView_,SIGNAL(desktopCommandRequested(QString,QPoint)),
+		this,SIGNAL(desktopCommandRequested(QString,QPoint)));
+	
+	connect(iconView_,SIGNAL(itemEntered(QString)),
+		this, SIGNAL(itemInfoChanged(QString)));
+				
+	// Detailed view
+	
+	detailedView_= new MvQDetailedFolderView(folderModel_,this);
+	views_->add(MvQ::DetailedViewMode,detailedView_,detailedView_);
+	
+	connect(detailedView_,SIGNAL(currentFolderChanged(Folder*)),
+		this,SLOT(slotFolderReplacedInView(Folder*)));
+	
+	connect(detailedView_,SIGNAL(iconCommandRequested(QString,IconObjectH)),
+		this,SIGNAL(iconCommandRequested(QString,IconObjectH)));
+	
+	connect(detailedView_,SIGNAL(desktopCommandRequested(QString,QPoint)),
+		this,SIGNAL(desktopCommandRequested(QString,QPoint)));
+		
+	connect(detailedView_,SIGNAL(itemEntered(QString)),
+		this,SIGNAL(itemInfoChanged(QString)));
+		
+	
+	//Init view mode
+	views_->setCurrentMode(MvQDesktopSettings::viewMode_);
+	
+	
+	/*
+	views_->populate(centralLayout_);
+	centralLayout_->setCurrentWidget(views_)
+		
+	views_=new MvQFolderViewHandler();	
+		
+	//Init view mode
+	views_->currentBase()=it->second;
+	views_->setCurrent(mode);
+	
+	
+	//View mode stacked widget
+	centralLayout_=new QStackedLayout;
+	mainLayout->addLayout(centralLayout_,1);
+	
+	///Init stacked widget
+	views_->populate(centralLayout_);
+	centralLayout_->setCurrentWidget(views_)
+		
+	//Init view mode
+	map<ViewMode,MvQFolderViewBase*>::iterator it=views_.find(mode);
+	if(it != views_.end())
+	{
+	  	views_->currentBase()=it->second;
+	}
+	
+	//Init stacked widget
+	(map<ViewMode,QWidget*>::iterator itW=viewWidgets_.find(mode);
+	if(it != viewWidgets_.end())
+	{
+	  	centralLayout_->setCurrentWidget(it->second());
+	}*/	
+	
+	/*views_->currentBase()=iconView_;
+	
+	//Stacked layout 
+	
+	centralLayout_=new QStackedLayout;
+	mainLayout->addLayout(centralLayout_,1);
+	
+	centralLayout_->addWidget(iconView_);
+	centralLayout_->addWidget(detailedView_);
+	centralLayout_->setCurrentIndex(0);*/
+	
+	MvQFolderWatcher::add(this);
+	
+	//Add root to history
+	folderHistory_->add(rootFolder);
+}
+
+MvQFolderWidget::~MvQFolderWidget()
+{	
+	MvQFolderWatcher::remove(this);
+	
+	//delete iconView_;
+	//delete detailedView_;
+	//delete folderModel_;	
+}
+
+Folder* MvQFolderWidget::currentFolder()
+{
+	return folderModel_->folder();	
+}
+
+QString MvQFolderWidget::currentFolderName()
+{
+	if(folderModel_->folder())	  
+	  	return QString::fromStdString(folderModel_->folder()->name());	
+
+	return QString();
+}
+
+//----------------------------------
+//   Navigation
+//----------------------------------
+
+void MvQFolderWidget::chFolderBack()
+{	
+	QString fullName=folderNavigation_->prev();
+	if(views_->currentBase()->changeFolder(fullName))
+	{
+		Folder* folder=views_->currentBase()->currentFolder();
+		if(!folder)
+  			return;
+		folderHistory_->add(fullName);
+		
+		emit pathChanged();	
+	}
+}
+
+void MvQFolderWidget::chFolderForward()
+{
+	QString fullName=folderNavigation_->next();
+	if(views_->currentBase()->changeFolder(fullName))
+	{  
+		Folder* folder=views_->currentBase()->currentFolder();
+		if(!folder)
+  			return;
+		
+		folderHistory_->add(fullName);
+		
+		emit pathChanged();
+	}
+}
+
+void MvQFolderWidget::chFolderParent()
+{
+	if(views_->currentBase()->changeFolderToParent())
+	{
+	  	Folder* folder=views_->currentBase()->currentFolder();
+		if(!folder)
+  			return;
+		
+		QString fullName=QString::fromStdString(folder->fullName());
+	
+		folderNavigation_->removeAfterCurrent();
+	  	folderNavigation_->add(fullName);
+		folderHistory_->add(fullName);
+		
+		emit pathChanged();
+	}
+}
+
+void MvQFolderWidget::slotFolderReplacedInView(Folder* folder)
+{
+  	if(!folder)
+  		return;
+	
+	QString fullName=QString::fromStdString(folder->fullName());
+	
+  	folderNavigation_->removeAfterCurrent();  	
+	folderNavigation_->add(fullName);
+	folderHistory_->add(fullName);
+	
+	emit pathChanged();
+}  
+
+void MvQFolderWidget::chFolderFromHistory(QString fullName)
+{
+	if(views_->currentBase()->changeFolder(fullName))
+	{  
+		Folder* folder=views_->currentBase()->currentFolder();
+		if(!folder)
+  			return;
+		
+		folderNavigation_->removeAfterCurrent();
+	  	folderNavigation_->add(fullName);
+		
+		emit pathChanged();
+	}
+	
+} 
+
+void MvQFolderWidget::chFolderFromBookmarks(QString fullName) 
+{
+	if(views_->currentBase()->changeFolder(fullName))
+	{ 
+		Folder* folder=views_->currentBase()->currentFolder();
+		if(!folder)
+  			return;
+		
+		folderNavigation_->removeAfterCurrent();
+	  	folderNavigation_->add(fullName);						
+		folderHistory_->add(fullName);
+		
+		emit pathChanged();
+		  
+	}
+}
+
+void MvQFolderWidget::chFolderFromBreadcrumbs(QString fullName) 
+{
+	if(views_->currentBase()->changeFolder(fullName))
+	{ 
+		folderNavigation_->removeAfterCurrent();
+	  	folderNavigation_->add(fullName);						
+		folderHistory_->add(fullName);
+		
+		emit pathChanged();
+	}
+}
+
+//When the folder object itself is changed (e.g. renamed)
+void MvQFolderWidget::slotFolderChanged(Folder* folder)
+{
+	slotFolderReplacedInView(folder);
+}		
+
+//------------------------
+// IconSize
+//------------------------
+
+int MvQFolderWidget::iconSize() const
+{
+  	return folderModel_->iconSize();
+}	
+
+void MvQFolderWidget::setIconSize(int iconSize)
+{
+	folderModel_->setIconSize(iconSize);	
+}
+
+bool MvQFolderWidget::iconSizeLock()
+{
+	Folder *f=folderModel_->folder();
+	return (f)?(f->iconSizeLock() > 0):false;
+}
+
+void MvQFolderWidget::setIconSizeLock(bool b)
+{
+ 	Folder *f=folderModel_->folder();
+	if(f) 
+	{
+	  	if(b) f->setIconSizeLock(folderModel_->iconSize());
+		else  f->setIconSizeLock(-1);
+	}	
+} 
+
+//------------------------
+// Snap to grid
+//------------------------
+
+void MvQFolderWidget::toGrid(MvQ::GridSortMode type)
+{	
+	views_->currentBase()->toGrid(type);
+}  
+
+void MvQFolderWidget::showLastCreated()
+{
+	views_->currentBase()->showLastCreated();
+}  
+
+//------------------------
+// Rescan
+//------------------------
+
+void MvQFolderWidget::reload()
+{
+	MvQFolderWatcher::reload(this);
+} 
+
+//------------------------
+// ViewMode
+//------------------------
+
+MvQ::FolderViewMode MvQFolderWidget::viewMode()
+{
+ 	return views_->currentMode();	
+  
+  	/*if(views_->currentBase()== iconView_)
+	  	return MvQ::IconViewMode;
+	
+	else if(views_->currentBase()== detailedView_)
+	  	return MvQ::DetailedViewMode;	
+	
+	return MvQ::NoViewMode;*/
+}
+
+void MvQFolderWidget::setViewMode(MvQ::FolderViewMode mode)
+{
+	views_->setCurrentMode(mode);
+}	
+  
+/*  if(views_->current() == mode)
+	 	return;
+	
+	MvQFolderViewBase* b=views_->currentBase();
+	QWidget* w=views_->currentWidget();
+	
+	MvQFolderViewBase* bNew=views_->currentBase();
+	QWidget* wNew=views_->currentWidget();
+	
+	//Set the mode
+	views_->setCurrentMode(mode);
+	
+	//Update the view 
+	wNew->setEnabled(true);
+	bMew->changeFolder(b->currentFolder());
+	
+	//Make it visible
+	centralLayout_->setCurrentWidget(wNew);
+	
+	//Disable the other views
+	b->setEnabled(false);
+
+	
+	
+	if(!views_->currentBase())
+	  	return;
+	
+	if(viewMode() == mode)
+	  	return;
+	
+  	if(mode == MvQ::IconViewMode)
+	{
+		//Update the view 
+		iconView_->setEnabled(true);
+		iconView_->changeFolder(views_->currentBase()->currentFolder());
+				
+		//Make it visible
+		centralLayout_->setCurrentIndex(0); 
+		views_->currentBase()=iconView_;
+		
+		//Disable the other views
+		detailedView_->setEnabled(false);
+	}
+	else if(mode  == MvQ::DetailedViewMode)
+	{
+	  	//Update the view 
+		detailedView_->setEnabled(true);
+		detailedView_->changeFolder(views_->currentBase()->currentFolder());
+		
+		//Make it visible
+		centralLayout_->setCurrentIndex(1);
+		views_->currentBase()=detailedView_;
+		
+		//Disable the other views
+		iconView_->setEnabled(false); 
+	}
+}*/
+
+QString MvQFolderWidget::viewModeId()
+{
+	return views_->currentModeId();
+  
+  	/*if(views_->currentBase()==iconView_)
+	  	return viewModeIds_[MvQ::IconViewMode];	
+	else if( views_->currentBase()==detailedView_)
+	  	return viewModeIds_[MvQ::DetailedViewMode];
+	else
+		return viewModeIds_[MvQ::NoViewMode];*/
+}
+
+bool MvQFolderWidget::viewModeGrid()
+{
+  	return true;
+}	
+
+void MvQFolderWidget::initIconPositions()
+{
+  	iconView_->slotSetPositions();	
+}
+
+//------------------------
+// Save icon positions
+//------------------------
+
+void MvQFolderWidget::saveFolderInfo()
+{
+	folderModel_->saveFolderInfo();
+}	
+
+//------------------------
+// Save/restore settings
+//------------------------
+
+void MvQFolderWidget::writeSettings(QSettings &settings)
+{
+	Folder *folder=currentFolder();
+	settings.setValue("path",(folder)?QString::fromStdString(folder->fullName()):"");
+	settings.setValue("viewMode",views_->currentModeId());
+	settings.setValue("iconSize",folderModel_->iconSize());	
+}	
+
+void MvQFolderWidget::readSettings(QSettings &settings)
+{	
+	QString viewMode=settings.value("viewMode").toString();
+	int iconSize=settings.value("iconSize").toInt();
+	
+	
+	
+	views_->setCurrentMode(viewMode);
+	
+	/*QMapIterator<MvQ::FolderViewMode,QString> it(viewModeIds_);
+	while (it.hasNext()) 
+	{
+     		it.next();
+		if(it.value() == viewMode)
+		{
+		  	setViewMode(it.key());
+			break;
+		}
+	}*/	
+
+	setIconSize(iconSize);
+	
+}		  
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderWidget.h b/src/Desktop/MvQFolderWidget.h
new file mode 100644
index 0000000..6d5e873
--- /dev/null
+++ b/src/Desktop/MvQFolderWidget.h
@@ -0,0 +1,133 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQFolderWidget_H
+#define MvQFolderWidget_H
+ 
+#include <QFileIconProvider>
+#include <QFileInfo>
+#include <QFileSystemModel>
+#include <QList>
+#include <QMap>
+#include <QMainWindow>
+#include <QModelIndex>
+#include <QList>
+#include <QSettings>
+#include <QSortFilterProxyModel>
+#include <QString>
+
+#include "IconObject.h"
+
+#include "MvQ.h"
+#include "FolderPresenter.h"
+
+class Folder;
+class MvQFolderModel;
+
+class IconClass;
+class IconObject;
+
+class QAction;
+class QActionGroup;
+class QCloseEvent;
+class QComboBox;
+class QLabel;
+class QListView;
+class QMenu;
+class QSplitter;
+class QStackedLayout;
+class QStackedWidget;
+class QTabWidget;
+class QTextBrowser;
+class QToolBox;
+class QTreeView;
+
+class MvQBookmarks;
+class MvQBookmarksWidget;
+class MvQDesktop;
+class MvQDrawerPanel;
+class MvQFolderFilterModel;
+class MvQFolderHistory;
+class MvQFolderNavigation;
+class MvQFolderViewBase;
+class MvQFolderViewHandler;
+class MvQFileSystemModel;
+class MvQDetailedFolderView;
+class MvQIconFolderView;
+class MvQKeyModel;
+class MvQNewIconWidget;
+class MvQPathWidget;
+class MvQSlider;
+
+using namespace std;	
+	
+
+class MvQFolderWidget : public QWidget, public FolderPresenter
+{
+    Q_OBJECT
+
+public:
+  	MvQFolderWidget(QString,MvQFolderHistory*,QWidget* parent=0);
+	~MvQFolderWidget();
+	
+	//From FolderPresenter
+	Folder* currentFolder();
+	
+	QString currentFolderName();	
+	void saveFolderInfo();
+	MvQFolderNavigation* folderNavigation() const {return folderNavigation_;} 
+	
+	int iconSize() const;
+	void setIconSize(int);	
+	bool iconSizeLock();
+	void setIconSizeLock(bool);
+	
+	void chFolderBack();
+	void chFolderForward();
+	void chFolderParent();
+	void chFolderFromHistory(QString);
+	void chFolderFromBookmarks(QString);
+	void chFolderFromBreadcrumbs(QString);
+	void toGrid(MvQ::GridSortMode);
+	void reload();
+	void showLastCreated(); 
+	
+	MvQ::FolderViewMode viewMode();
+	void setViewMode(MvQ::FolderViewMode);
+	QString viewModeId();
+	bool viewModeGrid();
+	void initIconPositions();
+	
+	void writeSettings(QSettings &);
+	void readSettings(QSettings &);
+	
+public slots:
+	void slotFolderReplacedInView(Folder*);
+	void slotFolderChanged(Folder*);
+
+signals:
+	void iconCommandRequested(QString,IconObjectH);
+	void desktopCommandRequested(QString,QPoint);
+	void itemInfoChanged(QString);
+	void pathChanged();
+
+private:
+	QModelIndex changeFolder(const QModelIndex&);
+	
+	QStackedLayout* centralLayout_;
+	MvQFolderViewHandler* views_;
+	MvQIconFolderView*       iconView_;	
+	MvQDetailedFolderView*   detailedView_;
+	MvQFolderHistory* folderHistory_;
+	MvQFolderNavigation* folderNavigation_;		
+	MvQFolderModel *folderModel_;
+
+};
+
+#endif
diff --git a/src/Desktop/MvQGeoHelp.cc b/src/Desktop/MvQGeoHelp.cc
new file mode 100644
index 0000000..aac8aa1
--- /dev/null
+++ b/src/Desktop/MvQGeoHelp.cc
@@ -0,0 +1,116 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQGeoHelp.h"
+
+#include "HelpFactory.h"
+#include "Parameter.h"
+#include "RequestPanel.h"
+
+MvQGeoHelp::MvQGeoHelp(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelHelp(owner,param)
+{
+}
+
+void MvQGeoHelp::start()
+{
+    	attach(); // Will be decremented by ReplyHandler, so make sure it stays alive.
+
+	Request info = param_.interfaceRequest();
+
+	Request request("EDIT_MAP");
+
+	// The parameter is in lower case because it
+	// will be used to build the icon filename
+	Cached input          = info("input_type");
+	request("INPUT_TYPE") = input.toUpper();
+	
+	request("INPUT_PARAM") = param_.name();
+
+        request("CUSTOM_WIDTH")  = 14.8;
+	request("CUSTOM_HEIGHT") = 10.5;
+	
+	
+	request = request + owner_.request();
+
+	observe();
+
+	callService("GeoToolManager", request);
+  
+}  
+
+void MvQGeoHelp::refresh(const vector<string>& values)
+{
+	
+}
+
+void MvQGeoHelp::set(Request& r) 
+{
+	r.merge(request_);
+	request_ = Request();
+}
+
+void MvQGeoHelp::reply(const Request& reply, int error)
+{
+	 if ( error == 0 ) reply.print();
+}
+
+void MvQGeoHelp::progress(const Request& progress)
+{
+	progress.print();
+	request_ = progress;
+	//owner_.changed(*this);
+}
+
+void MvQGeoHelp::message(const string& msg)
+{
+	 cout << "MvQGeoHelp::message" << msg << endl;
+}
+
+void MvQGeoHelp::message(const Request& msg)
+{
+	  string s = msg.getVerb();
+	  if (s != "INPUT") return;
+
+          request_ = owner_.request();
+	  request_.merge(msg);
+	  
+	 int cnt = msg.countValues(param_.name());
+	 vector<string> res;
+	 for(int i=0; i<cnt; ++i )
+	 {
+	   	const char *ch;
+		msg.getValue(ch,param_.name(),i);
+		res.push_back(string(ch));
+	 }
+	 owner_.set(param_.name(),res); 
+	 
+          //owner_.changed(*this);
+}
+
+QIcon MvQGeoHelp::dialogIcon()
+{  	
+	Request info = param_.interfaceRequest();
+	
+	if(const char* iconName=info("help_icon"))
+	{
+	  	return QIcon(QPixmap(":/desktop/" + QString(iconName) + ".svg"));
+	}
+	else if(const char* inpType=info("input_type"))
+	{
+	  	QString t(inpType);
+		t=t.toLower();  
+		if(t == "area") t="map";
+		return QIcon(QPixmap(":/desktop/help_" + t + ".svg"));
+	}
+	return QIcon();		
+}
+		
+		
+static HelpMaker<MvQGeoHelp> maker("help_input");
diff --git a/src/Desktop/MvQGeoHelp.h b/src/Desktop/MvQGeoHelp.h
new file mode 100644
index 0000000..0a75cc0
--- /dev/null
+++ b/src/Desktop/MvQGeoHelp.h
@@ -0,0 +1,50 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQGeoHelp_H
+#define MvQGeoHelp_H
+
+#include "MvQRequestPanelHelp.h"
+#include "Parameter.h"
+#include "ReplyObserver.h"
+#include "MessageObserver.h"
+
+#include <QIcon>
+#include <QMap>
+#include <QString>
+
+class MvQGeoHelp : public MvQRequestPanelHelp,
+                   public ReplyObserver, 
+                   public MessageObserver
+{
+public:
+	MvQGeoHelp(RequestPanel& owner,const Parameter& param);
+	~MvQGeoHelp() {};
+	
+	void start();
+	bool dialog() {return true;}
+	QIcon dialogIcon();
+	bool useLargeDialogIcon() {return true;}	
+	QWidget* widget() {return 0;}
+  
+protected:
+	virtual void refresh(const vector<string>&);
+  	virtual long flags() {return 9;}
+	virtual void set(Request&);
+	
+	void reply(const Request&, int);
+	void progress(const Request&);
+	void message(const string&);
+        void message(const Request& );
+	
+	Request request_;		
+};	
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQHelpBrowser.cc b/src/Desktop/MvQHelpBrowser.cc
new file mode 100644
index 0000000..9c71662
--- /dev/null
+++ b/src/Desktop/MvQHelpBrowser.cc
@@ -0,0 +1,339 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQHelpBrowser.h"
+#include "MvQWebViewSearchLine.h"
+#include "MvQSearchLinePanel.h"
+
+#include <QAction>
+#include <QApplication>
+#include <QCloseEvent>
+#include <QDebug>
+#include <QDesktopServices>
+#include <QDialogButtonBox>
+#include <QFileInfo>
+#include <QHBoxLayout>
+#include <QHelpContentWidget>
+#include <QHelpEngine>
+#include <QHelpIndexWidget>
+#include <QLabel>
+#include <QLineEdit>
+#include <QList>
+#include <QNetworkAccessManager>
+#include <QPushButton>
+#include <QSettings>
+#include <QSplitter>
+#include <QString>
+#include <QTabWidget>
+#include <QTextBrowser>
+#include <QUrl>
+#include <QVariant>
+#include <QVBoxLayout>
+#include <QWebView>
+#include <QWebPage>
+
+MvQHelpBrowser::MvQHelpBrowser(QWidget *parent) : MvQMainWindow(parent)
+{		
+	//setAttribute(Qt::WA_DeleteOnClose);
+	
+	setWindowTitle("Metview - Help");
+	
+	//Initial size
+	setInitialSize(1100,800);
+
+	//--------------------------------------
+	//Set the help engine
+	//--------------------------------------
+
+    //QFileInfo fileInfo("/tmp/cgjd/metview_qt_documentation/metview_confluence/metview_collection.qhc");
+	const QString share_dir = QString(getenv("METVIEW_DIR_SHARE"));
+    QFileInfo fileInfo(share_dir + QString("/etc/metview_collection.qhc"));
+	QHelpEngine* engine_= new QHelpEngine(fileInfo.absoluteFilePath(),this);
+	engine_->setupData();
+
+	//--------------------------------------
+	//Main Layout - splitter
+	//--------------------------------------
+
+	QWidget* w = new QWidget(this);
+	QVBoxLayout *mainLayout = new QVBoxLayout(w);
+	mainLayout->setSpacing(0); 
+	mainLayout->setContentsMargins(1,1,1,1);
+
+	setCentralWidget(w);
+
+	//Splitter
+	splitter_=new QSplitter(this);
+	mainLayout->addWidget(splitter_);
+
+	//--------------------------------------
+	//Left - tab Content
+	//--------------------------------------
+
+	
+	QTabWidget* tab=new QTabWidget(this);
+	splitter_->addWidget(tab);
+	
+	tab->addTab(engine_->contentWidget(),tr("Content"));
+
+	//--------------------------------------
+	//Left - tab Index
+	//--------------------------------------
+
+	lookFor_label_ = new QLabel(tr("Look for:"),this);
+	lookFor_edit_ = new QLineEdit(this);
+	lookFor_label_->setBuddy(lookFor_edit_);
+	connect(lookFor_edit_ ,SIGNAL(textChanged(const QString&)),	engine_->indexWidget(),SLOT(filterIndices(const QString&)));
+
+	QWidget* itab_w = new QWidget(this);
+	QVBoxLayout* ilayout = new QVBoxLayout(itab_w);
+	ilayout->addWidget(lookFor_label_);
+	ilayout->addWidget(lookFor_edit_);
+	ilayout->addWidget(engine_->indexWidget());
+
+	tab->addTab(itab_w,tr("Index"));
+
+	//--------------------------------------
+	//Right - content view widget
+	//--------------------------------------
+
+	//set web view text encoding
+	webView_ = new QWebView(this);
+	webView_->settings()->setDefaultTextEncoding("utf-8");
+
+	//set the documentation css style
+	//QUrl myCssFileURL= QUrl("file:///tmp/cgjd/metview_qt_documentation/metview_confluence/METV/styles/site.css");
+
+	//ini juanjo 03.09.2013
+	//QUrl myCssFileURL= QUrl(QString("file://")+share_dir+QString("/etc/help.css"));
+	//webView_->settings()->setUserStyleSheetUrl(myCssFileURL);
+	//end juanjo 03.09.2013
+
+
+	//use a request manager able to handle "qthelp" requests
+	QNetworkAccessManager *current_manager = webView_->page()->networkAccessManager();
+	MvHelpNetworkAccessManager* newManager = new MvHelpNetworkAccessManager(engine_, current_manager, this);
+	webView_->page()->setNetworkAccessManager(newManager);
+	webView_->page()->setForwardUnsupportedContent(false);
+
+	QWebPage *page_  = webView_->page();
+	page_->setLinkDelegationPolicy(QWebPage::DelegateExternalLinks);
+
+	connect(engine_->contentWidget(),SIGNAL(linkActivated(const QUrl&)),this,SLOT(setWebSource(const QUrl&)));
+	connect(engine_->indexWidget(),SIGNAL(linkActivated(const QUrl&,const QString &)),this,SLOT(setWebSource(const QUrl&)));
+	connect(webView_,SIGNAL(linkClicked(const QUrl&)),this,SLOT(setWebSource(const QUrl&)));
+
+	//--------------------------------------
+	//Right - content view layout
+	//--------------------------------------
+
+	QWidget* rw=new QWidget(this);
+	QVBoxLayout *rLayout = new QVBoxLayout(rw);
+	rLayout->setSpacing(0);
+	rLayout->addWidget(webView_);
+	rLayout->setStretchFactor(webView_,1);
+
+	//--------------------------
+	// Right - Find widget
+	//--------------------------
+
+	search_= new MvQWebViewSearchLine(webView_,tr("&Find:"));
+	searchPanel_ = new MvQSearchLinePanel();
+	searchPanel_->addSearchLine(search_,webView_);
+	searchPanel_->setHidden(true);
+	rLayout->addWidget(searchPanel_);
+	splitter_->addWidget(rw);
+
+	//--------------------------------------
+	// Setup actions for toolbars and menus
+	//--------------------------------------
+
+	setupNavigateActions();
+	setupHelpActions();
+	setupSearchActions();
+
+	setupMenus(menuItems_);
+
+	//-------------------------
+	// Settings
+	//-------------------------
+
+	readSettings();
+
+	//-------------------------
+	// Load documentation home page
+	//-------------------------
+
+	docHome();
+}
+
+MvQHelpBrowser::~MvQHelpBrowser()
+{	
+
+	writeSettings();
+}
+
+void MvQHelpBrowser::closeEvent(QCloseEvent* event)
+{
+	//emit aboutToClose(this);
+	close();
+	event->accept();
+}
+
+void MvQHelpBrowser::setupSearchActions()
+{
+	//Find
+	QAction * actionFind_=MvQMainWindow::createAction(MvQMainWindow::FindAction,this);
+	connect(actionFind_,SIGNAL(triggered(bool)),searchPanel_,SLOT(setHidden(bool)));
+
+	//Find Next
+	QAction *actionFindNext_=MvQMainWindow::createAction(MvQMainWindow::FindNextAction,this);
+	connect(actionFindNext_,SIGNAL(triggered(bool)),searchPanel_,SLOT(slotFindNext(bool)));
+
+	//Find Previous
+	QAction *actionFindPrev_=MvQMainWindow::createAction(MvQMainWindow::FindPreviousAction,this);
+	connect(actionFindPrev_,SIGNAL(triggered(bool)),searchPanel_,SLOT(slotFindPrev(bool)));
+
+	MvQMainWindow::MenuType menuType=MvQMainWindow::EditMenu;
+
+	menuItems_[menuType].push_back(new MvQMenuItem(actionFind_,MvQMenuItem::MenuTarget));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionFindNext_,MvQMenuItem::MenuTarget));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionFindPrev_,MvQMenuItem::MenuTarget));
+}
+
+void MvQHelpBrowser::setupNavigateActions()
+{
+ 	//Back
+	actionBack_ = new QAction(this);
+	actionBack_->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowLeft));
+    actionBack_->setToolTip(tr("Back"));
+	actionBack_->setText(tr("Back"));
+    actionBack_->setShortcut(tr("Alt+Left"));
+
+	connect(actionBack_,SIGNAL(triggered()),webView_, SLOT(back()));
+
+	//Forward
+	actionForward_ = new QAction(this);
+	actionForward_->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowRight));
+	actionForward_->setToolTip(tr("Forward"));
+	actionForward_->setText(tr("Forward"));
+    actionForward_->setShortcut(tr("Alt+Right"));
+
+	connect(actionForward_,SIGNAL(triggered()),webView_,SLOT(forward()));
+
+	//Home
+	actionHome_= new QAction(this);
+	actionHome_->setIcon(QPixmap(QString::fromUtf8(":/desktop/home.svg")));
+    actionHome_->setToolTip(tr("Metview Documentation home"));
+	actionHome_->setText(tr("Mv Doc home"));
+	actionHome_->setIconText(tr("home"));
+    actionHome_->setShortcut(tr("Alt+Home"));
+
+	connect(actionHome_,SIGNAL(triggered()),this,SLOT(docHome()));
+
+	QAction *sep=new QAction(this);
+	sep->setSeparator(true);
+
+	MvQMainWindow::MenuType menuType=MvQMainWindow::NavigateMenu;
+
+	menuItems_[menuType].push_back(new MvQMenuItem(actionBack_));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionForward_));
+	menuItems_[menuType].push_back(new MvQMenuItem(sep,MvQMenuItem::MenuTarget));
+	menuItems_[menuType].push_back(new MvQMenuItem(actionHome_));
+
+}
+
+void MvQHelpBrowser::setupHelpActions()
+{
+	// About
+	QAction *actionAbout = new QAction(this);
+	actionAbout->setObjectName(QString::fromUtf8("actionAbout"));
+	QIcon icon;
+	icon.addPixmap(QPixmap(QString::fromUtf8(":/window/metview_logo")), QIcon::Normal, QIcon::Off);
+	actionAbout->setIcon(icon);
+	actionAbout->setText(tr("&About HelpBrowser"));
+
+	connect(actionAbout, SIGNAL(triggered()), this, SLOT(slotShowAboutBox()));
+
+	MvQMainWindow::MenuType menuType=MvQMainWindow::HelpMenu;
+
+	menuItems_[menuType].push_back(new MvQMenuItem(actionAbout,MvQMenuItem::MenuTarget));
+}
+
+void MvQHelpBrowser::docHome()
+{
+	webView_->load(QUrl("qthelp://int.wcmwf.metview.userguide/doc/METV/index.html"));
+}
+
+void MvQHelpBrowser:: setWebSource(const QUrl &url)
+{
+	//qDebug() << "setWebSource url=" << url.toString();
+	if (url.scheme() == "qthelp")
+		webView_->load(url);
+	else
+		QDesktopServices::openUrl(url);
+	//for(int i=0; i < webView_->history()->count(); i++) qDebug() << "item" << i << webView_->history()->itemAt(i).url();
+}
+
+void MvQHelpBrowser::writeSettings()
+{
+	QSettings settings("ECMWF","MV4-HelpBrowser");
+
+	settings.clear();
+
+	settings.beginGroup("mainWindow");
+	settings.setValue("geometry",saveGeometry());
+	settings.setValue("splitter",splitter_->saveState());
+	settings.endGroup();
+}
+
+void MvQHelpBrowser::readSettings()
+{
+	QSettings settings("ECMWF","MV4-HelpBrowser");
+
+	settings.beginGroup("mainWindow");
+	restoreGeometry(settings.value("geometry").toByteArray());
+	splitter_->restoreState(settings.value("splitter").toByteArray());
+	settings.endGroup();
+}
+
+///////////////////////////////////////
+//#include "MvHelpNetworkAccessManager.h"
+#include <QByteArray>
+#include <QHelpEngine>
+#include <QIODevice>
+#include <QNetworkAccessManager>
+#include <QNetworkProxy>
+#include <QPointer>
+#include <QTimer>
+#include <QNetworkReply>
+
+MvHelpNetworkReply::MvHelpNetworkReply(const QUrl& url, QHelpEngineCore* help_engine): QNetworkReply(help_engine)
+{
+    Q_ASSERT(help_engine);
+
+    d_help_engine = help_engine;
+    setUrl(url);
+    QTimer::singleShot(0, this, SLOT(process()));
+}
+
+void MvHelpNetworkReply::process()
+{
+    if (d_help_engine) {
+        QByteArray rawData = d_help_engine->fileData(url());
+        d_buffer.setData(rawData);
+        d_buffer.open(QIODevice::ReadOnly);
+
+        open(QIODevice::ReadOnly|QIODevice::Unbuffered);
+        setHeader(QNetworkRequest::ContentLengthHeader, QVariant(rawData.size()));
+        setHeader(QNetworkRequest::ContentTypeHeader, "text/html");
+        emit readyRead();
+        emit finished();
+    }
+}
diff --git a/src/Desktop/MvQHelpBrowser.h b/src/Desktop/MvQHelpBrowser.h
new file mode 100644
index 0000000..5b74ceb
--- /dev/null
+++ b/src/Desktop/MvQHelpBrowser.h
@@ -0,0 +1,143 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQHelpBrowser_H
+#define MvQHelpBrowser_H
+
+#include "MvQMainWindow.h"
+
+
+#include <QWebView>
+
+class QAction;
+class QCloseEvent;
+class QHelpEngine;
+class QSplitter;
+class QWebView;
+class MvQWebViewSearchLine;
+class MvQSearchLinePanel;
+class QLabel;
+class QLineEdit;
+
+using namespace std;
+
+class MvQHelpBrowser: public MvQMainWindow {
+	Q_OBJECT
+
+public:
+	MvQHelpBrowser(QWidget* parent = 0);
+	~MvQHelpBrowser();
+
+public slots:
+	void setWebSource(const QUrl&);
+	void docHome();
+
+protected:
+	void closeEvent(QCloseEvent*);
+	void setupNavigateActions();
+	void setupHelpActions();
+	void setupSearchActions();
+	void writeSettings();
+	void readSettings();
+
+	QSplitter* splitter_;
+	QSplitter* r_splitter_;
+	QHelpEngine* engine_;
+	QWebView* webView_;
+	MvQWebViewSearchLine* search_;
+	MvQSearchLinePanel* searchPanel_;
+
+	MvQMainWindow::MenuItemMap menuItems_;
+
+	QAction* actionBack_;
+	QAction* actionForward_;
+	QAction* actionHome_;
+
+	QLabel* lookFor_label_;
+	QLineEdit* lookFor_edit_;
+	QSplitter* i_splitter_;
+};
+
+//////////////////////////////////////////////////////////////////////////
+
+#include <QBuffer>
+#include <QHelpEngine>
+#include <QHelpIndexWidget>
+#include <QHelpSearchEngine>
+#include <QHelpSearchQueryWidget>
+#include <QHelpSearchResultWidget>
+#include <QNetworkAccessManager>
+#include <QNetworkProxy>
+#include <QNetworkReply>
+#include <QPointer>
+
+class QHelpEngineCore;
+class QUrl;
+
+class MvHelpNetworkReply: public QNetworkReply {
+	Q_OBJECT
+public:
+	MvHelpNetworkReply(const QUrl& url, QHelpEngineCore* helpEngine);
+
+	virtual void abort() {
+	}
+	virtual qint64 bytesAvailable() const {
+		return d_buffer.bytesAvailable();
+	}
+	virtual bool isSequential() const {
+		return d_buffer.isSequential();
+	}
+
+private slots:
+	void process();
+
+protected:
+	virtual qint64 readData(char *data, qint64 maxSize) {
+		return d_buffer.read(data, maxSize);
+	}
+	QPointer<QHelpEngineCore> d_help_engine;
+	QBuffer d_buffer;
+
+private:
+	Q_DISABLE_COPY (MvHelpNetworkReply)
+};
+
+class MvHelpNetworkAccessManager: public QNetworkAccessManager {
+public:
+	MvHelpNetworkAccessManager(QHelpEngineCore* helpEngine,
+			QNetworkAccessManager *manager, QObject *parentObject) :
+			QNetworkAccessManager(parentObject), d_help_engine(helpEngine) {
+		Q_ASSERT(manager);
+		Q_ASSERT(helpEngine);
+
+		setCache(manager->cache());
+		setProxy(manager->proxy());
+		setProxyFactory(manager->proxyFactory());
+		setCookieJar(manager->cookieJar());
+	}
+
+protected:
+	virtual QNetworkReply *createRequest(Operation operation,
+			const QNetworkRequest &request, QIODevice *device) {
+		if (request.url().scheme() == "qthelp" && operation == GetOperation) {
+			QNetworkReply *obj = new MvHelpNetworkReply(request.url(),
+					d_help_engine);
+			return obj;
+		} else
+			return QNetworkAccessManager::createRequest(operation, request,
+					device);
+	}
+
+	QPointer<QHelpEngineCore> d_help_engine;
+
+private:
+	Q_DISABLE_COPY (MvHelpNetworkAccessManager)
+};
+
+#endif
diff --git a/src/Desktop/MvQIconFolderView.cc b/src/Desktop/MvQIconFolderView.cc
new file mode 100644
index 0000000..9dc0093
--- /dev/null
+++ b/src/Desktop/MvQIconFolderView.cc
@@ -0,0 +1,349 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQIconFolderView.h"
+
+#include "ConfigLoader.h"
+#include "IconObject.h"
+#include "IconInfo.h"
+#include "Folder.h"
+
+#include "MvQ.h"
+#include "MvQContextMenu.h"
+#include "MvQFolderViewDelegate.h"
+#include "MvQFolderItemProperty.h"
+#include "MvQFolderModel.h"
+
+#include <QDropEvent>
+#include <QScrollBar>
+#include <QTimer>
+
+MvQIconFolderView::MvQIconFolderView(MvQFolderModel *folderModel,QWidget *parent) : 
+       MvQIconFolderViewBase(folderModel,parent),
+       prevScrollPos_(0,0),
+       paintEnabled_(true)
+{
+  	setContextMenuPolicy(Qt::CustomContextMenu);
+	setViewMode(QListView::IconMode);
+	setFlow(QListView::LeftToRight);
+	setMovement(QListView::Free);
+	setResizeMode(QListView::Fixed);
+	
+	setAllowMoveAction(true);
+        setEnterFolders(true);
+	
+	//We need to call it here because 
+	//slotUpdateObjectPositions has not been called so far!
+	computePositions();	
+		
+	connect(folderModel_,SIGNAL(iconSizeChanged()),
+		this,SLOT(slotIconSizeChanged()));	
+		
+	connect(folderModel_,SIGNAL(updateObjectPositions()),
+		this,SLOT(slotUpdateObjectPositions()));
+	
+	connect(folderModel_,SIGNAL(objectArrived(const QModelIndex&)),	
+		this,SLOT(slotObjectArrived(const QModelIndex&)));	
+	
+	connect(folderModel_,SIGNAL(objectRenamed(const QModelIndex&,QString)),	
+		this,SLOT(slotObjectRenamed(const QModelIndex& ,QString)));
+				
+}
+
+MvQIconFolderView::~MvQIconFolderView()
+{	
+}
+
+MvQContextItemSet* MvQIconFolderView::cmSet()
+{
+	static MvQContextItemSet cmItems("IconFolderView");  
+  	return &cmItems;
+}
+
+void MvQIconFolderView::performDrop(QDropEvent* event,IconObject* dragObj,QList<IconObject*> objLst,QPoint pos,bool fromSameView)
+{		
+	//The object position - ignoring the scaling 
+	//QPoint objPos=referencePosition(QString::fromStdString(dragObj->name()),pos);	
+	QPoint objPos=itemProp_->referencePosition(QString::fromStdString(dragObj->name()),pos);              	
+	QPoint deltaPos=objPos-QPoint(dragObj->info().x(),dragObj->info().y());
+		
+	qDebug() << "DROP" << fromSameView;
+		
+	//Drop from the same view/model --> copy
+	if(fromSameView)
+	{
+		foreach(IconObject* obj, objLst)
+		{
+			qDebug() << "DROP check";
+			
+			if(!obj || !isAccepted(obj))
+				  continue;
+			
+			qDebug() << "DROP accept";
+			
+			QString name=QString::fromStdString(obj->name());					
+			QPoint oriPos(obj->info().x(),obj->info().y());
+			QPoint newPos=oriPos+deltaPos;
+			obj->position(newPos.x(),newPos.y());
+			QModelIndex index=filterModel_->mapFromSource(folderModel_->indexFromObject(obj));	
+			setPositionForIndex(itemProp_->position(name,newPos),index); 	
+		}
+	}	
+			
+	//Drop from another view/model  --> copy or move
+	else
+	{  			  
+		foreach(IconObject* obj, objLst)
+		{					  
+			//Cannot move/copy edited icons into another folder!!!
+			if(!obj->editor() && isAccepted(obj))
+			{
+				QPoint oriPos(obj->info().x(),obj->info().y());
+				QPoint newPos=oriPos+deltaPos;
+				  
+				if(event->proposedAction() == Qt::CopyAction)
+				{					  
+					 obj->clone(folderModel_->folder(),false,newPos.x(),newPos.y());
+				}	
+				
+				else if(event->proposedAction() == Qt::MoveAction)
+				{  
+					obj->position(newPos.x(),newPos.y());				
+					folderModel_->folder()->adopt(obj);
+				}
+			}	
+		}
+				
+	}		
+}			
+			
+void MvQIconFolderView::reset()
+{
+  	//Disable painting
+	paintEnabled_=false;
+	
+	//Save current scrollbar pos
+  	prevScrollPos_=QPoint(horizontalScrollBar()->value(),verticalScrollBar()->value()); 	
+	
+	QListView::reset();
+	
+	//Change the item positions in a delayed mode.
+	doDelayedPositioning();	
+}
+
+
+void MvQIconFolderView::paintEvent(QPaintEvent *e)
+{
+  	if(paintEnabled_)
+		QListView::paintEvent(e);
+}  
+
+void  MvQIconFolderView::slotObjectArrived(const QModelIndex&)
+{
+  	showLastCreated();
+}  
+
+//===============================================
+// Icon positions
+//===============================================
+
+void MvQIconFolderView::toGrid(MvQ::GridSortMode mode)
+{			
+  	computeGrid(mode);
+	setPositions();	
+}  
+
+void MvQIconFolderView::slotIconSizeChanged()
+{ 
+	MvQIconFolderView::reset();
+}
+
+void MvQIconFolderView::doDelayedPositioning()
+{
+	QTimer::singleShot(0,this,SLOT(slotSetPositions()));
+}
+
+void MvQIconFolderView::setPositions()
+{
+  	for(int i=0; i < filterModel_->rowCount(); i++)
+	{ 
+	  	QModelIndex index=filterModel_->index(i,0,QModelIndex());	  		
+		QString name=filterModel_->data(index,Qt::DisplayRole).toString();
+		QPoint refPos=filterModel_->data(index,MvQFolderModel::PositionRole).toPoint();
+	  	setPositionForIndex(itemProp_->position(name,refPos),index);		
+	}  	
+}
+
+void MvQIconFolderView::slotUpdateObjectPositions()
+{
+	computePositions();
+}  
+  
+void MvQIconFolderView::slotSetPositions()
+{
+	paintEnabled_=true;
+	
+  	setPositions();
+	
+	executeDelayedItemsLayout(); 
+	
+	//Restore scrollbar postions
+	horizontalScrollBar()->setValue(prevScrollPos_.x());
+	verticalScrollBar()->setValue(prevScrollPos_.y());
+}
+
+void MvQIconFolderView::slotObjectRenamed(const QModelIndex& sourceIndex,QString oriName)
+{
+	QModelIndex index=filterModel_->mapFromSource(sourceIndex);
+  
+	//Find and set adjusted reference position
+  	QString name=filterModel_->data(index,Qt::DisplayRole).toString();				
+	QPoint pos=filterModel_->data(index,MvQFolderModel::PositionRole).toPoint();	
+	QPoint newPos=itemProp_->adjsutReferencePosition(name,oriName,pos);	
+	filterModel_->setData(index,newPos,MvQFolderModel::PositionRole);
+  	
+	setPositionForIndex(itemProp_->position(name,newPos),index);
+	dataChanged(index,index);
+}  
+
+void MvQIconFolderView::computeGrid(MvQ::GridSortMode sortMode)
+{	 
+  	if(!folderModel_->folder())
+	  	return;
+	
+	//Find the grid cell size	
+	int h=0;	
+	int maxWidth=itemProp_->iconSize();
+	
+  	for(int i=0; i < filterModel_->rowCount(); i++)
+	{	  	
+		QModelIndex idx=filterModel_->index(i,0);		
+		QSize s=visualRect(idx).size();
+		if(s.width() > maxWidth) maxWidth=s.width();
+		if(i==0) h=s.height();
+	}
+	
+	int dx=maxWidth+5;
+	int colNum=static_cast<int>(round(static_cast<float>(viewport()->size().width())/static_cast<float>(dx)));
+	if(colNum==0) colNum=1;	
+	int dy=h+12*itemProp_->scaling();
+	
+	int x=5;
+	int y=5;
+		
+	std::multimap<QString,QModelIndex> items;
+	
+	if(sortMode == MvQ::GridSortByName)
+	{
+		for(int i=0; i < filterModel_->rowCount(); i++)
+		{
+		  	QModelIndex idx=filterModel_->index(i,0);		  		  
+		 	items.insert(std::pair<QString,QModelIndex>(filterModel_->data(idx,Qt::DisplayRole).toString(),filterModel_->index(i,0)));
+		}
+	}			
+	else if(sortMode == MvQ::GridSortByType)
+	{
+	  	for(int i=0; i < filterModel_->rowCount(); i++)
+		{
+		  	QModelIndex idx=filterModel_->index(i,1);		  		  
+		 	items.insert(std::pair<QString,QModelIndex>(filterModel_->data(idx,Qt::DisplayRole).toString(),filterModel_->index(i,0)));
+		}
+	}	
+	else if(sortMode == MvQ::GridSortBySize)
+	{	
+		std::multimap<qint64,QModelIndex> sizeItems;		
+		for(int i=0; i < filterModel_->rowCount(); i++)
+		{
+		  	QModelIndex idx=filterModel_->index(i,2);
+		  	sizeItems.insert(std::pair<qint64,QModelIndex>(filterModel_->data(idx,Qt::UserRole).toLongLong(),filterModel_->index(i,0)));
+		}
+		int cntS=0;
+		for(std::multimap<qint64,QModelIndex>::const_iterator it=sizeItems.begin(); it != sizeItems.end(); it++, cntS++)
+		{
+			items.insert(std::pair<QString,QModelIndex>(QString::number(cntS),it->second));			
+		}	
+	}
+	
+	int cnt=0;
+	for(std::multimap<QString,QModelIndex>::const_iterator it=items.begin(); it != items.end(); it++, cnt++)
+	{
+		int w=visualRect(it->second).width();			
+		QPoint pos(x+(dx-w)/2,y);
+			
+		QString name=filterModel_->data(it->second,Qt::DisplayRole).toString();				
+		filterModel_->setData(it->second,itemProp_->referencePosition(name,pos),MvQFolderModel::PositionRole);
+			
+		x+=dx;
+		if(cnt >0 && cnt%colNum == colNum-1)
+		{  
+			x=5;
+			y+=dy;		
+		}
+	}
+} 
+
+void MvQIconFolderView::computePositions()
+{
+	if(!folderModel_->folder())
+	  	return;
+	
+	QList<QModelIndex> needPos;
+		
+	int h=0;	
+	int maxWidth=itemProp_->iconSize();
+	int maxX=0;
+	int maxY=0;
+	
+  	for(int i=0; i < filterModel_->rowCount(); i++)
+	{	  	
+		QModelIndex idx=filterModel_->index(i,0);
+		QPointF pos=filterModel_->data(idx,MvQFolderModel::PositionRole).toPoint();
+		if(!pos.isNull())
+		{
+		  	if(pos.x() > maxX) maxX=pos.x();
+			if(pos.y() > maxY) maxY=pos.y();
+		}
+		else
+		{
+		  	needPos << idx;			
+			QSize s=visualRect(idx).size();			
+			if(s.width() > maxWidth) maxWidth=s.width();
+			if(h == 0) h=s.height();
+		}
+	}
+	
+	int dx=maxWidth+5;
+	
+	qDebug() << viewport()->size();
+	int colNum=(viewport()->size().width()>200)?(viewport()->size().width()/dx):((maxX+maxWidth)/dx);
+	if(colNum==0) colNum=1;	
+	int dy=h+12*itemProp_->scaling();
+	
+	int x=5;
+	int y=maxY+((maxY==0)?10:dy);
+	
+	for(int i=0; i < needPos.count(); i++)
+	{
+		int w=visualRect(needPos[i]).width();			
+		QPoint pos(x+(dx-w)/2,y);
+			
+		QString name=filterModel_->data(needPos[i],Qt::DisplayRole).toString();				
+		filterModel_->setData(needPos[i],itemProp_->referencePosition(name,pos),MvQFolderModel::PositionRole);
+			
+		x+=dx;
+		if(i >0 && i%colNum == colNum-1)
+		{  
+			x=5;
+			y+=dy;		
+		}
+	}
+}
+
+
+
diff --git a/src/Desktop/MvQIconFolderView.h b/src/Desktop/MvQIconFolderView.h
new file mode 100644
index 0000000..8ffea93
--- /dev/null
+++ b/src/Desktop/MvQIconFolderView.h
@@ -0,0 +1,50 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQIconFolderView_H
+#define MvQIconFolderView_H
+
+#include "MvQIconFolderViewBase.h"
+
+class MvQIconFolderView :  public MvQIconFolderViewBase
+{
+
+  Q_OBJECT
+  
+public:	
+  	MvQIconFolderView(MvQFolderModel *,QWidget *parent=0);
+  	~MvQIconFolderView();
+	
+	void toGrid(MvQ::GridSortMode);
+	static void load(request* r);
+
+public slots:	
+	void slotSetPositions();
+	void slotIconSizeChanged();
+	void slotUpdateObjectPositions();
+	void slotObjectArrived(const QModelIndex&);
+	void slotObjectRenamed(const QModelIndex&,QString);
+	void reset();
+	
+protected:
+	void setPositions();
+	void doDelayedPositioning();
+	void paintEvent(QPaintEvent *);
+	
+	void performDrop(QDropEvent*,IconObject*,QList<IconObject*>,QPoint,bool);	
+	void computeGrid(MvQ::GridSortMode mode=MvQ::GridSortByName);
+	void computePositions();
+	
+	MvQContextItemSet* cmSet();
+	
+	QPoint prevScrollPos_;
+	bool paintEnabled_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQIconFolderViewBase.cc b/src/Desktop/MvQIconFolderViewBase.cc
new file mode 100644
index 0000000..e6d1a75
--- /dev/null
+++ b/src/Desktop/MvQIconFolderViewBase.cc
@@ -0,0 +1,924 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 <QApplication>
+#include <QDataStream>
+#include <QDropEvent>
+#include <QDebug>
+#include <QMouseEvent>
+#include <QMenu>
+#include <QPainter>
+#include <QScrollBar>
+#include <QShortcut>
+#include <QTimer>
+
+#include "MvQIconFolderViewBase.h"
+
+#include "IconClass.h"
+#include "IconInfo.h"
+#include "IconObject.h"
+#include "Folder.h"
+
+#include "MvQFolderViewDelegate.h"
+#include "MvQContextMenu.h"
+#include "MvQIconMimeData.h"
+#include "MvQIconProvider.h"
+
+MvQIconFolderViewBase::MvQIconFolderViewBase(MvQFolderModel *folderModel,QWidget *parent) :  
+    QListView(parent), 
+    MvQFolderViewBase(folderModel),
+    allowMoveAction_(true),
+    enterFolders_(true),
+    canDrag_(false)
+{	
+	//setProperty("mvStyle","IconFolderView");
+	
+	setContextMenuPolicy(Qt::CustomContextMenu);
+
+	//Drag and drop
+	setDragEnabled(true);
+ 	setAcceptDrops(true);
+ 	setDropIndicatorShown(true);
+	setDragDropMode(QAbstractItemView::DragDrop);
+	
+	//Delegate
+	delegate_=new MvQIconDelegate(this);
+	setItemDelegate(delegate_);
+	
+	connect(delegate_,SIGNAL(repaintIt(const QModelIndex&)),
+		this,SLOT(update(const QModelIndex&)));
+
+		
+	//We need to call it here because 
+	//slotUpdateObjectPositions has not been called so far!
+	//computePositions();
+	
+	//Set the model. This will call reset on the view. Reset assigns the correct 
+	//positions to items.
+	setModel(filterModel_);				
+	
+	setMouseTracking(true);
+	
+	setEditTriggers(QAbstractItemView::NoEditTriggers);
+	setSelectionMode(QAbstractItemView::ExtendedSelection);
+	
+	//Context menu 
+    	connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
+                this, SLOT(slotContextMenu(const QPoint &)));
+				
+	//Selection in the view
+	connect(this,SIGNAL(doubleClicked(const QModelIndex&)),
+		this,SLOT(slotDoubleClickItem(const QModelIndex)));
+		
+	connect(this,SIGNAL(entered(const QModelIndex&)),
+		this,SLOT(slotEntered(const QModelIndex&)));
+				
+	//From model	
+	//connect(folderModel_,SIGNAL(setPositions()),
+	//	this,SLOT(slotSetPositions()));
+	
+	/*connect(folderModel_,SIGNAL(iconSizeChanged()),
+		this,SLOT(slotIconSizeChanged()));	
+		
+	connect(folderModel_,SIGNAL(updateObjectPositions()),
+		this,SLOT(slotUpdateObjectPositions()));
+		
+	connect(folderModel_,SIGNAL(objectRenamed(const QModelIndex&,QString)),	
+		this,SLOT(slotObjectRenamed(const QModelIndex& ,QString)));*/	
+		
+		
+	//We need to call it here because 
+	//slotUpdateObjectPositions has not been called so far!
+	//computePositions();
+	
+	//We let the delegate to paint the items
+	delegate_->setEnablePaint(true);
+	
+	//We need to tell the view the new positions
+	//setPositions();
+}
+
+
+MvQIconFolderViewBase::~MvQIconFolderViewBase()
+{
+	//delete filterModel_;
+}
+
+void  MvQIconFolderViewBase::slotSelectItem(const QModelIndex& /*index*/)
+{
+	/*if(changeFolder(index,FilterModelIndex))
+	{
+	  	changeFolder(index,FilterModelIndex);
+		emit currentFolderChanged(currentFolder());
+	}*/
+}	
+
+void  MvQIconFolderViewBase::slotDoubleClickItem(const QModelIndex& index)
+{	 	
+	handleDoubleClick(index); 
+}
+
+void  MvQIconFolderViewBase::slotEntered(const QModelIndex& index)
+{  	
+	emit itemEntered(itemInfo(index,FilterModelIndex));
+}	
+
+void MvQIconFolderViewBase::setupShortCut()
+{
+  	if(shortCutInit_)
+	  	return;
+	else
+	  	shortCutInit_=true;
+		
+	if(MvQContextItemSet *cms=cmSet())
+	{
+		foreach(MvQContextItem *cm,cms->icon())
+		{
+	  		QShortcut *sc=cm->makeShortCut(this);
+		
+	 	 	if(sc)
+			{
+		  		connect(sc,SIGNAL(activated()),
+					this,SLOT(slotIconShortCut()));
+			}
+		}	
+	}
+}
+
+void MvQIconFolderViewBase::slotIconShortCut()
+{
+	QShortcut *sc=static_cast<QShortcut*>(QObject::sender());
+  	if(sc)
+	{	QModelIndexList lst=selectedIndexes();
+		if(lst.count() > 0)
+		  	handleIconShortCut(sc,lst.at(0));
+	}	
+}
+		 
+void MvQIconFolderViewBase::slotContextMenu(const QPoint& position)
+{
+	QModelIndexList lst=selectedIndexes();
+	QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+	handleContextMenu(indexAt(position),lst,mapToGlobal(position),position+scrollOffset,this);
+	
+  	/*if(lst.count() == 1)
+	{ 
+		QModelIndex index=indexAt(position);	
+		QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+	
+		handleContextMenu(index,mapToGlobal(position),position+scrollOffset,this);
+	}
+	else if(lst.count() > 1)
+	{
+	  	handleContextMenu(lst,mapToGlobal(position),position+scrollOffset,this);
+	} */ 	
+}
+
+void MvQIconFolderViewBase::folderChanged()
+{
+  	emit currentFolderChanged(currentFolder());	
+}
+
+void MvQIconFolderViewBase::iconCommand(QString name,IconObjectH obj)
+{
+	emit iconCommandRequested(name,obj);
+}
+
+void MvQIconFolderViewBase::desktopCommand(QString name,QPoint pos)
+{	     
+  	emit desktopCommandRequested(name,pos);  
+}
+
+void MvQIconFolderViewBase::keyPressEvent(QKeyEvent * event)
+{
+	setupShortCut();
+  	QAbstractItemView::keyPressEvent(event);
+}	
+
+//=================================================
+//
+//  Drag and drop. We need this cutom implementation 
+//  because the solution offered by the model-view
+//  framework was not satisfactory.
+//
+//=================================================
+
+//===========================
+// Drag
+//===========================
+
+void MvQIconFolderViewBase::mousePressEvent(QMouseEvent *event)
+{
+	canDrag_=false;	
+	
+	if(event->button() == Qt::LeftButton || event->button() == Qt::MidButton)
+	{
+	  	startPos_=event->pos();
+		
+		QModelIndex index=indexAt(event->pos());
+		if(index.isValid())
+		{			 				  		  		  		  
+		  	QModelIndexList lst=selectedIndexes();
+		
+			if(lst.count() <= 1 || !lst.contains(index))
+			{
+	  			setCurrentIndex(index);
+	  			QRect rect=visualRect(index);
+				if(event->pos().y() > rect.top()+getIconSize())
+				{
+					edit(index); 
+					return;
+				}
+			}
+			
+			canDrag_=true;			
+			
+			//This prevents rubberband selection
+			setState(NoState);
+			//return;
+		}			 	
+	}
+	
+	QListView::mousePressEvent(event);
+}
+
+void MvQIconFolderViewBase::mouseMoveEvent(QMouseEvent *event)
+{
+  
+  	if(canDrag_ && event->buttons() & (Qt::LeftButton | Qt::MidButton))
+	{
+		//qDebug() << "should start drag" << event->pos() << startPos_;
+		
+	  	int distance = (event->pos() - startPos_).manhattanLength();
+		if(distance >= QApplication::startDragDistance())
+		{
+			canDrag_=false;
+			setState(DraggingState);
+			
+			QModelIndexList lst=selectedIndexes();
+			
+			///qDebug() << "selected" << lst.count();
+		  
+		  	if(allowMoveAction_)
+			{  		  
+		  		if(event->buttons() & Qt::LeftButton)		  
+		  			performDrag(Qt::MoveAction,event->pos());
+				else if(event->buttons() & Qt::MidButton)
+			  		performDrag(Qt::CopyAction,event->pos());
+			}
+			else
+			{
+			  	performDrag(Qt::CopyAction,event->pos());
+			}
+			
+			setState(NoState);
+		}	
+		
+		return;
+	}
+	
+	QListView::mouseMoveEvent(event);
+}
+
+void MvQIconFolderViewBase::performDrag(Qt::DropAction dropAction,QPoint pos)
+{
+	QModelIndexList lst=selectedIndexes();
+	QModelIndex viewIndex=indexAt(pos);
+	QModelIndex index=filterModel_->mapToSource(viewIndex);
+	
+	qDebug() << lst;
+	qDebug() << index << filterModel_->mapFromSource(index);
+	
+	if(lst.contains(viewIndex) && index.isValid())
+	{
+		IconObject* dragObj=folderModel_->objectFromIndex(index);
+		if(dragObj)
+		{		
+		  	
+		  	//qDebug() << "drag" << dragObj->name().c_str(); 
+		  
+		  	//No drag for edited icons
+			//if(obj->editor())
+			//	return;  
+			
+			//Create drag object
+			QDrag *drag = new QDrag(this);
+			
+			//List of object to drag
+			QList<IconObject*> objLst;
+			foreach(QModelIndex idx,lst)
+			{
+			  	objLst << folderModel_->objectFromIndex(idx);
+			}		
+			
+			//Create and set the drag pixmap and set hotspot			
+			QPoint hotSpotInRect;			
+			if(lst.count() > 1)
+			{ 
+				//Find bounding box for selected visrects
+				QRect bbox;
+				foreach(QModelIndex idx,lst)
+				{
+					bbox=bbox.united(visualRect(idx));
+				}
+				
+				//Render the drag pixmap
+				QPixmap pix(bbox.size());
+				pix.fill(Qt::transparent);
+				QPainter painter(&pix);
+				
+				for(int i=0; i < objLst.count(); i++)
+				{
+			 		QRect vr=visualRect(lst[i]);
+			  		painter.drawPixmap(vr.topLeft()-bbox.topLeft(),
+						   MvQIconProvider::pixmap(objLst.at(i)->iconClass(),getIconSize()));			
+				}
+				
+				drag->setPixmap(pix);
+				
+				//Find the hotspot
+				QRect rect=visualRect(viewIndex);
+				hotSpotInRect=pos-rect.topLeft();
+				QPoint hotSpot(pos.x()-rect.center().x()+getIconSize()/2,pos.y()-rect.top());
+				hotSpot=rect.topLeft()-bbox.topLeft()+hotSpot;
+				drag->setHotSpot(hotSpot);
+			}
+			else
+			{  			
+				drag->setPixmap(MvQIconProvider::pixmap(dragObj->iconClass(),getIconSize()));
+				
+				QRect rect=visualRect(viewIndex);
+				hotSpotInRect=pos-rect.topLeft();
+				QPoint hotSpot(pos.x()-rect.center().x()+getIconSize()/2,pos.y()-rect.top());
+				drag->setHotSpot(hotSpot);
+			}
+			
+	
+			//Create and set drag mime data
+			MvQIconMimeData *mimeData= new MvQIconMimeData(folderModel_,
+								       dragObj,hotSpotInRect,
+								       objLst);
+			
+								       
+			//Need a solution!!!!!!!!!!!!!!!!!1					       
+			mimeData->setFromHelper(!allowMoveAction_);
+			
+			drag->setMimeData(mimeData);
+			
+		
+			//qDebug() << "drag" << rect << pos;
+			
+			//qDebug() << "drag" << mimeData->path() << mimeData->className();
+			
+			if(drag->exec(dropAction)  == dropAction)
+			{
+			}								  
+		}
+	}	
+}	
+
+//===========================
+// Drop
+//===========================
+
+void MvQIconFolderViewBase::dragEnterEvent(QDragEnterEvent *event)
+{
+	//qDebug() << event->mimeData()->formats();
+	//qDebug() << event->mimeData()->text();
+	//qDebug() << event->proposedAction();
+	
+	if(event->source() &&
+	   (event->proposedAction() == Qt::CopyAction ||
+	    event->proposedAction() == Qt::MoveAction))
+	{
+		//event->setDropAction(Qt::CopyAction);
+		event->accept();
+	}
+	else  
+		event->ignore();
+}
+
+void MvQIconFolderViewBase::dragMoveEvent(QDragMoveEvent *event)
+{
+	if(event->source() &&
+	   (event->proposedAction() == Qt::CopyAction ||
+	    event->proposedAction() == Qt::MoveAction))
+	{
+		event->accept();
+	}
+	else
+		event->ignore();
+}
+
+void MvQIconFolderViewBase::dropEvent(QDropEvent *event)
+{
+	//qDebug() << "dropEvent" << folderModel_->fullName();
+	
+	if(folderModel_->folder()->locked())
+	{
+	  	event->ignore();
+		return;
+	}
+	
+	if(!event->source())
+	{
+	  	event->ignore();
+		return;
+	}	
+	
+	if(event->proposedAction() != Qt::CopyAction &&
+	   event->proposedAction() != Qt::MoveAction)
+	{
+	  	event->ignore();
+		return;
+	}	
+	
+	QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+	QPoint pos=event->pos()+scrollOffset;
+	
+	//--------------------------------------
+	// Drag and drop from another folder
+	//--------------------------------------
+	
+	if(event->mimeData()->hasFormat("metview/icon"))
+	{	
+		const MvQIconMimeData* mimeData=qobject_cast<const MvQIconMimeData*>(event->mimeData());
+				
+		if(!mimeData)
+		{
+			event->ignore();
+			return;
+		}	
+	
+		IconObject* dragObj=mimeData->dragObject();
+		QList<IconObject*> objLst=mimeData->objects();
+		MvQFolderModel *model=mimeData->model();
+				
+		if(model && dragObj)
+		{			
+			QPoint hotSpot=mimeData->hotSpotInVisRect();		  	
+			pos-=QPoint(hotSpot.x(),hotSpot.y());		
+			if(pos.x() < 1) pos.setX(1);
+			
+			performDrop(event,dragObj,objLst,pos,(model == folderModel_));
+			
+			/*			
+			//The object position - ignoring the scaling 
+			QPoint objPos=referencePosition(QString::fromStdString(dragObj->name()),pos);
+			QPoint deltaPos=objPos-QPoint(dragObj->info().x(),dragObj->info().y());
+						
+			//Drop from the same view/model --> copy
+			if(model == folderModel_)
+			{
+				if(helper_)
+				{
+					toGrid(MvQ::GridSortByName);
+				}  
+				else
+				{
+					foreach(IconObject* obj, objLst)
+					{
+			  			if(!obj || !isAccepted(obj))
+				  			continue;
+				
+						QModelIndex index=folderModel_->indexFromObject(obj);				
+						QPoint oriPos(obj->info().x(),obj->info().y());
+						QPoint newPos=oriPos+deltaPos;
+						obj->position(newPos.x(),newPos.y());						
+						setPositionForIndex(newPos,filterModel_->mapFromSource(index)); 	
+					}
+				}	
+			}
+			//Drop from another view/model  --> copy or move
+			else
+			{  			  
+			  	foreach(IconObject* obj, objLst)
+				{					  
+					//Cannot move/copy edited icons into another folder!!!
+				  	if(!obj->editor() && isAccepted(obj))
+					{
+						QPoint oriPos(obj->info().x(),obj->info().y());
+						QPoint newPos=oriPos+deltaPos;
+				  
+				  		if(event->proposedAction() == Qt::CopyAction || allowMoveAction_== false)
+						{					  
+					  		obj->clone(folderModel_->folder(),false,newPos.x(),newPos.y());
+						}	
+				
+						else if(event->proposedAction() == Qt::MoveAction)
+						{  
+							obj->position(newPos.x(),newPos.y());				
+							folderModel_->folder()->adopt(obj);
+						}
+					}	
+				}
+				
+				if(helper_)
+				{
+					toGrid(MvQ::GridSortByName);
+				}	
+			}
+			*/
+				
+			event->accept();
+			return;
+		}
+	}
+	
+	event->ignore();
+}
+
+/*void MvQIconFolderViewBase::reset()
+{
+	//
+	//if(delegate_)
+	//  	delegate_->setEnablePaint(false);
+	
+  	int x=horizontalScrollBar()->value();
+	int y=verticalScrollBar()->value(); 	
+	
+	QListView::reset();
+	
+	horizontalScrollBar()->setValue(x);
+	verticalScrollBar()->setValue(y);
+
+	executeDelayedItemsLayout(); 
+	
+	//Change item positions. This will enable the painting in the delegte.
+	//Currently it causes a flickering!!!!
+	//doDelayedPositioning();
+	
+}*/	
+
+/*void MvQIconFolderViewBase::toGrid(MvQ::GridSortMode mode)
+{			
+  	//computeGrid(mode);
+	setPositions();	
+} */ 
+
+//----------------------------------------
+// Helper
+//----------------------------------------
+
+/*void MvQIconFolderViewBase::setHelper(bool b)
+{
+	helper_=b;
+	if(helper_)
+	{
+	 	slotUpdateObjectPositions();
+	 	slotSetPositions();
+	}	
+}
+*/
+/*
+//===============================================
+// Icon positions
+//===============================================
+
+bool MvQIconFolderViewBase::isIconDistanceScaled()
+{
+	return (getIconSize() > 32)?true:false;
+}
+
+void MvQIconFolderViewBase::slotIconSizeChanged()
+{ 
+  	if(getIconSize() > 32)
+	{
+		iconDistanceScale_=static_cast<float>(getIconSize())/32.;
+	}
+	else
+	{
+	  	iconDistanceScale_=1.;
+	}
+	
+	QListView::setIconSize(QSize(getIconSize(),getIconSize()));
+	
+	//Reset the view
+	reset();
+	
+	//Change item positions
+	//setPositions();
+	
+	
+	
+}
+
+void MvQIconFolderViewBase::doDelayedPositioning()
+{
+	QTimer::singleShot(0,this,SLOT(slotSetPositions()));
+}
+
+void MvQIconFolderViewBase::setPositions()
+{
+  	for(int i=0; i < filterModel_->rowCount(); i++)
+	{ 
+	  	QModelIndex index=filterModel_->index(i,0,QModelIndex());	  
+		QModelIndex sourceIndex=filterModel_->mapToSource(index);
+	  	QPoint pos=scaledPosition(sourceIndex);
+	  	setPositionForIndex(pos,index);
+	}  
+}
+
+void MvQIconFolderViewBase::slotUpdateObjectPositions()
+{
+	if(helper_)
+	{
+		toGrid(MvQ::GridSortByName);
+	}
+	else
+	{  
+		computePositions();
+	} 
+}  
+  
+void MvQIconFolderViewBase::slotSetPositions()
+{
+	if(delegate_)
+	  	delegate_->setEnablePaint(true);
+	
+	//int x=horizontalScrollBar()->value();
+	//int y=verticalScrollBar()->value();
+  	setPositions();
+	//horizontalScrollBar()->setValue(x);
+	//verticalScrollBar()->setValue(y);
+}
+
+void MvQIconFolderViewBase::slotObjectRenamed(const QModelIndex& sourceIndex,QString oriName)
+{
+	adjustRenamedObject(sourceIndex,oriName);	
+	QPoint pos=scaledPosition(sourceIndex);
+	QModelIndex index=filterModel_->mapFromSource(sourceIndex);
+	setPositionForIndex(pos,index);
+	dataChanged(index,index);	
+}  
+
+void MvQIconFolderViewBase::computeGrid(MvQ::GridSortMode sortMode)
+{	 
+  	if(!folderModel_->folder())
+	  	return;
+	
+  	QList<IconObjectH> needPos;
+  	int maxY=0;
+	int maxWidth=refIconSize_;
+	QFont font;
+	QFontMetrics fm(font);
+	
+  	const map<string,IconObjectH>& kids=folderModel_->folder()->kids();	
+	for(map<string,IconObjectH>::const_iterator it=kids.begin(); it != kids.end(); it++)
+	{	
+		if(it->second->visible())
+		{
+		  	int w=fm.width(QString::fromStdString(it->second->name()));
+			if(w > maxWidth)
+		  		maxWidth=w;
+		}					
+	}
+	
+	int dx=maxWidth;
+	int colNum=viewport()->size().width()/dx;
+	if(colNum==0) colNum=1;	
+	int dy=refIconSize_+fm.height()+5+20;	
+	int x=5;
+	int y=maxY+((maxY==0)?10:dy);
+	int i=0;
+	
+	if(sortMode == MvQ::GridSortByName)
+	{	
+		for(map<string,IconObjectH>::const_iterator it=kids.begin(); it != kids.end(); it++)
+		{
+			if(it->second->visible())
+			{
+		  		int w=fm.width(QString::fromStdString(it->second->name()));
+				if(refIconSize_ > w) w=refIconSize_;
+	  			it->second->info().position(x+(dx-w)/2,y);
+				
+				//qDebug() << QString::fromStdString(it->second->name()) <<
+				//          w << x+(dx-w)/2 << x+dx/2;
+				
+				x+=dx;
+				if(i >0 && i%colNum == colNum-1)
+				{  
+					x=5;
+					y+=dy;
+				}
+				i++;
+			}	
+		}
+	}	
+	if(sortMode == MvQ::GridSortByType)
+	{
+		multimap<string,IconObjectH> items;
+		   	
+		for(map<string,IconObjectH>::const_iterator it=kids.begin(); it != kids.end(); it++)
+		{	
+			if(it->second->visible())
+				items.insert(std::pair<string,IconObjectH>(it->second->className(),it->second));
+		}	
+			
+		for(multimap<string,IconObjectH>::const_iterator it=items.begin(); it != items.end(); it++)
+		{
+			int w=fm.width(QString::fromStdString(it->second->name()));
+	  		it->second->info().position(x+dx/2-w/2,y);
+			x+=dx;
+			if(i >0 && i%colNum == colNum-1)
+			{  
+				x=5;
+				y+=dy;
+			}
+			i++;
+		}
+	}
+	
+	else if(sortMode == MvQ::GridSortBySize)
+	{  
+		multimap<off_t,IconObjectH> items;
+		
+		for(map<string,IconObjectH>::const_iterator it=kids.begin(); it != kids.end(); it++)
+		{	
+			  if(it->second->visible())
+			   	items.insert(std::pair<off_t,IconObjectH>(it->second->path().sizeInBytes(),it->second));
+		}
+	
+		for(multimap<off_t,IconObjectH>::const_iterator it=items.begin(); it != items.end(); it++)
+		{
+			int w=fm.width(QString::fromStdString(it->second->name()));
+	  		it->second->info().position(x+dx/2-w/2,y);
+			x+=dx;
+			if(i >0 && i%colNum == colNum-1)
+			{  
+				x=5;
+				y+=dy;
+			}
+			i++;
+		}	
+	}
+} 
+
+void MvQIconFolderViewBase::computePositions()
+{
+	if(!folderModel_->folder())
+	  	return;
+
+	//Compute positions using the reference icon size
+  
+  	QList<IconObjectH> needPos;
+  	int maxY=0;
+	int maxWidth=refIconSize_;
+	QFont font;
+	QFontMetrics fm(font);
+	
+  	const map<string,IconObjectH>& kids=folderModel_->folder()->kids();
+	for(map<string,IconObjectH>::const_iterator it=kids.begin(); it != kids.end(); it++)
+	{
+		if(it->second->visible())
+		{  
+			if(it->second->info().x() !=0 && it->second->info().y() !=0)
+			{
+				if(it->second->info().y() > maxY)
+			  		maxY=it->second->info().y();
+			}
+			else
+				needPos << it->second;
+		
+			int w=fm.width(QString::fromStdString(it->second->name()));
+			if(w > maxWidth)
+		  		maxWidth=w;
+		}
+	}	
+	
+	int dx=maxWidth;
+	int dy=refIconSize_+fm.height()+5+20;	
+	int x=5;
+	int y=maxY+((maxY==0)?10:dy);
+	for(int i=0; i < needPos.count(); i++)
+	{
+		int w=fm.width(QString::fromStdString(needPos[i]->name()));
+	  	needPos[i]->info().position(x+dx/2-w/2,y);
+		x+=dx;
+		if(i >0 && i%5 == 0)
+		{  
+			x=5;
+			y+=dy;
+		}	
+	}
+}	
+
+QPoint MvQIconFolderViewBase::scaledPosition(const QModelIndex &index)
+{	
+	IconObject* obj=folderModel_->objectFromIndex(index);
+	
+	if(!obj || !obj->visible())
+	  	return QPoint(0,0);
+	
+	int x=obj->info().x();
+	int y=obj->info().y();
+	
+	if(isIconDistanceScaled())
+	{
+		QFont font;
+		QFontMetrics fm(font);
+	
+		//Text size
+		int textW=fm.width(QString::fromStdString(obj->name()));
+		int textH=fm.height();
+		
+		//Compute centre using the refsize
+		int refW=(textW < refIconSize_)?refIconSize_:textW;
+		int refH= refIconSize_ + textH + 5;
+		QPoint cpos(x+refW/2,y+refH/2);
+		
+		//Scaled size		
+		int scaledW=(textW < getIconSize())?getIconSize():textW;
+		int scaledH=getIconSize() + textH + 5;
+		
+		//int deltaW=(scaledW-refW)/2;
+		//int deltaH=(scaledH-refH)/2;
+		
+		//Apply scaling
+		cpos*=iconDistanceScale_;
+		
+		cpos+=QPoint(-scaledW/2,-scaledH/2);
+		
+		return cpos;
+	}
+	
+	return QPoint(x,y);
+}
+
+QPoint  MvQIconFolderViewBase::referencePosition(QString name,const QPoint& pos)
+{
+  	int x=pos.x();
+	int y=pos.y();
+	
+  	if(isIconDistanceScaled())  
+	{  
+		QFont font;
+		QFontMetrics fm(font);
+	
+		//Text size
+		int textW=fm.width(name);
+		int textH=fm.height();
+		
+		//Scaled size		
+		int scaledW=(textW < getIconSize())?getIconSize():textW;
+		int scaledH=getIconSize()+ textH + 5;
+		
+		//Compute centre using the scaled size
+		QPoint cpos(x+scaledW/2,y+scaledH/2);
+		
+		//Apply inverse scaling
+		cpos/=iconDistanceScale_;
+				
+		//Compute position using the refsize
+		int refW=(textW < refIconSize_)?refIconSize_:textW;
+		int refH= refIconSize_ + textH + 5;
+	
+		cpos-=QPoint(-refW/2,-refH/2);
+		
+		return cpos;
+	}
+	
+	return QPoint(x,y);	  
+}
+
+void MvQIconFolderViewBase::adjustRenamedObject(const QModelIndex& index,QString oriName)
+{
+  	IconObject* obj=folderModel_->objectFromIndex(index);
+	
+	if(!obj)
+  		return;
+	
+	qDebug() << "rename adjustment" << index << obj->name().c_str();
+	
+	int x=obj->info().x();
+	int y=obj->info().y();
+	
+	QFont font;
+	QFontMetrics fm(font);
+	
+	int w=fm.width(QString::fromStdString(obj->name()));
+	int wOri=fm.width(oriName);
+	
+	if(w < refIconSize_)
+		w=refIconSize_;
+	
+	qDebug() << "   " << x << x-(w-wOri)/2.;
+	
+	x-=(w-wOri)/2.;
+	
+	obj->info().position(x,y);
+}
+
+*/
+
+void MvQIconFolderViewBase::blink(const QModelIndex& index)
+{
+  	scrollTo(index);
+  	delegate_->blink(index);
+}	
\ No newline at end of file
diff --git a/src/Desktop/MvQIconFolderViewBase.h b/src/Desktop/MvQIconFolderViewBase.h
new file mode 100644
index 0000000..2984a27
--- /dev/null
+++ b/src/Desktop/MvQIconFolderViewBase.h
@@ -0,0 +1,80 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQIconFolderViewBase_H
+#define MvQIconFolderViewBase_H
+
+#include <QListView>
+
+#include "MvQ.h"
+#include "MvQFolderViewBase.h"
+#include "MvQFolderModel.h"
+
+class MvQIconDelegate;
+class MvQFileSystemModel;
+class MvQCurrentFolderFilterModel;
+
+class Folder;
+class IconObject;
+
+class MvQIconFolderViewBase :  public QListView, public MvQFolderViewBase
+{
+Q_OBJECT
+
+public:	
+  	MvQIconFolderViewBase(MvQFolderModel *,QWidget *parent=0);
+  	virtual ~MvQIconFolderViewBase();
+	
+public slots:
+	void slotIconShortCut();
+	void slotContextMenu(const QPoint &);
+	void slotSelectItem(const QModelIndex&);
+	void slotDoubleClickItem(const QModelIndex&);
+	void slotEntered(const QModelIndex&);
+	//void reset();
+
+signals:	
+	void currentFolderChanged(Folder*);  
+	void folderDoubleCliked(QString); 
+	void itemEntered(QString);
+	void iconCommandRequested(QString,IconObjectH);
+	void desktopCommandRequested(QString,QPoint);
+	
+protected:
+	void setAllowMoveAction(bool b) {allowMoveAction_=b;}
+	void setEnterFolders(bool b) {enterFolders_=b;}
+	
+	void setupShortCut();
+	void setPositions() {};
+	void blink(const QModelIndex&);
+	
+	void folderChanged();	
+	virtual void iconCommand(QString,IconObjectH);
+	virtual void desktopCommand(QString,QPoint);
+	
+	void keyPressEvent(QKeyEvent*);
+	void mousePressEvent(QMouseEvent*);
+	void mouseMoveEvent(QMouseEvent*);
+	void performDrag(Qt::DropAction,QPoint);
+	void dragEnterEvent(QDragEnterEvent*);
+	void dragMoveEvent(QDragMoveEvent*);
+ 	void dropEvent(QDropEvent*); 
+	virtual void performDrop(QDropEvent*,IconObject*,QList<IconObject*>,QPoint,bool)=0;
+	
+	MvQIconDelegate* delegate_;
+
+private:
+	bool allowMoveAction_;
+	bool enterFolders_;
+	QPoint startPos_;
+	bool canDrag_;	
+	
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQIconHelp.cc b/src/Desktop/MvQIconHelp.cc
new file mode 100644
index 0000000..2fa4510
--- /dev/null
+++ b/src/Desktop/MvQIconHelp.cc
@@ -0,0 +1,101 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQIconHelp.h"
+
+#include <QLabel>
+#include <QVBoxLayout>
+
+#include "Folder.h"
+#include "IconClass.h"
+#include "IconFactory.h"
+#include "HelpFactory.h"
+#include "RequestPanel.h"
+
+#include "MvQFolderModel.h"
+#include "MvQIconHelpView.h"
+
+MvQIconHelp::MvQIconHelp(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelHelp(owner,param)
+{
+	multiple_=param.multiple();
+	
+	//Create model
+	model_=new MvQFolderModel(parentWidget_);
+
+	Folder *f=Folder::folder("templates",
+                   owner.iconClass().defaultName(),
+		   param.beautifiedName());
+	
+	model_->setFolder(f);
+	model_->setAcceptedClasses(param.interfaceRequest().get("class"));
+		
+	//If the folder is empty try to create an icon from the help_definition
+	fill(param);
+	
+	//Create view
+	view_=new MvQIconHelpView(model_,parentWidget_);
+	//view_->setHelper(true);
+	
+	view_->setFixedHeight(80);
+	view_->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
+	
+	//Title
+	QLabel *titleLabel=new QLabel(tr("Helper icons for: ") + QString::fromStdString(param.beautifiedName()),parentWidget_);	
+
+	//Layout
+	QVBoxLayout *layout=new QVBoxLayout(parentWidget_);
+	layout->setSpacing(3); 
+	layout->setContentsMargins(1,1,1,1);
+	
+	holderW_= new QWidget(parentWidget_);
+	holderW_->setLayout(layout);
+	layout->addWidget(titleLabel);
+	layout->addWidget(view_);
+		
+	//QFont font;
+	//QFontMetrics fm(font);
+	//holderW_->setMinimumHeight(2*(fm.size(Qt::TextExpandTabs,"A").height()+32+10+5+10));
+	//holderW_->setMaximumHeight(2*(fm.size(Qt::TextExpandTabs,"A").height()+32+10+5+10));
+	
+	//view_->toGrid();
+}
+
+QWidget* MvQIconHelp::widget() 
+{
+	return holderW_;
+}
+
+void MvQIconHelp::refresh(const vector<string>& /*values*/)
+{
+		
+}
+
+void MvQIconHelp::fill(const Parameter& param)
+{
+	Folder *f=model_->folder();
+	
+	if(!f) return;
+	
+  	if(f->numOfIconKids()==0)
+	{
+		Request     i = param.interfaceRequest();
+		MvRequest   p = i("help_definition");
+		const char* n = i("help_name");
+	
+		//Create a helper icon from the request
+		if(p) 
+		{
+			IconObject* o = IconFactory::create(model_->folder(),p);
+			if(n) o->rename(n);
+		}
+	}	
+}
+
+static HelpMaker<MvQIconHelp> maker("help_data");
diff --git a/src/Desktop/MvQIconHelp.h b/src/Desktop/MvQIconHelp.h
new file mode 100644
index 0000000..6a3ccaa
--- /dev/null
+++ b/src/Desktop/MvQIconHelp.h
@@ -0,0 +1,50 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQIconHelp_H
+#define MvQIconHelp_H
+
+#include "MvQRequestPanelHelp.h"
+#include "Parameter.h"
+
+#include <QMap>
+#include <QString>
+
+class RequestPanel;
+class MvQFolderModel;
+class MvQIconHelpView;
+
+class MvQIconHelp : public MvQRequestPanelHelp
+{
+Q_OBJECT  
+
+public:
+	MvQIconHelp(RequestPanel& owner,const Parameter& param);
+	~MvQIconHelp() {};
+	
+	void start() {};
+	bool dialog() {return false;}	
+	QWidget* widget();
+
+public slots:
+  
+protected:
+	virtual void refresh(const vector<string>&);
+  	virtual long flags() {return 9;}
+	virtual void set(Request&) {}
+	void fill(const Parameter&);
+	
+	MvQFolderModel* model_;
+	MvQIconHelpView* view_;
+	QWidget* holderW_;
+	bool multiple_;
+};	
+
+#endif
diff --git a/src/Desktop/MvQIconHelpView.cc b/src/Desktop/MvQIconHelpView.cc
new file mode 100644
index 0000000..0d141d2
--- /dev/null
+++ b/src/Desktop/MvQIconHelpView.cc
@@ -0,0 +1,32 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQIconHelpView.h"
+
+#include "IconObject.h"
+#include "Folder.h"
+
+#include "MvQContextMenu.h"	
+#include "MvQFolderModel.h"
+
+MvQIconHelpView::MvQIconHelpView(MvQFolderModel *folderModel,QWidget *parent) : 
+       MvQIconStripView(folderModel,parent)
+{
+}
+
+MvQIconHelpView::~MvQIconHelpView()
+{	
+	//delete filterModel_;
+}
+
+MvQContextItemSet* MvQIconHelpView::cmSet()
+{
+	static MvQContextItemSet cmItems("IconHelpView");  
+  	return &cmItems;
+}
\ No newline at end of file
diff --git a/src/Desktop/MvQIconHelpView.h b/src/Desktop/MvQIconHelpView.h
new file mode 100644
index 0000000..86fc963
--- /dev/null
+++ b/src/Desktop/MvQIconHelpView.h
@@ -0,0 +1,27 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQIconHelpView_H
+#define MvQIconHelpView_H
+
+#include "MvQIconStripView.h"
+
+class MvQContextItemSet;
+
+class MvQIconHelpView : public MvQIconStripView
+{
+public:
+	MvQIconHelpView(MvQFolderModel *,QWidget *parent=0);
+  	~MvQIconHelpView();
+
+protected:
+	MvQContextItemSet* cmSet();
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQIconHolder.cc b/src/Desktop/MvQIconHolder.cc
new file mode 100644
index 0000000..3dfe664
--- /dev/null
+++ b/src/Desktop/MvQIconHolder.cc
@@ -0,0 +1,363 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQIconHolder.h"
+
+#include <QDebug>
+#include <QDropEvent>
+#include <QLabel>
+#include <QVBoxLayout>
+
+#include "MvQContextMenu.h"
+#include "MvQFolderModel.h"
+#include "MvQIconMimeData.h"
+#include "MvQIconProvider.h"
+
+#include "Command.h"
+#include "IconClass.h"
+#include "IconFactory.h"
+#include "IconObject.h"
+#include "Parameter.h"
+#include "RequestPanelItem.h"
+
+//====================================
+//
+//	MvQIconHolderModel
+//
+//====================================
+
+MvQIconHolderModel::MvQIconHolderModel(const vector<string>& classes,QObject *parent) : 
+     QAbstractItemModel(parent),
+     classes_(classes)
+{
+  
+}  
+
+void MvQIconHolderModel::setIcons(const vector<IconObjectH>& objects)
+{	
+	beginResetModel();
+	
+	//Cleaning
+	foreach(IconObjectH actObj, icons_)
+	{	
+	  	if(actObj &&  actObj->isEmbedded() &&
+		   std::find(objects.begin(),objects.end(),actObj) == objects.end())
+		{
+	  		actObj->destroy();
+		}
+	}
+	
+	icons_.clear();
+	
+	for(unsigned int i=0; i < objects.size(); i++)
+	{
+	  	icons_ << objects.at(i);	
+	}
+			
+	endResetModel();	
+}
+
+void MvQIconHolderModel::clearIcons(const vector<IconObjectH>& objects)
+{	
+	beginResetModel();
+	
+	//Cleaning
+	foreach(IconObjectH actObj, icons_)
+	{	
+	  	if(actObj &&  actObj->isEmbedded() &&
+		   (std::find(objects.begin(),objects.end(),actObj) == objects.end()))
+		{
+	  		actObj->destroy();
+		}
+	}
+	
+	icons_.clear();
+				
+	endResetModel();	
+}
+
+int MvQIconHolderModel::columnCount( const QModelIndex& parent) const
+{
+	 return parent.isValid() ? 0 : 1;
+}
+
+
+int MvQIconHolderModel::rowCount( const QModelIndex& index) const
+{
+	if (!index.isValid() )
+	{
+	  	return  icons_.count();
+	}
+	else
+	{
+		return  0;
+	}
+}
+
+QVariant MvQIconHolderModel::data( const QModelIndex& index, int role ) const
+{
+  	if (role != Qt::DisplayRole && role != Qt::DecorationRole  && 
+	    role != Qt::ForegroundRole &&  role != Qt::UserRole  &&  role != Qt::FontRole )
+	{  	
+		return QVariant();
+	}
+	
+  	if(!index.isValid())
+		return QVariant();
+	
+	IconObject *obj=0;
+	if(index.row() >=0 && index.row() < icons_.count())
+		obj=icons_[index.row()];  
+	
+	if(!obj)
+	  	return QVariant();
+	
+	switch(role)
+	{
+		case Qt::DecorationRole:  			
+		{
+		  	return MvQIconProvider::pixmap(obj,32,true);
+		}		
+		case Qt::DisplayRole:
+	  		return QString::fromStdString(obj->name());
+		default:
+		  	break;
+	}
+	
+	return QVariant();	  
+}
+
+QModelIndex MvQIconHolderModel::index( int row, int column, const QModelIndex & /*parent */) const
+{
+	return createIndex(row,column,0);
+}
+
+
+QModelIndex MvQIconHolderModel::parent( const QModelIndex & /*index*/ ) const
+{
+	return QModelIndex();
+}
+
+IconObject* MvQIconHolderModel::iconObject(const QModelIndex& index)
+{
+	IconObject *obj=0;
+	if(index.row() >=0 && index.row() < icons_.count())
+		obj=icons_[index.row()];  
+	
+	return obj;
+}  
+
+void MvQIconHolderModel::add(IconObjectH obj)
+{	
+	if(icons_.contains(obj))
+	  	return;
+
+	beginResetModel();
+	icons_ << obj;
+	endResetModel();
+}
+		
+void MvQIconHolderModel::remove(IconObjectH obj)
+{
+	if(!obj) return;
+	beginResetModel();	
+	icons_.removeAll(obj);
+	if(obj->isEmbedded())
+		obj->toWastebasket();
+	endResetModel();		
+}
+
+bool MvQIconHolderModel::accept(IconObjectH obj)
+{	
+	const IconClass& ic = obj->iconClass();
+	for ( vector<string>::iterator it =  classes_.begin(); it != classes_.end(); ++it)
+	{	
+		if( ic.canBecome(IconClass::find(*it)) )   
+			return true;			
+	}	
+	return classes_.size() == 0;	
+}
+
+void MvQIconHolderModel::iconObjects(vector<IconObjectH>& vals)
+{
+	for(int i=0; i < icons_.count(); i++)
+		vals.push_back(icons_[i]);
+}
+
+//====================================
+//
+//	MvQIconHolder
+//
+//====================================
+
+MvQIconHolderView::MvQIconHolderView(MvQIconHolderModel* model,RequestPanelItem *owner,QWidget *parent) : 
+  QListView(parent),
+  model_(model),
+  owner_(owner)
+{
+  	setViewMode(QListView::IconMode);
+	setFlow(QListView::LeftToRight);
+	setMovement(QListView::Snap);
+	setWrapping(false);
+	setResizeMode(QListView::Adjust);
+	setSpacing(5);
+	
+	QFont font;
+	QFontMetrics fm(font);
+	setMaximumHeight(fm.size(Qt::TextExpandTabs,"A").height()+32+10+5+10);
+	
+	setContextMenuPolicy(Qt::CustomContextMenu);
+	
+	//Context menu 
+    	connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
+                this, SLOT(slotContextMenu(const QPoint &)));
+				
+	setMouseTracking(true);
+	setAcceptDrops(true);
+	setDragEnabled(true);
+	setDropIndicatorShown(true);
+	setDragDropMode(QAbstractItemView::DragDrop);
+	//setDragDropMode(QAbstractItemView::DropOnly);
+	
+	setModel(model);
+}	
+
+MvQIconHolderView::~MvQIconHolderView()
+{
+	qDebug() << "deleted ---> MvQIconHolderView";
+}
+
+
+void MvQIconHolderView::slotContextMenu(const QPoint &pos)
+{
+  	static MvQContextItemSet cmItems("IconHolderView");
+  	
+  	QModelIndex index=indexAt(pos);
+    	if(index.isValid()) 
+	{
+		IconObjectH obj=model_->iconObject(index);
+	  	QString selected=MvQContextMenu::instance()->exec(cmItems.icon(),obj,mapToGlobal(pos),this);
+		if(!selected.isEmpty())
+		{  	
+			command(selected,obj); 	
+		}
+	}	
+}
+
+void MvQIconHolderView::command(QString name,IconObjectH obj)
+{
+	//Other actions
+	if(Command::isValid(name.toStdString()))
+	{
+		  obj->command(name.toStdString());
+	}
+	else if(name == "remove")
+	{
+		model_->remove(obj);
+		emit edited();		  		  
+	}  
+}
+
+void MvQIconHolderView::dragEnterEvent(QDragEnterEvent *event)
+{
+        qDebug() << "dragenter" << event <<  event->proposedAction() << event->source();
+
+        if((event->proposedAction() == Qt::CopyAction ||
+            event->proposedAction() == Qt::MoveAction))
+        {
+                qDebug() << "dragenter ok";
+                event->accept();
+        } 
+        else
+	{  
+        	event->ignore();
+	}	
+}
+
+void MvQIconHolderView::dragMoveEvent(QDragMoveEvent *event)
+{
+        qDebug() << "dragmove" << event <<  event->proposedAction() << event->source();
+
+        if((event->proposedAction() == Qt::CopyAction ||
+            event->proposedAction() == Qt::MoveAction))
+        {
+                qDebug() << "dragmove ok";
+                event->accept();
+        }
+        else
+	{  
+		event->ignore();
+	}	
+}
+
+void MvQIconHolderView::dropEvent(QDropEvent *event)
+{
+        qDebug() << "drop" <<  event->mimeData()->formats(); 
+
+        if(event->proposedAction() != Qt::CopyAction &&
+           event->proposedAction() != Qt::MoveAction)
+	{
+	  	event->ignore();
+		return;
+	}	
+   
+        if(event->mimeData()->hasFormat("metview/icon"))
+        {                  
+                const MvQIconMimeData* mimeData=qobject_cast<const MvQIconMimeData*>(event->mimeData());
+				
+		if(!mimeData)
+		{
+			event->ignore();
+			return;
+		}
+		
+		MvQFolderModel *dropModel=mimeData->model();
+		if(!dropModel)
+		{
+		  	event->ignore();
+			return;	
+		}
+		
+		bool hasObj=false;
+		foreach(IconObject* dropObj, mimeData->objects())
+		{					  
+				
+		  	if(!dropObj || !model_->accept(dropObj))
+			{
+				event->ignore();
+				return;
+			}
+		  
+		  	IconObject *obj=dropObj;
+		  	  
+		  	//If drop came from a helper
+			if(dropModel &&  mimeData->fromHelper())
+			{
+				string param=owner_->parameter().beautifiedName();
+				obj=dropObj->clone(owner_->currentObject()->embeddedFolder(param));
+			}
+					
+			if(obj)
+			{
+				hasObj=true;
+				model_->add(obj); 
+			}
+						  
+		}
+		
+		if(hasObj)
+		{
+		  	event->accept();
+			emit edited();
+			return;
+		}
+        }
+        
+        event->ignore();
+}
diff --git a/src/Desktop/MvQIconHolder.h b/src/Desktop/MvQIconHolder.h
new file mode 100644
index 0000000..096d0ca
--- /dev/null
+++ b/src/Desktop/MvQIconHolder.h
@@ -0,0 +1,81 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQIconHolder_H
+#define MvQIconHolder_H
+
+#include <QAbstractItemModel>
+#include <QListView>
+#include <QString>
+
+#include "IconObject.h"
+
+#include <vector>
+
+using namespace std;
+
+class  Parameter;
+class  Request;
+class  RequestPanelItem;
+
+class MvQIconHolderModel : public QAbstractItemModel
+{
+public:
+    	MvQIconHolderModel(const vector<string>&,QObject *parent=0);  
+  
+	int columnCount( const QModelIndex&) const;
+	int rowCount (const QModelIndex& parent = QModelIndex() ) const;
+	QVariant data (const QModelIndex& , int role = Qt::DisplayRole ) const;
+	QModelIndex index (int, int, const QModelIndex& parent = QModelIndex() ) const;
+   	QModelIndex parent (const QModelIndex & ) const;
+	
+	void setIcons(const vector<IconObjectH>&);
+	void clearIcons(const vector<IconObjectH>&);
+	void add(IconObjectH);
+	void remove(IconObjectH);
+	bool accept(IconObjectH);
+	IconObject* iconObject(const QModelIndex&);
+	void iconObjects(vector<IconObjectH>&);
+
+protected:
+    	QList<IconObjectH> icons_;
+	vector<string> classes_;
+};	
+
+
+class MvQIconHolderView : public QListView
+{
+Q_OBJECT
+  
+public:
+	MvQIconHolderView(MvQIconHolderModel*,RequestPanelItem*,QWidget *parent=0);
+	~MvQIconHolderView();
+	
+public slots:
+    	void slotContextMenu(const QPoint &);
+ 
+signals:
+    	void edited();
+	void iconDropped(QString);
+
+protected:
+	void remove(IconObjectH);
+	void command(QString,IconObjectH);
+	
+	void dragEnterEvent(QDragEnterEvent *);
+	void dragMoveEvent(QDragMoveEvent *);
+	void dropEvent(QDropEvent *);
+
+	MvQIconHolderModel* model_;
+	vector<string> classes_;
+	RequestPanelItem* owner_;
+};	
+	
+
+#endif
diff --git a/src/Desktop/MvQIconLine.cc b/src/Desktop/MvQIconLine.cc
new file mode 100644
index 0000000..baaa88c
--- /dev/null
+++ b/src/Desktop/MvQIconLine.cc
@@ -0,0 +1,166 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQIconLine.h"
+
+#include <QHBoxLayout>
+#include <QDebug>
+#include <QLabel>
+#include <QPainter>
+#include <QVBoxLayout>
+
+#include "MvQContextMenu.h"
+#include "MvQFolderModel.h"
+#include "MvQIconHolder.h"
+#include "MvQIconMimeData.h"
+#include "MvQIconProvider.h"
+
+#include "IconClass.h"
+#include "IconFactory.h"
+#include "IconObject.h"
+#include "LineFactory.h"
+#include "Parameter.h"
+#include "RequestPanel.h"
+
+MvQIconLine::MvQIconLine(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelLine(owner,param) 
+{
+	Request interface = param_.interfaceRequest();
+
+	model_=new MvQIconHolderModel(interface.get("class"),parentWidget_);
+	view_ = new MvQIconHolderView(model_,this,parentWidget_);
+	
+	const vector<string>& classes=interface.get("class");
+	
+	/*QString title(tr("Icons: "));
+	const vector<string>& classes=interface.get("class");
+	for(vector<string>::const_iterator it = classes.begin(); it != classes.end(); ++it)
+	{	
+	  	if(it != classes.begin())
+		{  
+			title+=", ";	  
+		}  
+	  	title+=QString::fromStdString(IconClass::find(*it).defaultName());
+	}*/
+			
+	//QLabel *titleLabel=new QLabel(title,parentWidget_);	
+	
+	acceptLayout_=buildAcceptLayout(classes);
+	
+	//QLabel *titleLabel=new QLabel(parentWidget_);	
+	//titleLabel->setPixmap(iconClassPixmap(classes));
+	
+	QVBoxLayout *layout=new QVBoxLayout(parentWidget_);
+	layout->setSpacing(3); 
+	layout->setContentsMargins(1,1,1,1);
+	
+	QWidget *w= new QWidget(parentWidget_);
+	w->setLayout(layout);
+
+	layout->addLayout(acceptLayout_);
+	layout->addWidget(view_);
+		  
+	owner_.addWidget(w,row_,3);
+
+	connect(view_,SIGNAL(edited()),
+		this,SLOT(slotHolderEdited()));			
+}
+
+void MvQIconLine::refresh(const vector<string>& values)
+{
+	if(values.size() == 0)
+	{
+		cleanup();
+	}
+}
+
+void MvQIconLine::reset()
+{
+	const Request& r = owner_.request();
+
+	string parName(param_.name());
+	vector<IconObjectH> sub = currentObject_->subObjects(parName,r);
+	
+	//This will clear the unwanted iconobjects!!
+	model_->setIcons(sub);
+
+	mark(model_->rowCount()>0);	
+	//grey();
+	
+	//changed_ = false;
+}
+
+void MvQIconLine::update()
+{
+ 	//grey();
+	mark(model_->rowCount()>0);	
+}
+
+void MvQIconLine::apply()
+{
+ 	owner_.changed(*this);
+}	
+
+void MvQIconLine::set(Request& r)
+{	
+	vector<IconObjectH> vals;
+	model_->iconObjects(vals);
+	currentObject_->setSubObjects(param_.name(),vals,r,true);
+}
+
+//Should be called when we close the editor
+void MvQIconLine::cleanup()
+{
+	if(!currentObject_)
+	  	return;
+	
+	//We read the saved request
+  	const Request& r = owner_.request();
+	
+	string parName(param_.name());
+	vector<IconObjectH> sub = currentObject_->subObjects(parName,r);
+	
+	//This will clear the unwanted iconObjects!!
+	model_->clearIcons(sub);
+}
+
+void MvQIconLine::slotHolderEdited()
+{
+	owner_.changed();
+	mark(model_->rowCount()>0);
+}
+
+QHBoxLayout* MvQIconLine::buildAcceptLayout(const vector<string>& classes)
+{
+	QHBoxLayout *hb=new QHBoxLayout();
+	
+  	QLabel *lw=new QLabel(tr("<i>Accepted icons:</i>" ),parentWidget_);
+        hb->addWidget(lw);
+	
+	int pixSize=16;
+	for(unsigned int i=0; i < classes.size(); i++)	
+	{		  	
+		QPixmap pix=MvQIconProvider::pixmap(IconClass::find(classes[i]),pixSize);
+		lw=new QLabel(parentWidget_);
+		lw->setPixmap(pix);
+		lw->setToolTip(QString::fromStdString(IconClass::find(classes[i]).defaultName()));
+		hb->addSpacing(4);
+		hb->addWidget(lw);
+				
+		//painter.drawPixmap(i*pixSize+i*pixGap,0,pix);
+	}
+	
+	hb->addStretch(1);
+	return hb;
+	
+	//return cpix;
+}
+
+	
+static LineMaker<MvQIconLine> maker1("icon");
\ No newline at end of file
diff --git a/src/Desktop/MvQIconLine.h b/src/Desktop/MvQIconLine.h
new file mode 100644
index 0000000..75e9f5f
--- /dev/null
+++ b/src/Desktop/MvQIconLine.h
@@ -0,0 +1,55 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQIconLine_H
+#define MvQIconLine_H
+
+#include <QAbstractItemModel>
+#include <QListView>
+#include <QString>
+
+#include "MvQRequestPanelLine.h"
+
+class QHBoxLayout;
+
+class  IconObject;
+class  Parameter;
+class  Request;
+class  RequestPanel;
+
+class MvQIconHolderModel;
+class MvQIconHolderView;
+
+class MvQIconLine : public MvQRequestPanelLine
+{
+Q_OBJECT  
+  
+public:
+	MvQIconLine(RequestPanel& owner,const Parameter& param);		
+	
+	void refresh(const vector<string>&);
+	void reset();
+	void update();
+	void apply();
+	void cleanup();
+	void set(Request&);
+
+public slots:	
+        void slotHolderEdited();
+
+protected:
+	QHBoxLayout* buildAcceptLayout(const vector<string>&);
+
+	 MvQIconHolderView* view_;
+	 MvQIconHolderModel* model_;
+	 QHBoxLayout* acceptLayout_;
+};	
+
+
+#endif
diff --git a/src/Desktop/MvQIconMimeData.cc b/src/Desktop/MvQIconMimeData.cc
new file mode 100644
index 0000000..5fbc03c
--- /dev/null
+++ b/src/Desktop/MvQIconMimeData.cc
@@ -0,0 +1,97 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <QDebug>
+
+#include "MvQIconMimeData.h"
+
+#include "MvQFolderModel.h"
+#include "IconObject.h"
+
+//=================================
+//
+//  MvQNewIconMimeData
+//
+//=================================
+
+MvQNewIconMimeData::MvQNewIconMimeData(QString className,IconDefType iconDefType) :
+  className_(className),
+  iconDefType_(iconDefType)
+{
+  	formats_ << "metview/new_icon";
+	formats_ << "text/plain" << "text/html";	
+}  
+
+QStringList MvQNewIconMimeData::formats () const
+{
+	return formats_;
+}
+
+QVariant MvQNewIconMimeData::retrieveData(const QString & format,QVariant::Type type) const
+{	
+	return QVariant();
+	
+	//return retrieveData(format,type);
+}
+
+//=================================
+//
+//  MvQIconMimeData
+//
+//=================================
+
+MvQIconMimeData::MvQIconMimeData(MvQFolderModel* model,IconObject* dragObj,
+				 QPoint hotSpot,QList<IconObject*> objects) :
+  model_(model), 
+  dragObject_(dragObj),
+  hotSpotInVisRect_(hotSpot),
+  objects_(objects),
+  fromHelper_(false)
+{
+	formats_ << "metview/icon";
+	formats_ << "text/plain" << "text/html";	
+}  
+
+QStringList MvQIconMimeData::formats () const
+{
+	return formats_;
+}
+
+
+QVariant MvQIconMimeData::retrieveData(const QString & format,QVariant::Type type) const
+{
+	if(format == "metview/icon")
+	{
+		QByteArray encodedData;
+		QDataStream stream(&encodedData, QIODevice::WriteOnly);
+		stream << QString::number(objects_.count());
+		
+		foreach(IconObject* obj, objects_)
+		{		  
+			stream << QString::fromStdString(obj->fullName());
+			stream << QString::fromStdString(obj->className());
+		}				
+			
+		return encodedData;
+	}
+	else if(format == "text/plain")
+	{
+	  	//return "file://" + path_;
+	}
+	else if(format == "text/html")
+	{
+	  	//return "file://" + path_;		
+	}
+	else if(format == "image/png")
+	{
+	  	//return "file://" + path_;	
+	}
+	
+	return retrieveData(format,type);
+}
diff --git a/src/Desktop/MvQIconMimeData.h b/src/Desktop/MvQIconMimeData.h
new file mode 100644
index 0000000..66c02c3
--- /dev/null
+++ b/src/Desktop/MvQIconMimeData.h
@@ -0,0 +1,71 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQIconMimeData_H
+#define MvQIconMimeData_H
+
+#include <QMimeData>
+#include <QRect>
+#include <QStringList>
+
+class MvQFolderModel;
+class IconObject;
+
+class MvQNewIconMimeData : public QMimeData
+{
+
+Q_OBJECT  
+  
+public:
+	enum IconDefType {UserDef, SystemDef};	
+	
+	MvQNewIconMimeData(QString,IconDefType);
+	
+	QStringList formats () const;
+	QString className() const {return className_;}
+	IconDefType iconDefType() const {return iconDefType_;} 
+
+protected:
+	QVariant retrieveData( const QString & mimeType, QVariant::Type type ) const;
+	
+	QStringList formats_;
+	QString className_;
+	IconDefType iconDefType_;
+	
+};
+
+
+class MvQIconMimeData : public QMimeData
+{
+
+Q_OBJECT  
+  
+public:
+	MvQIconMimeData(MvQFolderModel*,IconObject*,QPoint,QList<IconObject*>);
+
+	QStringList	formats () const;	
+	MvQFolderModel* model() const {return model_;}
+	IconObject* dragObject() const {return dragObject_;}	
+	QPoint hotSpotInVisRect() const {return hotSpotInVisRect_;}
+	QList<IconObject*> objects() const {return objects_;}	
+	void setFromHelper(bool b) {fromHelper_=b;}
+	bool fromHelper() const {return fromHelper_;}
+
+protected:
+	QVariant retrieveData( const QString & mimeType, QVariant::Type type ) const;
+	
+	QStringList formats_;
+	MvQFolderModel* model_;
+	IconObject *dragObject_;
+	QPoint hotSpotInVisRect_;	
+	QList<IconObject*> objects_;		
+	bool fromHelper_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQIconObjectModel.cc b/src/Desktop/MvQIconObjectModel.cc
new file mode 100644
index 0000000..086c140
--- /dev/null
+++ b/src/Desktop/MvQIconObjectModel.cc
@@ -0,0 +1,120 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQIconObjectModel.h"
+
+#include <QDebug>
+
+#include "IconClass.h"
+#include "IconObject.h"
+
+
+//====================================
+//
+//	MvQIconObjectModel
+//
+//====================================
+
+MvQIconObjectModel::MvQIconObjectModel(QObject *parent) : 
+     QAbstractItemModel(parent)
+{
+  
+}  
+
+void MvQIconObjectModel::update()
+{	
+	beginResetModel();
+	endResetModel();	
+}
+
+
+int MvQIconObjectModel::columnCount( const QModelIndex& parent) const
+{
+	 return parent.isValid() ? 0 : 3;
+}
+
+
+int MvQIconObjectModel::rowCount( const QModelIndex& index) const
+{
+	if (!index.isValid() )
+	{
+	  	return  static_cast<int>(IconObject::objects().size());
+	}
+	else
+	{
+		return  0;
+	}
+}
+
+QVariant MvQIconObjectModel::data( const QModelIndex& index, int role ) const
+{
+  	if (role != Qt::DisplayRole && role != Qt::DecorationRole)
+	{  	
+		return QVariant();
+	}
+	
+  	if(!index.isValid())
+		return QVariant();
+	
+	IconObjectH obj=0;
+	if(index.row() >=0 && index.row() < static_cast<int>(IconObject::objects().size()))
+		obj=IconObject::objects().at(index.row());  
+	
+	if(!obj)
+	  	return QVariant();
+	
+	if(index.column() == 0)
+	{  	
+		if(role == Qt::DisplayRole)
+	  		return QString::fromStdString(obj->name());
+	}
+	else if(index.column() == 1)
+	{
+	  	if(role == Qt::DisplayRole)
+	  		return QString::fromStdString(obj->className());
+	}
+//====================================
+//
+//	MvQIconObjectModel
+//
+//====================================
+	else if(index.column() == 2)
+	{
+	  	if(role == Qt::DisplayRole)
+	  		return QString::number(obj->count());
+	}
+	
+	return QVariant();	  
+}
+
+QModelIndex MvQIconObjectModel::index( int row, int column, const QModelIndex & /*parent */) const
+{
+	return createIndex(row,column,0);
+}
+
+
+QModelIndex MvQIconObjectModel::parent( const QModelIndex & /*index*/ ) const
+{
+	return QModelIndex();
+}
+
+QVariant MvQIconObjectModel::headerData(const int section, const Qt::Orientation orient , const int role ) const
+{
+	if (orient != Qt::Horizontal || role != Qt::DisplayRole)
+  		return QVariant();
+	
+  	if(section == 0)
+	  	return "Name";	
+	else if(section == 1)
+	  	return "Class";
+	else if(section == 2)
+	  	return "Count";
+	
+	return QVariant();
+}
diff --git a/src/Desktop/MvQIconObjectModel.h b/src/Desktop/MvQIconObjectModel.h
new file mode 100644
index 0000000..2db0a57
--- /dev/null
+++ b/src/Desktop/MvQIconObjectModel.h
@@ -0,0 +1,34 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQIconObjectModel_H
+#define MvQIconObjectModel_H
+
+#include <QAbstractItemModel>
+#include <QString>
+
+using namespace std;
+
+class MvQIconObjectModel : public QAbstractItemModel
+{
+public:
+    	MvQIconObjectModel(QObject *parent=0);  
+  
+	int columnCount( const QModelIndex&) const;
+	int rowCount (const QModelIndex& parent = QModelIndex() ) const;
+	QVariant data (const QModelIndex& , int role = Qt::DisplayRole ) const;
+	QModelIndex index (int, int, const QModelIndex& parent = QModelIndex() ) const;
+   	QModelIndex parent (const QModelIndex & ) const;
+	QVariant headerData(const int section, const Qt::Orientation orient , const int role ) const;
+	void update();
+
+};	
+
+
+#endif
diff --git a/src/Desktop/MvQIconProvider.cc b/src/Desktop/MvQIconProvider.cc
new file mode 100644
index 0000000..b5ff0d0
--- /dev/null
+++ b/src/Desktop/MvQIconProvider.cc
@@ -0,0 +1,235 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQIconProvider.h"
+
+#include <QDebug>
+#include <QImage>
+#include <QImageReader>
+#include <QPainter>
+
+#include "Folder.h"
+#include "IconClass.h"
+#include "IconObject.h"
+
+#include <algorithm>
+
+//This array defines the avaiable icon sizes
+static int sizeArr[]={12,16,24,32,48,64,96};
+
+static MvQIcon unknownIcon(":/desktop/unknown.svg");
+static MvQIcon linkIcon(":/desktop/link.svg");
+static MvQIcon linkBrokenIcon(":/desktop/link_broken.svg");
+static MvQIcon lockIcon(":/desktop/padlock.svg");
+static MvQIcon warningIcon(":/desktop/warning.svg");
+static MvQIcon errorIcon(":/desktop/error.svg");
+static MvQIcon bookmarkGroupIcon(":/desktop/bookmark_group.svg");
+static MvQIcon embeddedIcon(":/desktop/embedded.svg");
+
+int MvQIconProvider::defaultSize_=32;
+std::map<string,MvQIcon*> MvQIconProvider::icons_;  
+std::map<string,Folder*> MvQIconProvider::folders_; 
+vector<int> MvQIconProvider::sizes_(sizeArr,sizeArr+ sizeof(sizeArr)/sizeof(sizeArr[0]));
+
+//===========================================
+// 
+// MvQIcon
+//
+//===========================================
+
+MvQIcon::MvQIcon(QString path) : path_(path)
+{
+}
+
+QPixmap MvQIcon::pixmap(int size)
+{
+ 	 map<int,QPixmap>::iterator it=pixmaps_.find(size);
+	 if(it != pixmaps_.end())
+	   	return it->second;
+	 else
+	 {
+	   	QPixmap pix;
+		QImageReader imgR(path_);
+		if(imgR.canRead())
+		{
+			imgR.setScaledSize(QSize(size,size));
+			QImage img=imgR.read();
+			pix=QPixmap::fromImage(img);
+		}
+		else
+		{
+		  	qDebug() << path_;
+		  	pix=unknownIcon.pixmap(size);		
+		} 
+		
+		pixmaps_[size]=pix;
+		return pix;
+	 }
+	 return QPixmap();
+}	 
+  
+  	
+QPixmap MvQIcon::pixmap(IconObject *obj,int size,bool checkEmbedded)
+{  	
+	QPixmap pix=pixmap(size);
+		
+	if(obj->temporary())
+	{
+		QImage img=pix.toImage();
+		img.invertPixels();
+		return QPixmap::fromImage(img);
+	}	
+		
+	int subSize=size/2;
+	
+	if(obj->isLink())
+	{
+		QImage img=pix.toImage();
+		QPainter p(&img);
+		int subSize=size/2;
+		
+		if(obj->isBrokenLink())
+		{	
+			greyOut(img);
+			QRect r(0,0,subSize,subSize);
+			p.drawPixmap(QPoint(0,size-subSize),
+					     linkBrokenIcon.pixmap(subSize),r);
+		}
+		else
+		{  
+			QRect r(0,0,subSize,subSize);
+			p.drawPixmap(QPoint(0,size-subSize),
+				linkIcon.pixmap(subSize),r);
+		}	
+	
+		pix=QPixmap::fromImage(img);
+	}
+	if(obj->locked())
+	{
+	  	QImage img=pix.toImage();
+		QPainter p(&img);
+		int subSize=size/2;
+		QRect r(0,0,subSize,subSize);
+		p.drawPixmap(QPoint(size-subSize,size-subSize),
+			lockIcon.pixmap(subSize),r);	
+		
+		pix=QPixmap::fromImage(img);
+	}
+	if(checkEmbedded && obj->isEmbedded())
+	{			
+		QPixmap emb(size+subSize/2,size);
+		emb.fill(Qt::transparent);	
+		QPainter p(&emb);
+	
+		QRect r(0,0,size,size);
+		p.drawPixmap(QPoint(0,0),pix,r);
+		r=QRect(0,0,subSize,subSize);
+		p.drawPixmap(QPoint(size-subSize/2,0), 
+			     embeddedIcon.pixmap(subSize),r);	
+	
+		pix=emb;
+	}	
+			
+	return pix;
+} 
+
+void MvQIcon::greyOut(QImage &img)
+{
+	int w=img.width();
+	int h=img.height();
+	QRgb c;
+	int g;
+	for(int i=0; i < w; i++)
+	  	for(int j=0; j < h; j++)
+		{
+		  	c=img.pixel(i,j);
+			if(qAlpha(c) != 0)
+			{
+			  	g=qGray(c);
+				img.setPixel(i,j,qRgb(g,g,g));
+			}	
+		}	
+}	
+
+//===========================================
+// 
+// MvQIconProvider
+//
+//===========================================
+
+MvQIconProvider::MvQIconProvider()
+{	
+}
+
+MvQIcon* MvQIconProvider::icon(const IconClass& kind)
+{
+	map<string,MvQIcon*>::iterator it=icons_.find(kind.name());
+	if(it != icons_.end()) 
+		return it->second;
+			
+  	MvQIcon *p=new MvQIcon(QString::fromStdString(kind.pixmap().str()));	  
+	icons_[kind.name()]=p;
+	return p;
+}
+
+QPixmap MvQIconProvider::pixmap(const IconClass& kind,int size)
+{
+	return icon(kind)->pixmap(size);
+}
+
+QPixmap MvQIconProvider::pixmap(IconObject *obj,int size,bool checkEmbedded)
+{
+	return (obj)?icon(obj->iconClass())->pixmap(obj,size,checkEmbedded):unknownIcon.pixmap(size);
+}
+
+QPixmap MvQIconProvider::bookmarkPixmap(string fullName,int size)
+{
+	if(fullName == "FOLDERGROUP")
+		return bookmarkGroupIcon.pixmap(size);
+	
+	std::map<string,Folder*>::iterator it=folders_.find(fullName);
+	if(it != folders_.end())
+	{
+	  	if(it->second)	  
+	  		return pixmap(it->second,size);
+		else
+		{
+			folders_.erase(it);
+		  	return warningIcon.pixmap(size);
+		}	
+	}
+	else
+	{  	
+		Folder *folder=Folder::folder(fullName,false);	
+		folders_[fullName]=folder;
+		if(folder)
+			return pixmap(folder,size);
+		else 
+		  	return warningIcon.pixmap(size);
+	}	
+	
+	return warningIcon.pixmap(size);
+}  
+
+QPixmap MvQIconProvider::lockPixmap(int size)
+{
+	 return lockIcon.pixmap(size);  
+}  
+
+QPixmap MvQIconProvider::warningPixmap(int size)
+{
+	 return warningIcon.pixmap(size);  
+} 
+
+QPixmap MvQIconProvider::errorPixmap(int size)
+{
+	 return errorIcon.pixmap(size);  
+} 
+
+static MvQIconProvider	iconProvider;	
\ No newline at end of file
diff --git a/src/Desktop/MvQIconProvider.h b/src/Desktop/MvQIconProvider.h
new file mode 100644
index 0000000..a60e5ad
--- /dev/null
+++ b/src/Desktop/MvQIconProvider.h
@@ -0,0 +1,70 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQIconProvider_H
+#define MvQIconProvider_H
+
+#include <QImage>
+#include <QMap>
+#include <QPixmap>
+
+#include <map>
+#include <vector>
+#include <string>
+
+using std::string;
+using std::map;
+using std::vector;
+
+class Folder;
+class IconClass;
+class IconObject;
+
+class MvQIcon
+{
+public:  
+  	MvQIcon(QString);
+	QPixmap pixmap(int);
+	QPixmap pixmap(IconObject*,int,bool checkEmbedded=false);
+	
+protected:  
+  	static void greyOut(QImage &);
+  	
+  	QString path_;
+	std::map<int,QPixmap> pixmaps_;
+};  
+
+
+class MvQIconProvider
+{
+public:		
+	MvQIconProvider();
+	
+	static QPixmap pixmap(IconObject*,int,bool checkEmbedded=false);
+	static QPixmap pixmap(const IconClass&,int);
+	
+	static QPixmap bookmarkPixmap(string,int);
+	static QPixmap lockPixmap(int);
+	static QPixmap warningPixmap(int);
+	static QPixmap errorPixmap(int);
+	
+	static int defaultSize() {return defaultSize_;}
+	static const vector<int>& sizes() {return sizes_;}
+	
+private:
+	static MvQIcon* icon(const IconClass&);
+	
+	static vector<int> sizes_;
+	static int defaultSize_;
+	static std::map<string,MvQIcon*> icons_; 
+	static std::map<string,Folder*> folders_; 
+	
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQIconStripView.cc b/src/Desktop/MvQIconStripView.cc
new file mode 100644
index 0000000..278d8ab
--- /dev/null
+++ b/src/Desktop/MvQIconStripView.cc
@@ -0,0 +1,110 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <QApplication>
+#include <QDataStream>
+#include <QDropEvent>
+#include <QDebug>
+#include <QMouseEvent>
+#include <QMenu>
+#include <QPainter>
+#include <QScrollBar>
+#include <QShortcut>
+#include <QTimer>
+
+#include "MvQIconStripView.h"
+
+#include "IconClass.h"
+#include "IconInfo.h"
+#include "IconObject.h"
+#include "Folder.h"
+
+#include "MvQFolderModel.h"
+#include "MvQFolderViewDelegate.h"
+#include "MvQContextMenu.h"
+#include "MvQIconMimeData.h"
+
+MvQIconStripView::MvQIconStripView(MvQFolderModel *folderModel,QWidget *parent) :  
+    MvQIconFolderViewBase(folderModel,parent) 
+{		
+   	setContextMenuPolicy(Qt::CustomContextMenu);
+	setViewMode(QListView::IconMode);
+	setFlow(QListView::LeftToRight);
+	setMovement(QListView::Static);
+	setResizeMode(QListView::Fixed);
+	
+	setAllowMoveAction(false);
+	setEnterFolders(false);
+	
+	setSpacing(10);
+	delegate_->setStripeMode(true);
+	
+	setWrapping(false);
+	
+    	//refIconSize_(32),   
+    	//iconDistanceScale_(1.),
+    	//helper_=true;
+    	//canDrag_(false)
+  
+  	folderModel_->setIconSize(24);
+	
+	setProperty("mvStyle","helper");
+	
+	//MvQFolderViewBase::setIconSize(24);
+          
+	//MvQFolderViewBase::setIconSize(24);
+	
+        //setProperty("mvStyle","IconFolderView");
+}
+
+
+MvQIconStripView::~MvQIconStripView()
+{
+}
+
+/*void MvQIconStripView::reset()
+{
+	//
+	if(delegate_)
+	  	delegate_->setEnablePaint(false);
+	
+  	int x=horizontalScrollBar()->value();
+	int y=verticalScrollBar()->value(); 	
+	
+	qDebug() << "scrollbar" << x << y;
+	
+	QListView::reset();
+	
+	//horizontalScrollBar()->setValue(x);
+	//verticalScrollBar()->setValue(y);
+
+	qDebug() << "    --->" << x << y;
+
+	//Change item positions. This will enable the painting in the delegte.
+	//Currently it causes a flickering!!!!
+	doDelayedPositioning();
+	
+}*/	
+
+void MvQIconStripView::performDrop(QDropEvent*,IconObject*, QList<IconObject*> objLst, QPoint, bool fromSameView)
+{
+	//Drop from another view/model  --> copy or move
+	if(!fromSameView)
+	{  			  
+		foreach(IconObject* obj, objLst)
+		{					  
+			//Cannot move/copy edited icons into another folder!!!
+			if(!obj->editor() && isAccepted(obj))
+			{	
+			  	obj->clone(folderModel_->folder(),false);
+			}	
+		}
+	}
+}	
+				
\ No newline at end of file
diff --git a/src/Desktop/MvQIconStripView.h b/src/Desktop/MvQIconStripView.h
new file mode 100644
index 0000000..2e0925c
--- /dev/null
+++ b/src/Desktop/MvQIconStripView.h
@@ -0,0 +1,25 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQIconStripView_H
+#define MvQIconStripView_H
+
+#include "MvQIconFolderViewBase.h"
+
+class MvQIconStripView : public MvQIconFolderViewBase
+{
+public:
+	MvQIconStripView(MvQFolderModel *,QWidget *parent=0);
+  	~MvQIconStripView();
+	
+protected:	
+	void performDrop(QDropEvent*,IconObject*,QList<IconObject*>,QPoint,bool);
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQListHelp.cc b/src/Desktop/MvQListHelp.cc
new file mode 100644
index 0000000..4ac64b3
--- /dev/null
+++ b/src/Desktop/MvQListHelp.cc
@@ -0,0 +1,170 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQListHelp.h"
+
+#include <QListWidget>
+#include <QScrollBar>
+
+#include "HelpFactory.h"
+#include "RequestPanel.h"
+
+MvQParamList::MvQParamList(const Parameter &param,QWidget *parent) : 
+       QListWidget(parent),
+       param_(param)
+{
+  	//Get items
+	param.scan(*this);
+	
+	adjustHeight();
+	
+}
+
+void MvQParamList::adjustHeight()
+{
+	//Try to set the optimal widget height to approximartely 10 rows
+	if(count() > 0)
+	{
+		int itemHeight=rectForIndex(indexFromItem(item(0))).height();
+		int totalHeight=itemHeight*10+horizontalScrollBar()->height();
+		setMinimumHeight(totalHeight);
+		setMaximumHeight(totalHeight);
+	}
+	else
+	{
+	  	setMaximumHeight(32);
+	}		  
+}
+
+void MvQParamList::next(const Parameter&, const char* first,const char* second)
+{
+	if(isalnum(*first))
+   	{
+		string astr(first);			
+		QListWidgetItem *item=new QListWidgetItem(QString::fromStdString(param_.beautifiedName(astr)),this);
+		if(second)
+		{	
+			item->setData(Qt::UserRole,QString(second));
+		}
+		else
+		{
+		  	item->setData(Qt::UserRole,QString(first));
+		}
+		
+		if(param_.multiple())
+		{  
+			item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled |Qt::ItemIsUserCheckable);
+			item->setCheckState(Qt::Unchecked);
+		}	
+	}	
+}
+
+//----------------------------------
+// MvQListHelp
+//----------------------------------
+
+MvQListHelp::MvQListHelp(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelHelp(owner,param)
+{
+	multiple_=param.multiple();
+	
+	//Create list
+	paramList_=new MvQParamList(param,parentWidget_);
+	
+	if(!multiple_)
+	{	
+		paramList_->setSelectionMode(QAbstractItemView::SingleSelection);
+	}
+			
+	connect(paramList_,SIGNAL(itemClicked(QListWidgetItem*)),
+		this,SLOT(slotListChanged(QListWidgetItem*)));
+}
+
+
+
+void MvQListHelp::refresh(const vector<string>& values)
+{
+	if(!multiple_)
+	{  
+		if(values.size() > 0)
+		{
+		  	QString txt(values[0].c_str());
+		
+			for(int i=0; i < paramList_->count(); i++)
+			{
+				if(paramList_->item(i)->data(Qt::UserRole).toString().toStdString() == values[0])
+				{
+					paramList_->setCurrentRow(i);
+					return;
+				}
+			}	
+		}	
+	}
+	else
+	{  	
+	  	QStringList lst;
+		for(int i=0; i < paramList_->count(); i++)
+		{
+			string s=paramList_->item(i)->data(Qt::UserRole).toString().toStdString();
+			
+			bool found=false;
+			for(vector<string>::const_iterator it = values.begin(); it != values.end(); it++)
+			{
+				if (s == *it)
+				{	
+					found=true;
+					break;
+				}	
+			}
+			
+			if(found)
+				paramList_->item(i)->setCheckState(Qt::Checked);
+			else
+			  	paramList_->item(i)->setCheckState(Qt::Unchecked);
+		}	
+	}		  
+		
+}
+
+void MvQListHelp::slotListChanged(QListWidgetItem* item)
+{
+	if(!item)
+	  	return;
+  
+  	vector<string> val, noVal;
+		
+	if(!multiple_)
+	{
+		string s=item->data(Qt::UserRole).toString().toStdString();
+		val.push_back(s);
+		emit edited(val);
+	}	
+	else
+	{	  	
+		//Reverse the items check state 
+		//item->setCheckState((item->checkState()==Qt::Checked)?Qt::Unchecked:Qt::Checked);
+	  
+	  	for(int i=0; i < paramList_->count(); i++)
+		{
+	  		string s=paramList_->item(i)->data(Qt::UserRole).toString().toStdString();
+	  		if(paramList_->item(i)->checkState() == Qt::Checked)
+			{
+			  	val.push_back(s);
+			}
+			else
+			{
+		  		noVal.push_back(s);
+			}  
+		}	
+
+       	 	emit edited(val,noVal); 
+	}	
+}
+
+static HelpMaker<MvQListHelp> maker("help_multiple_selection");
diff --git a/src/Desktop/MvQListHelp.h b/src/Desktop/MvQListHelp.h
new file mode 100644
index 0000000..1bc4b63
--- /dev/null
+++ b/src/Desktop/MvQListHelp.h
@@ -0,0 +1,59 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQListHelp_H
+#define MvQListHelp_H
+
+#include "MvQRequestPanelHelp.h"
+#include "Parameter.h"
+
+#include <QListWidget>
+#include <QMap>
+#include <QString>
+
+class  RequestPanel;
+
+class MvQParamList : public QListWidget, public ParameterScanner
+{
+public:  
+	MvQParamList(const Parameter& param,QWidget *parent=0);
+	
+protected:
+        void adjustHeight();
+    	void next(const Parameter&, const char* first,const char* second);
+	
+	const Parameter& param_;
+};  
+
+class MvQListHelp : public MvQRequestPanelHelp
+{
+Q_OBJECT  
+
+public:
+	MvQListHelp(RequestPanel& owner,const Parameter& param);
+	~MvQListHelp() {};
+	
+	void start() {};
+	bool dialog() {return false;}	
+	QWidget* widget() {return paramList_;}
+
+public slots:
+	void slotListChanged(QListWidgetItem*);
+  
+protected:
+	virtual void refresh(const vector<string>&);
+  	virtual long flags() {return 9;}
+	virtual void set(Request&) {}
+	
+	QListWidget* paramList_;
+	bool multiple_;
+};	
+
+#endif
diff --git a/src/Desktop/MvQLogDialog.cc b/src/Desktop/MvQLogDialog.cc
new file mode 100644
index 0000000..5bcf1a6
--- /dev/null
+++ b/src/Desktop/MvQLogDialog.cc
@@ -0,0 +1,252 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQLogDialog.h"
+
+#include "IconObject.h"
+#include "Log.h"
+
+#include <QDebug>
+#include <QDialogButtonBox>
+#include <QFile>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QPlainTextEdit>
+#include <QPushButton>
+#include <QTextStream>
+#include <QToolButton>
+#include <QVBoxLayout>
+
+#include "MvQFileWatcher.h"
+#include "MvQIconProvider.h"
+
+static std::set<MvQLogDialog*> windows;
+
+MvQLogDialog::MvQLogDialog() : 
+	current_(0),
+	file_(0)
+{
+	QVBoxLayout *vb=new QVBoxLayout(this);
+	
+	//-----------------------
+	//Header
+	//------------------------
+	
+	QHBoxLayout *hb=new QHBoxLayout;
+	vb->addLayout(hb);
+	
+	pixLabel_=new QLabel(this);	
+	pixLabel_->setFrameShape(QFrame::Box);
+        pixLabel_->setFrameShape(QFrame::StyledPanel);
+	
+	hb->addWidget(pixLabel_);
+	
+	headerLabel_=new QLabel("",this);
+	headerLabel_->setObjectName(QString::fromUtf8("editorHeaderLabel"));	
+	headerLabel_->setMargin(8);
+	headerLabel_->setAlignment(Qt::AlignLeft| Qt::AlignVCenter);
+        headerLabel_->setAutoFillBackground(true);
+        headerLabel_->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse);
+	headerLabel_->setFrameShape(QFrame::Box);
+        headerLabel_->setFrameShape(QFrame::StyledPanel);
+	
+	hb->addWidget(headerLabel_,1);
+	
+	//-------------------
+	// Toolbar
+	//-------------------
+	
+	hb=new QHBoxLayout;
+	vb->addLayout(hb);
+	
+	QToolButton *clearTb=new QToolButton(this);
+	clearTb->setAutoRaise(true);
+	clearTb->setText(tr("Clear"));
+	clearTb->setToolTip(tr("Clear log"));
+	hb->addWidget(clearTb);
+	
+	connect(clearTb,SIGNAL(clicked(bool)),
+		this,SLOT(slotClear(bool)));
+		
+	freezeTb_=new QToolButton(this);
+	freezeTb_->setAutoRaise(true);
+	freezeTb_->setText(tr("Freeze"));
+	freezeTb_->setToolTip(tr("Freeze log"));
+	freezeTb_->setCheckable(true);
+	
+	hb->addWidget(freezeTb_);
+	
+	connect(freezeTb_,SIGNAL(toggled(bool)),
+		this,SLOT(slotFreeze(bool)));
+	
+	hb->addStretch(1);
+	
+	//-------------------
+	//TextEdit
+	//-------------------
+	
+	textEdit_=new QPlainTextEdit(this);
+	textEdit_->setReadOnly(true);
+	vb->addWidget(textEdit_,1);
+
+	//-------------------
+	//Buttonbox
+	//-------------------
+	
+	QDialogButtonBox *buttonBox= new QDialogButtonBox(this);
+	vb->addWidget(buttonBox);
+	
+	QPushButton *closePb=buttonBox->addButton(QDialogButtonBox::Close);
+	connect(buttonBox,SIGNAL(rejected()),
+		this,SLOT(reject()));
+		
+	//-------------------
+	//Watcher
+	//-------------------
+	
+	watcher_=new MvQFileWatcher;
+	
+	connect(watcher_,SIGNAL(ready(const char*)),
+		this,SLOT(slotReady(const char*)));
+		
+	connect(watcher_,SIGNAL(done(FILE*)),
+		this,SLOT(slotDone(FILE*)));  
+		
+	windows.insert(this);
+}
+
+MvQLogDialog::~MvQLogDialog()
+{
+	// Not called
+	delete watcher_;
+}
+
+void MvQLogDialog::open(IconObject* icon)
+{
+	MvQLogDialog *e = icon->logWindow();
+	if(e == 0)
+	{
+		for(std::set<MvQLogDialog*>::iterator j = windows.begin(); j != windows.end(); ++j)
+			if((*j)->current_ == 0)
+				e = (*j);
+
+		if(e == 0) e = new MvQLogDialog();
+
+	}
+	e->show(icon);
+}
+
+void MvQLogDialog::show(IconObject* icon)
+{
+	if(icon != current_)
+	{
+		current_ = icon;	
+		if(current_) {
+			current_->logWindow(this);
+			
+			//Update title
+			setWindowTitle(tr("Log window - ") + QString::fromStdString(current_->name()));
+			
+			//Update lables
+			pixLabel_->setPixmap(MvQIconProvider::pixmap(current_->iconClass(),32));
+			
+			QString str=tr("<b>Folder:</b> ");
+			str+=QString::fromStdString(current_->path().directory().str()) + "<br>";
+			str+=tr("<b>Icon:</b> ");
+			str+=QString::fromStdString(current_->name());
+		
+			headerLabel_->setText(str);
+	
+			//Load data
+			load();
+		}
+	}
+	QWidget::show();
+}
+
+void MvQLogDialog::load()
+{	
+	watcher_->stop();
+	textEdit_->clear();
+	
+  	if(file_) 
+	{
+		fclose(file_);
+		file_ = 0;
+	}
+	
+  	Path p = current_->logPath();
+	
+	cout << "log: " << p.str() << endl;
+	
+	//Read contents
+	QFile f(QString::fromStdString(p.str()));
+	f.open(QFile::ReadOnly | QFile::Text);
+	
+	QTextStream readStream(&f);
+	textEdit_->setPlainText(readStream.readAll());
+  	f.close();
+		
+	//Set up file watcher
+	file_=fopen(p.str().c_str(),"r");
+	if(file_)
+	{
+	  	fseek(file_,0,SEEK_END);
+		watcher_->start(file_,p.str());		
+	}
+}
+
+void MvQLogDialog::reject()
+{
+	watcher_->stop();
+	
+	if(file_)
+	{
+		fclose(file_);
+		file_ = 0;
+	}
+	
+	textEdit_->clear();
+
+	if(current_) current_->logWindow(0);
+	current_ = 0;
+	
+	QDialog::reject();
+}
+
+
+void MvQLogDialog::slotClear(bool)
+{
+	Path p  = current_->logPath();
+	FILE *f = fopen(p.str().c_str(),"w");
+	if(f) fclose(f);
+
+	load();
+}
+
+void MvQLogDialog::slotFreeze(bool b)
+{
+	if(b) 
+		watcher_->stop();
+	else 
+		load();
+}
+
+void MvQLogDialog::slotDone(FILE*)
+{
+	watcher_->stop();
+	//enable();
+	cout << "done" << endl;
+}
+
+void MvQLogDialog::slotReady(const char *buf)
+{
+	textEdit_->appendPlainText(QString(buf));
+}
+
diff --git a/src/Desktop/MvQLogDialog.h b/src/Desktop/MvQLogDialog.h
new file mode 100644
index 0000000..52854d6
--- /dev/null
+++ b/src/Desktop/MvQLogDialog.h
@@ -0,0 +1,64 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQLogDialog_H
+#define MvQLogDialog_H
+
+#include "IconObject.h"
+
+#include <QDialog>
+
+class QLabel;
+class QPlainTextEdit;
+class QToolButton;
+
+class MvQFileWatcher;
+
+class MvQLogDialog : public QDialog
+{
+Q_OBJECT  
+  
+public:
+	virtual ~MvQLogDialog(); 
+	void close();
+	static void open(IconObject*);
+
+protected:
+	MvQLogDialog();	
+
+public slots:	
+        void reject();
+	void slotFreeze(bool);
+	void slotClear(bool);
+	void slotReady(const char*);
+	void slotDone(FILE*);
+  
+private:
+	// No copy allowed
+	MvQLogDialog(const MvQLogDialog&);
+	MvQLogDialog& operator=(const MvQLogDialog&);
+
+	void show(IconObject*);
+	void load();
+	
+	FILE*           file_;
+	IconObjectH     current_;
+	
+	QLabel* pixLabel_;
+	QLabel* headerLabel_;
+	QPlainTextEdit* textEdit_;
+	MvQFileWatcher* watcher_;
+	QToolButton *freezeTb_;
+};
+
+
+inline void destroy(MvQLogDialog**) {}
+
+
+#endif
diff --git a/src/Desktop/MvQMessageBox.cc b/src/Desktop/MvQMessageBox.cc
new file mode 100644
index 0000000..61d5979
--- /dev/null
+++ b/src/Desktop/MvQMessageBox.cc
@@ -0,0 +1,50 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQMessageBox.h"
+
+#include "mars.h"
+#include "MvRequest.h"
+
+MvQMessageBox::MvQMessageBox(request *req,QWidget *parent) : QMessageBox(parent)
+{
+  	if(!req) return;
+  	MvRequest r(req);
+  	const char *verb=r.getVerb();	
+	if(verb && strcmp(verb,"MESSAGE")==0)
+	{
+	  	if(const char *st=r("STATUS"))
+		{		  
+			if(strcmp(st,"ERROR") == 0)
+			{
+			  	setIcon(QMessageBox::Critical);
+				setWindowTitle("Error message");
+			}
+			else if(strcmp(st,"WARNING") == 0)
+			{
+				setIcon(QMessageBox::Warning);
+				setWindowTitle("Warning message");
+			}
+				
+		}
+		else
+		{
+		  	setIcon(QMessageBox::Information);
+			setWindowTitle("Message");
+		}
+		
+		if(const char* txt=r("TEXT"))
+			setText(txt);
+		
+		if(const char* detailed=r("DETAILED"))
+		  	setDetailedText(detailed);
+		
+		exec();
+	}
+}	
\ No newline at end of file
diff --git a/src/Desktop/MvQMessageBox.h b/src/Desktop/MvQMessageBox.h
new file mode 100644
index 0000000..e93b5e5
--- /dev/null
+++ b/src/Desktop/MvQMessageBox.h
@@ -0,0 +1,24 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQMessageBoxBox_H
+#define MvQMessageBoxBox_H
+
+#include <QMessageBox>
+
+struct request;
+
+class MvQMessageBox : public QMessageBox
+{  
+public:
+	MvQMessageBox(request*,QWidget *parent=0);		
+};	
+
+
+#endif
diff --git a/src/Desktop/MvQNewIconWidget.cc b/src/Desktop/MvQNewIconWidget.cc
new file mode 100644
index 0000000..f101d9e
--- /dev/null
+++ b/src/Desktop/MvQNewIconWidget.cc
@@ -0,0 +1,492 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQNewIconWidget.h"
+
+#include <QApplication>
+#include <QComboBox>
+#include <QDebug>
+#include <QDialogButtonBox>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QListWidget>
+#include <QPainter>
+#include <QSettings>
+#include <QStackedWidget>
+#include <QVBoxLayout>
+
+#include "MvQIconProvider.h"
+
+#include "Path.h"
+
+MvQIconListDelegate::MvQIconListDelegate(int iconSize,QWidget *parent) : 
+   QStyledItemDelegate(parent),
+   iconSize_(iconSize)
+{
+}
+
+void MvQIconListDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option,
+		           const QModelIndex& index) const
+{
+	if(index.column() == 0)
+	{
+		QStyleOptionViewItemV4 vopt(option);
+   		initStyleOption(&vopt, index);
+   
+		//Save painter state
+		painter->save();
+		
+		//Highlight
+		if (option.state & QStyle::State_HasFocus  || option.state & QStyle::State_Selected)
+             		painter->fillRect(option.rect, option.palette.highlight());
+			
+		//Draw icon		
+		QIcon ic = index.data(Qt::DecorationRole).value<QIcon>();
+		QRect iconRect(option.rect.center().x()-iconSize_/2,option.rect.top()+4,iconSize_,iconSize_);		
+		ic.paint(painter,iconRect);
+
+		//Draw text
+		QFont font=QApplication::font();
+		QFontMetrics fm(font);
+		int textHeight=fm.height();
+		QString text=index.data(Qt::DisplayRole).toString();
+		int textWidth=fm.width(text);
+		
+		QRect textRect(option.rect.center().x()-textWidth/2,option.rect.bottom()-textHeight-5,
+			       textWidth,textHeight);
+			       
+		painter->drawText(textRect,Qt::AlignLeft,text);
+		
+		//Restore painter state
+		painter->restore();			
+	}
+	else
+	 	QStyledItemDelegate::paint(painter,option,index);   
+}
+
+QSize MvQIconListDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const
+{
+	QSize size=QStyledItemDelegate::sizeHint(option,index);
+
+	if(index.column() == 0)
+	{
+		QFont font=QApplication::font();
+		QFontMetrics fm(font);
+		size.setHeight(4+iconSize_+4+fm.height()+4);
+	}
+	return size;
+}
+
+
+
+MvQNewIconDelegate::MvQNewIconDelegate(QWidget *parent) : QStyledItemDelegate(parent)
+{
+}
+ 
+void MvQNewIconDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option,
+		           const QModelIndex& index) const
+{
+	if(index.column() == 0)
+	{
+		QStyleOptionViewItemV4 vopt(option);
+   		initStyleOption(&vopt, index);
+   
+    		const QStyle *style = vopt.widget ? vopt.widget->style() : QApplication::style();
+    		const QWidget* widget = vopt.widget;
+
+		//We render everything with the default method
+  		style->drawControl(QStyle::CE_ItemViewItem, &vopt, painter, widget);
+	
+		//Draw separator line
+		painter->save();
+		painter->setPen(QColor(230,230,230));
+		painter->drawLine(option.rect.bottomLeft(),option.rect.bottomRight());
+		painter->restore();		
+	}
+	else
+	 	QStyledItemDelegate::paint(painter,option,index);
+}		
+		
+//==============================
+//
+// MvQNewIconListWidget
+//
+//==============================
+
+MvQNewIconListWidget::MvQNewIconListWidget(QWidget *parent) : 
+    QListWidget(parent)
+{
+	setIconSize(QSize(24,24));
+	setSpacing(2); 
+
+	MvQNewIconDelegate* delegate=new MvQNewIconDelegate(this);
+	setItemDelegate(delegate);
+}  
+
+//=====================================================
+//
+// MvQNewIconWidget
+//
+//=====================================================
+
+MvQNewIconWidget::MvQNewIconWidget(QWidget *parent) : QTabWidget(parent)
+{		 	
+  	QHBoxLayout *hb=new QHBoxLayout(this);
+	
+	//--------------------
+	//Option list
+	//--------------------
+  	
+  	QListWidget *optionList=new QListWidget(this);
+	optionList->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+	hb->addWidget(optionList);
+	
+	//----------------------------------------------------
+	// Stacked widget for all the icon selection widgets
+	//----------------------------------------------------
+	
+  	mainPanel_=new QStackedWidget(this);
+	hb->addWidget(mainPanel_,1);
+  		
+	//---------------------------
+	// Recently used 
+	//---------------------------
+  		
+  	recentList_=new MvQNewIconListWidget(this);
+	mainPanel_->addWidget(recentList_);
+	
+	connect(recentList_,SIGNAL(itemActivated(QListWidgetItem*)),
+		this,SLOT(slotIconSelected(QListWidgetItem*)));	
+		
+  	//---------------------------
+	// Type widget
+	//---------------------------
+  		
+  	QWidget *typeW=new QWidget(this);	
+  	QVBoxLayout *typeVb=new QVBoxLayout(typeW);
+	
+	//Type
+	QHBoxLayout *typeHb=new QHBoxLayout;	
+	QLabel *typeLabel=new QLabel(tr("Group: "));
+	typeHb->addWidget(typeLabel);
+	typeCb_=new QComboBox(this);
+	typeHb->addWidget(typeCb_,1);
+	typeVb->addLayout(typeHb);	
+	
+	//Icon
+	iconPanel_=new QStackedWidget(this);
+	typeVb->addWidget(iconPanel_);
+		
+	// Scan for icons that can be created	
+	IconClass::scan(*this);
+	
+	foreach(QString key,iconLists_.keys())
+	{
+	  	typeCb_->addItem(key,key);	  	
+	  	iconPanel_->addWidget(iconLists_[key]);
+		iconLists_[key]->sortItems();
+	}
+	
+	mainPanel_->addWidget(typeW);
+	
+	connect(typeCb_,SIGNAL(currentIndexChanged(int)),
+		this,SLOT(slotTypeChanged(int)));
+		
+	//------------------
+	// Search widget
+	//------------------
+	
+	QWidget *searchW= new QWidget(this);
+	QVBoxLayout *searchVb=new QVBoxLayout(searchW);	
+	
+	QHBoxLayout *searchHb=new QHBoxLayout;	
+	QLabel *label=new QLabel(tr("Search:"));
+	searchLine_=new QLineEdit(searchW);	
+	searchHb->addWidget(label);
+	searchHb->addWidget(searchLine_,1);
+	searchVb->addLayout(searchHb);
+	
+	searchList_=new MvQNewIconListWidget(searchW);
+	searchVb->addWidget(searchList_);
+	
+	connect(searchList_,SIGNAL(itemActivated(QListWidgetItem*)),
+		this,SLOT(slotIconSelected(QListWidgetItem*)));	
+		
+	mainPanel_->addWidget(searchW);
+	
+	connect(searchLine_,SIGNAL(textChanged(QString)),
+		this,SLOT(slotSearch(QString)));
+		
+	//------------------------	
+	// Populate option list	
+	//------------------------
+	
+	QListWidgetItem* item;
+	item=new QListWidgetItem(tr("Most recent"),optionList);
+	item->setData(Qt::UserRole,0);
+	item->setIcon(QIcon(":/desktop/history.svg"));
+	item->setTextAlignment(Qt::AlignHCenter);
+	item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+	
+	item=new QListWidgetItem(tr("Groups"),optionList);
+	item->setData(Qt::UserRole,1);	
+	item->setIcon(QIcon(":/desktop/icon_group.svg"));
+	item->setTextAlignment(Qt::AlignHCenter);
+	item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+	
+	item=new QListWidgetItem(tr("Search"),optionList);
+	item->setData(Qt::UserRole,2);		
+	item->setIcon(QIcon(":/desktop/search.svg"));
+	item->setTextAlignment(Qt::AlignHCenter);
+	item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+	
+	connect(optionList,SIGNAL(currentRowChanged(int)),
+		mainPanel_,SLOT(setCurrentIndex(int)));	
+		
+	//Set option list width	
+	QFont font;
+	QFontMetrics fm(font);
+	int optionWidth=fm.width(tr("Most recent"))+20;
+	if(optionWidth < 32+20) optionWidth=32+20;
+	optionList->setMaximumWidth(optionWidth+20);
+	//optionList->setMaximumWidth(128);
+	
+	//Delegate
+	optionList->setItemDelegate(new MvQIconListDelegate(32,this));
+	
+	//----------------
+	// Init
+	//----------------
+	
+	slotSearch("");
+	
+	optionList->setCurrentRow(2);
+}
+		
+MvQNewIconWidget::~MvQNewIconWidget()
+{  
+}
+
+void MvQNewIconWidget::next(const IconClass& c)
+{
+  	if(c.canBeCreated())
+	{
+		QString type=QString::fromStdString(c.iconBox());
+		if(type.isEmpty())
+			type="Other";
+		
+		MvQNewIconListWidget *w;
+		QMap<QString,MvQNewIconListWidget*>::iterator it=iconLists_.find(type);
+		if(it == iconLists_.end())
+		{  
+			w=new MvQNewIconListWidget(this);
+			connect(w,SIGNAL(itemActivated(QListWidgetItem*)),
+				this,SLOT(slotIconSelected(QListWidgetItem*)));	
+			
+			iconLists_[type]=w;
+		}
+		else 
+		{
+			w=it.value();
+		}
+			
+		QListWidgetItem *typeItem=new QListWidgetItem(MvQIconProvider::pixmap(c,32),
+						 QString::fromStdString(c.defaultName()));
+								  
+		typeItem->setData(Qt::UserRole,QString::fromStdString(c.name()));
+			
+		w->addItem(typeItem);	
+				
+		iconClasses_.push_back(&c);
+	}	
+}
+
+void MvQNewIconWidget::slotTypeChanged(int index)
+{	
+  	QString type=typeCb_->itemData(index).toString();
+  	QMap<QString,MvQNewIconListWidget*>::iterator it=iconLists_.find(type);
+	if(it != iconLists_.end())
+	{  
+	 	iconPanel_->setCurrentWidget(it.value());
+	}
+}
+
+void MvQNewIconWidget::slotIconSelected(QListWidgetItem* item)
+{  		  		  	
+	emit iconSelected(item->data(Qt::UserRole).toString()); 	
+}  
+
+void MvQNewIconWidget::slotSearch(QString str)
+{
+  	vector<const IconClass*> res;
+		
+	if(str.simplified().isEmpty())
+	{		
+	  	if(searchList_->count() != static_cast<int>(iconClasses_.size()))
+		{
+			res=iconClasses_;
+			searchList_->clear();	 	
+		}
+		else
+			return;  
+	}	
+  	else
+	{  	
+		IconClass::find(str.toStdString(),res);	
+		searchList_->clear();		
+	}	
+	
+	for(vector<const IconClass*>::iterator it=res.begin(); it != res.end(); it++)
+	{			
+		QListWidgetItem *item=new QListWidgetItem(MvQIconProvider::pixmap(*(*it),32),
+				              QString::fromStdString((*it)->defaultName()));
+		
+		item->setData(Qt::UserRole,QString::fromStdString((*it)->name()));
+		searchList_->addItem(item);
+	}	
+	
+	searchList_->sortItems();
+}  
+
+int MvQNewIconWidget::currentOption() const
+{
+ 	return mainPanel_->currentIndex(); 
+}  
+
+void MvQNewIconWidget::setCurrentOption(int index)
+{
+ 	mainPanel_->setCurrentIndex(index); 
+}  
+
+void MvQNewIconWidget::setRecentIcons(QStringList lst)
+{
+  	for(int i=lst.count()-1; i >=0 ; i--)
+	{
+	  	const IconClass& kind=IconClass::find(lst[i].toStdString());
+				
+		QListWidgetItem *item=new QListWidgetItem(MvQIconProvider::pixmap(kind,32),
+				              QString::fromStdString(kind.defaultName()));
+		
+		item->setData(Qt::UserRole,QString::fromStdString(kind.name()));
+		recentList_->addItem(item);
+	}	
+}
+
+//==============================
+//
+// MvQNewIconDialog
+//
+//==============================
+
+MvQNewIconDialog::MvQNewIconDialog(QWidget *parent) : 
+   QDialog(parent),
+   maxRecent_(12)
+{
+	setWindowTitle(tr("Create new icon"));
+	
+	QVBoxLayout *vb=new QVBoxLayout;
+	setLayout(vb);
+	
+	iconWidget_ =new MvQNewIconWidget(this);	
+	vb->addWidget(iconWidget_,1);
+
+	// Buttonbox
+	//QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
+        //                              | QDialogButtonBox::Cancel);
+ 	
+	QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Cancel);
+	
+	//connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
+     	connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
+		
+	vb->addWidget(buttonBox);
+	
+	connect(iconWidget_,SIGNAL(iconSelected(QString)),
+		this,SLOT(slotIconSelected(QString)));
+	
+	//Read settings	
+	readSettings(); 
+		
+}
+
+MvQNewIconDialog::~MvQNewIconDialog()
+{
+	writeSettings();  
+}  
+
+void MvQNewIconDialog::reject()
+{
+  	QDialog::reject();
+}  
+
+void MvQNewIconDialog::slotIconSelected(QString name)
+{
+  	selected_=name;
+	if(recentIcons_.contains(name))
+	{
+		recentIcons_.removeAll(name);
+		recentIcons_ << name;
+	}
+	else
+	{
+	 	if(recentIcons_.count() >= maxRecent_)
+		  	recentIcons_.takeFirst();
+		
+		 recentIcons_ << name;
+	}
+	
+	accept();
+}
+
+const IconClass& MvQNewIconDialog::selected()
+{
+ 	return  IconClass::find(selected_.toStdString());
+} 
+
+void MvQNewIconDialog::writeSettings()
+{
+	QSettings settings("ECMWF","MV4-Desktop-NewIconDialog");
+	
+	//We have to clear it not to remember all the previous windows
+	settings.clear();
+	
+	settings.beginGroup("main");
+	settings.setValue("size",size());
+	settings.setValue("currentOption",iconWidget_->currentOption());
+	settings.setValue("recentIcons",recentIcons_);
+	settings.endGroup();
+}
+
+void MvQNewIconDialog::readSettings()
+{
+	QSettings settings("ECMWF","MV4-Desktop-NewIconDialog");
+  	
+	settings.beginGroup("main");
+	if(settings.contains("size"))
+	{  
+		resize(settings.value("size").toSize());
+	}
+	else
+	{
+	  	resize(QSize(350,500));
+	}
+	
+	if(settings.contains("recentIcons"))
+	{
+		recentIcons_=settings.value("recentIcons").toStringList(); 
+		iconWidget_->setRecentIcons(recentIcons_);	  
+	}  
+	
+	if(settings.contains("currentOption"))
+	{
+		iconWidget_->setCurrentOption(settings.value("currentOption").toInt());
+	}
+	settings.endGroup(); 	
+}	
\ No newline at end of file
diff --git a/src/Desktop/MvQNewIconWidget.h b/src/Desktop/MvQNewIconWidget.h
new file mode 100644
index 0000000..3c2d917
--- /dev/null
+++ b/src/Desktop/MvQNewIconWidget.h
@@ -0,0 +1,108 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQNewIconWidget_H
+#define MvQNewIconWidget_H
+
+#include <QDialog>
+#include <QListWidget>
+#include <QMap>
+#include <QStyledItemDelegate>
+
+#include "IconClass.h"
+
+class QComboBox;
+class QLineEdit;
+class QListWidget;
+class QStackedWidget;
+
+
+class MvQIconListDelegate : public QStyledItemDelegate
+{
+public:
+	MvQIconListDelegate(int, QWidget *parent=0); 
+	void paint(QPainter *painter,const QStyleOptionViewItem &option,
+		           const QModelIndex& index) const;	
+	QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
+
+private:
+    	int iconSize_;
+};
+
+class MvQNewIconDelegate : public QStyledItemDelegate
+{
+public:
+	MvQNewIconDelegate(QWidget *parent=0); 
+	void paint(QPainter *painter,const QStyleOptionViewItem &option,
+		           const QModelIndex& index) const;
+};
+
+class MvQNewIconListWidget : public QListWidget
+{
+public:
+	MvQNewIconListWidget(QWidget *parent=0);
+};	
+	
+class MvQNewIconWidget : public QTabWidget, public ClassScanner 
+{
+Q_OBJECT
+
+public:
+	MvQNewIconWidget(QWidget *parent=0);
+	~MvQNewIconWidget();
+	
+	void next(const IconClass& );
+	void setCurrentOption(int);
+	int  currentOption() const;
+	void setRecentIcons(QStringList);
+	
+public slots:
+	void slotTypeChanged(int);
+	void slotIconSelected(QListWidgetItem*);
+	void slotSearch(QString);
+
+signals:
+	void iconSelected(QString);
+	
+protected:
+	QStackedWidget *mainPanel_;
+	QListWidget* recentList_;	
+	QComboBox* typeCb_;
+	QStackedWidget* iconPanel_;
+  	QMap<QString,MvQNewIconListWidget*> iconLists_;	
+	QLineEdit*  searchLine_;
+	QListWidget* searchList_;
+	vector<const IconClass*> iconClasses_;	
+};
+
+class MvQNewIconDialog : public QDialog
+{
+Q_OBJECT
+
+public:  
+	MvQNewIconDialog (QWidget *parent=0);
+	~MvQNewIconDialog();
+	const IconClass& selected();
+	
+public slots:
+	void reject();	
+	void slotIconSelected(QString);
+
+private:
+    	void writeSettings();
+    	void readSettings();
+    	
+    	MvQNewIconWidget* iconWidget_;
+    	QString selected_;
+	QStringList recentIcons_;
+	const int maxRecent_;
+  
+};  
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQNoneLine.cc b/src/Desktop/MvQNoneLine.cc
new file mode 100644
index 0000000..d784a96
--- /dev/null
+++ b/src/Desktop/MvQNoneLine.cc
@@ -0,0 +1,24 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQNoneLine.h"
+
+#include "LineFactory.h"
+#include "RequestPanel.h"
+
+MvQNoneLine::MvQNoneLine(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelLine(owner,param,false) 
+{
+}
+
+MvQNoneLine::~MvQNoneLine()
+{
+}
+	
+static LineMaker<MvQNoneLine> maker1("none");
diff --git a/src/Desktop/MvQNoneLine.h b/src/Desktop/MvQNoneLine.h
new file mode 100644
index 0000000..1d0770b
--- /dev/null
+++ b/src/Desktop/MvQNoneLine.h
@@ -0,0 +1,35 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQNoneLine_H
+#define MvQNoneLine_H
+
+#include <QString>
+
+#include "MvQRequestPanelLine.h"
+
+class  RequestPanel;
+
+class MvQNoneLine : public MvQRequestPanelLine
+{
+public:
+	MvQNoneLine(RequestPanel& owner,const Parameter& param);
+	~MvQNoneLine();
+	
+	void gray(bool) {};
+	void mark(bool) {};
+	
+	QString currentValue() {return QString();}
+	void addValue(QString) {}
+	
+	void refresh(const vector<string>&) {};	
+};	
+
+
+#endif
diff --git a/src/Desktop/MvQObjectBrowser.cc b/src/Desktop/MvQObjectBrowser.cc
new file mode 100644
index 0000000..5107a3c
--- /dev/null
+++ b/src/Desktop/MvQObjectBrowser.cc
@@ -0,0 +1,117 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQObjectBrowser.h"
+
+#include <QAction>
+#include <QApplication>
+#include <QCloseEvent>
+#include <QDialogButtonBox>
+#include <QDebug>
+#include <QHBoxLayout>
+#include <QPushButton>
+#include <QSortFilterProxyModel>
+#include <QTreeView>
+#include <QVBoxLayout>
+
+#include "MvQIconObjectModel.h"
+
+MvQObjectBrowser::MvQObjectBrowser(QWidget *parent) : 
+        QDialog(parent)       
+{		
+	//setAttribute(Qt::WA_DeleteOnClose);
+	
+	setWindowTitle("Metview - Icon objects");
+	
+	//Initial size
+	resize(QSize(1100,800));
+		
+	//----------------------------------
+	// Create the object model
+	//----------------------------------
+
+	objectModel_=new MvQIconObjectModel(this);
+		
+	QSortFilterProxyModel* sortModel=new QSortFilterProxyModel(this);
+	sortModel->setSourceModel(objectModel_);
+		
+	//-----------------------------
+	// Layout 
+	//-----------------------------
+	
+	QVBoxLayout *mainLayout = new QVBoxLayout(this);
+	mainLayout->setSpacing(0); 
+	mainLayout->setContentsMargins(1,1,1,1);
+		
+	//--------------------
+	// Icon view
+	//--------------------
+
+	objectView_= new QTreeView(this);	
+	objectView_->setRootIsDecorated(false);
+	objectView_->setSortingEnabled(true); 
+	objectView_->sortByColumn(0,Qt::AscendingOrder); 
+	objectView_->setAlternatingRowColors(true);
+        objectView_->setAllColumnsShowFocus(true);	
+	objectView_->setModel(sortModel);
+	
+	objectView_->setProperty("mvStyle","0");
+	objectView_->sortByColumn(0,Qt::DescendingOrder);
+	objectView_->resizeColumnToContents(0);
+		
+	mainLayout->addWidget(objectView_,1);
+		
+	//--------------------------------------
+	// Buttons
+	//--------------------------------------
+	
+	buttonBox_= new QDialogButtonBox(this);
+	
+	buttonBox_->addButton(QDialogButtonBox::Close);
+	
+	connect(buttonBox_, SIGNAL(clicked(QAbstractButton*)), 
+		this, SLOT(slotButtonClicked(QAbstractButton*)));
+	
+	mainLayout->addWidget(buttonBox_);
+}
+
+MvQObjectBrowser::~MvQObjectBrowser()
+{	
+}
+
+void MvQObjectBrowser::closeEvent(QCloseEvent* event)
+{
+	close();
+	event->accept();
+}
+
+void MvQObjectBrowser::slotButtonClicked(QAbstractButton* button)
+{
+	if(!button) return;
+	
+	if(buttonBox_->standardButton(button) == QDialogButtonBox::Close)
+	{
+		close();
+		accept();  	
+	}  
+}  
+ 
+//====================================================
+//
+// Read/write settings
+//
+//====================================================
+
+void MvQObjectBrowser::writeSettings(QSettings &settings)
+{
+}	
+
+void MvQObjectBrowser::readSettings(QSettings &settings)
+{
+}	
diff --git a/src/Desktop/MvQObjectBrowser.h b/src/Desktop/MvQObjectBrowser.h
new file mode 100644
index 0000000..6ff366f
--- /dev/null
+++ b/src/Desktop/MvQObjectBrowser.h
@@ -0,0 +1,53 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQObjectBrowser_H
+#define MvQObjectBrowser_H
+ 
+#include <QDialog>
+#include <QSettings>
+
+class Folder;
+class MvQFolderModel;
+
+class IconClass;
+class IconObject;
+
+class QAbstractButton;
+class QCloseEvent;
+class QDialogButtonBox;
+class QTreeView;
+
+class MvQIconObjectModel;
+
+using namespace std;
+
+class MvQObjectBrowser : public QDialog
+{
+    Q_OBJECT
+
+public:
+	MvQObjectBrowser(QWidget* parent=0);
+	~MvQObjectBrowser();
+	
+	void writeSettings(QSettings &);
+	void readSettings(QSettings &);
+
+public slots:	
+	void slotButtonClicked(QAbstractButton*);
+
+protected:
+	void closeEvent(QCloseEvent*);	
+	
+	MvQIconObjectModel* objectModel_;
+	QTreeView* objectView_; 
+	QDialogButtonBox* buttonBox_;
+};
+
+#endif
diff --git a/src/Desktop/MvQPageView.cc b/src/Desktop/MvQPageView.cc
new file mode 100644
index 0000000..4acabec
--- /dev/null
+++ b/src/Desktop/MvQPageView.cc
@@ -0,0 +1,2128 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQPageView.h"
+
+#include <QApplication>
+#include <QDebug>
+#include <QGraphicsRectItem>
+#include <QGraphicsScene>
+#include <QGraphicsSceneMouseEvent>
+#include <QKeyEvent>
+#include <QLinearGradient>
+#include <QPainter>
+#include <QUndoStack>
+
+#include "MvRequest.h"
+
+#include "MvQIconMimeData.h"
+#include "MvQIconProvider.h"
+
+vector<string> MvQPageView::classes_;
+QMap<MvQPageHandlerItem::HandlerType,QPixmap> MvQPageHandlerItem::pix_;
+QMap<MvQPageHandlerItem::HandlerType,QPixmap> MvQPageHandlerItem::pixHover_;
+
+//========================================
+//
+// MvQPageHandlerItem
+//
+//========================================
+
+MvQPageHandlerItem::MvQPageHandlerItem(MvQPageSelectionItem* page,HandlerType type) :
+ page_(page),
+ type_(type),
+ hover_(false)
+{
+	setFlag(ItemIsMovable);
+	setFlag(ItemSendsGeometryChanges);
+	setAcceptHoverEvents(true); 
+
+	//12x12 pixmaps
+	setupPixmap();
+		
+	bRect_=QRectF(0,0,12,12);
+	float delta=6;
+	
+	switch(type_)
+	{
+	case TopLeft:	
+		bRect_.moveTo(-2*delta,-2*delta);
+		break;
+	case TopMid:			  	
+		bRect_.moveTo(-delta,-2*delta);
+		break;	
+	case TopRight:		
+	  	bRect_.moveTo(0,-2*delta);
+		break;
+	case RightMid:		
+	  	bRect_.moveTo(0,-delta);
+		break;		
+	case BottomRight:		
+		break;	
+	case BottomMid:		
+	  	bRect_.moveTo(-delta,0);
+		break;		
+	case BottomLeft:		
+	  	bRect_.moveTo(-2*delta,0);
+		break;
+	case LeftMid:		
+	  	bRect_.moveTo(-2*delta,-delta);
+		break;		
+	default:
+	  	break;
+	}	  	
+
+	updatePosition();
+	
+	setParentItem(page_);
+}  
+
+void MvQPageHandlerItem::setupPixmap()
+{
+ 	if(pix_.count() !=0)
+	  	return;
+	
+	pix_[TopLeft]=QPixmap(":/desktop/cursor_bdiag.svg");
+	pix_[TopMid]=QPixmap(":/desktop/cursor_vert.svg");
+	pix_[TopRight]=QPixmap(":/desktop/cursor_fdiag.svg");
+	pix_[RightMid]=QPixmap(":/desktop/cursor_horiz.svg");
+	pix_[BottomRight]=pix_[TopLeft];
+	pix_[BottomMid]=pix_[TopMid];
+	pix_[BottomLeft]=pix_[TopRight];
+	pix_[LeftMid]=pix_[RightMid];
+	
+	pixHover_[TopLeft]=QPixmap(":/desktop/cursor_bdiag_hover.svg");
+	pixHover_[TopMid]=QPixmap(":/desktop/cursor_vert_hover.svg");
+	pixHover_[TopRight]=QPixmap(":/desktop/cursor_fdiag_hover.svg");
+	pixHover_[RightMid]=QPixmap(":/desktop/cursor_horiz_hover.svg");
+	pixHover_[BottomRight]=pixHover_[TopLeft];
+	pixHover_[BottomMid]=pixHover_[TopMid];
+	pixHover_[BottomLeft]=pixHover_[TopRight];
+	pixHover_[LeftMid]=pixHover_[RightMid];	
+}
+
+QRectF MvQPageHandlerItem::boundingRect() const
+{
+	return bRect_;
+}
+
+void MvQPageHandlerItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *,QWidget*)
+{
+     	if(!hover_)
+	  	painter->drawPixmap(bRect_.topLeft(),pix_[type_]);
+  	else 
+	  	painter->drawPixmap(bRect_.topLeft(),pixHover_[type_]);
+} 
+
+void MvQPageHandlerItem::updatePosition()
+{
+	QRectF r=page_->boundingRect();
+  	
+  	switch(type_)
+	{
+	case TopLeft:		
+	  	setPos(r.topLeft());
+		break;
+	case TopMid:		
+	  	setPos(r.center().x(),r.y());
+		break;	
+	case TopRight:		
+	  	setPos(r.topRight());
+		break;
+	case RightMid:		
+	  	setPos(r.topRight().x(),r.center().y());
+		qDebug() << "right" << pos();
+		break;		
+	case BottomRight:		
+	  	setPos(r.bottomRight());
+		break;	
+	case BottomMid:		
+	  	setPos(r.center().x(),r.bottomRight().y());
+		break;		
+	case BottomLeft:		
+	  	setPos(r.bottomLeft());
+		break;
+	case LeftMid:		
+	  	setPos(r.x(),r.center().y());
+		break;		
+	default:
+	  	break;
+	}	  
+  
+  
+} 
+
+QVariant MvQPageHandlerItem::itemChange(GraphicsItemChange change, const QVariant &value)
+ {
+   	/*QRectF r=page_->boundingRect();
+	
+	if(change == ItemPositionHasChanged)	  
+     	{ 	
+		switch(type_)
+		{	   
+		case TopMid: r.setTop(pos().y()); break;
+		default: break;
+		}
+		
+		page_->handlerMoved(r);		
+	}*/
+	
+     	return QGraphicsItem::itemChange(change, value);
+}
+
+void MvQPageHandlerItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+	update();
+	
+	QGraphicsItem::mousePressEvent(event);
+		
+	page_->handlerPressed(this);
+}	
+
+void MvQPageHandlerItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+	QRectF r=page_->boundingRect();		
+	QPointF pp=mapToParent(event->pos());
+	
+	switch(type_)
+	{	   
+	case TopLeft: 
+		r.setTopLeft(pp);
+		break;
+	case TopMid: 
+  		setPos(QPointF(r.center().x(),pp.y()));
+		r.setTop(pos().y());
+		break;
+	case TopRight: 
+		r.setTopRight(pp);
+		break;
+	case RightMid: 
+  		qDebug() << "right" << pos();
+		setPos(QPointF(pp.x(),r.center().y()));
+		r.setRight(pos().x());
+		break;	
+	case BottomRight: 
+		r.setBottomRight(pp);
+		break;	
+	case BottomMid: 
+  		setPos(QPointF(r.center().x(),pp.y()));
+		r.setBottom(pos().y());
+		break;	
+	case BottomLeft: 
+		r.setBottomLeft(pp);
+		break;	
+	case LeftMid: 
+  		setPos(QPointF(pp.x(),r.center().y()));
+		r.setLeft(pos().x());
+		break;		
+	default:
+	  	break;
+	}
+	
+	page_->handlerMoved(this,r);	
+	
+}	
+
+void MvQPageHandlerItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+	QGraphicsItem::mouseReleaseEvent(event);
+	page_->handlerReleased(this);
+}	
+
+
+void MvQPageHandlerItem::hoverEnterEvent(QGraphicsSceneHoverEvent *)
+{
+ 	 hover_=true;
+	 update();
+}  
+
+void MvQPageHandlerItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *)
+{
+ 	 hover_=false;
+	 update();
+}  
+
+
+//========================================
+//
+// MvQPageSelectionItem
+//
+//========================================
+
+MvQPageSelectionItem::MvQPageSelectionItem(MvQPageView *view,MvQSuperPageItem* super) : 
+   view_(view),
+   superPage_(super),
+   handlerUsed_(false)
+ 
+{	
+  	pen_=QPen(Qt::DashLine);
+	pen_.setColor(Qt::black);
+	brush_=QBrush(QColor(0,0,255,100));
+  	
+	setAcceptDrops(true);
+	
+  	setZValue(2);
+  	setParentItem(superPage_);
+	createHandlers();
+	hide();
+		
+	//setAcceptDrops(true);
+}
+
+QRectF MvQPageSelectionItem::boundingRect() const
+{
+	return bRect_;
+}
+
+void MvQPageSelectionItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *,QWidget*)
+{
+	//painter->fillRect(bRect_,brush_);
+	
+	painter->setPen(pen_);
+	painter->drawRect(bRect_);
+	
+} 	
+
+void MvQPageSelectionItem::adjust(QRectF r)
+{
+  	prepareGeometryChange();	
+	bRect_=QRectF(0,0,r.width(),r.height());
+	setPos(r.topLeft());
+	foreach(MvQPageHandlerItem *h,handlers_)
+	  	h->updatePosition();
+	update();
+}
+
+void MvQPageSelectionItem ::createHandlers()
+{
+  	//Add handlersMvQPageItem::
+	if(handlers_.isEmpty())
+	{  	
+		MvQPageHandlerItem *item;
+		
+		item=new MvQPageHandlerItem(this,MvQPageHandlerItem::TopLeft);
+		handlers_ << item;
+		
+		item=new MvQPageHandlerItem(this,MvQPageHandlerItem::TopMid);
+		handlers_ << item;
+		
+		item=new MvQPageHandlerItem(this,MvQPageHandlerItem::TopRight);
+		handlers_ << item;
+		
+		item=new MvQPageHandlerItem(this,MvQPageHandlerItem::RightMid);
+		handlers_ << item;
+		
+		item=new MvQPageHandlerItem(this,MvQPageHandlerItem::BottomRight);
+		handlers_ << item;
+		
+		item=new MvQPageHandlerItem(this,MvQPageHandlerItem::BottomMid);
+		handlers_ << item;
+		
+		item=new MvQPageHandlerItem(this,MvQPageHandlerItem::BottomLeft);
+		handlers_ << item;
+		
+		item=new MvQPageHandlerItem(this,MvQPageHandlerItem::LeftMid);
+		handlers_ << item;			
+	}	
+}	
+
+void MvQPageSelectionItem::handlerPressed(MvQPageHandlerItem *)
+{
+	oriRect_=bRect_;
+	oriPageRect_.clear();
+	foreach(MvQPageItem* item, pages_)
+		oriPageRect_ << item->paperRect();
+	
+	handlerUsed_=true;
+	
+}
+
+//Here rect is in item coordiantes
+void MvQPageSelectionItem::handlerMoved(MvQPageHandlerItem */*handler*/,QRectF rect)
+{
+	if(!handlerUsed_)
+	  	return;
+
+	prepareGeometryChange();
+
+	QRectF oriRect=mapToParent(bRect_).boundingRect();
+	
+	qDebug() << "oriRect" << oriRect << rect;
+	
+	if(superPage_->adjustItemResize(this,rect))
+	{  	
+		QPointF dp=rect.topLeft()-bRect_.topLeft();
+		bRect_=QRectF(0,0,rect.width(),rect.height());
+		setPos(pos()+dp);
+	}
+	
+	foreach(MvQPageHandlerItem *h,handlers_)
+			h->updatePosition();	
+		
+	QRectF newRect=mapToParent(bRect_).boundingRect();
+	
+	qDebug() << "  --> newRect" << oriRect;
+	
+	foreach(MvQPageItem* item, pages_)
+	{
+	  	item->adjustSizeToSelector(newRect,oriRect);
+	  
+	}  
+}  
+
+void MvQPageSelectionItem::handlerReleased(MvQPageHandlerItem *)
+{
+	if(oriRect_ != bRect_)
+	{		  	
+	  	view_->pagesResized(pages_,oriPageRect_);
+	}
+	
+	oriPageRect_.clear();
+	
+	handlerUsed_=false;
+}
+
+void MvQPageSelectionItem::mousePressEvent(QGraphicsSceneMouseEvent* event)
+{
+ 	if(handlerUsed_)
+ 		return;
+	
+	qDebug() << "PRESS";
+	
+ 	oriPos_ = pos();
+	dragPos_=mapToParent(event->pos());
+}	
+
+  
+  
+void MvQPageSelectionItem::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
+{ 
+  	if(handlerUsed_)
+ 		return;
+	
+	qDebug() << "MOVE";
+	
+	QPointF delta=mapToParent(event->pos())-dragPos_;
+	
+	QPointF prevPos=pos();
+	QPointF pp=pos()+delta;
+	
+	superPage_->adjustItemMove(this,pp);
+	setPos(pp);
+	update();
+	
+	if(superPage_->adjustItemMove(this,pp))
+	{		
+		setPos(pp);
+		update();
+	}	
+	
+	delta=pos()-prevPos;	
+	foreach(MvQPageItem* item, pages_)
+	{
+	  	item->moveBy(delta);	  
+	}  
+
+	dragPos_+=delta;
+} 
+
+void MvQPageSelectionItem::mouseReleaseEvent(QGraphicsSceneMouseEvent*)
+{	
+  	if(handlerUsed_)
+ 		return;
+	
+	qDebug() << "RELEASE";
+	
+	if(oriPos_ != pos())
+		view_->pagesMoved(pages_,pos()-oriPos_);
+	
+	oriPos_=pos();
+	
+	ungrabMouse();
+}
+
+
+void MvQPageSelectionItem::selectionChanged()
+{
+  	pages_.clear();
+  
+  	if(!superPage_)
+	  	return;
+		
+  	foreach(QGraphicsItem* item,superPage_->childItems())
+	{
+	  	if(item->isSelected() && item->type() == MvQ::PageItemType)
+			  pages_ << static_cast<MvQPageItem*>(item);
+	}
+	
+	qDebug() << "SELCTION" << pages_.count() ;
+	
+	if(pages_.count() == 0)
+	{
+	  	hide();
+	}
+	else
+	{  	
+		QRectF br;
+	
+	  	QRectF p=pages_.at(0)->boundingRect();
+	        br=pages_.at(0)->mapToParent(p).boundingRect();
+	  	for(int i=1; i < pages_.count(); i++)
+		{
+		  	p=pages_.at(i)->boundingRect();
+		  	br=br.united(pages_.at(i)->mapToParent(p).boundingRect());
+		}		
+		
+		adjust(br);
+		
+		show();
+	}
+}	
+
+void MvQPageSelectionItem::pagePressed(MvQPageItem *item,QGraphicsSceneMouseEvent* event)
+{
+	if(pages_.count() == 1 &&  pages_.at(0) == item)  
+	{	  	
+ 		qDebug() << "SELECTION PRESSED";
+	  
+	  	oriPos_ = pos();
+		//Event is valid for item!!
+		dragPos_=item->mapToParent(event->pos()); 
+	
+		setSelected(true);
+		grabMouse();
+	}	
+}  
+
+
+void MvQPageSelectionItem::dropEvent(QGraphicsSceneDragDropEvent *event)   
+{
+	if(event->mimeData()->hasFormat("metview/icon"))
+	{	
+		const MvQIconMimeData* mimeData=qobject_cast<const MvQIconMimeData*>(event->mimeData());
+				
+		if(!mimeData)
+		{	
+		  	return;
+		}
+				
+		IconObjectH obj=mimeData->dragObject();
+	
+		if(obj && MvQPageView::matchClass(obj->className()))
+		{
+			foreach(MvQPageItem* item, pages_)
+			{
+	  			item->setViewIcon(obj);	
+			}
+		}   		 
+	}	
+}  
+
+//========================================
+//
+// MvQSubPageItem
+//
+//========================================
+
+MvQSubPageItem::MvQSubPageItem(MvQPageItem *page) :
+	page_(page)
+{
+  
+}
+
+//========================================
+//
+// MvQPageItem
+//
+//========================================
+
+MvQPageItem::MvQPageItem(MvQPageView *view,QRectF rect,MvQSuperPageItem* superPage) : 
+   view_(view),
+   paperRect_(rect),
+   superPage_(superPage),
+   viewIcon_(0),
+   mouseMove_(false)
+{  
+  	bRect_=QRectF(0,0,
+		      0.01*paperRect_.width()*superPage_->boundingRect().width(),
+		      0.01*paperRect_.height()*superPage_->boundingRect().height());
+		
+	setPos(0.01*paperRect_.x()*superPage_->boundingRect().width(),
+	       0.01*paperRect_.y()*superPage_->boundingRect().height());	      
+		        
+	setAcceptDrops(true);
+	//setFlag(ItemIsMovable);
+	setFlag(QGraphicsItem::ItemIsSelectable);
+	setFlag(QGraphicsItem::ItemIsFocusable);
+	//setFlag(ItemSendsGeometryChanges);
+	
+	pen_=QPen(Qt::black);
+	//pen_=QPen(QColor(8,54,146),1);
+	pen_.setCosmetic(true);
+	
+	//brush_=QBrush(QColor(235,235,235,170));
+	brush_=QBrush(QColor(222,230,240,160));
+	
+	selectionPen_=QPen(Qt::black);
+	selectionPen_.setCosmetic(true);
+	selectionPen_.setStyle(Qt::DotLine);
+	
+	subPen_=QPen(Qt::blue);
+	subPen_.setCosmetic(true);
+	subPen_.setStyle(Qt::DashLine);	
+}
+
+QRectF MvQPageItem::boundingRect() const
+{
+	return bRect_;
+}
+
+void MvQPageItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *,QWidget*)
+{
+     	if(sub_.count() == 0)
+	{
+     		painter->fillRect(bRect_,brush_);
+	}
+	else
+	{  
+		painter->setPen(subPen_);
+		
+		float w=bRect_.width();
+		float h=bRect_.height();
+		
+		for(int i=0; i < sub_.count(); i++)
+		{
+			QRectF subR=sub_[i].second;
+	  		QRectF sr(subR.x()*w/100.,
+				  subR.y()*h/100.,
+				  subR.width()*w/100.,
+				  subR.height()*h/100.);
+			
+			painter->fillRect(sr,brush_);
+			painter->drawRect(sr);
+		  	
+		}
+	}	
+	
+	painter->setPen((isSelected()==true)?selectionPen_:pen_);
+     	painter->drawRect(bRect_);
+		
+	if(!viewPix_.isNull())
+	{
+		QFont font;
+		QFontMetrics fm(font);
+			
+	  	float pw=viewPix_.width();
+		float ph=viewPix_.height();
+			
+		if(pw< bRect_.width()-8 && ph < bRect_.height()-8)
+		{  		
+			QPoint targetPos(bRect_.center().x()-0.5*pw,
+			           bRect_.center().y()-0.5*ph);
+			    			  		
+			painter->drawPixmap(targetPos,viewPix_);
+			
+			QString name=QString::fromStdString(viewIcon_->name());
+			int tw=fm.width(name);
+			float tx=bRect_.center().x()-tw/2;
+			float ty=bRect_.center().y()+0.5*ph+3+fm.height();
+		
+			painter->setPen(Qt::black);
+			
+			if(tw < bRect_.width()-6 && ty < bRect_.bottom()-4)
+			{
+				painter->drawText(tx,ty,name);
+			}
+			
+			
+		}
+		else 
+		{
+		  	pw=viewPixHalf_.width();
+			ph=viewPixHalf_.height();
+			
+			if(pw< bRect_.width()-8 && ph < bRect_.height()-8)
+			{
+			  	QPoint targetPos(bRect_.center().x()-0.5*pw,
+			           	bRect_.center().y()-0.5*ph);
+			    			  		
+				painter->drawPixmap(targetPos,viewPixHalf_);
+			}
+		}
+	}		
+		
+} 
+
+QVariant MvQPageItem::itemChange(GraphicsItemChange change, const QVariant &value)
+{
+	if(change == ItemSelectedHasChanged)	  
+     	{ 	
+		view_->pageSelected(this);
+	}	
+	
+     	return QGraphicsItem::itemChange(change, value);
+}
+
+void MvQPageItem::mousePressEvent(QGraphicsSceneMouseEvent* event) 
+{
+ 	QPointF oriPos = pos();
+	QPointF dragPos=mapToParent(event->pos());
+	
+	QGraphicsItem::mousePressEvent(event);
+	QGraphicsItem::mouseReleaseEvent(event);
+	
+	qDebug() << "ITEM PRESSED" << oriPos << dragPos;
+	
+	view_->pagePressed(this,event);
+}  
+
+void MvQPageItem::keyPressEvent(QKeyEvent *event) 
+{
+	qDebug() << "key" << event->key();
+        if(event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete)
+	{
+	  	qDebug() <<  "delete item";
+	}	
+}  
+
+void MvQPageItem::setViewIcon(IconObjectH obj)
+{
+  	viewIcon_=obj;
+	
+	if(viewIcon_)
+	{
+	  	viewPix_=MvQIconProvider::pixmap(viewIcon_,32);
+		viewPixHalf_=MvQIconProvider::pixmap(viewIcon_,16);
+	}	
+	else
+	{
+	  	viewPix_=QPixmap();
+		viewPixHalf_=QPixmap();
+	}
+	
+	update();
+}
+
+
+void MvQPageItem::adjustSize()
+{
+	prepareGeometryChange();
+	
+	bRect_=QRectF(0,0,
+		      0.01*paperRect_.width()*superPage_->boundingRect().width(),
+		      0.01*paperRect_.height()*superPage_->boundingRect().height());
+		
+	setPos(0.01*paperRect_.x()*superPage_->boundingRect().width(),
+	       0.01*paperRect_.y()*superPage_->boundingRect().height());	
+	       
+	//foreach(MvQPageHandlerItem *h,handlers_)
+	//  	h->updatePosition();
+	
+}
+
+void MvQPageItem::adjustPaperRect()
+{
+	float w=superPage_->boundingRect().width();
+	float h=superPage_->boundingRect().height();
+	
+	paperRect_=QRectF(100.*pos().x()/w,
+		      100.*pos().y()/h,
+		      100.*bRect_.width()/w,
+		      100.*bRect_.height()/h);		      
+}
+
+QRectF MvQPageItem::rectToSelector(QRectF rectNew,QRectF rectOri)
+{
+	QRectF itemRect=mapToParent(boundingRect()).boundingRect();				
+		
+	float hRatio=rectNew.height()/rectOri.height();
+	float wRatio=rectNew.width()/rectOri.width();
+		
+	float top=rectNew.top()+(itemRect.top()-rectOri.top())*hRatio;
+	float bottom=rectNew.bottom()-(rectOri.bottom()-itemRect.bottom())*hRatio;
+	float left=rectNew.left()+(itemRect.left()-rectOri.left())*wRatio;
+	float right=rectNew.right()-(rectOri.right()-itemRect.right())*wRatio;
+		
+	return QRectF(left,top,right-left,bottom-top);
+}
+
+
+void MvQPageItem::adjustSizeToSelector(QRectF rectNew,QRectF rectOri)
+{
+	/*QRectF itemRect=mapToParent(boundingRect()).boundingRect();				
+		
+	float hRatio=rectNew.height()/rectOri.height();
+	float wRatio=rectNew.width()/rectOri.width();
+		
+	float top=rectNew.top()+(itemRect.top()-rectOri.top())*hRatio;
+	float bottom=rectNew.bottom()-(rectOri.bottom()-itemRect.bottom())*hRatio;
+	float left=rectNew.left()+(itemRect.left()-rectOri.left())*wRatio;
+	float right=rectNew.right()-(rectOri.right()-itemRect.right())*wRatio;
+		
+	itemRect=QRectF(left,top,right-left,bottom-top);*/
+	
+	QRectF itemRect=rectToSelector(rectNew,rectOri);
+	
+	resize(itemRect);
+}
+
+
+void MvQPageItem::resize(QRectF rect)
+{
+	prepareGeometryChange();
+
+	//QPointF dp=bRect_.topLeft()-rect.topLeft();
+	bRect_=QRectF(0,0,rect.width(),rect.height());
+	setPos(rect.topLeft());
+		
+	adjustPaperRect();
+	
+	/*float w=superPage_->boundingRect().width();
+	float h=superPage_->boundingRect().height();
+	
+	QRectF oriRect=paperRect_;
+	
+	paperRect_=QRectF(100.*pos().x()/w,
+		      100.*pos().y()/h,
+		      100.*rect.width()/w,
+		      100.*rect.height()/h);*/
+		      	
+}  
+
+void MvQPageItem::moveBy(QPointF delta)
+{
+ 	qDebug() << "moveby";
+  
+  	prepareGeometryChange(); 
+	setPos(pos()+delta);
+	adjustPaperRect(); 
+}  
+
+
+void MvQPageItem::dropEvent(QGraphicsSceneDragDropEvent *event)   
+{
+	if(event->mimeData()->hasFormat("metview/icon"))
+	{	
+		const MvQIconMimeData* mimeData=qobject_cast<const MvQIconMimeData*>(event->mimeData());
+				
+		if(!mimeData)
+		{	
+		  	return;
+		}
+				
+		IconObjectH obj=mimeData->dragObject();
+	
+		if(obj && MvQPageView::matchClass(obj->className()))
+		{
+		 	setViewIcon(obj);
+			//view_->pageResized();
+		}					 
+	}	
+}  
+
+void MvQPageItem::setPaperRect(QRectF pr)
+{
+  	paperRect_=pr;
+  	adjustSize();
+}  
+
+void MvQPageItem::paperRect(double &top, double &left, double &bottom, double &right)
+{
+	top= paperRect_.y();
+	left = paperRect_.x() ;
+	bottom = paperRect_.bottomLeft().y(); 
+	right = paperRect_.topRight().x() ;
+}
+
+void MvQPageItem::addSubPaperRect(MvQPageItem *item,QRectF r)
+{
+	float xr=paperRect_.width();	
+  	float yr=paperRect_.height();
+	
+  	QRectF sp(100.*(r.x()-paperRect_.x())/xr,
+		  100.*(r.y()-paperRect_.y())/yr,
+		  100.*r.width()/xr,
+		  100.*r.height()/yr);
+		
+	sub_ << qMakePair(item,sp);
+}  
+
+void MvQPageItem::addSubPaperRectInPageCoords(double x, double y, double w, double h)
+{
+  	sub_ << QPair<MvQPageItem*,QRectF>(0,QRectF(x,y,w,h));
+}
+
+
+QList<QRectF> MvQPageItem::subPaperRects() const
+{
+  	QList<QRectF> lst;
+	for(int i=0; i < sub_.count(); i++)
+		lst << sub_[i].second;
+	
+	return lst;
+}	
+
+
+void MvQPageItem::clearSubPaperRects()
+{
+	sub_.clear();
+}
+
+MvQPageItem* MvQPageItem::subPage(int i) const
+{
+	return (i>=0 && i < sub_.count())?(sub_[i].first):0;
+}  
+  
+QPointF MvQPageItem::paperToItem(QPointF pp)
+{
+ 	return superPage_->percentageToItem(pp);	
+} 
+
+QPointF MvQPageItem::itemToPaper(QPointF pp)
+{
+ 	return superPage_->itemToPercentage(pp);
+} 
+  
+//========================================
+//
+// MvQSuperPageItem
+//
+//========================================
+
+MvQSuperPageItem::MvQSuperPageItem(MvQPageView *view,double w,double h,
+				   bool snap,float snapX,float snapY,bool grid) :
+ view_(view),
+ paperRect_(0.,0.,w,h),
+ bRect_(0.,0.,w,h),
+ scaling_(1.),
+ snap_(snap),
+ snapX_(snapX),
+ snapY_(snapY),
+ grid_(grid)
+{
+  	gridPen_=QPen(QColor(190,190,190));
+	gridPen_.setStyle(Qt::DashLine);
+}
+
+QRectF MvQSuperPageItem::boundingRect() const
+{
+	return bRect_;
+}
+
+void MvQSuperPageItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *,QWidget*)
+{
+     	painter->fillRect(bRect_,Qt::white);
+     	
+     	painter->setPen(Qt::black);
+     	painter->drawRect(bRect_);
+	
+	if(grid_)
+	{
+	  	painter->setPen(gridPen_);
+			
+		for(float x=0; x <= 100. ; x+=snapX_)
+		{
+		  	QPointF p1=percentageToItem(QPointF(x,0));
+			QPointF p2=percentageToItem(QPointF(x,100));
+		  	painter->drawLine(p1,p2);
+		}	
+		
+	  	for(float y=0; y <= 100. ; y+=snapY_)
+		{
+		  	QPointF p1=percentageToItem(QPointF(0,y));
+			QPointF p2=percentageToItem(QPointF(100,y));
+		  	painter->drawLine(p1,p2);
+		}	
+		
+	}		  
+}  
+
+MvQPageItem* MvQSuperPageItem::addPage(double x,double y,double w, double h)
+{
+	QRectF rect(x,y,w,h);
+	
+	MvQPageItem *item=new MvQPageItem(view_,rect,this);
+	item->setParentItem(this);		
+	
+	return item;
+}	
+
+
+void MvQSuperPageItem::resize(double w,double h)
+{
+	paperRect_=QRectF(0.,0.,w,h);		
+}  
+  
+  	
+void MvQSuperPageItem::adjustSize(QSize size)
+{
+	float wRatio=size.width()/paperRect_.width();
+	float hRatio=size.height()/paperRect_.height();		
+	scaling_=(wRatio < hRatio)?wRatio:hRatio;
+	
+	prepareGeometryChange();
+
+	bRect_.setSize(paperRect_.size()*scaling_);
+	
+	foreach(MvQPageItem *p, pages())
+		if(p) p->adjustSize(); 
+}
+
+QRectF MvQSuperPageItem::itemToPercentage(QRectF r)
+{
+	  return QRectF(itemToPercentage(r.topLeft()),
+			itemToPercentage(r.bottomRight()));
+}  
+
+QPointF MvQSuperPageItem::itemToPercentage(QPointF pp)
+{
+ 	return QPointF(100.*pp.x()/(paperRect_.width()*scaling_),
+		       100.*pp.y()/(paperRect_.height()*scaling_));	
+} 
+
+QPointF MvQSuperPageItem::percentageToItem(QPointF pp)
+{
+ 	return QPointF(0.01*pp.x()*paperRect_.width()*scaling_,
+		       0.01*pp.y()*paperRect_.height()*scaling_);	
+} 
+
+
+QPointF MvQSuperPageItem::paperToItem(QPointF pp)
+{
+ 	return pp*scaling_; 	
+} 
+
+QPointF MvQSuperPageItem::itemToPaper(QPointF pp)
+{
+ 	return pp/scaling_; 	
+} 
+
+  
+QPointF MvQSuperPageItem::snapToGrid(QPointF pp)
+{
+	if(!snap_)
+	  	return pp;
+
+	pp=itemToPercentage(pp);
+	
+
+	double xn=rint(pp.x()/snapX_);
+	double yn=rint(pp.y()/snapY_);
+	pp=percentageToItem(QPointF(xn*snapX_,yn*snapY_));
+
+	if(pp.x() < 0)
+	  	pp.setX(0);	
+	
+	if(pp.x() > bRect_.width())
+	  	pp.setX(bRect_.width());
+	
+	if(pp.y() < 0)
+	  	pp.setY(0);	
+	
+	if(pp.y() > bRect_.height())
+	  	pp.setY(bRect_.height());
+	
+	return pp;
+}  
+  
+QRectF MvQSuperPageItem::snapToGrid(QRectF r)
+{
+	if(!snap_)
+	  	return r;
+
+	QPointF pp=itemToPercentage(r.topLeft());
+	
+	double xn=rint(pp.x()/snapX_);
+	double yn=rint(pp.y()/snapY_);
+	
+	pp=percentageToItem(QPointF(xn*snapX_,yn*snapY_));	
+	r.moveTo(pp);
+	
+	if(r.left() < 0)
+	  	r.moveLeft(0);	
+	
+	if(r.right() > bRect_.width())
+	{
+		pp=r.topLeft();
+	  	QPointF delta(r.right()-bRect_.width(),0);
+		delta=itemToPercentage(delta);
+		xn=ceil(delta.x()/snapX_);
+		pp=itemToPercentage(pp);
+		pp-=QPointF(xn*snapX_,0);
+		pp=percentageToItem(pp);
+		r.moveLeft(pp.x());
+	}	
+	
+	if(r.top() < 0)
+	  	r.moveTop(0);	
+	
+	if(r.bottom() > bRect_.height())
+	{
+	  	pp=r.bottomRight();
+	  	QPointF delta(0,r.bottom()-bRect_.height());
+		delta=itemToPercentage(delta);
+		yn=ceil(delta.y()/snapY_);
+		pp=itemToPercentage(pp);
+		pp-=QPointF(0,yn*snapY_);
+		pp=percentageToItem(pp);
+		r.moveBottom(pp.y());
+	  
+	  
+	} 	
+	return r;
+}  
+ 
+bool MvQSuperPageItem::adjustItemMove(QGraphicsItem* item,QPointF &pp)
+{	
+	//r is in item coordinates
+  
+  	qDebug() << "adjustItemMove";
+  
+  	QRectF r=mapFromItem(item,item->boundingRect()).boundingRect();
+  	r.moveTo(pp);
+	
+	bool adjusted=false;	
+	
+	if(r.x() < bRect_.x())
+	{
+	  	pp.setX(bRect_.x());
+		adjusted=true;
+	}
+	if(r.topRight().x() > bRect_.topRight().x())
+	{
+		pp.setX(bRect_.topRight().x()-r.width());  
+		adjusted=true;
+	}
+	if(r.y() < bRect_.y())
+	{
+	  	pp.setY(bRect_.y());
+		adjusted=true;
+	}
+	if(r.bottomRight().y() > bRect_.bottomRight().y())
+	{
+	  	pp.setY(bRect_.bottomRight().y()-r.height());
+		adjusted=true;
+	}
+	
+	if(snap_)
+	{
+	  	r.moveTo(pp);
+		r=snapToGrid(r);
+		pp=r.topLeft();
+		adjusted=true;
+	}	
+	
+	return adjusted;
+}
+
+
+bool MvQSuperPageItem::adjustItemResize(QGraphicsItem* item,QRectF &r)
+{	
+	if(r.width() < 8 || r.height() < 8)
+	  	return false;
+	
+	//r is in item coordinates!
+  	r=mapFromItem(item,r).boundingRect();
+  	
+	qDebug() << "adj resize" << r << bRect_;
+	
+	r=bRect_.intersected(r);
+	
+	if(snap_)
+	{
+	  	QPointF tl=snapToGrid(r.topLeft());
+		QPointF br=snapToGrid(r.bottomRight());
+		
+		r=QRectF(tl,br);
+	}
+	
+
+	r=mapToItem(item,r).boundingRect();
+		
+	qDebug() << "  -->" << r;
+	
+	return true;
+	
+}	
+  	
+void MvQSuperPageItem::enableSnap(bool b)
+{
+	snap_=b;
+	update();
+}  
+
+void MvQSuperPageItem::setSnap(float x,float y)
+{
+	bool changed=false;
+  	if(snapX_!=x)
+	{  	
+	  	snapX_=x;
+		changed=true;
+	}
+	if(snapY_!=y)
+	{  	
+	  	snapY_=y;
+		changed=true;
+	}
+	if(snap_ && changed)
+		update();
+}   
+
+void MvQSuperPageItem::enableGrid(bool b)
+{
+	grid_=b;
+	update();
+}
+
+QList<MvQPageItem*> MvQSuperPageItem::pages() const
+{
+	QList<MvQPageItem*> lst;
+	foreach(QGraphicsItem* item,childItems())
+	{	
+	  	if(item->type() == MvQ::PageItemType)
+		  	lst << static_cast<MvQPageItem*>(item);				
+	}
+	return lst;
+	
+}
+
+//========================================
+//
+// MvQRulerItem
+//
+//========================================
+
+MvQRulerItem::MvQRulerItem(MvQPageView *view,Qt::Orientation ori) :
+ view_(view),
+ orientation_(ori),
+ pen_(Qt::black),
+ subPen_(QColor(100,100,100)),
+ halfLen_(7),
+ subLen_(4)
+{
+  	font_.setPointSize(6);
+	
+	QLinearGradient gr;
+	gr.setCoordinateMode(QGradient::ObjectBoundingMode);
+	gr.setStart(0,0);
+	
+	if(orientation_== Qt::Horizontal)
+		gr.setFinalStop(0,1);
+	else
+	  	gr.setFinalStop(1,0);
+	
+     	gr.setColorAt(0, QColor(252,252,252));
+	gr.setColorAt(1, QColor(220,220,220));
+	bg_=QBrush(gr);
+	
+}  
+  
+QRectF MvQRulerItem::boundingRect() const
+{
+	return bRect_;
+}
+
+void MvQRulerItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *,QWidget*)
+{
+     	painter->fillRect(bRect_,bg_);
+     	
+     	painter->setPen(pen_);
+     	painter->drawRect(bRect_);	
+	painter->setFont(font_);
+	
+	QFontMetrics fm(font_);
+	int th=fm.ascent();
+			
+	if(orientation_== Qt::Horizontal)
+	{
+		for(int x=0; x <= 100 ; x+=10)
+		{		  		  
+		  	float xp=bRect_.width()*x/100.;			
+			QString str=QString::number(x);
+			QRectF br;			
+			
+			if(x ==100)
+				br=QRectF(xp-fm.width(str)-1,0,fm.width(str),th);
+			else
+			  	br=QRectF(xp+2,0,fm.width(str),th);
+								
+			painter->drawText(br,Qt::AlignHCenter,str);				
+		  	painter->drawLine(QPointF(xp,2),QPointF(xp,bRect_.height()));
+		}
+		for(int x=5; x <= 95 ; x+=10)
+		{
+		  	float xp=bRect_.width()*x/100.;	
+			painter->drawLine(QPointF(xp,bRect_.height()-halfLen_),QPointF(xp,bRect_.height()));
+		}  
+		
+		painter->setPen(subPen_);
+		
+		for(int x=1; x <= 99 ; x+=1)		  
+		{
+		  	if(x % 5 != 0)
+			{
+			  	float xp=bRect_.width()*x/100.;	
+				painter->drawLine(QPointF(xp,bRect_.height()-subLen_),QPointF(xp,bRect_.height()));
+			}
+		}  	
+	}	
+	else
+	{		
+		for(int y=0; y <= 100 ; y+=10)
+		{		  		  
+		  	float yp=bRect_.height()*y/100.;			
+			QString str=QString::number(y);
+			QRectF br;			
+			
+			if(y == 100)
+				br=QRectF(2,yp-th-1,fm.width(str),th);
+			else
+			  	br=QRectF(2,yp+2,fm.width(str),th);
+								
+			painter->drawText(br,Qt::AlignHCenter,str);				
+		  	painter->drawLine(QPointF(2,yp),QPointF(bRect_.width(),yp));
+		}
+		for(int y=5; y <= 95 ; y+=10)
+		{
+		  	float yp=bRect_.height()*y/100.;	
+			painter->drawLine(QPointF(bRect_.width()-halfLen_,yp),QPointF(bRect_.width(),yp));
+		}  
+		
+		painter->setPen(subPen_);
+		
+		for(int y=1; y <= 99 ; y+=1)		  
+		{
+		  	if(y % 5 != 0)
+			{
+			  	float yp=bRect_.height()*y/100.;	
+				painter->drawLine(QPointF(bRect_.width()-subLen_,yp),QPointF(bRect_.width(),yp));
+			}
+		}  	
+	}	
+	
+	
+	
+}  
+ 
+void MvQRulerItem::adjustSize()
+{
+  	prepareGeometryChange();
+	
+	QRectF br=view_->superPage()->boundingRect();
+	
+	QFontMetrics fm(font_);	
+	int w=fm.width("100")+6;
+	int h=fm.ascent()+8;
+	int d=(w <h)?h:w;
+	
+	if(orientation_ == Qt::Horizontal)
+	{			
+	  	setPos(br.x(),br.y()-d-4);
+		bRect_=QRectF(0,0,br.width(),d);	  
+	}	  
+	else
+	{  	
+	  	setPos(br.x()-d-4,br.y());
+		bRect_=QRectF(0,0,d,br.height());	  
+	}	  
+}
+
+//========================================
+//
+// MvQPageView
+//
+//========================================
+
+MvQPageView::MvQPageView(const vector<string>& classes,QUndoStack *undoStack,QWidget *parent) : 
+  QGraphicsView(parent),
+  undoStack_(undoStack),
+  scene_(0),
+  superPage_(0),
+  selector_(0),
+  rulerH_(0), rulerV_(0)
+{
+	classes_=classes;
+	
+	setBackgroundBrush(QColor(125,124,123));
+	
+	scene_=new QGraphicsScene(this);
+	setScene(scene_);
+	
+	setDragMode(QGraphicsView::RubberBandDrag);
+}
+
+void MvQPageView::selection()
+{
+	if(!superPage_)
+		return;
+	
+	if(!selector_)
+	{  	
+	  	selector_=new MvQPageSelectionItem(this,superPage_); 		
+	}
+
+	selector_->selectionChanged();
+	
+	emit selectionChanged(selector_->pages().count());
+}
+
+void MvQPageView::pageSelected(MvQPageItem*)
+{
+	selection(); 	
+}
+
+void MvQPageView::pagePressed(MvQPageItem *item,QGraphicsSceneMouseEvent* event)
+{
+  	if(selector_)
+	  	selector_->pagePressed(item,event);
+}		
+	  	  
+void MvQPageView::clear()
+{
+	 if(superPage_)
+	 {
+	   	scene()->removeItem(superPage_);
+		delete superPage_;
+		superPage_=0;
+		scene()->removeItem(rulerH_);
+		delete rulerH_;
+		rulerH_=0;
+		scene()->removeItem(rulerV_);
+		delete rulerV_;
+		rulerV_=0;
+		
+		selector_=0;
+		undoStack_->clear();
+	 }
+}	 
+ 
+void MvQPageView::clearPages()
+{
+  	if(superPage_)
+	{
+	  	foreach(QGraphicsItem* item,superPage_->childItems())
+		{
+		  	scene()->removeItem(item);
+			delete item;
+		}	
+	}
+}	
+
+bool MvQPageView::matchClass(const string& cname)
+{  
+	for(vector<string>::const_iterator it = classes_.begin(); it != classes_.end(); ++it)
+	{
+	  	if(*it == cname)
+		  	return true;
+	}
+	
+	return false;
+}			 
+				  
+void MvQPageView::setSuperPage(double width,double height,bool snap,float snapX,float snapY,bool grid)
+{	
+	if(!superPage_)
+	{
+	  	superPage_=new MvQSuperPageItem(this,width,height,snap,snapX,snapY,grid);
+		scene_->addItem(superPage_);		
+		rulerH_=new MvQRulerItem(this,Qt::Horizontal);
+		scene_->addItem(rulerH_);
+		rulerV_=new MvQRulerItem(this,Qt::Vertical);
+		scene_->addItem(rulerV_);
+		
+		adjustSize();		
+	}	
+	else
+	{
+	  	if(superPage_->paperRect().width() != width && 
+		   superPage_->paperRect().height() != height)
+		{
+		  	
+			superPage_->resize(width,height);	
+			adjustSize();	
+		}
+	}	
+	
+}	
+
+void MvQPageView::resizeEvent(QResizeEvent *event)
+{
+	QGraphicsView::resizeEvent(event);	
+	adjustSize();
+}
+
+void MvQPageView::adjustSize()
+{
+	if(!superPage_ || !rulerH_ || !rulerV_)
+	  	return;
+		
+	int dh=rulerH_->boundingRect().height();
+	int dw=rulerV_->boundingRect().width();
+	
+	QSize size=maximumViewportSize();
+	size-=QSize(20+dw+4,dh+4+20);
+	
+	superPage_->adjustSize(size);
+	rulerH_->adjustSize();
+	rulerV_->adjustSize();
+	
+	//Update selector
+	selection();
+	
+	//Set the scenerect
+	QRectF br=superPage_->boundingRect();
+	br.adjust(-dw-4,-dh-4,0,0);
+	scene_->setSceneRect(br);
+}
+
+MvQPageItem* MvQPageView::addPage(double x,double y,double w, double h)
+{	
+	if(!superPage_)
+	  	return 0;
+			
+     	MvQPageAddCommand *cmd = new MvQPageAddCommand(this,x,y,w,h);
+     	undoStack_->push(cmd);
+	
+	return cmd->page();	
+}
+
+void MvQPageView::pagesResized(QList<MvQPageItem*> pages,QList<QRectF> oriPaperRects)
+{
+  	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);	
+	}	
+	  
+	undoStack_->push(cmdParent);
+	  
+  	emit changed();
+}
+
+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);	
+	}
+	
+	undoStack_->push(cmdParent);
+	
+  	emit changed();
+}	
+
+void MvQPageView::duplicateSelection()
+{	
+  	if(!selector_ || !selector_->hasPages() )
+	  	return;
+  
+  	MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
+	cmdParent->setText("duplicate");
+		
+	MvQPageAddCommand *cmd;
+	foreach(MvQPageItem* item,selector_->pages())
+	{
+		cmd = new MvQPageAddCommand(this,item,cmdParent);     		
+	}
+	
+	undoStack_->push(cmdParent);		
+}  
+
+void MvQPageView::deleteSelection()
+{	
+  	if(!selector_ || !selector_->hasPages() )
+	  	return;
+  
+  	MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
+	cmdParent->setText("delete");
+		
+	MvQPageDeleteCommand *cmd;
+	foreach(MvQPageItem* item,selector_->pages())
+	{
+		cmd = new MvQPageDeleteCommand(this,item,cmdParent);     		
+	}
+	
+	undoStack_->push(cmdParent);		
+}  
+
+void MvQPageView::joinSelection()
+{ 
+  	if(!selector_ || selector_->pages().count() < 2 )
+	  	return;
+  
+	MvQPageJoinCommand *cmd = new MvQPageJoinCommand(this,selector_->pages());    
+	undoStack_->push(cmd);	
+}  
+
+void MvQPageView::splitSelection(int row, int column)
+{
+  	if(!selector_ || !selector_->hasPages() )
+	  	return;
+  
+	MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
+	cmdParent->setText("split");
+	
+	MvQPageSplitCommand *cmd;
+	foreach(MvQPageItem* item,selector_->pages())
+	{
+		cmd = new MvQPageSplitCommand(this,item,row,column,cmdParent);     		
+	}
+	
+	undoStack_->push(cmdParent);
+}  
+
+void MvQPageView::expandSelection()
+{  	
+	if(!selector_ || !selector_->hasPages() )
+	  	return;
+  
+  	MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
+	cmdParent->setText("expand");
+		
+	MvQPageExpandCommand *cmd;
+	QRectF selRect=selector_->mapToParent(selector_->boundingRect()).boundingRect();
+	QRectF expandRect=superPage_->boundingRect();
+	
+	qDebug() << "EXPAND" << selRect << expandRect;
+	
+	foreach(MvQPageItem* item,selector_->pages())
+	{		
+	  	QRectF r=superPage_->itemToPercentage(item->rectToSelector(expandRect,selRect));
+	  	qDebug() << "  item" << item->paperRect() << r;
+		
+		cmd = new MvQPageExpandCommand(this,item,r,cmdParent);     		
+	}
+	
+	undoStack_->push(cmdParent);		
+}  
+
+void MvQPageView::connectSelection()
+{
+	if(!selector_ || selector_->pages().count() < 2 )
+	  	return;
+  
+	MvQPageConnectCommand *cmd = new MvQPageConnectCommand(this,selector_->pages());    
+	undoStack_->push(cmd);	
+}  
+
+void MvQPageView::disconnectSelection()
+{
+	if(!selector_ )
+	  	return;
+  
+	bool hasSub=false;
+	foreach(MvQPageItem* item,selector_->pages())
+	{
+		if(item->hasSubPaperRect())
+		{
+		  	hasSub=true;
+			break;
+		}
+	}	
+	
+	if(!hasSub)	
+		return;	
+	
+	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);    
+		}
+	}
+	
+	undoStack_->push(cmdParent);	
+}  
+
+void MvQPageView::selectAll()
+{
+	foreach(MvQPageItem* p,superPage_->pages())
+	  	if(p) p->setSelected(true);
+}
+
+void MvQPageView::enableSnap(bool b)
+{
+	if(superPage_)
+	  	superPage_->enableSnap(b);
+}  
+  
+void MvQPageView::setSnap(float x,float y)
+{
+  	if(superPage_)
+	  	superPage_->setSnap(x,y);
+} 
+
+void MvQPageView::enableGrid(bool b)
+{
+	if(superPage_)
+	  	superPage_->enableGrid(b);
+}  
+
+QList<MvQPageItem*> MvQPageView::pages() const 
+{
+  	return (superPage_)?superPage_->pages():QList<MvQPageItem*>();
+}	
+
+//============================================
+//
+// Commands
+//
+//=============================================
+
+//------------------------
+// Container commmand
+//------------------------
+
+MvQUndoCommand::MvQUndoCommand(MvQPageView *view,QUndoCommand *parent) : 
+	QUndoCommand(parent),
+	view_(view)	
+{
+}
+
+void MvQUndoCommand::redo()
+{
+	QUndoCommand::redo();	
+	view_->selection();
+}	
+
+void MvQUndoCommand::undo()
+{	
+	QUndoCommand::undo();	
+	view_->selection();
+}  
+
+//------------------
+// Add page
+//------------------
+
+MvQPageAddCommand::MvQPageAddCommand(MvQPageView *view,float x,float y,float w,float h,QUndoCommand *parent) : 
+	MvQUndoCommand(view,parent),
+	oriRect_(x,y,w,h)
+{
+	page_=view_->superPage()->addPage(x,y,w,h);
+	setText("Add");
+}
+
+
+MvQPageAddCommand::MvQPageAddCommand(MvQPageView *view,MvQPageItem *page,QUndoCommand *parent) : 
+	MvQUndoCommand(view,parent)
+	
+{
+	oriRect_=page->paperRect();
+  	page_=view_->superPage()->addPage(oriRect_.x(),oriRect_.y(),oriRect_.width(),oriRect_.height());
+	page_->setViewIcon(page->viewIcon());
+	setText("Add");
+}
+
+void MvQPageAddCommand::redo()
+{
+  	if(!page_->scene())
+	{
+		page_->setParentItem(view_->superPage());
+		page_->setPaperRect(oriRect_);
+	}  
+}
+
+void MvQPageAddCommand::undo()
+{	
+	view_->scene()->removeItem(page_);
+	view_->selection();
+}  
+
+//------------------
+// Delete page
+//------------------
+
+MvQPageDeleteCommand::MvQPageDeleteCommand(MvQPageView *view,MvQPageItem *page,QUndoCommand *parent) : 
+	MvQUndoCommand(view,parent),
+	page_(page)
+
+{
+  	setText("Delete");
+}
+
+void MvQPageDeleteCommand::redo()
+{
+  	view_->scene()->removeItem(page_);
+}
+
+void MvQPageDeleteCommand::undo()
+{	
+	if(!page_->scene())
+	{
+		page_->setParentItem(view_->superPage());
+	}  
+}  
+
+
+//------------------
+// Resize page
+//------------------
+
+MvQPageResizeCommand::MvQPageResizeCommand(MvQPageView *view,MvQPageItem *page,
+        const QRectF &fromRect,const QRectF &toRect, QUndoCommand *parent) : 
+ 	MvQUndoCommand(view,parent),
+ 	page_(page),
+ 	fromRect_(fromRect),
+ 	toRect_(toRect)
+{
+	
+}
+
+void MvQPageResizeCommand::redo()
+{
+  	if(toRect_ != page_->paperRect())
+	  	page_->setPaperRect(toRect_);
+}  
+
+void MvQPageResizeCommand::undo()
+{	
+	page_->setPaperRect(fromRect_);
+}  
+
+//------------------
+// Expand page
+//------------------
+
+MvQPageExpandCommand::MvQPageExpandCommand(MvQPageView *view,MvQPageItem *page,QRectF toRect,QUndoCommand *parent) : 
+ 	MvQUndoCommand(view,parent),
+ 	page_(page),
+ 	fromRect_(page->paperRect()),
+ 	toRect_(toRect)
+{
+}
+
+void MvQPageExpandCommand::redo()
+{ 	
+	page_->setPaperRect(toRect_);
+}  
+
+void MvQPageExpandCommand::undo()
+{	
+	page_->setPaperRect(fromRect_);
+}  
+
+//------------------
+// Move page
+//------------------
+ 
+MvQPageMoveCommand::MvQPageMoveCommand(MvQPageView *view,MvQPageItem *page,const QPointF &delta,QUndoCommand *parent) : 
+     MvQUndoCommand(view,parent),
+     page_(page)
+{     
+     toPos_ = page_->paperRect().topLeft();
+     fromPos_ = toPos_-page_->itemToPaper(delta);
+    
+     setText("Move");
+}
+
+void MvQPageMoveCommand::redo()
+{
+     page_->setPos(page_->paperToItem(toPos_));
+}
+
+void MvQPageMoveCommand::undo()
+{
+     page_->setPos(page_->paperToItem(fromPos_));
+     page_->scene()->update();
+}
+
+//------------------
+// Join pages
+//------------------
+
+MvQPageJoinCommand::MvQPageJoinCommand(MvQPageView* view,QList<MvQPageItem *> pages,
+        QUndoCommand *parent) : 
+ 	MvQUndoCommand(view,parent),
+ 	pages_(pages),
+ 	parentItem_(0)
+{
+	if(pages_.count() > 0)
+	{	
+	  	firstOriRect_=pages_.at(0)->paperRect(); 
+		parentItem_=pages_.at(0)->parentItem();
+	}	
+	setText("Join");
+}
+
+void MvQPageJoinCommand::redo()
+{  	
+	MvQPageItem *first=0;
+	QRectF joinedRect;
+	
+  	foreach(MvQPageItem* item,pages_)
+	{	  
+		if(!first)
+		{
+			first=item;
+			joinedRect=item->paperRect();
+		}	
+		else
+		{
+			joinedRect=joinedRect.united(item->paperRect());
+			parentItem_->scene()->removeItem(item);
+		}
+	}
+	
+	if(first)
+	{
+	  	first->setPaperRect(joinedRect);
+	}
+	
+	view_->selection();
+}  
+  
+void MvQPageJoinCommand::undo()
+{	
+	MvQPageItem *first=0;
+	QRectF joinedRect;
+	
+  	foreach(MvQPageItem* item,pages_)
+	{
+		if(!first)
+		{
+		  	first=item;
+			item->setPaperRect(firstOriRect_);
+		}
+		else
+		{
+		  	item->setParentItem(parentItem_);
+		}	  
+	}  
+	
+	view_->selection();
+}  
+
+
+//------------------
+// Split pages
+//------------------
+
+MvQPageSplitCommand::MvQPageSplitCommand(MvQPageView* view,MvQPageItem *page,int row, int column,QUndoCommand *parent) : 
+ 	MvQUndoCommand(view,parent),
+ 	page_(page),
+ 	row_(row),
+ 	column_(column)	
+{  
+}
+
+void MvQPageSplitCommand::redo()
+{ 	
+	if((row_ <=1 && column_ <= 1) || row_ > 10 || column_ > 10)
+	  	return;
+   	
+	if(splitPages_.count() == 0)
+	{  
+		QRectF r=page_->paperRect();
+		double dx=r.width()/column_;
+		double dy=r.height()/row_;
+						
+		for(int i=0; i < row_; i++)
+		{
+			for(int j=0; j < column_; j++)
+			{
+				MvQPageItem *p=view_->superPage()->addPage(r.x()+j*dx,r.y()+i*dy,dx,dy);
+				splitPages_ << p;
+				p->setViewIcon(page_->viewIcon());
+			}
+		}		
+	}
+	else
+	{
+		foreach(MvQPageItem *item,splitPages_)
+		{
+	  		item->setParentItem(view_->superPage());
+		}  
+	}	
+				  		  	
+	view_->scene()->removeItem(page_);	
+}  
+
+void MvQPageSplitCommand::undo()
+{	
+	foreach(MvQPageItem *item,splitPages_)
+	{
+	  	view_->scene()->removeItem(item);
+	}
+		
+	page_->setParentItem(view_->superPage());
+}  
+
+
+//------------------
+// Connect pages
+//------------------
+
+MvQPageConnectCommand::MvQPageConnectCommand(MvQPageView* view,QList<MvQPageItem *> pages,
+        QUndoCommand *parent) : 
+ 	MvQUndoCommand(view,parent),
+ 	pages_(pages)
+{
+	if(pages_.count() > 0)
+	{	
+	  	firstOriRect_=pages_.at(0)->paperRect(); 
+	}	
+	setText("connect");
+}
+
+void MvQPageConnectCommand::redo()
+{  	
+  	MvQPageItem *first=0;
+	QRectF joinedRect;
+	
+  	foreach(MvQPageItem* item,pages_)
+	{	  
+		if(!first)
+		{
+			first=item;
+			joinedRect=item->paperRect();
+		}	
+		else
+		{
+			joinedRect=joinedRect.united(item->paperRect());
+		}
+	}
+	
+	if(first)
+	{
+	  	first->setPaperRect(joinedRect);
+		foreach(MvQPageItem* item,pages_)
+		{		  	
+		  	if(item == first)
+			{	  			  	
+				first->addSubPaperRect(first,firstOriRect_);
+			}
+			if(item != first)
+			{	  			  	
+				first->addSubPaperRect(item,item->paperRect());
+				view_->scene()->removeItem(item);	
+			}
+		}	
+	}
+	
+	view_->selection();
+}  
+  
+void MvQPageConnectCommand::undo()
+{	
+	MvQPageItem *first=0;
+	QRectF joinedRect;
+	
+  	foreach(MvQPageItem* item,pages_)
+	{
+		if(!first)
+		{
+		  	first=item;
+			item->setPaperRect(firstOriRect_);
+		}
+		else
+		{
+		  	item->setParentItem(view_->superPage());
+		}	  
+	}  
+	
+	if(first)
+	  	first->clearSubPaperRects();
+	
+	view_->selection();
+}  
+
+
+//------------------
+// Disconnect pages
+//------------------
+
+MvQPageDisconnectCommand::MvQPageDisconnectCommand(MvQPageView* view,MvQPageItem *page,QUndoCommand *parent) : 
+ 	MvQUndoCommand(view,parent),
+ 	page_(page)	
+{  
+}
+
+void MvQPageDisconnectCommand::redo()
+{ 	
+	pages_.clear();
+	
+	QRectF pf=page_->paperRect();
+	float w=pf.width();
+	float h=pf.height();				
+	
+	QList<QRectF> subR=page_->subPaperRects();
+	
+	for(int i=0; i < subR.count(); i++)	  
+	{
+	  	QRectF pr(pf.x()+subR[i].x()*w*0.01,
+			  pf.y()+subR[i].y()*h*0.01,
+			  subR[i].width()*w*0.01,
+	                  subR[i].height()*h*0.01);
+		
+		MvQPageItem* item=page_->subPage(i);
+			  
+		if(item)
+		{  
+		  	pages_ << item;
+			
+			item->setPaperRect(pr);
+		
+			if(item != page_)
+			{
+		  		item->setViewIcon(page_->viewIcon());
+				item->setParentItem(view_->superPage());
+			}
+		}	
+	}
+	
+	page_->clearSubPaperRects();
+	
+	view_->selection();	
+}  
+
+void MvQPageDisconnectCommand::undo()
+{	
+	QRectF joinedRect;
+	
+  	joinedRect=page_->paperRect();	
+	foreach(MvQPageItem* item,pages_)
+	{	  
+		if(item != page_)
+		{
+			joinedRect=joinedRect.united(item->paperRect());
+		}
+	}
+		
+	QRectF oriRect=page_->paperRect();	
+	page_->setPaperRect(joinedRect);
+	
+	foreach(MvQPageItem* item,pages_)
+	{		  	
+		if(item == page_)
+		{
+		  	page_->addSubPaperRect(item,oriRect);  	
+		}
+		else
+		{  
+	 		page_->addSubPaperRect(item,item->paperRect());		  		
+			view_->scene()->removeItem(item);	
+		}	
+	}
+	
+	view_->selection();
+}  
+
+
diff --git a/src/Desktop/MvQPageView.h b/src/Desktop/MvQPageView.h
new file mode 100644
index 0000000..26f852c
--- /dev/null
+++ b/src/Desktop/MvQPageView.h
@@ -0,0 +1,415 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQPageView_H
+#define MvQPageView_H
+
+#include <QGraphicsItem>
+#include <QGraphicsView>
+#include <QUndoCommand>
+
+#include "IconObject.h"
+
+class QGraphicsScene;
+class QUndoStack;
+
+class MvQPageItem;
+class MvQSuperPageItem;
+class MvQPageView;
+class MvRequest;
+class MvQPageHandlerItem;
+
+namespace MvQ
+{
+	const int PageItemType=QGraphicsItem::UserType + 1;
+}	
+
+class MvQUndoCommand : public QUndoCommand 
+{
+public:
+	MvQUndoCommand(MvQPageView*,QUndoCommand *parent=0);    	
+   	virtual void undo();
+   	void redo();
+	
+protected:
+    	MvQPageView* view_; 
+};
+
+class MvQPageAddCommand : public MvQUndoCommand
+{
+public:
+	MvQPageAddCommand(MvQPageView*,float,float,float,float,QUndoCommand *parent=0); 
+	MvQPageAddCommand(MvQPageView*,MvQPageItem*,QUndoCommand *parent=0);     	
+   	void undo();
+   	void redo();
+	MvQPageItem* page() const {return page_;}
+	
+protected:
+    	QRectF oriRect_;
+	MvQPageItem* page_;
+	
+};
+
+class MvQPageDeleteCommand : public MvQUndoCommand 
+{
+public:
+	MvQPageDeleteCommand(MvQPageView*,MvQPageItem*,QUndoCommand *parent=0);    	
+   	void undo();
+   	void redo();	
+	
+protected:
+	MvQPageItem* page_;	
+};
+
+class MvQPageResizeCommand : public MvQUndoCommand 
+{
+public:
+	MvQPageResizeCommand(MvQPageView*,MvQPageItem*,const QRectF&,const QRectF&,QUndoCommand *parent=0);    	
+   	void undo();
+   	void redo();
+	
+protected:
+    	MvQPageItem* page_;
+	QRectF fromRect_;
+	QRectF toRect_;
+};
+
+
+class MvQPageMoveCommand : public MvQUndoCommand 
+{
+public:
+	enum { Id = 1 };
+	
+	MvQPageMoveCommand(MvQPageView*,MvQPageItem*,const QPointF &,QUndoCommand *parent=0);    	
+   	void undo();
+   	void redo();
+	int id() const {return Id;}
+	
+protected:
+    	MvQPageItem* page_;
+	QPointF fromPos_;
+	QPointF toPos_;
+};	
+
+
+class MvQPageExpandCommand : public MvQUndoCommand 
+{
+public:
+	MvQPageExpandCommand(MvQPageView*,MvQPageItem*,QRectF,QUndoCommand *parent=0);    	
+   	void undo();
+   	void redo();
+	MvQPageItem* page() const {return page_;}
+	
+protected:
+    	MvQPageItem* page_;
+	QRectF fromRect_;
+	QRectF toRect_;
+};	
+
+class MvQPageJoinCommand : public MvQUndoCommand 
+{
+public:
+	MvQPageJoinCommand(MvQPageView*,QList<MvQPageItem*>,QUndoCommand *parent=0);    	
+   	void undo();
+   	void redo();
+	
+protected:
+    	QList<MvQPageItem*> pages_;
+	QGraphicsItem *parentItem_;
+	QRectF firstOriRect_;
+};	
+
+class MvQPageSplitCommand : public MvQUndoCommand 
+{
+public:
+	MvQPageSplitCommand(MvQPageView*,MvQPageItem*,int,int,QUndoCommand *parent=0);    	
+   	void undo();
+   	void redo();
+	
+protected:
+	MvQPageItem *page_;
+    	QList<MvQPageItem*> splitPages_;
+	int row_;
+	int column_;
+};
+
+class MvQPageConnectCommand : public MvQUndoCommand 
+{
+public:
+	MvQPageConnectCommand(MvQPageView*,QList<MvQPageItem*>,QUndoCommand *parent=0);    	
+   	void undo();
+   	void redo();
+	
+protected:
+    	QList<MvQPageItem*> pages_;
+	QRectF firstOriRect_;
+};
+
+class MvQPageDisconnectCommand : public MvQUndoCommand 
+{
+public:
+	MvQPageDisconnectCommand(MvQPageView*,MvQPageItem*,QUndoCommand *parent=0);    	
+   	void undo();
+   	void redo();
+	
+protected:
+    	MvQPageItem* page_;
+	QList<MvQPageItem*> pages_;
+	QRectF firstOriRect_;
+};	
+
+
+class MvQPageSelectionItem : public QGraphicsItem
+{
+public:   	
+  	MvQPageSelectionItem(MvQPageView*,MvQSuperPageItem*);
+    	QRectF boundingRect() const;
+    	void paint(QPainter*, const QStyleOptionGraphicsItem *,QWidget*);
+	void createHandlers();
+	void handlerPressed(MvQPageHandlerItem *);
+	void handlerMoved(MvQPageHandlerItem *,QRectF);
+	void handlerReleased(MvQPageHandlerItem *);
+	QList<MvQPageItem*> pages() const {return pages_;}
+	bool hasPages() const {return pages_.count() >0;}
+	void selectionChanged();
+	void pagePressed(MvQPageItem*,QGraphicsSceneMouseEvent*);
+	
+protected:		
+	void dropEvent(QGraphicsSceneDragDropEvent *event);   
+	void mousePressEvent(QGraphicsSceneMouseEvent *);
+	void mouseMoveEvent(QGraphicsSceneMouseEvent*);
+	void mouseReleaseEvent(QGraphicsSceneMouseEvent *);
+	void adjust(QRectF);
+	
+	MvQPageView* view_;
+	MvQSuperPageItem* superPage_;
+	QList<MvQPageItem*> pages_;
+	QList<QRectF> oriPageRect_;
+	QList<MvQPageHandlerItem*> handlers_;
+	QRectF  bRect_;
+	QRectF  oriRect_;
+	QPointF oriPos_;
+	QPointF dragPos_;
+	QPen pen_;
+	QBrush brush_;
+	bool handlerUsed_;
+};
+
+class MvQPageHandlerItem : public QGraphicsItem
+{
+public:
+    	enum HandlerType {TopLeft,TopMid,TopRight,RightMid,BottomRight,BottomMid,BottomLeft,LeftMid};
+  	MvQPageHandlerItem(MvQPageSelectionItem*,HandlerType);
+    	QRectF boundingRect() const;
+    	void paint(QPainter*, const QStyleOptionGraphicsItem *,QWidget*);
+	void updatePosition();
+	
+protected:	
+	void setupPixmap();
+	QVariant itemChange(GraphicsItemChange, const QVariant &);	
+	void mousePressEvent(QGraphicsSceneMouseEvent *);
+	void mouseMoveEvent(QGraphicsSceneMouseEvent *);
+	void mouseReleaseEvent(QGraphicsSceneMouseEvent *);
+	void hoverEnterEvent(QGraphicsSceneHoverEvent *);
+	void hoverLeaveEvent(QGraphicsSceneHoverEvent *);
+	
+	MvQPageSelectionItem* page_;
+	HandlerType type_;
+	QRectF bRect_;
+	bool hover_;
+	QBrush brush_;
+	QBrush hoverBrush_;
+	static QMap<HandlerType,QPixmap> pix_;
+	static QMap<HandlerType,QPixmap> pixHover_;
+};
+
+
+class MvQSubPageItem : public QGraphicsItem
+{
+public:
+    	MvQSubPageItem(MvQPageItem*);
+    	
+protected:	
+	QRectF rect_;
+	MvQPageItem* page_;
+  
+};
+
+class MvQPageItem : public QGraphicsItem
+{
+public:
+    	enum {Type = MvQ::PageItemType}; 
+  
+  	MvQPageItem(MvQPageView*,QRectF,MvQSuperPageItem*);
+    	QRectF boundingRect() const;
+    	void paint(QPainter*, const QStyleOptionGraphicsItem *,QWidget*);
+	IconObjectH viewIcon() const {return viewIcon_;}
+	void setViewIcon(IconObjectH);
+	void adjustSize();	
+	QRectF paperRect() {return paperRect_;}
+	void setPaperRect(QRectF);
+	void paperRect(double&, double&, double&, double&);
+	void addSubPage(MvQPageItem*);
+	void addSubPageInPageCoords(double, double, double, double);
+	void clearSubPaperRects();
+	void addSubPaperRect(MvQPageItem*,QRectF);
+	void addSubPaperRectInPageCoords(double, double, double, double);
+	QList<QRectF> subPaperRects() const;
+	MvQPageItem *subPage(int) const;
+	int type() const {return Type;}
+	QRectF rectToSelector(QRectF,QRectF);
+	void adjustSizeToSelector(QRectF,QRectF);
+	void resize(QRectF);
+	void moveBy(QPointF);
+	bool hasSubPaperRect() const {return sub_.count() > 0;} 
+	QPointF itemToPaper(QPointF);
+	QPointF paperToItem(QPointF);
+	
+protected:	
+	void keyPressEvent(QKeyEvent *event); 
+	void mousePressEvent(QGraphicsSceneMouseEvent*);
+	void dropEvent(QGraphicsSceneDragDropEvent *event);   
+	void adjustPaperRect();	
+	QVariant itemChange(GraphicsItemChange, const QVariant &);
+	
+	MvQPageView* view_;
+	QRectF paperRect_;
+	//QList<MvQPageItem*> subPages_;
+	QList<QPair<MvQPageItem*,QRectF> > sub_;
+	QRectF bRect_;
+	MvQSuperPageItem* superPage_;
+	QString classType_;
+	IconObjectH viewIcon_;
+	QPixmap viewPix_;
+	QPixmap viewPixHalf_;
+	QPen pen_;
+	QPen selectionPen_;
+	QBrush brush_;
+	QPen subPen_;
+	bool mouseMove_;
+	QPointF mouseMoveStart_;
+};
+
+class MvQSuperPageItem : public QGraphicsItem
+{
+friend class MvQPageItem;  
+  
+public:
+    	MvQSuperPageItem(MvQPageView*,double,double,bool,float,float,bool);
+    	QRectF boundingRect() const;
+    	void paint(QPainter*, const QStyleOptionGraphicsItem *,QWidget*);
+    	
+	QRectF paperRect() const {return paperRect_;}
+    	MvQPageItem* addPage(double x,double y,double w, double h);
+	void resize(double,double);
+	void adjustSize(QSize);
+	void connectSelection();
+	void disconnectSelection();
+	bool adjustItemMove(QGraphicsItem*,QPointF&);
+	bool adjustItemResize(QGraphicsItem*,QRectF&);
+	void enableSnap(bool);
+	void setSnap(float,float);
+	void enableGrid(bool);
+	QList<MvQPageItem*> pages() const;
+	QRectF itemToPercentage(QRectF);
+	
+protected:	
+  	QPointF itemToPercentage(QPointF);
+	QPointF percentageToItem(QPointF);
+	QPointF itemToPaper(QPointF);
+	QPointF paperToItem(QPointF);
+	QPointF snapToGrid(QPointF);
+  	QRectF  snapToGrid(QRectF);
+  
+	MvQPageView* view_;
+	QRectF paperRect_;
+	QRectF bRect_;
+	float scaling_;
+	bool snap_;
+	float snapX_;
+	float snapY_;
+	QPen gridPen_;
+	bool grid_;
+};
+
+class MvQRulerItem : public QGraphicsItem
+{
+public:
+    	MvQRulerItem(MvQPageView*,Qt::Orientation);
+	QRectF boundingRect() const;
+    	void paint(QPainter*, const QStyleOptionGraphicsItem *,QWidget*);
+	void adjustSize();
+	
+protected:
+  	MvQPageView *view_;
+  	Qt::Orientation orientation_; 
+	QRectF bRect_;
+	QBrush bg_;
+	QPen pen_;
+	QPen subPen_;
+	int halfLen_;
+	int subLen_;
+	QFont font_;
+};
+
+class MvQPageView : public QGraphicsView
+{
+Q_OBJECT
+
+public:
+	MvQPageView(const vector<string>&,QUndoStack*,QWidget *parent=0);
+	
+	void clear();
+	void clearPages();
+	static bool matchClass(const string&);
+	
+	MvQPageItem* addPage(double x,double y,double w, double h);
+	QList<MvQPageItem*> pages() const;
+	void setSuperPage(double,double,bool,float,float,bool);
+	void duplicateSelection();
+	void deleteSelection();
+	void joinSelection();
+	void splitSelection(int,int);
+	void expandSelection();
+	void connectSelection();
+	void disconnectSelection();
+	void selectAll();
+	const vector<string>& classes() {return classes_;}
+	void enableSnap(bool);
+	void setSnap(float,float);
+	void enableGrid(bool);
+	
+	void selection();
+	void pageSelected(MvQPageItem*);
+	void pagePressed(MvQPageItem*,QGraphicsSceneMouseEvent*);
+	void pagesResized(QList<MvQPageItem*>,QList<QRectF>);
+	void pagesMoved(QList<MvQPageItem*>,const QPointF&);
+	
+	MvQSuperPageItem *superPage() {return superPage_;}
+	
+signals: 
+    	void changed();
+	void selectionChanged(int);
+
+protected:
+        void resizeEvent(QResizeEvent *);
+        void adjustSize();
+	
+	QUndoStack* undoStack_;
+        QGraphicsScene* scene_;
+	MvQSuperPageItem* superPage_;
+	MvQPageSelectionItem* selector_;
+	MvQRulerItem* rulerH_;
+	MvQRulerItem* rulerV_;
+	static vector<string> classes_;
+	
+};
+
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQPalette.cc b/src/Desktop/MvQPalette.cc
new file mode 100644
index 0000000..5178f13
--- /dev/null
+++ b/src/Desktop/MvQPalette.cc
@@ -0,0 +1,249 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQPalette.h"
+
+#include <ctype.h>
+
+#include "ConfigLoader.h"
+#include "Tokenizer.h"
+
+static map<string,QColor> colors;
+static vector<string>  names;
+
+void MvQPalette::load(request* r)
+{
+	const char* fname = get_value(r,"colour_file",0);
+	if(!fname) return;
+
+	FILE *f = fopen(fname, "r");
+
+	if (!f) return;
+
+	char line[500];
+	char color[80];
+	char name[80];
+
+	while(fgets(line,sizeof(line),f))
+	{
+		char *p = line;
+		int  i = 0;
+
+		sscanf(p,"%s ; %s",color,name);
+		while(*p && !i)
+		{
+			
+			if(*p == '#')
+			{
+				color[i++] = *p++;
+				while(*p && isxdigit(*p))
+					color[i++] = *p++;
+				color[i] = 0;
+				if(i != 4 && i != 7 && i != 13)
+					i = 0;
+			}
+			p++;
+		}
+		if(i) 
+		{
+			names.push_back(name);
+			colors[name]=MvQPalette::hexaCharToColour(color);		
+		}
+	}
+
+	fclose(f);
+}
+
+
+QColor MvQPalette::hexaCharToColour(const char *hexaChar)
+{
+	if(strlen(hexaChar) == 13)
+	{  
+    		unsigned int r, g, b;		
+		char cval[5];
+		
+    		strncpy(cval,hexaChar+1,4);
+		cval[4]='\0';		
+		sscanf(cval,"%x",&r);
+		
+		strncpy(cval,hexaChar+5,4);
+		cval[4]='\0';		
+		sscanf(cval,"%x",&g);
+		
+		strncpy(cval,hexaChar+9,4);
+		cval[4]='\0';		
+		sscanf(cval,"%x",&b);
+		
+		return QColor(r/256,g/256,b/256);		
+	}
+	
+	return QColor();
+}					
+	
+	
+void MvQPalette::scan(PaletteScanner& p)
+{
+	for(vector<string>::iterator j = names.begin(); j != names.end(); ++j)
+	{
+	  	map<string,QColor>::iterator it=colors.find(*j);
+		if(it != colors.end())
+	  		p.next(*j,it->second);
+	}	
+}
+
+
+
+
+/*Pixel XPalette::pixel(const string& name)
+{
+	static map<string,Pixel> cache;
+	map<string,Pixel>::iterator j = cache.find(name);
+
+	if(j != cache.end())
+		return (*j).second;
+
+	Pixel p = PaletteNamedColor(palette,name.c_str());
+	cache[name] = p;
+	return p;
+}
+
+void XPalette::scan(PaletteScanner& p)
+{
+	for(vector<string>::iterator j = names.begin(); j != names.end(); ++j)
+		p.next(*j);
+}
+
+void XPalette::convert(const string& name,RGBColor& c)
+{
+	map<string,RGBColor>::iterator j = colors.find(name);
+	if(j == colors.end())
+		magics(name);
+
+	c = colors[name];
+}
+
+bool XPalette::exists(const string& name)
+{
+	return colors.find(name) != colors.end();
+}
+
+inline bool same(double a,double b)
+{
+	return abs(a-b) < 0.001;
+}
+
+bool XPalette::convert(const RGBColor& c,string& name)
+{
+	RGBColor r;
+	for(map<string,RGBColor>::iterator j = colors.begin(); j != colors.end(); ++j)
+	{
+		const RGBColor& r = (*j).second;
+		if(same(c.red,r.red) && same(c.green,r.green) && same(c.blue,r.blue))
+		{
+			name = (*j).first;
+			return true;
+		}
+	}
+	return false;
+}
+*/
+
+string MvQPalette::toString(QColor col)
+{
+ 	for(map<string,QColor>::iterator it = colors.begin(); it != colors.end(); it++)
+	{
+	  	if(it->second == col)
+		  	return it->first;
+	}
+	
+	
+  	QString s="RGB(";
+    	s+=QString::number(col.redF(),'g',2)+ "," +
+       		QString::number(col.greenF(),'g',2)+ "," +
+       		QString::number(col.blueF(),'g',2)+ ")";
+		
+	return s.toStdString();	 
+}  
+
+QColor MvQPalette::magics(const string& name)
+{
+	QColor col;
+	
+	map<string,QColor>::iterator it = colors.find(name);
+	if(it != colors.end())
+	{
+	  	col=it->second;
+	}
+	else
+	{  	
+		Tokenizer parse("(, )");
+		vector<string> v;
+
+		parse(name,v);
+
+		// Try rgb, hsl
+		if(v.size() == 4)
+		{
+			double x1 = atof(v[1].c_str());
+			double x2 = atof(v[2].c_str());
+			double x3 = atof(v[3].c_str());
+
+			switch(v[0][0])
+			{
+			case 'r':
+			case 'R':
+				col = QColor::fromRgbF(x1,x2,x3);
+				break;
+
+			case 'h':
+			case 'H':
+				col = QColor::fromHslF(x1,x2,x3); 
+				break;
+				
+			default: 
+			  	break;
+			}
+			
+			if(col.isValid())
+			{	  	
+				colors[name] = col;
+			}					
+		}
+	}
+	
+		//colors[name] = c;
+		//return PaletteRGBColor(palette,&c);
+	
+	return col;
+}
+
+/*
+Pixel XPalette::pixel(const RGBColor& c)
+{
+	return PaletteRGBColor(palette,&c);
+}
+
+Pixel XPalette::pixel(const HSLColor& c)
+{
+	return PaletteHSLColor(palette,&c);
+}
+
+void XPalette::convert(const RGBColor& a,HSLColor& b)
+{
+	PaletteRGBToHSL(palette,&a,&b);
+}
+
+void XPalette::convert(const HSLColor& a,RGBColor& b)
+{
+	PaletteHSLToRGB(palette,&a,&b);
+}
+
+*/
+
+static SimpleLoader<MvQPalette> load("resources",0);
diff --git a/src/Desktop/MvQPalette.h b/src/Desktop/MvQPalette.h
new file mode 100644
index 0000000..823549e
--- /dev/null
+++ b/src/Desktop/MvQPalette.h
@@ -0,0 +1,74 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQPalette_H
+#define MvQPalette_H
+
+#include <QColor>
+
+#include <string>
+using std::string;
+
+struct request;
+//struct RGBColor;
+//struct HSLColor;
+
+class PaletteScanner {
+public:
+	virtual void next(const string&,QColor) = 0;
+};
+
+class MvQPalette 
+{
+public:
+
+	MvQPalette(int);
+	~MvQPalette();
+
+	static  string toString(QColor);
+	static  QColor magics(const string&); 
+	
+	/*static Pixel pixel(const RGBColor&);
+	static Pixel pixel(const HSLColor&);
+
+	static Pixel  pixel(const string&); // Name is X name
+	static Pixel  magics(const string&); // Name is Magics name
+
+	static void convert(const RGBColor&,HSLColor&);
+	static void convert(const HSLColor&,RGBColor&);
+
+	// Names are magics names
+
+	static void convert(const string&,RGBColor&);
+	static bool convert(const RGBColor&,string&);
+	static bool exists(const string&);*/
+
+
+	//---
+
+	static void scan(PaletteScanner&);
+	static void load(request*);
+
+protected:	
+	static QColor hexaCharToColour(const char *);
+
+
+private:
+	MvQPalette(const MvQPalette&);
+	MvQPalette& operator=(const MvQPalette&);
+};
+
+//inline void destroy(XPalette**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(XPalette);
+//#endif
+
+#endif
diff --git a/src/Desktop/MvQPathWidget.cc b/src/Desktop/MvQPathWidget.cc
new file mode 100644
index 0000000..1438714
--- /dev/null
+++ b/src/Desktop/MvQPathWidget.cc
@@ -0,0 +1,373 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQPathWidget.h"
+
+#include <QDebug>
+#include <QDir>
+#include <QHBoxLayout>
+#include <QMenu>
+#include <QSignalMapper>
+#include <QStyleOption>
+#include <QPainter>
+
+#include "MvQBookmarks.h"
+#include "MvQContextMenu.h"
+#include "MvQFileBrowser.h"
+#include "MvQIconProvider.h"
+
+#include "Folder.h"
+#include "IconClass.h"
+
+QList<MvQContextItem*> MvQPathWidget::cmTbItems_;
+QList<MvQContextItem*> MvQPathWidget::cmMenuItems_;
+
+MvQPathWidget::MvQPathWidget(QWidget *parent) : QWidget(parent)
+{
+	layout_=new QHBoxLayout(this);
+	layout_->setSpacing(0);
+	layout_->setContentsMargins(6,0,6,0); 
+	setLayout(layout_);
+	
+	setProperty("path","1");
+	
+	smp_=new QSignalMapper(this);
+	
+	connect(smp_,SIGNAL(mapped(int)),
+		this,SIGNAL(pathClicked(int)));
+		
+	connect(this,SIGNAL(pathClicked(int)),
+		this,SLOT(slotChangeDir(int)));
+}  
+
+void MvQPathWidget::slotContextMenu(const QPoint& pos)
+{
+	static MvQContextItemSet cmItems("Breadcrumbs");  
+	
+	QString path;
+	QMenu *menu=0;
+	
+	QToolButton *tb=static_cast<QToolButton*>(QObject::sender());	
+	if(tb)
+	{
+	  	path=getPath(tb);
+	}
+	else 
+	{	menu=static_cast<QMenu*>(QObject::sender());
+		if(menu)
+		{
+		  	QAction *ac=menu->actionAt(pos);
+			path=getPath(ac);
+		}
+	}	
+		  		  	
+	if((tb || menu) && !path.isEmpty())
+	{
+		QString selection;
+		if(tb)		  
+			selection=MvQContextMenu::instance()->exec(cmItems.icon(),tb->mapToGlobal(pos),tb);  		
+		//else
+		//  	selection=MvQContextMenu::instance()->exec(cmMenuItems_,menu->mapToGlobal(pos),menu);  	
+		  
+		if(!selection.isEmpty()) 
+		{
+		  	emit commandRequested(selection,path);
+		}	
+	}	
+}	
+
+void MvQPathWidget::clearLayout()
+{
+  	QLayoutItem *item;
+ 	while( (item = layout_->takeAt(0)) != 0) 
+	{
+     		QWidget *w=item->widget();
+		if(w)
+		{  
+		  	layout_->removeWidget(w);
+		  	//delete w;
+		}
+		delete item;
+ 	}
+}	
+
+void MvQPathWidget::setPath(QString path)
+{
+	setPath(Folder::folder(path.toStdString(),false));
+}	
+
+void MvQPathWidget::setPath(Folder *folder)
+{
+	//Clear the layout (widgets are not deleted in this step!)
+	clearLayout();
+  	
+	if(!folder)
+	  	return;
+		
+	QList<Folder*> lst;
+	lst << folder;
+	Folder *f=folder;
+	while(f->parent())
+	{
+	  	f=f->parent();
+		lst.prepend(f);
+	}	
+	
+	//-----------------------------------------------------------
+	//Try to reuse the current items and delete the unneeded ones
+	//-----------------------------------------------------------
+	
+	//Find out how many items can be reused. 
+	//firstIndex: the first original item that differs from the current one.  
+	int lastIndex=-1;
+	for(int i=0; i <  lst.count() && i < items_.count(); i++)
+	{  
+		if(QString::fromStdString(lst.at(i)->fullName()) == items_[i]->fullName_)
+		{
+			lastIndex=i;
+		}
+		else
+		  	break;
+	}	
+	
+	//Delete unused items (if there are any)
+	int num=items_.count();
+	for(int i=lastIndex+1; i <  num; i++)
+	{  		
+		MvQPathWidgetItem *item=items_.back();
+	  	items_.removeLast();
+		delete item;
+	}	
+	
+	for(int i=lastIndex+1; i < lst.count(); i++)
+	{
+	  	Folder *f=lst.at(i);
+	  
+		MvQPathWidgetItem *item = new MvQPathWidgetItem(QString::fromStdString(f->name()),
+								QString::fromStdString(f->fullName()));		
+	  	items_ << item;
+	  	 		
+	  	QToolButton *tb;
+		
+		//---------------------------------------
+		// Dir name
+		//---------------------------------------
+		
+		tb=new QToolButton(this);
+		item->nameTb_=tb;		
+		
+		if(item->fullName_ == "/")
+		{
+		  	tb->setToolButtonStyle(Qt::ToolButtonIconOnly);
+			tb->setIconSize(QSize(16,16));
+			tb->setIcon(MvQIconProvider::pixmap(f,16));
+			tb->setObjectName("pathIconTb");
+		}	
+		else
+		{
+		  	if(f->locked())
+			{  
+		  		tb->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+		  		tb->setIconSize(QSize(12,12));
+				tb->setIcon(MvQIconProvider::lockPixmap(12));				
+			}
+			else
+			{  
+		  		tb->setToolButtonStyle(Qt::ToolButtonTextOnly);
+			}
+			tb->setText(item->name_);
+			tb->setObjectName("pathNameTb");
+			
+			if(f->isLink())
+			  	tb->setStyleSheet("QToolButton {font-style: italic;}");
+		}  	
+			
+		//tb->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+		tb->setAutoRaise(true);		  	
+		
+		connect(tb,SIGNAL(clicked(bool)),
+			smp_,SLOT(map()));				
+			
+		//Context menu 
+    		tb->setContextMenuPolicy(Qt::CustomContextMenu);
+	
+		connect(tb,SIGNAL(customContextMenuRequested(const QPoint &)),
+                	this, SLOT(slotContextMenu(const QPoint &)));	  		
+				
+		smp_->setMapping(tb,i);		
+		
+	  	//---------------------------------------
+		//Menu with the folders in the given dir	
+		//---------------------------------------
+		
+		tb=new QToolButton(this);
+		item->menuTb_=tb;
+		
+		tb->setArrowType(Qt::RightArrow);
+		tb->setAutoRaise(true);
+		tb->setIconSize(QSize(10,10));
+		tb->setPopupMode(QToolButton::InstantPopup);
+		tb->setObjectName("pathMenuTb");
+	
+		QMenu *mn=createDirMenu(i,f,tb);
+		tb->setMenu(mn); 		
+	}
+	
+	//Add items to layout 
+	for(int i=0; i <  items_.count(); i++)
+	{
+		layout_->addWidget(items_.at(i)->nameTb_);
+		layout_->addWidget(items_.at(i)->menuTb_);		
+	}
+	
+	//Set the text in the last item bold
+	for(int i=0; i <  items_.count(); i++)
+	{
+		QString st=items_.at(i)->nameTb_->styleSheet();
+		if(i== items_.count()-1)
+		 	st+="QToolButton {font-weight: bold;}";
+		else
+		  	st+="QToolButton {font-weight: normal;}";
+		
+		items_.at(i)->nameTb_->setStyleSheet(st);
+	}	
+		
+	/*items_.at(items_.count()-1)->nameTb_->setStyleSheet("QToolButton {font-weight: bold;}");
+
+	for(int i=0; i <  items_.count()-1; i++)
+	{
+		items_.at(i)->nameTb_->setStyleSheet("QToolButton {font-weight: normal;}");
+	}*/  
+	 
+	layout_->addStretch(1);	   
+}  
+
+QMenu* MvQPathWidget::createDirMenu(int index,Folder* folder,QWidget *parent)
+{
+	if(index >=0 && index < items_.count())
+	{ 		
+	  	QMenu *dirMenu=new QMenu(parent);
+	  	
+		for(map<string,IconObjectH>::const_iterator it=folder->kids().begin(); it!= folder->kids().end(); it++)
+		{
+		  	if(it->second->visible() &&  it->second->iconClass().type() == "Folder")
+			{
+				QAction *ac=dirMenu->addAction(QString::fromStdString(it->first));
+				ac->setData(index);
+			}
+		}
+		
+		connect(dirMenu,SIGNAL(triggered(QAction*)),
+			this,SLOT(slotChangeDir(QAction*)));
+		
+		dirMenu->setContextMenuPolicy(Qt::CustomContextMenu);
+		
+		connect(dirMenu,SIGNAL(customContextMenuRequested(const QPoint &)),
+                        this, SLOT(slotContextMenu(const QPoint &)));
+		
+		return dirMenu;	
+	}
+	
+	return 0;
+}
+
+
+void MvQPathWidget::slotChangeDir(int index)
+{
+	if(index >=0 && index < items_.count()-1)
+	{
+	  	QString path=items_.at(index)->fullName_;
+	  		 
+	  	//QString path;
+		//for(int i=0; i <= index; i++)
+		//	path+="/"+items_[i].name_;
+		
+		qDebug() << path;
+				
+		//setPath(path);
+		
+		emit dirChanged(path);
+				
+		setPath(path);
+	}
+}
+
+void MvQPathWidget::slotChangeDir(QAction *ac)
+{
+	QString path=getPath(ac);
+	
+	if(!path.isEmpty())
+	{
+	  	emit dirChanged(path); 		
+		setPath(path);
+	}
+	
+	/*
+	if (!ac) return;
+	
+	QVariant var=ac->data();
+	if(var.isNull())  return;
+	
+	int index=var.toInt();
+  
+  	if(index >=0 && index < items_.count())
+	{
+		QString path=items_.at(index)->fullName_;
+			  
+	  	//QString path;
+		//for(int i=0; i < index; i++)
+		//	path+="/"+items_[i].name_;
+		
+		path+="/" + ac->text();
+		
+		qDebug() << path;
+		
+		emit dirChanged(path); 
+		
+		setPath(path);
+	}*/
+}
+
+QString MvQPathWidget::getPath(QToolButton *tb)
+{
+	foreach(MvQPathWidgetItem *item,items_)
+	{
+	  	if(item->nameTb_ == tb)
+		{
+	  		return item->fullName_;
+		}
+	}
+	
+	return QString();
+}
+
+QString MvQPathWidget::getPath(QAction *ac)
+{	
+	if (!ac) return QString();
+	
+	QVariant var=ac->data();
+	if(var.isNull())  return QString();
+	
+	int index=var.toInt();
+  
+  	if(index >=0 && index < items_.count())
+	{
+		return items_.at(index)->fullName_ + "/" + ac->text();;
+	}
+	
+	return QString();
+}
+ 
+void MvQPathWidget::paintEvent(QPaintEvent *)
+ {
+     QStyleOption opt;
+     opt.init(this);
+     QPainter p(this);
+     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
+ }
\ No newline at end of file
diff --git a/src/Desktop/MvQPathWidget.h b/src/Desktop/MvQPathWidget.h
new file mode 100644
index 0000000..c8553cc
--- /dev/null
+++ b/src/Desktop/MvQPathWidget.h
@@ -0,0 +1,76 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQPathWidget_H
+#define MvQPathWidget_H
+
+#include <QWidget>
+#include <QToolButton>
+
+class QAction;
+class QHBoxLayout;
+class QMenu;
+class QSignalMapper;
+
+class MvQContextItem;
+
+class Folder;
+
+class MvQPathWidgetItem
+{
+public:
+    	MvQPathWidgetItem(QString n,QString fn) : name_(n), fullName_(fn), menuTb_(0), nameTb_(0) {}
+	~MvQPathWidgetItem() {
+	     if(menuTb_) menuTb_->deleteLater();
+	     if(nameTb_) nameTb_->deleteLater();
+	    } 
+	    
+  	QString name_;
+	QString fullName_;
+  	QToolButton* menuTb_;	  
+  	QToolButton* nameTb_;
+};
+
+class MvQPathWidget : public QWidget
+{
+Q_OBJECT 
+
+public:
+	MvQPathWidget(QWidget* parent=0);
+	~MvQPathWidget() {}
+	
+	void setPath(QString);
+	void setPath(Folder*);
+		
+public slots:
+    	void slotChangeDir(int);
+	void slotChangeDir(QAction *);
+	void slotContextMenu(const QPoint&);
+	
+signals:
+  	void pathClicked(int);
+	void dirChanged(QString); 
+	void commandRequested(QString,QString);
+	
+protected: 
+	void clearLayout();
+	QMenu* createDirMenu(int,Folder*,QWidget *);
+	QString getPath(QToolButton*);
+	QString getPath(QAction*);
+	void paintEvent(QPaintEvent *);
+	
+	QHBoxLayout *layout_;
+	QSignalMapper* smp_;
+	QList<MvQPathWidgetItem*> items_;
+	
+	static QList<MvQContextItem*> cmTbItems_;
+	static QList<MvQContextItem*> cmMenuItems_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQProductBrowser.cc b/src/Desktop/MvQProductBrowser.cc
new file mode 100644
index 0000000..a1d75c8
--- /dev/null
+++ b/src/Desktop/MvQProductBrowser.cc
@@ -0,0 +1,547 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQProductBrowser.h"
+
+#include <QApplication>
+#include <QCloseEvent>
+#include <QDialogButtonBox>
+#include <QDebug>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QMouseEvent>
+#include <QPainter>
+#include <QPushButton>
+#include <QSettings>
+#include <QVBoxLayout>
+
+#include "MvQIconMimeData.h"
+#include "MvQIconProvider.h"
+
+#include "IconClass.h"
+#include "Path.h"
+#include "Product.h"
+
+QMap<Product*,QPixmap> MvQProductModel::pixmaps_;
+int MvQProductModel::itemHeight_;
+
+//=====================================================
+//
+// MvQProductListDelegate
+//
+//=====================================================
+
+MvQProductListDelegate::MvQProductListDelegate(MvQProductModel* prodModel,int itemHeight,QWidget *parent) : 
+  QStyledItemDelegate(parent),
+  prodModel_(prodModel),
+  itemHeight_(itemHeight)
+{
+	
+}
+
+void MvQProductListDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option,
+		           const QModelIndex& index) const
+{
+	if(index.column() == 0)
+	{
+		QStyleOptionViewItemV4 vopt(option);
+   		initStyleOption(&vopt, index);
+   
+    		const QStyle *style = vopt.widget ? vopt.widget->style() : QApplication::style();
+    		const QWidget* widget = vopt.widget;
+
+		//int height=option.rect.height();
+
+		//Get font size
+		QFont font=QApplication::font();
+		QFontMetrics fm(font);
+		int fontSize=fm.height()+4;
+		
+		//Save painter state
+		painter->save();
+		
+		//Highlight
+		if (option.state & QStyle::State_HasFocus)
+             		painter->fillRect(option.rect, option.palette.highlight());
+			
+		//Draw icon
+		QPixmap pixmap=index.data(Qt::DecorationRole).value<QPixmap>();
+		QRect iconRect = style->subElementRect(QStyle::SE_ItemViewItemDecoration, &vopt, widget);
+		painter->drawPixmap(iconRect,pixmap);
+		
+		//Draw icon border
+		painter->setPen(QColor(230,230,230));
+		painter->drawRect(iconRect);		
+		
+		//-------------------
+		// Pushbuttons
+		//-------------------
+		
+		int buttonWidth=0;
+		int buttonHeight=fontSize+4;
+		int buttonY=option.rect.bottomRight().y()-3-buttonHeight;
+								
+		//Vis pb
+		QStyleOptionButton visPbOpt;        
+		visPbOpt.text="Visualise";
+		visPbOpt.state = QStyle::State_Active | QStyle::State_Enabled;
+        	
+		buttonWidth=fm.width(visPbOpt.text)+6;
+		visPbOpt.rect = QRect(option.rect.width()-6-buttonWidth,
+        			      buttonY,
+				      buttonWidth,
+        			      buttonHeight); 
+								 
+        	style->drawControl(QStyle::CE_PushButton, &visPbOpt, painter,widget);	
+		prodModel_->setData(index,visPbOpt.rect,MvQProductModel::FolderPbRole);					
+		
+		//Open pb
+		QStyleOptionButton folderPbOpt;        
+        	folderPbOpt.text="Open";
+		folderPbOpt.state = QStyle::State_Active | QStyle::State_Enabled;
+        	
+		buttonWidth=fm.width(folderPbOpt.text)+6+16+2;
+		folderPbOpt.rect = QRect(visPbOpt.rect.topLeft().x()-16-buttonWidth,
+					 buttonY,
+				 	 buttonWidth,
+					 buttonHeight); 
+								 
+		folderPbOpt.icon=MvQIconProvider::pixmap(IconClass::find("FOLDER"),16);	
+		folderPbOpt.iconSize=QSize(16,16);
+		
+        	style->drawControl(QStyle::CE_PushButton, &folderPbOpt, painter,widget);	
+		prodModel_->setData(index,folderPbOpt.rect,MvQProductModel::FolderPbRole);		
+	  
+		//Draw separator line
+		painter->setPen(QColor(230,230,230));
+		painter->drawLine(option.rect.bottomLeft(),option.rect.bottomRight());
+		
+		//-----------------------
+		// Title + Description
+		//-----------------------
+		
+		font.setBold(true);					
+		painter->setFont(font);
+		if(option.state & QStyle::State_HasFocus)	
+			painter->setPen(option.palette.highlightedText().color());
+		else
+		  	painter->setPen(option.palette.text().color());
+		
+		//Title
+		int textWidth=option.rect.width()-(iconRect.x()+iconRect.width()+5)-10;		
+				
+		QString title=index.data(Qt::DisplayRole).toString();
+		QRect titleRect(iconRect.topRight().x()+10,option.rect.y()+3,
+			        textWidth, fontSize+7);
+				
+		painter->drawText(titleRect,Qt::AlignLeft,title);
+		
+		textWidth=folderPbOpt.rect.x()-15-(iconRect.topRight().x()+10);  	
+		
+		//Description
+		/*font.setBold(false);
+		painter->setFont(font);
+		
+		QString desc=index.data(MvQProductModel::DescriptionRole).toString();
+		QRect descRect(titleRect.x(),
+			       titleRect.bottomLeft().y()+7,
+			       textWidth,
+			       fontSize*2+10);
+			       	
+				
+		painter->drawText(descRect,Qt::TextWordWrap | Qt::AlignLeft,desc);*/
+				
+
+		//restore painter state
+		painter->restore();			
+	}		
+	else
+	{		
+		QStyledItemDelegate::paint(painter,option,index);
+	}
+}
+QSize MvQProductListDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const
+{
+	QSize size=QStyledItemDelegate::sizeHint(option,index);
+
+	if(index.column() == 0)
+	{
+		size.setHeight(itemHeight_);
+	}
+	else
+	{
+	  	size+=QSize(0,6);
+	}
+	
+	return size;
+}
+	
+//=====================================================
+//
+// MvQProductListView
+//
+//=====================================================	
+
+MvQProductListView::MvQProductListView(QWidget *parent) : QListView(parent)
+{
+}  
+
+void MvQProductListView::mousePressEvent(QMouseEvent *event)  
+{
+	QModelIndex index=indexAt(event->pos());
+	if(index.isValid())
+	{  	
+		if(model()->data(index,MvQProductModel::FolderPbRole).toRect().contains(event->pos()))
+		{
+		  	emit openFolder(index);
+		}	
+	
+	}
+	
+	QAbstractItemView::mousePressEvent(event);
+}  
+ 
+//=============================================
+//
+// MvQProductModel
+//
+//=============================================
+
+MvQProductModel::MvQProductModel(int itemHeight,QObject *parent) : 
+   QAbstractItemModel(parent)
+{ 
+	itemHeight_=itemHeight;
+}
+
+MvQProductModel::~MvQProductModel()
+{
+}
+
+void MvQProductModel::setProduct(const vector<Product*>& data)
+{
+	beginResetModel();
+	folderPbRect_.clear();
+	visPbRect_.clear();	
+	data_=data;	
+	endResetModel();
+}
+
+int MvQProductModel::columnCount( const QModelIndex& parent) const
+{
+	 return parent.isValid() ? 0 : 1;
+}
+
+int MvQProductModel::rowCount( const QModelIndex& index) const
+{	
+	if (!index.isValid() )
+	{		
+	  	return static_cast<int>(data_.size());
+	}
+	else
+	{
+		return  0;
+	}
+}
+
+QVariant MvQProductModel::data( const QModelIndex& index, int role ) const
+{	
+  	if(!index.isValid() || index.column() != 0)
+	{
+		return QVariant();
+	}
+	
+	if(index.row() <0 || index.row() >= static_cast<int>(data_.size()))
+	{
+		return QVariant();
+	}  
+		
+	int row=index.row();
+	
+	switch(role)
+	{
+		case Qt::DecorationRole:  			
+		  	return MvQProductModel::pixmap(data_.at(row));		  		
+			
+		case Qt::DisplayRole:
+	  		return QString::fromStdString(data_.at(row)->title());
+		
+		case DescriptionRole:
+		case Qt::ToolTipRole:
+		         return QString::fromStdString(data_.at(row)->description());
+		
+		case FolderPbRole:	 	
+			return folderPbRect_.value(index);
+		 
+		case VisPbRole:	 	
+			return folderPbRect_.value(index);
+		
+		case PathRole:	 	
+			return QString::fromStdString(data_.at(row)->path());
+		
+		default:
+		  	break;
+	}
+	
+	return QVariant();
+}
+
+
+bool MvQProductModel::setData(const QModelIndex & index, QRect rect, int role) 
+{			
+	if(!index.isValid())
+	{
+		return false;	
+	}
+	
+	if(role == FolderPbRole)  	
+	{
+	  	folderPbRect_[index]=rect;
+		return true;
+	}
+	else if(role == VisPbRole)  	
+	{
+	  	visPbRect_[index]=rect;
+		return true;
+	}
+	
+	return false;
+}
+
+QModelIndex MvQProductModel::index( int row, int column, const QModelIndex & /*parent*/ ) const
+{
+
+	return createIndex(row,column,0);
+}
+
+
+QModelIndex MvQProductModel::parent( const QModelIndex & /*index*/ ) const
+{
+    return QModelIndex();
+}
+
+
+QPixmap MvQProductModel::pixmap(Product *item)
+{
+	if(!item || !item->hasImage())
+	  	return QPixmap();
+	
+  	QMap<Product*,QPixmap>::iterator it=pixmaps_.find(item);
+	if(it != pixmaps_.end())
+		return it.value();
+			
+	QImage img(QString::fromStdString(item->imagePath()));
+					  
+	QPixmap pix=QPixmap::fromImage(img.scaledToHeight(itemHeight_-8,Qt::SmoothTransformation));
+				          
+	pixmaps_[item]=pix;
+	 
+	return pix;
+}
+
+//=============================================
+//
+// MvQProductListWidget
+//
+//=============================================
+
+MvQProductListWidget::MvQProductListWidget(QWidget *parent) : 
+    QListWidget(parent)
+{
+	setAcceptDrops(false);
+	setDragEnabled(true);
+}  
+
+void MvQProductListWidget::mousePressEvent(QMouseEvent *event)
+{
+	if( event->button() == Qt::LeftButton)
+	{
+		startPos_=event->pos();
+	}
+	
+	QListView::mousePressEvent(event);
+}
+
+void MvQProductListWidget::mouseMoveEvent(QMouseEvent *event)
+{
+	if(event->buttons() & Qt::LeftButton)
+	{
+		int distance = (event->pos() - startPos_).manhattanLength();
+		if(distance >= QApplication::startDragDistance())
+		{
+			 performDrag();
+		}	
+	}
+	
+	QListView::mouseMoveEvent(event);
+}
+
+void MvQProductListWidget::performDrag()
+{
+	/*QListWidgetItem *item=currentItem();
+	
+	if(!item)
+		return;
+		
+	const IconClass& iconClass=IconClass::find(item->data(Qt::UserRole).toString().toStdString());
+	
+	
+	MvQNewIconMimeData::IconDefType type=(iconDefType_ == UserDef)?
+	                                     (MvQNewIconMimeData::UserDef):
+	                                     (MvQNewIconMimeData::SystemDef);
+	
+	MvQNewIconMimeData *mimeData= new MvQNewIconMimeData(iconClass.name().c_str(),type);
+	
+	QDrag *drag = new QDrag(this);
+	drag->setPixmap(MvQPixmapProvider::current()->pixmap(iconClass));
+	drag->setMimeData(mimeData);	
+		
+	if(drag->exec(Qt::CopyAction)  == Qt::CopyAction)
+	{
+	}*/								  	
+}	
+
+//=====================================================
+//
+// MvQProductBrowser
+//
+//=====================================================
+
+MvQProductBrowser::MvQProductBrowser(QWidget *parent) : 
+        QDialog(parent)       
+{		
+	//setAttribute(Qt::WA_DeleteOnClose);
+	
+	setWindowTitle("Metview - products");
+	
+	//Initial size
+	resize(QSize(600,800));
+	
+	//layout
+	QVBoxLayout *vb=new QVBoxLayout;
+	vb->setSpacing(0); 
+	vb->setContentsMargins(1,1,1,1);
+	setLayout(vb);
+
+	//Search
+	QLabel *label=new QLabel("Search:");
+	searchLine_=new QLineEdit(this);
+	
+	QHBoxLayout *hb=new QHBoxLayout(this);
+	hb->addWidget(label);
+	hb->addWidget(searchLine_,1);
+	vb->addLayout(hb);
+	
+	searchList_=new MvQProductListView(this);
+	vb->addWidget(searchList_);
+	
+	//Item height in view
+	QFont font=QApplication::font();
+	QFontMetrics fm(font);
+	int itemHeight=fm.height()*5+10;
+	if(itemHeight < 58) itemHeight=58;
+
+	model_=new MvQProductModel(itemHeight,this);
+	searchList_->setModel(model_);
+	
+	MvQProductListDelegate *delegate=new MvQProductListDelegate(model_,itemHeight,this);
+	searchList_->setItemDelegate(delegate);
+	
+	connect(searchLine_,SIGNAL(textChanged(QString)),
+		this, SLOT(slotSearch(QString)));
+		
+	connect(searchList_,SIGNAL(openFolder(const QModelIndex&)),
+		this,SLOT(slotOpenFolder(const QModelIndex&)));
+				
+	// Buttons
+	buttonBox_= new QDialogButtonBox(this);
+	
+	buttonBox_->addButton(QDialogButtonBox::Close);
+	
+	connect(buttonBox_, SIGNAL(clicked(QAbstractButton*)), 
+		this, SLOT(slotButtonClicked(QAbstractButton*)));
+	
+	vb->addWidget(buttonBox_);
+}
+
+MvQProductBrowser::~MvQProductBrowser()
+{	
+}
+
+void MvQProductBrowser::closeEvent(QCloseEvent* event)
+{
+	//emit aboutToClose(this);
+	close();
+	event->accept();
+}
+
+void MvQProductBrowser::slotButtonClicked(QAbstractButton* button)
+{
+	if(!button) return;
+	
+	if(buttonBox_->standardButton(button) == QDialogButtonBox::Close)
+	{
+		close();
+		accept();  	
+	}  
+  
+} 
+void MvQProductBrowser::slotItemSelected(QListWidgetItem* /*item*/)
+{
+  	/*QMap<const IconClass&,QListWidgetItem*>::iterator it=classes_.find(item);
+	if(it != classes_.end())
+		selected_=it.value();  */
+
+	//accept();  
+}  
+
+void MvQProductBrowser::slotSearch(QString str)
+{
+  	vector<Product*> res;
+	
+	if(str.simplified().isEmpty())
+	{
+		model_->setProduct(res);
+		return;
+	}	
+  
+	Product::find(str.toStdString(),res);
+	model_->setProduct(res);
+	
+	/*searchList_->clear();
+	
+	
+	
+	for(vector<Product*>::iterator it=res.begin(); it != res.end(); it++)
+	{			
+		if((*it)->hasImage())
+		{
+		  	QImage img(QString::fromStdString((*it)->imagePath()));
+					  
+	  		QListWidgetItem *item=new QListWidgetItem(QPixmap::fromImage(img.scaled(60,45,Qt::KeepAspectRatio,Qt::SmoothTransformation)),
+				              QString::fromStdString((*it)->title()));
+						
+			item->setData(Qt::UserRole,QString::fromStdString((*it)->title()));
+			searchList_->addItem(item);
+		}	
+	}*/	
+}  
+
+void MvQProductBrowser::slotOpenFolder(const QModelIndex& index)
+{
+	emit openFolderInWin(model_->data(index,MvQProductModel::PathRole).toString()) ;   
+}  
+ 
+void MvQProductBrowser::writeSettings()
+{
+}	
+
+void MvQProductBrowser::readSettings()
+{
+}	
diff --git a/src/Desktop/MvQProductBrowser.h b/src/Desktop/MvQProductBrowser.h
new file mode 100644
index 0000000..3c4dd11
--- /dev/null
+++ b/src/Desktop/MvQProductBrowser.h
@@ -0,0 +1,154 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQProductBrowser_H
+#define MvQProductBrowser_H
+ 
+#include <QDialog>
+#include <QListWidget>
+#include <QMap>
+#include <QStyledItemDelegate>
+#include <QStyleOptionViewItem>
+
+#include <vector>
+
+class QAbstractButton;
+class QCloseEvent;
+class QDialogButtonBox;
+class QLineEdit;
+class QListView;
+class QListWidget;
+class QSplitter;
+
+class Product;
+class MvQProductModel;
+
+using namespace std;
+
+//----------------------------
+// MvQProductListDelegate 
+//----------------------------
+
+class MvQProductListDelegate : public QStyledItemDelegate
+{
+public:
+	MvQProductListDelegate(MvQProductModel*,int,QWidget* parent=0);
+	void paint(QPainter *painter,const QStyleOptionViewItem &option,
+		           const QModelIndex& index) const;
+	QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const;
+	
+private:
+	MvQProductModel* prodModel_;
+	int itemHeight_;
+};
+
+//----------------------------
+// MvQProductModel
+//----------------------------
+
+class MvQProductModel : public QAbstractItemModel
+{
+public:
+	MvQProductModel(int,QObject *parent=0);
+	~MvQProductModel();
+	
+	enum CustomItemRole {FolderPbRole = Qt::UserRole+1,
+	                     VisPbRole = Qt::UserRole+2,
+	                     DescriptionRole = Qt::UserRole+3,
+	                     PathRole = Qt::UserRole+4};
+			     
+	int columnCount( const QModelIndex&) const;
+	int rowCount (const QModelIndex& parent = QModelIndex() ) const;
+	QVariant data (const QModelIndex& , int role = Qt::DisplayRole ) const;   
+	bool setData( const QModelIndex &, QRect, int); 
+	QModelIndex index (int, int, const QModelIndex& parent = QModelIndex() ) const;
+   	QModelIndex parent (const QModelIndex & ) const;
+
+	void setProduct(const vector<Product*>&);
+
+protected:
+	static QPixmap pixmap(Product*);
+  
+	static int itemHeight_;
+	vector<Product*> data_;
+	static QMap<Product*,QPixmap> pixmaps_;
+	QMap<QModelIndex,QRect> folderPbRect_;
+	QMap<QModelIndex,QRect> visPbRect_;	
+};
+
+//----------------------------
+// MvQProductListView
+//---------------------------- 
+
+class MvQProductListView : public QListView
+{
+Q_OBJECT
+  
+public:
+	MvQProductListView(QWidget *parent=0);
+	
+signals:	
+	void openFolder(const QModelIndex&);
+	
+protected:
+        void mousePressEvent(QMouseEvent *event);   
+};	
+
+//----------------------------
+// MvQProductListWidget
+//---------------------------- 
+
+class MvQProductListWidget : public QListWidget
+{
+public:
+	MvQProductListWidget(QWidget *parent=0);
+	
+protected:
+        void mousePressEvent(QMouseEvent*);
+	void mouseMoveEvent(QMouseEvent*);
+	void performDrag();
+	
+	QPoint startPos_;
+};	
+
+//----------------------------
+// MvQProductBrowser
+//---------------------------- 
+
+
+class MvQProductBrowser : public QDialog
+{
+    Q_OBJECT
+
+public:
+	MvQProductBrowser(QWidget* parent=0);
+	~MvQProductBrowser();
+	
+	void writeSettings();
+	void readSettings();
+
+public slots:
+	void slotItemSelected(QListWidgetItem*);
+	void slotSearch(QString);
+	void slotOpenFolder(const QModelIndex&);
+	void slotButtonClicked(QAbstractButton*);
+signals:	
+	void openFolderInWin(QString);
+	
+protected:
+	void closeEvent(QCloseEvent*);	
+	
+	QMap<QString,MvQProductListWidget*> prodLists_;
+	QLineEdit*  searchLine_;
+	MvQProductListView* searchList_;
+	MvQProductModel* model_;
+	QDialogButtonBox* buttonBox_;
+};
+
+#endif
diff --git a/src/Desktop/MvQRequestPanelHelp.cc b/src/Desktop/MvQRequestPanelHelp.cc
new file mode 100644
index 0000000..980950c
--- /dev/null
+++ b/src/Desktop/MvQRequestPanelHelp.cc
@@ -0,0 +1,25 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQRequestPanelHelp.h"
+
+#include "HelpFactory.h"
+#include "RequestPanel.h"
+
+MvQRequestPanelHelp::MvQRequestPanelHelp(RequestPanel& owner,const Parameter& param) :
+	owner_(owner),
+	param_(param),
+	parentWidget_(owner.parentWidget())
+{
+}
+
+MvQRequestPanelHelp* MvQRequestPanelHelp::build(RequestPanel& owner,const Parameter& def)
+{
+	return HelpFactory::create(owner, def);
+}
\ No newline at end of file
diff --git a/src/Desktop/MvQRequestPanelHelp.h b/src/Desktop/MvQRequestPanelHelp.h
new file mode 100644
index 0000000..463d3a3
--- /dev/null
+++ b/src/Desktop/MvQRequestPanelHelp.h
@@ -0,0 +1,50 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQRequestPanelHelp_H
+#define MvQRequestPanelHelp_H
+
+#include "RequestPanelItem.h"
+
+#include <QIcon>
+#include <QObject>
+
+class  QWidget;
+
+class  Parameter;
+class  RequestPanel;
+
+class MvQRequestPanelHelp : public QObject
+{  
+Q_OBJECT
+
+public:
+	MvQRequestPanelHelp(RequestPanel&,const Parameter&);
+	virtual ~MvQRequestPanelHelp() {}; 
+	
+	virtual void start() = 0;
+	virtual bool dialog() = 0;
+	virtual QIcon dialogIcon() {return QIcon();}
+	virtual bool useLargeDialogIcon() {return false;}
+	virtual QWidget* widget() = 0;	
+	virtual void refresh(const vector<string>&)=0;
+	
+	static MvQRequestPanelHelp* build(RequestPanel&,const Parameter&);
+	
+signals:
+        void edited(const vector<string>&);
+	void edited(const vector<string>&,const vector<string>&);
+
+protected:
+    	RequestPanel& owner_;
+	const Parameter& param_;
+	QWidget *parentWidget_;	
+};
+
+#endif
diff --git a/src/Desktop/MvQRequestPanelLine.cc b/src/Desktop/MvQRequestPanelLine.cc
new file mode 100644
index 0000000..d31873b
--- /dev/null
+++ b/src/Desktop/MvQRequestPanelLine.cc
@@ -0,0 +1,206 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQRequestPanelLine.h"
+
+#include <QApplication>
+#include <QFrame>
+#include <QLabel>
+#include <QStyle>
+#include <QToolButton>
+
+#include "MvQRequestPanelHelp.h"
+
+#include "LineFactory.h"
+#include "Parameter.h"
+#include "RequestPanel.h"
+
+MvQRequestPanelLine::MvQRequestPanelLine(RequestPanel& owner,const Parameter& param, bool buildLine) : 
+	RequestPanelItem(owner,param),
+	gray_(false),
+	helper_(0),
+	parentWidget_(owner.parentWidget())
+{	
+	if(!buildLine)
+	  	return;
+  
+  	RequestPanel *parentLayout=&owner_;
+		
+	//Toggle to indicate default/non-default settings
+	defaultTb_ = new QToolButton(parentWidget_);
+	defaultTb_->setObjectName(QString::fromUtf8("guiItemDefaultTb"));
+	defaultTb_->setCheckable(true);
+	defaultTb_->setChecked(false);
+	defaultTb_->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum));
+	defaultTb_->setMaximumSize(QSize(10,10));
+	defaultTb_->setEnabled(false);
+	
+	connect(defaultTb_,SIGNAL(clicked(bool)),
+		this,SLOT(slotChangeToDefault(bool)));
+	
+	//name label
+	name_=QString::fromStdString(param.beautifiedName());	
+	nameLabel_=new QLabel(name_,parentWidget_);
+	const char* help_text=param.help_text();
+	if(help_text)
+	  	nameLabel_->setToolTip("<font>" + QString(help_text) + "</font>");
+	
+	row_=parentLayout->rowCount();
+	parentLayout->addWidget(defaultTb_,row_,DefaultColumn);
+	parentLayout->addWidget(nameLabel_,row_,NameColumn);
+}
+
+MvQRequestPanelLine::~MvQRequestPanelLine()
+{
+ 	if(helper_) delete helper_;	  
+}
+
+
+MvQRequestPanelLine* MvQRequestPanelLine::build(RequestPanel& owner,const Parameter& param)
+{
+	MvQRequestPanelLine* p = LineFactory::create(owner,param);
+	p->buildHelp();
+	//p->init(w);
+	return p;
+}
+
+void MvQRequestPanelLine::buildHelp()
+{	
+	if(helper_) return;
+	
+	helper_ = MvQRequestPanelHelp::build(owner_,param_);
+	
+	if(!helper_)
+		return;
+	
+	MvRequest helpReq=param_.interfaceRequest();
+	
+	//Toolbuton to show/hide help widget or launch dialog helper
+	helpTb_ = new QToolButton(parentWidget_);
+	//helpTb_->setObjectName(QString::fromUtf8("guiItemDefaultTb"));
+	
+	//Set helper icon
+	if(helper_->dialog())
+	{
+		helpTb_->setIcon(helper_->dialogIcon());
+		if(helper_->useLargeDialogIcon())
+			helpTb_->setMaximumSize(QSize(20,20));
+		else
+		  	helpTb_->setMaximumSize(QSize(16,16));			
+	}
+	else
+	{
+		QIcon ic;
+		ic.addPixmap(QPixmap(":/desktop/expand_left.svg"),QIcon::Normal,QIcon::On);
+		ic.addPixmap(QPixmap(":/desktop/expand_right.svg"),QIcon::Normal,QIcon::Off);
+	  	helpTb_->setIcon(ic);
+		helpTb_->setMaximumSize(QSize(16,16));		
+		helpTb_->setCheckable(true);
+		helpTb_->setChecked(false);
+	}
+	
+	if(const char* ttip=helpReq("help_tooltip"))
+	{
+	  	helpTb_->setToolTip(QString(ttip));
+	}	
+	
+	helpTb_->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum));
+	
+	RequestPanel *parentLayout=&owner_;
+	parentLayout->addWidget(helpTb_,row_,ExpandColumn);
+			
+	if(helper_->dialog())
+	{
+		connect(helpTb_,SIGNAL(clicked(bool)),
+			this,SLOT(slotStarHelpDialog(bool)));
+	}
+	else
+	{  	
+	  	parentLayout->addWidget(helper_->widget(),row_+1,WidgetColumn);	
+		helper_->widget()->setVisible(false);
+		
+		connect(helpTb_,SIGNAL(toggled(bool)),
+			helper_->widget(),SLOT(setVisible(bool)));	
+	
+		connect(helper_,SIGNAL(edited(const vector<string>&)),
+                	this,SLOT(slotHelperEdited(const vector<string>&)));
+		
+		connect(helper_,SIGNAL(edited(const vector<string>&,const vector<string>&)),
+                	this,SLOT(slotHelperEdited(const vector<string>&,const vector<string>&)));
+	}	
+}
+
+void MvQRequestPanelLine::gray(bool g)
+{
+	//g = g && param_.hasDefaults();
+	if(gray_ != g)
+	{
+		gray_ = g;
+		if(gray_)
+			setEnabled(false);
+		else
+			setEnabled(true);
+	}
+}
+
+void MvQRequestPanelLine::mark(bool g)
+{
+	if(g == false)
+	{  
+		defaultTb_->setChecked(false);
+	  	defaultTb_->setEnabled(false);
+	}	
+	else 
+	{  	defaultTb_->setEnabled(true);
+		defaultTb_->setChecked(true);
+	}
+}
+
+void MvQRequestPanelLine::setEnabled(bool s)
+{		
+  	if(s == false && 
+	  helper_ && !helper_->dialog())
+	{
+		helpTb_->setChecked(false);
+		helper_->widget()->setEnabled(s);
+	}
+	
+  	for(int i=0; i < owner_.columnCount(); i++)
+	{
+	  	QLayoutItem *item=owner_.itemAtPosition(row_,i);
+		if(item) 
+		{
+		  	QWidget *w=item->widget();
+			if(w) w->setEnabled(s);
+		}
+	}
+	
+	if(s == true && 
+	   helper_ && !helper_->dialog())
+	{
+	  	helper_->widget()->setEnabled(s);
+	}	
+}
+
+void MvQRequestPanelLine::slotChangeToDefault(bool checked)
+{
+	if(!checked)
+	{
+		//This will reset the request and call update on all the items
+	  	owner_.setToDefault(this);		
+	}	
+}  
+
+
+void MvQRequestPanelLine::slotStarHelpDialog(bool)
+{
+	if(helper_)
+	  	helper_->start();
+  
+}  
diff --git a/src/Desktop/MvQRequestPanelLine.h b/src/Desktop/MvQRequestPanelLine.h
new file mode 100644
index 0000000..960ea2e
--- /dev/null
+++ b/src/Desktop/MvQRequestPanelLine.h
@@ -0,0 +1,66 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQRequestPanelLine_H
+#define MvQRequestPanelLine_H
+
+#include "RequestPanelItem.h"
+
+#include <QObject>
+#include <QString>
+
+class QLabel;
+class QToolButton;
+
+class  MvQRequestPanelHelp;
+
+class  Parameter;
+class  RequestPanel;
+
+class MvQRequestPanelLine : public QObject, public RequestPanelItem
+{
+Q_OBJECT  
+  
+public:
+	MvQRequestPanelLine(RequestPanel&,const Parameter&,bool buildLine=true);
+	virtual ~MvQRequestPanelLine(); 
+	
+	static MvQRequestPanelLine* build(RequestPanel&,const Parameter&);
+	
+	void gray(bool);
+	void mark(bool);
+
+public slots:
+  	void slotChangeToDefault(bool);
+	virtual void slotHelperEdited(const vector<string>&) {};
+	virtual void slotHelperEdited(const vector<string>&,const vector<string>&) {};
+	void slotStarHelpDialog(bool);
+	
+protected:
+	void buildHelp();
+	void setEnabled(bool);
+	
+	enum ColumnPos {DefaultColumn=0,NameColumn=1,ExpandColumn=2,WidgetColumn=3};
+	
+	QToolButton* defaultTb_;
+	QLabel* nameLabel_;
+	QToolButton* helpTb_;
+	QString name_;
+	QString source_;	
+	int row_;
+	
+	bool gray_;
+	bool mark_;
+	
+	MvQRequestPanelHelp* helper_;
+	QWidget *parentWidget_;
+};
+
+
+#endif
diff --git a/src/Desktop/MvQRequestPanelWidget.cc b/src/Desktop/MvQRequestPanelWidget.cc
new file mode 100644
index 0000000..2b200ed
--- /dev/null
+++ b/src/Desktop/MvQRequestPanelWidget.cc
@@ -0,0 +1,186 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQRequestPanelWidget.h"
+
+#include <QDebug>
+#include <QDropEvent>
+#include <QGridLayout>
+#include <QPainter>
+#include <QPalette>
+
+#include "MvQIconMimeData.h"
+
+#include "IconClass.h"
+#include "IconObject.h"
+
+MvQRequestPanelWidget::MvQRequestPanelWidget(const vector<string>& cls,QWidget* parent) : 
+     QWidget(parent),
+     classes_(cls)
+{
+	//bgCol_=QColor(232,232,232);
+	//lineCol_=QColor(185,185,185);
+	//bgCol_=QColor(Qt::white);
+  	
+  	bgCol_=palette().color(QPalette::Window);
+	//lineCol_= bgCol_.darker(180);
+	cols_ << bgCol_;
+	//cols_ << bgCol_.darker(102);
+	cols_ << bgCol_;
+	
+	
+	setAcceptDrops(true);
+
+}
+
+void MvQRequestPanelWidget::paintEvent(QPaintEvent* event)
+{
+	QPainter painter(this);
+	painter.drawRect(0, 0, this->width(), this->height());
+
+	QGridLayout *grid=static_cast<QGridLayout*>(layout());
+	if(!grid)
+	{  
+		QWidget::paintEvent(event);
+		return;
+	}
+	
+	painter.setPen(lineCol_);
+	
+	//int yPos=0;	
+	int spacingV=grid->verticalSpacing();		
+	int spacingH=grid->horizontalSpacing();
+	
+	
+	//qDebug() << "Paint" ;
+	
+	int cnt=0;
+	for(int i=0; i < grid->rowCount(); i++)
+	{
+		QLayoutItem* item = grid->itemAtPosition(i,3);				
+		if(item)
+		{  
+			QWidget* w=item->widget();
+			if(w && w->isVisible())			
+			{			  		  
+		  		QRect r=item->geometry();
+				
+				int h=r.height()+spacingV;
+				int y=r.y()-spacingV/2;
+				
+				int c=cnt%2;
+				if(!grid->itemAtPosition(i,0))
+				{  
+					c=(cnt-1)%2;		
+				}
+			
+				painter.setBrush(cols_[c]);
+				painter.drawRect(0, y, this->width(), h);
+				
+				//qDebug() << i << y << this->width() << h;
+				
+				if(grid->itemAtPosition(i,0))
+				{
+				  	cnt++;
+				}	
+			}	
+		}	
+	}
+	
+	if(grid->rowCount()>1)
+	{  
+		QLayoutItem* item = grid->itemAtPosition(1,3);
+		if(item)
+		{  		
+			QRect r=item->geometry();
+			painter.drawLine(r.x()-spacingH/2,0,r.x()-spacingH/2,this->height());
+		}
+	}	
+	
+	
+//QWidget::paintEvent(event); 
+ 
+}
+
+bool MvQRequestPanelWidget::isAccepted(const IconClass& kind) const
+{
+  	if(classes_.size()>0)
+	{
+  		for(vector<string>::const_iterator it =  classes_.begin(); it != classes_.end(); ++it)
+		{	
+			if(kind.canBecome(IconClass::find(*it)) )   
+				return true;			
+		}
+		return false;
+	}	
+		
+	return true;
+}
+
+//===========================
+// Drop from the new Desktop
+//===========================
+
+void MvQRequestPanelWidget::dragEnterEvent(QDragEnterEvent *event)
+{
+        if((event->proposedAction() == Qt::CopyAction ||
+            event->proposedAction() == Qt::MoveAction))
+        {
+                event->accept();
+        }
+}
+
+void MvQRequestPanelWidget::dragMoveEvent(QDragMoveEvent *event)
+{
+        if((event->proposedAction() == Qt::CopyAction ||
+            event->proposedAction() == Qt::MoveAction))
+        {           
+                event->accept();
+        }
+}
+
+void MvQRequestPanelWidget::dropEvent(QDropEvent *event)
+{
+  	if(event->proposedAction() != Qt::CopyAction &&
+           event->proposedAction() != Qt::MoveAction)
+	{
+	  	event->ignore();
+		return;
+	}	
+   
+      	if(event->mimeData()->hasFormat("metview/icon"))
+        {                  
+                const MvQIconMimeData* mimeData=qobject_cast<const MvQIconMimeData*>(event->mimeData());
+				
+		if(!mimeData)
+		{
+			event->ignore();
+			return;
+		}
+		
+		IconObject *obj=mimeData->dragObject();
+		
+		if(!obj || !isAccepted(obj->iconClass()))
+		{
+			event->ignore();
+			return;
+		}
+			
+		emit iconDropped(obj);
+		
+		event->accept();
+		return;
+        }
+        
+        event->ignore();
+}
+
+
+
+
diff --git a/src/Desktop/MvQRequestPanelWidget.h b/src/Desktop/MvQRequestPanelWidget.h
new file mode 100644
index 0000000..aafc549
--- /dev/null
+++ b/src/Desktop/MvQRequestPanelWidget.h
@@ -0,0 +1,48 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQRequestPanelWidget_H
+#define MvQRequestPanelWidget_H
+
+#include <QWidget>
+
+#include <string>
+#include <vector>
+
+using std::vector;
+using std::string;
+
+class IconClass;
+class IconObject;
+
+class MvQRequestPanelWidget : public QWidget
+{
+Q_OBJECT  
+  
+public:  
+	MvQRequestPanelWidget(const vector<string>&,QWidget* parent=0); 
+
+signals:
+    	void iconDropped(IconObject*);
+	
+protected:
+    	bool isAccepted(const IconClass& kind) const;
+    	void paintEvent(QPaintEvent*);
+	void dragEnterEvent(QDragEnterEvent *);
+	void dragMoveEvent(QDragMoveEvent *);
+	void dropEvent(QDropEvent *);
+	
+	QList<QColor> cols_;
+	QColor bgCol_;
+	QColor lineCol_;
+	vector<string> classes_;
+}; 
+
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQScriptHelp.cc b/src/Desktop/MvQScriptHelp.cc
new file mode 100644
index 0000000..26f49cf
--- /dev/null
+++ b/src/Desktop/MvQScriptHelp.cc
@@ -0,0 +1,149 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQScriptHelp.h"
+
+#include "Request.h"
+#include "Parameter.h"
+#include "HelpFactory.h"
+#include "RequestPanel.h"
+
+#include <QDebug>
+#include <QDialogButtonBox>
+#include <QLabel>
+#include <QPlainTextEdit>
+
+//=================================================
+//
+// ScriptHelpTask
+//
+//=================================================
+
+ScriptHelpTask::ScriptHelpTask(const string& n,IconObject* o) : ShellTask(n,o) {}
+
+void ScriptHelpTask::ready(const char *line)
+{
+	emit textArrived(QString(line));
+}
+
+void ScriptHelpTask::done(FILE *fp)
+{
+	emit finished();
+	ShellTask::done(fp);
+}
+
+//=================================================
+//
+// MvQMessageDialog
+//
+//=================================================
+
+MvQMessageDialog::MvQMessageDialog(QWidget *parent) : QDialog(parent)
+{ 
+  	QVBoxLayout *vb=new QVBoxLayout(this);
+
+	header_=new QLabel(this);
+	vb->addWidget(header_); 
+	
+	te_=new QPlainTextEdit(this);
+	te_->setReadOnly(true);
+	vb->addWidget(te_);
+	
+	QDialogButtonBox *bb= new QDialogButtonBox(this);	
+	bb->addButton(QDialogButtonBox::Close);	
+	vb->addWidget(bb);
+
+	connect(bb, SIGNAL(rejected()), 
+		this, SLOT(reject()));
+}  
+
+void MvQMessageDialog::setHeader(QString txt)
+{
+  	header_->setText(txt);
+}	
+
+void MvQMessageDialog::append(QString txt)
+{
+  	te_->appendPlainText(txt);
+}  
+
+void MvQMessageDialog::clear()
+{
+  	te_->clear();
+}	
+
+//=================================================
+//
+// MvQScriptHelp
+//
+//=================================================
+
+MvQScriptHelp:: MvQScriptHelp(RequestPanel& owner, const Parameter& def) :
+  MvQRequestPanelHelp(owner, def),
+  task_(0),
+  mb_(0)
+{   
+}
+
+void MvQScriptHelp::start()
+{
+  	if(!task_)	
+		task_=new ScriptHelpTask(static_cast<const char *>(param_.interfaceRequest()("help_script_command")),0);
+  	
+  	if(!mb_)
+	{
+		mb_=new MvQMessageDialog(owner_.parentWidget()); 
+		mb_->setModal(false);
+
+		connect(task_,SIGNAL(textArrived(QString)),
+	        	mb_,SLOT(append(QString))); 
+			
+		connect(task_,SIGNAL(finished()),
+		        this,SLOT(slotFinished()));  		
+		
+		connect(mb_,SIGNAL(rejected()),
+	        	this,SLOT(slotClosed()));  
+	}		
+	
+	mb_->clear();
+	mb_->setHeader(tr("Running external command ..."));
+	
+	task_->attach();	
+	task_->Object(owner_.currentObject());		 	
+	task_->start();	
+	
+   	mb_->show();
+}
+
+void MvQScriptHelp::slotFinished()
+{ 	
+  	if(mb_)
+	{
+	  	if(1)
+    			mb_->setHeader(tr("External command finished."));
+  		else 
+    			mb_->setHeader(tr("External command produced no output. Check message window for errors"));
+	}
+}	
+
+void MvQScriptHelp::slotClosed()
+{	
+	delete mb_;
+	mb_=0;
+	
+	delete task_;
+	task_=0;
+}
+
+QIcon MvQScriptHelp::dialogIcon()
+{
+	return QIcon(QPixmap(":/desktop/help_script.svg"));
+}  
+ 		
+static HelpMaker< MvQScriptHelp> maker("help_script");
diff --git a/src/Desktop/MvQScriptHelp.h b/src/Desktop/MvQScriptHelp.h
new file mode 100644
index 0000000..d497ebe
--- /dev/null
+++ b/src/Desktop/MvQScriptHelp.h
@@ -0,0 +1,83 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQScriptHelp_H
+#define MvQScriptHelp_H
+
+#include "MvQRequestPanelHelp.h"
+#include "ShellTask.h"
+
+#include <QDialog>
+
+class QPlainTextEdit;
+
+class QAbstractButton;
+class QLabel;
+
+class MvQScriptHelp;
+
+class ScriptHelpTask : public ShellTask
+{
+friend class  MvQScriptHelp;  
+  
+Q_OBJECT  
+public:
+	ScriptHelpTask(const string&,IconObject*);
+	
+signals:
+	void textArrived(QString);
+	void finished();
+
+protected:
+  	void ready(const char *);
+	void done(FILE *);
+};
+
+class MvQMessageDialog  : public QDialog
+{
+Q_OBJECT 
+
+public:
+    	MvQMessageDialog(QWidget *parent=0);
+	void setHeader(QString);
+	void clear();
+
+public slots:
+    	void append(QString); 
+
+protected:
+	QPlainTextEdit *te_;
+	QLabel* header_;
+};  
+
+class MvQScriptHelp: public MvQRequestPanelHelp
+{
+Q_OBJECT
+
+  public:
+	MvQScriptHelp(RequestPanel&, const Parameter&);
+  	virtual ~MvQScriptHelp() {}; 
+
+  	void start();
+	bool dialog() {return true;}
+	QIcon dialogIcon();	
+	QWidget* widget() {return 0;}
+
+public slots:
+	void slotFinished();
+	void slotClosed();
+ 
+protected:
+ 	void refresh(const vector<string>&) {};
+  
+	ScriptHelpTask* task_;
+	MvQMessageDialog* mb_;
+};
+
+#endif
diff --git a/src/Desktop/MvQScrolledTextLine.cc b/src/Desktop/MvQScrolledTextLine.cc
new file mode 100644
index 0000000..0c70588
--- /dev/null
+++ b/src/Desktop/MvQScrolledTextLine.cc
@@ -0,0 +1,55 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQScrolledTextLine.h"
+
+#include "LineFactory.h"
+#include "Parameter.h"
+#include "RequestPanel.h"
+
+#include <QPlainTextEdit>
+
+MvQScrolledTextLine::MvQScrolledTextLine(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelLine(owner,param) 
+{
+	textEdit_ = new QPlainTextEdit;
+	
+	//Try to set the optimal widget height
+	QFont font;
+	QFontMetrics fm(font);
+	textEdit_->setMaximumHeight(fm.size(Qt::TextExpandTabs,"A\nA\nA\nA\nA\nA\nA\nA\nA\nA\n").height());
+	
+	owner_.addWidget(textEdit_,row_,3);
+	
+	connect(textEdit_,SIGNAL(textEdited(const QString&)),
+		this,SLOT(slotTextEdited(const QString&)));
+}
+
+
+void MvQScrolledTextLine::refresh(const vector<string>& values)
+{
+	string s;
+	for(vector<string>::const_iterator j = values.begin(); j != values.end(); ++j)
+	{
+			if(s.length()) s += "/";
+			s += *j;
+	}
+	
+	textEdit_->setPlainText(s.c_str());
+
+	//changed_ = false;
+}
+
+void MvQScrolledTextLine::slotTextEdited(const QString& text)
+{
+	owner_.set(param_.name(),text.toStdString());
+}  
+
+
+static LineMaker<MvQScrolledTextLine> maker1("scrolled_text");
diff --git a/src/Desktop/MvQScrolledTextLine.h b/src/Desktop/MvQScrolledTextLine.h
new file mode 100644
index 0000000..88e4a6b
--- /dev/null
+++ b/src/Desktop/MvQScrolledTextLine.h
@@ -0,0 +1,44 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQScrolledTextLine_H
+#define MvQScrolledTextLine_H
+
+#include "MvQRequestPanelLine.h"
+
+#include <QString>
+
+class QPlainTextEdit;
+
+class  RequestPanel;
+class  Parameter;
+
+class MvQScrolledTextLine : public MvQRequestPanelLine
+{
+Q_OBJECT
+
+public:
+	MvQScrolledTextLine(RequestPanel& owner,const Parameter& param);
+	~MvQScrolledTextLine() {};	
+	
+	QString currentValue() {return QString();}
+	void addValue(QString) {}
+	
+	void refresh(const vector<string>&);
+	
+public slots:
+        void slotTextEdited(const QString&);
+
+protected:
+	QPlainTextEdit *textEdit_;    	
+	
+};	
+
+#endif
diff --git a/src/Desktop/MvQSliderLine.cc b/src/Desktop/MvQSliderLine.cc
new file mode 100644
index 0000000..905e3cd
--- /dev/null
+++ b/src/Desktop/MvQSliderLine.cc
@@ -0,0 +1,121 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <QDebug>
+#include <QHBoxLayout>
+#include <QLabel>
+
+#include "MvQSliderLine.h"
+
+#include "LineFactory.h"
+#include "RequestPanel.h"
+#include "Parameter.h"
+
+#include "MvQSlider.h"
+
+MvQSliderLine::MvQSliderLine(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelLine(owner,param) 
+{
+
+	QWidget *sliderParent=new QWidget(parentWidget_);
+	QHBoxLayout* layout= new QHBoxLayout(parentWidget_);
+	sliderParent->setLayout(layout);
+	owner_.addWidget(sliderParent,row_,3);
+	
+	//Slider
+  	slider_=new MvQSlider(sliderParent);
+	slider_->setOrientation(Qt::Horizontal);
+	slider_->setTickPosition(QSlider::TicksBelow);
+  	layout->addWidget(slider_);
+	
+	Request r=param.interfaceRequest();
+	r.print();
+	
+	const char *min;	
+	r.getValue(min,"min",0);	
+	int minVal=QString(min).toInt();
+	
+	const char *max;	
+	r.getValue(max,"max",0);	
+	int maxVal=QString(max).toInt();
+	
+	const char *step;	
+	r.getValue(step,"step",0);	
+	int stepVal=QString(step).toInt();
+	
+	const char *def;	
+	r.getValue(def,"default",0);	
+	int defVal=QString(def).toInt();class QRadioButton;
+
+	const char *direction;	
+	r.getValue(direction,"direction",0);	
+	QString directionVal(direction);
+
+	slider_->setRange(minVal,maxVal);
+	slider_->setSingleStep(stepVal);
+	slider_->setPageStep(stepVal);
+	
+	if(stepVal != 0) 
+	{
+	  	int n=(maxVal-minVal)/stepVal;
+	  	
+	  	if(n < 15)
+	  		slider_->setTickInterval(stepVal);
+		else
+		{
+		  	for(int i=2; i < n && i < 100; i++)
+			{
+			  	if((maxVal-minVal)/(i*stepVal) < 15)
+				{  	
+				  	slider_->setTickInterval(i*stepVal);
+					break;
+				}
+			}
+		}	
+	}
+	
+	if(direction && strcmp(direction,"max_on_left") == 0)
+	{
+	  	slider_->setInvertedAppearance(true);
+	}
+	
+	//Label
+	valueLabel_=new QLabel(sliderParent);
+	layout->addWidget(valueLabel_);
+	
+	slotValueChanged(defVal);
+	
+	connect(slider_,SIGNAL(valueChanged(int)),
+		this,SLOT(slotValueChanged(int)));	
+  	
+}
+
+MvQSliderLine::~MvQSliderLine()
+{
+}
+	
+void MvQSliderLine::refresh(const vector<string>& values)
+{
+	if(values.size() > 0)
+	{
+		QString s=QString::fromStdString(values[0]);
+		slider_->setSliderPosition(s.toInt());
+	}	
+		
+	//changed_ = false;
+}	
+	
+void MvQSliderLine::slotValueChanged(int value)
+{	
+	QString s=QString::number(value);
+  	owner_.set(param_.name(),s.toStdString()),
+	valueLabel_->setText(s);
+}
+
+static LineMaker<MvQSliderLine> maker1("slider");
diff --git a/src/Desktop/MvQSliderLine.h b/src/Desktop/MvQSliderLine.h
new file mode 100644
index 0000000..b49a8f4
--- /dev/null
+++ b/src/Desktop/MvQSliderLine.h
@@ -0,0 +1,44 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQSliderLine_H
+#define MvQSliderLine_H
+
+#include <QString>
+
+#include "MvQRequestPanelLine.h"
+
+class QLabel;
+class MvQSlider;
+
+class  Request;
+class  RequestPanel;
+
+class MvQSliderLine : public MvQRequestPanelLine
+{
+Q_OBJECT
+
+public:
+	MvQSliderLine(RequestPanel& owner,const Parameter& param);
+	~MvQSliderLine();
+	
+	QString currentValue() {return QString();}
+	void addValue(QString) {}	
+	void refresh(const vector<string>&);
+
+public slots:
+    	void slotValueChanged(int);	
+
+protected:
+	 MvQSlider* slider_; 
+	 QLabel* valueLabel_;
+};	
+
+
+#endif
diff --git a/src/Desktop/MvQStationsHelp.cc b/src/Desktop/MvQStationsHelp.cc
new file mode 100644
index 0000000..f3e455d
--- /dev/null
+++ b/src/Desktop/MvQStationsHelp.cc
@@ -0,0 +1,80 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQStationsHelp.h"
+
+#include <QDebug>
+
+#include "HelpFactory.h"
+#include "RequestPanel.h"
+
+#include "MvQStationsWidget.h"
+
+
+//==================================================
+//
+//  MvQStationsHelp
+//
+//==================================================
+
+MvQStationsHelp::MvQStationsHelp(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelHelp(owner,param),
+		   selector_(0)
+{	
+   	Request req=param.interfaceRequest();
+   	const char *type=req("help_param");
+	
+	if(!type)
+	  	return;
+	
+	MvQStationsWidget::SelectionMode mode=MvQStationsWidget::NameMode;
+	if(strcmp(type,"NAME") ==0)
+		mode=MvQStationsWidget::NameMode;
+	else if(strcmp(type,"IDENT") == 0)
+		mode=MvQStationsWidget::IdMode;
+ 	else if(strcmp(type,"WMO_BLOCK") == 0)
+		mode=MvQStationsWidget::WmoMode;	
+	
+   
+  	selector_=new MvQStationsWidget(mode,parentWidget_);
+  		
+	connect(selector_,SIGNAL(selected(QString)),
+			this,SLOT(slotSelected(QString)));		
+}
+
+QWidget* MvQStationsHelp::widget() 
+{
+  	return selector_;
+}
+
+void MvQStationsHelp::slotSelected(QString txt)
+{
+    	vector <string> vs;
+    
+    	vs.push_back(txt.toStdString());
+
+    	emit edited(vs);
+}
+
+void MvQStationsHelp::refresh(const vector<string>& values)
+{
+	if(values.size() == 0)
+	  	return;
+	
+	/*if(MvQPalette::toString(selector_->currentColour()) == values[0])
+		return;  
+  	 	
+  	QColor col=MvQPalette::magics(values[0]);
+	if(col.isValid())
+	{
+	  	selector_->setColour(col);
+	}*/
+}
+
+static HelpMaker<MvQStationsHelp> maker("help_external");
diff --git a/src/Desktop/MvQStationsHelp.h b/src/Desktop/MvQStationsHelp.h
new file mode 100644
index 0000000..995d9fd
--- /dev/null
+++ b/src/Desktop/MvQStationsHelp.h
@@ -0,0 +1,46 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQStationsHelp_H
+#define MvQStationsHelp_H
+
+#include "MvQPalette.h"
+#include "MvQRequestPanelHelp.h"
+#include "Parameter.h"
+
+#include <QWidget>
+
+class MvQStationsWidget;
+
+class  RequestPanel;
+
+class MvQStationsHelp : public MvQRequestPanelHelp
+{
+Q_OBJECT  
+
+public:
+	MvQStationsHelp(RequestPanel& owner,const Parameter& param);
+	~MvQStationsHelp() {};
+	
+	void start() {};
+	bool dialog() {return false;}	
+	QWidget* widget();
+
+public slots:
+    	void slotSelected(QString);
+
+protected:
+  	virtual void refresh(const vector<string>&);
+
+private:
+	MvQStationsWidget* selector_;
+};	
+
+#endif
diff --git a/src/Desktop/MvQStringLine.cc b/src/Desktop/MvQStringLine.cc
new file mode 100644
index 0000000..a1ae218
--- /dev/null
+++ b/src/Desktop/MvQStringLine.cc
@@ -0,0 +1,88 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQStringLine.h"
+
+#include "MvQRequestPanelHelp.h"
+#include "MvQLineEdit.h"
+
+#include "LineFactory.h"
+#include "Parameter.h"
+#include "RequestPanel.h"
+
+#include <QDebug>
+
+
+MvQStringLine::MvQStringLine(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelLine(owner,param) 
+{
+	lineEdit_ = new MvQLineEdit(parentWidget_);
+	owner_.addWidget(lineEdit_,row_,3);	
+	
+	connect(lineEdit_,SIGNAL(textEdited(const QString&)),
+		this,SLOT(slotTextEdited(const QString&)));
+		
+	connect(lineEdit_,SIGNAL(textCleared()),
+		this,SLOT(slotCleared()));
+	
+}
+
+void MvQStringLine::refresh(const vector<string>& values)
+{
+	string s;
+	for(vector<string>::const_iterator j = values.begin(); j != values.end(); ++j)
+	{
+			if(s.length()) s += "/";
+			s += *j;
+	}
+	
+	lineEdit_->setText(s.c_str());
+
+	updateHelper();
+	//changed_ = false;
+}
+
+void MvQStringLine::dispatchChange()
+{	  
+	owner_.set(param_.name(),lineEdit_->text().toStdString());
+}	
+
+void MvQStringLine::updateHelper()
+{
+  	if(!helper_)
+		return;
+		
+	vector<string> vals;
+	vals.push_back(lineEdit_->text().toStdString());
+	helper_->refresh(vals);		
+}  		
+
+void MvQStringLine::slotCleared()
+{
+ 	dispatchChange();
+	updateHelper();
+}  
+
+void MvQStringLine::slotTextEdited(const QString& text)
+{
+	dispatchChange();
+	updateHelper();
+}  
+
+void MvQStringLine::slotHelperEdited(const vector<string>& values)
+{
+	if(values.size() > 0) 
+	{
+	  	QString s(values[0].c_str());
+		lineEdit_->setText(s);
+		dispatchChange();
+	}
+}	
+			
+static LineMaker<MvQStringLine> maker1("string");
\ No newline at end of file
diff --git a/src/Desktop/MvQStringLine.h b/src/Desktop/MvQStringLine.h
new file mode 100644
index 0000000..2b8acc5
--- /dev/null
+++ b/src/Desktop/MvQStringLine.h
@@ -0,0 +1,50 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQStringLine_H
+#define MvQStringLine_H
+
+#include "MvQRequestPanelLine.h"
+
+#include <QString>
+
+class  QToolButton;
+
+class  MvQLineEdit;
+class  RequestPanel;
+class  Parameter;
+
+class MvQStringLine : public MvQRequestPanelLine
+{
+Q_OBJECT 
+
+public:
+	MvQStringLine(RequestPanel& owner,const Parameter& param);
+	~MvQStringLine() {};	
+	
+	QString currentValue() {return QString();}
+	void addValue(QString) {}
+	
+	void refresh(const vector<string>&);
+
+public slots:
+        void slotCleared();
+        void slotTextEdited(const QString&);
+	void slotHelperEdited(const vector<string>&);	
+
+protected:
+	void dispatchChange();
+	void updateHelper();
+	
+	MvQLineEdit *lineEdit_;
+	
+};	
+
+#endif
diff --git a/src/Desktop/MvQTemplateDrawer.cc b/src/Desktop/MvQTemplateDrawer.cc
new file mode 100644
index 0000000..15dfd09
--- /dev/null
+++ b/src/Desktop/MvQTemplateDrawer.cc
@@ -0,0 +1,83 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQTemplateDrawer.h"
+
+#include "EditorDrawerFactory.h"
+#include "IconObject.h"
+#include "IconClass.h"
+#include "Folder.h"
+
+#include "MvQEditor.h"
+#include "MvQContextMenu.h"
+#include "MvQFolderModel.h"
+
+MvQTemplateDrawer::MvQTemplateDrawer(MvQEditor *editor) : EditorDrawer(editor)
+{		
+  	vector<string> templateClasses;
+	templateClasses.push_back(editor->iconClass().name());
+	
+	model_=new MvQFolderModel(this);
+	
+	view_= new MvQTemplateDrawerView(model_);
+	//view_->setHelper(true);
+	view_->setMinimumHeight(1);
+	view_->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Minimum);
+	
+	model_->setAcceptedClasses(templateClasses);
+	
+	Folder *f=Folder::folder("templates",
+                   editor_->iconClass().defaultName());
+	
+	model_->setFolder(f);
+	
+	connect(view_,SIGNAL(iconCommandRequested(QString,IconObjectH)),
+		this,SLOT(slotCommand(QString,IconObjectH)));
+}
+
+QString MvQTemplateDrawer::name()
+{
+  	return tr("Templates");
+}
+
+QWidget* MvQTemplateDrawer::widget()
+{
+  	return view_;
+}
+
+void MvQTemplateDrawer::slotCommand(QString name,IconObjectH obj)
+{
+	if(name == "mergeIcon")
+	{
+		editor_->merge(obj);
+	}
+	else if(name == "replaceIcon")
+	{
+	  	editor_->replace(obj);
+	}	
+}
+
+
+MvQTemplateDrawerView::MvQTemplateDrawerView(MvQFolderModel *folderModel,QWidget *parent) : 
+ 	MvQIconStripView(folderModel,parent)
+{ 	
+}
+
+MvQTemplateDrawerView::~MvQTemplateDrawerView()
+{	
+	//delete filterModel_;
+}
+
+MvQContextItemSet* MvQTemplateDrawerView::cmSet()
+{
+	static MvQContextItemSet cmItems("TemplateDrawerView");  
+  	return &cmItems;
+}
+
+static EditorDrawerMaker<MvQTemplateDrawer,MvQEditor> maker(1);
\ No newline at end of file
diff --git a/src/Desktop/MvQTemplateDrawer.h b/src/Desktop/MvQTemplateDrawer.h
new file mode 100644
index 0000000..ca1f5bb
--- /dev/null
+++ b/src/Desktop/MvQTemplateDrawer.h
@@ -0,0 +1,51 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQTemplateDrawer_H
+#define MvQTemplateDrawer_H
+
+#include <QObject>
+#include "EditorDrawer.h"
+#include "MvQIconStripView.h"
+
+class MvQContextItemSet;
+class MvQTemplateDrawerView;
+
+class MvQTemplateDrawer : public QObject, public EditorDrawer
+{
+Q_OBJECT 
+  
+public:
+    	MvQTemplateDrawer(MvQEditor *);
+		
+	QString name();
+	QWidget* widget();
+
+public slots:  
+  	void  slotCommand(QString,IconObjectH);
+ 
+protected:
+	MvQFolderModel* model_;
+	MvQTemplateDrawerView* view_;
+};	
+	
+	
+class MvQTemplateDrawerView : public MvQIconStripView
+{
+public:
+	MvQTemplateDrawerView(MvQFolderModel *,QWidget *parent=0);
+  	~MvQTemplateDrawerView();
+	
+protected:
+	MvQContextItemSet* cmSet();
+	
+	
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQTemporaryEditor.cc b/src/Desktop/MvQTemporaryEditor.cc
new file mode 100644
index 0000000..11d6180
--- /dev/null
+++ b/src/Desktop/MvQTemporaryEditor.cc
@@ -0,0 +1,166 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQTemporaryEditor.h"
+
+#include <QCheckBox>
+#include <QDebug>
+#include <QDialogButtonBox>
+#include <QGridLayout>
+#include <QHBoxLayout>
+#include <QInputDialog>
+#include <QLabel>
+#include <QPushButton>
+#include <QSplitter>
+#include <QToolButton>
+#include <QVBoxLayout>
+
+#include "MvQIconProvider.h"
+
+#include "Folder.h"
+#include "IconClass.h"
+#include "MvRequest.h"
+#include "Path.h"
+#include "Request.h"
+
+MvQTemporaryEditor::MvQTemporaryEditor(const IconClass& name,const string& kind, QWidget *parent) : 
+        QDialog(parent), 
+        Editor(name,kind)
+{
+	QVBoxLayout *vb=new QVBoxLayout;
+	vb->setSpacing(0); 
+	vb->setContentsMargins(1,1,1,1);
+	setLayout(vb);
+	
+	//Header
+	QHBoxLayout *hb=new QHBoxLayout;
+	vb->addLayout(hb);
+	
+	QLabel *pixLabel=new QLabel(this);
+	pixLabel->setPixmap(MvQIconProvider::pixmap(IconClass::find("MACRO"),32));	
+	pixLabel->setFrameShape(QFrame::Box);
+        pixLabel->setFrameShape(QFrame::StyledPanel);
+	
+	hb->addWidget(pixLabel);
+	
+	headerLabel_=new QLabel("",this);
+	headerLabel_->setObjectName(QString::fromUtf8("editorHeaderLabel"));	
+	headerLabel_->setMargin(8);
+	headerLabel_->setAlignment(Qt::AlignLeft| Qt::AlignVCenter);
+        headerLabel_->setAutoFillBackground(true);
+        headerLabel_->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse);
+	headerLabel_->setFrameShape(QFrame::Box);
+        headerLabel_->setFrameShape(QFrame::StyledPanel);
+	
+	hb->addWidget(headerLabel_,1);
+		
+	//Panel layout
+	QWidget* w= new QWidget(this);
+	centralLayout_=new QHBoxLayout;
+	centralLayout_->setSpacing(0); 
+	centralLayout_->setContentsMargins(1,1,1,1);	
+	w->setLayout(centralLayout_);	
+	vb->addWidget(w);	
+	
+	//--------------------
+	// Buttonbox
+	//--------------------
+
+	buttonBox_= new QDialogButtonBox(this);
+	
+	okPb_=buttonBox_->addButton(QDialogButtonBox::Ok);
+	cancelPb_=buttonBox_->addButton(QDialogButtonBox::Cancel);	
+	resetPb_=buttonBox_->addButton(QDialogButtonBox::Reset);
+	
+	resetPb_->setEnabled(false);
+		
+	connect(buttonBox_, SIGNAL(clicked(QAbstractButton*)), 
+		this, SLOT(slotButtonClicked(QAbstractButton*)));
+	
+	vb->addWidget(buttonBox_);	
+}
+		
+MvQTemporaryEditor::~MvQTemporaryEditor()
+{
+}
+
+void MvQTemporaryEditor::changed()
+{
+	resetPb_->setEnabled(true);	
+}  
+
+void MvQTemporaryEditor::edit()
+{	  
+  	if(!current_)
+	  	return;
+ 	
+	updateHeader();
+		
+	reset();
+	
+	resetPb_->setEnabled(false);
+}
+
+void MvQTemporaryEditor::updateHeader()
+{	
+  	if(!current_)
+	  	return;
+ 	
+	/*QString str=tr("<b>Folder:</b> ");
+	str+=QString::fromStdString(current_->path().directory().str()) + "<br>";
+	str+=tr("<b>Name:</b> ");
+	str+=QString::fromStdString(current_->name());
+		
+	headerLabel_->setText(str);*/
+}  
+
+void MvQTemporaryEditor::raiseIt() 
+{
+	if(isMinimized()) 
+		showNormal();
+	
+	raise();
+}	
+
+void MvQTemporaryEditor::slotButtonClicked(QAbstractButton* button)
+{
+	if(!button) return;
+	
+	if(buttonBox_->standardButton(button) == QDialogButtonBox::Cancel)
+	{
+		close();
+		reject();  	
+	}
+	else if(buttonBox_->standardButton(button) == QDialogButtonBox::Ok)
+	{
+	  	apply();
+		close();
+		accept();
+	}	
+
+	else if(buttonBox_->standardButton(button) == QDialogButtonBox::Reset)
+	{
+		reset();
+		resetPb_->setEnabled(false);
+	}	
+}  
+
+void MvQTemporaryEditor::accept()
+{
+	notifyObserverApply();
+  	editDone();	
+  	QDialog::accept();
+}
+
+void MvQTemporaryEditor::reject()
+{
+  	notifyObserverClose();
+	editDone();
+	QDialog::reject();
+}  
diff --git a/src/Desktop/MvQTemporaryEditor.h b/src/Desktop/MvQTemporaryEditor.h
new file mode 100644
index 0000000..3435008
--- /dev/null
+++ b/src/Desktop/MvQTemporaryEditor.h
@@ -0,0 +1,55 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQTemporaryEditor_H
+#define MvQTemporaryEditor_H
+
+#include <QDialog>
+
+#include "Editor.h"
+
+class QAbstractButton;
+class QDialogButtonBox;
+class QHBoxLayout; 
+class QLabel;
+class QPushButton;
+
+class MvQTemporaryEditor : public QDialog, public Editor
+{
+Q_OBJECT
+
+public:
+	MvQTemporaryEditor(const IconClass& name,const string& kind, QWidget *parent=0);
+	~MvQTemporaryEditor();
+	
+	void changed();
+
+public slots:
+        void slotButtonClicked(QAbstractButton*);
+	void accept();
+	void reject();
+
+protected:
+  	void raiseIt();
+  	void showIt() {show();}
+	void updateHeader();	
+	virtual void apply()=0;
+	virtual void reset()=0;
+	virtual void close()=0;
+	virtual void edit();
+	
+	QLabel* headerLabel_;	
+	QHBoxLayout *centralLayout_;	
+	QDialogButtonBox *buttonBox_;
+	QPushButton* okPb_;
+	QPushButton* cancelPb_;
+	QPushButton* resetPb_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQTextLine.cc b/src/Desktop/MvQTextLine.cc
new file mode 100644
index 0000000..644c5a3
--- /dev/null
+++ b/src/Desktop/MvQTextLine.cc
@@ -0,0 +1,143 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQTextLine.h"
+
+#include "MvQRequestPanelHelp.h"
+#include "MvQLineEdit.h"
+
+#include "LineFactory.h"
+#include "Parameter.h"
+#include "RequestPanel.h"
+
+#include <QDebug>
+
+MvQTextLine::MvQTextLine(RequestPanel& owner,const Parameter& param) :
+		   MvQRequestPanelLine(owner,param) 
+{
+	lineEdit_ = new MvQLineEdit(parentWidget_);
+	owner_.addWidget(lineEdit_,row_,3);	
+	
+	connect(lineEdit_,SIGNAL(textEdited(const QString&)),
+		this,SLOT(slotTextEdited(const QString&)));
+		
+	connect(lineEdit_,SIGNAL(textCleared()),
+		this,SLOT(slotCleared()));	
+}
+
+void MvQTextLine::refresh(const vector<string>& values)
+{
+	string s;
+	for(vector<string>::const_iterator j = values.begin(); j != values.end(); ++j)
+	{
+			if(s.length()) s += "/";
+			s += *j;
+	}
+	
+	if(s != lineEdit_->text().toStdString())
+	{
+		lineEdit_->setText(s.c_str());
+		updateHelper();
+	}
+}
+
+void MvQTextLine::dispatchChange()
+{	  
+	vector<string> vals;
+	QString txt=lineEdit_->text();
+	foreach(QString s,txt.split("/"))
+	{
+		vals.push_back(s.toStdString());
+	}
+		
+	owner_.set(param_.name(),vals);
+}	
+
+void MvQTextLine::updateHelper()
+{
+  	if(!helper_)
+		return;
+	
+	
+	vector<string> vals;
+	QString txt=lineEdit_->text();
+	foreach(QString s,txt.split("/"))
+	{
+		vals.push_back(s.toStdString());
+		helper_->refresh(vals);
+	}
+	helper_->refresh(vals);
+}  		
+
+void MvQTextLine::slotCleared()
+{
+ 	dispatchChange();
+	updateHelper();
+}  
+
+void MvQTextLine::slotTextEdited(const QString& text)
+{
+	dispatchChange();
+	updateHelper();
+}  
+	
+void MvQTextLine::slotHelperEdited(const vector<string>& values,const vector<string>& noValues)
+{
+	QString txt=lineEdit_->text();
+	QStringList lst=txt.split("/");
+	
+	qDebug() << lst;
+	
+	for(vector<string>::const_iterator it = values.begin(); it != values.end(); it++)
+	{  
+		QString s(it->c_str());
+		qDebug() << s;
+		if(!lst.contains(s))
+			lst << s;
+	}
+	
+	qDebug() << lst;
+	
+	for(vector<string>::const_iterator it = noValues.begin(); it != noValues.end(); it++)
+	{  
+		QString s(it->c_str());
+		qDebug() << s;
+		if(lst.contains(s))
+			lst.removeAll(s);
+	}
+	
+	qDebug() << lst;
+	
+	QString res=lst.join("/");
+	if(res.startsWith("/"))
+	  	res.remove(0,1);
+	
+	
+	qDebug() << res;
+	
+	if(res != txt)
+	{	
+		lineEdit_->setText(res);
+		dispatchChange();
+	}	
+}  
+	
+void MvQTextLine::slotHelperEdited(const vector<string>& values)
+{
+  	if(values.size() > 0) 
+	{
+	  	QString s(values[0].c_str());
+		lineEdit_->setText(s);
+		dispatchChange();
+	}
+  
+}  
+	
+static LineMaker<MvQTextLine> maker1("text");
+
diff --git a/src/Desktop/MvQTextLine.h b/src/Desktop/MvQTextLine.h
new file mode 100644
index 0000000..a898e8c
--- /dev/null
+++ b/src/Desktop/MvQTextLine.h
@@ -0,0 +1,48 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQTextLine_H
+#define MvQTextLine_H
+
+#include "MvQRequestPanelLine.h"
+
+#include <QString>
+
+class MvQLineEdit;
+
+class  RequestPanel;
+class  Parameter;
+
+class MvQTextLine : public MvQRequestPanelLine
+{
+Q_OBJECT 
+public:
+	MvQTextLine(RequestPanel& owner,const Parameter& param);
+	~MvQTextLine() {};	
+	
+	QString currentValue() {return QString();}
+	void addValue(QString) {}
+	
+	void refresh(const vector<string>&);
+
+public slots: 
+        void slotCleared();
+        void slotTextEdited(const QString&);
+	void slotHelperEdited(const vector<string>&);
+	void slotHelperEdited(const vector<string>&,const vector<string>&);	
+
+protected:
+	void dispatchChange();
+	void updateHelper();
+	
+	MvQLineEdit *lineEdit_;    	
+	
+};	
+
+#endif
diff --git a/src/Desktop/MvQTools.cc b/src/Desktop/MvQTools.cc
new file mode 100644
index 0000000..1c96461
--- /dev/null
+++ b/src/Desktop/MvQTools.cc
@@ -0,0 +1,108 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQTools.h"
+
+#include <QAction>
+
+#include "MvQObjectBrowser.h"
+#include "MvQClassBrowser.h"	
+#include "MvQHelpBrowser.h"
+#include "MvQProductBrowser.h"
+
+MvQTools* MvQTools::instance_=0;
+
+MvQTools::MvQTools() : 
+	QObject(0),
+	objectBrowser_(0),
+	classBrowser_(0),	
+	helpBrowser_(0),	
+	productBrowser_(0)	
+{
+}
+
+MvQTools* MvQTools::instance()
+{
+  	if(!instance_)
+		instance_=new MvQTools;
+	
+	return instance_;
+}
+
+void MvQTools::slotObject()
+{
+	if(!objectBrowser_)
+	{
+	  	objectBrowser_=new MvQObjectBrowser();
+	}
+	objectBrowser_->show(); 
+} 
+
+void MvQTools::slotClass()
+{
+	if(!classBrowser_)
+	{
+	  	classBrowser_=new MvQClassBrowser();
+	}
+	classBrowser_->show(); 
+} 
+
+void MvQTools::slotHelp()
+{
+	if(!helpBrowser_)
+	{
+	  	helpBrowser_=new MvQHelpBrowser();
+	}
+	helpBrowser_->show(); 
+} 
+
+void MvQTools::slotProduct()
+{
+	if(!productBrowser_)
+	{
+	  	productBrowser_=new MvQProductBrowser();
+	}
+	productBrowser_->show(); 
+} 
+
+void MvQTools::make(QList<QAction*> &lst,QObject* parent)
+{		
+	QAction *ac;
+	
+	ac=new QAction(parent);
+	ac->setText("Icon objects");
+	lst << ac;
+		
+	connect(ac,SIGNAL(triggered()),
+			this,SLOT(slotObject()));
+			
+	ac=new QAction(parent);
+	ac->setText("Icon classes");
+	lst << ac;
+		
+	connect(ac,SIGNAL(triggered()),
+			this,SLOT(slotClass()));
+			
+	ac=new QAction(parent);
+	ac->setText("Help");
+	lst << ac;
+		
+	connect(ac,SIGNAL(triggered()),
+			this,SLOT(slotHelp()));	
+						
+	ac=new QAction(parent);
+	ac->setText("Product");
+	lst << ac;
+		
+	connect(ac,SIGNAL(triggered()),
+			this,SLOT(slotProduct()));	
+					
+}
+
+ 
\ No newline at end of file
diff --git a/src/Desktop/MvQTools.h b/src/Desktop/MvQTools.h
new file mode 100644
index 0000000..993fa03
--- /dev/null
+++ b/src/Desktop/MvQTools.h
@@ -0,0 +1,48 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQTools_H
+#define MvQTools_H
+ 
+#include <QList>
+#include <QObject>
+
+class QAction;
+
+class MvQObjectBrowser;
+class MvQClassBrowser;	
+class MvQHelpBrowser;	
+class MvQProductBrowser;
+
+class MvQTools : public QObject
+{
+Q_OBJECT  
+  
+public:
+	static MvQTools* instance();
+	void make(QList<QAction*> &lst,QObject* parent);
+
+public slots:
+	void slotHelp();
+	void slotObject();
+	void slotClass();
+	void slotProduct();
+	
+protected: 
+	MvQTools();
+	
+	static MvQTools *instance_;
+	
+	MvQObjectBrowser* objectBrowser_;
+	MvQClassBrowser* classBrowser_;	
+	MvQHelpBrowser* helpBrowser_;	
+	MvQProductBrowser* productBrowser_;	
+};
+
+#endif
diff --git a/src/Desktop/MvQViewDrawer.cc b/src/Desktop/MvQViewDrawer.cc
new file mode 100644
index 0000000..3cc276e
--- /dev/null
+++ b/src/Desktop/MvQViewDrawer.cc
@@ -0,0 +1,83 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQViewDrawer.h"
+
+#include "EditorDrawerFactory.h"
+#include "IconObject.h"
+#include "IconClass.h"
+#include "Folder.h"
+#include "ViewEditor.h"
+
+#include "MvQEditor.h"
+#include "MvQContextMenu.h"
+#include "MvQFolderModel.h"
+
+MvQViewDrawer::MvQViewDrawer(MvQEditor *editor) : EditorDrawer(editor)
+{		
+  	folder_=Folder::folder("templates",
+                   editor_->iconClass().defaultName() + "/Views",true);
+		   
+	IconClass::scan(*this);
+	
+	model_=new MvQFolderModel(this);
+	
+	view_= new MvQViewDrawerView(model_);
+	//view_->setHelper(true);
+	view_->setMinimumHeight(1);
+	view_->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Minimum);
+	
+	model_->setAcceptedClasses(classes_);
+	
+	model_->setFolder(folder_);
+	
+	connect(view_,SIGNAL(iconCommandRequested(QString,IconObjectH)),
+		this,SLOT(slotCommand(QString,IconObjectH)));
+}
+
+void MvQViewDrawer::next(const IconClass& c) 
+{
+	if(c.type() == "View")
+	{ 
+		classes_.push_back(c.name());
+	}
+}	
+	
+QString MvQViewDrawer::name()
+{
+  	return tr("Views");
+}
+
+QWidget* MvQViewDrawer::widget()
+{
+  	return view_;
+}
+
+void MvQViewDrawer::slotCommand(QString /*name*/,IconObjectH /*obj*/)
+{
+}
+
+
+MvQViewDrawerView::MvQViewDrawerView(MvQFolderModel *folderModel,QWidget *parent) : 
+ 	MvQIconStripView(folderModel,parent)
+{ 	
+}
+
+MvQViewDrawerView::~MvQViewDrawerView()
+{	
+	//delete filterModel_;
+}
+
+MvQContextItemSet* MvQViewDrawerView::cmSet()
+{
+	static MvQContextItemSet cmItems("ViewDrawerView");  
+  	return &cmItems;
+}
+
+static EditorDrawerMaker<MvQViewDrawer,ViewEditor> maker(99);
\ No newline at end of file
diff --git a/src/Desktop/MvQViewDrawer.h b/src/Desktop/MvQViewDrawer.h
new file mode 100644
index 0000000..b8fcb88
--- /dev/null
+++ b/src/Desktop/MvQViewDrawer.h
@@ -0,0 +1,55 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQViewDrawer_H
+#define MvQViewDrawer_H
+
+#include <QObject>
+
+#include "EditorDrawer.h"
+#include "IconClass.h"
+#include "MvQIconStripView.h"
+
+class MvQContextItemSet;
+class MvQViewDrawerView;
+
+class MvQViewDrawer : public QObject, public EditorDrawer, public ClassScanner
+{
+Q_OBJECT 
+  
+public:
+    	MvQViewDrawer(MvQEditor *);
+		
+	QString name();
+	QWidget* widget();
+	void next(const IconClass& );
+
+public slots:  
+  	void  slotCommand(QString,IconObjectH);
+ 
+protected:
+	MvQFolderModel* model_;
+	MvQViewDrawerView* view_;
+	Folder *folder_;
+	vector<string> classes_;
+};	
+	
+	
+class MvQViewDrawerView : public MvQIconStripView
+{
+public:
+	MvQViewDrawerView(MvQFolderModel *,QWidget *parent=0);
+  	~MvQViewDrawerView();
+	
+protected:
+	MvQContextItemSet* cmSet();
+	
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/NoEditor.cc b/src/Desktop/NoEditor.cc
new file mode 100644
index 0000000..524af4a
--- /dev/null
+++ b/src/Desktop/NoEditor.cc
@@ -0,0 +1,24 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "NoEditor.h"
+
+#include "EditorFactory.h"
+
+NoEditor::NoEditor(const IconClass& name,const string& kind):
+	Editor(name,kind)
+{
+}
+
+NoEditor::~NoEditor()
+{
+}
+
+static EditorMaker<NoEditor> editorMaker("NoEditor");
+
diff --git a/src/Desktop/NoEditor.h b/src/Desktop/NoEditor.h
new file mode 100644
index 0000000..0e9b9c6
--- /dev/null
+++ b/src/Desktop/NoEditor.h
@@ -0,0 +1,34 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 NoEditor_H
+#define NoEditor_H
+
+#include "Editor.h"
+
+class NoEditor : public Editor 
+{
+public:
+	NoEditor(const IconClass&,const string&);
+	virtual ~NoEditor();
+	
+	void changed() {};
+	void raiseIt() {};
+
+private:
+	NoEditor(const NoEditor&);
+	NoEditor& operator=(const NoEditor&);
+
+	void edit() {};
+	void showIt() {};
+};
+
+inline void destroy(NoEditor**) {}
+
+#endif
diff --git a/src/Desktop/Parameter.cc b/src/Desktop/Parameter.cc
new file mode 100644
index 0000000..e955057
--- /dev/null
+++ b/src/Desktop/Parameter.cc
@@ -0,0 +1,266 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Parameter.h"
+#include <mars.h>
+#include "Request.h"
+#include "Language.h"
+#include <ctype.h>
+
+//======================================================================
+class GuessInterface : public ParameterScanner {
+
+	map<string,int> choices_;
+
+	void next(const Parameter&, const char* name,const char*) ;
+
+public:
+	GuessInterface(Parameter&);
+	string choice();
+
+};
+
+GuessInterface::GuessInterface(Parameter& p)
+{
+	choices_["on_off"] = 4;
+	choices_["menu"]   = 3;
+	choices_["string"] = 2;
+	choices_["text"]   = 1;
+}
+
+void GuessInterface::next(const Parameter&, const char* name,const char*)
+{
+	if(*name == '/'  ||
+	   *name == '@'  ||
+	   *name == '"'  ||
+	   *name == '*'  ||
+	   *name == '\'' ) choices_["menu"] = 0;
+
+	if(*name == '/')
+		choices_["string"] = 0;
+
+	if(*name != 'O' || (strcmp(name,"ON") != 0 && strcmp(name,"OFF") != 0))
+		choices_["on_off"] = 0;
+
+}
+
+string GuessInterface::choice()
+{
+	int max = 0;
+	string result = "text";
+
+	for(map<string,int>::iterator j = choices_.begin(); j != choices_.end(); ++j)
+	{	
+		if((*j).second > max) 
+		{
+			max    = (*j).second;
+			result = (*j).first;
+		}
+	}
+	
+	return result;
+}
+
+//======================================================================
+
+Parameter::Parameter(Language& l,parameter* p):
+	lang_(l),
+	param_(p),
+	multiple_(false)
+{
+	
+	if(param_->interface == 0) 
+		param_->interface = empty_request(0);
+
+	if(get_value(param_->interface,"interface",0) == 0 )
+	{
+		// Try to gues 
+
+		GuessInterface guess(*this);
+		scan(guess);
+		string choice = guess.choice();
+
+		set_value(param_->interface,"interface",choice.c_str());
+		if(get_value(param_->interface,"help",0) == 0)
+			set_value(param_->interface,"help",choice.c_str());
+	}
+	else if(strcmp(get_value(param_->interface,"interface",0),"colour") ==0)
+	{
+		// We nned to see if it is a list
+		GuessInterface guess(*this);
+		scan(guess);
+		string choice = guess.choice();
+
+		if(choice == "text")
+		{
+			set_value(param_->interface,"interface","colourlist");
+		}
+		
+		if(get_value(param_->interface,"help",0) == 0)
+			set_value(param_->interface,"help","help_colour");	
+	}
+	
+	const char *h;
+	if( (h = get_value(param_->interface,"hidden",0)) != 0  && (*h == 'T' || *h == 't'))
+	{
+		set_value(param_->interface,"interface","none");
+	}
+
+	if( (h = get_value(param_->interface,"visible",0)) != 0  && (*h == 'f' || *h == 'F'))
+	{
+		set_value(param_->interface,"interface","none");
+	}
+	
+	//if( ( h= get_value(param_->interface,"exclusive",0)) !=0  && (*h == 'T' || *h == 't'))
+	//{
+	//	multiple_=false;
+	//} 
+	
+	h=interface();
+	
+	if( h != 0)
+	{  
+	  	if(strcmp(h,"text") == 0)
+		{
+	  		multiple_ = true;
+		}	
+	
+		else if(strcmp(h,"icon") == 0)
+		{
+	  		const char * ev=get_value(param_->interface,"exclusive",0);
+			if(ev !=0  && (*ev == 'F' || *ev == 'f'))
+	  			multiple_ = true;
+		}
+	}
+		
+	//No helper if the interface is "none"		
+	if( h == 0 || strcmp(h,"none") == 0)
+	{
+	  	set_value(param_->interface,"help",0);
+	}
+	
+	const char* b = get_value(param_->interface,"beautify",0);
+	beautify_ = (b == 0) || (*b != 'f');
+
+	name_ = beautify(param_->name);
+
+	value* v = param_->default_values;
+	while(v)
+	{
+		defaults_.push_back(v->name);
+		v = v->next;
+	}
+}
+
+Parameter::~Parameter()
+{
+}
+
+const char* Parameter::name() const
+{
+	return param_->name;
+}
+
+void Parameter::scan(ParameterScanner& s) const
+{
+	scan(s,param_->values);
+}
+
+void Parameter::scan(ParameterScanner& s,const value* v) const
+{
+	while(v)
+	{
+		if(v->ref)
+			scan(s,v->ref);
+		else
+			s.next(*this, v->name,v->other_names?v->other_names->name:0);
+		v = v->next;
+	}
+}
+
+Request Parameter::interfaceRequest() const 
+{
+	return Request(param_->interface);
+}
+
+const char* Parameter::help() const
+{
+	return get_value(param_->interface,"help",0);
+}
+
+const char* Parameter::help_text() const
+{
+	return get_value(param_->interface,"help_text",0);
+}
+
+const char* Parameter::help_icon() const
+{
+	const char* p = get_value(param_->interface,"help_icon",0);
+	return p ? p : "";
+}
+
+const char* Parameter::interface() const
+{
+	return get_value(param_->interface,"interface",0);
+}
+
+const string& Parameter::beautify(const string& name) const
+{
+	map<string,string>::const_iterator j = beau_.find(name);
+	if(j != beau_.end()) return (*j).second;
+
+	string& result = const_cast<Parameter*>(this)->beau_[name];
+	bool up = true;
+	result = name;
+
+	for(int it=0; it<result.length(); ++it)
+	{
+		char j = result[it];
+		if(j == '_' || j == ' ')
+		{
+			up = true;
+			result[it] = ' ';	
+		}
+		else 
+		{
+			result[it] = up ? toupper(j) : tolower(j);
+			up = false;
+		}
+	}
+
+	return result;
+}
+
+const string& Parameter::beautifiedName() const            
+{
+	return name_;
+}
+
+const string& Parameter::beautifiedName(const string& name) const            
+{
+	if(beautify_)
+		return beautify(name);
+	else
+		return name;
+}
+
+bool Parameter::multiple() const
+{
+	return multiple_;
+}
+
+bool Parameter::hasDefaults() const
+{
+	return param_->default_values != 0;
+}
+
+const vector<string>& Parameter::defaults() const
+{
+	return defaults_;
+}
diff --git a/src/Desktop/Parameter.h b/src/Desktop/Parameter.h
new file mode 100644
index 0000000..a89b18f
--- /dev/null
+++ b/src/Desktop/Parameter.h
@@ -0,0 +1,76 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 Parameter_H
+#define Parameter_H
+
+struct parameter;
+struct value;
+
+#include "Request.h"
+
+class Parameter;
+
+class ParameterScanner {
+public:
+	virtual void next(const Parameter&, const char*,const char*) = 0;
+};
+
+class Language;
+
+class Parameter {
+public:
+	Parameter(Language&,parameter*);
+	~Parameter();
+
+	const char* name() const;
+	const char* help() const;
+	const char* help_text() const;
+	const char* help_icon() const;
+	const char* interface() const;
+
+	Request interfaceRequest() const;
+
+        const string& beautifiedName(const string&) const;
+        const string& beautifiedName() const;
+
+	void scan(ParameterScanner&) const;
+
+	bool multiple() const;
+	bool hasDefaults() const;
+
+	const vector<string>& defaults() const;
+	
+private:
+        // No copy allowed
+
+	Parameter(const Parameter&);
+	Parameter& operator=(const Parameter&);
+
+	Language&   lang_;
+	parameter*  param_;
+	bool        multiple_;
+	bool        beautify_;
+	map<string,string> beau_;
+	string      name_;
+	vector<string> defaults_;
+
+	const string& beautify(const string&) const;
+	void scan(ParameterScanner&,const value*) const;
+
+};
+
+inline void destroy(Parameter**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(Parameter);
+//#endif
+
+#endif
diff --git a/src/Desktop/Product.cc b/src/Desktop/Product.cc
new file mode 100644
index 0000000..5cbae68
--- /dev/null
+++ b/src/Desktop/Product.cc
@@ -0,0 +1,115 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Product.h"
+
+#include <sstream>
+
+#include "Folder.h"
+#include "Path.h"
+
+static vector<Product*> prodItems;
+	
+Product::Product(const string& path,const string& title,const string& desc,const std::set<string>& keys,bool hasImage) :
+       path_(path),       
+       title_(title),
+       description_(desc),
+       keys_(keys),
+       hasImage_(hasImage)
+{
+}
+
+bool Product::find(const string& str)
+{
+ 	for(set<string>::iterator it=keys_.begin(); it != keys_.end(); it++)
+	{
+		if((*it).find(str) != string::npos)
+			return true;  
+	} 	
+	
+	if(title_.find(str) != string::npos)
+	{
+	  	return true;
+	}	
+	  
+	return false;
+}	
+	
+string Product::imagePath()
+{
+	return path_ + "/thumbnail.png";
+}	
+		
+void Product::scan()
+{
+	if(prodItems.size() >0)
+		return;
+	
+  	//search directory structure
+	Folder *root=Folder::folder("products");
+	if(!root)
+	  	return;
+	
+	scan(root->path());
+}	
+
+
+void Product::scan(const Path& dir)
+{
+	Path descFile(dir.add("description.txt").str());
+	Path keyFile(dir.add("keywords.txt").str());
+	Path imgFile(dir.add("thumbnail.png").str());
+  
+	string desc;
+	std::set<string> keys;
+	
+  	if(descFile.exists())
+		desc=descFile.loadText();
+	  
+	if(keyFile.exists())
+	{		
+		string key=keyFile.loadText();
+	  	std::transform(key.begin(), key.end(), key.begin(), ::tolower);
+		
+		std::set<string> keys;
+    		istringstream iss(key);
+		do
+    		{
+        		string s;
+        		iss >> s;
+			keys.insert(s);
+    		} while (iss);	
+	}		
+	
+	if(keyFile.exists() || descFile.exists() || imgFile.exists())
+	{  
+		prodItems.push_back(new Product(dir.str(),dir.name(),desc,keys,imgFile.exists()));
+	}
+	
+	set<string> ds=dir.directories();
+	for(set<string>::iterator it=ds.begin(); it != ds.end(); it++)
+	{
+		Path p(dir.add(*it));
+		Product::scan(p);
+	}
+}
+
+
+void Product::find(const string& str,vector<Product*>& res)
+{  
+	Product::scan();
+	
+	for(vector<Product*>::iterator it=prodItems.begin(); it != prodItems.end(); it++)
+	{	  				
+	  	if((*it)->find(str))
+		{
+		  	res.push_back(*it);
+		}
+	}	
+}
diff --git a/src/Desktop/Product.h b/src/Desktop/Product.h
new file mode 100644
index 0000000..7bf17d5
--- /dev/null
+++ b/src/Desktop/Product.h
@@ -0,0 +1,45 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 Product_H
+#define Product_H
+
+#include <set>
+#include <string>
+#include <vector>
+
+using namespace std;
+
+class Path;
+
+class Product
+{
+public:
+	Product(const string&,const string&,const string&,const std::set<string>&,bool);
+	bool find(const string&);
+	string title() {return title_;}
+	string description() {return description_;}
+	bool hasImage() {return hasImage_;}
+	string imagePath();
+	string path() {return path_;}
+	
+	static void find(const string& str,vector<Product*>&);
+	
+protected:	
+	static void scan();
+	static void scan(const Path&);
+	
+	string path_;
+	string title_;
+	string description_;
+	std::set<string> keys_;
+	bool hasImage_;
+};
+
+#endif	
\ No newline at end of file
diff --git a/src/Desktop/ProductFolder.cc b/src/Desktop/ProductFolder.cc
new file mode 100644
index 0000000..bab0f15
--- /dev/null
+++ b/src/Desktop/ProductFolder.cc
@@ -0,0 +1,24 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Log.h"
+#include "ProductFolder.h"
+#include "IconFactory.h"
+
+ProductFolder::ProductFolder(Folder* parent,const IconClass& kind,
+		const string& name,IconInfo* info):
+	SystemFolder(parent,kind,name,info)
+{
+}
+
+ProductFolder::~ProductFolder()
+{
+}
+
+static IconMaker<ProductFolder> maker1("PRODUCT");
diff --git a/src/Desktop/ProductFolder.h b/src/Desktop/ProductFolder.h
new file mode 100644
index 0000000..c260d4e
--- /dev/null
+++ b/src/Desktop/ProductFolder.h
@@ -0,0 +1,28 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 ProductFolder_H
+#define ProductFolder_H
+
+#include "SystemFolder.h"
+
+class ProductFolder : public SystemFolder 
+{
+public: 
+	ProductFolder(Folder* parent,const IconClass& kind,const string& name,IconInfo* info);
+	virtual ~ProductFolder(); 
+
+private:
+	ProductFolder(const ProductFolder&);
+	ProductFolder& operator=(const ProductFolder&);
+};
+
+inline void destroy(ProductFolder**) {}
+
+#endif
diff --git a/src/Desktop/Protocol.cc b/src/Desktop/Protocol.cc
new file mode 100644
index 0000000..0a77687
--- /dev/null
+++ b/src/Desktop/Protocol.cc
@@ -0,0 +1,36 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Protocol.h"
+
+#include <vector>
+
+using namespace std;
+
+static vector<Protocol*>* all = 0;
+
+Protocol::Protocol()
+{
+	if(all == 0)
+		all = new vector<Protocol*>();
+	all->push_back(this);
+}
+Protocol::~Protocol()
+{
+}
+
+void Protocol::make() 
+{
+}
+
+void Protocol::init()
+{
+	for (vector<Protocol*>::iterator j = all->begin(); j != all->end(); ++j )
+		(*j)->make();
+}
diff --git a/src/Desktop/Protocol.h b/src/Desktop/Protocol.h
new file mode 100644
index 0000000..833f82a
--- /dev/null
+++ b/src/Desktop/Protocol.h
@@ -0,0 +1,47 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File Protocol.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef Protocol_H
+#define Protocol_H
+
+class Protocol 
+{
+public:
+	Protocol();
+	~Protocol(); 
+
+	static void init();
+
+private:
+	// No copy allowed
+	Protocol(const Protocol&);
+	Protocol& operator=(const Protocol&);
+
+	virtual void make();
+
+};
+
+inline void destroy(Protocol**) {}
+
+template<class T>
+class ProtocolFactory : public Protocol {
+	void make() { new T(); }
+public:
+	ProtocolFactory()  {};
+};
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(Protocol);
+//#endif
+
+#endif
diff --git a/src/Desktop/Queue.cc b/src/Desktop/Queue.cc
new file mode 100644
index 0000000..52475f7
--- /dev/null
+++ b/src/Desktop/Queue.cc
@@ -0,0 +1,74 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Queue.h"
+
+#include "Task.h"
+#include "IconObject.h"
+
+Queue::Queue(IconObject* owner):
+	owner_(owner),
+	active_(0)
+{
+}
+
+Queue::~Queue()
+{
+}
+
+void Queue::ownerGone()
+{
+	owner_ = 0;
+	enable();
+}
+
+void Queue::push(Task* t)
+{
+	t->add(this);
+	tasks_.push_back(t);
+
+	enable();
+}
+
+void Queue::run()
+{
+	if(owner_ == 0 && active_ == 0)
+	{
+		delete this;
+		return;
+	}
+
+	if(active_ == 0 && tasks_.size() != 0)
+	{
+		active_ = tasks_.front();
+		tasks_.pop_front();
+		if(owner_) owner_->notifyWaiting();
+		active_->start();
+	}
+
+	if(tasks_.size() == 0)
+		disable();
+}
+
+void Queue::success(Task*,const Request&)
+{
+	if(owner_) owner_->notifyReady();
+	done();
+}
+
+void Queue::failure(Task*)
+{
+	if(owner_) owner_->notifyError();
+	done();
+}
+
+void Queue::done()
+{
+	active_ = 0;
+}
diff --git a/src/Desktop/Queue.h b/src/Desktop/Queue.h
new file mode 100644
index 0000000..79030cb
--- /dev/null
+++ b/src/Desktop/Queue.h
@@ -0,0 +1,46 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 Queue_H
+#define Queue_H
+
+#include "TaskObserver.h"
+#include "Task.h"
+#include "IconObject.h"
+#include "Runnable.h"
+
+
+class Queue : public TaskObserver, public Runnable  
+{
+public:
+	Queue(IconObject* owner);
+
+	void push(Task*);
+	void ownerGone();
+	
+private:
+	~Queue();
+
+	// No copy allowed
+	Queue(const Queue&);
+	Queue& operator=(const Queue&);
+
+	void done();
+	virtual void success(Task*,const Request&);
+	virtual void failure(Task*);
+	virtual void run();
+		
+	IconObjectH owner_;
+	list<TaskH> tasks_;
+	TaskH       active_;
+};
+
+inline void destroy(Queue**) {}
+
+#endif
diff --git a/src/Desktop/ReplyObserver.cc b/src/Desktop/ReplyObserver.cc
new file mode 100644
index 0000000..5c9969b
--- /dev/null
+++ b/src/Desktop/ReplyObserver.cc
@@ -0,0 +1,71 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Metview.h"
+
+#include "ReplyObserver.h"
+#include "Request.h"
+
+//=================================================================
+class ReplyHandler : public MvReply {
+	virtual void callback(MvRequest&);
+};
+
+void ReplyHandler::callback(MvRequest& in)
+{
+	ReplyObserverH *s = (ReplyObserverH*)getReference();
+	if(s == 0) return;
+
+	const char *p;
+	int i = 0;
+	while(p = getMessage(i++))
+		(*s)->message(p);
+
+	(*s)->reply(in,getError());
+
+	delete s;
+}
+
+//=================================================================
+
+class ProgressHandler : public MvProgress {
+    void callback(MvRequest& r);
+};
+
+void ProgressHandler::callback(MvRequest& in)
+{
+	ReplyObserverH *s = (ReplyObserverH*)getReference();
+	if(s == 0) return;
+
+	const char *p;
+	int i = 0;
+	while(p = getMessage(i++))
+		(*s)->message(p);
+
+	(*s)->progress(in);
+
+}
+
+//=================================================================
+
+ReplyObserver::ReplyObserver()
+{
+	// This will install the handler on creation of the first instance
+	static ReplyHandler    replyHandler;
+	static ProgressHandler progressHandler;
+}
+
+ReplyObserver::~ReplyObserver()
+{
+}
+
+void ReplyObserver::callService(const string& service,const Request& r)
+{
+	MvApplication::callService(service.c_str(),r,new ReplyObserverH(this));
+}
diff --git a/src/Desktop/ReplyObserver.h b/src/Desktop/ReplyObserver.h
new file mode 100644
index 0000000..c3327c6
--- /dev/null
+++ b/src/Desktop/ReplyObserver.h
@@ -0,0 +1,46 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File ReplyObserver.h
+// Baudouin Raoult - ECMWF Aug 99
+
+#ifndef ReplyObserver_H
+#define ReplyObserver_H
+
+#include "Counted.h"
+
+class Request;
+
+class ReplyObserver : public virtual Counted  
+{
+public:
+	ReplyObserver();
+	virtual ~ReplyObserver();
+
+	virtual void reply(const Request&,int) = 0;
+	virtual void progress(const Request&) = 0;
+	virtual void message(const string&) = 0;
+
+protected:
+	void callService(const string&,const Request&);
+
+private:
+	// No copy allowed
+	ReplyObserver(const ReplyObserver&);
+	ReplyObserver& operator=(const ReplyObserver&);
+};
+
+
+class ReplyObserverH : public Handle<ReplyObserver> 
+{
+public:
+	ReplyObserverH(ReplyObserver* o) : Handle<ReplyObserver>(o) {}
+};
+
+#endif
diff --git a/src/Desktop/RequestPanel.cc b/src/Desktop/RequestPanel.cc
new file mode 100644
index 0000000..7867572
--- /dev/null
+++ b/src/Desktop/RequestPanel.cc
@@ -0,0 +1,263 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "RequestPanel.h"
+#include <QWidget>
+
+#include "Editor.h"
+#include "IconObject.h"
+//#include "Log.h"
+#include "IconClass.h"
+#include "IconFactory.h"
+#include "Parameter.h"
+
+
+#include "MvQRequestPanelLine.h"
+
+RequestPanel::RequestPanel(const IconClass& kind, QWidget *parent,Editor *editor, 
+	const char* name): 
+	QGridLayout(parent),
+	apply_(false),
+	class_(kind),
+	owner_(editor)
+{
+	setSizeConstraint(QLayout::SetMinAndMaxSize);
+	setColumnMinimumWidth(3,200);
+	setColumnStretch(3,1);
+	
+	//We need to set spacing explicitly to make MvQRequestPanelWidget work!
+	setHorizontalSpacing(8);
+	setVerticalSpacing(6);
+		
+	//create(parent,  (char*) name);
+	scan();
+	
+	QWidget *w=new QWidget;
+	addWidget(w,count(),1);
+	setRowStretch(count()-1,1);
+	
+	//Manage();
+}
+
+RequestPanel::~RequestPanel()
+{
+	for(vector<RequestPanelItem*>::iterator it = items_.begin(); it != items_.end(); it++)
+		delete (*it);	
+}
+
+const IconClass& RequestPanel::iconClass()
+{
+	return class_;
+}
+
+void RequestPanel::scan() 
+{
+   	class_.language().scan(*this);
+
+	
+	/*Dimension a,b;
+	Dimension ma = 0,mb = 0;
+
+	for(vector<RequestPanelItem*>::iterator j = items_.begin(); j != items_.end(); ++j)
+	{	
+		RequestPanelItem* p = (*j);
+		p->getSizes(a,b);
+		if(a>ma) ma = a;
+		if(b>mb) mb = b;
+	}
+	
+	for(vector<RequestPanelItem*>::iterator j = items_.begin(); j != items_.end(); ++j)
+	{	
+		RequestPanelItem* p = (*j);
+		p->setSizes(ma,mb);
+	}*/
+
+}
+#if 0
+Widget  RequestPanel::where() 
+{
+	return rowcol_;
+}
+Widget  RequestPanel::main() 
+{
+	return UIRequestPanel;
+}
+#endif
+
+void RequestPanel::merge(IconObject* o)
+{
+	// Merge requests. The input request is not expanded; therefore,
+	// it contains only the non-default parameters. As a consequence,
+	// only those parameters, plus the ones that are set in the
+	// output request, will be merged.
+	Request r1 = request();
+	Request r  = class_.language().expand(r1,EXPAND_DEFAULTS,false);
+	r.merge(o->request());
+
+	// Move back to the default those values that are no longer valid
+	Request rr = class_.language().expand(r,EXPAND_DONT_FAIL);
+
+	request(rr);
+
+	// Update UI
+	call(&RequestPanelItem::update);
+}
+
+void RequestPanel::replace(IconObject* o)
+{
+	request(o->request());
+	call(&RequestPanelItem::update);
+}
+
+void RequestPanel::next(const Parameter& p)
+{
+	MvQRequestPanelLine::build(*this,p);
+	
+	//Who add it to the items???
+	//items_.push_back(LineFactory::create(owner,param);
+}
+
+void RequestPanel::call(Method proc)
+{
+	for(vector<RequestPanelItem*>::iterator j = items_.begin(); j != items_.end(); ++j)
+	{	
+		RequestPanelItem* o = *j;
+		(o->*proc)();
+	}
+}
+
+void RequestPanel::apply() 
+{
+      apply_ = true;
+      call(&RequestPanelItem::apply);
+      apply_ = false;
+}
+
+const Request& RequestPanel::request(long flags) 
+{	
+	map<long,Request>::iterator j = cache_.find(flags);
+	if(j != cache_.end()) return (*j).second;
+	return cache_[flags] = class_.language().expand(cache_[EXPAND_2ND_NAME],flags);
+}
+
+void RequestPanel::request(const Request& r, long flags)
+{
+	r.print();
+  
+  	cache_.clear();
+	cache_[EXPAND_2ND_NAME] = class_.language().expand(r,EXPAND_2ND_NAME);
+	if ( flags != EXPAND_2ND_NAME )
+		cache_[flags] = class_.language().expand(r,flags);
+}
+
+void RequestPanel::edit(IconObject *o)
+{	
+	for(vector<RequestPanelItem*>::iterator j = items_.begin(); j != items_.end(); ++j)
+		(*j)->edit(o);
+}
+
+void RequestPanel::close() 
+{
+	call(&RequestPanelItem::cleanup);
+	cache_.clear();
+}
+
+void RequestPanel::reset(IconObject *o)
+{	
+	request(o->request()); 
+	edit(o);
+	call(&RequestPanelItem::reset);
+}
+
+void RequestPanel::registerObserver(RequestPanelItem* observer) 
+{
+	items_.push_back(observer);
+}
+
+void RequestPanel::changed()
+{
+	owner_->changed();
+}	
+
+void RequestPanel::changed(RequestPanelItem& p,bool canUpdate)
+{
+	Request r = request();
+	p.set(r);
+	request(r);
+
+	if(!apply_) 
+		if(canUpdate) 
+			call(&RequestPanelItem::update);
+		
+		
+	owner_->changed();
+}
+
+void RequestPanel::set(const char* p,const string& v)
+{
+	Request r = request();
+	r(p) = v.c_str();
+	request(r);
+
+	if(!apply_) call(&RequestPanelItem::update);
+	
+	owner_->changed();
+}
+
+void RequestPanel::set(const char* p,const vector<string>& v)
+{
+	Request r = request();
+	r.set(p,v);
+	request(r);
+
+	if(!apply_) call(&RequestPanelItem::update);
+	
+	owner_->changed();
+}
+
+void RequestPanel::clear(const char* p)
+{
+	Request r = request();
+	r.unsetParam(p);
+	request(r);
+
+	if(!apply_) call(&RequestPanelItem::update);
+	
+	owner_->changed();
+}
+
+void RequestPanel::setToDefault(RequestPanelItem *item)
+{
+	Request r = request();
+	r.unsetParam(item->parameter().name());
+	request(r);
+
+	if(!apply_) 
+	{  
+		item->reset();
+	
+		for(vector<RequestPanelItem*>::iterator j = items_.begin(); j != items_.end(); ++j)
+		{
+	  		if( (*j) != item)
+		  		(*j)->update();
+		}		
+	}
+	
+	owner_->changed();
+}
+
+void RequestPanel::itemWasChangedToDefault()
+{
+	owner_->changed();
+}	
+
+IconObjectH RequestPanel::currentObject()
+{
+  	return (items_.size() > 0) ? items_.at(0)->currentObject() : 0;
+}
\ No newline at end of file
diff --git a/src/Desktop/RequestPanel.h b/src/Desktop/RequestPanel.h
new file mode 100644
index 0000000..1f74bf6
--- /dev/null
+++ b/src/Desktop/RequestPanel.h
@@ -0,0 +1,94 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 RequestPanel_H
+#define RequestPanel_H
+
+#include <QGridLayout>
+
+#include "Language.h"
+#include "IconObject.h"
+
+class Editor;
+class RequestPanelItem;
+class IconClass;
+
+class RequestPanel : public QGridLayout, public LanguageScanner 
+{
+public:
+	RequestPanel(const IconClass&, QWidget*, Editor*,const char* = 0);
+	virtual ~RequestPanel();
+
+	void changed();
+	void changed(RequestPanelItem&,bool = true);
+	void set(const char*,const string&);
+	void set(const char*,const vector<string>&);
+	void clear(const char*);
+
+	void registerObserver(RequestPanelItem*);
+	const IconClass& iconClass();
+		 
+   	//Widget where();
+	//Widget main();
+
+   	void    scan(); 
+
+	void    apply();
+        void    reset(IconObject*);
+	void    edit(IconObject*);
+	void    close();
+	void    setToDefault(RequestPanelItem *);
+	void    itemWasChangedToDefault();
+
+	void 	replace(IconObject*);
+	void 	merge(IconObject*);
+
+	const   Request& request(long = EXPAND_2ND_NAME);
+	void    request(const Request&, long = EXPAND_2ND_NAME);
+	IconObjectH currentObject();
+
+protected:
+	vector<RequestPanelItem*> items_;
+	const IconClass&	  class_;
+	bool                      apply_;
+
+	typedef void (RequestPanelItem::*Method)();
+	void call(Method);
+
+private:
+	RequestPanel(const RequestPanel&);
+	RequestPanel& operator=(const RequestPanel&);
+
+	virtual void next(const Parameter&);
+
+	map<long,Request> cache_;
+	Editor* owner_;
+};
+
+inline void destroy(RequestPanel**) {}
+
+#if 0
+template<class T>
+class XLEditor : public RequestPanel, public T {
+public:
+	XLEditor(IconClass& c): 
+		RequestPanel(c)
+	{
+		T::create(main());
+		XtManageChild(T::xd_rootwidget());
+	}
+};
+#endif
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(RequestPanel);
+//#endif
+
+#endif
diff --git a/src/Desktop/RequestPanelItem.cc b/src/Desktop/RequestPanelItem.cc
new file mode 100644
index 0000000..a8f26fd
--- /dev/null
+++ b/src/Desktop/RequestPanelItem.cc
@@ -0,0 +1,120 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "RequestPanelItem.h"
+#include "RequestPanel.h"
+
+#include "Parameter.h"
+#include "Request.h"
+
+RequestPanelItem::RequestPanelItem(RequestPanel& owner,const Parameter& param): 
+	owner_(owner),
+	param_(param)
+{
+	owner_.registerObserver(this);
+	decache();
+}
+
+RequestPanelItem::~RequestPanelItem()
+{
+}
+
+void RequestPanelItem::set(Request&)
+{
+}
+
+void RequestPanelItem::edit(IconObject* icon)
+{
+	currentObject_ = icon;
+}
+	 
+#if 0
+void RequestPanelItem::getSizes(Dimension& a,Dimension& b)
+{
+     a = b = 0;	
+}
+
+void RequestPanelItem::setSizes(Dimension,Dimension)
+{
+}
+#endif
+
+long RequestPanelItem::flags()
+{
+	return EXPAND_2ND_NAME;
+} 
+
+//void RequestPanelItem::refresh(const vector<string>&)
+//{
+//}
+
+void RequestPanelItem::grey()
+{
+	const Request& r = owner_.request(flags());
+	vector<string> values = r.get("_UNSET");
+	bool g = false;
+	string name = param_.name();
+	for(int i = 0; i < values.size(); i++)
+		if(name == values[i])
+		{
+			g = true;
+			break;
+		}
+			
+	gray(g);
+}
+
+void RequestPanelItem::reset()
+{
+	const Request& r = owner_.request(flags());
+	vector<string> values = r.get(param_.name());
+	if(values != cache_)
+	{
+		cache_ = values;
+		refresh(values);
+		grey();
+
+		// Check defaults
+		vector<string> def = owner_.request(flags() | EXPAND_NO_DEFAULT).get(param_.name());
+		mark( def.size() != 0 && values.size() != 0 );
+
+	}
+}
+
+
+void RequestPanelItem::cleanup()
+{
+
+}
+
+void RequestPanelItem::update()
+{
+	reset();
+}
+
+void RequestPanelItem::checkDefault()
+{
+	const Request& r = owner_.request(flags());
+	vector<string> values = r.get(param_.name());
+	mark(values != cache_);
+}	  
+	  
+void RequestPanelItem::apply()
+{
+}
+
+void RequestPanelItem::decache()
+{
+	cache_.clear();
+	cache_.push_back("\1\2\3"); // Something imposible
+}
+
+/*void RequestPanelItem::mark(bool)
+{
+}*/
diff --git a/src/Desktop/RequestPanelItem.h b/src/Desktop/RequestPanelItem.h
new file mode 100644
index 0000000..7f16d1c
--- /dev/null
+++ b/src/Desktop/RequestPanelItem.h
@@ -0,0 +1,64 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 RequestPanelItem_H
+#define RequestPanelItem_H
+
+class Request;
+class RequestPanel;
+class Parameter;
+
+#include "IconObject.h"
+
+class RequestPanelItem 
+{
+public:
+	RequestPanelItem(RequestPanel&,const Parameter&);
+	virtual ~RequestPanelItem();
+	 
+	//virtual void getSizes(Dimension&,Dimension&);
+	//virtual void setSizes(Dimension,Dimension);
+
+	virtual void reset();
+	virtual void update();
+	virtual void apply();
+	virtual void cleanup();
+	virtual void set(Request&);
+
+	virtual void grey();
+
+	virtual long flags();
+	virtual void refresh(const vector<string>&)=0;
+
+	void checkDefault();
+	
+	virtual void gray(bool)=0;
+	virtual void mark(bool)=0;
+
+	virtual void edit(IconObject*);
+	IconObjectH currentObject() {return currentObject_;}
+	const Parameter& parameter() {return param_;}
+
+protected:
+	RequestPanel&    owner_;
+	const Parameter& param_;
+	IconObjectH      currentObject_;
+
+	void decache();
+
+private:
+	RequestPanelItem(const RequestPanelItem&);
+	RequestPanelItem& operator=(const RequestPanelItem&);
+
+	vector<string> cache_;
+
+};
+
+
+#endif
diff --git a/src/Desktop/RootFolder.cc b/src/Desktop/RootFolder.cc
new file mode 100644
index 0000000..e6d2e7a
--- /dev/null
+++ b/src/Desktop/RootFolder.cc
@@ -0,0 +1,53 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "RootFolder.h"
+#include "IconClass.h"
+#include "FolderInfo.h"
+	
+RootFolder::RootFolder() : SystemFolder(0,IconClass::find("HOME"),"",0)
+{
+	// Make sure this one is never deleted
+//	_attach();
+	if(!folderInfo_)
+	  	folderInfo_ = new FolderInfo(path().add(".__metview_icon_").str());
+}
+
+RootFolder::~RootFolder()
+{
+}
+
+Path RootFolder::dotPath() const
+{
+	string p = "/";
+	return Path(p);	
+	//return path().add(".MainWindowResources");	
+}
+
+string RootFolder::fullName() const
+{
+	return "/";
+}
+
+Path RootFolder::path() const
+{
+	static Path user = string(getenv("METVIEW_USER_DIRECTORY"));
+	return user;
+}
+
+Folder* RootFolder::parent() const
+{
+	return 0;
+}
+
+Path RootFolder::logPath()
+{
+	string p = Folder::folder("temporary")->path().str()  + "/messages";
+	return Path(p);
+}
diff --git a/src/Desktop/RootFolder.h b/src/Desktop/RootFolder.h
new file mode 100644
index 0000000..80d2c62
--- /dev/null
+++ b/src/Desktop/RootFolder.h
@@ -0,0 +1,37 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 RootFolder_H
+#define RootFolder_H
+
+#include "SystemFolder.h"
+
+class RootFolder : public SystemFolder
+{
+public:
+	RootFolder();
+	virtual ~RootFolder(); 
+
+private:
+	// No copy allowed
+	RootFolder(const RootFolder&);
+	RootFolder& operator=(const RootFolder&);
+
+	virtual Path path() const;
+	virtual Path dotPath() const;
+	virtual string fullName() const;
+	virtual Folder* parent() const;
+	virtual Path logPath();
+	bool isEmbedded() {return false;}
+
+};
+
+inline void destroy(RootFolder**) {}
+
+#endif
diff --git a/src/Desktop/Runnable.cc b/src/Desktop/Runnable.cc
new file mode 100644
index 0000000..a836def
--- /dev/null
+++ b/src/Desktop/Runnable.cc
@@ -0,0 +1,80 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Runnable.h"
+#include "Metview.h"
+
+#include <QTimer>
+#include <set>
+
+#include "assert.h"
+
+typedef std::set<Runnable*> Set;
+static Set runnables;
+
+/* do a process in the "background" */
+
+void Runnable::slotWork()
+{
+	// Copy as Runnable may be removed
+	
+	Set s = runnables;
+	int active = 0;
+
+	for(Set::iterator j = s.begin(); j != s.end(); ++j)
+	{
+		if((*j)->actived_)
+		{
+			active++;
+			(*j)->run();
+		}
+	}
+
+    	if(active != 0)
+	{
+	  	//Find an exisiting runnable and set the timer for it!
+	  	Set::iterator j = runnables.begin();
+		if(j != runnables.end())
+		{
+		  	QTimer::singleShot(0,(*j),SLOT(slotWork()));
+		}
+		else
+		{
+		  	//This should not happen!
+			assert(0);
+		}	
+	}	
+		
+		
+}
+
+Runnable::Runnable():
+	actived_(false)
+{
+	runnables.insert(this);
+}
+
+Runnable::~Runnable()
+{
+	runnables.erase(this);
+}
+
+void Runnable::enable()
+{
+	if(actived_) return;
+	
+	QTimer::singleShot(0, this, SLOT(slotWork()));
+	
+	actived_ = true;
+}
+
+void Runnable::disable()
+{
+	actived_ = false;
+}
diff --git a/src/Desktop/Runnable.h b/src/Desktop/Runnable.h
new file mode 100644
index 0000000..9ad6b68
--- /dev/null
+++ b/src/Desktop/Runnable.h
@@ -0,0 +1,43 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 Runnable_H
+#define Runnable_H
+
+#include <QObject>
+
+class Runnable : public QObject
+{
+Q_OBJECT
+  
+public:
+	Runnable();
+	virtual ~Runnable(); // Change to virtual if base class
+
+	void enable();
+	void disable();
+	bool actived() { return actived_; }
+
+	virtual void run() = 0;
+
+public slots:
+	void slotWork();    
+		
+private:
+	Runnable(const Runnable&);
+	Runnable& operator=(const Runnable&);
+
+	bool actived_;
+
+	//QT slot???
+	//static Boolean workCB(XtPointer);
+};
+
+
+#endif
diff --git a/src/Desktop/Service.cc b/src/Desktop/Service.cc
new file mode 100644
index 0000000..9423af1
--- /dev/null
+++ b/src/Desktop/Service.cc
@@ -0,0 +1,56 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Service.h"
+#include "MetviewService.h"
+#include "ShellService.h"
+
+#include <map>
+
+typedef map<string,Service*> Map;
+static Map* services = 0;
+
+Service::Service(const string& name):
+	name_(name)
+{
+	if(services == 0)
+		services = new Map();
+	(*services)[name] = this;
+}
+
+Service::~Service()
+{
+}
+string Service::name()
+{
+   return name_;
+}
+
+Service* Service::find(const string &name)
+{
+	if(services)
+	{
+		Map::iterator j = services->find(name);
+
+		if(j != services->end())
+			return (*j).second;
+	}
+
+	if(name[0] == '(')
+		return new ShellService(name);
+	else
+		return new MetviewService(name);
+	
+	return 0;
+}
+
+void Service::print(ostream& s) const
+{
+	s << name_;
+}
diff --git a/src/Desktop/Service.h b/src/Desktop/Service.h
new file mode 100644
index 0000000..ea24104
--- /dev/null
+++ b/src/Desktop/Service.h
@@ -0,0 +1,47 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 Service_H
+#define Service_H
+
+#include <string>
+#include <ostream>
+
+using namespace std;
+
+class IconObject;
+class Action;
+class Task;
+
+class Service {
+public:
+	Service(const string&);
+	virtual ~Service(); 
+
+	string name();
+	virtual Task* task(const Action&,IconObject*) = 0;
+	static Service* find(const string&);
+
+protected:
+	string name_;
+	virtual void print(ostream&) const; 
+
+private:
+	// No copy allowed
+	Service(const Service&);
+	Service& operator=(const Service&);
+
+	friend ostream& operator<<(ostream& s,const Service& p)
+		{ p.print(s); return s; }
+
+};
+
+inline void destroy(Service**) {}
+
+#endif
diff --git a/src/Desktop/ServiceEditor.cc b/src/Desktop/ServiceEditor.cc
new file mode 100644
index 0000000..bf1957e
--- /dev/null
+++ b/src/Desktop/ServiceEditor.cc
@@ -0,0 +1,165 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "ServiceEditor.h"
+
+#include "EditorFactory.h"
+#include "IconObject.h"
+#include "Request.h"
+#include "IconClass.h"
+#include "Editor.h"
+#include "ReplyObserver.h"
+
+
+ServiceEditor::ServiceEditor(const IconClass& name,const string& kind):
+    Editor(name,kind)
+{
+}
+
+ServiceEditor::~ServiceEditor()
+{
+}
+
+
+
+// -----------------------------------------------------------------
+// ServiceEditor::edit
+// Called to start editing a macro. We call the macroedit service to
+// bring up the Qt macro editor.
+
+void ServiceEditor::edit(void)
+{
+    string path = current_->path().str();
+
+    replyObserver_ = new ServiceEditorObserver(*this, path);
+    replyObserver_->start();
+
+
+//    replyObserver_->callService("macroedit", r);
+
+
+//    task_->start();
+
+
+}
+
+
+
+
+//=================================================================
+
+ServiceEditorObserver::ServiceEditorObserver(ServiceEditor &editor, string &path) :
+    editor_(editor), path_(path)
+{
+}
+
+ServiceEditorObserver::~ServiceEditorObserver()
+{
+}
+
+
+void ServiceEditorObserver::start()
+{
+    	// Editor::edit will already have set up the path that we need
+	string kind=editor_.iconClass().name();
+	
+	if(kind  == "WMSCLIENT")
+    	{
+    		MvRequest r(path_.c_str());
+		
+		r("_NAME")=path_.c_str();
+    		r("_CLASS")="WMSCLIENT";
+    		r("_ACTION")="edit";
+    		r("_SERVICE")="wmsclient";
+		r.print();
+
+		callService("wmsclient", r);
+
+    	}
+    	else if(kind  == "WCSCLIENT")
+    	{    		
+		MvRequest r(path_.c_str());
+		
+		r("_NAME")=path_.c_str();
+    		r("_CLASS")="WCSCLIENT";
+    		r("_ACTION")="edit";
+    		r("_SERVICE")="wcsclient";
+		r.print();
+
+		callService("wcsclient", r);
+
+    	}
+    	else if(kind  == "RTTOV_INPUT_DATA")
+    	{    		
+		MvRequest r("RTTOV_INPUT_DATA");
+		
+		r("PATH")=path_.c_str();
+		r("_NAME")=path_.c_str();
+    		r("_CLASS")="RTTOV_INPUT_DATA";
+    		r("_ACTION")="edit";
+    		r("_SERVICE")="ScmDataEditor";
+		r.print();
+
+		callService("ScmDataEditor", r);
+
+    	}
+    	else if(kind  == "SCM_INPUT_DATA")
+    	{    		
+		MvRequest r("SCM_INPUT_DATA");
+		
+		r("PATH")=path_.c_str();
+		r("_NAME")=path_.c_str();
+    		r("_CLASS")="SCM_INPUT_DATA";
+    		r("_ACTION")="edit";
+    		r("_SERVICE")="ScmDataEditor";
+		r.print();
+
+		callService("ScmDataEditor", r);
+
+    	}
+    	
+    	
+	else
+	{  
+		MvRequest r("MACROEDIT");
+
+    		r("PATH")     = path_.c_str();  // path to macro
+    		r("LANGUAGE") = editor_.iconClass().name().c_str(); // icon class, e.g. MACRO or MAGML
+    		r("_CLASS")   = editor_.iconClass().name().c_str(); // icon class, e.g. MACRO or MAGML
+		r.print();
+		callService("macroedit", r);
+	}
+}
+
+
+void ServiceEditorObserver::reply(const Request& r,int err)
+{
+
+    editor_.notifyObserverApply();
+    editor_.Editor::editDone();
+
+}
+
+void ServiceEditorObserver::progress(const Request& r)
+{
+}
+
+void ServiceEditorObserver::message(const string& msg)
+{
+}
+
+
+void ServiceEditorObserver::print(ostream& s) const
+{
+}
+
+
+static EditorMaker<ServiceEditor> maker1("QtMacroEditor");
+static EditorMaker<ServiceEditor> maker2("QtOgcClientEditor");
+static EditorMaker<ServiceEditor> maker3("QtScmDataEditor");
diff --git a/src/Desktop/ServiceEditor.h b/src/Desktop/ServiceEditor.h
new file mode 100644
index 0000000..defa0a0
--- /dev/null
+++ b/src/Desktop/ServiceEditor.h
@@ -0,0 +1,74 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 ServiceEditor_H
+#define ServiceEditor_H
+
+#include "Editor.h"
+#include "ReplyObserver.h"
+
+class ServiceEditor;
+
+class ServiceEditorObserver : public ReplyObserver 
+{
+public:
+
+	ServiceEditorObserver (ServiceEditor &editor, string &path);
+	virtual ~ServiceEditorObserver(); 
+
+	virtual void start();
+
+	// From ReplyObserver
+	virtual void reply(const Request&, int);
+	virtual void progress(const Request&);  
+	virtual void message(const string&);
+
+protected:
+	 void print(ostream&) const; 
+
+private:
+	// No copy allowed
+    	ServiceEditorObserver(const ServiceEditorObserver&);
+	ServiceEditorObserver& operator=(const ServiceEditorObserver&);
+
+    	ServiceEditor &editor_;
+    	string         path_;
+};
+
+
+class ServiceEditor :public Editor 
+{
+public:
+	ServiceEditor(const IconClass&,const string&);
+	virtual ~ServiceEditor();
+	void changed() {};
+	void raiseIt() {};
+	void merge(IconObject*) {};
+	void replace(IconObject*) {};	
+
+private:
+	// No copy allowed
+	ServiceEditor(const ServiceEditor&);
+	ServiceEditor& operator=(const ServiceEditor&);
+
+	void edit(void);
+	void showIt() {}
+
+    	ServiceEditorObserver *replyObserver_;
+
+};
+
+inline void destroy(ServiceEditor**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(MacroEditor);
+//#endif
+
+#endif
diff --git a/src/Desktop/ShellService.cc b/src/Desktop/ShellService.cc
new file mode 100644
index 0000000..171d44a
--- /dev/null
+++ b/src/Desktop/ShellService.cc
@@ -0,0 +1,25 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "ShellService.h"
+#include "ShellTask.h"
+
+ShellService::ShellService(const string& name):
+	Service(name)
+{
+}
+
+ShellService::~ShellService()
+{
+}
+
+Task* ShellService::task(const Action&,IconObject* o)
+{
+	return new ShellTask(name_,o);
+}
diff --git a/src/Desktop/ShellService.h b/src/Desktop/ShellService.h
new file mode 100644
index 0000000..485e78c
--- /dev/null
+++ b/src/Desktop/ShellService.h
@@ -0,0 +1,32 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 ShellService_H
+#define ShellService_H
+
+#include "Service.h"
+
+class ShellService : public Service 
+{
+public:
+	ShellService(const string&);
+	virtual ~ShellService(); 
+
+private:
+	// No copy allowed
+	ShellService(const ShellService&);
+	ShellService& operator=(const ShellService&);
+
+	virtual Task* task(const Action&,IconObject*);
+
+};
+
+inline void destroy(ShellService**) {}
+
+#endif
diff --git a/src/Desktop/ShellTask.cc b/src/Desktop/ShellTask.cc
new file mode 100644
index 0000000..96707e7
--- /dev/null
+++ b/src/Desktop/ShellTask.cc
@@ -0,0 +1,77 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "ShellTask.h"
+#include "IconObject.h"
+#include "Log.h"
+#include "Request.h"
+
+
+//=================================================================
+
+ShellTask::ShellTask(const string& cmd,IconObject* o) :
+	object_(o),
+	file_(0),
+	cmd_(cmd)
+{
+}
+
+ShellTask::~ShellTask()
+{
+}
+
+void ShellTask::start()
+{
+	Path path = object_->pathForShellTask();
+	// Here we are using a specialised version of the path. 
+	// To allow the visualisation of the PS files coming from 
+	// the MagML tools.
+	const char* p = path.str().c_str();
+	char buf[1024];
+	sprintf(buf,cmd_.c_str(),p,p,p,p,p,p);
+	file_ = popen(buf,"r");
+	if(!file_) {
+		Log::error(object_) << buf << Log::syserr << endl;
+		failure();
+		return;
+	}
+	Input::start(file_);
+	
+}
+
+void ShellTask::ready(const char* line)
+{
+	Log::error(object_) << line << endl;
+}
+
+void ShellTask::done(FILE* /*f*/)
+{
+
+	TaskH save = this; // Protect this so it can cleanup
+	// everything before being destryed
+
+	int n = 0;
+	if((n = pclose(file_)))
+	{
+	  Log::error(object_) << "Problems running: '"  << cmd_ <<"'." << endl;
+	  Log::error(object_) << "Exit code: " << n << endl;
+		failure();
+	}
+	else {
+		Request r;
+		success(r);
+	}
+	file_ = 0;
+	Input::stop();
+}
+
+void ShellTask::print(ostream& s) const
+{
+	s << "ShellTask[" << cmd_ << "]";
+}
diff --git a/src/Desktop/ShellTask.h b/src/Desktop/ShellTask.h
new file mode 100644
index 0000000..0d687e0
--- /dev/null
+++ b/src/Desktop/ShellTask.h
@@ -0,0 +1,50 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 ShellTask_H
+#define ShellTask_H
+
+#include "Task.h"
+#include "IconObject.h"
+#include "Input.h"
+
+
+class ShellTask : public Task, public Input 
+{
+public:
+	ShellTask(const string&,IconObject*);
+	virtual ~ShellTask(); 
+
+	virtual void addContext (const Request&) { };
+	
+protected:
+	 void print(ostream&) const; 
+         void Object(IconObjectH xx) { object_ = xx; }
+
+	// From Task
+	virtual void start();
+	// From Input
+	virtual void done(FILE*);
+
+private:
+	// No copy allowed
+	ShellTask(const ShellTask&);
+	ShellTask& operator=(const ShellTask&);
+
+	IconObjectH object_;
+	FILE*       file_;
+	string      cmd_;
+	
+	// From Input
+	virtual void ready(const char*);
+};
+
+inline void destroy(ShellTask**) {}
+
+#endif
diff --git a/src/Desktop/SimpleEditor.cc b/src/Desktop/SimpleEditor.cc
new file mode 100644
index 0000000..ac7b923
--- /dev/null
+++ b/src/Desktop/SimpleEditor.cc
@@ -0,0 +1,121 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "SimpleEditor.h"
+
+#include <QHBoxLayout>
+#include <QPainter>
+#include <QScrollArea>
+
+#include "EditorFactory.h"
+#include "IconObject.h"
+//#include "Log.h"
+
+#include "IconClass.h"
+#include "IconFactory.h"
+#include "RequestPanel.h"
+
+#include "MvQRequestPanelWidget.h"
+
+
+SimpleEditor::SimpleEditor(const IconClass& kind,const string& name):
+	MvQEditor(kind,name)
+{
+ 	//Panel	
+	panelArea_=new QScrollArea(this);
+	panelArea_->setWidgetResizable(true);
+	
+	centralLayout_->addWidget(panelArea_);
+	
+	vector<string> classes;
+	classes.push_back(kind.name());
+	
+	MvQRequestPanelWidget* w=new MvQRequestPanelWidget(classes,this);
+	panel_=new RequestPanel(kind,w,this);
+	
+	panelArea_->setWidget(w);
+	
+	connect(w,SIGNAL(iconDropped(IconObject*)),
+		 this,SLOT(slotIconDropped(IconObject*)));
+}
+
+SimpleEditor::~SimpleEditor()
+{
+	delete panel_;   
+}
+
+
+IconObject* SimpleEditor::copy(const string& name)
+{
+	//IconObject* o = IconFactory::create(name, class_);
+	//panel_.apply();
+	//o->request(panel_.request());
+	//return o;
+	return 0;
+}
+
+void SimpleEditor::edit()
+{  
+	if(!current_)
+	  	return;
+  
+	MvQEditor::edit();
+}
+
+
+void SimpleEditor::apply()
+{
+	panel_->apply();
+	current_->request(panel_->request());	
+}
+
+void SimpleEditor::reset()
+{
+	panel_->reset(current_);
+	
+	if(current_ && current_->locked())
+	{
+	  	if(QWidget *w=panelArea_->widget())	  
+	  		w->setEnabled(false);
+	}
+}
+
+void SimpleEditor::close()
+{
+	panel_->close();
+	//Enable again the widget
+	if(QWidget *w=panelArea_->widget())
+		w->setEnabled(true);
+}
+
+//Request SimpleEditor::currentRequest(long custom_expand)
+//{
+	//panel_.apply();
+	//return custom_expand ? panel_.request(custom_expand) : panel_.request();
+//}
+
+void SimpleEditor::replace(IconObjectH obj)
+{
+   	panel_->replace(obj);
+}
+
+void SimpleEditor::merge(IconObjectH obj)
+{
+	panel_->merge(obj);
+}
+
+void SimpleEditor::slotIconDropped(IconObject* obj)
+{	
+	merge(obj);	 
+}  
+
+
+static EditorMaker<SimpleEditor> editorMaker1("SimpleEditor");
+static EditorMaker<SimpleEditor> editorMaker2("RetrieveEditor");
+
diff --git a/src/Desktop/SimpleEditor.h b/src/Desktop/SimpleEditor.h
new file mode 100644
index 0000000..a296102
--- /dev/null
+++ b/src/Desktop/SimpleEditor.h
@@ -0,0 +1,66 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 SimpleEditor_H
+#define SimpleEditor_H
+
+#include "MvQEditor.h"
+
+#include "RequestPanel.h"
+#include "Language.h"
+
+class QScrollArea;
+
+class RequestPanel;
+class SimpleEditorObserver;
+ 
+class SimpleEditor : public MvQEditor 
+{
+	Q_OBJECT  
+public:
+
+	SimpleEditor(const IconClass&,const string&);
+	virtual ~SimpleEditor();
+
+	//Request currentRequest(long custom_expand=0);
+
+	virtual void replace(IconObjectH);
+	virtual void merge(IconObjectH);
+
+public slots:	
+	void slotIconDropped(IconObject*);
+
+
+protected: 	
+	void readSettings(QSettings&) {};
+	void writeSettings(QSettings&) {};
+  
+private:
+	SimpleEditor(const SimpleEditor&);
+	SimpleEditor& operator=(const SimpleEditor&);
+
+	virtual void apply();
+	virtual void reset();
+	virtual void close();
+	virtual void edit();
+
+	virtual IconObject* copy(const string&);
+	
+	RequestPanel *panel_;
+	QScrollArea* panelArea_;
+};
+
+inline void destroy(SimpleEditor**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(SimpleEditor);
+//#endif
+
+#endif
diff --git a/src/Desktop/StandardObject.cc b/src/Desktop/StandardObject.cc
new file mode 100644
index 0000000..2129ee7
--- /dev/null
+++ b/src/Desktop/StandardObject.cc
@@ -0,0 +1,316 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "StandardObject.h"
+
+#include "IconFactory.h"
+#include "Request.h"
+#include "Language.h"
+#include "IconClass.h"
+#include "IconInfo.h"
+#include "Dependancy.h"
+
+#include "mars.h"
+
+#include "Folder.h"
+
+#include "Tokenizer.h"
+
+//#include "Log.h"
+
+
+class StandardObjectDependancy : public Dependancy 
+{
+public:
+	StandardObjectDependancy(IconObject*,const string&,int);
+	~StandardObjectDependancy();
+
+	int n()                  { return n_;       }
+	const string& param()    { return param_;   }
+	const Request& request() { return request_; }
+	IconObjectH object() { return object_; }
+
+private:	
+	virtual Task* action(const Action&);
+	virtual void success(const Request&);
+	virtual void failure();
+	
+	IconObjectH object_;
+	string param_;
+	int n_;
+	Request request_;
+	bool ok_;
+};
+
+StandardObjectDependancy::StandardObjectDependancy(IconObject *o,const string& param,int n):
+	object_(o),
+	param_(param),
+	n_(n),
+	request_(""),
+	ok_(false)
+{
+}
+
+Task* StandardObjectDependancy::action(const Action& a)
+{
+	return object_->action(a);
+}
+
+void StandardObjectDependancy::success(const Request& r)
+{
+	ok_      = true;	
+	request_ = r;
+}
+
+void StandardObjectDependancy::failure()
+{
+	ok_      = false;
+}
+
+StandardObjectDependancy::~StandardObjectDependancy()
+{
+}
+
+
+
+
+
+StandardObject::StandardObject(Folder* parent,const IconClass& kind,
+	const string& name,IconInfo* info):
+	IconObject(parent,kind,name,info)
+{
+}
+
+StandardObject::~StandardObject()
+{
+}
+
+void StandardObject::doubleClick()
+{
+	edit();
+}
+
+set<string> StandardObject::can()
+{
+	return IconObject::can();
+}
+
+void StandardObject::createFiles()
+{
+	IconObject::createFiles();
+	Path p = path();
+	if(!p.exists())
+		p.saveText(className());
+}
+
+Request StandardObject::request() const
+{
+	Request r(path());
+	r.print();
+	return language().expand(r.justOneRequest());
+
+}
+
+void StandardObject::request(const Request& r)
+{
+	Request req = language().expand(r,EXPAND_NO_DEFAULT|EXPAND_2ND_NAME);
+	req.save(path());
+}
+
+
+void StandardObject::dependancies(set<DependancyH>& dep,const Request& r)
+{	
+	dep.clear();
+	
+	vector<string> icons = language().interfaces("icon");
+
+	for(vector<string>::iterator j = icons.begin() ; j != icons.end(); ++j)
+	{
+		int i = 0;
+		vector<IconObjectH> sub = subObjects(*j,r);
+
+		for(vector<IconObjectH>::iterator k = sub.begin(); k != sub.end(); ++k)
+			dep.insert(new StandardObjectDependancy(*k,*j,i++));
+	}	
+}
+
+const set<DependancyH>& StandardObject::dependancies()
+{
+	if(dependancies_.size())
+		return dependancies_;
+
+	dependancies_.clear();
+
+	Request r = request();
+
+	vector<string> icons = language().interfaces("icon");
+
+	for(vector<string>::iterator j = icons.begin() ; j != icons.end(); ++j)
+	{
+		int i = 0;
+		vector<IconObjectH> sub = subObjects(*j,r);
+
+		for(vector<IconObjectH>::iterator k = sub.begin(); k != sub.end(); ++k)
+			dependancies_.insert(new StandardObjectDependancy(*k,*j,i++));
+	}
+
+	return dependancies_;
+}
+
+
+Request StandardObject::fullRequest() const
+{
+	Request r = request();
+
+	typedef map<int,Request> Map1;
+	typedef map<string,Map1> Map2;
+
+	Map2 m;
+
+	for(set<DependancyH>::const_iterator k = dependancies_.begin(); k != dependancies_.end() ; ++k)
+	{
+		StandardObjectDependancy* b = dynamic_cast<StandardObjectDependancy*>((Dependancy*)*k);
+		const string& p  = b->param();
+		int n            = b->n();
+		const Request& r = b->request();
+
+		m[p][n] = r;
+	}
+
+	for(Map2::iterator j = m.begin(); j != m.end(); ++j)
+	{
+		const string& param = (*j).first;
+		const Map1&   reqs  = (*j).second;
+
+		::request* empty = 0;
+		MvRequest s(empty);
+
+		for(Map1::const_iterator i = reqs.begin(); i != reqs.end() ; ++i)
+			s = s + (*i).second;
+
+		r(param.c_str()) = s;
+		
+	}
+
+	cout << "---> StandardObject fullrequest" << endl;
+	r.print();
+	cout << "<--- StandardObject fullrequest" << endl;
+
+	return r;
+}
+
+bool StandardObject::rename(const string& newname)
+{
+	Request r = request();
+
+	cout << "StandardObject::rename" << endl;
+	r.print();
+
+	vector<string> icons = language().interfaces("icon");
+	map<string,vector<IconObjectH> > sub;
+
+	for(vector<string>::iterator j = icons.begin() ; j != icons.end(); ++j)
+		sub[*j] = subObjects(*j,r);
+
+	if(!IconObject::rename(newname))
+		return false;
+
+	for(vector<string>::iterator j = icons.begin() ; j != icons.end(); ++j)
+		setSubObjects(*j,sub[*j],r);
+
+	r.print();
+	request(r);
+	return true;
+}
+
+void StandardObject::duplicate()
+{
+	clone(parent(),false,info().x()+20,info().y()+20);
+}
+
+
+IconObject* StandardObject::clone(Folder *folder,bool update, int x, int y)
+{
+	StandardObject* other = dynamic_cast<StandardObject*>(IconObject::clone(folder,update,x,y));
+	if( !other )
+	  {
+	    //-- this branch is for finding out why 'other' may be 0!
+	    //-- i.e. use these lines to set breakpoint in debugger!!
+
+	    string s("MvUI/StandardObject::clone()");
+	    //Log::info(s) << "internal error: NULL ptr!" << endl;
+
+	    return 0;  //-- probably we should not do this...
+	  }
+
+	vector<string> icons = language().interfaces("icon");
+
+	Request r = other->request();
+	r.print();
+
+	Folder* e = this->embeddedFolder(true);
+	Folder* f = other->embeddedFolder(true);
+
+	map<string,vector<IconObjectH> > sub;
+
+	for(vector<string>::const_iterator j = icons.begin() ; j != icons.end(); ++j)
+	{
+		vector<IconObjectH> v = this->subObjects(*j,r);
+		vector<IconObjectH> vOther;
+		
+		for(vector<IconObjectH>::iterator k = v.begin() ; k != v.end(); ++k)
+		{
+		  	if(e->ancestor(*k))
+			{
+				string name = relativeName(*k);
+				Tokenizer parse("/");
+				vector<string> n;
+				parse(name,n);
+
+				cout << '[' << name << ']' << endl;
+				
+				IconObject *o = f;
+				for(int i = 1; i < static_cast<int>(n.size()) && o; i++)
+				{
+					cout << "SEARCH: " << n[i] << " in " << o->fullName() << endl;
+					o = o->find(n[i]);
+					if(o) cout << "FOUND: " << o->fullName() << endl;
+					else
+						cout << "NOTFOUND" << endl;
+
+				}
+
+				if(o) {
+					cout << "CLONE: " << (*k)->fullName() << endl;
+					vOther.push_back(o);
+					cout << "   IS: " << o->fullName() << endl;
+				}
+			}
+		}
+
+		sub[*j] = vOther;
+	}
+
+
+	for(vector<string>::const_iterator j = icons.begin() ; j != icons.end(); ++j)
+		other->setSubObjects(*j,sub[*j],r);
+
+	r.print();
+	
+	if(icons.size() > 0)
+		other->request(r);
+
+	return other;
+}
+
+static IconMaker<StandardObject> maker1("Data");
+static IconMaker<StandardObject> maker2("Window");
+static IconMaker<StandardObject> maker3("Visdef");
+static IconMaker<StandardObject> maker4("View");
+static IconMaker<StandardObject> maker5("Preference");
diff --git a/src/Desktop/StandardObject.h b/src/Desktop/StandardObject.h
new file mode 100644
index 0000000..6aa8a7c
--- /dev/null
+++ b/src/Desktop/StandardObject.h
@@ -0,0 +1,57 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 StandardObject_H
+#define StandardObject_H
+
+#include <string>
+
+#include "IconObject.h"
+
+class IconClass;
+
+using std::string;
+
+class StandardObject : public IconObject {
+public:
+	StandardObject(Folder* parent,
+		const IconClass& kind, const string& name,
+		IconInfo* info);
+		
+	virtual ~StandardObject();
+	void duplicate();
+	IconObject* clone(Folder*, bool update = false,int x=0, int y=0);
+	
+protected:
+	virtual Request request() const;
+	virtual const set<DependancyH>& dependancies();
+	virtual void dependancies(set<DependancyH>&,const Request&);
+	virtual Request fullRequest() const;
+
+private:
+
+	StandardObject(const StandardObject&);
+	StandardObject& operator=(const StandardObject&);
+
+	virtual void doubleClick();
+	virtual set<string> can();
+
+	virtual void createFiles();
+	virtual void request(const Request&);
+	virtual bool rename(const string&);
+};
+
+inline void destroy(StandardObject**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(StandardObject);
+//#endif
+
+#endif
diff --git a/src/Desktop/State.cc b/src/Desktop/State.cc
new file mode 100644
index 0000000..3451f19
--- /dev/null
+++ b/src/Desktop/State.cc
@@ -0,0 +1,62 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "State.h"
+#include "ConfigLoader.h"
+#include "IconClass.h"
+#include "Service.h"
+
+
+void State::load(request* r)
+{
+	// class
+	// action
+	// output_class
+
+	int nc = count_values(r,"class");        if(nc == 0) nc = 1;
+	int na = count_values(r,"action");       if(na == 0) na = 1;
+	int no = count_values(r,"output_class"); if(no == 0) no = 1;
+	int nm = count_values(r,"mode");         if(nm == 0) nm = 1;
+
+	const char* s = get_value(r,"service",0);
+	if(s == 0)
+		return;
+
+
+	Service* p = Service::find(s);
+	if(p == 0)
+	{
+		cout << "Cannot find service " << s << endl;
+		return;
+	}
+
+	for(int ic = 0 ; ic < nc ; ic++)
+	{
+		const char* c = get_value(r,"class",ic);
+		const IconClass& cc = IconClass::find(c?c:"*");
+
+		for(int ia = 0 ; ia < na ; ia++)
+		{
+			const char* a = get_value(r,"action",ia);
+
+			for(int im = 0 ; im < nm ; im++)
+			{
+				const char* m = get_value(r,"mode",im);
+				for(int io = 0 ; io < no ; io++)
+				{
+					const char* o = get_value(r,"output_class",io);
+					const IconClass* oc = o ? &IconClass::find(o) : 0;
+					cc.service(Action(a?a:"*",m?m:"*"),oc,p);
+				}
+			}
+		}
+	}
+}
+
+static SimpleLoader<State> loadClasses("state",2);
diff --git a/src/Desktop/State.h b/src/Desktop/State.h
new file mode 100644
index 0000000..4f6f0b8
--- /dev/null
+++ b/src/Desktop/State.h
@@ -0,0 +1,26 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File State.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef State_H
+#define State_H
+
+#include "Metview.h"
+
+class State  
+{
+public:
+
+	static void load(request*);
+
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/SystemFolder.cc b/src/Desktop/SystemFolder.cc
new file mode 100644
index 0000000..53ad7ba
--- /dev/null
+++ b/src/Desktop/SystemFolder.cc
@@ -0,0 +1,38 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "SystemFolder.h"
+#include "IconFactory.h"
+	
+SystemFolder::SystemFolder(Folder* parent,const IconClass& kind,
+		const string& name,IconInfo* info):
+	Folder(parent,kind,name,info)
+{
+}
+
+SystemFolder::~SystemFolder()
+{
+}
+
+set<string> SystemFolder::can()
+{
+	set<string> c = Folder::can();
+	c.erase("delete");
+	c.erase("duplicate");
+	c.erase("cut");
+	c.erase("destroy");
+	return c;
+}
+
+bool SystemFolder::renamable() const
+{
+	return false;
+}
+
+static IconMaker<SystemFolder> systemFactory("SYSTEM");
diff --git a/src/Desktop/SystemFolder.h b/src/Desktop/SystemFolder.h
new file mode 100644
index 0000000..0b301e1
--- /dev/null
+++ b/src/Desktop/SystemFolder.h
@@ -0,0 +1,43 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File SystemFolder.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef SystemFolder_H
+#define SystemFolder_H
+
+#include "Folder.h"
+
+class SystemFolder : public Folder 
+{
+public:
+  	SystemFolder(Folder* parent,const IconClass& kind,
+		const string& name,IconInfo* info);
+
+	virtual ~SystemFolder(); 
+
+protected:
+	set<string> can();
+
+private:
+	SystemFolder(const SystemFolder&);
+	SystemFolder& operator=(const SystemFolder&);
+
+	virtual bool renamable() const;
+};
+
+inline void destroy(SystemFolder**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(SystemFolder);
+//#endif
+
+#endif
diff --git a/src/Desktop/Task.cc b/src/Desktop/Task.cc
new file mode 100644
index 0000000..deafbb5
--- /dev/null
+++ b/src/Desktop/Task.cc
@@ -0,0 +1,46 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Task.h"
+#include "Queue.h"
+
+Task::Task():
+	stopped_(false)
+{
+}
+
+Task::~Task()
+{
+}
+
+void Task::add(TaskObserver* o)
+{
+	observers_.insert(o);
+}
+
+void Task::success(const Request& r)
+{
+	TaskH save = this; // Make sure we don't get deleted
+
+	for(set<TaskObserver*>::iterator j = observers_.begin() ; j !=   observers_.end() ; ++j)
+		(*j)->success(this,r);
+}
+
+void Task::failure()
+{
+	TaskH save = this; // Make sure we don't get deleted
+
+	for(set<TaskObserver*>::iterator j = observers_.begin() ; j !=   observers_.end() ; ++j)
+		(*j)->failure(this);
+}
+
+void Task::stop()
+{
+	stopped_ = true;
+}
diff --git a/src/Desktop/Task.h b/src/Desktop/Task.h
new file mode 100644
index 0000000..d7dc909
--- /dev/null
+++ b/src/Desktop/Task.h
@@ -0,0 +1,58 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File Task.h
+// Baudouin Raoult - ECMWF Aug 99
+
+#ifndef Task_H
+#define Task_H
+
+#include <set>
+
+#include "Counted.h"
+
+class Queue;
+class TaskObserver;
+class Request;
+
+class Task : public virtual Counted 
+{
+public:
+	Task();
+	virtual ~Task(); 
+
+	virtual void start() = 0;
+	virtual void stop();
+	void add(TaskObserver*);
+	void remove(TaskObserver*);
+	virtual void addContext (const Request&) = 0;
+
+protected:
+	void success(const Request&);
+	void failure();
+
+	virtual void print(ostream&) const = 0;	
+
+	bool stopped_;
+	
+private:
+	// No copy allowed
+	Task(const Task&);
+	Task& operator=(const Task&);
+
+	std::set<TaskObserver*> observers_;
+	
+	friend ostream& operator<<(ostream& s,const Task& p)
+		{ p.print(s); return s; }
+	friend class Queue;
+};
+
+typedef Handle<Task> TaskH;
+
+#endif
diff --git a/src/Desktop/TaskObserver.h b/src/Desktop/TaskObserver.h
new file mode 100644
index 0000000..c670d2f
--- /dev/null
+++ b/src/Desktop/TaskObserver.h
@@ -0,0 +1,27 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File TaskObserver.h
+// Baudouin Raoult - ECMWF Aug 99
+
+#ifndef TaskObserver_H
+#define TaskObserver_H
+
+class Request;
+class Task;
+
+class TaskObserver {
+public:
+
+	virtual void success(Task*,const Request&) = 0;
+	virtual void failure(Task*) = 0;
+
+};
+
+#endif
diff --git a/src/Desktop/TeeBuffer.cc b/src/Desktop/TeeBuffer.cc
new file mode 100644
index 0000000..ba20914
--- /dev/null
+++ b/src/Desktop/TeeBuffer.cc
@@ -0,0 +1,62 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "TeeBuffer.h"
+
+#include <stdio.h>
+
+TeeBuffer::TeeBuffer(ostream& one,ostream& two):
+    streambuf(),
+	one_(one),
+	two_(two)
+{
+    setp(buffer_, buffer_ + sizeof(buffer_));
+    setg(0, 0, 0);
+}
+
+TeeBuffer::~TeeBuffer()
+{
+    dumpBuffer();
+}
+
+int TeeBuffer::overflow(int c)
+{
+    if (c == EOF) {
+        sync();
+        return 0;
+    }
+
+    dumpBuffer();
+    sputc(c);
+    return 0;
+}
+
+int TeeBuffer::sync()
+{
+    dumpBuffer();
+    return 0;
+}
+
+void TeeBuffer::dumpBuffer()
+{
+
+	for(const char* p = pbase();  p != epptr(); ++p)
+	{
+		one_ << *p;
+		two_ << *p;
+		if(*p == '\n') 
+			break;
+	}
+
+    setp(pbase(), epptr());
+
+	one_ << flush;
+	two_ << flush;
+}
+
diff --git a/src/Desktop/TeeBuffer.h b/src/Desktop/TeeBuffer.h
new file mode 100644
index 0000000..0949427
--- /dev/null
+++ b/src/Desktop/TeeBuffer.h
@@ -0,0 +1,47 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 TeeBuffer_H
+#define TeeBuffer_H
+
+#include <iostream>
+#include <streambuf>
+
+using namespace std;
+
+class TeeBuffer : public streambuf 
+{
+public:
+	TeeBuffer(ostream&,ostream&);
+	~TeeBuffer();
+
+protected:
+	int   overflow(int);
+	int   sync();
+
+private:
+	// No copy allowed
+	TeeBuffer(const TeeBuffer&);
+	TeeBuffer& operator=(const TeeBuffer&);
+
+	char buffer_[1024];
+	ostream& one_;
+	ostream& two_;
+
+	void dumpBuffer(void);
+};
+
+inline void destroy(TeeBuffer**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(TeeBuffer);
+//#endif
+
+#endif
diff --git a/src/Desktop/TeeStream.cc b/src/Desktop/TeeStream.cc
new file mode 100644
index 0000000..4f65a39
--- /dev/null
+++ b/src/Desktop/TeeStream.cc
@@ -0,0 +1,22 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "TeeStream.h"
+#include "TeeBuffer.h"
+
+TeeStream::TeeStream(ostream& one,ostream& two):
+    ostream(new TeeBuffer(one,two))
+{
+}
+
+TeeStream::~TeeStream()
+{
+    delete (TeeBuffer*)rdbuf();
+}
+
diff --git a/src/Desktop/TeeStream.h b/src/Desktop/TeeStream.h
new file mode 100644
index 0000000..4464aba
--- /dev/null
+++ b/src/Desktop/TeeStream.h
@@ -0,0 +1,36 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 TeeStream_H
+#define TeeStream_H
+
+#include <iostream>
+
+using namespace std;
+
+class TeeStream : public ostream 
+{
+public:
+	TeeStream(ostream&,ostream&);
+	~TeeStream(); 
+
+private:
+	// No copy allowed
+	TeeStream(const TeeStream&);
+	TeeStream& operator=(const TeeStream&);
+};
+
+inline void destroy(TeeStream**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(TeeStream);
+//#endif
+
+#endif
diff --git a/src/Desktop/TemporaryEditor.cc b/src/Desktop/TemporaryEditor.cc
new file mode 100644
index 0000000..b815d91
--- /dev/null
+++ b/src/Desktop/TemporaryEditor.cc
@@ -0,0 +1,91 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "TemporaryEditor.h"
+
+#include <QHBoxLayout>
+#include <QPainter>
+#include <QScrollArea>
+
+#include "EditorFactory.h"
+#include "IconObject.h"
+//#include "Log.h"
+
+#include "IconClass.h"
+#include "IconFactory.h"
+#include "RequestPanel.h"
+
+#include "MvQRequestPanelWidget.h"
+
+TemporaryEditor::TemporaryEditor(const IconClass& kind,const string& name):
+	MvQTemporaryEditor(kind,name)
+{
+ 	//Panel	
+	panelArea_=new QScrollArea(this);
+	panelArea_->setWidgetResizable(true);
+	
+	centralLayout_->addWidget(panelArea_);
+	
+	vector<string> classes;
+	classes.push_back(kind.name());
+	
+	MvQRequestPanelWidget *w=new MvQRequestPanelWidget(classes,this);
+	panel_=new RequestPanel(kind,w,this);
+	
+	panelArea_->setWidget(w);
+}
+
+TemporaryEditor::~TemporaryEditor()
+{
+	delete panel_;   
+}
+
+
+IconObject* TemporaryEditor::copy(const string& name)
+{
+	//IconObject* o = IconFactory::create(name, class_);
+	//panel_.apply();
+	//o->request(panel_.request());
+	//return o;
+	return 0;
+}
+
+void TemporaryEditor::edit()
+{  
+	if(!current_)
+	  	return;
+  
+	MvQTemporaryEditor::edit();
+}
+
+
+void TemporaryEditor::apply()
+{
+	panel_->apply();
+	current_->request(panel_->request());	
+}
+
+void TemporaryEditor::reset()
+{
+	panel_->reset(current_);
+}
+
+void TemporaryEditor::close()
+{
+	panel_->close();
+}
+
+//Request TemporaryEditor::currentRequest(long custom_expand)
+//{
+	//panel_.apply();
+	//return custom_expand ? panel_.request(custom_expand) : panel_.request();
+//}
+
+static EditorMaker<TemporaryEditor> editorMaker1("TemporaryEditor");
+
diff --git a/src/Desktop/TemporaryEditor.h b/src/Desktop/TemporaryEditor.h
new file mode 100644
index 0000000..a4975c8
--- /dev/null
+++ b/src/Desktop/TemporaryEditor.h
@@ -0,0 +1,45 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 TemporaryEditor_H
+#define TemporaryEditor_H
+
+#include "MvQTemporaryEditor.h"
+
+#include "RequestPanel.h"
+#include "Language.h"
+
+class QScrollArea;
+class RequestPanel;
+
+class TemporaryEditor : public MvQTemporaryEditor 
+{
+public:
+
+	TemporaryEditor(const IconClass&,const string&);
+	virtual ~TemporaryEditor();
+
+private:
+	TemporaryEditor(const TemporaryEditor&);
+	TemporaryEditor& operator=(const TemporaryEditor&);
+
+	virtual void apply();
+	virtual void reset();
+	virtual void close();
+	virtual void edit();
+
+	virtual IconObject* copy(const string&);
+	
+	RequestPanel *panel_;
+	QScrollArea* panelArea_;
+};
+
+inline void destroy(TemporaryEditor**) {}
+
+#endif
diff --git a/src/Desktop/TemporaryObject.cc b/src/Desktop/TemporaryObject.cc
new file mode 100644
index 0000000..34d1683
--- /dev/null
+++ b/src/Desktop/TemporaryObject.cc
@@ -0,0 +1,135 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "TemporaryObject.h"
+
+#include "IconFactory.h"
+#include "Request.h"
+#include "Language.h"
+#include "IconClass.h"
+#include "Dependancy.h"
+
+#include "mars.h"
+
+static string next_name()
+{
+	static int i = 0;
+	char buf[80];
+	sprintf(buf,"Temp%04d",i++);
+	return buf;
+}
+
+TemporaryObject::TemporaryObject(IconObject* ref,const Request& r,const IconClass* c):
+	IconObject(0,c ? *c : IconClass::find(r.getVerb()),next_name(),0),
+	ref_(ref), request_(r)
+{
+  	cout << "-->  TemporaryObject::TemporaryObject() for" << *ref_ << endl;
+	r.print();
+	cout << "<--  TemporaryObject::TemporaryObject() for" << *ref_ << endl;
+}
+
+TemporaryObject::~TemporaryObject()
+{
+	cout << "TemporaryObject::~TemporaryObject() for " << *ref_ << endl;
+}
+
+Folder* TemporaryObject::parent() const
+{
+	return ref_->parent();
+}
+
+void TemporaryObject::createFiles()
+{
+}
+
+Request TemporaryObject::request() const
+{
+	request_.print();
+	return language().expand(request_,EXPAND_NO_DEFAULT|EXPAND_2ND_NAME);
+}
+
+void TemporaryObject::request(const Request& r)
+{
+	request_ = r;
+}
+
+Path TemporaryObject::pathForShellTask() const
+{
+    const char* path = request_("PATH");
+    if ( path ) {
+        const char* path = request_("PATH");
+        return string(path);
+
+    }
+	return string("/dev/null");
+}
+
+Path TemporaryObject::path() const
+{
+	return string("/dev/null");
+}
+
+
+Path TemporaryObject::dotPath() const
+{
+	return string("/dev/null");
+}
+
+Path TemporaryObject::embeddedPath() const
+{
+	return string("/dev/null");
+}
+
+string TemporaryObject::fullName() const
+{
+	return ref_->fullName() + "/" + name();
+}
+string TemporaryObject::relativeName(IconObject* other) const
+{
+	return ref_->relativeName(other);
+}
+
+string TemporaryObject::makeFullName(const string& name) const
+{
+	return ref_->makeFullName(name);
+}
+
+Folder* TemporaryObject::embeddedFolder(const string& n,bool create) const
+{
+	return ref_->embeddedFolder(n,create);
+}
+
+Folder* TemporaryObject::embeddedFolder(bool create) const
+{
+	return ref_->embeddedFolder(create);
+}
+
+#if 0
+Log& TemporaryObject::log()
+{
+	return ref_->log();
+}
+#endif
+
+bool TemporaryObject::rename(const string& s)
+{
+	name_ = s;
+	return true;
+}
+
+bool TemporaryObject::renamable() const
+{
+	return true;
+}
+
+bool TemporaryObject::temporary() const
+{
+	return true;
+}
+
diff --git a/src/Desktop/TemporaryObject.h b/src/Desktop/TemporaryObject.h
new file mode 100644
index 0000000..ef3e992
--- /dev/null
+++ b/src/Desktop/TemporaryObject.h
@@ -0,0 +1,68 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 TemporaryObject_H
+#define TemporaryObject_H
+
+#include "IconObject.h"
+#include "Request.h"
+
+#include <string>
+using std::string;
+
+class TemporaryObject : public IconObject {
+public:
+
+	TemporaryObject(IconObject*,const Request&,const IconClass* = 0);
+	virtual ~TemporaryObject(); 
+	
+protected:
+	TemporaryObject(const TemporaryObject&);
+	TemporaryObject& operator=(const TemporaryObject&);
+
+	virtual void createFiles();
+	//virtual Log& log();
+	virtual Request request() const;
+	virtual void request(const Request&);
+	virtual string fullName() const;
+	virtual Path   path()     const;
+	// Different implementation of the path() if used by a 
+	// ShellTask.
+	// For TemporaryObject Objects, it will return the PATH of the attached request, (if it exists)
+	// This is done to enable the visualisation of the MAGML Objects 
+	// without possible side effects! 
+	virtual Path   pathForShellTask() const;
+	virtual Path   dotPath()  const;
+	virtual Folder* parent()  const;
+
+	virtual bool rename(const string&);
+	virtual bool renamable() const;
+	virtual bool temporary() const; 
+	
+	virtual Folder* embeddedFolder(const string& n,bool) const;
+	virtual Path    embeddedPath()  const;
+	virtual Folder* embeddedFolder(bool) const;
+	
+	virtual string relativeName(IconObject*) const;
+	virtual string makeFullName(const string&) const;
+
+private:
+	IconObjectH ref_;
+	Request     request_;
+
+};
+
+inline void destroy(TemporaryObject**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(TemporaryObject);
+//#endif
+
+#endif
diff --git a/src/Desktop/Tools.cc b/src/Desktop/Tools.cc
new file mode 100644
index 0000000..9960dc8
--- /dev/null
+++ b/src/Desktop/Tools.cc
@@ -0,0 +1,58 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Tools.h"
+#include "ConfigLoader.h"
+#include "Request.h"
+
+#include <QAction>
+
+static vector<Tools*> tools;
+
+Tools::Tools(request* r) :
+	request_(r)
+{
+}
+
+Tools::~Tools()
+{
+}
+
+void Tools::make(QList<QAction*> &lst,QObject* parent)
+{
+	for (vector<Tools*>::iterator j = tools.begin(); j != tools.end(); ++j ) 
+	{
+		QAction *ac=new QAction(parent);
+		const char* text=get_value((*j)->request_, "name", 0);
+		ac->setText(text);
+		lst << ac;
+		
+		connect(ac,SIGNAL(triggered()),
+			*j,SLOT(start()));
+	}
+
+}
+
+
+void Tools::start()
+{
+	cout << "Tools::start " << get_value(request_, "service", 0) << endl;
+	Request r(get_value(request_, "action", 0));
+
+	MvApplication::callService(get_value(request_, "service", 0), r, 0);
+}
+
+
+void Tools::load(request* r)
+{
+	tools.push_back(new Tools(r));
+}
+
+
+static SimpleLoader<Tools> loadClasses("desktop_tool",1);
diff --git a/src/Desktop/Tools.h b/src/Desktop/Tools.h
new file mode 100644
index 0000000..ad92ab6
--- /dev/null
+++ b/src/Desktop/Tools.h
@@ -0,0 +1,44 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 Tools_H
+#define Tools_H
+
+#include "Metview.h"
+
+#include <QList>
+#include <QObject>
+
+class QAction;
+
+class Tools : public QObject 
+{  
+Q_OBJECT 
+
+public:
+	Tools(request*);
+	~Tools();
+	
+	static void make(QList<QAction*>&,QObject*);
+	static void load(request*);
+	
+public slots:
+	void start();	
+	
+private:
+	// No copy allowed
+	Tools(const Tools&);
+	Tools& operator=(const Tools&);
+	
+	request*    request_;
+};
+
+inline void destroy(Tools**) {}
+
+#endif
diff --git a/src/Desktop/Transaction.cc b/src/Desktop/Transaction.cc
new file mode 100644
index 0000000..2ab4493
--- /dev/null
+++ b/src/Desktop/Transaction.cc
@@ -0,0 +1,33 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Metview.h"
+#include "Transaction.h"
+#include "TaskObserver.h"
+#include "Action.h"
+#include "IconObject.h"
+#include "Request.h"
+#include "Task.h"
+#include "Folder.h"
+#include "IconFactory.h"
+#include "EditorObserver.h"
+#include "Editor.h"
+
+Transaction::Transaction(const char* t) : MvTransaction(t)
+{
+}
+Transaction::Transaction(MvTransaction* t) : MvTransaction(t)
+{
+}
+
+Transaction::~Transaction()
+{
+}
+
+
diff --git a/src/Desktop/Transaction.h b/src/Desktop/Transaction.h
new file mode 100644
index 0000000..f0698fe
--- /dev/null
+++ b/src/Desktop/Transaction.h
@@ -0,0 +1,42 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File Transaction.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef Transaction_H
+#define Transaction_H
+
+#include "Metview.h"
+
+class Transaction : public MvTransaction 
+{
+public:
+	Transaction(const char*);
+	Transaction(MvTransaction*);
+	~Transaction(); 
+
+	virtual MvTransaction *cloneSelf() = 0;
+	virtual void callback(MvRequest&)  = 0;
+
+private:
+	// No copy allowed
+	Transaction(const Transaction&);
+	Transaction& operator=(const Transaction&);
+
+};
+
+inline void destroy(Transaction**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(Transaction);
+//#endif
+
+#endif
diff --git a/src/Desktop/ViewEditor.cc b/src/Desktop/ViewEditor.cc
new file mode 100644
index 0000000..323c25a
--- /dev/null
+++ b/src/Desktop/ViewEditor.cc
@@ -0,0 +1,1264 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "ViewEditor.h"
+
+#include <QAction>
+#include <QComboBox>
+#include <QDialogButtonBox>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QMouseEvent>
+#include <QPushButton>
+#include <QSplitter>
+#include <QToolBar>
+#include <QToolButton>
+#include <QUndoStack>
+#include <QUndoView>
+
+#include "EditorFactory.h"
+#include "SimpleEditor.h"
+#include "IconObject.h"
+#include "IconClass.h"
+#include "IconFactory.h"
+#include "Language.h"
+//#include "Log.h"
+//#include "PageView.h"
+//#include "Dropping.h"
+//#include "EditorButton.h"
+#include "Folder.h"
+
+#include "MvQPageView.h"
+
+vector<PaperSize*> PaperSizeHandler::std_;
+
+
+//==============================================
+//
+// ViewEditor
+//
+//==============================================
+
+
+ViewEditor::ViewEditor(const IconClass& name,const string& kind):
+	MvQEditor(name,kind)
+{  
+	paper_=new PaperSizeHandler;
+        snap_=new GridSnapHandler;
+		
+	undoStack_=new QUndoStack(this);
+	
+	//-----------------------
+	// Toolbar
+	//-----------------------
+	
+	QList<QToolButton*> tbLst;
+	
+	//redo
+	QAction *redoAc = undoStack_->createRedoAction(this, tr("&Redo"));
+    	redoAc->setShortcuts(QKeySequence::Redo);     
+     	redoAc->setIcon(QPixmap(":/desktop/redo.svg"));     	
+	
+	//undo
+	QAction *undoAc = undoStack_->createUndoAction(this, tr("&Undo"));
+    	undoAc->setShortcuts(QKeySequence::Undo);     
+     	undoAc->setIcon(QPixmap(":/desktop/undo.svg"));     	
+
+	//Duplicate
+	QAction *duplicateAc=new QAction(this);
+	duplicateAc->setToolTip(tr("Duplicate selected frames"));
+	duplicateAc->setIcon(QPixmap(":/desktop/duplicate.svg")); 
+	
+	connect(duplicateAc,SIGNAL(triggered(bool)),
+		this,SLOT(slotDuplicateSelection(bool)));
+		
+	//page setup
+	QAction *pageAc=new QAction(this);
+	pageAc->setToolTip(tr("Page setup"));
+	pageAc->setIcon(QPixmap(":/desktop/page_setup.svg")); 
+
+	connect(pageAc,SIGNAL(triggered(bool)),
+		this,SLOT(slotSetupPage(bool)));
+			
+	snapAc_=new QAction(this);
+	snapAc_->setToolTip(tr("Snap to grid"));
+	snapAc_->setCheckable(true);
+	snapAc_->setChecked(true);
+	snapAc_->setIcon(QPixmap(":/desktop/snap_to_grid.svg"));     
+	
+	connect(snapAc_,SIGNAL(toggled(bool)),
+		this,SLOT(slotSnap(bool)));	
+		
+	gridAc_=new  QAction(this);
+	gridAc_->setToolTip(tr("View grid"));
+	gridAc_->setCheckable(true);
+	gridAc_->setChecked(true);	
+	gridAc_->setIcon(QPixmap(":/desktop/view_grid.svg"));
+	
+	connect(gridAc_,SIGNAL(toggled(bool)),
+		this,SLOT(slotGrid(bool)));		
+
+	QAction *selectAllAc=new QAction(this);
+	selectAllAc->setToolTip(tr("Select all frames"));
+	selectAllAc->setIcon(QPixmap(":/desktop/page_select_all.svg"));	
+		
+	connect(selectAllAc,SIGNAL(triggered(bool)),
+		this,SLOT(slotSelectAll(bool)));	
+		
+	QAction *sep=new QAction(this);	
+	sep->setSeparator(true);
+	
+	QAction *sep1=new QAction(this);	
+	sep1->setSeparator(true);	
+	
+	QList<QAction*> acLst;
+	acLst << pageAc << sep << undoAc  << redoAc << duplicateAc << selectAllAc << sep1 << snapAc_ << gridAc_ ;	
+	addToToolBar(acLst);
+		
+	//--------------------------------------
+	// Define view layout in the middle
+	//--------------------------------------	
+				
+	QHBoxLayout *viewLayout=new QHBoxLayout();
+	centralLayout_->addLayout(viewLayout);	
+	
+	//-----------------------
+	// Sidebar on the right	
+	//-----------------------
+	
+	//Sidebar on the right	
+	QVBoxLayout* rightVb=new QVBoxLayout;
+	rightVb->setSpacing(0); 
+	rightVb->setContentsMargins(1,1,1,1);	
+	viewLayout->addLayout(rightVb);
+	
+	QToolBar* sidebar_=new QToolBar(this);
+	sidebar_->setIconSize(QSize(24,24));
+	sidebar_->setOrientation(Qt::Vertical);
+	rightVb->addWidget(sidebar_);	
+	
+	QAction *addAc=new QAction(this);
+	addAc->setToolTip(tr("Add new frame"));
+	addAc->setIcon(QPixmap(":/desktop/page_add.svg"));
+	
+	QAction *joinAc=new QAction(this);
+	joinAc->setToolTip(tr("Join selected frames"));
+	joinAc->setIcon(QPixmap(":/desktop/page_join.svg"));
+	
+	QAction *splitAc=new QAction(this);
+	splitAc->setToolTip(tr("Split selected frames"));
+	splitAc->setIcon(QPixmap(":/desktop/page_split.svg"));
+	
+	QAction *deleteAc=new QAction(this);
+	deleteAc->setToolTip(tr("Delete selected frames"));
+	deleteAc->setIcon(QPixmap(":/desktop/page_delete.svg"));
+	
+	QAction *expandAc=new QAction(this);
+	expandAc->setToolTip(tr("Expand selected frames"));
+	expandAc->setIcon(QPixmap(":/desktop/page_expand.svg"));
+	
+	QAction *connectAc=new QAction(this);
+	connectAc->setToolTip(tr("Connect selected frames"));	
+	connectAc->setIcon(QPixmap(":/desktop/page_connect.svg"));
+		
+	QAction *disconnectAc=new QAction(this);
+	disconnectAc->setToolTip(tr("Disonnect selected frames"));
+	disconnectAc->setIcon(QPixmap(":/desktop/page_disconnect.svg"));
+		
+	connect(addAc,SIGNAL(triggered(bool)),
+		this,SLOT(slotAddPage(bool)));
+		
+	connect(joinAc,SIGNAL(triggered(bool)),
+		this,SLOT(slotJoinSelection(bool)));
+		
+	connect(deleteAc,SIGNAL(triggered(bool)),
+		this,SLOT(slotDeleteSelection(bool)));
+	
+	connect(splitAc,SIGNAL(triggered(bool)),
+		this,SLOT(slotSplitSelection(bool)));
+		
+	connect(expandAc,SIGNAL(triggered(bool)),
+		this,SLOT(slotExpandSelection(bool)));
+				
+	connect(connectAc,SIGNAL(triggered(bool)),
+		this,SLOT(slotConnectSelection(bool)));
+		
+	connect(disconnectAc,SIGNAL(triggered(bool)),
+		this,SLOT(slotDisconnectSelection(bool)));
+		
+	connect(selectAllAc,SIGNAL(triggered(bool)),
+		this,SLOT(slotSelectAll(bool)));		
+	
+	sidebar_->addAction(addAc);
+	sidebar_->addAction(deleteAc);
+	sidebar_->addAction(joinAc);
+	sidebar_->addAction(splitAc);
+	sidebar_->addAction(expandAc);
+	sidebar_->addSeparator();
+	sidebar_->addAction(connectAc);
+	sidebar_->addAction(disconnectAc);
+			
+	//--------------------
+	// View
+	//--------------------
+	
+	Language& lang=IconClass::find("PLOT_PAGE").language();
+	Request interface=lang.interfaceRequest("VIEW");
+	const vector<string>& classes=interface.get("class");
+	
+	view_=new MvQPageView(classes,undoStack_,this);
+	viewLayout->addWidget(view_,1);
+	
+	connect(view_,SIGNAL(changed()),
+		this,SLOT(slotViewChanged()));
+		
+	connect(view_,SIGNAL(selectionChanged(int)),
+		this,SLOT(updateButtonStatus(int)));
+		
+	updateButtonStatus(0);
+
+}
+
+ViewEditor::~ViewEditor()
+{
+}
+
+void ViewEditor::apply()
+{
+	savePaperSize(request_);
+	savePages(current_,request_);
+	current_->request(request_);
+}
+
+void ViewEditor::reset()
+{
+	//cache_.clear();
+	//save_.clear();
+	request_ = current_->request();
+	request_.print();
+	
+	view_->clear();
+	loadPaperSize(request_);
+	loadPages(current_,request_);
+	
+	//PaperSetPages(paper_,loadPages(current_,request_));
+	//updateDrawers();
+	//PaperSelectFirst(paper_);
+}
+
+void ViewEditor::close()
+{
+	view_->clear();
+	//save_.clear();
+}
+
+void ViewEditor::merge(IconObjectH /*o*/)
+{
+}
+
+void ViewEditor::replace(IconObjectH /*o*/)
+{
+}
+
+
+
+void ViewEditor::loadPaperSize(const Request& r)
+{	
+  	paper_->set(r);
+  
+	double w=paper_->width();
+	double h=paper_->height();
+	
+	setPaperSize(h,w);
+
+	cout << "h = " << h << " w = " << w << endl;
+	
+/*	
+  cout << "paperSize " << endl;
+	r.print();
+
+	// Set paper size...
+	double w = r("CUSTOM_HEIGHT");
+	double h = r("CUSTOM_WIDTH");
+
+	const char* size  = r("LAYOUT_SIZE");
+	const char* orien = r("LAYOUT_ORIENTATION");
+
+	if(size && orien)
+	{  	
+		for(int i = 0; i < static_cast<int>(paperSizes_.size()) ; i++)
+		{
+			if(paperSizes_[i].name() == string(size))
+			{
+				if(strcmp(orien,"PORTRAIT") == 0)
+				{
+					h = paperSizes_[i].height();
+					w = paperSizes_[i].width();
+					break;
+				}
+				else
+				{
+					w = paperSizes_[i].height();
+					h = paperSizes_[i].width();
+					break;
+				}	
+			}
+		}	
+	}
+
+	paperSizeReq_("LAYOUT_SIZE")=size;
+	paperSizeReq_("LAYOUT_SIZE")=orien;
+	paperSizeReq_("CUSTOM_HEIGHT")=h;
+	paperSizeReq_("CUSTOM_WIDTH")=w;
+	
+	setPaperSize(h,w);
+
+	cout << "h = " << h << " w = " << w << endl;
+	*/
+}
+
+void ViewEditor::savePaperSize(Request& r)
+{
+	/*double h,w;
+	getPaperSize(h,w);
+
+	r("LAYOUT_SIZE")   = "CUSTOM";
+	r("CUSTOM_WIDTH")  = h;
+	r("CUSTOM_HEIGHT") = w;
+		
+	for(int i = 0; i < static_cast<int>(paperSizes_.size()) ; i++)
+	{
+		if(h == paperSizes_[i].height() && w == paperSizes_[i].width())
+		{
+			r("LAYOUT_SIZE") = paperSizes_[i].name().c_str();	
+			r("LAYOUT_ORIENTATION") = "PORTRAIT";
+			r.unsetParam("CUSTOM_WIDTH");
+			r.unsetParam("CUSTOM_HEIGHT");
+		}
+		if(w == paperSizes_[i].height() && h == paperSizes_[i].width())
+		{
+			r("LAYOUT_SIZE") = paperSizes_[i].name().c_str();	
+			r("LAYOUT_ORIENTATION") = "LANDSCAPE";
+			r.unsetParam("CUSTOM_WIDTH");
+			r.unsetParam("CUSTOM_HEIGHT");
+		}
+	}*/
+}	
+
+#if 0
+PageView* ViewEditor::pageView(IconObject* o)
+{
+	map<IconObjectH,PageViewH>::iterator j = cache_.find(o);
+	if(j == cache_.end())
+		cache_[o] = new PageView(o);
+	return cache_[o];
+}
+#endif
+
+void ViewEditor::loadPages(IconObject* o,const Request& r)
+{	
+	//Clear the view
+    
+  	vector<IconObjectH> sub = o->subObjects("PAGES", r );
+
+	for(vector<IconObjectH>::iterator itPage = sub.begin(); itPage != sub.end(); ++itPage)
+	{
+	    	MvRequest pageReq = (*itPage)->request();
+	    
+	    	pageReq.print();
+	    
+		double top    = pageReq("TOP");
+		double left   = pageReq("LEFT");
+		double right  = pageReq("RIGHT");
+		double bottom = pageReq("BOTTOM");
+		MvQPageItem *pageItem=view_->addPage(left,top,right-left,bottom-top); 
+	
+	    	vector<IconObjectH> viewVec = (*itPage)->subObjects("VIEW",pageReq);
+	    
+	    	IconObject* viewObj = viewVec.size() ? static_cast<IconObject*>(viewVec[0]) : defaultView();
+	    	pageItem->setViewIcon(viewObj);
+		
+		loadSubPages(pageItem,*itPage,pageReq);
+	  }
+}
+
+void ViewEditor::loadSubPages(MvQPageItem* p,IconObject* o,const Request& r)
+{
+	// Old style
+
+	/*int rows = r("ROWS");
+	int cols = r("COLUMNS");
+
+	if(rows * cols > 1)
+	{
+		double height = 1.0 / rows;pageItem
+		double width  = 1.0 / cols;
+		double x = 0;
+
+		for(int i = 0; i < cols; i++) 
+		{
+			double y = 0;
+			for(int j = 0; j < rows; j++)
+			{
+				PaperRectangle* s = PaperNewPage(
+					paper_,
+					y, 
+					x, 
+					(j == rows - 1) ? 1.0 : y + height, 
+					(i == cols - 1) ? 1.0 : x + width
+					);
+
+				s->next = pages;
+				pages = s;
+				y += height;
+			}
+			x +=  width;
+		}
+	}*/
+
+	// New Style
+	vector<IconObjectH> sub = o->subObjects("SUB_PAGES", r );
+	for(vector<IconObjectH>::iterator ii = sub.begin(); ii != sub.end(); ++ii)
+	{
+	    	MvRequest subR = (*ii)->request();
+		
+		subR.print();
+		
+		double top    = subR("TOP");
+		double left   = subR("LEFT");
+		double right  = subR("RIGHT");
+		double bottom = subR("BOTTOM");
+		
+		p->addSubPaperRectInPageCoords(left,top,right-left,bottom-top);		
+	}
+}
+
+
+void ViewEditor::savePages(IconObject* o,Request& r)
+{
+	r.print();
+	
+  	FolderH pageFolder = o->embeddedFolder("Pages",true);
+
+	// Clean up old stuff
+	pageFolder->destroy();
+	pageFolder = o->embeddedFolder("Pages",true);
+
+	vector<IconObjectH> pages;
+
+	foreach(MvQPageItem* p,view_->pages()) 
+	{
+		Request pageReq("PLOT_PAGE"); 
+		
+		saveRectToRequest(p->paperRect(),pageReq);
+		
+		pageReq.print();
+		
+		IconObjectH page      = IconFactory::create(pageFolder,pageReq);
+		FolderH subPageFolder = page->embeddedFolder("Sub Pages",true);
+		pages.push_back(page);
+		
+		vector<IconObjectH> subpages;
+		
+		foreach(QRectF subRect,p->subPaperRects())
+		{
+		  	Request subReq("PLOT_SUBPAGE");
+			saveRectToRequest(subRect,subReq);
+			subReq.print();
+			subpages.push_back(IconFactory::create(subPageFolder,subReq));
+		}
+		
+		page->setSubObjects("SUB_PAGES",subpages,pageReq);
+		
+		IconObjectH view = p->viewIcon();
+		if(view) 
+		     	page->setSubObjects("VIEW",vector<IconObjectH>(1,view),pageReq);	
+		
+		page->request(pageReq);
+	}
+	
+	r.print();
+	
+	current_->setSubObjects("PAGES",pages,r);
+	current_->request(r);
+}	
+		
+void ViewEditor::saveRectToRequest(QRectF rect,Request& r)
+{
+	double top=rect.y();
+	double left=rect.x() ;
+	double bottom=rect.bottomLeft().y(); 
+	double right=rect.topRight().x() ;	
+	
+  	r("TOP")    = top ;
+	r("LEFT")   = left ;
+	r("BOTTOM") = bottom; 
+	r("RIGHT")  = right ;
+}
+	
+IconObject *ViewEditor::defaultView()
+{
+	return IconClass::find("GEOVIEW").defaultObject();
+}
+
+//-----------------------------------------------------------
+
+void ViewEditor::updateButtonStatus(int selected)
+{
+ 	return;
+	
+	/*if(selected ==0)
+	{
+	  	joinAc->setEnabled(false);
+		splitAc->setEnabled(false);
+  		deleteAc->setEnabled(false);
+		expandAc->setEnabled(false);
+	}
+	
+	else
+	{
+		splitAc->setEnabled(true);
+  		deleteAc->setEnabled(true);
+		expandAc->setEnabled(true);
+		
+		if(selected > 1)
+		  	joinAc->setEnabled(true);
+		else
+		  	joinAc->setEnabled(false);
+	}*/		
+}	
+
+
+void ViewEditor::setPaperSize(double height,double width)
+{
+	view_->setSuperPage(width,height,snapAc_->isChecked(),snap_->x(),snap_->y(),gridAc_->isChecked());
+}
+
+string ViewEditor::alternateEditor()
+{
+	return "SimpleEditor";
+}
+
+void ViewEditor::slotSnap(bool on)
+{
+	view_->enableSnap(on);
+}
+
+void ViewEditor::slotGrid(bool on)
+{
+  	view_->enableGrid(on);
+}	
+
+void ViewEditor::slotAddPage(bool)
+{
+	MvQPageItem *pageItem=view_->addPage(0,0,25,25); 
+	pageItem->setViewIcon(defaultView());
+	changed();
+}
+
+void ViewEditor::slotDuplicateSelection(bool)
+{
+	view_->duplicateSelection(); 
+	changed();
+}
+
+void ViewEditor::slotDeleteSelection(bool)
+{
+	view_->deleteSelection(); 
+	changed();
+}
+
+void ViewEditor::slotJoinSelection(bool)
+{
+	view_->joinSelection(); 
+	changed();
+}
+
+void ViewEditor::slotSplitSelection(bool)
+{
+	MvQSplitDialog dialog(this);
+	if(dialog.exec() == QDialog::Accepted)
+	{
+	  	view_->splitSelection(dialog.row()+1,dialog.column()+1);
+		changed();
+	}	
+}	
+
+void ViewEditor::slotExpandSelection(bool)
+{
+	view_->expandSelection(); 
+	changed();
+}
+
+void ViewEditor::slotSelectAll(bool)
+{
+	view_->selectAll(); 
+	changed();
+}	
+
+void ViewEditor::slotConnectSelection(bool)
+{
+	view_->connectSelection(); 
+	changed();
+}		
+
+void ViewEditor::slotDisconnectSelection(bool)
+{
+	view_->disconnectSelection(); 
+	changed();
+}		
+
+void ViewEditor::slotSetupPage(bool)
+{
+	MvQPageSetupDialog dialog(paper_,snap_,this);
+	if(dialog.exec()  == QDialog::Accepted)
+	{
+		setPaperSize(paper_->height(),paper_->width());
+		view_->setSnap(snap_->x(),snap_->y());
+		changed();  
+	}		
+}
+
+void ViewEditor::slotViewChanged()
+{
+  	changed();
+}	
+void ViewEditor::readSettings(QSettings& settings)
+{  
+  	settings.beginGroup("layout_editor");
+	
+	QVariant v=settings.value("grid");
+	if(!v.isNull()) gridAc_->setChecked(v.toBool());
+	
+	v=settings.value("grid_x");
+	QVariant v1=settings.value("grid_y");
+	
+	if(!v.isNull() && !v1.isNull()) 
+	{
+	  	snap_->setCurrentValues(v.toFloat(),v1.toFloat());
+		view_->setSnap(snap_->x(),snap_->y());
+	}
+	
+	v=settings.value("snap");
+	if(!v.isNull()) snapAc_->setChecked(v.toBool());
+	
+	settings.endGroup();
+}
+	
+void ViewEditor::writeSettings(QSettings& settings)
+{	  
+  	settings.beginGroup("layout_editor");
+	
+	settings.setValue("grid",gridAc_->isChecked());
+	settings.setValue("grid_x",snap_->x());
+	settings.setValue("grid_y",snap_->y());
+	settings.setValue("snap",snapAc_->isChecked());
+	
+	settings.endGroup();
+}  
+		
+//==================================================================================
+//==================================================================================
+
+
+//==============================================
+//
+// PaperSizeHandler
+//
+//==============================================
+
+PaperSizeHandler::PaperSizeHandler() :
+   orientation_("Landscape"),
+   current_(0)
+{
+	if(std_.size() == 0)
+	{
+	  	std_.push_back(new PaperSize("A4",21,29.7));
+		std_.push_back(new PaperSize("A3",29.7,42));
+	}
+   
+        custom_=new PaperSize("CUSTOM",29.7,21);
+   
+        current_=std_[0];
+}
+
+
+void PaperSizeHandler::set(const Request& r)
+{
+	double w = r("CUSTOM_HEIGHT");
+	double h = r("CUSTOM_WIDTH");
+
+	const char* size  = r("LAYOUT_SIZE");
+	const char* orien = r("LAYOUT_ORIENTATION");
+
+	string sizeStr="A4";
+	if(size) sizeStr=string(size);
+
+	orientation_="PORTRAIT";
+	if(orien) orientation_=string(orien);
+			
+	bool found=false;
+	for(int i = 0; i < static_cast<int>(std_.size()) ; i++)
+	{
+		if(std_.at(i)->name() == sizeStr)
+		{
+			current_=std_[i];
+			found=true;
+			break;
+		}
+	}
+	
+	if(!found)
+	{
+	  	custom_->setWidth(w);
+		custom_->setHeight(h);
+		current_=custom_;
+	}		
+}
+
+void PaperSizeHandler::set(const string& sizeStr,const string& orien,double w, double h)
+{
+	orientation_=orien;
+
+	bool found=false;
+	for(int i = 0; i < static_cast<int>(std_.size()) ; i++)
+	{
+		if(std_.at(i)->name() == sizeStr)
+		{
+			current_=std_[i];
+			found=true;
+			break;
+		}
+	}
+	
+	if(!found)
+	{
+	  	custom_->setWidth(w);
+		custom_->setHeight(h);
+		current_=custom_;
+	}		
+}
+
+
+double PaperSizeHandler::width()
+{
+ 	if(!current_)
+	  	return 0;
+	
+	if(current_==custom_)
+	  	return custom_->width();
+	else
+	  	return (orientation_ == "PORTRAIT")?current_->width():current_->height();
+			
+	return 0;
+}
+
+double PaperSizeHandler::height()
+{
+ 	if(!current_)
+	  	return 0;
+	
+	if(current_==custom_)
+	  	return custom_->height();
+	else
+	  	return (orientation_ == "PORTRAIT")?current_->height():current_->width();
+			
+	return 0;
+}	
+
+//================================================
+// 
+//  GridSnapHandler
+//
+//================================================
+
+GridSnapHandler::GridSnapHandler()
+{
+  	units_= "%";
+  	
+	float v []={1,2,4,5,10,12,5,20,25,50}; 	
+	vals_.assign(v,v+sizeof(v)/sizeof(v[0]));
+
+	//vals_ << 1 << 2 << 4 << 5 << 10 << 12.5 << 20 << 25 << 50; 
+	xIndex_=3;
+	yIndex_=3;
+}
+
+void GridSnapHandler::setCurrent(int xi,int yi)
+{
+	if(xi>=0 && xi < vals_.size())
+	{
+		xIndex_=xi;
+	}
+	if(yi>=0 && yi < vals_.size())
+	{
+		yIndex_=yi;
+	} 
+}  
+
+void GridSnapHandler::setCurrentValues(float x,float y)
+{
+	for(unsigned int i=0; i < vals_.size(); i++)
+	{
+	  	if(x == vals_[i])  xIndex_=i;
+		if(y == vals_[i]) yIndex_=i;
+	}	
+}  
+
+float GridSnapHandler::x() const 
+{
+  	return vals_[xIndex_];
+}	  
+	  
+float GridSnapHandler::y() const 
+{
+  	return vals_[yIndex_];
+}	  
+	  
+//================================================
+// 
+//  MvQPaperSizeWidget
+//
+//================================================
+
+
+MvQPaperSizeWidget::MvQPaperSizeWidget(PaperSizeHandler *paper,QWidget *parent) : 
+    QWidget(parent),
+    paper_(paper)
+    
+{ 	
+	QGridLayout* grid=new QGridLayout;
+	setLayout(grid);
+	
+	QLabel *label;
+	
+	int row=0;
+	
+	//Size
+	label=new QLabel(tr("&Size:"));
+	sizeCb_=new QComboBox;
+	label->setBuddy(sizeCb_);
+	
+	for(vector<PaperSize*>::const_iterator it=paper_->stdSizes().begin(); it != paper_->stdSizes().end(); it++)
+	{
+	  	sizeCb_->addItem(QString::fromStdString((*it)->name()));
+		sizeCb_->setItemData(sizeCb_->count()-1,QString::fromStdString((*it)->name()));
+	}
+	
+	sizeCb_->addItem(tr("Custom"));
+	sizeCb_->setItemData(sizeCb_->count()-1,"CUSTOM");
+	
+	grid->addWidget(label,row,0);
+	grid->addWidget(sizeCb_,row,1);
+	row++;
+	
+	//orientation
+	oriLabel_=new QLabel(tr("&Orientation:"));
+	oriCb_=new QComboBox;
+	oriLabel_->setBuddy(oriCb_);
+	
+	oriCb_->addItem(tr("Portrait"));
+	oriCb_->setItemData(0,"PORTRAIT");
+	
+	oriCb_->addItem(tr("Landscape"));
+	oriCb_->setItemData(1,"LANDSCAPE");
+	
+	grid->addWidget(oriLabel_,row,0);
+	grid->addWidget(oriCb_,row,1);
+	row++;
+	
+	//width
+	widthLabel_=new QLabel(tr("&Width:"));
+	widthEdit_=new QLineEdit;
+	widthLabel_->setBuddy(widthEdit_);
+	
+	grid->addWidget(widthLabel_,row,0);
+	grid->addWidget(widthEdit_,row,1);
+	row++;
+	
+	//height
+	heightLabel_=new QLabel(tr("&Height:"));
+	heightEdit_=new QLineEdit;
+	heightLabel_->setBuddy(heightEdit_);
+	
+	grid->addWidget(heightLabel_,row,0);
+	grid->addWidget(heightEdit_,row,1);
+	row++;
+			
+	//----------------------------------
+	// Init
+	//----------------------------------
+	
+	//Size
+	if(paper_->isCustom())
+	{
+	  	sizeCb_->setCurrentIndex(sizeCb_->count()-1);
+	}
+	else
+	{
+		int cnt=0;
+		for(vector<PaperSize*>::const_iterator it=paper_->stdSizes().begin(); it != paper_->stdSizes().end(); it++)
+		{
+	  		if(paper_->current() == *it)
+			{		
+			  	sizeCb_->setCurrentIndex(cnt);
+				break;
+			}
+		}	
+		cnt++;
+	}
+	
+	//Orientation
+	if(paper_->orientation() == "PORTRAIT")
+		oriCb_->setCurrentIndex(0);
+	else	  
+		oriCb_->setCurrentIndex(1);
+	
+	//Width and height
+	widthEdit_->setText(QString::number(paper_->width()));
+	heightEdit_->setText(QString::number(paper_->height()));
+
+	//State
+	updateState();
+	
+	//Combo box signals
+	connect(sizeCb_,SIGNAL(currentIndexChanged(int)),
+		this,SLOT(slotSize(int)));
+
+}  
+
+void MvQPaperSizeWidget::updateState()
+{
+  	int  index=sizeCb_->currentIndex();
+  	
+  	//A4, A3, ... 
+	if(sizeCb_->itemData(index).toString() != "CUSTOM")  
+	{
+	  	oriLabel_->setEnabled(true);
+	  	oriCb_->setEnabled(true);
+		widthLabel_->setEnabled(false);
+		widthEdit_->setEnabled(false);
+		heightLabel_->setEnabled(false);
+		heightEdit_->setEnabled(false);
+	}
+	else
+	{
+		oriLabel_->setEnabled(false);
+	  	oriCb_->setEnabled(false);
+		widthLabel_->setEnabled(true);
+		widthEdit_->setEnabled(true);
+		heightLabel_->setEnabled(true);
+		heightEdit_->setEnabled(true);	  
+	}
+}	
+
+void MvQPaperSizeWidget::slotSize(int)
+{
+	updateState();	
+}	
+
+void MvQPaperSizeWidget::accept()
+{
+	int  sizeIndex=sizeCb_->currentIndex();
+	int  oriIndex=oriCb_->currentIndex();
+	
+	if(sizeIndex>=0 && sizeIndex < sizeCb_->count() &&
+	   oriIndex>=0 && oriIndex < oriCb_->count())
+	{
+		paper_->set(sizeCb_->itemData(sizeIndex).toString().toStdString(),
+		            oriCb_->itemData(oriIndex).toString().toStdString(),
+  		            widthEdit_->text().toDouble(),
+		            heightEdit_->text().toDouble()); 	
+	}
+}	
+
+
+//================================================
+// 
+//  MvQSnapWidget
+//
+//================================================
+
+MvQGridSnapWidget::MvQGridSnapWidget(GridSnapHandler *snap,QWidget *parent) : 
+    QWidget(parent),
+    snap_(snap)
+    
+{ 	
+	QGridLayout* grid=new QGridLayout;
+	setLayout(grid);
+	
+	QLabel *label;
+	
+	int row=0;
+	
+	//x
+	label=new QLabel(tr("&X grid step:"),this);
+	xCb_=new QComboBox(this);
+	label->setBuddy(xCb_);
+	grid->addWidget(label,row,0);
+	grid->addWidget(xCb_,row,1);
+	row++;
+	
+	//y
+	label=new QLabel(tr("&Y grid step:"),this);
+	yCb_=new QComboBox(this);
+	label->setBuddy(yCb_);
+	grid->addWidget(label,row,0);
+	grid->addWidget(yCb_,row,1);
+	row++;
+	
+	grid->setColumnStretch(1,1);
+	
+	//----------------------------------
+	// Init
+	//----------------------------------
+	
+	for(unsigned int i=0; i < snap_->values().size(); i++)
+	{
+	  	xCb_->addItem(QString::number(snap_->values().at(i)) + " " + QString::fromStdString(snap_->units()));
+		yCb_->addItem(QString::number(snap_->values().at(i)) + " " + QString::fromStdString(snap_->units()));
+	}
+	
+	xCb_->setCurrentIndex((snap_->xIndex() != -1)?snap_->xIndex():3);	
+	yCb_->setCurrentIndex((snap_->yIndex() != -1)?snap_->yIndex():3);
+}  
+
+
+void MvQGridSnapWidget::accept()
+{
+	int  xIndex=xCb_->currentIndex();
+	int  yIndex=yCb_->currentIndex();
+	
+	if(xIndex>=0 && yIndex>=0)
+	{
+		snap_->setCurrent(xIndex,yIndex);
+	}
+}	
+
+//================================================
+// 
+//  MvQSnapWidget
+//
+//================================================
+
+MvQPageSetupDialog::MvQPageSetupDialog(PaperSizeHandler *paperH,GridSnapHandler *snapH,QWidget *parent) : 
+    QDialog(parent)   
+{
+	setWindowTitle(tr("Page setup"));
+  	
+  	QVBoxLayout* vb=new QVBoxLayout;
+	setLayout(vb);
+
+	QTabWidget *tab=new QTabWidget(this);
+	vb->addWidget(tab);
+	
+	paper_=new MvQPaperSizeWidget(paperH,this);
+	tab->addTab(paper_,tr("Paper size"));
+	
+	snap_=new MvQGridSnapWidget(snapH,this);
+	tab->addTab(snap_,tr("Grid"));
+	
+	// Buttonbox
+	QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
+                                      | QDialogButtonBox::Cancel);
+ 
+	connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
+     	connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
+		
+	//Try to find the optimal dialog width
+	QFont font;
+	QFontMetrics fm(font);
+	//setMinimumWidth(fm.width(tr("Orientation:  landscape"))+100);
+	
+	vb->addWidget(buttonBox);
+}  
+
+
+void MvQPageSetupDialog::accept()
+{
+	paper_->accept();
+	snap_->accept();
+
+	QDialog::accept();
+}	
+
+
+//================================================
+// 
+//  MvQSplitDialog
+//
+//================================================
+
+MvQSplitDialog::MvQSplitDialog(QWidget *parent) : 
+    QDialog(parent),
+    row_(0),
+    column_(0),
+    maxRow_(6),
+    maxColumn_(6)
+{
+	setWindowTitle(tr("Split"));
+  	
+  	QVBoxLayout* vb=new QVBoxLayout;
+	setLayout(vb);
+		
+	label_=new QLabel(this);
+	vb->addWidget(label_);
+		
+	selector_=new MvQGridSelector(row_,column_,maxRow_,maxColumn_,this);
+				      
+	vb->addWidget(selector_,1);
+	
+	connect(selector_,SIGNAL(changed(int,int)),
+		this,SLOT(slotSelectionChanged(int,int)));
+	
+	// Buttonbox
+	QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
+                                      | QDialogButtonBox::Cancel);
+ 
+	connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
+     	connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
+		
+	//Try to find the optimal dialog width
+	QFont font;
+	QFontMetrics fm(font);
+	setMinimumWidth(fm.width(tr("Columns"))+100);
+	
+	vb->addWidget(buttonBox);
+	
+	updateLabel();
+}
+
+void MvQSplitDialog::accept()
+{
+	QDialog::accept();
+}	
+
+void MvQSplitDialog::slotSelectionChanged(int row,int column)
+{
+  	row_=row;
+	column_=column;
+	updateLabel();
+}	
+
+void MvQSplitDialog::updateLabel()
+{
+  	label_->setText(tr("Split selected frames: <b>") + QString::number(row_+1) + "x" +QString::number(column_+1) + "</b>");
+}	
+
+//================================================
+// 
+//  MvQGridSelector
+//
+//================================================
+
+MvQGridSelector::MvQGridSelector(int row, int column, int rowNum, int colNum, QWidget *parent) : 
+    QWidget(parent),
+    row_(row),
+    column_(column),
+    rowNum_(rowNum),
+    columnNum_(colNum),
+    offset_(1),
+    dx_(5),
+    dy_(5)
+{
+  	selectedColour_=QColor(151,193,219);
+	rectColour_=QColor(210,210,210);
+        frameColour_=rectColour_.darker(120);
+	
+	setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum));
+	setMinimumSize(QSize(128,128));
+	
+	setMouseTracking(true);
+    
+}
+
+void MvQGridSelector::setGridSize(int row, int col)
+{
+ 	rowNum_=row;
+	columnNum_=row;
+	row_=0;
+	column_=0;
+	update();
+}  
+
+void MvQGridSelector::resizeEvent(QResizeEvent */*event*/) 
+{
+	int w=width();
+    	int h=height(); 
+	//gridSize_=(w<h)?w:h;
+	//cellSize_=gridSize_/cellsPerRow_;	
+	dx_=(w-2*offset_)/columnNum_;
+	dy_=(h-2*offset_)/rowNum_;
+}
+
+
+void MvQGridSelector::paintEvent(QPaintEvent*)
+{
+  	QPainter painter(this);
+
+	painter.setPen(Qt::black);
+	
+  	for(int i=0; i < rowNum_; i++)
+	{
+	  	for(int j=0; j < columnNum_; j++)
+		{
+			QColor col;
+			if(i <= row_ && j <= column_)
+				col=selectedColour_;
+			else
+			  	col=rectColour_;
+		  
+		  	painter.fillRect(QRectF(offset_+j*dx_,offset_+i*dy_,dx_,dy_),col);
+			painter.drawRect(QRectF(offset_+j*dx_,offset_+i*dy_,dx_,dy_));
+		}  
+	}	
+}  
+
+bool MvQGridSelector::select(QPoint pos)
+{
+	int col=(pos.x()-offset_)/dx_;
+	int row=(pos.y()-offset_)/dy_;
+	
+	if(row >=0 && row < rowNum_ && 
+	   col >=0 && col < columnNum_ && 
+	   (row != row_  || col != column_))
+	{
+	  	row_=row;
+		column_=col;
+		emit changed(row_,column_);
+		return true;
+	}
+	
+	return false;
+}
+
+void MvQGridSelector::mousePressEvent(QMouseEvent *event)
+{	
+	if(select(event->pos()))
+	  	update(); 		 
+}
+
+void MvQGridSelector::mouseMoveEvent(QMouseEvent *event)
+{ 
+  	if(event->buttons() & Qt::LeftButton &&
+	   select(event->pos()))
+	  	update(); 	
+}
+
+void MvQGridSelector::mouseReleaseEvent(QMouseEvent* /*event*/)
+{
+}
+
+
+
+static EditorMaker<ViewEditor> editorMaker("ViewEditor");
+
+
+
diff --git a/src/Desktop/ViewEditor.h b/src/Desktop/ViewEditor.h
new file mode 100644
index 0000000..3511aaa
--- /dev/null
+++ b/src/Desktop/ViewEditor.h
@@ -0,0 +1,277 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 ViewEditor_H
+#define ViewEditor_H
+
+#include "Request.h"
+//#include "PageView.h"
+
+#include "MvQEditor.h"
+
+class QComboBox;
+class QLabel;
+class QLineEdit;
+class QToolButton;
+class QSplitter;
+class QUndoStack;
+
+class MvQPageItem;
+class MvQPageView;
+
+struct PaperRectangle;
+
+class PaperSize
+{
+public:
+    	PaperSize(string n, float w, float h) : name_(n), width_(w), height_(h) {};
+	string name() const {return name_;}
+	double width() const {return width_;}
+	double height() const {return height_;}
+	void setWidth(double w) {width_=w;}
+	void setHeight(double h) {height_=h;}
+
+protected:	
+	string name_;
+	double width_;
+	double height_;
+};
+
+class PaperSizeHandler
+{
+public:
+	PaperSizeHandler();
+	
+	void set(const Request&);
+	void set(const string&,const string&,double,double);
+	PaperSize* current() {return current_;}
+	double width();
+	double height();
+	bool isCustom() {return current_==custom_;}
+	string orientation() {return orientation_;}
+	
+	static const vector<PaperSize*>& stdSizes() {return std_;}
+	
+protected:
+	string orientation_;
+	
+	PaperSize *current_;	
+	static vector<PaperSize*> std_;
+	PaperSize* custom_;
+};  
+
+class GridSnapHandler
+{
+public:  
+	GridSnapHandler();
+	void setCurrent(int,int);
+	void setCurrentValues(float,float);
+	float x() const;
+	float y() const;
+	int xIndex() const {return xIndex_;}
+	int yIndex() const {return yIndex_;}
+	const string& units() const {return units_;}
+	const vector<float>& values() const {return vals_;}
+	
+	
+protected:    
+	vector<float> vals_;
+	string units_;
+	int xIndex_;
+	int yIndex_; 
+};  
+
+class MvQPaperSizeWidget : public QWidget
+{
+Q_OBJECT
+  
+public:
+    	MvQPaperSizeWidget(PaperSizeHandler *,QWidget *parent=0);
+  	~MvQPaperSizeWidget() {};
+	void accept();
+
+public slots:
+	void slotSize(int);
+  
+protected:
+  	void updateState();
+	
+  	PaperSizeHandler *paper_;
+  	QComboBox *sizeCb_;
+	QLabel* oriLabel_;
+	QComboBox* oriCb_;
+  	QLabel* widthLabel_;
+	QLabel *heightLabel_;
+	QLineEdit *widthEdit_;
+	QLineEdit *heightEdit_;
+};
+
+
+class MvQGridSnapWidget : public QWidget
+{
+public:
+    	MvQGridSnapWidget(GridSnapHandler *,QWidget *parent=0);
+  	~MvQGridSnapWidget() {};
+	void accept();
+	
+protected:  	
+  	GridSnapHandler *snap_;
+  	QComboBox *xCb_;
+	QComboBox *yCb_;
+};
+
+
+class MvQPageSetupDialog : public QDialog
+{
+Q_OBJECT
+
+public:
+    	MvQPageSetupDialog(PaperSizeHandler *,GridSnapHandler*,QWidget *parent=0);
+  	~MvQPageSetupDialog() {};
+
+public slots:
+  	void accept();
+  
+protected:	
+  	MvQPaperSizeWidget *paper_;
+	MvQGridSnapWidget* snap_;
+};
+
+class MvQGridSelector;
+
+class MvQSplitDialog : public QDialog
+{
+Q_OBJECT
+  
+public:
+    	MvQSplitDialog(QWidget *parent=0);
+  	~MvQSplitDialog() {};
+	int row() const {return row_;}
+	int column() const {return column_;}
+
+public slots:
+	void slotSelectionChanged(int,int);
+	void accept();
+  
+protected:
+        void updateLabel();
+
+	int row_;
+	int column_;
+	int maxRow_;
+	int maxColumn_;
+	QLabel* label_;
+	MvQGridSelector *selector_;
+};
+
+
+class MvQGridSelector : public QWidget
+{  
+Q_OBJECT  
+  
+public:
+    	MvQGridSelector(int,int,int,int,QWidget *parent=0);
+  	~MvQGridSelector() {};
+	int row() const {return row_;}
+	int column() const {return column_;}
+	void setGridSize(int,int);
+	
+signals:
+	void changed(int,int);    
+	
+protected:      
+        void paintEvent(QPaintEvent *event);
+        void resizeEvent (QResizeEvent * event );
+        void mousePressEvent(QMouseEvent *event);
+        void mouseMoveEvent(QMouseEvent *event);
+	void mouseReleaseEvent(QMouseEvent *event);
+        bool select(QPoint);
+  
+	int row_;
+	int column_;
+	int rowNum_;
+	int columnNum_;
+	int offset_;
+	float dx_;
+	float dy_;
+	QColor rectColour_;
+	QColor frameColour_;
+	QColor selectedColour_;
+};
+
+
+class ViewEditor : public MvQEditor
+{
+
+Q_OBJECT
+
+public:
+	ViewEditor(const IconClass&,const string&);
+	virtual ~ViewEditor();
+	
+	void setPaperSize(double,double);
+	void getPaperSize(double&,double&);	
+	IconObject* defaultView();
+	IconObject *makeIcon(Folder*,int, Request&);
+
+public slots:
+        void updateButtonStatus(int);
+	void slotSnap(bool);
+	void slotGrid(bool);
+	void slotAddPage(bool);
+	void slotDuplicateSelection(bool);
+  	void slotDeleteSelection(bool);
+	void slotJoinSelection(bool);
+	void slotSplitSelection(bool);
+	void slotExpandSelection(bool);
+	void slotSelectAll(bool);
+	void slotConnectSelection(bool);
+	void slotDisconnectSelection(bool);
+  	void slotSetupPage(bool);
+	void slotViewChanged();
+
+protected:
+ 	void readSettings(QSettings&);
+	void writeSettings(QSettings&);
+
+private:
+	// No copy allowed
+	ViewEditor(const ViewEditor&);
+	ViewEditor& operator=(const ViewEditor&);
+
+	void loadPages(IconObject*,const Request&);
+	void loadSubPages(MvQPageItem*,IconObject*,const Request&);	
+	void loadPaperSize(const Request&);
+	void savePaperSize(Request&);
+	void savePages(IconObject*,Request&);
+	void saveRectToRequest(QRectF,Request&);
+
+	virtual void apply();
+	virtual void reset();
+	virtual void close();
+	virtual void merge(IconObjectH);
+	virtual void replace(IconObjectH);
+	virtual string alternateEditor();
+	
+	Request request_;
+	vector<IconObjectH> save_;
+
+	//map<IconObjectH,PageViewH> cache_;
+	
+	QAction* snapAc_;
+	QAction* gridAc_;
+	PaperSizeHandler *paper_;
+	GridSnapHandler *snap_;	
+	QUndoStack* undoStack_;
+	MvQPageView *view_;
+};
+
+inline void destroy(ViewEditor**) {}
+
+#endif
diff --git a/src/Desktop/Wastebasket.cc b/src/Desktop/Wastebasket.cc
new file mode 100644
index 0000000..09a50cd
--- /dev/null
+++ b/src/Desktop/Wastebasket.cc
@@ -0,0 +1,65 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "Log.h"
+#include "Wastebasket.h"
+#include "IconFactory.h"
+
+Wastebasket::Wastebasket(Folder* parent,const IconClass& kind,
+		const string& name,IconInfo* info):
+	SystemFolder(parent,kind,name,info)
+{
+}
+
+Wastebasket::~Wastebasket()
+{
+}
+
+bool Wastebasket::adopt(IconObject* obj)
+{
+	IconObject* x = find(obj->name());
+	if(x == obj) 
+	{ 
+		return false;
+	}
+	
+	if(x != 0)
+	{
+		x->destroy();
+		//Log::warning(this) << "Object " << o->name() 
+		//	<< " already in wastebasket" << endl;
+	}
+
+	return SystemFolder::adopt(obj);
+}
+
+void Wastebasket::empty()
+{
+	scan();
+	KidMap kids = kids_;
+	for(KidMap::iterator j = kids.begin(); j != kids.end() ; ++j)
+	{
+		IconObject* o = (*j).second;
+		//Log::info(this) << "Remove " << *o << endl;
+		//o->destroy();
+		cout << "Delete : " << o->name() << endl;
+		
+	}
+}
+
+set<string> Wastebasket::can()
+{
+	//scan();
+	set<string> c = SystemFolder::can();
+	c.insert("empty");
+	//if(kids_.size()) c.insert("empty");
+	return c;
+}
+
+static IconMaker<Wastebasket> wastebasketFactory("WASTEBASKET");
diff --git a/src/Desktop/Wastebasket.h b/src/Desktop/Wastebasket.h
new file mode 100644
index 0000000..162e394
--- /dev/null
+++ b/src/Desktop/Wastebasket.h
@@ -0,0 +1,40 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// File Wastebasket.h
+// Baudouin Raoult - ECMWF Jul 99
+
+#ifndef Wastebasket_H
+#define Wastebasket_H
+
+#include "SystemFolder.h"
+
+class Wastebasket : public SystemFolder {
+public: 
+	Wastebasket(Folder* parent,const IconClass& kind,const string& name,IconInfo* info);
+	virtual ~Wastebasket(); 
+
+	virtual void empty();
+
+private:
+	Wastebasket(const Wastebasket&);
+	Wastebasket& operator=(const Wastebasket&);
+
+	virtual bool adopt(IconObject*);
+	virtual set<string> can();
+};
+
+inline void destroy(Wastebasket**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(Wastebasket);
+//#endif
+
+#endif
diff --git a/src/Desktop/desktop.qrc b/src/Desktop/desktop.qrc
new file mode 100644
index 0000000..c52dc60
--- /dev/null
+++ b/src/Desktop/desktop.qrc
@@ -0,0 +1,86 @@
+<RCC>
+  <qresource prefix="desktop" > 
+    <file alias="accept.svg">../images/accept.svg</file>
+    <file alias="add.svg">../images/add.svg</file>
+    <file alias="add_bookmark.svg">../images/add_bookmark.svg</file>
+    <file alias="add_bookmark_group.svg">../images/add_bookmark_group.svg</file>
+    <file alias="archive.svg">../images/archive.svg</file>
+    <file alias="big_arrow_left.svg">../images/big_arrow_left.svg</file>
+    <file alias="big_arrow_right.svg">../images/big_arrow_right.svg</file>
+    <file alias="big_arrow_up.svg">../images/big_arrow_up.svg</file>
+    <file alias="bookmark.svg">../images/bookmark.svg</file>  
+    <file alias="bookmark_broken.svg">../images/bookmark_broken.svg</file>  
+    <file alias="bookmark_group.svg">../images/bookmark_group.svg</file>
+    <file alias="cancel.svg">../images/cancel.svg</file>
+    <file alias="clear_left.svg">../images/clear_left.svg</file>
+    <file alias="close.svg">../images/close.svg</file>
+    <file alias="create_folder.svg">../images/create_folder.svg</file>
+    <file alias="create_macro.svg">../images/create_macro.svg</file>    
+    <file alias="cursor_bdiag.svg">../images/cursor_bdiag.svg</file>
+    <file alias="cursor_fdiag.svg">../images/cursor_fdiag.svg</file> 
+    <file alias="cursor_horiz.svg">../images/cursor_horiz.svg</file>
+    <file alias="cursor_vert.svg">../images/cursor_vert.svg</file>        
+    <file alias="cursor_bdiag_hover.svg">../images/cursor_bdiag_hover.svg</file>
+    <file alias="cursor_fdiag_hover.svg">../images/cursor_fdiag_hover.svg</file> 
+    <file alias="cursor_horiz_hover.svg">../images/cursor_horiz_hover.svg</file>
+    <file alias="cursor_vert_hover.svg">../images/cursor_vert_hover.svg</file>     
+    <file alias="detailed_view.svg">../images/detailed_view.svg</file>
+    <file alias="drawer.svg">../images/drawer.svg</file>
+    <file alias="duplicate.svg">../images/duplicate.svg</file>    
+    <file alias="edit.svg">../images/edit.svg</file>
+    <file alias="editcopy.svg">../images/editcopy.svg</file>
+    <file alias="editpaste.svg">../images/editpaste.svg</file>
+    <file alias="embedded.svg">../images/embedded.svg</file>
+    <file alias="error.svg">../images/error.svg</file>
+    <file alias="examine.svg">../images/examine.svg</file>
+    <file alias="execute.svg">../images/execute.svg</file>
+    <file alias="expand_left.svg">../images/expand_left.svg</file>
+    <file alias="expand_right.svg">../images/expand_right.svg</file>
+    <file alias="filesave.svg">../images/filesave.svg</file>  
+    <file alias="filter.svg">../images/filter.svg</file>
+    <file alias="folder.svg">../images/folder.svg</file> 
+    <file alias="foldergroup.svg">../images/foldergroup.svg</file> 
+    <file alias="gui_edit.svg">../images/gui_edit.svg</file> 
+    <file alias="help_point.svg">../images/help_point.svg</file>
+    <file alias="help_line.svg">../images/help_line.svg</file>
+    <file alias="help_map.svg">../images/help_map.svg</file>
+    <file alias="help_script.svg">../images/help_script.svg</file>
+    <file alias="history.svg">../images/history.svg</file>
+    <file alias="home.svg">../images/home.svg</file>
+    <file alias="icon_group.svg">../images/icon_group.svg</file> 
+    <file alias="icon_view.svg">../images/icon_view.svg</file>
+    <file alias="link.svg">../images/link.svg</file>
+    <file alias="link_broken.svg">../images/link_broken.svg</file>
+    <file alias="log.svg">../images/log.svg</file>
+    <file alias="macro.svg">../images/macro.svg</file>
+    <file alias="menu_indicator.png">../images/menu_indicator.png</file>
+    <file alias="mail_send.svg">../images/mail_send.svg</file>
+    <file alias="padlock.svg">../images/padlock.svg</file>
+    <file alias="page_add.svg">../images/page_add.svg</file>
+    <file alias="page_connect.svg">../images/page_connect.svg</file>
+    <file alias="page_delete.svg">../images/page_delete.svg</file>
+    <file alias="page_disconnect.svg">../images/page_disconnect.svg</file>
+    <file alias="page_expand.svg">../images/page_expand.svg</file>
+    <file alias="page_join.svg">../images/page_join.svg</file> 
+    <file alias="page_select_all.svg">../images/page_select_all.svg</file>
+    <file alias="page_setup.svg">../images/page_setup.svg</file>
+    <file alias="page_split.svg">../images/page_split.svg</file>
+    <file alias="redo.svg">../images/redo.svg</file>
+    <file alias="reload.svg">../images/reload.svg</file>
+    <file alias="remove.svg">../images/remove.svg</file>
+    <file alias="search.svg">../images/search.svg</file>
+    <file alias="select_all.svg">../images/select_all.svg</file>
+    <file alias="sidebar_left.svg">../images/sidebar_left.svg</file>
+    <file alias="size_down.svg">../images/size_down.svg</file>
+    <file alias="size_up.svg">../images/size_up.svg</file>   
+    <file alias="snap_to_grid.svg">../images/snap_to_grid.svg</file>   
+    <file alias="splash_screen.png">../images/splash_screen.png</file>
+    <file alias="text_edit.svg">../images/text_edit.svg</file>
+    <file alias="undo.svg">../images/undo.svg</file>
+    <file alias="unknown.svg">../images/unknown.svg</file>
+    <file alias="view_grid.svg">../images/view_grid.svg</file>
+    <file alias="visualise.svg">../images/visualise.svg</file>
+    <file alias="warning.svg">../images/warning.svg</file>
+    <file alias="wastebasket.svg">../images/wastebasket.svg</file>
+  </qresource>
+</RCC>
\ No newline at end of file
diff --git a/src/Divrot/Makefile.in b/src/Divrot/Makefile.in
index 3fe4fe7..2216fd7 100644
--- a/src/Divrot/Makefile.in
+++ b/src/Divrot/Makefile.in
@@ -133,6 +133,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -148,6 +149,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -174,11 +177,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/Divrot/divrot-exFortran.cc b/src/Divrot/divrot-exFortran.cc
index 21e4486..a6efc95 100644
--- a/src/Divrot/divrot-exFortran.cc
+++ b/src/Divrot/divrot-exFortran.cc
@@ -214,9 +214,9 @@ C     SET RESULT
 
 // from libMars/emos.c
 extern "C" {
-fortint int2_intout(const char* param,fortint iv[],fortfloat dv[],const char* cv);
-fortint intout_(const char*, fortint[], fortfloat[], const char*, fortint, fortint);
-fortint intin_(const char*, fortint[], fortfloat[], const char*, fortint, fortint);
+/*fortint int2_intout(const char* param,fortint iv[],fortfloat dv[],const char* cv);*/
+fortint intout_(char*, fortint[], fortfloat[], const char*, fortint, fortint);
+fortint intin_(char*, fortint[], fortfloat[], const char*, fortint, fortint);
 }
 
 /*
diff --git a/src/Ecfile/Makefile.in b/src/Ecfile/Makefile.in
index aa3f9bd..60ea998 100644
--- a/src/Ecfile/Makefile.in
+++ b/src/Ecfile/Makefile.in
@@ -116,6 +116,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -131,6 +132,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -157,11 +160,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/Event/Event.cc b/src/Event/Event.cc
index fa4465c..8773c33 100644
--- a/src/Event/Event.cc
+++ b/src/Event/Event.cc
@@ -144,15 +144,15 @@ void Event::Startup()
 	char host[1024];
 
 	if( getenv( "METVIEW_LOCALHOST" ) )
-	  {
-	    strcpy( buf, "localhost" );   //-- for network safe demo on portable pc
-	    marslog(LOG_INFO, "NOTE: $EVENT_HOST is now \'localhost\'!" );
-	  }
+	{
+		strcpy( buf, "localhost" );   //-- for network safe demo on portable pc
+		marslog(LOG_INFO, "NOTE: $EVENT_HOST is now \'localhost\'!" );
+	}
 	else
-	  {
-	    gethostname(host,sizeof(host));
-	    sprintf(buf,"EVENT_HOST=%s",host);
-	  }
+	{
+		gethostname(host,sizeof(host));
+		sprintf(buf,"EVENT_HOST=%s",host);
+	}
 	putenv(strdup(buf));
 
 	sprintf(buf,"EVENT_PORT=%d",gOpt.port);
@@ -160,13 +160,33 @@ void Event::Startup()
 
 	if(gOpt.startup)
 	{
-		sprintf(buf,"%s &",gOpt.startup);
+		// There's a possible problem if we start Metview in batch mode
+		// (-b <path/to/macro>) if the path to the macro contains spaces.
+		// It is passed inside $MACRO_STARTUP, and although it contains
+		// quotes around the path, these are lost when system() is
+		// called (in this case, the invoked shell expands the environment
+		// variable, and it seems to be this that loses the quotes).
+		// The next few lines are perhaps a bit of a hack, but we get round
+		// this specific case by expanding $MACRO_STARTUP before passing it
+		// to the system() call. If invoked with the examiner option (-e)
+        // then we get $METVIEW_STARTUP, which we have to treat in the same way.
+
+		char *startup;
+		if (!strcmp(gOpt.startup, "$MACRO_STARTUP"))
+			startup = getenv("MACRO_STARTUP");
+		else if (!strcmp(gOpt.startup, "$METVIEW_STARTUP"))
+			startup = getenv("METVIEW_STARTUP");
+		else
+			startup = gOpt.startup;
+   
+
+		sprintf(buf,"%s &", startup);
+
 		if(system(buf))
 		{
-			marslog(LOG_EROR|LOG_PERR,"Cannot start %s",gOpt.startup);
+			marslog(LOG_EROR|LOG_PERR,"Cannot start %s",startup);
 			marslog(LOG_EXIT,"Bye...");
 		}
-
 	}
 }
 
diff --git a/src/Event/Makefile.in b/src/Event/Makefile.in
index 6f3646e..08194f5 100644
--- a/src/Event/Makefile.in
+++ b/src/Event/Makefile.in
@@ -135,6 +135,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -150,6 +151,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -176,11 +179,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/ExamineManager/Makefile.in b/src/ExamineManager/Makefile.in
index 7e9d8f2..954abcd 100644
--- a/src/ExamineManager/Makefile.in
+++ b/src/ExamineManager/Makefile.in
@@ -117,6 +117,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -132,6 +133,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -158,11 +161,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/ExamineManager/MvExamineManager.cc b/src/ExamineManager/MvExamineManager.cc
index 1938681..b1dbe5d 100644
--- a/src/ExamineManager/MvExamineManager.cc
+++ b/src/ExamineManager/MvExamineManager.cc
@@ -82,11 +82,16 @@ MvExamineManager::examBufr( const string& fileName )
 }
 
 bool
-MvExamineManager::examNetCDF( const string& ) // fileName )
+MvExamineManager::examNetCDF( const string& fileName) // fileName )
 {
-	//-- ERROR MSGS SHOULD BE GIVEN IN POP-UP WINDOWS !!!!!
-	cerr << "MvExamineManager::examNetCDF not yet implemented" << endl;
-	return false;
+	MvRequest mvReq( "NETCDF" );           //-- build a NETCDF request
+	mvReq.setValue( "PATH", fileName.c_str() );
+	mvReq.print();
+	                                     //-- send request to NcExaminer
+	MvTask* task = new MvServiceTask( this, "NcExaminer", mvReq );
+	task->run();
+
+	return true;
 }
 
 bool
diff --git a/src/Flextra/FLEXTRA_FILE.xpm b/src/Flextra/FLEXTRA_FILE.xpm
deleted file mode 100644
index 1800045..0000000
--- a/src/Flextra/FLEXTRA_FILE.xpm
+++ /dev/null
@@ -1,500 +0,0 @@
-/* XPM */
-static char * FLEXTRA_FILE_xpm[] = {
-"32 32 465 2",
-"  	c None",
-". 	c #557FC8",
-"+ 	c #6086CA",
-"@ 	c #537DC7",
-"# 	c #9DB1D9",
-"$ 	c #9DB1DA",
-"% 	c #9EB2DA",
-"& 	c #9DB2DA",
-"* 	c #9EB2DB",
-"= 	c #9FB3DB",
-"- 	c #9FB3DA",
-"; 	c #A0B3DB",
-"> 	c #A0B4DB",
-", 	c #8DA4D4",
-"' 	c #6388CB",
-") 	c #C8CFE4",
-"! 	c #668ACC",
-"~ 	c #E0E5F0",
-"{ 	c #E2E7F2",
-"] 	c #E4E8F3",
-"^ 	c #E6EAF3",
-"/ 	c #E8EBF5",
-"( 	c #EAEDF6",
-"_ 	c #ECEEF6",
-": 	c #EEF0F7",
-"< 	c #EFF1F8",
-"[ 	c #F1F3F9",
-"} 	c #F2F4F9",
-"| 	c #F4F5FA",
-"1 	c #F5F6FB",
-"2 	c #F6F7FB",
-"3 	c #F7F9FC",
-"4 	c #F9FAFC",
-"5 	c #FAFAFD",
-"6 	c #FBFBFD",
-"7 	c #FCFCFE",
-"8 	c #FDFDFE",
-"9 	c #FDFEFE",
-"0 	c #A4B7DC",
-"a 	c #C9D0E5",
-"b 	c #CAD0E5",
-"c 	c #668BCC",
-"d 	c #6389CB",
-"e 	c #CAD1E5",
-"f 	c #CBD1E5",
-"g 	c #CBD2E5",
-"h 	c #CBD2E6",
-"i 	c #CCD2E6",
-"j 	c #CCD3E6",
-"k 	c #CDD4E6",
-"l 	c #678CCD",
-"m 	c #CBD3E7",
-"n 	c #BCC9DD",
-"o 	c #BDCADC",
-"p 	c #BCCADC",
-"q 	c #BDCADD",
-"r 	c #C8D0E4",
-"s 	c #CFD5E8",
-"t 	c #678CCC",
-"u 	c #276A7C",
-"v 	c #216778",
-"w 	c #8DABBD",
-"x 	c #CFD6E8",
-"y 	c #6289CB",
-"z 	c #CDD4E7",
-"A 	c #8AA9BB",
-"B 	c #759CAE",
-"C 	c #498092",
-"D 	c #88A9BA",
-"E 	c #B5C6D7",
-"F 	c #D1D7E9",
-"G 	c #EBEDF6",
-"H 	c #D0D9E5",
-"I 	c #AFBFCF",
-"J 	c #8CA4BA",
-"K 	c #6D8DA7",
-"L 	c #86A0B7",
-"M 	c #AEBECF",
-"N 	c #D6DFE8",
-"O 	c #F5F8FB",
-"P 	c #6288CB",
-"Q 	c #CDD4E8",
-"R 	c #CED5E8",
-"S 	c #AFC2D5",
-"T 	c #6794A5",
-"U 	c #D1D8EA",
-"V 	c #D2D8EA",
-"W 	c #6585A2",
-"X 	c #547998",
-"Y 	c #7495AE",
-"Z 	c #91B0C1",
-"` 	c #ACC5D3",
-" .	c #98B2C4",
-"..	c #7493AB",
-"+.	c #4F7592",
-"@.	c #456D84",
-"#.	c #B9C7C9",
-"$.	c #D0D5E8",
-"%.	c #B1C3D5",
-"&.	c #6894A4",
-"*.	c #D2D9EA",
-"=.	c #D3D9EA",
-"-.	c #D4DAEA",
-";.	c #E6E9F3",
-">.	c #709499",
-",.	c #416A88",
-"'.	c #85A9B5",
-").	c #D2EBEF",
-"!.	c #D4ECF0",
-"~.	c #D8EEF1",
-"{.	c #DAEDF0",
-"].	c #87AA90",
-"^.	c #3E6E3C",
-"/.	c #3C6D39",
-"(.	c #3A6853",
-"_.	c #3C6682",
-":.	c #608388",
-"<.	c #F7F8FB",
-"[.	c #D0D7E8",
-"}.	c #B2C3D5",
-"|.	c #6894A6",
-"1.	c #D4D9EA",
-"2.	c #D4DBEB",
-"3.	c #5F8A86",
-"4.	c #396978",
-"5.	c #387949",
-"6.	c #7AAD8D",
-"7.	c #789D80",
-"8.	c #2F642A",
-"9.	c #7D8A98",
-"0.	c #748191",
-"a.	c #6A7789",
-"b.	c #5F6C86",
-"c.	c #3F6776",
-"d.	c #618390",
-"e.	c #CFD6E9",
-"f.	c #B1C4D5",
-"g.	c #D4DAEB",
-"h.	c #D5DBEB",
-"i.	c #D6DBEB",
-"j.	c #688DCD",
-"k.	c #C0CDD9",
-"l.	c #3A6780",
-"m.	c #558871",
-"n.	c #28732F",
-"o.	c #B0D4CA",
-"p.	c #CCE4E5",
-"q.	c #67916D",
-"r.	c #3C6E39",
-"s.	c #346830",
-"t.	c #858EA3",
-"u.	c #7A8399",
-"v.	c #6E7890",
-"w.	c #626D87",
-"x.	c #53627B",
-"y.	c #3D6780",
-"z.	c #9AB0B1",
-"A.	c #6188CB",
-"B.	c #D1D8E9",
-"C.	c #D2D8E9",
-"D.	c #D3DAEB",
-"E.	c #D6DCEC",
-"F.	c #D7DCED",
-"G.	c #678DCD",
-"H.	c #E1E5F1",
-"I.	c #557A95",
-"J.	c #286947",
-"K.	c #347C3F",
-"L.	c #A1CAB9",
-"M.	c #CFEAED",
-"N.	c #88AE96",
-"O.	c #386B35",
-"P.	c #557B58",
-"Q.	c #557D59",
-"R.	c #698576",
-"S.	c #7A8994",
-"T.	c #768193",
-"U.	c #56627D",
-"V.	c #455C71",
-"W.	c #3E6782",
-"X.	c #E9EEF0",
-"Y.	c #D0D7E9",
-"Z.	c #7FA2B3",
-"`.	c #3C7889",
-" +	c #417B8C",
-".+	c #5F8FA0",
-"++	c #C8D2E3",
-"@+	c #D8DEED",
-"#+	c #C5CFDF",
-"$+	c #537B98",
-"%+	c #BCE0DE",
-"&+	c #C9E9EB",
-"*+	c #CDEAED",
-"=+	c #4D7B4D",
-"-+	c #31662D",
-";+	c #457545",
-">+	c #467448",
-",+	c #7C8E90",
-"'+	c #366832",
-")+	c #366833",
-"!+	c #687687",
-"~+	c #4B5774",
-"{+	c #3E6574",
-"]+	c #839EA0",
-"^+	c #6288CA",
-"/+	c #6F98AB",
-"(+	c #789FB0",
-"_+	c #6996A6",
-":+	c #7DA3B3",
-"<+	c #D9DEED",
-"[+	c #A3B5C9",
-"}+	c #6E95AC",
-"|+	c #C8E8EB",
-"1+	c #CAE9EC",
-"2+	c #719B7B",
-"3+	c #7FA488",
-"4+	c #81A58A",
-"5+	c #33662F",
-"6+	c #477846",
-"7+	c #3C6A3B",
-"8+	c #687686",
-"9+	c #3B5B6C",
-"0+	c #527880",
-"a+	c #6287CA",
-"b+	c #78A0B0",
-"c+	c #6795A5",
-"d+	c #8DADBD",
-"e+	c #D9DFEE",
-"f+	c #688DCE",
-"g+	c #7292A5",
-"h+	c #507C73",
-"i+	c #B1D5CD",
-"j+	c #91B6A3",
-"k+	c #618764",
-"l+	c #BFC4D1",
-"m+	c #B0B7C4",
-"n+	c #628468",
-"o+	c #538055",
-"p+	c #4C794C",
-"q+	c #507755",
-"r+	c #73808F",
-"s+	c #3E536D",
-"t+	c #3E677C",
-"u+	c #6F99AB",
-"v+	c #337283",
-"w+	c #588A9B",
-"x+	c #D7DDEC",
-"y+	c #DADFEE",
-"z+	c #4E7585",
-"A+	c #3A6B4E",
-"B+	c #467942",
-"C+	c #517F53",
-"D+	c #BAC3C7",
-"E+	c #C0C5D2",
-"F+	c #B4BAC9",
-"G+	c #A9AFBF",
-"H+	c #829493",
-"I+	c #778B89",
-"J+	c #848EA2",
-"K+	c #6D7E85",
-"L+	c #51715E",
-"M+	c #566B71",
-"N+	c #526274",
-"O+	c #3D4F66",
-"P+	c #3D6688",
-"Q+	c #FBFDFD",
-"R+	c #6F99AA",
-"S+	c #ABBFCF",
-"T+	c #447D8E",
-"U+	c #23687A",
-"V+	c #B5C8D6",
-"W+	c #DBE0EE",
-"X+	c #688CCE",
-"Y+	c #587F84",
-"Z+	c #366656",
-"`+	c #6E9B77",
-" @	c #4C7B4C",
-".@	c #B7C1C3",
-"+@	c #9DA4B6",
-"@@	c #9199AC",
-"#@	c #838DA1",
-"$@	c #386A35",
-"%@	c #689069",
-"&@	c #376933",
-"*@	c #376935",
-"=@	c #3A585D",
-"-@	c #416A83",
-";@	c #6187CA",
-">@	c #ACC2D2",
-",@	c #9EB9C9",
-"'@	c #598C9C",
-")@	c #DCE1EF",
-"!@	c #96ACB8",
-"~@	c #45707A",
-"{@	c #C3E5E6",
-"]@	c #89B09A",
-"^@	c #59815A",
-"/@	c #97AAA3",
-"(@	c #A3AFB5",
-"_@	c #A8AEBD",
-":@	c #4E7454",
-"<@	c #406C43",
-"[@	c #698F6C",
-"}@	c #F0F7FA",
-"|@	c #9CB69D",
-"1@	c #366553",
-"2@	c #618393",
-"3@	c #BACADA",
-"4@	c #A7BDCE",
-"5@	c #CCD6E6",
-"6@	c #D7DDED",
-"7@	c #ACC1D0",
-"8@	c #ABC1D1",
-"9@	c #CAD3E1",
-"0@	c #4B7292",
-"a@	c #C7E8EA",
-"b@	c #CAE7E9",
-"c@	c #9FC1B2",
-"d@	c #6A9371",
-"e@	c #4D7A4D",
-"f@	c #748190",
-"g@	c #426F43",
-"h@	c #C2D4C9",
-"i@	c #EAF2F0",
-"j@	c #698A96",
-"k@	c #A6B8C9",
-"l@	c #D3D9EB",
-"m@	c #C9D4E4",
-"n@	c #6B96A7",
-"o@	c #6D98A8",
-"p@	c #D5DCEA",
-"q@	c #DAE0EE",
-"r@	c #6A8AA7",
-"s@	c #87ABBE",
-"t@	c #4B794B",
-"u@	c #939EA9",
-"v@	c #547462",
-"w@	c #86A78A",
-"x@	c #EDF6F9",
-"y@	c #DBE4EB",
-"z@	c #4C7193",
-"A@	c #E2E7ED",
-"B@	c #D0D8E9",
-"C@	c #D2D9EB",
-"D@	c #90AEC0",
-"E@	c #A2BCCA",
-"F@	c #DDE2F0",
-"G@	c #D4DBE8",
-"H@	c #4B7192",
-"I@	c #B0D2DA",
-"J@	c #608A65",
-"K@	c #88989B",
-"L@	c #838DA0",
-"M@	c #3D6E3B",
-"N@	c #D8E6E4",
-"O@	c #EDF5F8",
-"P@	c #6686A2",
-"Q@	c #AABCCC",
-"R@	c #4F8595",
-"S@	c #317282",
-"T@	c #6090A1",
-"U@	c #DBE0EF",
-"V@	c #DDE2EF",
-"W@	c #ABBCCE",
-"X@	c #527997",
-"Y@	c #B1D0D9",
-"Z@	c #759D7D",
-"`@	c #7B908B",
-" #	c #6D8281",
-".#	c #668D69",
-"+#	c #E9F4F6",
-"@#	c #E8F2F6",
-"##	c #87A1B6",
-"$#	c #708EA7",
-"%#	c #FBFBFE",
-"&#	c #C1CDDF",
-"*#	c #236879",
-"=#	c #79A0B1",
-"-#	c #6593A3",
-";#	c #276B7C",
-">#	c #D2DBEA",
-",#	c #ABBBCE",
-"'#	c #4B7193",
-")#	c #85A7BA",
-"!#	c #CEE7ED",
-"~#	c #9ABBA8",
-"{#	c #567D5A",
-"]#	c #8D97A6",
-"^#	c #667F77",
-"/#	c #80A385",
-"(#	c #BFD2DC",
-"_#	c #577B9A",
-":#	c #819BB3",
-"<#	c #EDF1F5",
-"[#	c #6187CB",
-"}#	c #CFD7E8",
-"|#	c #83A6B7",
-"1#	c #367485",
-"2#	c #327283",
-"3#	c #98B5C3",
-"4#	c #DDE3EF",
-"5#	c #DAE1EB",
-"6#	c #718EA9",
-"7#	c #4C7393",
-"8#	c #6E90AA",
-"9#	c #8DACBE",
-"0#	c #71958F",
-"a#	c #3E6B5C",
-"b#	c #3E696A",
-"c#	c #587B95",
-"d#	c #527695",
-"e#	c #C1CEDA",
-"f#	c #6086CB",
-"g#	c #2B6E7E",
-"h#	c #7BA1B1",
-"i#	c #568A9A",
-"j#	c #D8DFE9",
-"k#	c #B2C2D3",
-"l#	c #8BA4BA",
-"m#	c #6A8AA5",
-"n#	c #7C97AF",
-"o#	c #A2B5C5",
-"p#	c #C7D2DE",
-"q#	c #F0F2F7",
-"r#	c #C9D1E5",
-"s#	c #789FB1",
-"t#	c #92B0C0",
-"u#	c #8BACBC",
-"v#	c #82A6B5",
-"w#	c #DCE2EF",
-"x#	c #698ECD",
-"y#	c #5F86CA",
-"z#	c #CED5E7",
-"A#	c #D9DEEC",
-"B#	c #D1D9E9",
-"C#	c #D4DBEA",
-"D#	c #D6DDEC",
-"E#	c #D8DFEC",
-"F#	c #DAE1EE",
-"G#	c #698DCD",
-"H#	c #5F85CA",
-"I#	c #CED6E7",
-"J#	c #D1D8E8",
-"K#	c #D3DAEA",
-"L#	c #D5DCEB",
-"M#	c #D8DEEC",
-"N#	c #DAE0ED",
-"O#	c #5E85CA",
-"P#	c #CDD5E7",
-"Q#	c #D7DEEC",
-"R#	c #D9DFED",
-"S#	c #527DC7",
-"T#	c #507CC7",
-"U#	c #A0B3DA",
-"V#	c #A1B4DB",
-"W#	c #A1B5DC",
-"X#	c #A1B4DC",
-"Y#	c #A2B5DB",
-"Z#	c #A2B5DC",
-"`#	c #A3B6DC",
-" $	c #A3B7DC",
-".$	c #A4B6DC",
-"+$	c #A3B7DD",
-"@$	c #A4B7DD",
-"#$	c #8EA5D4",
-". + + + + + + + + @ # # # # $ % & % % % * = = - ; ; ; > ; > > , ",
-"' ) ) ) ) ) ) ) ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 ",
-"' a a a a a a a b c ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 ",
-"d e e e e f g g g c ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 ",
-"d h h h i j j j k l ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 ",
-"d m n o p p q r s t ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 ",
-"d j u v v v v w x t ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 ",
-"y z A B v C D E F l ~ { ] ^ / ( G H I J K L M N O 4 5 6 7 8 9 0 ",
-"P Q R S v T U V V l ~ { ] ^ / H W X Y Z `  ...+. at .#.5 6 7 8 9 0 ",
-"P R $.%.v &.*.=.-.l ~ { ] ;.>.,.'.).!.~.{.].^./.(._.:.<.7 8 9 0 ",
-"P s [.}.v |.1.-.2.l ~ { ] 3.4.5.6.).!.~.7.8.9.0.a.b.c.d.7 8 9 0 ",
-"P e.F f.v |.g.h.i.j.~ { k.l.m.n.o.).p.q.r.s.t.u.v.w.x.y.z.8 9 0 ",
-"A.e.B.C.D.g.h.E.F.G.~ H.I.J.K.L.M.N.O.P.Q.R.S.T.v.w.U.V.W.X.9 0 ",
-"A.Y.Z.`.`. +.+++ at +G.~ #+$+%+&+*+M.=+-+;+>+,+'+)+!+w.U.~+{+]+9 0 ",
-"^+Y./+v (+_+v :+<+G.~ [+}+|+1+*+2+r.O.3+4+5+6+7+8+w.U.~+9+0+9 0 ",
-"a+F /+v b+c+v d+e+f+~ g+h+i+1+j+k+l+m+n+o+p+q+r+v.w.U.~+s+t+9 0 ",
-"a+F u+v v+v w+x+y+f+~ z+A+B+1+C+D+E+F+G+H+I+J+K+L+M+N+~+O+P+Q+0 ",
-"a+B.R+v S+T+U+V+W+X+~ Y+Z+`+1+ @. at E+F+G++@@@#@$@%@&@^.*@=@- at 9 0 ",
-";@B.R+v >@, at v '@)@f+~ !@~@{@1+]@^@/@(@_ at +@@@t.:@<@[@}@|@1 at 2@9 0 ",
-";@B.3 at 4@5 at 6@7 at 8@W+f+~ 9 at 0@a at 1+b@c at d@e at n++@@@t.f at g@h@}@i at j@k at 9 0 ",
-";@B.l at m@n at o@p at q@)@f+~ { r at s@1+*+M.).!.t at u@@@t.v at w@x@}@y at z@A at 9 0 ",
-"+ B at C@D at v v E at q@F at f+~ { G at H@I@*+M.).!.J at K@@@L at M@N at x@O at P@Q at 8 9 0 ",
-"+ [.*.R at T+S@T at U@V at f+~ { ] W at X@Y at M.).!.Z@`@@@ #.#+#@###$#%#8 9 0 ",
-"+ [.&#*#=#-#;#>#V at f+~ { ] ^ ,#'#)#!#!.~#{#]#^#/#(#_#:#<#7 8 9 0 ",
-"[#}#|#v 1#2#v 3#4#j.~ { ] ^ / 5#6#7#8#9#0#a#b#c#d#e#5 6 7 8 9 0 ",
-"f#x T+g#h#h#U+i#F at j.~ { ] ^ / ( _ j#k#l#m#n#o#p#q#4 5 6 7 8 9 0 ",
-"+ r#s#t#h.6 at u#v#w#x#~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 ",
-"y#z#Y.*.2.x+A#W+V at x#~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 ",
-"y#z }#B#C#D#E#F#V at G#~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 ",
-"H#j I#J#K#L#M#N#V at j.~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 ",
-"O#h P#[.*.h.Q#R#)@j.~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 ",
-"S#H#H#H#H#O#O#y#y#T#U#; > > ; V#W#W#X#Y#Z#Z#`#`#`#`# $.$+$@$0 #$"};
diff --git a/src/Flextra/FLEXTRA_PREPARE.xpm b/src/Flextra/FLEXTRA_PREPARE.xpm
deleted file mode 100644
index 6942789..0000000
--- a/src/Flextra/FLEXTRA_PREPARE.xpm
+++ /dev/null
@@ -1,377 +0,0 @@
-/* XPM */
-static char * FLEXTRA_PREPARE_xpm[] = {
-"32 32 342 2",
-"  	c None",
-". 	c #527DC7",
-"+ 	c #6489CB",
-"@ 	c #537DC7",
-"# 	c #9DB1D9",
-"$ 	c #9DB1DA",
-"% 	c #9DB2DA",
-"& 	c #9EB2DA",
-"* 	c #9EB2DB",
-"= 	c #9FB3DB",
-"- 	c #9FB3DA",
-"; 	c #A0B3DB",
-"> 	c #A0B4DB",
-", 	c #8BA3D3",
-"' 	c #C8CFE4",
-") 	c #658ACC",
-"! 	c #E0E5F0",
-"~ 	c #E2E7F2",
-"{ 	c #E4E9F3",
-"] 	c #E6EAF4",
-"^ 	c #E8ECF5",
-"/ 	c #EAEEF6",
-"( 	c #ECEFF6",
-"_ 	c #EEF1F7",
-": 	c #EFF1F8",
-"< 	c #F1F3F9",
-"[ 	c #F2F4F9",
-"} 	c #F4F5FA",
-"| 	c #F5F6FB",
-"1 	c #F6F8FB",
-"2 	c #F8F9FC",
-"3 	c #F9FAFC",
-"4 	c #FAFBFD",
-"5 	c #FBFBFD",
-"6 	c #FCFCFE",
-"7 	c #FDFDFE",
-"8 	c #FDFEFE",
-"9 	c #9CB1DA",
-"0 	c #C9D0E5",
-"a 	c #CAD0E5",
-"b 	c #668BCC",
-"c 	c #6488CB",
-"d 	c #CAD1E5",
-"e 	c #CBD1E5",
-"f 	c #CBD2E5",
-"g 	c #668CCC",
-"h 	c #CBD2E6",
-"i 	c #CCD2E6",
-"j 	c #CCD3E6",
-"k 	c #CDD4E6",
-"l 	c #678CCC",
-"m 	c #CBD3E7",
-"n 	c #BDC9DC",
-"o 	c #BDCADC",
-"p 	c #BCCADC",
-"q 	c #BDCADD",
-"r 	c #C9D1E5",
-"s 	c #CFD5E8",
-"t 	c #6388CB",
-"u 	c #CAD2E4",
-"v 	c #216778",
-"w 	c #96B1C3",
-"x 	c #CFD6E8",
-"y 	c #EAECF3",
-"z 	c #CAC0AB",
-"A 	c #CABFA9",
-"B 	c #CABFA7",
-"C 	c #C9BEA5",
-"D 	c #CABEA3",
-"E 	c #C9BCA0",
-"F 	c #CFC4AC",
-"G 	c #87A8B9",
-"H 	c #6F99AA",
-"I 	c #508596",
-"J 	c #88A9BA",
-"K 	c #B8C8D9",
-"L 	c #D1D7E9",
-"M 	c #668CCD",
-"N 	c #E6E7EA",
-"O 	c #8E6F2A",
-"P 	c #8F702B",
-"Q 	c #91722C",
-"R 	c #93722E",
-"S 	c #93742E",
-"T 	c #94752F",
-"U 	c #91732C",
-"V 	c #9A7E40",
-"W 	c #CED4E8",
-"X 	c #A8BCCF",
-"Y 	c #6F9AAB",
-"Z 	c #D1D8EA",
-"` 	c #D2D8EA",
-" .	c #D3D8EA",
-"..	c #E5E6E9",
-"+.	c #CA9835",
-"@.	c #E2A83A",
-"#.	c #BA8D32",
-"$.	c #9A7C3D",
-"%.	c #6389CB",
-"&.	c #CED5E8",
-"*.	c #D0D5E9",
-"=.	c #A8BDCF",
-"-.	c #719AAC",
-";.	c #D4D9EB",
-">.	c #D4DAEB",
-",.	c #E6E6E8",
-"'.	c #CA983B",
-").	c #E2A841",
-"!.	c #BA8D36",
-"~.	c #9A7C3E",
-"{.	c #D0D7E8",
-"].	c #A9BECF",
-"^.	c #719AAB",
-"/.	c #D4D9EA",
-"(.	c #D4DAEA",
-"_.	c #D4DBEB",
-":.	c #678DCD",
-"<.	c #E5E5E7",
-"[.	c #CA9940",
-"}.	c #E1A949",
-"|.	c #BA8E3A",
-"1.	c #6289CB",
-"2.	c #CFD6E9",
-"3.	c #D5DBEB",
-"4.	c #D6DBEB",
-"5.	c #E4E5E6",
-"6.	c #CA9946",
-"7.	c #E1AA51",
-"8.	c #BA8E3F",
-"9.	c #D1D8E9",
-"0.	c #D2D8E9",
-"a.	c #D3DAEB",
-"b.	c #D5DBEC",
-"c.	c #D6DCEC",
-"d.	c #D7DCED",
-"e.	c #E5E4E5",
-"f.	c #C99A4B",
-"g.	c #E0AB58",
-"h.	c #B98F42",
-"i.	c #6288CB",
-"j.	c #779EAF",
-"k.	c #3C7889",
-"l.	c #427D8D",
-"m.	c #6391A2",
-"n.	c #CCD6E6",
-"o.	c #D8DEED",
-"p.	c #E4E4E5",
-"q.	c #C99B51",
-"r.	c #E0AC60",
-"s.	c #B98F47",
-"t.	c #6694A5",
-"u.	c #7DA3B3",
-"v.	c #6392A2",
-"w.	c #87A9B9",
-"x.	c #D9DFED",
-"y.	c #688DCE",
-"z.	c #E4E4E4",
-"A.	c #C89B56",
-"B.	c #DFAD68",
-"C.	c #B9904B",
-"D.	c #9A7C3F",
-"E.	c #6291A2",
-"F.	c #96B4C2",
-"G.	c #D9DFEE",
-"H.	c #E2E5ED",
-"I.	c #B5A583",
-"J.	c #B3A17C",
-"K.	c #B19E76",
-"L.	c #C89C5C",
-"M.	c #DFAE6F",
-"N.	c #B9904F",
-"O.	c #937431",
-"P.	c #B9A67F",
-"Q.	c #BAA77F",
-"R.	c #CABB9D",
-"S.	c #6188CB",
-"T.	c #337283",
-"U.	c #5F8FA0",
-"V.	c #DADFEE",
-"W.	c #688CCE",
-"X.	c #C7BFAD",
-"Y.	c #957531",
-"Z.	c #A2803E",
-"`.	c #A17F3D",
-" +	c #CEA468",
-".+	c #DEB177",
-"++	c #C29A5C",
-"@+	c #A1803E",
-"#+	c #A3803F",
-"$+	c #917330",
-"%+	c #E8E4D8",
-"&+	c #6794A4",
-"*+	c #B1C4D5",
-"=+	c #3D7989",
-"-+	c #24697A",
-";+	c #BCCDDB",
-">+	c #DBE1EE",
-",+	c #B3A27D",
-"'+	c #91722E",
-")+	c #D0A971",
-"!+	c #DCB47E",
-"~+	c #C29D62",
-"{+	c #D3C8B0",
-"]+	c #B7C7D8",
-"^+	c #96B3C3",
-"/+	c #6091A1",
-"(+	c #E5E9F0",
-"_+	c #A08953",
-":+	c #9C7C3C",
-"<+	c #D8B481",
-"[+	c #DBB785",
-"}+	c #CFAC77",
-"|+	c #91732F",
-"1+	c #BAA880",
-"2+	c #6187CA",
-"3+	c #B9C8D9",
-"4+	c #A7BECE",
-"5+	c #CDD6E6",
-"6+	c #D6DDEC",
-"7+	c #ABC1D1",
-"8+	c #AEC3D2",
-"9+	c #DCE1EF",
-"0+	c #DEDEDD",
-"a+	c #947636",
-"b+	c #A8894C",
-"c+	c #D9BA8C",
-"d+	c #D6B788",
-"e+	c #9A7D3D",
-"f+	c #A38A54",
-"g+	c #F7F8F8",
-"h+	c #6087CA",
-"i+	c #C5D2E1",
-"j+	c #6B96A7",
-"k+	c #709BAA",
-"l+	c #DBE0EE",
-"m+	c #DDE2EF",
-"n+	c #D2CBBC",
-"o+	c #B99D67",
-"p+	c #D8BE93",
-"q+	c #A78A4E",
-"r+	c #957837",
-"s+	c #ECE9E4",
-"t+	c #D0D8E9",
-"u+	c #D2DAEA",
-"v+	c #86A8BA",
-"w+	c #DDE2F0",
-"x+	c #BCAF8E",
-"y+	c #8F702C",
-"z+	c #C7B082",
-"A+	c #D6C19A",
-"B+	c #B79E6A",
-"C+	c #8F702A",
-"D+	c #DAD1C1",
-"E+	c #D0D7E9",
-"F+	c #D2D9EA",
-"G+	c #467F90",
-"H+	c #4A8292",
-"I+	c #2A6D7E",
-"J+	c #6A96A6",
-"K+	c #DBE0EF",
-"L+	c #DCE2F0",
-"M+	c #EDEFF5",
-"N+	c #A7915F",
-"O+	c #957938",
-"P+	c #D0BE98",
-"Q+	c #C5B186",
-"R+	c #C2B392",
-"S+	c #6086CA",
-"T+	c #B9C9D9",
-"U+	c #81A6B7",
-"V+	c #5B8D9D",
-"W+	c #2D6E80",
-"X+	c #D7DDEB",
-"Y+	c #DEE2EF",
-"Z+	c #688DCD",
-"`+	c #E7E7E7",
-" @	c #977C3E",
-".@	c #A0864C",
-"+@	c #967838",
-"@@	c #AA9463",
-"#@	c #F5F7F9",
-"$@	c #CFD7E8",
-"%@	c #7AA0B1",
-"&@	c #397786",
-"*@	c #317182",
-"=@	c #A1BBC9",
-"-@	c #DDE3EF",
-";@	c #DAD5CA",
-">@	c #8F712C",
-",@	c #987C3F",
-"'@	c #EEECEB",
-")@	c #3C788A",
-"!@	c #307181",
-"~@	c #7BA1B0",
-"{@	c #77A0B0",
-"]@	c #C9BDA3",
-"^@	c #DED9CE",
-"/@	c #5F86CA",
-"(@	c #C5CFE2",
-"_@	c #799FB0",
-":@	c #96B2C3",
-"<@	c #D7DDED",
-"[@	c #87A9BA",
-"}@	c #85A9B8",
-"|@	c #DDE3F0",
-"1@	c #698ECD",
-"2@	c #5F85C9",
-"3@	c #D5DCEB",
-"4@	c #D7DDEC",
-"5@	c #D9DEED",
-"6@	c #CDD5E7",
-"7@	c #D2D9E9",
-"8@	c #D4DBEA",
-"9@	c #D8DFED",
-"0@	c #698DCD",
-"a@	c #5E85C9",
-"b@	c #CCD4E6",
-"c@	c #CED6E7",
-"d@	c #D1D8E8",
-"e@	c #D3DAEA",
-"f@	c #D6DCEB",
-"g@	c #DBE0ED",
-"h@	c #CBD3E6",
-"i@	c #CED5E7",
-"j@	c #D3D9EA",
-"k@	c #D7DEED",
-"l@	c #DADFED",
-"m@	c #5F85CA",
-"n@	c #5E85CA",
-"o@	c #557FC7",
-"p@	c #A0B3DA",
-"q@	c #A1B4DB",
-"r@	c #A1B5DC",
-"s@	c #A1B4DC",
-"t@	c #A2B5DB",
-"u@	c #A2B5DC",
-"v@	c #A3B6DC",
-"w@	c #A4B6DC",
-"x@	c #A3B7DC",
-"y@	c #A4B7DD",
-"z@	c #A4B7DC",
-"A@	c #8CA4D3",
-". + + + + + + + + @ # # # # $ % % & & & * = = - ; ; ; > ; > > , ",
-"+ ' ' ' ' ' ' ' ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 ",
-"+ 0 0 0 0 0 0 0 a b ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 ",
-"c d d d d e f f f g ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 ",
-"c h h h i j j j k l ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 ",
-"c m n o p p q r s g ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 ",
-"t u v v v v v w x g ! ~ { ] ^ / y z A B C C D E F 3 4 5 6 7 8 9 ",
-"t j G H v I J K L M ! ~ { ] ^ / N O P Q R S T U V 3 4 5 6 7 8 9 ",
-"t W s X v Y Z `  .M ! ~ { ] ^ / ..O +. at .@. at .@.#.$.3 4 5 6 7 8 9 ",
-"%.&.*.=.v -.` ;.>.M ! ~ { ] ^ / ,.O '.).).).).!.~.3 4 5 6 7 8 9 ",
-"%.s {.].v ^./.(._.:.! ~ { ] ^ / <.O [.}.}.}.}.|.~.3 4 5 6 7 8 9 ",
-"1.2.L ].v -.>.3.4.:.! ~ { ] ^ / 5.O 6.7.7.7.7.8.~.3 4 5 6 7 8 9 ",
-"1.2.9.0.a.>.b.c.d.:.! ~ { ] ^ / e.O f.g.g.g.g.h.~.3 4 5 6 7 8 9 ",
-"i.L j.k.k.l.m.n.o.:.! ~ { ] ^ / p.O q.r.r.r.r.s.~.3 4 5 6 7 8 9 ",
-"i.L t.v u.v.v w.x.y.! ~ { ] ^ / z.O A.B.B.B.B.C.D.3 4 5 6 7 8 9 ",
-"i.L t.v u.E.v F.G.y.! ~ H.I.J.J.K.O L.M.M.M.M.N.O.P.Q.Q.R.7 8 9 ",
-"S.9.t.v T.v U.x.V.W.! ~ { X.O Y.Z.`. +.+.+.+.+++ at +#+Q $+%+7 8 9 ",
-"S.9.&+v *+=+-+;+>+y.! ~ { ] ,+'+)+!+!+!+!+!+!+!+!+~+O {+6 7 8 9 ",
-"S.9.&+v ]+^+v /+>+y.! ~ { ] (+_+:+<+[+[+[+[+[+[+}+|+1+5 6 7 8 9 ",
-"2+9.3+4+5+6+7+8+9+y.! ~ { ] ^ 0+a+b+c+c+c+c+c+d+e+f+g+5 6 7 8 9 ",
-"h+9.a.i+j+k+o.l+m+y.! ~ { ] ^ / n+P o+p+p+p+p+q+r+s+4 5 6 7 8 9 ",
-"2+t+u+v+v v 7+l+w+y.! ~ { ] ^ / ( x+y+z+A+A+B+C+D+3 4 5 6 7 8 9 ",
-"2+E+F+G+H+I+J+K+L+y.! ~ { ] ^ / ( M+N+O+P+Q+y+R+2 3 4 5 6 7 8 9 ",
-"S+{.T+v U+V+W+X+Y+Z+! ~ { ] ^ / ( _ `+ @. at +@@@#@2 3 4 5 6 7 8 9 ",
-"S+$@%@v &@*@v =@- at Z+! ~ { ] ^ / ( _ : ;@>@,@'@1 2 3 4 5 6 7 8 9 ",
-"S+x )@!@~@{@v U.w+Z+! ~ { ] ^ / ( _ : < ]@^@| 1 2 3 4 5 6 7 8 9 ",
-"/@(@_@:@3.<@[@}@|@1@! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 ",
-"2@&.E+u+3 at 4@5 at l+m+1@! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 ",
-"2 at 6@$@7 at 8@6+9@>+m+0@! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 ",
-"a at b@c at d@e at f@o.g at m+Z+! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 ",
-"a at h@i@{.j at 3@k at l@9+Z+! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 ",
-". m at m@m at m@n at n@/@/@o at p@; > > ; q at r@r at s@t at u@u at v@v at v@w at x@w at y@y at z@A@"};
diff --git a/src/Flextra/FLEXTRA_RUN.xpm b/src/Flextra/FLEXTRA_RUN.xpm
deleted file mode 100644
index fe08da7..0000000
--- a/src/Flextra/FLEXTRA_RUN.xpm
+++ /dev/null
@@ -1,399 +0,0 @@
-/* XPM */
-static char * FLEXTRA_RUN_xpm[] = {
-"32 32 364 2",
-"  	c None",
-". 	c #537DC7",
-"+ 	c #6488CB",
-"@ 	c #6489CB",
-"# 	c #5780C8",
-"$ 	c #9DB1D9",
-"% 	c #9DB1DA",
-"& 	c #9EB2DA",
-"* 	c #9DB2DA",
-"= 	c #9EB2DB",
-"- 	c #9FB3DB",
-"; 	c #9FB3DA",
-"> 	c #A0B3DB",
-", 	c #A0B4DB",
-"' 	c #8EA5D4",
-") 	c #6186CA",
-"! 	c #C8CFE4",
-"~ 	c #6A8ECD",
-"{ 	c #E0E4F0",
-"] 	c #E2E6F2",
-"^ 	c #E4E8F3",
-"/ 	c #E6EAF3",
-"( 	c #E8EBF5",
-"_ 	c #EAEDF6",
-": 	c #ECEEF6",
-"< 	c #EEF0F7",
-"[ 	c #EFF1F8",
-"} 	c #F1F3F9",
-"| 	c #F2F4F9",
-"1 	c #F4F5FA",
-"2 	c #F5F6FB",
-"3 	c #F6F7FB",
-"4 	c #F7F9FC",
-"5 	c #F9FAFC",
-"6 	c #FAFAFD",
-"7 	c #FBFBFD",
-"8 	c #FCFCFD",
-"9 	c #FDFDFE",
-"0 	c #FDFEFE",
-"a 	c #A7BADE",
-"b 	c #C9D0E5",
-"c 	c #CAD0E5",
-"d 	c #6086CA",
-"e 	c #CAD1E5",
-"f 	c #CBD1E5",
-"g 	c #CBD2E5",
-"h 	c #CBD2E6",
-"i 	c #CCD2E6",
-"j 	c #CCD3E6",
-"k 	c #CDD4E6",
-"l 	c #CBD3E7",
-"m 	c #BCC9DD",
-"n 	c #BDCADC",
-"o 	c #BCCADC",
-"p 	c #BDCADD",
-"q 	c #C8D0E5",
-"r 	c #CFD5E8",
-"s 	c #216778",
-"t 	c #92B0C1",
-"u 	c #CFD6E8",
-"v 	c #6B8FCD",
-"w 	c #CED0DF",
-"x 	c #8787AC",
-"y 	c #8282A7",
-"z 	c #8284A8",
-"A 	c #8283A8",
-"B 	c #8384A8",
-"C 	c #8485A9",
-"D 	c #8586AA",
-"E 	c #8787AA",
-"F 	c #8888AB",
-"G 	c #8889AC",
-"H 	c #8485A8",
-"I 	c #9899B7",
-"J 	c #CDD4E7",
-"K 	c #87A9B9",
-"L 	c #729AAB",
-"M 	c #4E8395",
-"N 	c #88A9BA",
-"O 	c #B8C7D8",
-"P 	c #D1D7E9",
-"Q 	c #6B8FCE",
-"R 	c #E0E3EE",
-"S 	c #999BB9",
-"T 	c #74759D",
-"U 	c #454F8C",
-"V 	c #38458A",
-"W 	c #414D8F",
-"X 	c #495594",
-"Y 	c #535E99",
-"Z 	c #5A669E",
-"` 	c #636FA4",
-" .	c #6C76AA",
-"..	c #767EAD",
-"+.	c #787DA7",
-"@.	c #7476A0",
-"#.	c #8F8FAF",
-"$.	c #CDD4E8",
-"%.	c #CED5E8",
-"&.	c #A9BECF",
-"*.	c #6D98A9",
-"=.	c #D1D8EA",
-"-.	c #D2D8EA",
-";.	c #BABDD1",
-">.	c #7979A0",
-",.	c #5A6194",
-"'.	c #344287",
-").	c #313F86",
-"!.	c #334187",
-"~.	c #3C498C",
-"{.	c #435090",
-"].	c #4D5996",
-"^.	c #56609B",
-"/.	c #5E69A1",
-"(.	c #6B72A2",
-"_.	c #73749E",
-":.	c #5F669A",
-"<.	c #646DA1",
-"[.	c #9192B2",
-"}.	c #D0D5E8",
-"|.	c #AABED0",
-"1.	c #6E98AA",
-"2.	c #D2D9EA",
-"3.	c #D3D9EA",
-"4.	c #D4DAEA",
-"5.	c #DADDEB",
-"6.	c #77779E",
-"7.	c #7679A0",
-"8.	c #7879A2",
-"9.	c #777BA3",
-"0.	c #797CA3",
-"a.	c #797BA3",
-"b.	c #7B7DA4",
-"c.	c #7C7EA4",
-"d.	c #7D7FA5",
-"e.	c #7F81A6",
-"f.	c #7B7CA2",
-"g.	c #646897",
-"h.	c #475391",
-"i.	c #535F9A",
-"j.	c #5F85CA",
-"k.	c #D0D7E8",
-"l.	c #ABBED0",
-"m.	c #D4D9EA",
-"n.	c #D4DBEB",
-"o.	c #6C8FCE",
-"p.	c #8589AC",
-"q.	c #395A8F",
-"r.	c #456497",
-"s.	c #536F9D",
-"t.	c #5F7AA6",
-"u.	c #6B84AD",
-"v.	c #7A8FB5",
-"w.	c #879ABC",
-"x.	c #93A5C2",
-"y.	c #A0B0C9",
-"z.	c #8C94B5",
-"A.	c #4A5490",
-"B.	c #455191",
-"C.	c #CFD6E9",
-"D.	c #ABC0D1",
-"E.	c #6F98AA",
-"F.	c #D4DAEB",
-"G.	c #D5DBEB",
-"H.	c #D6DBEB",
-"I.	c #D1D8E9",
-"J.	c #D2D8E9",
-"K.	c #D3DAEB",
-"L.	c #D6DCEC",
-"M.	c #D7DCED",
-"N.	c #0F1622",
-"O.	c #090C12",
-"P.	c #0B0E13",
-"Q.	c #0B0F14",
-"R.	c #0E1115",
-"S.	c #0F1116",
-"T.	c #3A424E",
-"U.	c #5F86CA",
-"V.	c #D0D7E9",
-"W.	c #799FB1",
-"X.	c #3C7889",
-"Y.	c #417B8C",
-"Z.	c #6190A1",
-"`.	c #CAD4E4",
-" +	c #D8DEED",
-".+	c #6C90CF",
-"++	c #1E2D43",
-"@+	c #1F293A",
-"#+	c #242E3E",
-"$+	c #283141",
-"%+	c #2D3543",
-"&+	c #333A46",
-"*+	c #535E6E",
-"=+	c #6995A6",
-"-+	c #7BA1B2",
-";+	c #6593A3",
-">+	c #83A7B7",
-",+	c #D9DEED",
-"'+	c #8E94B5",
-")+	c #5E86CA",
-"!+	c #6A95A6",
-"~+	c #7BA2B1",
-"{+	c #6493A2",
-"]+	c #92B1C1",
-"^+	c #D9DFEE",
-"/+	c #3B5782",
-"(+	c #465D85",
-"_+	c #50678B",
-":+	c #5A7092",
-"<+	c #667898",
-"[+	c #71829E",
-"}+	c #8494AF",
-"|+	c #337283",
-"1+	c #5D8F9F",
-"2+	c #D8DDEC",
-"3+	c #DADFEE",
-"4+	c #6D90CF",
-"5+	c #05080D",
-"6+	c #000000",
-"7+	c #333843",
-"8+	c #8C93B4",
-"9+	c #B0C3D3",
-"0+	c #3F7A8A",
-"a+	c #236879",
-"b+	c #BACBDA",
-"c+	c #DBE0EE",
-"d+	c #304568",
-"e+	c #354867",
-"f+	c #3F506C",
-"g+	c #475671",
-"h+	c #4F5E76",
-"i+	c #57657A",
-"j+	c #728097",
-"k+	c #5E85CA",
-"l+	c #6996A6",
-"m+	c #B3C6D6",
-"n+	c #99B5C5",
-"o+	c #5E8F9F",
-"p+	c #DBE1EE",
-"q+	c #B9C9D8",
-"r+	c #A6BECE",
-"s+	c #CDD6E7",
-"t+	c #D5DDEC",
-"u+	c #ABC1D0",
-"v+	c #ADC3D2",
-"w+	c #DCE1EF",
-"x+	c #446694",
-"y+	c #52719A",
-"z+	c #5E7BA3",
-"A+	c #6B86AB",
-"B+	c #5D85CA",
-"C+	c #D3D9EB",
-"D+	c #C7D2E2",
-"E+	c #6A95A7",
-"F+	c #6F99AA",
-"G+	c #D7DEEC",
-"H+	c #DAE0EE",
-"I+	c #DDE2EF",
-"J+	c #3CA04A",
-"K+	c #50B944",
-"L+	c #50BB45",
-"M+	c #4B9D65",
-"N+	c #5D85C9",
-"O+	c #D0D8E9",
-"P+	c #D2D9EB",
-"Q+	c #8AAABC",
-"R+	c #A8C0CF",
-"S+	c #DDE2F0",
-"T+	c #48AD49",
-"U+	c #74F030",
-"V+	c #4DA062",
-"W+	c #4A8192",
-"X+	c #488091",
-"Y+	c #2D6F80",
-"Z+	c #6695A4",
-"`+	c #DBE0EF",
-" @	c #3EA449",
-".@	c #57C53E",
-"+@	c #57C63E",
-"@@	c #4D9F64",
-"#@	c #5D84C9",
-"$@	c #BBCADB",
-"%@	c #226879",
-"&@	c #7EA4B4",
-"*@	c #5F8FA0",
-"=@	c #2B6E7F",
-"-@	c #D5DCEB",
-";@	c #6D90CE",
-">@	c #436B8D",
-",@	c #4E7491",
-"'@	c #597D99",
-")@	c #6887A6",
-"!@	c #686FA0",
-"~@	c #8889AB",
-"{@	c #5C84C9",
-"]@	c #CFD7E8",
-"^@	c #7DA2B3",
-"/@	c #397786",
-"(@	c #327183",
-"_@	c #9FBAC7",
-":@	c #DDE3EF",
-"<@	c #475392",
-"[@	c #676C9C",
-"}@	c #8385A9",
-"|@	c #E1E2EA",
-"1@	c #3E7A8B",
-"2@	c #2E7081",
-"3@	c #7AA1B1",
-"4@	c #79A0B1",
-"5@	c #5C8D9E",
-"6@	c #8B91B3",
-"7@	c #555D92",
-"8@	c #7477A0",
-"9@	c #B5B7CE",
-"0@	c #C7D0E3",
-"a@	c #799FB0",
-"b@	c #95B1C2",
-"c@	c #D7DDED",
-"d@	c #83A6B6",
-"e@	c #DDE3F0",
-"f@	c #DCE0ED",
-"g@	c #8788AB",
-"h@	c #8083A7",
-"i@	c #8285A8",
-"j@	c #8386A9",
-"k@	c #8486A9",
-"l@	c #8689AA",
-"m@	c #8689AB",
-"n@	c #898AAB",
-"o@	c #898CAD",
-"p@	c #888AAE",
-"q@	c #EBECF2",
-"r@	c #5C83C9",
-"s@	c #CED5E7",
-"t@	c #D7DDEC",
-"u@	c #D9DEEC",
-"v@	c #D1D9E9",
-"w@	c #D4DBEA",
-"x@	c #D6DDEC",
-"y@	c #D8DFEC",
-"z@	c #DAE1EE",
-"A@	c #CED6E7",
-"B@	c #D1D8E8",
-"C@	c #D3DAEA",
-"D@	c #D8DEEC",
-"E@	c #DAE0ED",
-"F@	c #CDD5E7",
-"G@	c #D9DFED",
-"H@	c #507BC6",
-"I@	c #537EC7",
-"J@	c #A0B3DA",
-"K@	c #A1B4DB",
-"L@	c #A1B5DC",
-"M@	c #A1B4DC",
-"N@	c #A2B5DB",
-"O@	c #A2B5DC",
-"P@	c #A2B6DC",
-"Q@	c #A3B6DC",
-"R@	c #A3B7DC",
-"S@	c #A4B6DC",
-"T@	c #A3B7DD",
-"U@	c #A4B7DD",
-"V@	c #A4B7DC",
-"W@	c #8FA6D5",
-". + + + + + @ @ @ # $ $ $ $ % & * & & & = - - ; > > > , > , , ' ",
-") ! ! ! ! ! ! ! ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a ",
-") b b b b b b b c ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a ",
-"d e e e e f g g g ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a ",
-"d h h h i j j j k ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a ",
-"d l m n o o p q r ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a ",
-"d j s s s s s t u v { ] ^ / ( _ w x y z A B C D E F G H I 9 0 a ",
-"d J K L s M N O P Q { ] ^ / R S T U V W X Y Z `  ...+. at .#.9 0 a ",
-"d $.%.&.s *.=.-.-.Q { ] ^ ;.>.,.'.).!.~.{.].^./.(._.:.<.[.9 0 a ",
-"d %.}.|.s 1.2.3.4.v { ] 5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.<.[.9 0 a ",
-"j.r k.l.s 1.m.4.n.o.{ ] 5.p.q.r.s.t.u.v.w.x.y.z.A.B.i.<.[.9 0 a ",
-"j.C.P D.s E.F.G.H.o.{ ] 5.p.q.r.s.t.u.v.w.x.y.z.A.B.i.<.[.9 0 a ",
-"j.C.I.J.K.F.G.L.M.o.{ ] 5.p.q.N.O.P.Q.R.S.T.y.z.A.B.i.<.[.9 0 a ",
-"U.V.W.X.X.Y.Z.`. +.+{ ] 5.p.q.++ at +#+$+%+&+*+y.z.A.B.i.<.[.9 0 a ",
-"U.V.=+s -+;+s >+,+.+{ ] 5.p.q.r.s.t.u.v.w.x.y.'+A.B.i.<.[.9 0 a ",
-")+P !+s ~+{+s ]+^+.+{ ] 5.p.q./+(+_+:+<+[+}+y.'+A.B.i.<.[.9 0 a ",
-")+P !+s |+s 1+2+3+4+{ ] 5.p.q.5+6+6+6+6+6+7+y.8+A.B.i.<.[.9 0 a ",
-")+I.=+s 9+0+a+b+c+4+{ ] 5.p.q.d+e+f+g+h+i+j+y.8+A.B.i.<.[.9 0 a ",
-"k+I.l+s m+n+s o+p+4+{ ] 5.p.q.r.s.t.u.v.w.x.y.8+A.B.i.<.[.9 0 a ",
-"k+I.q+r+s+t+u+v+w+.+{ ] 5.p.q.x+y+z+A+v.w.x.y.8+A.B.i.<.[.9 0 a ",
-"B+I.C+D+E+F+G+H+I+.+{ ] 5.p.q.J+K+L+M+v.w.x.y.8+A.B.i.<.[.9 0 a ",
-"N+O+P+Q+s s R+H+S+.+{ ] 5.p.q.T+U+U+V+v.w.x.y.8+A.B.i.<.[.9 0 a ",
-"N+k.2.W+X+Y+Z+`+I+.+{ ] 5.p.q. @. at +@@@v.w.x.y.8+A.B.i.<.[.9 0 a ",
-"#@k.$@%@&@*@=@- at I+;@{ ] 5.p.q.>@,@'@)@v.w.x.y.8+A.B.i.!@~@9 0 a ",
-"{@]@^@s /@(@s _@:@;@{ ] 5.p.q.r.s.t.u.v.w.x.y.8+A.<@[@}@|@9 0 a ",
-"{@u 1 at 2@3 at 4@%@5 at S+;@{ ] 5.p.q.r.s.t.u.v.w.x.y.6 at 7@8 at 9@7 8 9 0 a ",
-"#@0 at a@b at G.c@N d at e@4+{ ] f at g@h at i@j at k@l at m@~@n at o@g at p@q at 6 7 8 9 0 a ",
-"r at s@V.2.n.t at u@c+I+4+{ ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a ",
-"r at J ]@v at w@x at y@z at I+4+{ ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a ",
-"r at j A at B@C at -@D at E@I+4+{ ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a ",
-"r at h F at k.2.G.G+G@w+4+{ ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a ",
-"H at j.j.j.j.k+k+U.U.I@J@; , , > K at L@L at M@N at O@P at O@Q at Q@Q at R@S at T@U at V@W@"};
diff --git a/src/Flextra/FLEXTRA_VISUALISER.xpm b/src/Flextra/FLEXTRA_VISUALISER.xpm
deleted file mode 100644
index c6e95c2..0000000
--- a/src/Flextra/FLEXTRA_VISUALISER.xpm
+++ /dev/null
@@ -1,419 +0,0 @@
-/* XPM */
-static char * FLEXTRA_VISUALISER_xpm[] = {
-"32 32 384 2",
-"  	c None",
-". 	c #507CC7",
-"+ 	c #6186CA",
-"@ 	c #6187CA",
-"# 	c #547EC7",
-"$ 	c #A3B5DC",
-"% 	c #A3B5DB",
-"& 	c #A3B6DC",
-"* 	c #A3B7DC",
-"= 	c #A4B6DC",
-"- 	c #A4B7DC",
-"; 	c #A5B7DD",
-"> 	c #A6B8DD",
-", 	c #A5B8DD",
-"' 	c #A6B9DD",
-") 	c #A7B9DE",
-"! 	c #A7B9DD",
-"~ 	c #A7BADE",
-"{ 	c #A8BADE",
-"] 	c #8EA5D4",
-"^ 	c #C8CFE4",
-"/ 	c #6A8ECD",
-"( 	c #E0E5F0",
-"_ 	c #E2E7F2",
-": 	c #E4E9F3",
-"< 	c #E6EAF4",
-"[ 	c #E8ECF5",
-"} 	c #EAEEF6",
-"| 	c #ECEEF6",
-"1 	c #EEF0F7",
-"2 	c #EFF1F8",
-"3 	c #F1F3F9",
-"4 	c #F2F4F9",
-"5 	c #F4F5FA",
-"6 	c #F5F6FB",
-"7 	c #F6F8FB",
-"8 	c #F7F9FC",
-"9 	c #F9FAFC",
-"0 	c #FAFBFD",
-"a 	c #FBFBFD",
-"b 	c #FCFCFE",
-"c 	c #FDFDFE",
-"d 	c #FDFEFE",
-"e 	c #A0B4DB",
-"f 	c #C9D0E5",
-"g 	c #CAD0E5",
-"h 	c #6086CA",
-"i 	c #CAD1E5",
-"j 	c #CBD1E5",
-"k 	c #CBD2E5",
-"l 	c #CBD2E6",
-"m 	c #CCD2E6",
-"n 	c #CCD3E6",
-"o 	c #CDD4E6",
-"p 	c #CBD3E7",
-"q 	c #BDC9DD",
-"r 	c #BDCADC",
-"s 	c #BCCADC",
-"t 	c #BDCADD",
-"u 	c #C8D0E5",
-"v 	c #CFD5E8",
-"w 	c #226879",
-"x 	c #216778",
-"y 	c #93AFC1",
-"z 	c #CFD6E8",
-"A 	c #6B8FCD",
-"B 	c #CDD4E7",
-"C 	c #87A9B9",
-"D 	c #719AAB",
-"E 	c #4E8394",
-"F 	c #88A9BA",
-"G 	c #B8C7D8",
-"H 	c #D1D7E9",
-"I 	c #6B8FCE",
-"J 	c #CED4E8",
-"K 	c #ABBED0",
-"L 	c #6C98A8",
-"M 	c #D1D8EA",
-"N 	c #D2D8EA",
-"O 	c #D3D8EA",
-"P 	c #CFD3DB",
-"Q 	c #757979",
-"R 	c #606463",
-"S 	c #616363",
-"T 	c #616563",
-"U 	c #626563",
-"V 	c #636563",
-"W 	c #636664",
-"X 	c #646764",
-"Y 	c #646664",
-"Z 	c #656765",
-"` 	c #656764",
-" .	c #666865",
-"..	c #7F817F",
-"+.	c #E3E3E4",
-"@.	c #CED5E8",
-"#.	c #D0D5E8",
-"$.	c #ABBFD0",
-"%.	c #6D98A9",
-"&.	c #D2D9EA",
-"*.	c #D4D9EA",
-"=.	c #D4DAEA",
-"-.	c #5D6160",
-";.	c #5A5C56",
-">.	c #969691",
-",.	c #5C5E58",
-"'.	c #5F625E",
-").	c #D0D7E8",
-"!.	c #ACBFD1",
-"~.	c #D4DBEB",
-"{.	c #6C8FCE",
-"].	c #373A35",
-"^.	c #B8B6B2",
-"/.	c #71757F",
-"(.	c #E7E4E0",
-"_.	c #E6ADAA",
-":.	c #E7DBD7",
-"<.	c #BFBDB8",
-"[.	c #393D37",
-"}.	c #5F85CA",
-"|.	c #CFD6E9",
-"1.	c #ACC1D1",
-"2.	c #6E98A9",
-"3.	c #D4DAEB",
-"4.	c #D5DBEB",
-"5.	c #D6DBEB",
-"6.	c #20293D",
-"7.	c #E6E3DF",
-"8.	c #E7B5B2",
-"9.	c #E52626",
-"0.	c #E6A3A1",
-"a.	c #D1D8E9",
-"b.	c #D2D8E9",
-"c.	c #D3DAEB",
-"d.	c #D5DBEC",
-"e.	c #D6DCEC",
-"f.	c #D7DCED",
-"g.	c #21293D",
-"h.	c #E5E3DF",
-"i.	c #E55050",
-"j.	c #E54C4B",
-"k.	c #E67473",
-"l.	c #E7B7B4",
-"m.	c #E7CECA",
-"n.	c #5F86CA",
-"o.	c #D0D7E9",
-"p.	c #799FB1",
-"q.	c #3C7889",
-"r.	c #417B8C",
-"s.	c #6190A2",
-"t.	c #CAD4E4",
-"u.	c #D8DEED",
-"v.	c #6C90CF",
-"w.	c #212A3E",
-"x.	c #E5E2DE",
-"y.	c #E6A9A6",
-"z.	c #E54645",
-"A.	c #E7B9B6",
-"B.	c #E54544",
-"C.	c #E68F8D",
-"D.	c #E53939",
-"E.	c #E53B3A",
-"F.	c #E7C2BF",
-"G.	c #6996A7",
-"H.	c #7BA1B2",
-"I.	c #6493A3",
-"J.	c #83A7B7",
-"K.	c #D9DEED",
-"L.	c #222B3F",
-"M.	c #E4E1DD",
-"N.	c #E7E3DF",
-"O.	c #E6ABA9",
-"P.	c #E7E0DC",
-"Q.	c #E52D2D",
-"R.	c #E54847",
-"S.	c #E7D1CE",
-"T.	c #E6A8A5",
-"U.	c #E53838",
-"V.	c #6995A7",
-"W.	c #7BA2B1",
-"X.	c #6493A2",
-"Y.	c #93B1C1",
-"Z.	c #D9DFEE",
-"`.	c #232C3F",
-" +	c #E3E0DD",
-".+	c #E69D9B",
-"++	c #E55352",
-"@+	c #E7C1BE",
-"#+	c #E7D8D4",
-"$+	c #E67675",
-"%+	c #5E86CA",
-"&+	c #6997A7",
-"*+	c #337283",
-"=+	c #5C8E9E",
-"-+	c #D8DEEC",
-";+	c #DADFEE",
-">+	c #6D90CF",
-",+	c #242C40",
-"'+	c #E2E0DC",
-")+	c #E69290",
-"!+	c #E7BFBC",
-"~+	c #B0C3D3",
-"{+	c #3F7A8A",
-"]+	c #236879",
-"^+	c #BBCBDA",
-"/+	c #DBE1EE",
-"(+	c #232C40",
-"_+	c #ABABAE",
-":+	c #AEAEB1",
-"<+	c #ADADB0",
-"[+	c #ACADB0",
-"}+	c #ABACAF",
-"|+	c #AAAAAE",
-"1+	c #A9AAAD",
-"2+	c #B1B1B4",
-"3+	c #5E85CA",
-"4+	c #B2C6D5",
-"5+	c #99B6C5",
-"6+	c #5E8F9F",
-"7+	c #B7B6B1",
-"8+	c #616572",
-"9+	c #575D6A",
-"0+	c #585E6B",
-"a+	c #595F6C",
-"b+	c #5A5F6C",
-"c+	c #5B606D",
-"d+	c #5B616E",
-"e+	c #5C626E",
-"f+	c #5D626F",
-"g+	c #6E727D",
-"h+	c #BDBBB7",
-"i+	c #393C36",
-"j+	c #BAC9D8",
-"k+	c #A7BECE",
-"l+	c #CDD6E7",
-"m+	c #D5DDEC",
-"n+	c #ABC1D1",
-"o+	c #ADC2D1",
-"p+	c #DCE1EF",
-"q+	c #666B6B",
-"r+	c #484A44",
-"s+	c #82827D",
-"t+	c #74756F",
-"u+	c #50524C",
-"v+	c #61635D",
-"w+	c #4C4E48",
-"x+	c #6C6F6B",
-"y+	c #C6D3E3",
-"z+	c #6A95A7",
-"A+	c #6F99AA",
-"B+	c #D7DEED",
-"C+	c #DBE0EE",
-"D+	c #DDE2EF",
-"E+	c #D9DDE7",
-"F+	c #8B8F92",
-"G+	c #747878",
-"H+	c #757978",
-"I+	c #767A79",
-"J+	c #777A79",
-"K+	c #5B5F5B",
-"L+	c #222520",
-"M+	c #3B3D39",
-"N+	c #313430",
-"O+	c #333531",
-"P+	c #7A7D7B",
-"Q+	c #7C7E7C",
-"R+	c #7C7F7C",
-"S+	c #7C7F7B",
-"T+	c #969997",
-"U+	c #EFEFF1",
-"V+	c #5D85C9",
-"W+	c #D0D8E9",
-"X+	c #D2DAEA",
-"Y+	c #8AABBB",
-"Z+	c #A7BFCF",
-"`+	c #DDE2F0",
-" @	c #767A7C",
-".@	c #1E221D",
-"+@	c #191F18",
-"@@	c #1A1F18",
-"#@	c #171C15",
-"$@	c #161A13",
-"%@	c #161A14",
-"&@	c #171B15",
-"*@	c #1B2019",
-"=@	c #1C201A",
-"-@	c #595C59",
-";@	c #FAFAFC",
-">@	c #4A8192",
-",@	c #478091",
-"'@	c #2D6F80",
-")@	c #6695A5",
-"!@	c #DBE0EF",
-"~@	c #DCE2F0",
-"{@	c #6D91CF",
-"]@	c #D5D9E3",
-"^@	c #1C201B",
-"/@	c #ACBCC1",
-"(@	c #B6C6CC",
-"_@	c #B2C2C8",
-":@	c #373C37",
-"<@	c #BFC0BF",
-"[@	c #BBCADB",
-"}@	c #7EA4B4",
-"|@	c #5F8FA0",
-"1@	c #2A6D7E",
-"2@	c #D5DCEB",
-"3@	c #6D91CE",
-"4@	c #E2E7F1",
-"5@	c #282C27",
-"6@	c #5B6362",
-"7@	c #687272",
-"8@	c #636D6C",
-"9@	c #1F241E",
-"0@	c #CFD7E8",
-"a@	c #7EA2B4",
-"b@	c #387686",
-"c@	c #327183",
-"d@	c #9EB9C7",
-"e@	c #DDE3EF",
-"f@	c #6D90CE",
-"g@	c #CCD0D8",
-"h@	c #898D8F",
-"i@	c #848688",
-"j@	c #858788",
-"k@	c #868889",
-"l@	c #868989",
-"m@	c #878989",
-"n@	c #888A8A",
-"o@	c #898B8B",
-"p@	c #8A8C8A",
-"q@	c #8A8C8B",
-"r@	c #8B8C8B",
-"s@	c #8B8D8B",
-"t@	c #8E908E",
-"u@	c #CECFCE",
-"v@	c #5C84C9",
-"w@	c #3E7A8B",
-"x@	c #2E7081",
-"y@	c #7AA1B1",
-"z@	c #79A0B1",
-"A@	c #5D8D9E",
-"B@	c #5D84C9",
-"C@	c #C7D0E3",
-"D@	c #799FB0",
-"E@	c #96B2C2",
-"F@	c #D7DDED",
-"G@	c #88A9BB",
-"H@	c #83A6B6",
-"I@	c #DDE3F0",
-"J@	c #D7DDEC",
-"K@	c #CDD5E7",
-"L@	c #D2D9E9",
-"M@	c #D4DBEA",
-"N@	c #D6DDEC",
-"O@	c #D8DFED",
-"P@	c #5C83C9",
-"Q@	c #CCD4E6",
-"R@	c #CED6E7",
-"S@	c #D1D8E8",
-"T@	c #D3DAEA",
-"U@	c #DBE0ED",
-"V@	c #CBD3E6",
-"W@	c #CED5E7",
-"X@	c #DADFED",
-"Y@	c #507BC6",
-"Z@	c #5B83C8",
-"`@	c #5B82C8",
-" #	c #537DC7",
-".#	c #99AED8",
-"+#	c #99AFD8",
-"@#	c #9AAED9",
-"##	c #9AAFD9",
-"$#	c #9BB0D9",
-"%#	c #9BAFD9",
-"&#	c #9BAFDA",
-"*#	c #9CB0D9",
-"=#	c #9BB1D9",
-"-#	c #9BB0DA",
-";#	c #9CB1DA",
-">#	c #9CB0DA",
-",#	c #9DB1D9",
-"'#	c #9DB1DA",
-")#	c #8BA3D3",
-". + + + + + @ @ @ # $ % & * = - - ; ; > , > ' > ) ) ! ~ { { ~ ] ",
-"+ ^ ^ ^ ^ ^ ^ ^ ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ",
-"+ f f f f f f f g / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ",
-"h i i i i j k k k / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ",
-"h l l l m n n n o / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ",
-"h p q r s s t u v / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ",
-"h n w x x x x y z A ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ",
-"h B C D x E F G H I ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ",
-"h J v K x L M N O I ( _ P Q R S T U V V W X Y Z `  . ...+.c d e ",
-"h @.#.$.x %.&.*.=.A ( _ -.;.>.>.>.>.>.>.>.>.>.>.>.>.>.,.'.c d e ",
-"h v ).!.x %.*.=.~.{.( _ ].^./.(.(.(.(._.:.(.(.(.(.(.(.<.[.c d e ",
-"}.|.H 1.x 2.3.4.5.{.( _ ].^.6.7.(.(.8.9.0.(.(.(.(.(.(.<.[.c d e ",
-"}.|.a.b.c.3.d.e.f.{.( _ ].^.g.h.(.(.i.j.k.(.l.m.(.(.(.<.[.c d e ",
-"n.o.p.q.q.r.s.t.u.v.( _ ].^.w.x.(.y.z.A.B.C.D.E.F.(.(.<.[.c d e ",
-"n.H G.x H.I.x J.K.v.( _ ].^.L.M.N.z.O.P.Q.R.S.T.U.l.(.<.[.c d e ",
-"n.H V.x W.X.x Y.Z.v.( _ ].^.`. +.+++(.(. at +#+(.(.l.$+(.<.[.c d e ",
-"%+a.&+x *+x =+-+;+>+( _ ].^.,+'+)+!+(.(.(.(.(.(.(.(.(.<.[.c d e ",
-"%+a.&+x ~+{+]+^+/+>+( _ ].^.(+_+:+<+<+[+[+}+_+_+|+1+2+<.[.c d e ",
-"3+a.&+x 4+5+x 6+/+>+( _ ].7+8+9+0+a+a+b+b+c+d+d+e+f+g+h+i+c d e ",
-"3+a.j+k+l+m+n+o+p+v.( _ q+r+s+s+s+s+t+u+u+u+v+s+s+s+s+w+x+c d e ",
-"3+a.c.y+z+A+B+C+D+v.( _ E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+c d e ",
-"V+W+X+Y+x x Z+C+`+v.( _ :  @. at +@@@@@#@$@%@%@&@@@@@*@=@-@;@c d e ",
-"V+o.&.>@,@'@)@!@~@{@( _ ]@^@/@(@(@(@(@(@(@(@(@(@(@(@_@:@<@c d e ",
-"V+).[@w }@|@1 at 2@D+3@( _ 4 at 5@6 at 7@7 at 7@7 at 7@7 at 7@7 at 7@7 at 7@8 at 9@+.c d e ",
-"V+0 at a@x b at c@x d at e@f@( _ : g at h@i at j@k at l@m at n@o at p@q at r@s at t@u at b c d e ",
-"v at z w at x@y at z@w A@`+f@( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ",
-"B at C@D at E@4.F at G@H at I@>+( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ",
-"B@@.o.X+~.J at K.C+D+>+( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ",
-"v at K@0 at L@M at N@O@/+D+>+( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ",
-"P at Q@R at S@T at 2@u.U at D+{@( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ",
-"P at V@W@).&.4.B+X at p+{@( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e ",
-"Y at Z@Z at Z@Z@`@P at P@P@ #.#+#@#########$#%#&#$#*#=#$#*#-#;#>#;#,#'#)#"};
diff --git a/src/Flextra/FlexpartRun.cc b/src/Flextra/FlexpartRun.cc
index f1aca31..b1a3ca6 100644
--- a/src/Flextra/FlexpartRun.cc
+++ b/src/Flextra/FlexpartRun.cc
@@ -46,28 +46,17 @@ public:
 	bool generatePathnamesFile(const string&,MvRequest&,const string&,const string&);
 	bool generateCommandFile(const string&,MvRequest&);
 	bool generateOutGridFile(const string&,MvRequest& in);
-	
-	bool generateStartPointsFile(const string&,MvRequest&);
-	bool generateStartCetFile(const string&,MvRequest&);
-	bool generateStartFlightFile(const string& fStart,MvRequest& in);
-	bool getDateRange(MvDate& rangeStart,MvDate& rangeEnd,MvRequest& in);
-	bool getPredefInputPath(const string&,const MvDate&,const MvDate&,string &);
-	
+	bool generateReleasesFile(const string&,MvRequest& in);
+	bool generateAgeClassesFile(const string&,MvRequest& in);
+	bool generateReceptorsFile(const string&,MvRequest& in);	
+		
+	map<string,string> directionIds_;
 	map<string,string> outputIds_;
 	map<string,string> particleDumpIds_;
 	map<string,string> onOffIds_;
 	map<string,string> sourceUnitsIds_;
 	map<string,string> receptorUnitsIds_;
 	map<string,string> writeInitIds_;
-	
-	
-	map<string,string> directionIds_;
-	map<string,string> modeIds_;
-	map<string,string> intervalIds_;
-	map<string,string> cetTypeIds_;
-	map<string,string> cetLevelUnitsIds_;
-	map<string,string> flightTypeIds_;
-	map<string,string> flightLevelUnitsIds_;
 };
 
 void FlexpartRun::initIds()
@@ -88,46 +77,15 @@ void FlexpartRun::initIds()
 	onOffIds_["ON"]="1"; 
 	onOffIds_["OFF"]="0";
 	
-	sourceUnitsIds_["MASS"]=1;
-	sourceUnitsIds_["MASS MIXING RATIO"]=2;
-	
-	receptorUnitsIds_["MASS"]=1;
-	receptorUnitsIds_["MASS MIXING RATIO"]=2;
-	
-	writeInitIds_["NO"]=1;
-	writeInitIds_["MASS"]=1;
-	writeInitIds_["MASS MIXING RATIO"]=2;
-	
-	
-	
-	
+	sourceUnitsIds_["MASS"]="1";
+	sourceUnitsIds_["MASS MIXING RATIO"]="2";
 	
+	receptorUnitsIds_["MASS"]="1";
+	receptorUnitsIds_["MASS MIXING RATIO"]="2";
 	
-	modeIds_["NORMAL"]="1"; 
-        modeIds_["CET"]="2";
-	modeIds_["FLIGHT"]="3";
-	
-	intervalIds_["ORIGINAL"]="0";
-        intervalIds_["INTERVAL"]="1";
-	intervalIds_["BOTH"]="2";	
-	
-	cetTypeIds_["3D"]="1"; 
-        cetTypeIds_["MODEL LEVEL"]="2";
-	cetTypeIds_["ISOBARIC"]="4";
-	cetTypeIds_["ISENTROPIC"]="5";
-		
-	cetLevelUnitsIds_["METRES ASL"]="1"; 
-        cetLevelUnitsIds_["METRES AGL"]="2";
-	cetLevelUnitsIds_["HPA"]="3";
-	
-	flightTypeIds_["3D"]="1"; 
-        flightTypeIds_["MODEL LEVEL"]="2";
-	flightTypeIds_["ISOBARIC"]="4";
-	flightTypeIds_["ISENTROPIC"]="5";
-	
-	flightLevelUnitsIds_["METRES ASL"]="1"; 
-        flightLevelUnitsIds_["METRES AGL"]="2";
-	flightLevelUnitsIds_["HPA"]="3";
+	writeInitIds_["NO"]="0";
+	writeInitIds_["MASS"]="1";
+	writeInitIds_["MASS MIXING RATIO"]="2";
 }	
 
 bool FlexpartRun::getMvDate(const string& dd,const string& tt,MvDate& res)
@@ -442,36 +400,6 @@ bool FlexpartRun::generatePathnamesFile(const string& fPathnames,MvRequest& in,c
 			fAvailable = inPath + "/AVAILABLE";
 		}	
 	}
-	else if(strcmp(input_mode,"EC_EUROPE") == 0 || strcmp(input_mode,"EC_GLOBAL") == 0)
-	{
-		string envVar=(strcmp(input_mode,"EC_EUROPE") == 0)?"MV_FLEXPART_INPUT_EUROPE":"MV_FLEXPART_INPUT_GLOBAL";
-		  
-	  	char *predefPath=getenv(envVar.c_str());
-		if(predefPath == 0)  
-		{	
-			marslog(LOG_EROR,"No %s env variable is defined! Cannot find data for input mode \"%s\"!",envVar.c_str(),input_mode);
-			setError(13);
-			return false;			
-		}
-		
-		string rootPath(predefPath);
-	  	MvDate startDate,endDate;
-		if(!getDateRange(startDate,endDate,in))
-		{  	
-		  	marslog(LOG_EROR,"No data is found for input mode \"%s\"!",input_mode);
-			setError(13);
-			return false;
-		}
-		if(!getPredefInputPath(rootPath,startDate,endDate,inPath))
-		{
-		  	marslog(LOG_EROR,"No data is found for input mode \"%s\"!",input_mode);
-			setError(13);
-			return false;
-		}	
-		fAvailable = inPath + "/AVAILABLE";
-		marslog(LOG_INFO,"Input data path set to: %s",inPath.c_str());
-		
-	}
 	else
 	{
 		marslog(LOG_EROR,"Invalid value for parameter FLEXPART_INPUT_MODE: %s",input_mode);
@@ -498,16 +426,14 @@ bool FlexpartRun::generateCommandFile(const string& fCmd,MvRequest& in)
 	
 	string str,str2,trMode;
 		
-	//Find outrun mode. It is needed for the starting dates
-	FLEXPART_CHK(getParamValueId(trMode,in,"FLEXPART_RUN_MODE",modeIds_));
-	
-out << "****************************************************************\n\
-					     \n\
-  Input file for the Lagrangian particle dispersion  model FLEXPART\n\
-                       Please specify your options \n\
- 					     \n\
-*******************************************************************\n\n";
-
+out << "*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n";
+	
 	//FLEXPART_CHK(getParamValue(str,in,"FLEXPART_RUN_LABEL"));
 	//out << str << endl;
 	
@@ -551,54 +477,54 @@ out << "****************************************************************\n\
 	out << str2 << endl;
 	
 	FLEXPART_CHK(getParamValue(str,in,"FLEXPART_CTL"));
-	out << str << " ";
+	out << str << endl;
 	
 	FLEXPART_CHK(getParamValue(str,in,"FLEXPART_VERT_REDUCTION"));
-	out << str << " ";
+	out << str << endl;
 	
 	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_OUTPUT_FORM",outputIds_));
-	out << str << " ";
+	out << str << endl;
 	
 	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_DUMP_PARTICLE_POSITIONS",particleDumpIds_));
-	out << str << " ";
+	out << str << endl;
 	
 	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_SUBGRID_TERRAIN",onOffIds_));
-	out << str << " ";
+	out << str << endl;
 	
 	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_CONVECTION",onOffIds_));
-	out << str << " ";
+	out << str << endl;
 	
 	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_AGE_SPECTRA",onOffIds_));
-	out << str << " ";
+	out << str << endl;
 		
 	//Cont simulation with dumped particle data
-	out << "0" << " ";
+	out << "0" << endl;
 		
 	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_OUTPUT_FOR_EACH_RELEASE",onOffIds_));
-	out << str << " ";
+	out << str << endl;
 	
 	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_COMPUTE_FLUXES",onOffIds_));
-	out << str << " ";
+	out << str << endl;
 	
 	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_DOMAIN_FILL",onOffIds_));
-	out << str << " ";
+	out << str << endl;
 	
-	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_SOURCE_UNIT",sourceUnitsIds_));
-	out << str << " ";
+	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_SOURCE_UNITS",sourceUnitsIds_));
+	out << str << endl;
 	
 	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_RECEPTOR_UNITS",receptorUnitsIds_));
-	out << str << " ";
+	out << str << endl;
 	
 	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_TRACK_PARTICLES",onOffIds_));
-	out << str << " ";
+	out << str << endl;
 	
 	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_NESTED_OUTPUT",onOffIds_));
-	out << str << " ";
+	out << str << endl;
 	
 	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_WRITE_INITIAL_CONDITIONS",writeInitIds_));
-	out << str << " ";
-	
+	out << str << endl;
 	
+	/*
 	
 	FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_OUTPUT_INTERVAL_MODE",intervalIds_));
 	out << str << " ";
@@ -650,92 +576,133 @@ out << "****************************************************************\n\
 	
 	//FLEXPART_CHK(getParamValueId(str,in,"FLEXPART_RUN_MODE",modeIds_));
 	out << trMode << endl;
+	*/
 	
 	out.close();
 	
 	return true;
 }	
 	
-bool FlexpartRun::generateStartPointsFile(const string& fStart,MvRequest& in)
+bool FlexpartRun::generateReleasesFile(const string& fRelease,MvRequest& in)
 {
-	ofstream out(fStart.c_str());	
+	ofstream out(fRelease.c_str());	
 	
 	string str;
 	
-
-out << "**********************************************************************\n\
-*                                                                    *\n\
-*                 TRAJECTORY MODEL                                   *\n\
-*                 DEFINITION OF STARTING/ENDING POINTS               *\n\
-*                                                                    *\n\
-*  The first 7 characters of the comment are also used as filenames. *\n\
-*  Therefore, they cannot be blank and they must be different for    *\n\
-*  each starting point.                                              *\n\
-*                                                                    *\n\
-*  Kind of trajectory: 1 = 3 dimensional                             *\n\
-*                      2 = on model layers                           *\n\
-*                      3 = mixing layer                              *\n\
-*                      4 = isobaric                                  *\n\
-*                      5 = isentropic                                *\n\
-*                                                                    *\n\
-**********************************************************************\n\
-*                                                                    *\n\
-*  Unit of z coordinate: 1 = Meters above sea level                  *\n\
-*                        2 = Meters above ground                     *\n\
-*                        3 = Hectopascal                             *\n\
-*                                                                    *\n\
-*  For mixing layer trajectories (kind 3), the z coordinate must be  *\n\
-*  given in m.a.g.l. (option 2)                                      *\n\
-*                                                                    *\n\
-**********************************************************************\n\
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
-
-	getParamValue(str,in,"FLEXPART_RUN_MODE");
-
-	vector<string> type,name,lat,lon,lev,levUnit;
+out << "*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n";
+	
+	vector<string> sp;	
+	FLEXPART_CHK(getParamValue(sp,in,"FLEXPART_RELEASE_SPECIES"));
+	if(sp.size() < 1 )
+	{
+	  	marslog(LOG_EROR,"No paramater FLEXPART_RELEASE_SPECIES is specified!");
+		setError(13);
+		return false;	
+	}  
 	
-	FLEXPART_CHK(getParamValue(type,in,"FLEXPART_NORMAL_TYPES"));
-	FLEXPART_CHK(getParamValue(name,in,"FLEXPART_NORMAL_NAMES"));
-	FLEXPART_CHK(getParamValue(lat,in,"FLEXPART_NORMAL_LATITUDES"));
-	FLEXPART_CHK(getParamValue(lon,in,"FLEXPART_NORMAL_LONGITUDES"));
-	FLEXPART_CHK(getParamValue(lev,in,"FLEXPART_NORMAL_LEVELS"));
-	FLEXPART_CHK(getParamValue(levUnit,in,"FLEXPART_NORMAL_LEVEL_UNITS"));
+	//vector<string> name,startDate,startTime,endDate,endTime,
+	//	west,east,south,north,topLevl,bottomLevel,levUnit,
+	//	particles,mass;
+		
+	map<string,vector<string> > vals;
+	vector<string> parLst;
+	parLst.push_back("NAMES");
+	parLst.push_back("STARTING_DATES");
+	parLst.push_back("STARTING_TIMES");
+	parLst.push_back("ENDING_DATES");
+	parLst.push_back("ENDING_TIMES");
+	parLst.push_back("AREAS_WEST");
+	parLst.push_back("AREAS_EAST");
+	parLst.push_back("AREAS_NORTH");
+	parLst.push_back("AREAS_SOUTH");
+	parLst.push_back("LEVELS_TOP");
+	parLst.push_back("LEVELS_BOTTOM");
+	parLst.push_back("LEVELS_UNITS");
+	parLst.push_back("PARTICLES");
+	parLst.push_back("MASSES");
+	
+	for(unsigned int i=0; i < parLst.size() ; i++)
+	{
+	  	string s="FLEXPART_RELEASE_" + parLst[i];
+	  	FLEXPART_CHK(getParamValue(vals[s],in,s));
+	}
 	
-	unsigned int cnt=type.size();	
+	/*FLEXPART_CHK(getParamValue(name,in,"FLEXPART_RELEASE_NAMES"));
+	FLEXPART_CHK(getParamValue(startDate,in,"FLEXPART_RELEASE_STARTING_DATES"));
+	FLEXPART_CHK(getParamValue(startTime,in,"FLEXPART_RELEASE_STARTING_TIMES"));
+	FLEXPART_CHK(getParamValue(endDate,in,"FLEXPART_RELEASE_ENDING_DATES"));
+	FLEXPART_CHK(getParamValue(endTime,in,"FLEXPART_RELEASE_ENDING_TIMES"));
+	FLEXPART_CHK(getParamValue(west,in,"FLEXPART_RELEASE_AREAS_WEST"));
+	FLEXPART_CHK(getParamValue(east,in,"FLEXPART_RELEASE_AREAS_EAST"));
+	FLEXPART_CHK(getParamValue(north,in,"FLEXPART_RELEASE_AREAS_NORTH"));
+	FLEXPART_CHK(getParamValue(south,in,"FLEXPART_RELEASE_AREAS_SOUTH"));
+	FLEXPART_CHK(getParamValue(topLevel,in,"FLEXPART_RELEASE_LEVELS_TOP"));
+	FLEXPART_CHK(getParamValue(bottomLevel,in,"FLEXPART_RELEASE_LEVELS_BOTTOM"));
+	FLEXPART_CHK(getParamValue(levUnit,in,"FLEXPART_RELEASE_LEVELS_UNITS"));
+	FLEXPART_CHK(getParamValue(particle,in,"FLEXPART_RELEASE_PARTICLES"));
+	FLEXPART_CHK(getParamValue(mass,in,"FLEXPART_RELEASE_MASS"));*/
+		
+	unsigned int cnt=vals["FLEXPART_RELEASE_NAMES"].size();	
 	if(cnt ==0)
 	{
-		marslog(LOG_EROR,"No values specified for parameter FLEXPART_NORMAL_TYPES!");
+		marslog(LOG_EROR,"No values specified for parameter FLEXPART_RELEASE_NAMES!");
 	 	setError(13);
 		return false; 
 	}
 	
-	string errTxt="Incosistent number of items specified for parameter: FLEXPART_NORMAL_";
-	if(name.size() != cnt)
-		errTxt+="NAMES!";
-	else if(lat.size() != cnt)
-		errTxt+="LATITUDES!";	
-	else if(lon.size() != cnt)
-		errTxt+="LONGITUDES!";
-	else if(lev.size() != cnt)
-		errTxt+="LEVELS!";  
-	else if(levUnit.size() != cnt)
-		errTxt+="LEVEL_UNITS!"; 
-	
-	if(errTxt.find("!") != string::npos) 
+	string errTxt="Incosistent number of items specified for parameter: ";
+	for(map<string,vector<string> >::iterator it=vals.begin(); it != vals.end(); it++ )
 	{
-	  	marslog(LOG_EROR,"%s",errTxt.c_str());
-		setError(13);
-		return false; 
+	  	if(it->second.size() != cnt)
+		{
+		  	string errTxt="Incosistent number of items specified for parameter: " + it->first + "!";
+			marslog(LOG_EROR,"%s",errTxt.c_str());
+			setError(13);
+			return false; 
+		}
+	}	
+	
+	out  << sp.size() << endl;
+	for(unsigned int i=0; i < sp.size(); i++)
+	{
+	  	out << sp[i] << endl;
 	}
+	out << "===================================================================" << endl;
 	
 	for(unsigned int i=0; i < cnt; i++)
 	{	  
-		out << lon[i] << endl;
-		out << lat[i] << endl;
-		out << type[i] << endl;
-		out << levUnit[i] << endl;
-		out << lev[i] << endl;
-		out << name[i] << endl;
+		string tStr, dStr;
+		string pref="FLEXPART_RELEASE_";
+	  	FLEXPART_CHK(getDate(vals[pref + "STARTING_DATES"].at(i),dStr,pref+"STARTING_DATES"));		
+		FLEXPART_CHK(getTime(vals[pref + "STARTING_TIMES"].at(i),tStr,pref+"STARTING_TIMES"));
+		
+		out << dStr << " " << tStr << endl;		
+			
+		FLEXPART_CHK(getDate(vals[pref + "ENDING_DATES"].at(i),dStr,pref+"ENDING_DATES"));		
+		FLEXPART_CHK(getTime(vals[pref + "ENDING_TIMES"].at(i),tStr,pref+"ENDING_TIMES"));
+		
+		out << dStr << " " << tStr << endl;	
+		
+		out << vals[pref + "AREAS_WEST"].at(i) << endl;
+		out << vals[pref + "AREAS_SOUTH"].at(i) << endl;
+		out << vals[pref + "AREAS_EAST"].at(i) << endl;
+		out << vals[pref + "AREAS_NORTH"].at(i) << endl;
+		out << vals[pref + "LEVELS_UNITS"].at(i) << endl;
+		out << vals[pref + "LEVELS_BOTTOM"].at(i) << endl;
+		out << vals[pref + "LEVELS_TOP"].at(i) << endl;
+		out << vals[pref + "PARTICLES"].at(i) << endl;
+		out << vals[pref + "MASSES"].at(i) << endl;
+		out << vals[pref + "NAMES"].at(i) << endl;
 		out << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
 
 	}
@@ -746,371 +713,148 @@ out << "**********************************************************************\n
 }	
 
 
-bool FlexpartRun::generateOutGridFile(const string& fStart,MvRequest& in)
+bool FlexpartRun::generateOutGridFile(const string& fGrid,MvRequest& in)
 {
-	ofstream out(fStart.c_str());	
-	
-out << "****************************************************************\n\
-					     \n\
-  Input file for the Lagrangian particle dispersion  model FLEXPART\n\
-                       Please specify your output grid \n\
- 					     \n\
-*******************************************************************\n\n";
-
-
-	string type,name,levUnit,dx,dy,dz,levTop,levBottom;
-	FLEXPART_CHK(getParamValueId(type,in,"FLEXPART_CET_TYPE",cetTypeIds_));
-	FLEXPART_CHK(getParamValue(name,in,"FLEXPART_GRID_LON_MIN"));
-	FLEXPART_CHK(getParamValueId(levUnit,in,"FLEXPART_CET_LEVEL_UNITS",cetLevelUnitsIds_));
-	FLEXPART_CHK(getParamValue(dx,in,"FLEXPART_CET_DX"));
-	FLEXPART_CHK(getParamValue(dy,in,"FLEXPART_CET_DY"));
-	FLEXPART_CHK(getParamValue(dz,in,"FLEXPART_CET_DZ"));
-	FLEXPART_CHK(getParamValue(levTop,in,"FLEXPART_CET_TOP_LEVEL"));
-	FLEXPART_CHK(getParamValue(levBottom,in,"FLEXPART_CET_BOTTOM_LEVEL"));
-	
-	int cnt = in.countValues("FLEXPART_CET_AREA");
-	if(cnt != 4)
+	ofstream out(fGrid.c_str());	
+	
+out << "*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\
+*** HEADER ***\n\n";
+
+	string west,south,name,nx,ny,dx,dy,dz;
+	
+	FLEXPART_CHK(getParamValue(west,in,"FLEXPART_GRID_WEST"));
+	FLEXPART_CHK(getParamValue(south,in,"FLEXPART_GRID_SOUTH"));
+	FLEXPART_CHK(getParamValue(nx,in,"FLEXPART_GRID_NX"));
+	FLEXPART_CHK(getParamValue(ny,in,"FLEXPART_GRID_NY"));
+	FLEXPART_CHK(getParamValue(dx,in,"FLEXPART_GRID_DX"));
+	FLEXPART_CHK(getParamValue(dy,in,"FLEXPART_GRID_DY"));
+	
+	int cnt = in.countValues("FLEXPART_GRID_LEVELS");
+	if(cnt < 1 )
 	{
-	  	marslog(LOG_EROR,"No paramater FLEXPART_CET_AREA is specified!");
+	  	marslog(LOG_EROR,"No paramater FLEXPART_GRID_LEVELS is specified!");
 		setError(13);
 		return false;	
 	}  
 	  
 	double dval; 
-	vector<double> areaL;
-	for(int i=0; i< cnt; i++)
+	vector<double> levL;
+	for(int i=0; i< cnt && i < 6; i++)
 	{
-		in.getValue(dval,"FLEXPART_CET_AREA",i);
-	 	areaL.push_back(dval);
-	}	
-	out << areaL[1] << endl;
-	out << areaL[0] << endl;
-	out << areaL[3] << endl;
-	out << areaL[2] << endl;
-	out << dx << endl;
-	out << dy << endl;
-	out << type << endl;
-	out << levUnit << endl;
-	out << levBottom << endl;
-	out << levTop << endl;
-	out << dz << endl;
-	out << name << endl;
-	out << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
-	
-	out.close();
-	
-	return true;
-}	
-
-
-
+		in.getValue(dval,"FLEXPART_GRID_LEVELS",i);
+	 	levL.push_back(dval);
+	}
 
-bool FlexpartRun::generateStartCetFile(const string& fStart,MvRequest& in)
-{
-	ofstream out(fStart.c_str());	
+	float fVal;
+	int iVal;
 	
-	string str;
+	out << std::fixed;
 	
-
+	istringstream(west) >> fVal;
+	out << "-------" << endl;
+	out << "    " << std::setw(6) << setprecision(4) << fVal << endl;
+	out << "OUTLONLEFT" << endl;
+	out << endl;
 	
-out << "**********************************************************************\n\
-*                                                                    *\n\
-*                 TRAJECTORY MODEL                                   *\n\
-*                 DEFINITION OF THE CET DOMAIN                       *\n\
-*  A CET STARTING DOMAIN IS DEFINED BY THE LOWER LEFT AND UPPER RIGHT*\n\
-*  CORNER IN A LATITUDE/LONGITUDE COORDINATE SYSTEM, AND BY A LOWER  *\n\
-*  AND UPPER LEVEL. TRAJECTORIES ARE STARTED AT DISTANCES DX, DY AND *\n\
-*  DZ WITHIN THIS DOMAIN.                                            *\n\
-*                                                                    *\n\
-*  Kind of trajectory: 1 = 3 dimensional                             *\n\
-*                      2 = on model layers                           *\n\
-*                      3 = not allowed in CET mode                   *\n\
-*                      4 = isobaric                                  *\n\
-*                      5 = isentropic                                *\n\
-*                                                                    *\n\
-**********************************************************************\n\
-*                                                                    *\n\
-*  Unit of z coordinate: 1 = Meters above sea level                  *\n\
-*                        2 = Meters above ground                     *\n\
-*                        3 = Hectopascal                             *\n\
-*                                                                    *\n\
-*  The vertical distance DZ between the trajectories must be         *\n\
-*  given in the same units.                                          *\n\
-*                                                                    *\n\
-**********************************************************************\n\
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
-
-	string type,name,levUnit,dx,dy,dz,levTop,levBottom;
-	FLEXPART_CHK(getParamValueId(type,in,"FLEXPART_CET_TYPE",cetTypeIds_));
-	FLEXPART_CHK(getParamValue(name,in,"FLEXPART_CET_NAME"));
-	FLEXPART_CHK(getParamValueId(levUnit,in,"FLEXPART_CET_LEVEL_UNITS",cetLevelUnitsIds_));
-	FLEXPART_CHK(getParamValue(dx,in,"FLEXPART_CET_DX"));
-	FLEXPART_CHK(getParamValue(dy,in,"FLEXPART_CET_DY"));
-	FLEXPART_CHK(getParamValue(dz,in,"FLEXPART_CET_DZ"));
-	FLEXPART_CHK(getParamValue(levTop,in,"FLEXPART_CET_TOP_LEVEL"));
-	FLEXPART_CHK(getParamValue(levBottom,in,"FLEXPART_CET_BOTTOM_LEVEL"));
-	
-	int cnt = in.countValues("FLEXPART_CET_AREA");
-	if(cnt != 4)
-	{
-	  	marslog(LOG_EROR,"No paramater FLEXPART_CET_AREA is specified!");
-		setError(13);
-		return false;	
-	}  
-	  
-	double dval; 
-	vector<double> areaL;
-	for(int i=0; i< cnt; i++)
+	istringstream(south) >> fVal;
+	out << "-------" << endl;
+	out << "    " << std::setw(6) << setprecision(4) << fVal << endl;
+	out << "OUTLATLOWER" << endl;
+	out << endl;
+		
+	istringstream(nx) >> iVal;
+	out << "-------" << endl;
+	out << "    " <<  std::setw(5) << iVal << endl;
+	out << "NUMXGRID" << endl;
+	out << endl;
+	
+	istringstream(ny) >> iVal;
+	out << "-------" << endl;
+	out << "    " << std::setw(5) << iVal << endl;
+	out << "NUMYGRID" << endl;
+	out << endl;
+	
+	istringstream(dx) >> fVal;
+	out << "-------" << endl;
+	out << "    " << std::setw(6) << setprecision(3) << fVal << endl;
+	out << "DXOUTLON" << endl;
+	out << endl;
+	
+	istringstream(dy) >> fVal;
+	out << "-------" << endl;
+	out << "    " << std::setw(6) << setprecision(3) << fVal  << endl;
+	out << "DYOUTLAT" << endl;
+	out << endl;
+	
+	for(int i=0; i< static_cast<int>(levL.size()); i++)
 	{
-		in.getValue(dval,"FLEXPART_CET_AREA",i);
-	 	areaL.push_back(dval);
-	}	
-	out << areaL[1] << endl;
-	out << areaL[0] << endl;
-	out << areaL[3] << endl;
-	out << areaL[2] << endl;
-	out << dx << endl;
-	out << dy << endl;
-	out << type << endl;
-	out << levUnit << endl;
-	out << levBottom << endl;
-	out << levTop << endl;
-	out << dz << endl;
-	out << name << endl;
-	out << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
-	
+		out << "-------" << endl;
+		out << "    " << std::setw(5) << setprecision(1) << levL[i] << endl;
+		out << "LEVEL" << endl;
+		out << endl;
+	}
+		
 	out.close();
 	
 	return true;
 }	
 
-bool FlexpartRun::generateStartFlightFile(const string& fStart,MvRequest& in)
+
+bool FlexpartRun::generateAgeClassesFile(const string& fAge,MvRequest& in)
 {
-	ofstream out(fStart.c_str());	
+	ofstream out(fAge.c_str());	
 	
-	string str;
-	
-
-out << "**********************************************************************\n\
-*              TRAJECTORY MODEL                                      *\n\
-*              DEFINITION OF STARTING/ENDING POINTS IN FLIGHT MODE   *\n\
-*  This file defines starting points separated non-uniformly in      *\n\
-*  space as well as in time. Thus, both starting times AND starting  *\n\
-*  coordinates must be given.                                        *\n\
-*  The starting times must be strictly in temporal order.            *\n\
-*  For backward trajectories, the temporal order must be reversed.   *\n\
-*  In line #28 of this file, the name of the output file must be     *\n\
-*  indicated. Lines #29 and #30 must contain kind of trajectory and  *\n\
-*  the unit of the z coordinate to be used. Line #31 is arbitrary,   *\n\
-*  then follows a sequence of points.                                *\n\
-*  Kind of trajectory: 1 = 3 dimensional                             *\n\
-*                      2 = on model layers                           *\n\
-*                      3 = mixing layer                              *\n\
-*                      4 = isobaric                                  *\n\
-*                      5 = isentropic                                *\n\
-**********************************************************************\n\
-*                                                                    *\n\
-*  Unit of z coordinate: 1 = Meters above sea level                  *\n\
-*                        2 = Meters above ground                     *\n\
-*                        3 = Hectopascal                             *\n\
-*                                                                    *\n\
-*  For mixing layer trajectories (kind 3), the z coordinate must be  *\n\
-*  given in m.a.g.l. (option 2)                                      *\n\
-*                                                                    *\n\
-**********************************************************************\n";
-
-	string type,name,levUnit;
-	FLEXPART_CHK(getParamValueId(type,in,"FLEXPART_FLIGHT_TYPE",flightTypeIds_));
-	FLEXPART_CHK(getParamValue(name,in,"FLEXPART_FLIGHT_NAME"));
-	FLEXPART_CHK(getParamValueId(levUnit,in,"FLEXPART_FLIGHT_LEVEL_UNITS",flightLevelUnitsIds_));
+out << "*** HEADER ***\n\
+*** HEADER ***\n*** HEADER ***\n\
+*** HEADER ***\n*** HEADER ***\n\
+*** HEADER ***\n*** HEADER ***\n\
+*** HEADER ***\n*** HEADER ***\n\
+*** HEADER ***\n*** HEADER ***\n\
+*** HEADER ***\n*** HEADER ***\n";
 
+	vector<string> vals;
+	FLEXPART_CHK(getParamValue(vals,in,"FLEXPART_AGECLASSES"));
 
-	vector<string> lat,lon,lev,startDate,startTime;	
-	FLEXPART_CHK(getParamValue(lat,in,"FLEXPART_FLIGHT_LATITUDES"));
-	FLEXPART_CHK(getParamValue(lon,in,"FLEXPART_FLIGHT_LONGITUDES"));
-	FLEXPART_CHK(getParamValue(lev,in,"FLEXPART_FLIGHT_LEVELS"));
-	FLEXPART_CHK(getParamValue(startDate,in,"FLEXPART_FLIGHT_STARTING_DATES"));
-	FLEXPART_CHK(getParamValue(startTime,in,"FLEXPART_FLIGHT_STARTING_TIMES"));
-	
-	unsigned int cnt=lat.size();	
-	if(cnt ==0)
+	int cnt = static_cast<int>(vals.size()); 
+	if(cnt < 1 )
 	{
-		marslog(LOG_EROR,"No values specified for parameter FLEXPART_FLIGHT_LATITUDES!");
-	 	setError(13);
-		return false; 
-	}
+	  	marslog(LOG_EROR,"No paramater FLEXPART_AGECLASSES is specified!");
+		setError(13);
+		return false;	
+	}  
 	
-	string errTxt="Incosistent number of items specified for parameter: FLEXPART_FLIGHT_";
-	if(lon.size() != cnt)
-		errTxt+="LONGITUDES!";
-	else if(lev.size() != cnt)
-		errTxt+="LEVELS!";  
-	else if(startDate.size() != cnt)
-		errTxt+="STARTING_DATES!";	
-	else if(startTime.size() != cnt)
-		errTxt+="STARTING_TIMES!";
-	
-	if(errTxt.find("!") != string::npos) 
+	out << cnt << endl;
+	 	
+	for(int i=0; i< cnt; i++)
 	{
-	  	marslog(LOG_EROR,"%s",errTxt.c_str());
-		setError(13);
-		return false; 
+		string str;
+	 	FLEXPART_CHK(getTimeLen(vals[i],str,"FLEXPART_AGECLASSES",true));
+		out << str << endl;
 	}
 		
-	out << name << endl;
-	out << type << endl;
-	out << levUnit << endl;	
-	out << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
-
-	for(unsigned int i=0; i < cnt; i++)
-	{	  
-		string tStr, dStr;
-	  	FLEXPART_CHK(getDate(startDate[i],dStr,"FLEXPART_FLIGHT_STARTING_DATES"));
-		FLEXPART_CHK(getTime(startTime[i],tStr,"FLEXPART_FLIGHT_STARTING_TIMES"));
-		
-		out << dStr << " " << tStr << endl;		
-		out << lon[i] << endl;
-		out << lat[i] << endl;
-		out << lev[i] << endl;
-		out << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
-
-	}
-
 	out.close();
 	
 	return true;
-}
-
-
-//---------------------------------------------------
-// Find out the time range the trajectories cover
-//---------------------------------------------------
+}	
 
-bool FlexpartRun::getDateRange(MvDate& rangeStart,MvDate& rangeEnd,MvRequest& in)
+bool FlexpartRun::generateReceptorsFile(const string& fRec,MvRequest& in)
 {
-	string str,dStr,tStr,trMode;
-	int lenSec;
-	MvDate startDate1,startDate2;
-	
-	//Find outrun mode. It is needed for the starting dates
-	FLEXPART_CHK(getParamValueId(trMode,in,"FLEXPART_RUN_MODE",modeIds_));
-		
-	FLEXPART_CHK(getParamValue(str,in,"FLEXPART_TRAJECTORY_LENGTH"));
-	FLEXPART_CHK(getTimeLen(str,tStr,"FLEXPART_TRAJECTORY_LENGTH",true));
-	istringstream iss(tStr);
-	iss >> lenSec;
+	ofstream out(fRec.c_str());	
 	
+out << "*** HEADER ***\n\
+*** HEADER ***\n*** HEADER ***\n\
+*** HEADER ***\n*** HEADER ***\n\
+*** HEADER ***\n*** HEADER ***\n";
 
-	if(trMode != "3")
-	{
-		FLEXPART_CHK(getParamValue(str,in,"FLEXPART_FIRST_STARTING_DATE"));
-		FLEXPART_CHK(getDate(str,dStr,"FLEXPART_FIRST_STARTING_DATE"));	
-				
-		FLEXPART_CHK(getParamValue(str,in,"FLEXPART_FIRST_STARTING_TIME"));
-		FLEXPART_CHK(getTime(str,tStr,"FLEXPART_FIRST_STARTING_TIME"));
-		
-		if(!getMvDate(dStr,tStr,startDate1))
-			return false;  
-						
-		FLEXPART_CHK(getParamValue(str,in,"FLEXPART_LAST_STARTING_DATE"));
-		FLEXPART_CHK(getDate(str,dStr,"FLEXPART_LAST_STARTING_DATE"));	
-			
-		FLEXPART_CHK(getParamValue(str,in,"FLEXPART_LAST_STARTING_TIME"));
-		FLEXPART_CHK(getTime(str,tStr,"FLEXPART_LAST_STARTING_TIME"));
-		
-		if(!getMvDate(dStr,tStr,startDate2))
-			return false;  
-				
-	}
-
-	//In FLIGHT mode the starting date,time and interval are disabled in the 
-	//user interface beause FLEXTRA does not use them for the trajectory 
-	//computations. However FLEXTRA does need a proper date here, otherwise it crashes.
-	//So we use the first date and time from the FLIGHT starting points here.
-	else
-	{
-	  	vector<string> startDate,startTime;		
-		FLEXPART_CHK(getParamValue(startDate,in,"FLEXPART_FLIGHT_STARTING_DATES"));
-		FLEXPART_CHK(getParamValue(startTime,in,"FLEXPART_FLIGHT_STARTING_TIMES"));
-		int cnt=startDate.size();
-		
-		if(cnt > 0 && static_cast<int>(startTime.size()) == cnt)
-		{
-			FLEXPART_CHK(getDate(startDate[0],dStr,"FLEXPART_FLIGHT_STARTING_DATES"));
-			FLEXPART_CHK(getTime(startTime[0],tStr,"FLEXPART_FLIGHT_STARTING_TIMES"));
-		  	
-			if(!getMvDate(dStr,tStr,startDate1))
-				return false;  			
-			
-			FLEXPART_CHK(getDate(startDate[cnt-1],dStr,"FLEXPART_FLIGHT_STARTING_DATES"));
-			FLEXPART_CHK(getTime(startTime[cnt-1],tStr,"FLEXPART_FLIGHT_STARTING_TIMES"));
-		  	
-			if(!getMvDate(dStr,tStr,startDate2))
-				return false;  
-		}	
-	}
-	
-	
-	rangeStart=startDate1;
-	rangeEnd=startDate2 + static_cast<double>(lenSec)/86400.;
+	out.close();
 	
 	return true;
 }
 
-bool FlexpartRun::getPredefInputPath(const string& rootPath,const MvDate& startDate,const MvDate& /*endDate*/,string &resDir)
-{
-	//Scan rootpath for FLEXTRA input directories   
-	DIR *dp;
-    	struct dirent *dirp;
-    	if((dp  = opendir(rootPath.c_str())) == NULL) 
-    	{
-        	marslog(LOG_EROR,"Failed to open directory: %s",rootPath.c_str());
-        	return false;
-    	}
-
-	vector<MvDate> dateVec;
-	vector<string> pathVec;
-
-    	string::size_type pos;
-    	while ((dirp = readdir(dp)) != NULL) 
-    	{
-		string name(dirp->d_name);
-		if(name.size() == 13 && (pos=name.find("_")) != string::npos )
-		{  
-		  	string s;
-			string sDate=name.substr(0,8);
-			string sTime=name.substr(9,4);
-		
-			s=sDate;
-			sDate=s.substr(0,4) + "-" + s.substr(4,2) + "-" + s.substr(6,2);
-			
-			s=sTime;
-			sTime=s.substr(0,2) + ":" + s.substr(2,4) + ":00";
-			
-			s=sDate + " " + sTime;
-
-			MvDate cDate(s.c_str());
-			
-			if(cDate <= startDate)
-			{
-			  	dateVec.push_back(cDate);
-				pathVec.push_back(name);
-			}	
-		}	
-	} 	
-
-   	closedir(dp);
-   
-	if(pathVec.size() > 0)
-	{
-	  	resDir=rootPath + "/" + pathVec.back();
-		return true;
-	}	
-	
-	return false;
-}  
-	
-
 void FlexpartRun::serve( MvRequest& in, MvRequest& out)
 {
   	cout << "--------------FlexpartRun::serve()--------------" << endl;
@@ -1154,37 +898,49 @@ void FlexpartRun::serve( MvRequest& in, MvRequest& out)
 	  	return;
 	}
 	
-	//Get FLEXTRA RUN MODE
-	string trMode;
-	getParamValueId(trMode,in,"FLEXPART_RUN_MODE",modeIds_);	
+	//Generate OUTGRID file
+	string fGrid=tmpPath + "/OUTGRID";
+	if(!generateOutGridFile(fGrid,in))
+	{
+	  	return;
+	}
 	
-	if(trMode  == "1")
+	//Generate RELEASES file
+	string fRelease=tmpPath + "/RELEASES";
+	if(!generateReleasesFile(fRelease,in))
 	{
-	  	string fStart=tmpPath + "/STARTPOINTS";
-		if(!generateStartPointsFile(fStart,in))
-		{
-		  	return;
-		}	
+	  	return;
 	}
-	else if(trMode  == "2")
+	
+	//Generate AGECLASSES file
+	string fAge=tmpPath + "/AGECLASSES";
+	if(!generateAgeClassesFile(fAge,in))
 	{
-	  	string fStart=tmpPath + "/STARTCET";
-		if(!generateStartCetFile(fStart,in))
-		{
-		  	return;
-		}	
+	  	return;
 	}
-	else if(trMode  == "3")
+	
+	//Generate AGECLASSES file
+	string fReceptors=tmpPath + "/RECEPTORS";
+	if(!generateReceptorsFile(fReceptors,in))
 	{
-	  	string fStart=tmpPath + "/STARTFLIGHT";
-		if(!generateStartFlightFile(fStart,in))
-		{
-		  	return;
-		}	
+	  	return;
+	}
+	
+	//Flexpart exe
+	string exe;	
+	const char *exeC=in("FLEXPART_EXE_PATH");
+	if(exeC)
+	{
+		exe=string(exeC);
 	}
+	if(!exeC || exe.empty())
+	{
+	  	exe="_UNDEF_";
+	}	
+	
 
 	//-----------------------
-	// Run FLEXTRA
+	// Run FLEXPART
 	//-----------------------
 	
 	//Find out the directory where the Flexpart Run icon is located
@@ -1228,19 +984,11 @@ void FlexpartRun::serve( MvRequest& in, MvRequest& out)
 	}  
 	*/
 
-	string trModeName;
-	if(trMode  == "1")
-		trModeName="NORMAL";
-	if(trMode  == "2")
-		trModeName="CET";
-	if(trMode  == "3")
-		trModeName="FLIGHT";
-
 	string resFileName="res.txt";
 	string logFileName="log.txt";
 	
 	//Run the flexpart script
-	string cmd = flexpartScript + " " + tmpPath + " " + trModeName + " " + resFileName + " " + logFileName; 
+	string cmd = flexpartScript + " \"" + tmpPath + "\" \"" + logFileName + "\" \"" + exe + "\""; 
 
 	//marslog(LOG_INFO,"Execute command: %s",cmd.c_str());
 	cout << "Execute command: " << cmd << endl;
diff --git a/src/Flextra/FlexpartRunDef b/src/Flextra/FlexpartRunDef
index a82c66a..55e4601 100644
--- a/src/Flextra/FlexpartRunDef
+++ b/src/Flextra/FlexpartRunDef
@@ -1,7 +1,7 @@
 
 FLEXPART_RUN; Flextra_run; experimental
 {	
-	FLEXPART_EXE
+	FLEXPART_EXE_PATH
 {
 		@
 	}  = ''
@@ -52,11 +52,21 @@ FLEXPART_RUN; Flextra_run; experimental
 	  @
 	} =''
 
+	FLEXPART_STARTING_TIME
+	{
+	  @
+	} =''
+
 	FLEXPART_ENDING_DATE
 	{
 	  @
 	} =''
 
+	FLEXPART_ENDING_TIME
+	{
+	  @
+	} =''
+
 	FLEXPART_OUTPUT_INTERVAL
 	{
 	  	@
@@ -173,4 +183,124 @@ FLEXPART_RUN; Flextra_run; experimental
                 MASS MIXING RATIO ; MASS MIXING RATIO
 		
 	} = NO
+
+	FLEXPART_GRID_WEST
+	{
+		*
+	} 
+
+	FLEXPART_GRID_SOUTH
+	{
+		*
+	} 
+
+	FLEXPART_GRID_NX
+	{
+		*
+	} 
+
+	FLEXPART_GRID_NY
+	{
+		*
+	} 
+
+	FLEXPART_GRID_DX
+	{
+		*
+	} 
+
+	FLEXPART_GRID_DY
+	{
+		*
+	} 
+
+	FLEXPART_GRID_LEVELS
+	{
+		*
+		/
+	} 
+
+	FLEXPART_RELEASE_SPECIES
+	{
+		@
+		/
+	}  
+	FLEXPART_RELEASE_NAMES
+	{
+		@
+		/
+	}  
+
+	FLEXPART_RELEASE_STARTING_DATES
+	{
+		@
+		/
+	} 
+	FLEXPART_RELEASE_STARTING_TIMES
+	{
+		@
+		/
+	} 
+	FLEXPART_RELEASE_ENDING_DATES
+	{
+		@
+		/
+	} 
+	FLEXPART_RELEASE_ENDING_TIMES
+	{
+		@
+		/
+	} 
+
+	FLEXPART_RELEASE_AREAS_WEST
+	{
+		*
+		/
+	} 
+	FLEXPART_RELEASE_AREAS_SOUTH
+	{
+		*
+		/
+	} 
+	FLEXPART_RELEASE_AREAS_NORTH
+	{
+		*
+		/
+	} 
+	FLEXPART_RELEASE_AREAS_EAST
+	{
+		*
+		/
+	}
+	FLEXPART_RELEASE_LEVELS_TOP
+	{
+		*
+		/
+	}
+	FLEXPART_RELEASE_LEVELS_BOTTOM
+	{
+		*
+		/
+	}   
+	FLEXPART_RELEASE_LEVELS_UNITS
+	{
+		*
+		/
+	} 
+	FLEXPART_RELEASE_PARTICLES
+	{
+		*
+		/
+	}  
+	FLEXPART_RELEASE_MASSES
+	{
+		*
+		/
+	}  
+
+	FLEXPART_AGECLASSES
+	{
+		@
+		/
+	}  
 }
diff --git a/src/Flextra/Makefile.am b/src/Flextra/Makefile.am
index a798330..bbb1b7c 100644
--- a/src/Flextra/Makefile.am
+++ b/src/Flextra/Makefile.am
@@ -47,7 +47,6 @@ bin_FlexpartToGrib_LDADD    = $(STANDARD_METVIEW_LIBS) ../../lib/libUtil.a  $(FL
 
 sharedir    = $(datadir)/metview/etc
 local_sharedir = ../../share/metview/etc
-local_iconsdir = ../../share/metview/icons
 share_DATA = $(local_sharedir)/ObjectSpec.Flextra \
 	     $(local_sharedir)/FlextraPrepareDef  $(local_sharedir)/FlextraPrepareRules \
 	     $(local_sharedir)/FlextraRunDef  $(local_sharedir)/FlextraRunRules \
@@ -61,20 +60,14 @@ share_DATA = $(local_sharedir)/ObjectSpec.Flextra \
 $(share_DATA): $(local_sharedir)/%: %
 	${INSTALL} $<  $(local_sharedir)
 
-icons =  $(local_iconsdir)/FLEXTRA_PREPARE.xpm $(local_iconsdir)/FLEXTRA_RUN.xpm \
-         $(local_iconsdir)/FLEXTRA_VISUALISER.xpm  $(local_iconsdir)/FLEXTRA_FILE.xpm
 
-$(icons): $(local_iconsdir)/%: %
-	${INSTALL} $<  $(local_iconsdir)
+CLEANFILES = $(share_DATA) 
 
-CLEANFILES = $(share_DATA) $(icons)
+BUILT_SOURCES = bin 
 
-BUILT_SOURCES = bin $(icons)
-
-EXTRA_DIST = FLEXTRA_PREPARE.xpm FLEXTRA_RUN.xpm \
-             FLEXTRA_VISUALISER.xpm FLEXTRA_FILE.xpm ObjectSpec.Flextra  \
+EXTRA_DIST = ObjectSpec.Flextra  \
              FlextraPrepareDef FlextraPrepareRules \
-	     FlextraRunDef FlextraRunRules \
+             FlextraRunDef FlextraRunRules \
              FlextraVisualiserDef FlextraVisualiserRules \
              FlexpartRunDef FlexpartRunRules ObjectSpec.Flexpart
 
diff --git a/src/Flextra/Makefile.in b/src/Flextra/Makefile.in
index f3309cc..e683838 100644
--- a/src/Flextra/Makefile.in
+++ b/src/Flextra/Makefile.in
@@ -185,6 +185,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -200,6 +201,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -226,11 +229,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -390,7 +396,6 @@ bin_FlexpartToGrib_LDFLAGS =
 bin_FlexpartToGrib_LDADD = $(STANDARD_METVIEW_LIBS) ../../lib/libUtil.a  $(FLIBS)
 sharedir = $(datadir)/metview/etc
 local_sharedir = ../../share/metview/etc
-local_iconsdir = ../../share/metview/icons
 share_DATA = $(local_sharedir)/ObjectSpec.Flextra \
 	     $(local_sharedir)/FlextraPrepareDef  $(local_sharedir)/FlextraPrepareRules \
 	     $(local_sharedir)/FlextraRunDef  $(local_sharedir)/FlextraRunRules \
@@ -398,15 +403,11 @@ share_DATA = $(local_sharedir)/ObjectSpec.Flextra \
 	     $(local_sharedir)/ObjectSpec.Flexpart \
              $(local_sharedir)/FlexpartRunDef  $(local_sharedir)/FlexpartRunRules
 
-icons = $(local_iconsdir)/FLEXTRA_PREPARE.xpm $(local_iconsdir)/FLEXTRA_RUN.xpm \
-         $(local_iconsdir)/FLEXTRA_VISUALISER.xpm  $(local_iconsdir)/FLEXTRA_FILE.xpm
-
-CLEANFILES = $(share_DATA) $(icons)
-BUILT_SOURCES = bin $(icons)
-EXTRA_DIST = FLEXTRA_PREPARE.xpm FLEXTRA_RUN.xpm \
-             FLEXTRA_VISUALISER.xpm FLEXTRA_FILE.xpm ObjectSpec.Flextra  \
+CLEANFILES = $(share_DATA) 
+BUILT_SOURCES = bin 
+EXTRA_DIST = ObjectSpec.Flextra  \
              FlextraPrepareDef FlextraPrepareRules \
-	     FlextraRunDef FlextraRunRules \
+             FlextraRunDef FlextraRunRules \
              FlextraVisualiserDef FlextraVisualiserRules \
              FlexpartRunDef FlexpartRunRules ObjectSpec.Flexpart
 
@@ -862,9 +863,6 @@ uninstall-am: uninstall-binPROGRAMS uninstall-shareDATA
 $(share_DATA): $(local_sharedir)/%: %
 	${INSTALL} $<  $(local_sharedir)
 
-$(icons): $(local_iconsdir)/%: %
-	${INSTALL} $<  $(local_iconsdir)
-
 bin:
 	ln -s ../../bin bin
 
diff --git a/src/Flextra/ObjectSpec.Flexpart b/src/Flextra/ObjectSpec.Flexpart
index f1fc818..c5c2a77 100644
--- a/src/Flextra/ObjectSpec.Flexpart
+++ b/src/Flextra/ObjectSpec.Flexpart
@@ -10,7 +10,7 @@
 
 object,
 	class               = FLEXPART_RUN,
- 	can_be_created      = False,
+ 	can_be_created      = True,
  	definition_file     = '$METVIEW_DIR_SHARE/etc/FlexpartRunDef',
 	rules_file          = '$METVIEW_DIR_SHARE/etc/FlexpartRunRules',
 	default_name        = 'Flexpart Run',		
diff --git a/src/Flextra/ObjectSpec.Flextra b/src/Flextra/ObjectSpec.Flextra
index bfd99a3..25d0d76 100644
--- a/src/Flextra/ObjectSpec.Flextra
+++ b/src/Flextra/ObjectSpec.Flextra
@@ -33,6 +33,7 @@ object,
 	rules_file          = '$METVIEW_DIR_SHARE/etc/FlextraPrepareRules',
 	default_name        = 'Flextra Prepare',		
 	type                = Data,
+        icon_box            = Data access,
 	expand	            = 75,	
 	macro               = flextra_prepare,
 	editor_type	    = SimpleEditor,	
@@ -50,6 +51,7 @@ object,
 	rules_file          = '$METVIEW_DIR_SHARE/etc/FlextraRunRules',
 	default_name        = 'Flextra Run',		
 	type                = Data,
+        icon_box	    = Data processing,
 	expand	            = 75,	
 	macro               = flextra_run,
 	editor_type	    = SimpleEditor,	
@@ -66,6 +68,7 @@ object,
 	rules_file          = '$METVIEW_DIR_SHARE/etc/FlextraVisualiserRules',
 	default_name        = 'Flextra Visualiser',		
 	type                = Data,
+        icon_box	    = Visualisers,
 	expand	            = 75,	
 	macro               = flextra_visualiser,
 	editor_type	    = SimpleEditor,	
diff --git a/src/FlextraExaminer/Makefile.in b/src/FlextraExaminer/Makefile.in
index b7d28d8..6c2ea43 100644
--- a/src/FlextraExaminer/Makefile.in
+++ b/src/FlextraExaminer/Makefile.in
@@ -177,6 +177,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -192,6 +193,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -218,11 +221,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/GeopExaminer/Makefile.in b/src/GeopExaminer/Makefile.in
index a231e40..e9d3375 100644
--- a/src/GeopExaminer/Makefile.in
+++ b/src/GeopExaminer/Makefile.in
@@ -177,6 +177,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -192,6 +193,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -218,11 +221,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/GribExaminer/Makefile.in b/src/GribExaminer/Makefile.in
index 9e7c022..67f7fa4 100644
--- a/src/GribExaminer/Makefile.in
+++ b/src/GribExaminer/Makefile.in
@@ -177,6 +177,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -192,6 +193,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -218,11 +221,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/GribVectors/Makefile.in b/src/GribVectors/Makefile.in
index 08571bc..a239307 100644
--- a/src/GribVectors/Makefile.in
+++ b/src/GribVectors/Makefile.in
@@ -158,6 +158,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -173,6 +174,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -199,11 +202,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/GribVectors/ObjectSpec.GribVectors b/src/GribVectors/ObjectSpec.GribVectors
index 3d520bc..61288da 100644
--- a/src/GribVectors/ObjectSpec.GribVectors
+++ b/src/GribVectors/ObjectSpec.GribVectors
@@ -1,7 +1,7 @@
 object,
     class             = GRIB_VECTORS_APP,
     can_be_created    = True,
-    icon_box          = To be organised,
+    icon_box          = Plotting,
     definition_file   = '$METVIEW_DIR_SHARE/etc/GribVectorsDef',
     rules_file      = '$METVIEW_DIR_SHARE/etc/GribVectorsRules',
     default_name      = Grib Vectors,
diff --git a/src/Hovmoeller/Factory.cc b/src/Hovmoeller/Factory.cc
index e8e7f67..3b6b18f 100644
--- a/src/Hovmoeller/Factory.cc
+++ b/src/Hovmoeller/Factory.cc
@@ -9,17 +9,14 @@
 
 /*! \file Factory.cc
     \brief Definition of Parameter base class.
-    
+
     Magics Team - ECMWF 2004
-    
+
     Started: Jan 2004
-    
+
     Changes:
-    
-*/
 
-//F using namespace magics;
-//F using namespace std;   // to run on AIX
+*/
 
 template<class B>
 map<string, SimpleFactory<B>* >* SimpleFactory<B>::map_ = 0;
@@ -27,40 +24,39 @@ map<string, SimpleFactory<B>* >* SimpleFactory<B>::map_ = 0;
 template<class B>
 SimpleFactory<B>::SimpleFactory(const string& name): name_(name)
 {
-	if (!map_) map_ = new map<string, SimpleFactory<B>* >();
-	(*map_)[name_] = this; 
+   if (!map_) map_ = new std::map<string, SimpleFactory<B>* >();
+   (*map_)[name_] = this;
 }
 
 template<class B>
 SimpleFactory<B>::~SimpleFactory()
 {
-	
 }
 
 template<class B>
 B* SimpleFactory<B>::create(const string& name)
 {
-	SimpleFactory<B>* maker = get(name);
-	if (maker) {
-		B* object =(*maker).make();
-		return object;
-	}
+   SimpleFactory<B>* maker = get(name);
+   if (maker) {
+      B* object =(*maker).make();
+      return object;
+   }
+
 #ifdef MAGICS_EXCEPTION
-	throw NoFactoryException(name);
+   throw NoFactoryException(name);
 #else 
-	return 0;
+   return 0;
 #endif	
-} 
-	
+}
+
 template<class B>
 SimpleFactory<B>* SimpleFactory<B>::get(const string& name)
-{	 
-//	ensure(map_);
-	typename map<string, SimpleFactory<B>*>::iterator maker = (*map_).find(name);
-	if (maker != (*map_).end()) return  (*maker).second;
+{
+   typename std::map<string, SimpleFactory<B>*>::iterator maker = (*map_).find(name);
+   if (maker != (*map_).end()) return  (*maker).second;
 #ifdef MAGICS_EXCEPTION
-	throw NoFactoryException(name);
+   throw NoFactoryException(name);
 #else 
-	return 0;
+   return 0;
 #endif
 }
diff --git a/src/Hovmoeller/Factory.h b/src/Hovmoeller/Factory.h
index b38c39e..2ac9ff0 100644
--- a/src/Hovmoeller/Factory.h
+++ b/src/Hovmoeller/Factory.h
@@ -9,22 +9,20 @@
 
 /*! \file Factory.h
     \brief Definition of Factory  class.
-    
+
     Magics Team - ECMWF 2004
-    
+
     Started: Jan 2004
-    
+
     Changes:
-    
+
 */
 #ifndef MvFactory_H
 #define MvFactory_H
 
-//#include "magics.h"
-//#include "Exception.h" 
-//#include "Log.h"
-
-// namespace magics {
+#include <map>
+#include <string>
+using namespace std;
 
 #if 0
 class NoFactoryException : public MagicsException
@@ -40,30 +38,34 @@ public:
 
 template<class B> 
 class SimpleFactory {
+
 public:
-// -- Contructors
-	SimpleFactory(const string& name);
-	virtual ~SimpleFactory();
-// methods
-	static B*  create(const string& name);
-	virtual B* make() const  = 0;
-// -- Members
-	static map<string, SimpleFactory<B>* >* map_;
-	static SimpleFactory<B>* get(const string& name);
-	string name_;	 
+
+   // -- Contructors
+   SimpleFactory(const string& name);
+   virtual ~SimpleFactory();
+
+   // -- Methods
+   static B*  create(const string& name);
+   virtual B* make() const  = 0;
+
+   // -- Members
+   static map<string, SimpleFactory<B>* >* map_;
+   static SimpleFactory<B>* get(const string& name);
+   string name_;
 };
 
 template <class A, class B=A>
 class SimpleObjectMaker : public SimpleFactory<B>
 {
+
 public :
-	SimpleObjectMaker(const string& name) : SimpleFactory<B>(name) 
-        {}
-	B* make() const {  return new A(); }
-};
 
+   SimpleObjectMaker(const string& name) : SimpleFactory<B>(name)
+   {}
 
-//F } // namespace magics
+   B* make() const { return new A(); }
+};
 
 #include "Factory.cc"
 
diff --git a/src/Hovmoeller/HOVMOELLERDATA.xpm b/src/Hovmoeller/HOVMOELLERDATA.xpm
index 5fd516b..7cd27fb 100644
--- a/src/Hovmoeller/HOVMOELLERDATA.xpm
+++ b/src/Hovmoeller/HOVMOELLERDATA.xpm
@@ -1,42 +1,43 @@
 /* XPM */
-static char *HOVMOELLERDATA[]={
-"32 32 7 1",
-"c c #000000",
-"d c #007fff",
-"a c #777777",
-"b c #ccccff",
-"e c #d9b777",
-"# c #ff00ff",
-". c #ffffff",
+static char * HOVMOELLERDATA_xpm[] = {
+"32 32 8 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #EC92EB",
+"@	c #BABABA",
+"#	c #E9E9FB",
+"$	c #7F7F7F",
+"%	c #92BEEC",
+"&	c #E4D8C2",
 "................................",
 "................................",
 "................................",
 "................................",
-".....###........................",
-"......###.......................",
-"........###.....................",
-".........###aaaaaaaaaaa.........",
-".....aaaabb###bbbbbbbbbaaaa.....",
-"..aaabbbbbbbb##bbbbbbbbbbbbaaa..",
-".abbbbbbbbbbbb##bbbbbbbbbbbbbba.",
-"abbbbbbbbbbbbbb##bbbbbbbbbbbbbba",
-"bbbbbbbbbaaaaaaa##aaaaabbbbbbbbb",
-"bbbbbaaaabbbbbbbb##bbbbaaaabbbbb",
-"bbaaabbbbbbbbbbbbb##bbbbbbbaaabb",
-"babbbbbbbbbbbbbbbbb##bbbbbbbbbab",
-"abbbbbbbbbbbbbbbbbbb##bbbbbbbbba",
-"bbbbbbbbbaaaaaaaaaaaa#abbbbbbbbb",
-"bbbbbaaaabbbbbbbbbbbb##aaaabbbbb",
-"bbaaabbbbbbbbbbbbbbbbb##bbbaaabb",
-"babbbbbbbbbbbbbbbbbbbbb##bb#bbab",
-"abbbbbbbbbbbbbbbbbbbbbb##b##bbba",
-"bbbbbbbbbaaaaaaaaaaaaaa#####bbbb",
-"bbbbbaaaabbbbbbbbbbbbbbb####bbbb",
-"bbaaabbbbbbbbbbbbbbbbbb#####aabb",
-"babbbbbbbbbbbbbbbbbbbb######bbab",
-"abbbbbbbbbbbbbbbbbbbb#######bbba",
-"bbbbbbbbbccccccccccccccbbbbbbbbb",
-"bbbbbccccddddddeeeeeeeecccccbbbb",
-"bbcccdddddddddeeeeeeeeeeeeecccbb",
-"bcddddddddddeeeeeeeeeeeeeeeeeecb",
-"cddddddddddeeeeeeeeeeeeeeeeeeeec"};
+".....+++........................",
+"......+++.......................",
+"........+++.....................",
+".........+++@@@@@@@@@@@.........",
+".....@@@@##+++#########@@@@.....",
+"..@@@########++############@@@..",
+".@############++##############@.",
+"@##############++##############@",
+"#########@@@@@@@++@@@@@#########",
+"#####@@@@########++####@@@@#####",
+"##@@@#############++#######@@@##",
+"#@#################++#########@#",
+"@###################++#########@",
+"#########@@@@@@@@@@@@+@#########",
+"#####@@@@############++@@@@#####",
+"##@@@#################++###@@@##",
+"#@#####################++##+##@#",
+"@######################++#++###@",
+"#########@@@@@@@@@@@@@@+++++####",
+"#####@@@@###############++++####",
+"##@@@##################+++++@@##",
+"#@####################++++++##@#",
+"@####################+++++++###@",
+"#########$$$$$$$$$$$$$$#########",
+"#####$$$$%%%%%%&&&&&&&&$$$$$####",
+"##$$$%%%%%%%%%&&&&&&&&&&&&&$$$##",
+"#$%%%%%%%%%%&&&&&&&&&&&&&&&&&&$#",
+"$%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&$"};
diff --git a/src/Hovmoeller/HOVMOELLERVIEW.xpm b/src/Hovmoeller/HOVMOELLERVIEW.xpm
new file mode 100644
index 0000000..894b943
--- /dev/null
+++ b/src/Hovmoeller/HOVMOELLERVIEW.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char * HOVMOELLERVIEW_xpm[] = {
+"32 32 10 1",
+" 	c None",
+".	c #989898",
+"+	c #FFFFFF",
+"@	c #BEBEBE",
+"#	c #EC92EB",
+"$	c #BABABA",
+"%	c #E9E9FB",
+"&	c #7F7F7F",
+"*	c #92BEEC",
+"=	c #E4D8C2",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+ at +####+++++++++++++++++++++ at +.",
+".+ at +++###++++++++++++++++++++ at +.",
+".+ at +++++###++++++++++++++++++ at +.",
+".+ at ++++++###@$$$$$$$$$$++++++ at +.",
+".+ at ++$$$$%%###%%%%%%%%%$$$$++ at +.",
+".+@$$%%%%%%%%##%%%%%%%%%%%%$$@+.",
+".+@%%%%%%%%%%%##%%%%%%%%%%%%%@+.",
+".+@%%%%%%%%%%%%##%%%%%%%%%%%%@+.",
+".+@%%%%%%$$$$$$$##$$$$$%%%%%%@+.",
+".+@%%$$$$%%%%%%%%##%%%%$$$$%%@+.",
+".+@$$%%%%%%%%%%%%%##%%%%%%%$$@+.",
+".+@%%%%%%%%%%%%%%%%##%%%%%%%%@+.",
+".+@%%%%%%%%%%%%%%%%%##%%%%%%%@+.",
+".+@%%%%%%$$$$$$$$$$$@#$%%%%%%@+.",
+".+@%%$$$$%%%%%%%%%%%%##$$$$%%@+.",
+".+@$$%%%%%%%%%%%%%%%%%##%%%$$@+.",
+".+@%%%%%%%%%%%%%%%%%%%%##%%#%@+.",
+".+@%%%%%%%%%%%%%%%%%%%%##%##%@+.",
+".+@%%%%%%$$$$$$$$$$$$$$#####%@+.",
+".+@%%$$$$%%%%%%%%%%%%%%%####%@+.",
+".+@$$%%%%%%%%%%%%%%%%%%#####$@+.",
+".+@%%%%%%%%%%%%%%%%%%%######%@+.",
+".+@%%%%%%%%%%%%%%%%%%#######%@+.",
+".+@%%%%%%&&&&&&&&&&&&&&%%%%%%@+.",
+".+@%%&&&&******========&&&&&%@+.",
+".+@&&*********=============&&@+.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".++++++++++++++++++++++++++++++.",
+"................................"};
diff --git a/src/Hovmoeller/HovArea.cc b/src/Hovmoeller/HovArea.cc
new file mode 100644
index 0000000..80223bf
--- /dev/null
+++ b/src/Hovmoeller/HovArea.cc
@@ -0,0 +1,239 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "HovArea.h"
+
+HovAreaToolkit::HovAreaToolkit() :
+                geoDir_(HOV_EW)
+{}
+
+const char* HovAreaToolkit::GetSecondCoordName()
+{
+   if ( geoDir_ == HOV_NS )
+      return HOV_VARLON.c_str();
+   else
+      return HOV_VARLAT.c_str();
+}
+
+bool HovAreaToolkit::ComputeSecondCoord()
+{
+   double x, y;
+   int    i;
+
+   if( geoDir_ == HOV_EW )    //average E->W
+   {
+      for (i = 0, y = y1_; y >= y2_;)
+      {
+         // do not add within the loop becuase of cumulative errors
+         coord1_.push_back(y);
+         i++;
+         y = y1_ - (i * gridNS_);
+      }
+   }
+   else                       //average N->S
+   {
+      for (i = 0, x = x1_; x <= x2_;)
+      {
+         // do not add within the loop becuase of cumulative errors
+         coord1_.push_back(x);
+         i++;
+         x = x1_ + (i * gridEW_);
+      }
+   }
+
+   // Initialise number of points
+   this->NPoints(coord1_.size());
+
+   return true;
+}
+
+bool HovAreaToolkit::ComputeValues(MvField &field, int)
+{
+   MvFieldExpander x(field);
+
+   // Average over area
+   // 1) AverageAlong() does not know array size. If it fails then returned array
+   //    remains empty. Thus, fill with missing values here.
+   // 2) AverageAlong() assumes that the AREA definition follows the MARS convention
+   //    N-S/W-E. Therefore, if average direction is EW then the computed values follow
+   //    the order N-S, e.g. xint_[0] = average(N), ..., xint_[nrPoints_] = average(S)
+   //    and gcoord1_[0] = N], ..., gcoord1_[nrPoints_] = S.
+   // 3) gridNS_ or gridEW_ have the same value
+
+   bool interp = false; //set bilinear interpolation
+   if ( !field.averageAlong(xint_,x1_,y1_,x2_,y2_,geoDir_,nrPoints_,gridNS_,interp) )
+   {
+      for (int i = 0; i < nrPoints_; i++ )
+         xint_[i] = DBL_MAX;
+
+      return false;
+   }
+
+   return true;
+}
+
+string HovAreaToolkit::GetTitle(ParamInfo *par)
+{
+   char title[256];
+   if ( geoDir_ == HOV_EW )
+   {
+      sprintf(title,"Hovmoeller of %s %s %s (%.1f%s-%.1f%s)",
+              par->ParamLongName().c_str(), par->LevelTitle().c_str(), par->ExpVerTitle().c_str(),
+              (x1_< 0) ? -x1_ : x1_, (x1_<0) ? "W" : "E",
+              (x2_< 0) ? -x2_ : x2_, (x2_<0) ? "W" : "E" );
+   }
+   else
+   {
+      sprintf(title,"Hovmoeller of %s %s %s (%.1f%s-%.1f%s)",
+              par->ParamLongName().c_str(), par->LevelTitle().c_str(), par->ExpVerTitle().c_str(),
+              (y1_< 0) ? -y1_ : y1_, (y1_<0) ? "S" : "N",
+              (y2_< 0) ? -y2_ : y2_, (y2_<0) ? "S" : "N" );
+   }
+
+   return string(title);
+}
+
+bool HovAreaToolkit::GetInputInfo(MvRequest& in)
+{
+    // Get area
+   y1_ = in("AREA",0);
+   x1_ = in("AREA",1);
+   y2_ = in("AREA",2);
+   x2_ = in("AREA",3);
+
+   // Check if coordinates follow Mars rules (n/w/s/e)
+   if ( x1_ > x2_ )
+   {
+      double W = x1_;
+      x1_ = x2_;
+      x2_ = W;
+   }
+   if( y2_ > y1_ )
+   {
+      double W = y1_;
+      y1_ = y2_;
+      y2_ = W;
+   }
+
+   // Get direction
+   geoDir_ = ((const char*)in("AVERAGE_DIRECTION") && strcmp(in("AVERAGE_DIRECTION"),"NORTH_SOUTH" ) == 0 ) ? HOV_NS : HOV_EW;
+
+   // Get swap axes flag
+   swapAxes_ = ( (const char*)in("SWAP_AXES") && strcmp(in("SWAP_AXES"),"YES") == 0 ) ? true : false;
+
+   // Set axes orientation
+   if ( (swapAxes_ && geoDir_ == HOV_EW) || (!swapAxes_ && geoDir_ == HOV_NS) )
+      verticalAxis_ = HOV_TIME;
+   else
+      verticalAxis_ = HOV_GEO;
+
+   // Initialize x/y resolution
+   gridNS_= in("RESOLUTION");
+   gridEW_= in("RESOLUTION");
+
+   return true;
+}
+
+bool HovAreaToolkit::GetInputInfo( MvNetCDF* netcdf )
+{
+   // Retrieve attributes values
+   MvRequest req = netcdf->getRequest();
+
+   // Retrieve Direction value
+   const char* cp = (const char*)req("average_direction");
+   if ( cp == NULL )
+   {
+      marslog(LOG_EROR, "Netcdf file: attribute average_direction not found");
+      return false;
+   }
+   geoDir_ = ( strcmp(cp,"NORTH_SOUTH") == 0 ) ? HOV_NS : HOV_EW;
+
+   // Retrieve swap axes flag, if exists
+   cp = (const char*)req("swap_axes");
+   swapAxes_ = ( cp == NULL ) ? false : atoi(cp);
+
+   // Get common information from the netCDF file
+   // This command needs the geoDir_ info
+   if ( !GetInputCommonInfo(netcdf) )
+      return false;
+
+   return true;
+}
+
+void HovAreaToolkit::NcWriteGlobalAttributesApp()
+{
+   // Add average direction
+   const char* adir = ( geoDir_ == HOV_NS ) ? "NORTH_SOUTH" : "EAST_WEST";
+   netcdf_->addAttribute("average_direction",adir);
+
+   // Add swap axes flag
+   if ( swapAxes_ )
+      netcdf_->addAttribute("swap_axes",swapAxes_);
+}
+
+bool HovAreaToolkit::NcWriteSecondCoord()
+{
+   // Compute second coords (lat/lng)
+   // Add second coordinate to the netCDF file
+   vector<string> v_sdim(1,GetSecondCoordName());
+   vector<long> v_ndim(1,nrPoints_);
+   MvNcVar *ncx = netcdf_->addVariable(v_sdim[0],ncDouble,v_ndim,v_sdim);
+   ncx->put(coord1_,(long)nrPoints_);
+   if ( verticalAxis_ == HOV_TIME )
+   {
+      ncx->addAttribute("long_name", "longitude");
+      ncx->addAttribute("units", "degrees_east");
+   }
+   else
+   {
+      ncx->addAttribute("long_name", "latitude");
+      ncx->addAttribute("units", "degrees_north"); //or degrees_south?
+   }
+
+   return true;
+}
+
+//--------------------------------------------------------------
+
+void AreaHovmoeller::serve (MvRequest& in, MvRequest& out)
+{
+cout << "Request IN:" << endl;
+in.print();
+
+     // Compute Hovmoeller diagram
+     if (!Compute(in,out))
+          setError(1, "Failed to generate Hovmoeller.");
+
+cout << "Request OUT:" << endl;
+out.print();
+}
+
+//-------------------------------------------------------------------------
+
+// Translate Metview 3 AreaHovmoeller Data to Metview 4 definition. Call Metview 4
+// server to process the job.
+void AreaHovmoellerM3::serve(MvRequest& in,MvRequest& out)
+{
+   // Send a general warning message
+   setError(0, "The Metview 3 Area-Hovmoeller DATA icon is deprecated. An automatic translation to the correspondent Metview 4 icon will be performed internally, but may not work for all cases. It is recommended to manually replace the old icons with their new equivalents.");
+
+   // There are input parameters that are no longer available in Metview 4.
+   // Remove them and send a warning message.
+   setError(0,"The Metview 3 Area-Hovmoeller DATA icon is deprecated. Parameters TIME_AXIS_DIRECTION, TIME_AXIS and GEO_AXIS will not be translated internally.");
+   MvRequest req = in;
+   req.unsetParam("TIME_AXIS_DIRECTION");
+   req.unsetParam("TIME_AXIS");
+   req.unsetParam("GEO_AXIS");
+
+   // Keep the remaining parameters and update the VERB
+   req.setVerb("AREA_HOVM");
+
+   // Call the server to process the job
+   AreaHovmoeller::serve(req,out);
+}
diff --git a/src/Hovmoeller/HovArea.h b/src/Hovmoeller/HovArea.h
new file mode 100644
index 0000000..eca44e6
--- /dev/null
+++ b/src/Hovmoeller/HovArea.h
@@ -0,0 +1,79 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 HOVAREA_H
+#define HOVAREA_H
+
+#include "Hovmoeller.h"
+#include "HovToolkit.h"
+
+class HovAreaToolkit : public HovToolkit
+{
+
+public:
+
+   HovAreaToolkit();
+   ~HovAreaToolkit() {};
+
+   // Common functions
+   string GetTitle(ParamInfo*);
+   const char* GetSecondCoordName();
+   bool SecondAuxiliaryCoord() { return false; }
+   const char* ApplicationType() { return "AREA"; }
+   bool NcWriteSecondCoord();
+   void NcWriteGlobalAttributesApp();
+
+   // Calculate diagram values
+   bool ComputeValues(MvField&, int=0);
+
+   // Compute coordinates
+   bool ComputeSecondCoord();
+
+   // Initialize variables
+   bool GetInputInfo(MvRequest&);  //from user interface
+   bool GetInputInfo(MvNetCDF*);   //from the netCDF file
+
+protected:
+
+   int geoDir_;   // average direction: East-West or North-South
+};
+
+//---------------------------------------------------------------------
+
+class AreaHovmoeller : public HovAreaToolkit, public Hovmoeller
+{
+
+public:
+
+   AreaHovmoeller() : Hovmoeller("AREA_HOVM") {};
+   AreaHovmoeller(const char* kw) : Hovmoeller(kw) {};
+
+   ~AreaHovmoeller() {};
+
+   // Entry point
+   void serve (MvRequest& in, MvRequest& out);
+};
+
+static SimpleObjectMaker <HovAreaToolkit,HovToolkit> area ("AREA");
+
+//---------------------------------------------------------------------
+
+class AreaHovmoellerM3 : public AreaHovmoeller
+{
+
+public:
+
+   AreaHovmoellerM3() : AreaHovmoeller("AREA_HOV") {};
+   ~AreaHovmoellerM3() {};
+
+   // Entry point
+   void serve (MvRequest&, MvRequest&);
+};
+
+#endif
diff --git a/src/Hovmoeller/HovExpand.cc b/src/Hovmoeller/HovExpand.cc
new file mode 100644
index 0000000..15227df
--- /dev/null
+++ b/src/Hovmoeller/HovExpand.cc
@@ -0,0 +1,104 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "HovExpand.h"
+#include "HovToolkit.h"
+
+void ExpandHovmoeller::serve(MvRequest& in,MvRequest& out)
+{
+cout << "Hovmoeller::serve in" << endl;
+in.print();
+
+   // Initialize object from the user interface
+   string netfnameIn,hovTypeIn;
+   MvRequest dataRequestIn;
+   if ( !GetInputInfo(in,netfnameIn,dataRequestIn,hovTypeIn) )
+      return;
+
+   // Instantiate the related HovToolkit
+   HovToolkit* hov = SimpleObjectMaker<HovToolkit>::create(hovTypeIn.c_str());
+
+  // Compute the Hovmoeller diagram
+   string action = (const char*)in("_ACTION") ? (const char*)in("_ACTION") : "prepare";
+   if ( !hov->Compute(netfnameIn,dataRequestIn,action,out) )
+      return;
+
+   // Update output request
+   if ( (const char *)in("_NAME") )
+      out("_NAME") = in("_NAME");
+
+cout << "Hovmoeller::serve out" << endl;
+out.print();
+
+   return;
+}
+
+bool ExpandHovmoeller::GetInputInfo(MvRequest& in, string& netfnameIn, MvRequest& dataRequestIn, string& hovTypeIn)
+{
+   // Get netcdf information from UI
+   if ( (const char*)in("NETCDF_PATH") && (strcmp((const char*)in("NETCDF_PATH"),"OFF") && strcmp((const char*)in("NETCDF_PATH"),"off")) )
+      netfnameIn = (const char*)in("NETCDF_PATH");
+   else
+   {
+      // Get information from the icon
+      MvRequest req;
+      in.getValue(req,"NETCDF_DATA");
+      if ( !in.countValues("NETCDF_DATA") || !req.countValues("PATH") ) {
+         setError(1, "No Netcdf Data files specified...");
+         return false;
+      }
+      netfnameIn = (const char*)req("PATH");
+   }
+
+        // Get fieldset information from UI
+   string str;
+   if ( (const char*)in("DATA_PATH")  && (strcmp((const char*)in("DATA_PATH"),"OFF") && strcmp((const char*)in("DATA_PATH"),"off"))  )
+   {
+      str = (const char*)in("DATA_PATH");
+      dataRequestIn.setVerb("GRIB");
+      dataRequestIn("PATH") = str.c_str();
+   }
+   else
+   {
+      // Get information from the icon
+      in.getValue(dataRequestIn,"DATA");
+      if ( !in.countValues("DATA") || !dataRequestIn.countValues("PATH") )
+      {
+         setError(1, "No Data files specified...");
+         return false;
+      }
+   }
+
+   // Extract information from the input netcdf file
+   // Open netcdf file
+   MvNetCDF* netcdfIn = new MvNetCDF();
+   netcdfIn->init(netfnameIn,'r');
+
+   // Check netcdf file attributes
+   MvNcAtt *tmpatt = netcdfIn->getAttribute("_View");
+   if ( !tmpatt )
+   {
+      setError(1, "Netcdf file: missing attribute _View");
+      delete netcdfIn;
+      return false;
+   }
+
+   tmpatt = netcdfIn->getAttribute("type");
+   if ( tmpatt )
+       hovTypeIn = tmpatt->as_string(0);
+   else
+   {
+          setError(0,"Netcdf file: missing attribute type");
+          delete netcdfIn;
+          return false;
+   }
+
+   delete netcdfIn;
+   return true;
+}
diff --git a/src/Hovmoeller/HovExpand.h b/src/Hovmoeller/HovExpand.h
new file mode 100644
index 0000000..bf01f8a
--- /dev/null
+++ b/src/Hovmoeller/HovExpand.h
@@ -0,0 +1,30 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 HOVEXPAND_H
+#define HOVEXPAND_H
+
+#include "Hovmoeller.h"
+
+class ExpandHovmoeller : public Hovmoeller
+{
+public:
+
+   // Constructor/destructor
+   ExpandHovmoeller() : Hovmoeller("EXPAND_HOVM") {};
+   ~ExpandHovmoeller() {};
+
+   // Main function
+   void serve(MvRequest&,MvRequest&);
+
+   // Initialize variables from user interface
+   bool GetInputInfo( MvRequest&, string&, MvRequest&, string& );
+};
+
+#endif
diff --git a/src/Hovmoeller/HovHeight.cc b/src/Hovmoeller/HovHeight.cc
new file mode 100644
index 0000000..d695cdc
--- /dev/null
+++ b/src/Hovmoeller/HovHeight.cc
@@ -0,0 +1,296 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "HovHeight.h"
+
+#define HOV_SP  1013.25     // stardard pressure
+
+void HovHeightToolkit::GenerateKey(string &str, MvRequest& rq)
+{
+   // The level value is ignored to build the key
+   int par = rq("PARAM");
+   int level = 0;
+   const char* expver = rq("EXPVER");
+   char key[16];
+
+   ostrstream oss( key, sizeof( key ) );
+   oss << setfill( '0' )
+       << setw( 1 ) << 'p'
+       << setw( 3 ) << par
+       << setw( 4 ) << level
+       << setw( 4 ) << ( expver ? expver : "_" )
+       << ends;
+
+   str = key;
+
+   return;
+}
+
+void HovHeightToolkit::UpdateLevelList(MvField& field, double ilevel)
+{
+   // Check if conversion from model level to pressure level is needed
+   double level = (vertAxisType_ == HOV_PRESSURE && field.isModelLevel()) ? field.meanML_to_Pressure_bySP(double(HOV_SP*100.),(int)ilevel)/100. : ilevel;
+
+   vector<double>::iterator iter = find(coord1_.begin(),coord1_.end(),level);
+   if ( iter == coord1_.end() )
+      coord1_.push_back(level);
+}
+
+bool HovHeightToolkit::ComputeSecondCoord()
+{
+   // The variable coord1_ was already initialized during
+   // the initialisation of the parameters
+
+   // Initialise number of points
+   this->NPoints(coord1_.size());
+
+   return true;
+}
+
+bool HovHeightToolkit::ComputeValues(MvField &field, int index)
+{
+   MvFieldExpander x(field);
+   xint_[index] = field.integrate( y1_,x1_,y2_,x2_);
+
+   return true;
+}
+
+bool HovHeightToolkit::GenerateData(MvRequest& data)
+{
+   // Write initial info and variables to the netCDF
+   if ( !this->Initialiser() )
+      return false;
+
+   // Allocate internal variables
+   if ( xint_ )
+      delete xint_;
+   xint_ = new double[nrPoints_];
+
+   // Sort data by level, expver and param
+   MvFieldSet fs(data);
+   MvFieldSetIterator iter(fs);
+   iter.rewind();
+   iter.sort("LEVELIST", '>');
+   iter.sort("STEP");
+   iter.sort("TIME");
+   iter.sort("DATE");
+   iter.sort("EXPVER");
+   iter.sort("PARAM");
+
+   // Generate data
+   int currentGenerated = 0, lastNrGenerated = -1;
+   int ind = 0;
+   string sfirst = "FIRSTFIELD";
+   string timeKey,keystr;
+   string lastTimeKey = sfirst;
+   string lastKey = sfirst;
+   MvField field, lastField;
+   ParamIterator paramIter;
+   while( field = iter() )
+   {
+      currentGenerated++;
+
+      // Create keys
+      MvRequest rq = field.getRequest();
+      GenerateKey(keystr,rq);
+      GenerateTimeKey(timeKey,rq);
+
+      // Compute data
+      if ( !ComputeValues(field,ind++) )
+         return false;
+
+      // Get all the computed level values for each time
+      if ( ind < nrPoints_ )
+      {
+         // Extra check
+         if ( lastTimeKey != timeKey && lastTimeKey != sfirst )
+         {
+            marslog(LOG_EROR, "Input data not consistent. Probably number of levels is not the same for all time stamps");
+            return false;
+         }
+         lastTimeKey = timeKey;
+         continue;
+      }
+
+      // Make sure the time stamps are the same
+      if ( lastTimeKey != timeKey)
+      {
+         marslog(LOG_EROR, "Input data not consistent. Probably number of levels is not the same for all time stamps");
+         return false;
+      }
+
+      // Save data in the ParamInfo structure
+      ParamInfo* par = this->GetParamInfo( keystr );
+      if ( !par )
+         return false;
+
+      par->FillIndex(xint_,timeKey,nrPoints_);
+
+      // Write out data, if it can be grouped together
+      if ( lastKey != keystr && lastKey != sfirst )
+      {
+         if ( !NcWriteData(lastField,lastKey) )
+            return false;
+         lastNrGenerated = currentGenerated;
+      }
+
+      lastKey = keystr;
+      lastField = field;
+      lastTimeKey = sfirst;
+      ind = 0;
+   }
+
+   // Write out the data in the netcdf file
+   if ( lastNrGenerated <=  currentGenerated )
+   {
+      if ( ! NcWriteData(lastField,lastKey) )
+         return false;
+   }
+   netcdf_->close();
+
+   return true;
+}
+
+string HovHeightToolkit::GetTitle(ParamInfo *par)
+{
+   char title[256];
+   sprintf(title,"Hovmoeller of %s %s (%.1f%s/%.1f%s/%.1f%s/%.1f%s)",
+           par->ParamLongName().c_str(),par->ExpVerTitle().c_str(),
+           (y1_< 0) ? -y1_ : y1_, (y1_<0) ? "S" : "N",
+           (x1_< 0) ? -x1_ : x1_, (x1_<0) ? "W" : "E",
+           (y2_< 0) ? -y2_ : y2_, (y2_<0) ? "S" : "N",
+           (x2_< 0) ? -x2_ : x2_, (x2_<0) ? "W" : "E" );
+
+   return string(title);
+}
+
+bool HovHeightToolkit::GetInputInfo(MvRequest& in)
+{
+   // Get area
+   y1_ = in("AREA",0);
+   x1_ = in("AREA",1);
+   y2_ = in("AREA",2);
+   x2_ = in("AREA",3);
+
+   // Check if coordinates follow Mars rules (n/w/s/e)
+   if ( x1_ > x2_ )
+   {
+      double W = x1_;
+      x1_ = x2_;
+      x2_ = W;
+   }
+   if( y2_ > y1_ )
+   {
+      double W = y1_;
+      y1_ = y2_;
+      y2_ = W;
+   }
+
+   // Get vertical axis type
+   vertAxisType_ = ( (const char*)in("VERTICAL_LEVEL_TYPE") && strcmp(in("VERTICAL_LEVEL_TYPE"),"PRESSURE") == 0 ) ? HOV_PRESSURE : HOV_ASINDATA;
+
+   // Set axis orientation
+   verticalAxis_ = HOV_GEO;
+
+   // Initialize x/y resolution  ??? Do we need this ???
+   gridEW_= gridNS_= 1;   //in("RESOLUTION");
+
+   return true;
+}
+
+bool HovHeightToolkit::GetInputInfo( MvNetCDF* netcdf )
+{
+   // Get common information from the netCDF file
+   if ( !GetInputCommonInfo(netcdf) )
+      return false;
+
+   // Retrieve attributes values
+   MvRequest req = netcdf->getRequest();
+
+   // Retrieve vertical type axes flag
+   const char* cp = (const char*)req("vertical_type");
+   if ( cp == NULL )
+   {
+      marslog(LOG_EROR, "Netcdf input file error: attribute vertical_type not found");
+      return false;
+   }
+   vertAxisType_ = ( string(cp) == "PRESSURE" ) ? HOV_PRESSURE : HOV_ASINDATA;
+
+   // Set axis orientation
+   verticalAxis_ = HOV_GEO;
+
+   return true;
+}
+
+void HovHeightToolkit::NcWriteGlobalAttributesApp()
+{
+   // Add average direction
+   const char* adir =  ( vertAxisType_ == HOV_PRESSURE ) ? "PRESSURE" : "AS_IN_DATA";
+   netcdf_->addAttribute("vertical_type",adir);
+}
+
+bool HovHeightToolkit::NcWriteSecondCoord()
+{
+   // Add second coordinate to the netCDF file
+   vector<string> v_sdim(1,GetSecondCoordName());
+   vector<long> v_ndim(1,nrPoints_);
+   MvNcVar *ncx = netcdf_->addVariable(v_sdim[0],ncDouble,v_ndim,v_sdim);
+   ncx->addAttribute("long_name", "Atmospheric Levels");
+   ncx->addAttribute("units", "hPa");
+   ncx->put(coord1_,(long)nrPoints_);
+
+   return true;
+}
+
+//--------------------------------------------------------------
+
+void HeightHovmoeller::serve (MvRequest& in, MvRequest& out)
+{
+cout << "Request IN:" << endl;
+in.print();
+
+   // Compute Hovmoeller diagram
+   if (!Compute(in,out))
+      setError(1, "Failed to generate Hovmoeller Vertical.");
+
+cout << "Request OUT:" << endl;
+out.print();
+}
+
+//-------------------------------------------------------------------------
+
+// Translate Metview 3 HeightHovmoeller Data to Metview 4 definition. Call Metview 4
+// server to process the job.
+void HeightHovmoellerM3::serve(MvRequest& in,MvRequest& out)
+{
+   // Send a general warning message
+   setError(0, "The Metview 3 Vertical-Hovmoeller DATA icon is deprecated. An automatic translation to the correspondent Metview 4 icon will be performed internally, but may not work for all cases. It is recommended to manually replace the old icons with their new equivalents.");
+
+   // There are input parameters that are no longer available in Metview 4.
+   // Remove them and send a warning message.
+   setError(0,"The Metview 3 Height-Hovmoeller DATA icon is deprecated. Parameters TIME_AXIS_DIRECTION, HEIGHT_AXIS_DIRECTION, TIME_AXIS and HEIGHT_AXIS will not be translated internally.");
+   MvRequest req = in;
+   req.unsetParam("TIME_AXIS_DIRECTION");
+   req.unsetParam("HEIGHT_AXIS_DIRECTION");
+   req.unsetParam("TIME_AXIS");
+   req.unsetParam("HEIGHT_AXIS");
+
+   // Parameter HEIGHT_AXIS_TYPE is replaced by VERTICAL_LEVEL_TYPE in Metview 4
+   if ( (const char*)req("HEIGHT_AXIS_TYPE") )
+   {
+      req("VERTICAL_LEVEL_TYPE") = req("HEIGHT_AXIS_TYPE");
+      req.unsetParam("HEIGHT_AXIS_TYPE");
+   }
+
+   // Keep the remaining parameters and update the VERB
+   req.setVerb("VERTICAL_HOVM");
+
+   // Call the server to process the job
+   HeightHovmoeller::serve(req,out);
+}
diff --git a/src/Hovmoeller/HovHeight.h b/src/Hovmoeller/HovHeight.h
new file mode 100644
index 0000000..418c782
--- /dev/null
+++ b/src/Hovmoeller/HovHeight.h
@@ -0,0 +1,84 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 HOVHEIGHT_H
+#define HOVHEIGHT_H
+
+#include "Hovmoeller.h"
+#include "HovToolkit.h"
+
+class HovHeightToolkit : public HovToolkit
+{
+
+public:
+
+   // Common functions
+   bool GenerateData(MvRequest&);
+   string GetTitle(ParamInfo*);
+   const char* GetSecondCoordName() { return "vertical"; }
+   bool SecondAuxiliaryCoord() { return false; }
+   const char* ApplicationType() { return "VERTICAL"; }
+   bool NcWriteSecondCoord();
+   void NcWriteGlobalAttributesApp();
+
+   // Functions to handle list of levels
+   void InitializeLevelList () { coord1_.clear(); }
+   void UpdateLevelList (MvField&,double);
+
+   // Calculate diagram values
+   bool ComputeValues(MvField&, int);
+
+   // Compute coordinates
+   bool ComputeSecondCoord();
+
+   // Create access keys
+   void GenerateKey(string&, MvRequest&);
+
+   // Initialize variables
+   bool GetInputInfo(MvRequest&);  //from user interface
+   bool GetInputInfo(MvNetCDF*);   //from the netCDF file
+
+private:
+
+   int vertAxisType_;        // Flag to indicate the type of the Vertical axis
+};
+
+//---------------------------------------------------------------------
+
+class HeightHovmoeller : public HovHeightToolkit, public Hovmoeller
+{
+
+public:
+
+   HeightHovmoeller() : Hovmoeller("VERTICAL_HOVM") {};
+   HeightHovmoeller(const char* kw) : Hovmoeller(kw) {};
+
+   ~HeightHovmoeller() {};
+
+   // Entry point
+   void serve(MvRequest&, MvRequest&);
+};
+
+static SimpleObjectMaker <HovHeightToolkit,HovToolkit> height ("VERTICAL");
+
+//---------------------------------------------------------------------
+
+class HeightHovmoellerM3 : public HeightHovmoeller
+{
+
+public:
+
+   HeightHovmoellerM3() : HeightHovmoeller("HEIGHT_HOV") {};
+   ~HeightHovmoellerM3() {};
+
+   // Entry point
+   void serve (MvRequest&, MvRequest&);
+};
+
+#endif
diff --git a/src/Hovmoeller/HovLine.cc b/src/Hovmoeller/HovLine.cc
new file mode 100644
index 0000000..0994108
--- /dev/null
+++ b/src/Hovmoeller/HovLine.cc
@@ -0,0 +1,190 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "HovLine.h"
+
+bool HovLineToolkit::ComputeSecondCoord()
+{
+   // Compute number of points
+   if ( !this->EvaluateNPoints() )
+      return false;
+
+   // Initialize variables
+   coord1_.clear();
+   coord2_.clear();
+   coord1_.reserve(nrPoints_);
+   coord2_.reserve(nrPoints_);
+   double dx = double( x2_ - x1_ ) / double(nrPoints_ -1);
+   double dy = double( y2_ - y1_ ) / double(nrPoints_ -1);
+
+   // Compute values
+   for ( int k = 0; k < nrPoints_; k++ )
+   {
+      coord1_.push_back(x1_ + (k * dx));
+      coord2_.push_back(y1_ + (k * dy));
+   }
+
+   return true;
+}
+
+bool HovLineToolkit::ComputeValues( MvField &field, int )
+{
+   // Initialize variables
+   MvFieldExpander x(field);
+
+   // Interpolatate along a line
+   for ( int k = 0; k < nrPoints_; k++)
+       xint_[k] = field.interpolateAt(coord1_[k], coord2_[k]);
+
+   return true;
+}
+
+string HovLineToolkit::GetTitle(ParamInfo *par)
+{
+   string title = "Hovmoeller of " + par->ParamLongName() + " " + par->LevelTitle() + " " + par->ExpVerTitle();
+
+   return title;
+}
+
+bool HovLineToolkit::EvaluateNPoints()
+{
+   if ( y1_ > 90. || y1_ < -90. || y2_ > 90. || y2_ < -90.)
+   {
+      marslog(LOG_EROR, "Failed to generate Hovmoeller Line: wrong geographical coordinates");
+      return false;
+   }
+
+   double dellat = ABS(y2_-y1_);
+   double dellon = ABS(x2_-x1_);
+   int np = int( sqrt(dellon*dellon + dellat*dellat) / MAX(gridNS_,gridEW_) );
+
+   nrPoints_ = MAX(np,64); //64->arbitrary minimum number of points
+
+   return true;
+}
+
+bool HovLineToolkit::GetInputInfo(MvRequest& in)
+{
+   // Get line
+   y1_ = in("LINE",0);
+   x1_ = in("LINE",1);
+   y2_ = in("LINE",2);
+   x2_ = in("LINE",3);
+
+   // Check if coordinates follow Mars rules (n/w/s/e)
+   if ( x1_ > x2_ )
+   {
+      double W = x1_;
+      x1_ = x2_;
+      x2_ = W;
+   }
+   if( y2_ > y1_ )
+   {
+      double W = y1_;
+      y1_ = y2_;
+      y2_ = W;
+   }
+
+   // Get swap axes flag
+   swapAxes_ = ( (const char*)in("SWAP_AXES") && strcmp(in("SWAP_AXES"),"YES") == 0 ) ? true : false;
+
+   // Set axes orientation
+   verticalAxis_ = swapAxes_ ? HOV_GEO : HOV_TIME;
+
+   // Initialize x/y resolution
+   gridEW_ = gridNS_= in("RESOLUTION");
+
+   return true;
+}
+
+bool HovLineToolkit::GetInputInfo( MvNetCDF* netcdf )
+{
+   // Get common information from the netCDF file
+   if ( !GetInputCommonInfo(netcdf) )
+      return false;
+
+   // Retrieve attributes values
+   MvRequest req = netcdf->getRequest();
+
+   // Retrieve swap axes flag, if exists
+   const char* cp = (const char*)req("swap_axes");
+   swapAxes_ = ( cp == NULL ) ? false : atoi(cp);
+
+   return true;
+}
+
+void HovLineToolkit::NcWriteGlobalAttributesApp()
+{
+   // Add swap axes flag
+   if ( swapAxes_ )
+      netcdf_->addAttribute("swap_axes",swapAxes_);
+}
+
+bool HovLineToolkit::NcWriteSecondCoord()
+{
+   // Add longitude coordinate to the netCDF file
+   vector<string> v_sdim(1,HOV_VARLON);
+   vector<long> v_ndim(1,nrPoints_);
+   MvNcVar *ncx = netcdf_->addVariable(v_sdim[0],ncDouble,v_ndim,v_sdim);
+   ncx->addAttribute("long_name", "longitude");
+   ncx->addAttribute("units", "degrees_east");
+   ncx->put(coord1_,(long)nrPoints_);
+
+   // Add latitude coordinate to the netCDF file
+   v_sdim[0] = HOV_VARLAT;
+   ncx = netcdf_->addVariable(v_sdim[0],ncDouble,v_ndim,v_sdim);
+   ncx->addAttribute("long_name", "latitude");
+   ncx->addAttribute("units", "degrees_north");   //or degrees_south?
+   ncx->put(coord2_,(long)nrPoints_);
+
+   return true;
+}
+
+//--------------------------------------------------------------
+
+void LineHovmoeller::serve (MvRequest& in, MvRequest& out)
+{
+cout << "Request IN:" << endl;
+in.print();
+
+   // Compute Hovmoeller diagram
+   if (!Compute(in,out))
+      setError(1, "Failed to generate Hovmoeller Line.");
+
+cout << "Request OUT:" << endl;
+out.print();
+
+   return;
+}
+
+//-------------------------------------------------------------------------
+
+
+// Translate Metview 3 LineHovmoeller Data to Metview 4 definition. Call Metview 4
+// server to process the job.
+void LineHovmoellerM3::serve(MvRequest& in,MvRequest& out)
+{
+   // Send a general warning message
+   setError(0, "The Metview 3 Line-Hovmoeller DATA icon is deprecated. An automatic translation to the correspondent Metview 4 icon will be performed internally, but may not work for all cases. It is recommended to manually replace the old icons with their new equivalents.");
+
+   // There are input parameters that are no longer available in Metview 4.
+   // Remove them and send a warning message.
+   setError(0,"The Metview 3 Line-Hovmoeller DATA icon is deprecated. Parameters TIME_AXIS_DIRECTION, TIME_AXIS, GEO_AXIS and GEO2_AXIS will not be translated internally.");
+   MvRequest req = in;
+   req.unsetParam("TIME_AXIS_DIRECTION");
+   req.unsetParam("TIME_AXIS");
+   req.unsetParam("GEO_AXIS");
+   req.unsetParam("GEO2_AXIS");
+
+   // Keep the remaining parameters and update the VERB
+   req.setVerb("LINE_HOVM");
+
+   // Call the server to process the job
+   LineHovmoeller::serve(req,out);
+}
diff --git a/src/Hovmoeller/HovLine.h b/src/Hovmoeller/HovLine.h
new file mode 100644
index 0000000..f19a92a
--- /dev/null
+++ b/src/Hovmoeller/HovLine.h
@@ -0,0 +1,79 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 HOVLINE_H
+#define HOVLINE_H
+
+#include "Hovmoeller.h"
+#include "HovToolkit.h"
+
+class HovLineToolkit : public HovToolkit
+{
+
+public:
+
+   // Initialize variables
+   bool GetInputInfo(MvRequest&);  //from user interface
+   bool GetInputInfo(MvNetCDF*);   //from the netCDF file
+
+   // Common functions
+   string GetTitle(ParamInfo*);
+   const char* GetSecondCoordName() { return HOV_VARLON.c_str(); }
+   const char* GetSecondAuxiliaryCoordName() { return HOV_VARLAT.c_str(); }
+   bool SecondAuxiliaryCoord() { return true; }
+   const char* ApplicationType() { return "LINE"; }
+   bool NcWriteSecondCoord();
+   void NcWriteGlobalAttributesApp();
+
+   // Calculate diagram values
+   bool ComputeValues( MvField&, int=0);
+
+   // Compute coordinates
+   bool ComputeSecondCoord();
+
+ private:
+
+   // Compute number of points
+   bool EvaluateNPoints();
+};
+
+//---------------------------------------------------------------------
+
+class LineHovmoeller : public HovLineToolkit, public Hovmoeller
+{
+
+public:
+
+   LineHovmoeller() : Hovmoeller("LINE_HOVM") {};
+   LineHovmoeller(const char* kw) : Hovmoeller(kw) {};
+
+   ~LineHovmoeller() {};
+
+   // Entry point
+   void serve (MvRequest&, MvRequest&);
+};
+
+static SimpleObjectMaker <HovLineToolkit,HovToolkit> line ("LINE");
+
+//---------------------------------------------------------------------
+
+class LineHovmoellerM3 : public LineHovmoeller
+{
+
+public:
+
+   LineHovmoellerM3() : LineHovmoeller("LINE_HOV") {};
+
+   ~LineHovmoellerM3() {};
+
+   // Entry point
+   void serve (MvRequest&, MvRequest&);
+};
+
+#endif
diff --git a/src/Hovmoeller/HovToolkit.cc b/src/Hovmoeller/HovToolkit.cc
index 688749a..b21183e 100644
--- a/src/Hovmoeller/HovToolkit.cc
+++ b/src/Hovmoeller/HovToolkit.cc
@@ -8,1892 +8,986 @@
  ***************************** LICENSE END *************************************/
 
 #include "HovToolkit.h"
-#include <inc_iostream.h>
 #include "MvRequestUtil.hpp"
 
-HovToolkit::HovToolkit(): timeDir_(HOV_TIMEFOR),
-			  heightDir_(HOV_HEIGHTBACK),
-			  swapAxes_(false),
-			  secondAuxiliaryAxis_(true),
-			  netcdf_(0),
-			  netcdfIn_(0),
-			  gcoord1_(0),
-			  gcoord2_(0),
-			  xint_(0)
+// Type of input request to be processed
+enum { HOV_DATA_DROPPED, HOV_DATA_MODULE, HOV_DATA_MODULE_DROPPED };
+
+HovToolkit::HovToolkit() : swapAxes_(false),
+                           netcdf_(0),
+                           xint_(0),
+                           expand_(false),
+                           netcdfIn_(0)
 {
 //empty
 }
 
 HovToolkit::~HovToolkit()
 {
-	ReleaseMemory();
+   this->ReleaseAllMemory();
 }
 
-void HovToolkit::ReleaseMemory()
+void HovToolkit::ReleaseAllMemory()
 {
-	if (xint_)    { delete [] xint_; xint_=0; }
-	if (gcoord1_) { delete [] gcoord1_; gcoord1_=0; }
-	if (gcoord2_) { delete [] gcoord2_; gcoord2_=0; }
-	if (netcdf_)  { delete netcdf_; netcdf_=0; }
-
-	if (params_.size())
-	{ 
-		ParamIterator paramIter;
-		for (paramIter = params_.begin(); paramIter != params_.end(); paramIter++)
-			delete (*paramIter).second;
-
-		params_.clear();
-	}
-
-	NcClosePreviousFile();
-
-	return;
+   this->ReleaseMemory();
+   this->ReleaseMemoryParam();
 }
 
-// Main function. It is called from the Expand option
-bool HovToolkit::Compute(string& netfnameIn,MvRequest& data,string& netfnameOut)
+void HovToolkit::ReleaseMemory()
 {
-        nrIndexesIn_ = -1; //option is Expand
-
-        // Free previous memory
-	ReleaseMemory();
-
-	// Open input netcdf file
-	netfnameIn_ = netfnameIn;
-	NcOpenPreviousFile();
-
-	// Initialize HovToolkit object from a netcdf file
-	if ( !GetInputInfo(netcdfIn_) )
-	{
-		NcClosePreviousFile();
-		return false;
-	}
-	NcClosePreviousFile();
-
-	// Create Param Info from the fieldset
-	if ( !CreateParamInfo(data) )
-	{
-		ReleaseMemory();
-		return false;
-	}
-
-	// Generate data
-	if ( !NcGenerateData(data) )
-	{
-		ReleaseMemory();
-		return false;
-	}
-
-        // Free memory
-	ReleaseMemory();
-
-	// Return netcdf filename
-	netfnameOut = ncdfPath_.c_str();
-
-	return true;
-}
+   coord1_.clear();
+   coord2_.clear();
+   if (xint_)    { delete [] xint_; xint_=0; }
+   if (netcdf_)  { delete netcdf_; netcdf_=0; }
 
-// Main function. It is called from the basic option (Line,Area,Height)
-bool HovToolkit::Compute(MvRequest& in,MvRequest& out)
-{
-        nrIndexesIn_ = 0; //option is not Expand
-
-        // Free previous memory
-	ReleaseMemory();
-
-	// Initialize HovToolkit object from the user interface
-        if ( !GetInputInfo(in) ) return false;
-
-	// Create Param Info from the fieldset
-	if ( !CreateParamInfo(dataRequest_) )
-	{
-		ReleaseMemory();
-		return false;
-	}
-
-	// Compute number of points
-        if( EvaluateNPoints() == 0 )
-        {
-		ReleaseMemory();
-        	marslog(LOG_EROR, "Invalid Area!");
-                return false;
-        }
-
-	// Initialize reference time
-	SetRefTime(minTime_);
-
-        // Generate data
-	if ( !NcGenerateData(dataRequest_) ) 
-	{
-		ReleaseMemory();
-		return false;
-	}
-
-	// Create output request
-	const char* name = (const char *)in("_NAME");
-	CreateOutputRequest(out,name);
-#if 0
-	MvRequest cdfreq("NETCDF");
-	cdfreq("PATH") = ncdfPath_.c_str();
-	out = out + cdfreq;
-	if ( (const char *)in("_NAME") )
-		out("_NAME") = in("_NAME");
-#endif
-        // Free memory
-	ReleaseMemory();
-
-	return true;
-}
+   ExpandCloseNcFile();
 
-void HovToolkit::CreateOutputRequest(MvRequest& out, const char* name)
-{
-     // Currently, the netcdf file contains only one parameter.
-     // Update this code for more than one parameter
-     ParamIterator ii = params_.begin();
-     ParamInfo *par   = (*ii).second;
-     const char* expver = par->ExpVer();
-     ostrstream oss;
-     oss << setfill( '0' )
-         << setw( 1 ) << 'p'
-         << setw( 3 ) << par->Parameter()
-         << setw( 4 ) << par->Level()
-         << setw( 4 ) << ( expver ? expver : "_" )
-         << ends;
-
-     // Create output request
-     MvRequest req("NETCDF");
-     req("PATH") = ncdfPath_.c_str();
-     out.setVerb("NETCDF_XY_MATRIX");
-	out("NETCDF_PLOT_TYPE") = "XY_MATRIX";
-	out("NETCDF_DATA") = req;
-     const char *xAxisType, *yAxisType;
-     if ( verticalAxis_ == HOV_TIME )
-     {
-          out("NETCDF_Y_VARIABLE") = "time";
-          out("NETCDF_X_VARIABLE") = GetSecondAxisName();
-          if ( SecondAuxiliaryAxis() )
-          {
-               out("NETCDF_X_AUXILIARY_VARIABLE") = GetSecondAuxiliaryAxisName();
-               xAxisType = "geoline";
-          }
-          else
-               xAxisType = "regular";
-
-          yAxisType = "date";
-     }
-     else
-     {
-          out("NETCDF_X_VARIABLE") = "time";
-          out("NETCDF_Y_VARIABLE") = GetSecondAxisName();
-          if ( SecondAuxiliaryAxis() )
-          {
-               out("NETCDF_Y_AUXILIARY_VARIABLE") = GetSecondAuxiliaryAxisName();
-               yAxisType = "geoline";
-          }
-          else
-               yAxisType = "regular";
-
-          xAxisType = "date";
-     }
-
-//	out1("NETCDF_X_VARIABLE") = (verticalAxis_ == HOV_TIME) ? "longitude" : "time";  //HOV_TIME; //(swapAxes_) ? "time"         : "geographical";
-//	out1("NETCDF_Y_VARIABLE") = (verticalAxis_ == HOV_GEO)  ? "longitude" : "time"; //(swapAxes_) ? "geographical" : "time";
-	//if (verticalAxis_ == HOV_GEO)
-	//	out1("NETCDF_X_AUXILIARY_VARIABLE") = ;
-     out("NETCDF_VALUE_VARIABLE") = oss.str();
-     out("_VERB") = "NETCDF_XY_MATRIX";
-     if ( name )
-          out("_NAME") = name;
-
-     MvRequest viewReq("CARTESIANVIEW");  // Create view subrequest
-     viewReq("X_AXIS_TYPE") = xAxisType;  // AXIS_TYPE *must* be in the request
-     viewReq("X_AUTOMATIC") = "on";
-     viewReq("Y_AXIS_TYPE") = yAxisType;  // AXIS_TYPE *must* be in the request
-     viewReq("Y_AUTOMATIC") = "on";
-
-     out("_VIEW") = "CARTESIANVIEW";    // add the view specification to the request
-     out("_VIEW_REQUEST") = viewReq;    // add the view specification to the request
-
-cout << "request OUT" << endl;
-out.print();
-
-     return;
+   return;
 }
 
-bool HovToolkit::GetInputCommonInfo(MvRequest& in)
+void HovToolkit::ReleaseMemoryParam()
 {
-     // Get data
-     in.getValue(dataRequest_,"DATA");
-     if ( !in.countValues("DATA") ) {
-          marslog(LOG_EROR, "No Data files specified");
-          return false;
-     }
-
-	// Get time axis direction
-	timeDir_ = ( (const char*)in("TIME_AXIS_DIRECTION") && strcmp(in("TIME_AXIS_DIRECTION"),"BACKWARD") == 0 ) ? HOV_TIMEBACK : HOV_TIMEFOR;
-
-       // Initialize Time axis
-        in.getValue(timeAxis_,"TIME_AXIS");
-	if ( !in.countValues("TIME_AXIS") )
-		timeAxis_.setVerb("PAXIS");   //axis not defined in the user interface
-
-	return true;
-}
+   if (params_.size())
+   {
+      for ( ParamIterator iter = params_.begin(); iter != params_.end(); iter++)
+         delete (*iter).second;
 
-bool HovToolkit::GetInputInfo(MvNetCDF* netcdf )
-{
-	// Retrieve information from the 'time' variable
-	MvNcVar *var = netcdf->getVariable("time");
-	long *edges = var->edges();
-	nrIndexesIn_ = edges[0];
-	MvNcAtt *tmpatt = var->getAttribute("reference_date");
-	if ( !tmpatt )
-	{
-          marslog(LOG_EROR, "Netcdf file: attribute reference_date not found");
-          return false;
-	}
-	MvDate d1 (tmpatt->as_string(0));
-	refTime_= d1.YyyyMmDd_r();
-
-	// Retrieve information from the second axis variable
-	var = netcdf->getVariable(GetSecondAxisName());
-	edges = var->edges();
-	nrPoints_ = edges[0];
-	if ( nrIndexesIn_ <= 0 || nrPoints_ <= 0 )
-	{
-        marslog(LOG_EROR, "Netcdf file: invalid dimension for variables 'time' and/or 'geographical'");
-		return false;
-	}
-
-	// Retrieve attributes values
-	// Retrieve Grid values
-	MvRequest req = netcdf->getRequest();
-	const char* cp = (const char*)req("GRID");
-	if ( cp == NULL )
-	{
-        marslog(LOG_EROR, "Netcdf file: attribute GRID not found");
-		return false;
-	}
-	string str = cp;
-	gridEW_ = atof(strtok((char*)str.c_str(),"/"));
-	gridNS_ = atof( strtok(NULL,"/"));
-
-	// Retrieve Coordinates values
-	cp = (const char*)req("COORDINATES");
-	if ( cp == NULL )
-	{
-        marslog(LOG_EROR, "Netcdf file: attribute COORDINATES not found");
-		return false;
-	}
-	str = cp;
-	y1_ = atof(strtok((char*)str.c_str(),"/"));
-	x1_ = atof(strtok(NULL,"/"));
-	y2_ = atof(strtok(NULL,"/"));
-	x2_ = atof(strtok(NULL,"/"));
-
-	// Retrieve Direction value
-     cp = (const char*)req("DIRECTION");
-	if ( cp == NULL )
-	{
-        marslog(LOG_EROR, "Netcdf file: attribute DIRECTION not found");
-		return false;
-	}
-	geoDir_ = ( strcmp(cp,"NORTH_SOUTH") == 0 ) ? HOV_NS : HOV_EW;
-
-	// Retrieve Time Direction value
-     cp = (const char*)req("T_DIRECTION");
-	if ( cp == NULL )
-	{
-        marslog(LOG_EROR, "Netcdf file: attribute T_DIRECTION not found");
-		return false;
-	}
-	timeDir_ = ( strcmp(cp,"BACKWARD") == 0 ) ? HOV_TIMEBACK : HOV_TIMEFOR;
-
-	// Retrieve Time Axis Direction value
-     cp = (const char*)req("T_AXIS_DIRECTION");
-	if ( cp == NULL )
-	{
-        marslog(LOG_EROR, "Netcdf file: attribute T_AXIS_DIRECTION not found");
-		return false;
-	}
-	verticalAxis_ = ( strcmp(cp,"VERTICAL") == 0 ) ? HOV_TIME : HOV_GEO;
-
-	// Retrieve Height Direction value
-     cp = (const char*)req("H_DIRECTION");
-	heightDir_ = ( cp && strcmp(cp,"FORWARD") == 0 ) ? HOV_HEIGHTFOR : HOV_HEIGHTBACK;
-
-	// Retrieve Height Axis Type value
-     cp = (const char*)req("H_AXIS_TYPE");
-	heightAxisType_ = ( cp && strcmp(cp,"PRESSURE") == 0 ) ? HOV_PRESSURE : HOV_ASINDATA;
-
-	// Initialize axes
-	InitializeAxes(req);
-
-	return true;
-}
+      params_.clear();
+   }
 
-bool HovToolkit::CreateParamInfo(MvRequest& data)
-{
-	// Clean param info structure
-	if (params_.size())
-	{ 
-		ParamIterator iter;
-		for (iter = params_.begin(); iter != params_.end(); iter++)
-			delete (*iter).second;
-
-		params_.clear();
-	}
-	
-	// Initialize fieldset and level list structure
-     MvFieldSet fs(data);
-	MvFieldSetIterator iter(fs);
-	iter.rewind();
-        InitializeLevelList(fs.countFields());
-
-	// Check data level type: model or pressure level
-	MvField field;
-	iter.rewind();
-	field = iter();
-	CheckDataLevelType(field);
-
-	// Retrieve basic information from the fieldset
-	bool first=true;
-     string keystr,timekey;
-	int iparam;
-	double level;
-	const char* expver = 0;
-	iter.rewind();
-	while( field = iter() )
-	{
-  		// MvFieldExpander	x(field);
-		MvRequest rq=field.getRequest();
-
-		iparam = rq("PARAM");
-		level  = rq("LEVELIST",0);
-		string pn = (const char*)field.magicsName();
-		expver = rq("EXPVER");
-		string ev = expver ? expver : "_";
-
-		// Save basic information
-		GenerateKey(keystr,rq);
-		GenerateTimeKey(timekey,rq);
-		UpdateLevelList(field,level);
-
-		MvDate dd = GetDate(field);
-		double d1 = dd.YyyyMmDd_r();
-
-          // compute min/max time values
-          if ( first )
-          {
-               first = false;
-               minTime_ = maxTime_ = d1;
-          }
-          else
-          {
-               if ( minTime_ > d1 ) minTime_ = d1;
-               if ( maxTime_ < d1 ) maxTime_ = d1;
-          }
-
-          ParamInsertPair inserted = params_.insert(ParamPair(keystr,new ParamInfo(iparam,d1,level,ev,pn) ) );
-          ParamInfo *pp = (*(inserted.first)).second;
-          pp->AddIndex(timekey);
-     }
-
-     // Check if basic information was retrieved
-     if (params_.size() == 0 )
-     {
-          marslog(LOG_EROR, "GRIB file invalid, no parameters found.");
-          return false;
-     }
-
-     // Maybe this restriction should be removed in the future
-     if ( params_.size() > 1 )
-     {
-          marslog(LOG_EROR, "Creation of Hovmoeller diagrams from multiple parameters is not yet supported. This data has %d parameters.", params_.size());
-          return false;
-     }
-
-     return true;
+   return;
 }
 
-void HovToolkit::GenerateKey(string &str, MvRequest& rq)
+// Main function. It is called from the Expand option
+bool HovToolkit::Compute(string& netfnameIn,MvRequest& data,string action,MvRequest& out)
 {
-     int par = rq("PARAM");
-     int level  = rq("LEVELIST",0);
-     const char* expver = rq("EXPVER");
-     char key[16];
+   // Initialise variables
+   expand_ = true;
+   netfnameIn_ = netfnameIn;
+   nrIndexesIn_ = -1;
+   actionMode_ = action;
 
-     ostrstream oss( key, sizeof( key ) );
+   // Open previous netcdf file
+   ExpandOpenNcFile();
 
-     oss << setfill( '0' )
-	    << setw( 1 ) << 'p'
-	    << setw( 3 ) << par 
-	    << setw( 4 ) << level
-	    << setw( 4 ) << ( expver ? expver : "_" )
-	    << ends;
+   // Initialize HovToolkit object from a netcdf file
+   if ( !GetInputInfo(netcdfIn_) )
+      return false;
 
+   // Create Param Info from the fieldset
+   if ( !CreateParamInfo(data) )
+      return false;
 
-     str = key;
+   // Generate data
+   if ( !this->GenerateData(data) )
+      return false;
 
-     return;
-}
- 
-void HovToolkit::GenerateTimeKey(string &str, MvRequest& rq)
-{
-	int  istep  = rq("STEP");
-	long idate  = rq("DATE");
-	int  itime  = rq("TIME");
-
-     char key[20];
-	ostrstream oss( key, sizeof( key ) );
+   // Create output request
+   out = CreateOutputRequest();
 
-	oss << setfill( '0' )
-	    << setw( 8 ) << idate
-	    << setw( 4 ) << itime
-	    << setw( HOV_STEPSIZE ) << istep
-	    << ends;
+   // Close previous netcdf file
+   ExpandCloseNcFile();
 
-     str = key;
-
-	return;
+   return true;
 }
 
-double HovToolkit::GetDateDif(string& timekey)
+// Main function. It is called from the basic option (Line,Area,Height)
+bool HovToolkit::Compute(MvRequest& in,MvRequest& out)
 {
-	// Extract date information
-	double ddate = atof(timekey.substr(0,8).c_str());
-	double dhour = atof(timekey.substr(8,2).c_str());
-	double dmin  = atof(timekey.substr(10,2).c_str());
-	double dstep = atof(timekey.substr(12,HOV_STEPSIZE).c_str());
-
-	// Compute hour+min+step in fraction of days
-	double frac = dhour*3600./86400. + dmin*60./86400. + dstep*3600./86400.;
-
-	// If it is a monthly mean parameter, add 1 to original date
-	if ( fmod(ddate,100)== 0. ) ddate++;
-
-	// Compute new date
-	MvDate ndate(ddate);
-	ndate += frac;
-
-	// Compute the difference from the reference date
-	MvDate ref(GetRefTime());
-	double dif = ref.time_interval_hours(ndate);
-
-	return dif;
+   nrIndexesIn_ = 0; //option is not Expand
+
+   // Initialize HovToolkit object from the user interface
+   if ( !GetInputParameters(in) )
+      return false;
+
+   // Create Param Info from the fieldset. Start allocating memory.
+   if ( !CreateParamInfo(dataRequest_) )
+      return false;
+
+   // Initialize reference time
+   SetRefTime(dateMinD_);
+
+   // Generate data. It allocates more memory.
+   if ( !this->GenerateData(dataRequest_) )
+      return false;
+
+   // Create output request
+   const char* name = (const char *)in("_NAME");
+   out = CreateOutputRequest(name);
+
+   return true;
+}
+
+MvRequest HovToolkit::CreateOutputRequest(const char* name)
+{
+   // Create netCDF data request
+   MvRequest req("NETCDF");
+   req("PATH") = ncdfPath_.c_str();
+   req("TEMPORARY") = 1;
+
+   // If action is not visualisation related then return the netcdf data
+   if ( !IsVisualise() )
+      return req;
+
+   // Currently, the netcdf file contains only one parameter.
+   // Update this code for more than one parameter
+   ParamIterator ii = params_.begin();
+   ParamInfo *par   = (*ii).second;
+
+   // Create netCDF output request
+   MvRequest out1("NETCDF_XY_MATRIX");
+   out1("NETCDF_PLOT_TYPE") = "XY_MATRIX";
+   out1("NETCDF_DATA") = req;
+   string xAxisType, yAxisType;
+   const char* secondCoordName = GetSecondCoordName();
+   MvRequest horAxisReq, vertAxisReq;
+   bool latVertAxis = false;    // indicates if vertical axis is latitude
+   if ( verticalAxis_ == HOV_TIME )  // TIME is vertical axis
+   {
+      out1("NETCDF_Y_VARIABLE") = HOV_VARTIME.c_str();;
+      out1("NETCDF_X_VARIABLE") = secondCoordName;
+      if ( SecondAuxiliaryCoord() )
+      {
+         out1("NETCDF_X_AUXILIARY_VARIABLE") = GetSecondAuxiliaryCoordName();
+         xAxisType = "geoline";
+      }
+      else
+      {
+         if ( string(secondCoordName) == HOV_VARLAT || string(secondCoordName) == HOV_VARLON )
+         {
+            horAxisReq.setVerb("MAXIS");
+            horAxisReq("AXIS_ORIENTATION") = "HORIZONTAL";
+            horAxisReq("AXIS_TICK_LABEL_TYPE") = (secondCoordName == HOV_VARLAT) ? "Latitude" : "Longitude";
+         }
+         xAxisType = "regular";
+      }
+      yAxisType = "date";
+   }
+   else  // TIME is horizontal axis
+   {
+      out1("NETCDF_X_VARIABLE") = HOV_VARTIME.c_str();
+      out1("NETCDF_Y_VARIABLE") = secondCoordName;
+      if ( SecondAuxiliaryCoord() )
+      {
+         out1("NETCDF_Y_AUXILIARY_VARIABLE") = GetSecondAuxiliaryCoordName();
+         yAxisType = "geoline";
+      }
+      else
+      {
+         if ( secondCoordName == HOV_VARLAT || secondCoordName == HOV_VARLON )
+         {
+            vertAxisReq.setVerb("MAXIS");
+            vertAxisReq("AXIS_ORIENTATION") = "VERTICAL";
+            vertAxisReq("AXIS_TICK_LABEL_TYPE") = (secondCoordName == HOV_VARLAT) ? "Latitude" : "Longitude";
+         }
+         latVertAxis = (secondCoordName == HOV_VARLAT) ? true : false;
+         yAxisType = "regular";
+      }
+
+      xAxisType = "date";
+   }
+
+   out1("NETCDF_VALUE_VARIABLE") = getNetcdfVarname(par->ParamName()).c_str();
+   out1("NETCDF_MISSING_ATTRIBUTE") = "_FillValue";
+   out1("_VERB") = "NETCDF_XY_MATRIX";
+   if ( name )
+      out1("_NAME") = name;
+
+   // Create CARTESIANVIEW request.
+   // This is only needed if a HovData visualisation action was requested.
+   // If a dropped (data or HovData) action was requested, the View is taken
+   // from uPlot. In this implementation, the view request will be always
+   // sent because: a) it is clean; b) does not cause problem.
+   MvRequest viewReq("CARTESIANVIEW");
+   viewReq("X_AUTOMATIC") = "on";
+   viewReq("X_AXIS_TYPE") = xAxisType.c_str();
+   viewReq("Y_AUTOMATIC") = "on";
+   viewReq("Y_AXIS_TYPE") = yAxisType.c_str();
+
+   // If Y_AUTOMATIC is ON and AXIS_TICK_LABEL_TYPE is LATITUDE then
+   // reverte the axis values because Hovmoeller computes values from
+   // North to South and Magics plots them from bottom to top by default
+   if ( strcmp(viewReq("Y_AUTOMATIC"), "on") == 0 && latVertAxis )
+      viewReq("Y_AUTOMATIC_REVERSE") = "on";
+
+   if ( horAxisReq )
+      viewReq("HORIZONTAL_AXIS") = horAxisReq;
+
+   if ( vertAxisReq )
+      viewReq("VERTICAL_AXIS") = vertAxisReq;
+
+   // Save min/max date. This info is important if the dates in the
+   // original View are 'automatic'.
+   string xy = (yAxisType == "date") ? "Y_" : "X_";
+   MvDate dd(dateMinD_);
+   string str = xy + "DATE_MIN";
+   viewReq(str.c_str()) = dd.magicsDate().c_str();
+   dd = dateMaxD_;
+   str = xy + "DATE_MAX";
+   viewReq(str.c_str()) = dd.magicsDate().c_str();
+
+   // Create output request
+   MvRequest out = viewReq + out1;
+
+   return out;
+}
+
+// Retrieve parameters from the input request and make a consistency check.
+// There are 4 types of input request:
+// 1. DATA_DROPPED: Grib dropped into a View: MXSECT, DATA(), _CONTEXT(),...
+// 2. DATA_MODULE_DROPPED: Data module dropped into a View: MXSECT, DATA(),...
+// 3. DATA_MODULE: Process a data module: MXSECT, ...
+// 4. netCDF dropped in a View:
+//
+// Actions for each 4 types:
+// 1. Use the original View.
+// 2. Use the original View and check if the input HovData parameters are
+//    consistent with the View.
+// 3. Build a new View.
+// 4. Use the original View and check if the netCDF parameters are consistent
+//    with the View.
+//
+bool HovToolkit::GetInputParameters( MvRequest& in )
+{
+   // Retrieve fieldset
+   in.getValue(dataRequest_,"DATA");
+   if ( !in.countValues("DATA") ) {
+      marslog(LOG_EROR, "No Data files specified");
+      return false;
+   }
+
+   // Get and save action mode. Default value is "prepare"
+   string actionMode = (const char*)in("_ACTION") ? (const char*)in("_ACTION") : "prepare";
+   this->ActionMode(actionMode);
+
+   // Retrieve the Cartesian View request if exists, e.g. if a
+   // grib data or a HovData module was dropped into a view
+   MvRequest viewRequest;
+   if ( (const char*)in("_CONTEXT") )
+      viewRequest = in("_CONTEXT");
+
+   // Check if a HovData module was dropped
+   const char* verb = (const char*)in("_VERB");
+   bool moduleDropped = this->IsDataModule(verb);
+
+   // Check the type of input request to be processed
+   if ( viewRequest )
+      procType_ = moduleDropped ? HOV_DATA_MODULE_DROPPED : HOV_DATA_DROPPED;
+   else
+      procType_ = HOV_DATA_MODULE;
+
+   // Type of input request is a data dropped into a View
+   // Get information from the View request
+   if ( procType_ == HOV_DATA_DROPPED )
+   {
+      // Retrieve the HovmoellerView request from the CartesianView
+      MvRequest hovRequest = this->GetAppView( viewRequest );
+
+      // Retrieve parameters
+      if ( !this->GetInputInfo(hovRequest) )
+         return false;
+   }
+   // Process a data module
+   // Get information from the module icon parameters
+   else if ( procType_ == HOV_DATA_MODULE )
+   {
+      // Retrieve parameters
+      if ( !this->GetInputInfo(in) )
+         return false;
+   }
+   // Process a data module dropped into a View.
+   // Get information from the Module and View and check if they are compatible.
+   else if ( procType_ == HOV_DATA_MODULE_DROPPED )
+   {
+      // Retrieve the HovmoellerView request from the CartesianView
+      MvRequest hovRequest = this->GetAppView( viewRequest );
+
+      // Consistency check
+      //if ( X1 != X11 || Y1 != Y11 || X2 != X22 || Y2 != Y22 )
+
+      // Retrieve parameters
+      if ( !this->GetInputInfo(hovRequest) )
+         return false;
+   }
+
+   return true;
+}
+
+bool HovToolkit::GetInputCommonInfo( MvNetCDF* netcdf )
+{
+   // Retrieve information from the 'time' variable
+   MvNcVar *var = netcdf->getVariable(HOV_VARTIME);
+   long *edges = var->edges();
+   nrIndexesIn_ = edges[0];
+   MvNcAtt *tmpatt = var->getAttribute("reference_date");
+   if ( !tmpatt )
+   {
+      marslog(LOG_EROR, "Netcdf file: attribute reference_date not found");
+      return false;
+   }
+   MvDate d1 (tmpatt->as_string(0));
+   refTime_= d1.YyyyMmDd_r();
+
+   // Retrieve information from the second axis variable
+   var = netcdf->getVariable(GetSecondCoordName());
+   edges = var->edges();
+   nrPoints_ = edges[0];
+   if ( nrIndexesIn_ <= 0 || nrPoints_ <= 0 )
+   {
+      marslog(LOG_EROR, "Netcdf file: invalid dimension for variables 'time' and/or 'geographical'");
+      return false;
+   }
+
+   // Retrieve attributes values
+   // Retrieve Grid values
+   MvRequest req = netcdf->getRequest();
+   const char* cp = (const char*)req("grid");
+   if ( cp == NULL )
+   {
+      marslog(LOG_EROR, "Netcdf file: attribute grid not found");
+      return false;
+   }
+   string str = cp;
+   gridEW_ = atof(strtok((char*)str.c_str(),"/"));
+   gridNS_ = atof(strtok(NULL,"/"));
+
+   // Retrieve Coordinates values
+   cp = (const char*)req("coordinates");
+   if ( cp == NULL )
+   {
+      marslog(LOG_EROR, "Netcdf file: attribute coordinates not found");
+      return false;
+   }
+   str = cp;
+   y1_ = atof(strtok((char*)str.c_str(),"/"));
+   x1_ = atof(strtok(NULL,"/"));
+   y2_ = atof(strtok(NULL,"/"));
+   x2_ = atof(strtok(NULL,"/"));
+
+   // Retrieve vertical axis flag
+   cp = (const char*)req("vertical_axis");
+   verticalAxis_ = (cp == NULL ) ? HOV_TIME : atoi(cp);
+
+   return true;
 }
 
-MvDate HovToolkit::GetDate(MvField& field)
+bool HovToolkit::CreateParamInfo(MvRequest& data)
 {
-     // Compute initial date
-     MvDate d1(field.yyyymmddFoh());
-
-     // Add step
-     double d2 = field.stepFoh();
-
-     return (d1+d2);
+   // Clean param info structure
+   this->ReleaseMemoryParam();
+
+   // Initialize fieldset
+   MvFieldSet fs(data);
+   MvFieldSetIterator iter(fs);
+   MvField field;
+
+   // Retrieve basic information from the fieldset
+   dateMinD_ = 99999999.;
+   dateMaxD_ = 0.;
+   string keystr,timekey;
+   int iparam;
+   double level;
+   const char* expver = 0;
+   iter.rewind();
+   iter.sort("LEVELIST", '>');
+//   iter.sort("STEP");
+//   iter.sort("TIME");
+//   iter.sort("DATE");
+   iter.sort("EXPVER");
+   iter.sort("PARAM");
+   while( field = iter() )
+   {
+      // MvFieldExpander	x(field);
+      MvRequest rq=field.getRequest();
+
+      iparam = rq("PARAM");
+      level  = rq("LEVELIST",0);
+      expver = rq("EXPVER");
+      string ev = expver ? expver : "_";
+
+      // Save basic information
+      GenerateKey(keystr,rq);
+      GenerateTimeKey(timekey,rq);
+      UpdateLevelList(field,level);
+
+      MvDate dd = GetDate(field);
+      double d1 = dd.YyyyMmDd_r();
+
+      // compute min/max time values
+      if ( dateMinD_ > d1 ) dateMinD_ = d1;
+      if ( dateMaxD_ < d1 ) dateMaxD_ = d1;
+
+      ParamInfo* par = new ParamInfo( iparam,d1,level,ev,
+                                      field.getGribKeyValueString("shortName"),
+                                      field.getGribKeyValueString("name"),
+                                      field.getGribKeyValueString("units")
+                                    );
+
+      ParamInsertPair inserted = params_.insert( ParamPair(keystr,par) );
+      ParamInfo *pp = (*(inserted.first)).second;
+      pp->AddIndex(timekey);
+   }
+
+   // Check if basic information was retrieved
+   if (params_.size() == 0 )
+   {
+      marslog(LOG_EROR, "GRIB file invalid, no parameters found.");
+      return false;
+   }
+
+   // Maybe this restriction should be removed in the future
+   if ( params_.size() > 1 )
+   {
+      marslog(LOG_EROR, "Creation of Hovmoeller diagrams from multiple parameters is not yet supported. This data has %d parameters.", params_.size());
+      return false;
+   }
+
+   return true;
 }
 
-int HovToolkit::EvaluateNrIndexes( ParamMap& params )
+void HovToolkit::GenerateKey(string &str, MvRequest& rq)
 {
-	// All params should have the same matrix size
-	ParamIterator ii = params.begin();
-	ParamInfo *par   = (*ii).second;
-	nrIndexes_ = par->NrIndexes();
+   int par = rq("PARAM");
+   int level  = rq("LEVELIST",0);
+   const char* expver = rq("EXPVER");
+   char key[16];
 
-	return nrIndexes_;
-}
+   ostrstream oss( key, sizeof( key ) );
+   oss << setfill( '0' )
+       << setw( 1 ) << 'p'
+       << setw( 3 ) << par
+       << setw( 4 ) << level
+       << setw( 4 ) << ( expver ? expver : "_" )
+       << ends;
 
-bool HovToolkit::InitAllocVariables(ParamMap &params)
-{
-	// Compute number of indexes from the input data
-	EvaluateNrIndexes( params );
-
-	// Create temporary netcdf file name
-	ncdfPath_ = marstmp();
-	if ( netcdf_ )
-		delete netcdf_;
-
-	netcdf_ = new MvNetCDF();
-	netcdf_->init(ncdfPath_,'w');
-
-	// Add common variables
-	if ( !NcAddCommonVariables(params) ) return false;
-
-	// Allocate memory
-     if (xint_) delete [] xint_;
-	if (gcoord1_) delete [] gcoord1_;
-	if (gcoord2_) delete [] gcoord2_;
-
-	int nrIndexes = EvaluateNrIndexes();
-	xint_    = new double [ nrPoints_ ];
-     gcoord1_ = new double [ nrPoints_ ];
-     gcoord2_ = new double [ nrPoints_ ];
-	if (vtime_.size())
-		vtime_.erase(vtime_.begin(),vtime_.end());
-	else
-		vtime_.reserve(nrIndexes);
-
-	return true;
-}
+   str = key;
 
-bool HovToolkit::NcGenerateData(MvRequest& data)
-{
-	// Initialize/Allocate internal variables
-	if ( !InitAllocVariables(params_) ) return false;
-
-	// Sort data by level, expver and param
-     MvFieldSet fs(data);
-	MvFieldSetIterator iter(fs);
-	iter.rewind();
-	iter.sort("LEVELIST");
-	iter.sort("EXPVER");
-	iter.sort("PARAM");
-
-	// Generate data
-	int currentGenerated = 0, lastNrGenerated = -1;
-	string timekey,keystr;
-	string lastKey = "FIRSTFIELD";
-	MvField field, lastField;
-	ParamIterator paramIter;
-
-	while( field = iter() )
-	{
-		currentGenerated++;
-
-		// Create keys
-		MvRequest rq = field.getRequest();
-		GenerateKey(keystr,rq);
-		GenerateTimeKey(timekey,rq);
-
-		// Compute data
-          if ( !ComputeValues(field) ) return false;
-
-		// Save data in the ParamInfo structure
-		if ( ( paramIter = params_.find(keystr) ) == params_.end() )
-		{
-			cout << "Something strange ??" << endl;
-			continue;
-		}
-		else 
-			(*paramIter).second->FillIndex(xint_,timekey,nrPoints_);
-      
-		// Write out data, if it can be grouped together
-		if ( lastKey != keystr && lastKey != string("FIRSTFIELD") )
-		{
-			NcWriteData(params_,lastField,lastKey);
-			lastNrGenerated = currentGenerated;
-		}
-      
-		lastKey = keystr;
-		lastField = field;
-	}
-
-	// Write out the data in the netcdf file
-	if ( lastNrGenerated <=  currentGenerated )
-	{
-		if ( ! NcWriteData(params_,lastField,lastKey) )
-		{
-               marslog(LOG_EROR, "Could not generate NETCDF data");
-               return false;
-		}
-	}
-	netcdf_->close();
-
-	return true;
+   return;
 }
-
-bool HovToolkit::NcAddCommonVariables(ParamMap &params)
+ 
+void HovToolkit::GenerateTimeKey(string &str, MvRequest& rq)
 {
-	// Write main attributes
-	netcdf_->addAttribute("_VIEW","HOVMOELLERVIEW");
-	NcAddType();
-	NcAddCoords();
-	NcAddDirection();
-
-	// Create time and the second variables/axes
-	MvNcVar *tncvar;
-//	if ( verticalAxis_ == HOV_TIME )
-//	{
-		tncvar = netcdf_->addVariable("time",ncDouble,EvaluateNrIndexes());
-		NcAddSecondAxis();
-//	}
-//	else
-//	{
-//		NcAddSecondAxis();
-//		tncvar = netcdf_->addVariable("time",ncDouble,EvaluateNrIndexes());
-//	}
-
-	MvDate d1(GetRefTime());
-	char buf[128];
-	d1.Format(d1.StringFormat(),buf);
-	tncvar->addAttribute("MV_VERB","AUX");
-	tncvar->addAttribute("reference_date",buf);
-	tncvar->addAttribute("units","hours");
-
-	// Create matrix variable (number of matrixes)
-	if ( params.size() > 1 )
-	{
-          // Not supported yet
-          marslog(LOG_EROR, "Creation of Hovmoeller diagrams from multiple parameters is not yet supported. This data has %d parameters.", params_.size());
-          return false;
-//		ncvar = netcdf_.addVariable("matrixes",ncChar,params.size());
-//		ParamIterator ii;
-//		for ( ii = params.begin(); ii != params.end(); ii++ )
-			
-//	if ( ii == params.end() )
-//	     return false;
-
-//	ParamInfo *par = (*ii).second;
-	}
-
-	return true;
-}
+   int  istep  = rq("STEP");
+   long idate  = rq("DATE");
+   int  itime  = rq("TIME");
 
-void HovToolkit::NcAddSecondAxis()
-{
-     // Add second axis
-     MvNcVar *gncvar;
-     gncvar = netcdf_->addVariable(GetSecondAxisName(),ncDouble,nrPoints_);
-
-     // Add attributes
-	gncvar->addAttribute("MV_VERB","AUX");
-	if ( geoDir_ == HOV_EW )
-		gncvar->addAttribute("units","degrees_south");
-	else
-		gncvar->addAttribute("units","degrees_east");
-
-     // Add second auxiliary axis
-     if ( SecondAuxiliaryAxis() )
-     {
-          MvNcVar *gncvar1;
-          gncvar1 = netcdf_->addVariable(GetSecondAuxiliaryAxisName(),ncDouble,nrPoints_);
-
-          // Add attributes
-          gncvar1->addAttribute("MV_VERB","AUX");
-          gncvar1->addAttribute("units","degrees");
-     }
-}
+   char key[20];
+   ostrstream oss( key, sizeof( key ) );
+   oss << setfill( '0' )
+       << setw( 8 ) << idate
+       << setw( 4 ) << itime
+       << setw( HOV_STEPSIZE ) << istep
+       << ends;
 
-void HovToolkit::NcAddCoords(MvNcVar *var)
-{
-	if (var)
-	{
-		//backward compatibility
-		double area[4];
-		area[0] = y1_; area[2] = y2_;
-		area[1] = x1_; area[3] = x2_;
-		var->addAttribute("AREA",4,area);
-	}
-	else
-	{
-		char area[32];
-		sprintf(area,"%7.2f/%7.2f/%7.2f/%7.2f",y1_,x1_,y2_,x2_);
-		netcdf_->addAttribute("COORDINATES",area);
-	}
-
-	if (var)
-	{
-		//backward compatibility
-		double grid[2];
-		grid[0] = gridEW_; grid[1] = gridNS_;
-		var->addAttribute("GRID",2,grid);
-	}
-	else
-	{
-		char grid[12];
-		sprintf(grid,"%5.2f/%5.2f",gridEW_,gridNS_);
-		netcdf_->addAttribute("GRID",grid);
-	}
-}
+   str = key;
 
-void HovToolkit::NcAddDirection(MvNcVar *ncvar)
-{
-	// Check average direction
-	string adir;
-	if ( geoDir_ == HOV_NS )
-		adir = "NORTH_SOUTH";
-	else if ( geoDir_ == HOV_EW )
-		adir = "EAST_WEST";
-	else adir = "NULL";
-
-	// Check time direction and time axis orientation
-	string tdir,taxis;
-	tdir  = (timeDir_ == HOV_TIMEFOR) ? "FORWARD" : "BACKWARD";
-	taxis = (verticalAxis_ == HOV_TIME) ? "VERTICAL" : "HORIZONTAL";
-
-	// Check height direction
-	string hdir;
-	if ( heightDir_ == HOV_HEIGHTFOR )
-		hdir = "FORWARD";
-	else if ( heightDir_ == HOV_HEIGHTBACK )
-		hdir = "BACKWARD";
-	else hdir = "NULL";
-
-	// Check height axis type
-	string haxisType;
-	if ( heightAxisType_ == HOV_PRESSURE )
-		haxisType = "PRESSURE";
-	else if ( heightAxisType_ == HOV_ASINDATA )
-		haxisType = "AS_IN_DATA";
-	else haxisType = "NULL";
-
-	// Add average and time direction
-	if (ncvar)
-	{
-		ncvar->addAttribute("DIRECTION",adir.c_str());
-		ncvar->addAttribute("T_DIRECTION",tdir.c_str());
-		ncvar->addAttribute("T_AXIS_DIRECTION",taxis.c_str());
-		ncvar->addAttribute("H_DIRECTION",hdir.c_str());
-		ncvar->addAttribute("H_AXIS_TYPE",haxisType.c_str());
-	}
-	else
-	{
-		netcdf_->addAttribute("DIRECTION",adir.c_str());
-		netcdf_->addAttribute("T_DIRECTION",tdir.c_str());
-		netcdf_->addAttribute("T_AXIS_DIRECTION",taxis.c_str());
-		netcdf_->addAttribute("H_DIRECTION",hdir.c_str());
-		netcdf_->addAttribute("H_AXIS_TYPE",haxisType.c_str());
-	}
+   return;
 }
 
-// We have all the values for one set of data
-// Call functions to write the values to netcdf file
-bool HovToolkit::NcWriteData(ParamMap &params, MvField&, const string& key)
+double HovToolkit::GetDateDif(string& timekey)
 {
-	// Get initial values
-	ParamIterator ii = params.find(key);
-	if ( ii == params.end() )
-	     return false;
-
-	ParamInfo *par = (*ii).second;
-
-	// Generate the CDF variable
-	MvNcVar *ncvar;
-	vector<long> vdim(2);
-	vector<string> vname(2);
-	int nrIndexes = EvaluateNrIndexes();
-	if ( verticalAxis_ == HOV_TIME )
-	{
-		// These 4 commands should be common for both if/else
-		// They are here for backward compatibility
-		// Analyse them again when PlotMod is replaced by DispMod
-		vdim[0]  = nrIndexes;
-		vdim[1]  = nrPoints_;
-		vname[0] = "time";
-		vname[1] = GetSecondAxisName();
-		ncvar = netcdf_->addVariable(key.c_str(),ncDouble,vdim,vname);
-	}
-	else
-	{
-		vdim[0]  = nrPoints_;
-		vdim[1]  = nrIndexes;
-		vname[0] = GetSecondAxisName();
-		vname[1] = "time";
-		ncvar = netcdf_->addVariable(key.c_str(),ncDouble,vdim,vname);
-	}
-
-	// Write some attributes in the netcdf file
-	NcAddMetadata(ncvar,par,key);
-
-	// Write matrix in the netcdf file
-	NcFillValues(ncvar,par);
-
-	// Update time axis values
-	MvNcVar *tncvar = netcdf_->getVariable("time");
-	tncvar->put(vtime_,nrIndexes);
-
-	// Update the second axis values
-	MvNcVar *gncvar = netcdf_->getVariable(GetSecondAxisName());
-	gncvar->put(gcoord1_,nrPoints_);
-
-     // Update the second auxiliary axis values
-     if ( SecondAuxiliaryAxis() )
-     {
-          MvNcVar *gncvar1 = netcdf_->getVariable(GetSecondAuxiliaryAxisName());
-          gncvar1->put(gcoord2_,nrPoints_);
-     }
-
-     return true;
-}
+   // Extract date information
+   double ddate = atof(timekey.substr(0,8).c_str());
+   double dhour = atof(timekey.substr(8,2).c_str());
+   double dmin  = atof(timekey.substr(10,2).c_str());
+   double dstep = atof(timekey.substr(12,HOV_STEPSIZE).c_str());
 
-void HovToolkit::NcAddMetadata(MvNcVar *ncvar, ParamInfo *par, const string &key)
-{
-	ncvar->addAttribute("MV_VERB","PCONT");
+   // Compute hour+min+step in fraction of days
+   double frac = dhour*3600./86400. + dmin*60./86400. + dstep*3600./86400.;
 
-	// Split the string back into individual components.
-	ncvar->addAttribute("PARAM",key.substr(0,4).c_str());
-	ncvar->addAttribute("LEVEL",key.substr(4,4).c_str());
-	ncvar->addAttribute("EXPVER",key.substr(8,4).c_str());
+   // If it is a monthly mean parameter, add 1 to original date
+   if ( fmod(ddate,100)== 0. ) ddate++;
 
-	// Write area, grid, direction, title and axes
-	NcAddCoords(ncvar);
-	NcAddDirection(ncvar);
-	NcAddTitle(ncvar, par);
-	NcAddAxes(ncvar);
+   // Compute new date
+   MvDate ndate(ddate);
+   ndate += frac;
 
-	return;
-}
+   // Compute the difference from the reference date
+   MvDate ref(GetRefTime());
+   double dif = ref.time_interval_hours(ndate);
 
-void HovToolkit::SetAxes()
-{
-	SetTimeAxis();
-	SetSecondAxis();
+   return dif;
 }
 
-void HovToolkit::SetTimeAxis()
+MvDate HovToolkit::GetDate(MvField& field)
 {
-        // Set orientation
-	timeAxis_("AXIS_ORIENTATION") = (verticalAxis_ == HOV_TIME) ? "VERTICAL" : "HORIZONTAL";
-
-	// Set min/max values
-	double minTime = GetRefTime();
-	timeAxis_("AXIS_TYPE") = "DATE";
-	if ( timeDir_ == HOV_TIMEBACK )
-	{
-		timeAxis_("AXIS_DATE_MIN_VALUE") = MvDate(maxTime_);
-		timeAxis_("AXIS_DATE_MAX_VALUE") = MvDate(minTime);
-	}
-	else
-	{
-		timeAxis_("AXIS_DATE_MIN_VALUE") = MvDate(minTime);
-		timeAxis_("AXIS_DATE_MAX_VALUE") = MvDate(maxTime_);
-	}
-
-#if 0 //It does not work if user wants the default value
-	// Try to find a better default value
-	if ( !(const char*)timeAxis_("AXIS_DATE_TYPE") )
-	{
-		long diff = (long)(maxTime_ - minTime);
-		if ( diff < 200L )
-		{
-			timeAxis_("AXIS_DATE_TYPE")  = "DAYS";
-			timeAxis_("AXIS_DAYS_LABEL") = "NUMBER";
-		}
-		else if ( diff < 20000L ) timeAxis_("AXIS_DATE_TYPE") = "MONTHS";
-		else                      timeAxis_("AXIS_DATE_TYPE") = "YEARS";
-	}
-#endif
-
-	return;
-}
+   // Compute initial date
+   MvDate d1(field.yyyymmddFoh());
 
-void HovToolkit::CheckAxis(double minValue, double maxValue, int axisType, MvRequest &axis)
-{
-	if ( abs( (int)(maxValue - minValue) ) > 0 )
-	{
-		axis("AXIS_TICK") = "ON";
-		axis("AXIS_TICK_LABEL") = "ON";
-		if ( !IsParameterSet(axis,"AXIS_MIN_VALUE") )
-			axis("AXIS_MIN_VALUE") = minValue;
-
-		if ( !IsParameterSet(axis,"AXIS_MAX_VALUE") )
-			axis("AXIS_MAX_VALUE") = maxValue;
-
-	}
-	else    // Generate a title for the point
-	{
-		char buf[10];
-		axis("AXIS_TICK_LABEL") = "OFF";
-		axis("AXIS_TICK") = "OFF";
-		sprintf(buf,"%01.1f",minValue);
-		if ( axisType == HOV_AXISLAT )
-			strcat(buf, (minValue > 0) ? "N" : "S");
-		else if ( axisType == HOV_AXISLONG )
-			strcat(buf, (minValue > 0) ? "E" : "W");
-		else
-			strcat(buf, "ERROR?");
-
-		axis("AXIS_TITLE_TEXT") = buf;
-	}
-	return;
-}
+   // Add step
+   double d2 = field.stepFoh();
 
-// Internal data organization: 
-//   .each line contains a set of averaged lat/long values related to
-//    an especific time
-//   .first line is related to the earliest time
-// Output data organization:
-//   .the matrix coordinates (0,0) corresponds to top/left corner
-//   .4 output layouts:
-//
-//      A)           min lng     max lng    B)           min lng     max lng
-//         max time  -------------------       min time  -------------------
-//                   ...................                 ...................
-//         min time  -------------------       max time  -------------------
-//
-//
-//      C)           min time   max time    D)           max time   min time
-//         max lat   -------------------       max lat   -------------------
-//                   ...................                 ...................
-//         min lat   -------------------       min lat   -------------------
-//
-void HovToolkit::NcFillValues(MvNcVar *ncvar, ParamInfo *par)
-{
-	// Create data matrix according to the input parameters
-	// Write matrix to the netcdf file
-	IndexesMap lmap = par->Indexes();
-	int i,k;
-	string timekey;
-	double dd;
-
-	if ( verticalAxis_ == HOV_TIME ) //vertical time axis
-	{
-          if ( timeDir_ == HOV_TIMEFOR )  //option A
-          {
-               ReverseIndexIterator ii;
-               for (ii = lmap.rbegin(), k = 0; ii != lmap.rend(); ii++, k++ )
-               {
-                    timekey = (*ii).first;
-                    dd = GetDateDif(timekey);
-                    vtime_.push_back(dd);
-
-                    IndexesInfo *lInfo = (*ii).second;
-                    NcWriteValues (ncvar, lInfo, k );
-               }
-
-               // 'Expand' option: write previous values
-               NcFillPreviousValues(ncvar,k);
-          }
-          else  //option B
-          {
-               // 'Expand' option: write previous values first
-               int pos=0;
-               NcFillPreviousValues(ncvar,pos);
-
-               IndexIterator ii;
-               for (ii = lmap.begin(), k = 0; ii != lmap.end(); ii++, k++ )
-               {
-                    timekey = (*ii).first;
-                    dd = GetDateDif(timekey);
-                    vtime_.push_back(dd);
-
-                    IndexesInfo *lInfo = (*ii).second;
-                    NcWriteValues (ncvar, lInfo, k+pos );
-               }
-          }
-     }
-     else    //vertical geo/height axis: transpose values
-     {
-          // Retrieve all values from the internal structure
-          int j=0;
-          vector <double> mat(nrIndexes_ * nrPoints_);
-          vector <double> vaux;
-          vaux.reserve(nrIndexes_);
-          IndexIterator ii;
-          for (ii = lmap.begin(), k = 0; ii != lmap.end(); ii++, k++ )
-          {
-               timekey = (*ii).first;
-               dd = GetDateDif(timekey);
-               vaux.push_back(dd);
-
-               IndexesInfo *lInfo = (*ii).second;
-               for (i = 0; i < nrPoints_; i++ )
-                    mat[j++] = lInfo->Values()[i];
-          }
-
-          // Initialize indexes according to Time forward or backward
-          int ind,step,pos,posEx;
-          if ( timeDir_ == HOV_TIMEFOR) //option C
-          {
-               ind   = 0;
-               step  = 1;
-               pos   = nrIndexesIn_;
-               posEx = 0;
-          }
-          else                          //option D
-          {
-               ind   = nrIndexes_-1;
-               step  = -1;
-               pos   = 0;
-               posEx = nrIndexes_;
-          }
-
-          // 'Expand' option: open input netCDF file
-          NcOpenPreviousFile();
-
-          // Write matrix data to the netcdf file
-          int nrIndexes = EvaluateNrIndexes();
-          vector <double> cp(nrIndexes);
-          for (i = 0; i < nrPoints_; i++ )
-          {
-               for (j = i, k = ind; j < nrIndexes_*nrPoints_; j+=nrPoints_, k+=step )
-                    cp[k+pos] = mat[j];
-
-               // 'Expand' option: write previous values
-               if ( !NcFillPreviousValues(ncvar,i,cp,posEx) ) return;
-
-               ncvar->setCurrent(i);
-               ncvar->put(cp,1,(long)nrIndexes);
-          }
-
-          // Save time values
-          if ( timeDir_ == HOV_TIMEFOR )
-               if ( !NcFillPreviousTimeValues() )
-                    return;
-
-          k = ind;
-          for (i = 0;  i < nrIndexes_; i++ )
-          {
-               vtime_.push_back(vaux[k]);
-               k += step;
-          }
-
-          if ( timeDir_ == HOV_TIMEBACK )
-               if ( !NcFillPreviousTimeValues() )
-                    return;
-
-          // 'Expand' option: close input netCDF file
-          NcClosePreviousFile();
-     }
+   return (d1+d2);
 }
 
-void HovToolkit::NcOpenPreviousFile()
+bool HovToolkit::GetTimeInfo()
 {
-	// Return if option is not Expand
-	if ( nrIndexesIn_ == 0 ) return;
+   // Empty time variable
+   vtime_.clear();
 
-	// Initialize the input netcdf file
-	if ( netcdfIn_ ) delete netcdfIn_;
-	netcdfIn_ = new MvNetCDF();
-	netcdfIn_->init(netfnameIn_,'r');
+   // Get time series from the netCDF file (expand option)
+   if ( !this->ExpandGetTimeInfo() )
+      return false;
 
-	return;
-}
+   // Get time series from the data
+   this->GetTimeInfoFromParam();
 
-void HovToolkit::NcClosePreviousFile()
-{
-	if ( netcdfIn_ )
-	{
-		delete netcdfIn_;
-		netcdfIn_ = 0;
-	}
+   // Update number of times
+   nrIndexes_ = vtime_.size();
 
-	return;
+   return true;
 }
 
-void HovToolkit::NcFillPreviousValues(MvNcVar *ncvar,int& pos)
+void HovToolkit::GetTimeInfoFromParam()
 {
-	// Return if option is not Expand
-	if ( nrIndexesIn_ == 0 ) return;
-
-	// Open input netcdf file
-     NcOpenPreviousFile();
-
-	// Copy 'time' values from the input file
-	vector<double> vals;
-     MvNcVar *tvar = netcdfIn_->getVariable("time");
-	long *edges = tvar->edges();
-	tvar->get(vals,edges);
-	for ( unsigned int i = 0; i < vals.size(); i++)
-	       vtime_.push_back(vals[i]);
-
-	// Copy values from the input netcdf file
-	string key = ncvar->name();  //get variable name
-	MvNcVar *ncvarIn = netcdfIn_->getVariable(key.c_str());
-	edges = ncvarIn->edges();
-	ncvarIn->get(vals,edges);
-	ncvar->setCurrent(pos);
-	ncvar->put(vals,edges[0],edges[1]);
-     pos += edges[0];
-
-	NcClosePreviousFile();
-
-	return;
-}
-
+   // Get time series from the first variable
+   double dd;
+   string timekey;
+   ParamInfo* par = (*params_.begin()).second;
+   IndexesMap lmap = par->Indexes();
+   for (IndexIterator ii = lmap.begin(); ii != lmap.end(); ii++)
+   {
+      timekey = (*ii).first;
+      dd = this->GetDateDif(timekey);
+      vtime_.push_back(dd);
+   }
 
-bool HovToolkit::NcFillPreviousValues(MvNcVar *ncvar,int pos,vector<double>& cp,int ind )
-{
-	// Return if option is not Expand
-	if ( nrIndexesIn_ == 0 ) return true;
-
-	// Check input file
-	if ( !netcdfIn_ ) 
-	{
-          marslog(LOG_EROR, "Input NetCDF file not accessible");
-          return false;
-	}
-	
-	// Get values from the input netcdf file
-	vector<double> vals;
-	string key = ncvar->name();  //get variable name
-	MvNcVar *ncvarIn = netcdfIn_->getVariable(key.c_str());
-	long* edges = ncvarIn->edges();
-	ncvarIn->setCurrent(pos);
-	ncvarIn->get(vals,1,edges[1]);
-
-	// Copy values
-	for (unsigned int i = 0; i < vals.size(); i++)
-		cp[ind+i] = vals[i];
-
-	return true;
+   return;
 }
 
-bool HovToolkit::NcFillPreviousTimeValues()
+bool HovToolkit::GenerateData(MvRequest& data)
 {
-	// Return if option is not Expand
-	if ( nrIndexesIn_ == 0 ) return true;
-
-	// Check input file
-	if ( !netcdfIn_ ) 
-	{
-          marslog(LOG_EROR, "Input NetCDF file not accessible");
-          return false;
-	}
-
-	// Copy 'time' values from the input file
-	vector<double> vals;
-     MvNcVar *tvar = netcdfIn_->getVariable("time");
-	long *edges = tvar->edges();
-	tvar->get(vals,edges);
-	for ( unsigned int i = 0; i < vals.size(); i++)
-		vtime_.push_back(vals[i]);
-
-	return true;
-}
+   // Write initial info and variables to the netCDF
+   if ( !this->Initialiser() )
+      return false;
 
-void HovToolkit::NcWriteValues (MvNcVar *ncvar, IndexesInfo *lInfo, int pos )
-{
-	 vector <double> cp(nrPoints_);
+   // Allocate internal variables
+   if ( xint_ )
+      delete xint_;
+   xint_ = new double[nrPoints_];
 
-	 // Get values from the structure
-	 for (int i = 0; i < nrPoints_; i++ )
-		  cp[i] = lInfo->Values()[i];
+   // Sort data by level, expver and param
+   MvFieldSet fs(data);
+   MvFieldSetIterator iter(fs);
+   iter.rewind();
+   iter.sort("LEVELIST",'>');
+   iter.sort("EXPVER");
+   iter.sort("PARAM");
 
-	 // Write values to a netcdf file
-	 ncvar->setCurrent(pos);
-	 ncvar->put(cp,1,(long)nrPoints_);
-}
+   // Generate data
+   int currentGenerated = 0, lastNrGenerated = -1;
+   string timekey,keystr;
+   string lastKey = "FIRSTFIELD";
+   MvField field, lastField;
+   ParamIterator paramIter;
+   while( field = iter() )
+   {
+      currentGenerated++;
 
-MvRequest HovToolkit::GetVariableData(MvRequest& req)
-{
-	// It assumes that there is only one variable data to be processed
-	// and it corresponds to a subrequest whose name starts with character
-	// 'p' followed by a number (e.g. p22800000001). If not found, an 
-	// empty structure is returned.
-	MvRequest reqVar = req("VARIABLES");
-	for ( int i = 0; i < reqVar.countParameters(); i++ )
-	{
-		const char* parname = reqVar.getParameter(i);
-		if ( parname[0] == 'p' && isdigit(parname[1]) )
-		{
-			MvRequest vv = reqVar.getSubrequest(parname);
-			return vv;
-		}
-	}
-
-	return MvRequest();
-}
+      // Create keys
+      MvRequest rq = field.getRequest();
+      GenerateKey(keystr,rq);
+      GenerateTimeKey(timekey,rq);
 
-void HovToolkit::InitializeAxes(MvRequest& req)
-{
-	// Default axes
-	timeAxis_.setVerb ("PAXIS");
-     geoAxis_.setVerb ("PAXIS");
-     geo2Axis_.setVerb ("PAXIS");
-
-	// Retrieve information from the data variable
-	MvRequest reqVar = GetVariableData(req);
-
-	// Initialize axes
-	if ( reqVar )
-	{
-		// Initialize time axis
-		const char* str = reqVar("TIME_AXIS");
-		if ( str )
-			timeAxis_ = string2request(str);
-
-		// Initialize geo axis
-		str = reqVar("GEO_AXIS");
-		if ( str )
-			geoAxis_ = string2request(str);
-
-		// Initialize second geo axis
-		str = reqVar("GEO2_AXIS");
-		if ( str )
-			geo2Axis_ = string2request(str);
-	}
-}
+      // Compute data
+      if ( !ComputeValues(field) )
+         return false;
 
-//--------------------------------------------------------------
+      // Save data in the ParamInfo structure
+      ParamInfo* par = this->GetParamInfo( keystr );
+      if ( !par )
+         return false;
 
-void HovLineToolkit::NcAddType()
-{
-	netcdf_->addAttribute("TYPE","LINE");
-}
+      par->FillIndex(xint_,timekey,nrPoints_);
 
-bool HovLineToolkit::ComputeValues(MvField &field)
-{
-	// Initialize variables
-	MvFieldExpander x(field);
-	double dx = double( x2_ - x1_ ) / double(nrPoints_ -1);
-	double dy = double( y2_ - y1_ ) / double(nrPoints_ -1);
-	double lon = x1_;
-	double lat = y1_;
-
-	// Interpolatate along a line
-	for ( int k = 0; k < nrPoints_; k++)
-	{
-		 xint_[k] = field.interpolateAt(lon, lat);
-		 gcoord1_[k] = lon;
-		 gcoord2_[k] = lat;
-		 lon += dx;
-		 lat += dy;
-	}
-	return true;
-}
+      // Write out data, if it can be grouped together
+      if ( lastKey != keystr && lastKey != string("FIRSTFIELD") )
+      {
+         if ( !NcWriteData(lastField,lastKey ) )
+            return false;
+         lastNrGenerated = currentGenerated;
+      }
 
-void HovLineToolkit::NcAddTitle(MvNcVar *var, ParamInfo *par)
-{
-	char title[512];
-	sprintf( title,"Hovmoeller of %s %d %s",
-		 par->ParamName().c_str(), par->Level(),par->ExpVerTitle().c_str() );
+      lastKey = keystr;
+      lastField = field;
+   }
 
-	var->addAttribute("MV_TITLE",title);
+   // Write out the data in the netcdf file
+   if ( lastNrGenerated <=  currentGenerated )
+   {
+      if ( !NcWriteData(lastField,lastKey) )
+         return false;
+   }
+   netcdf_->close();
 
-	return;
+   return true;
 }
 
-void HovLineToolkit::NcAddAxes(MvNcVar *ncvar)
+bool HovToolkit::Initialiser()
 {
-	SetAxes();
-	char* creq = request2string(timeAxis_);
-	ncvar->addAttribute("TIME_AXIS",creq);
-	creq = request2string(geoAxis_);
-	ncvar->addAttribute("GEO_AXIS",creq);
-	creq = request2string(geo2Axis_);
-	ncvar->addAttribute("GEO2_AXIS",creq);
-}
-
-void HovLineToolkit::SetSecondAxis()
-{
-        // Set orientation
-        if ( verticalAxis_ == HOV_GEO )
-	{
-		geoAxis_("AXIS_ORIENTATION")  = "VERTICAL";
-		geo2Axis_("AXIS_ORIENTATION") = "VERTICAL";
-	}
-	else
-	{
-		geoAxis_("AXIS_ORIENTATION")  = "HORIZONTAL";
-		geo2Axis_("AXIS_ORIENTATION") = "HORIZONTAL";
-	}
-
-	// Set lat/long axis type
-        geoAxis_("AXIS_TICK_LABEL_TYPE")  = "LATITUDE";
-        geo2Axis_("AXIS_TICK_LABEL_TYPE") = "LONGITUDE";
-
-	// Set geographical min/max values
-	if ( verticalAxis_ == HOV_GEO ) // vertical geographical axes
-	{
-		CheckAxis(y2_,y1_,HOV_AXISLAT,geoAxis_);
-		CheckAxis(x2_,x1_,HOV_AXISLONG,geo2Axis_);
-	}
-	else                            // horizontal geographical axes
-	{
-		CheckAxis(y1_,y2_,HOV_AXISLAT,geoAxis_);
-		CheckAxis(x1_,x2_,HOV_AXISLONG,geo2Axis_);
-	}
-
-	return;
-}
+   // Create temporary netcdf file name
+   ncdfPath_ = marstmp();
+   if ( netcdf_ )
+      delete netcdf_;
+   netcdf_ = new MvNetCDF();
+   netcdf_->init(ncdfPath_,'w');
 
-//--------------------------------------------------------------
+   // Write main attributes to the netCDF
+   this->NcWriteGlobalAttributes();
 
-void HovAreaToolkit::NcAddType()
-{
-	netcdf_->addAttribute("TYPE","AREA");
+   // Initialise time variable: compute and write to the netCDF
+   if ( !this->GetTimeInfo() )
+      return false;
+   if ( !this->NcWriteTimeInfo() )
+      return false;
+
+   // Compute second coordinates: compute and write to the netCDF
+   if ( !this->ComputeSecondCoord() )
+      return false;
+   if ( !this->NcWriteSecondCoord() )
+      return false;
+
+   return true;
 }
 
-bool HovAreaToolkit::ComputeValues(MvField &field)
+void HovToolkit::NcWriteGlobalAttributes()
 {
-	MvFieldExpander x(field);
-  
-	// Average over area
-	// AverageAlong() does not know array size. If it fails then return
-	// array remains empty, thus fill with missing values here.
-	// gridNS_ or gridEW_ have the same value
-	bool interp=false; //set bilinear interpolation
-	if ( !field.averageAlong(xint_,x1_,y1_,x2_,y2_,geoDir_,nrPoints_,gridNS_,interp,gcoord1_) )
-	{
-		for (int i = 0; i < nrPoints_; i++ )
-			xint_[i] = DBL_MAX;
-
-		return false;
-	}
-
-	return true;
+   // Write main attributes
+   netcdf_->addAttribute("_View","HOVMOELLERVIEW");
+   netcdf_->addAttribute("_FillValue",HMISSING_VALUE );
+   netcdf_->addAttribute("type", ApplicationType() );
+
+   char buf[32];
+   sprintf(buf,"%7.2f/%7.2f/%7.2f/%7.2f",y1_,x1_,y2_,x2_);
+   netcdf_->addAttribute("coordinates",buf);
+
+   sprintf(buf,"%5.2f/%5.2f",gridEW_,gridNS_);
+   netcdf_->addAttribute("grid",buf);
+
+   netcdf_->addAttribute("vertical_axis", verticalAxis_);
+
+   // Write attributes specific to an application
+   this->NcWriteGlobalAttributesApp();
+
+   // Add title to the global attributes.
+   // Currently, because Magics only checks the Global Attributes to
+   // produce a title and Hovmoeller plots only the first variable then
+   // we are adding this code below. REMOVE it when Magics is capable to
+   // produce a title from the Variable Attributes.
+   ParamIterator ii = params_.begin();
+   ParamInfo *par   = (*ii).second;
+   netcdf_->addAttribute("title",this->GetTitle(par).c_str());
 }
 
-void HovAreaToolkit::NcAddTitle(MvNcVar *var, ParamInfo *par) 
+// Write Time info to the netCDF file
+bool HovToolkit::NcWriteTimeInfo()
 {
-	char  title[512];
-	if ( geoDir_ == HOV_EW )
-		sprintf(title,"Hovmoeller of %s %d %s (%.1f%s-%.1f%s)",
-			par->ParamName().c_str(), par->Level(),
-			par->ExpVerTitle().c_str(),
-			(x1_< 0) ? -x1_ : x1_, (x1_<0) ? "W" : "E",
-			(x2_< 0) ? -x2_ : x2_, (x2_<0) ? "W" : "E" );
-	else
-		sprintf(title,"Hovmoeller of %s %d %s (%.1f%s-%.1f%s)",
-			par->ParamName().c_str(), par->Level(),
-			par->ExpVerTitle().c_str(),
-			(y1_< 0) ? -y1_ : y1_, (y1_<0) ? "S" : "N",
-			(y2_< 0) ? -y2_ : y2_, (y2_<0) ? "S" : "N" );
-
-	var->addAttribute("MV_TITLE",title);
-
-	return;
-}
+   // Add 'time' variable to netCDF
+   vector<long> v_ndim(1,nrIndexes_);
+   vector<string> v_sdim(1,HOV_VARTIME);
+   MvNcVar *nctime = netcdf_->addVariable(v_sdim[0],ncDouble,v_ndim,v_sdim);
 
-void HovAreaToolkit::NcAddAxes(MvNcVar *ncvar)
-{
-	SetAxes();
-	char* creq = request2string(timeAxis_);
-	ncvar->addAttribute("TIME_AXIS",creq);
-	creq = request2string(geoAxis_);
-	ncvar->addAttribute("GEO_AXIS",creq);
-}
+   char buf[128];
+   MvDate d1(this->GetRefTime());
+   d1.Format(d1.StringFormat(),buf);
+   nctime->addAttribute("long_name", "Time");
+   nctime->addAttribute("units", "hours");
+   nctime->addAttribute("reference_date", buf);
+   nctime->put(vtime_,nrIndexes_);
 
-void HovAreaToolkit::SetSecondAxis()
-{
-        // Set orientation
-        geoAxis_("AXIS_ORIENTATION")  = (verticalAxis_ == HOV_GEO) ? "VERTICAL" : "HORIZONTAL";
-
-	// Set lat/long axis type according to the direction
-        geoAxis_("AXIS_TICK_LABEL_TYPE") = (geoDir_ == HOV_NS) ? "LONGITUDE" : "LATITUDE";
-
-	// Set geographical min/max values
-	double min,max;
-	if ( strcmp((const char*)geoAxis_("AXIS_TICK_LABEL_TYPE"),"LONGITUDE") )
-	{
-		if ( verticalAxis_ == HOV_GEO ) // latitude vertical
-		{
-			min = y2_;
-			max = y1_;
-		}
-		else                            //latitude horizontal
-		{
-			min = y1_;
-			max = y2_;
-		}
-	}
-	else
-	{
-		if ( verticalAxis_ == HOV_GEO ) // longitude vertical
-		{
-			min = x2_;
-			max = x1_;
-		}
-		else                            //longitude horizontal
-		{
-			min = x1_;
-			max = x2_;
-		}
-	}
-	CheckAxis(min,max,geoDir_,geoAxis_);
-
-	return;
+   return true;
 }
 
-//--------------------------------------------------------------
-
-void HovHeightToolkit::GenerateKey(string &str, MvRequest& rq)
-{
-	// The level value is ignored to build the key
-	int par = rq("PARAM");
-	int level = 0;
-	const char* expver = rq("EXPVER");
-        char key[16];
-
-	ostrstream oss( key, sizeof( key ) );
-
-	oss << setfill( '0' )
-	    << setw( 1 ) << 'p'
-	    << setw( 3 ) << par 
-	    << setw( 4 ) << level
-	    << setw( 4 ) << ( expver ? expver : "_" )
-	    << ends;
-
-        str = key;
-
-	return;
-}
-
-void HovHeightToolkit::InitializeLevelList(int size)
-{
-	vlevels_.clear();
-	vlevels_.reserve(size);
-}
-
-void HovHeightToolkit::UpdateLevelList(MvField& field, double ilevel)
+// We have all the values for one set of data
+// Call functions to write the values to netcdf file
+bool HovToolkit::NcWriteData(MvField&, const string& key)
+{
+   // Get parameter info
+   ParamInfo* par = this->GetParamInfo( key );
+   if ( !par )
+      return false;
+
+   // Generate the CDF variable
+   vector<long> vdim(2);
+   vector<string> vname(2);
+   int nrIndexes = this->NrIndexes();
+   if ( verticalAxis_ == HOV_TIME )
+   {
+      vdim[0]  = nrIndexes;
+      vdim[1]  = nrPoints_;
+      vname[0] = HOV_VARTIME;
+      vname[1] = this->GetSecondCoordName();
+   }
+   else
+   {
+      vdim[0]  = nrPoints_;
+      vdim[1]  = nrIndexes;
+      vname[0] = this->GetSecondCoordName();
+      vname[1] = HOV_VARTIME;
+   }
+   MvNcVar* ncvar = netcdf_->addVariable(getNetcdfVarname(par->ParamName()),ncDouble,vdim,vname);
+
+   // Write some attributes in the netcdf file
+   this->NcAddMetadata(ncvar,par);
+
+   // Write matrix in the netcdf file
+   this->NcFillValues(ncvar,par);
+
+   return true;
+}
+
+void HovToolkit::NcAddMetadata(MvNcVar *ncvar, ParamInfo *par)
+{
+   // Write parameter info
+   ncvar->addAttribute("long_name",par->ParamLongName().c_str());
+   ncvar->addAttribute("units",par->Units().c_str());
+   ncvar->addAttribute("level",par->Level());
+   ncvar->addAttribute("expver",par->ExpVer().c_str());
+   ncvar->addAttribute("_FillValue",HMISSING_VALUE);
+
+   // Write title
+   string title = this->GetTitle(par);
+   ncvar->addAttribute("title",title.c_str());
+
+   return;
+}
+
+// Internal data organization:
+//   .each line contains a set of averaged lat/long values related to
+//    an especific time
+//   .first line is related to the earliest time
+//   .first value in each line is related to X1 (first longitude west) or
+//    Y1 (first latitude south) or X1/Y1 (first longitude/latitude point).
+// Output data organization:
+//   .the matrix coordinates (0,0) corresponds to bottom/left corner
+//   .2 output layouts:
+//
+//      A)           min lng     max lng
+//         max time  -------------------
+//                   ...................
+//         min time  -------------------
+//
+//
+//      B)           min time   max time
+//         max lat   -------------------
+//                   ...................
+//         min lat   -------------------
+//
+void HovToolkit::NcFillValues(MvNcVar *ncvar, ParamInfo *par)
 {
-	// Check if conversion from model level to pressure level is needed
-	double level = (heightAxisType_ == HOV_PRESSURE) ? field.meanML_to_Pressure_bySP(double(HOV_SP*100.),(int)ilevel)/100. : ilevel;
-
-	vector<double>::iterator iter = find(vlevels_.begin(),vlevels_.end(),level     );
-	if ( iter == vlevels_.end() )
-		vlevels_.push_back(level);
+   // Create data matrix according to the input parameters
+   // Write matrix to the netcdf file
+   IndexesMap lmap = par->Indexes();
+   int k;
+
+   if ( verticalAxis_ == HOV_TIME ) //vertical time axis
+   {
+      // 'Expand' option: write previous values first
+      int pos=0;
+      this->ExpandFillValues(ncvar,pos);
+      IndexIterator ii;
+      for ( ii = lmap.begin(), k = 0; ii != lmap.end(); ii++, k++ )
+      {
+         IndexesInfo *lInfo = (*ii).second;
+         NcWriteValues (ncvar, lInfo, k+pos );
+      }
+   }
+   else    //vertical geo/height axis: transpose values
+   {
+      // Retrieve all values from the internal structure
+      int i,j=0;
+      int nrInd = lmap.size(); // or nrIndexes_ - nrIndexesIn_
+      vector <double> mat(nrInd * nrPoints_);
+      IndexIterator ii;
+      for ( ii = lmap.begin(); ii != lmap.end(); ii++ )
+      {
+         IndexesInfo *lInfo = (*ii).second;
+         for (i = 0; i < nrPoints_; i++ )
+            mat[j++] = lInfo->Values()[i];
+      }
+
+      // Write matrix data to the netcdf file
+      const char* key = ncvar->name();  //get variable name
+      vector <double> cp(nrIndexes_);
+      for (i = 0; i < nrPoints_; i++ )
+      {
+         // 'Expand' option: write previous values
+         if ( !this->ExpandFillValues(key,i,cp) )
+            return;
+
+         // Add values
+         k = nrIndexesIn_;
+         for (j = i; j < nrInd*nrPoints_; j+=nrPoints_ )
+            cp[k++] = mat[j];
+
+         // Update netcdf file
+         ncvar->setCurrent(i);
+         ncvar->put(cp,1,(long)nrIndexes_);
+      }
+   }
 }
 
-bool HovHeightToolkit::ComputeValues(MvField &field)
+void HovToolkit::NcWriteValues (MvNcVar *ncvar, IndexesInfo *lInfo, int pos )
 {
-	MvFieldExpander x(field);
-	hgtVal_ = field.integrate( y1_,x1_,y2_,x2_);
+   // Get values from the structure
+   vector <double> cp(nrPoints_);
+   for (int i = 0; i < nrPoints_; i++ )
+      cp[i] = lInfo->Values()[i];
 
-	return true;
+   // Write values to a netcdf file
+   ncvar->setCurrent(pos);
+   ncvar->put(cp,1,(long)nrPoints_);
 }
 
-bool HovHeightToolkit::NcGenerateData(MvRequest& data)
+ParamInfo* HovToolkit::GetParamInfo( const string& key )
 {
-	// Initialize/Allocate internal variables
-	if ( !InitAllocVariables(params_) ) return false;
-
-	// Check level list order
-	char order;
-	if ( heightDir_ == HOV_HEIGHTFOR ) 
-	{
-		// the diagram should show values starting from the
-		// lowest to the highest. However, in the internal matrix
-		// representation, which fits the diagram, the first 
-		// point/line is on the top left corner of the diagram.
-		// Therefore, the first point to be calculated should be
-		// the highest level
-		order = '>';
-          sort(vlevels_.begin(),vlevels_.end());
-	}
-	else
-	{
-		order = '<';
-          sort(vlevels_.rbegin(),vlevels_.rend());
-	}
-
-     for ( int i = 0; i < nrPoints_; i++)
-		gcoord1_[nrPoints_-1-i] = vlevels_[i];
-
-	// Sort data by level, expver and param
-     MvFieldSet fs(data);
-	MvFieldSetIterator iter(fs);
-	iter.rewind();
-	iter.sort("LEVELIST",order);
-	iter.sort("STEP");
-	iter.sort("TIME");
-	iter.sort("DATE");
-	iter.sort("EXPVER");
-	iter.sort("PARAM");
-
-	// Generate data
-	int currentGenerated = 0, lastNrGenerated = -1;
-	int ind=0;
-	string sfirst = "FIRSTFIELD";
-	string timeKey,keystr;
-	string lastTimeKey = sfirst;
-	string lastKey = sfirst;
-	MvField field, lastField;
-	ParamIterator paramIter;
-
-	while( field = iter() )
-	{
-		currentGenerated++;
-
-		// Create keys
-		MvRequest rq = field.getRequest();
-		GenerateKey(keystr,rq);
-		GenerateTimeKey(timeKey,rq);
-
-		// Compute data
-          if ( !ComputeValues(field) ) return false;
-
-		// Save computed value
-		xint_[ind++] = hgtVal_;
-
-		// Get all the computed level values for each time
-		if ( ind < nrPoints_ )
-		{
-			// Extra check
-			if ( lastTimeKey != timeKey && lastTimeKey != sfirst )
-			{
-                    marslog(LOG_EROR, "Input data not consistent. Probably number of levels is not the same for all time stamps");
-                    return false;
-			}
-			lastTimeKey = timeKey;
-			continue;
-		}
-
-		// Make sure the time stamps are the same
-		if ( lastTimeKey != timeKey)
-		{
-               marslog(LOG_EROR, "Input data not consistent. Probably number of levels is not the same for all time stamps");
-               return false;
-		}
-
-		// Save data in the ParamInfo structure
-		if ( ( paramIter = params_.find(keystr) ) == params_.end() )
-		{
-               marslog(LOG_EROR, "Internal wrong key: %s", keystr.c_str());
-               return false;
-		}
-		else 
-			(*paramIter).second->FillIndex(xint_,timeKey,nrPoints_);
-      
-		// Write out data, if it can be grouped together
-		if ( lastKey != keystr && lastKey != sfirst )
-		{
-			NcWriteData(params_,lastField,lastKey);
-			lastNrGenerated = currentGenerated;
-		}
-      
-		lastKey = keystr;
-		lastField = field;
-		lastTimeKey = sfirst;
-		ind = 0;
-	}
-
-	// Write out the data in the netcdf file
-	if ( lastNrGenerated <=  currentGenerated )
-	{
-		if ( ! NcWriteData(params_,lastField,lastKey) )
-		{
-               marslog(LOG_EROR, "Could not generate NETCDF data");
-               return false;
-		}
-	}
-	netcdf_->close();
-
-	return true;
-}
+   // Check if field is valid
+   ParamIterator ii = params_.find(key);
+   if ( ii == params_.end() )
+   {
+      //setError(1,"ERROR: Could not find the requested field (getParamInfo)");
+      marslog(LOG_EROR,"Could not find the requested field (getParamInfo)");
+      return 0;
+   }
 
-void HovHeightToolkit::NcAddType()
-{
-	netcdf_->addAttribute("TYPE","HEIGHT");
+   // Get parameter info
+   return (*ii).second;
 }
 
-void HovHeightToolkit::NcAddSecondAxis()
+MvRequest HovToolkit::GetAppView ( MvRequest& viewRequest )
 {
-     MvNcVar *gncvar;
-     gncvar = netcdf_->addVariable(GetSecondAxisName(),ncDouble,nrPoints_);
-
-	gncvar->addAttribute("MV_VERB","AUX");
-	gncvar->addAttribute("units","numbers");
+   // Check if the original view request has been already processed,
+   // e.g. it has been already replaced by the CartesianView
+   if ( (const char*)viewRequest("_ORIGINAL_REQUEST") )
+      return viewRequest("_ORIGINAL_REQUEST");
+   else
+     return viewRequest;
 }
 
-void HovHeightToolkit::NcAddTitle(MvNcVar *var, ParamInfo *par)
+bool HovToolkit::IsVisualise()
 {
-	char  title[512];
-	sprintf(title,"Hovmoeller of %s %s (%.1f%s/%.1f%s/%.1f%s/%.1f%s)",
-		par->ParamName().c_str(),par->ExpVerTitle().c_str(),
-		(y1_< 0) ? -y1_ : y1_, (y1_<0) ? "S" : "N",
-		(x1_< 0) ? -x1_ : x1_, (x1_<0) ? "W" : "E",
-	        (y2_< 0) ? -y2_ : y2_, (y2_<0) ? "S" : "N",
-		(x2_< 0) ? -x2_ : x2_, (x2_<0) ? "W" : "E" );
-
-	var->addAttribute("MV_TITLE",title);
-
-	return;
+   // If the output is not 'visualisation' related: actions
+   // "not visualise" or "prepare" (in certain cases), then
+   // send back the "netCDF" request
+    if ( actionMode_ != "visualise" &&
+        !(actionMode_ == "prepare" && procType_ == HOV_DATA_MODULE_DROPPED) &&
+        !(actionMode_ == "prepare" && procType_ == HOV_DATA_DROPPED) )
+      return false;
+   else
+      return true;
 }
-
-void HovHeightToolkit::NcAddAxes(MvNcVar *ncvar)
+bool HovToolkit::IsDataModule( const char* verb )
 {
-	SetAxes();
-	char* creq = request2string(timeAxis_);
-	ncvar->addAttribute("TIME_AXIS",creq);
-	creq = request2string(geoAxis_);
-	ncvar->addAttribute("GEO_AXIS",creq);
+   return (verb && (strcmp(verb,"LINE_HOVM")     == 0 ||
+                    strcmp(verb,"AREA_HOVM")     == 0 ||
+                    strcmp(verb,"VERTICAL_HOVM") == 0 ||
+                    strcmp(verb,"LINE_HOV" )     == 0 ||
+                    strcmp(verb,"AREA_HOV")      == 0 ||
+                    strcmp(verb,"HEIGHT_HOV")    == 0 ));
 }
 
-void HovHeightToolkit::SetSecondAxis()
+// Variable name in netCDF has some restrictions, e.g. can not
+// start with a non-alphabetic letter.
+string HovToolkit::getNetcdfVarname(string name)
 {
-       // Set orientation
-        geoAxis_("AXIS_ORIENTATION")  = (verticalAxis_ == HOV_GEO) ? "VERTICAL" : "HORIZONTAL";
+   // Netcdf only accepts variable name starting with a alphabetic letter
+   if ( !isalpha(name[0]) )
+   {
+      string newname = "a_" + name;
+      return newname;
+   }
 
-	// Set axis type
-     geoAxis_("AXIS_TICK_LABEL_TYPE") = "NUMBER";
-
-	// Set min/max values
-	double min = vlevels_[0];
-	double max = vlevels_[vlevels_.size()-1];
-
-	CheckAxis(min,max,geoDir_,geoAxis_);
-
-	return;
-}
-
-void HovHeightToolkit::CheckDataLevelType(MvField& field)
-{
-	// Verify if option HeightAxisType and input data are compatible
-	if ( field.isPressureLevel() && heightAxisType_ == HOV_PRESSURE )
-	{
-          marslog(LOG_INFO,"Warning: input parameter HEIGHT_AXIS_TYPE switched to AS_IN_DATA, since input data is in pressure levels");
-          heightAxisType_ = HOV_ASINDATA;
-	}
+   return name;
 }
 
-void HovHeightToolkit::CreateOutputRequest(MvRequest& out, const char* name)
+void HovToolkit::ExpandOpenNcFile()
 {
-	// Currently, the netcdf file contains only
-	// one parameter. Update this code for
-	// more than one parameter
-	ParamIterator ii = params_.begin();
-	ParamInfo *par   = (*ii).second;
-	const char* expver = par->ExpVer();
-	ostrstream oss;
-	oss << setfill( '0' )
-	    << setw( 1 ) << 'p'
-	    << setw( 3 ) << par->Parameter()
-	    << setw( 4 ) << 0
-	    << setw( 4 ) << ( expver ? expver : "_" )
-	    << ends;
-
-	// Create netcdf subrequest
-	MvRequest req("NETCDF");
-	req("PATH") = ncdfPath_.c_str();
-
-	// Create view subrequest
-	MvRequest viewReq("CARTESIANVIEW");
-	viewReq("X_AXIS_TYPE") = "date";
-	viewReq("Y_AXIS_TYPE") = "logarithmic";
-	viewReq("X_AUTOMATIC") = "on";
-	viewReq("Y_AUTOMATIC") = "on";
-	viewReq("MAP_PROJECTION") = "cartesian";
-
-	// Create output request
-     out.setVerb("NETCDF_XY_MATRIX");
-     out("NETCDF_DATA") = req;
-     out("NETCDF_Y_VARIABLE") = GetSecondAxisName();
-     out("NETCDF_X_VARIABLE") = "time";
-     out("NETCDF_VALUE_VARIABLE") = oss.str();
-     out("_VIEW") = "CARTESIANVIEW";
-     out("_VIEW_REQUEST") = viewReq;
-     out("_VERB") = "NETCDF_XY_MATRIX";
-     if ( name )
-          out("_NAME") = name;
-
-cout << "request OUT" << endl;
-out.print();
-
-     return;
-}
-
-//--------------------------------------------------------------
+   // Return if option is not Expand
+   if ( !expand_ )
+      return;
 
-AreaHovmoeller::AreaHovmoeller() : Hovmoeller("AREA_HOV")
-{
-//empty
-}
+   // Initialize the input netcdf file
+   if ( netcdfIn_ )
+      delete netcdfIn_;
 
-void AreaHovmoeller::serve (MvRequest& in, MvRequest& out)
-{
-     // Compute Hovmoeller diagram
-     if (!Compute(in,out))
-          setError(1, "Failed to generate Hovmoeller.");
-}
+   netcdfIn_ = new MvNetCDF();
+   netcdfIn_->init(netfnameIn_,'r');
 
-bool AreaHovmoeller::GetInputInfo(MvRequest& in)
-{
-     // Get common information from user interface
-     if ( !GetInputCommonInfo(in) ) return false;
-
-     // Get area
-	y1_ = in("AREA",0);
-	x1_ = in("AREA",1);
-	y2_ = in("AREA",2);
-	x2_ = in("AREA",3);
-
-	// Check if coordinates follow Mars rules (n/w/s/e)
-	if ( x1_ > x2_ )
-	{
-		double W = x1_;
-		x1_ = x2_;
-		x2_ = W;
-	}
-	if( y2_ > y1_ )
-	{
-		double W = y1_;
-		y1_ = y2_;
-		y2_ = W;
-	}
-
-     // Get direction
-     geoDir_ = ((const char*)in("AVERAGE_DIRECTION") && strcmp(in("AVERAGE_DIRECTION"),"NORTH_SOUTH" ) == 0 ) ? HOV_NS : HOV_EW;
-
-     // Get swap axes flag
-     swapAxes_ = ( (const char*)in("SWAP_AXES") && strcmp(in("SWAP_AXES"),"YES") == 0 ) ? true : false;
-
-	// Set axes orientation
-	if ( (swapAxes_ && geoDir_ == HOV_EW) || (!swapAxes_ && geoDir_ == HOV_NS) )
-		verticalAxis_ = HOV_TIME;
-	else
-		verticalAxis_ = HOV_GEO;
-
-     // Initialize Geo axis
-     in.getValue(geoAxis_,"GEO_AXIS");
-	if ( !in.countValues("GEO_AXIS") ) 
-		geoAxis_.setVerb ("PAXIS"); //axis not defined in the user interface
-
-	// Initialize x/y resolution
-	gridNS_= in("RESOLUTION");
-	gridEW_= in("RESOLUTION");
-
-	return true;
+   return;
 }
 
-int AreaHovmoeller::EvaluateNPoints()
+void HovToolkit::ExpandCloseNcFile()
 {
-     if ( y1_ > 90. || y1_ < -90. || y2_ > 90. || y2_ < -90.) return 0;
-
-	if ( geoDir_ == HOV_EW )
-	       nrPoints_ = (int)( fabs( (y1_-y2_)/gridNS_ ) ) + 1;
-	else
-	       nrPoints_ = (int)( fabs( (x2_-x1_)/gridEW_ ) ) + 1;
+   if ( netcdfIn_ )
+   {
+      delete netcdfIn_;
+      netcdfIn_ = 0;
+   }
 
-	return nrPoints_;
+   return;
 }
 
-//--------------------------------------------------------------
-
-LineHovmoeller::LineHovmoeller() : Hovmoeller("LINE_HOV")
+void HovToolkit::ExpandFillValues(MvNcVar *ncvar,int& pos)
 {
-//empty
-}
+   // Return if option is not Expand
+   if ( !expand_ )
+      return;
 
-void LineHovmoeller::serve (MvRequest& in, MvRequest& out)
-{
-	// Compute Hovmoeller diagram
-	if (!Compute(in,out))
-	{
-		setError(1, "Failed to generate Hovmoeller.");
-	}
+   // Copy values from the input netcdf file
+   vector<double> vals;
+   string key = ncvar->name();  //get variable name
+   MvNcVar *ncvarIn = netcdfIn_->getVariable(key.c_str());
+   long* edges = ncvarIn->edges();
+   ncvarIn->get(vals,edges);
+   ncvar->setCurrent(pos);
+   ncvar->put(vals,edges[0],edges[1]);
+   pos += edges[0];
 
-	return;
+   return;
 }
 
-bool LineHovmoeller::GetInputInfo(MvRequest& in)
-{
-     // Get common information from user interface
-     if ( !GetInputCommonInfo(in) ) return false;
-
-        // Get line
-	y1_ = in("LINE",0);
-	x1_ = in("LINE",1);
-	y2_ = in("LINE",2);
-	x2_ = in("LINE",3);
-
-	// Check if coordinates follow Mars rules (n/w/s/e)
-	if ( x1_ > x2_ )
-	{
-		double W = x1_;
-		x1_ = x2_;
-		x2_ = W;
-	}
-	if( y2_ > y1_ )
-	{
-		double W = y1_;
-		y1_ = y2_;
-		y2_ = W;
-	}
-
-     // Get swap axes flag
-     swapAxes_ = ( (const char*)in("SWAP_AXES") && strcmp(in("SWAP_AXES"),"YES") == 0 ) ? true : false;
-
-     // Initialize Geo axis
-     in.getValue(geoAxis_,"GEO_AXIS");
-	if ( !in.countValues("GEO_AXIS") ) 
-		geoAxis_.setVerb ("PAXIS"); //axis not defined in the user interface
-
-	// Initialize Geo2 axis
-     in.getValue(geo2Axis_,"GEO2_AXIS");
-	if ( !in.countValues("GEO2_AXIS") ) 
-		geo2Axis_.setVerb ("PAXIS"); //axis not defined in the user interface
-
-	// Set axes orientation
-	verticalAxis_ = swapAxes_ ? HOV_GEO : HOV_TIME;
-
-	// Initialize x/y resolution
-	gridNS_= in("RESOLUTION");
-	gridEW_= in("RESOLUTION");
-
-	geoDir_ = -1;  // average direction not applied
-
-	return true;
-}
 
-int LineHovmoeller::EvaluateNPoints()
+bool HovToolkit::ExpandFillValues( const char* key, int pos, vector<double>& cp )
 {
-     if ( y1_ > 90. || y1_ < -90. || y2_ > 90. || y2_ < -90.) return 0;
-
-	double	dellat = ABS(y2_-y1_), dellon = ABS(x2_-x1_);
-	int i = int( sqrt( dellon*dellon + dellat*dellat )/MAX(gridNS_,gridEW_));
+   // Return if option is not Expand
+   if ( !expand_ )
+      return true;
 
-	nrPoints_ = MAX(i,64); //64->arbitrary minimum number of points
+   // Get values from the input netcdf file
+   vector<double> vals;
+   MvNcVar *ncvarIn = netcdfIn_->getVariable(key);
+   long* edges = ncvarIn->edges();
+   ncvarIn->setCurrent(pos);
+   ncvarIn->get(vals,1,edges[1]);
 
-	return nrPoints_;
-}
+   // Copy values
+   for (unsigned int i = 0; i < vals.size(); i++)
+      cp[i] = vals[i];
 
-//--------------------------------------------------------------
-
-HeightHovmoeller::HeightHovmoeller() : Hovmoeller("HEIGHT_HOV")
-{
-//empty
+   return true;
 }
 
-void HeightHovmoeller::serve (MvRequest& in, MvRequest& out)
+bool HovToolkit::ExpandGetTimeInfo()
 {
-     // Compute Hovmoeller diagram
-     if (!Compute(in,out))
-          setError(1, "Failed to generate Hovmoeller.");
-}
+   // Return if option is not Expand
+   if ( !expand_ )
+      return true;
 
-bool HeightHovmoeller::GetInputInfo(MvRequest& in)
-{
-     // Get common information from user interface
-     if ( !GetInputCommonInfo(in) ) return false;
-
-     // Get area
-	y1_ = in("AREA",0);
-	x1_ = in("AREA",1);
-	y2_ = in("AREA",2);
-	x2_ = in("AREA",3);
-
-	// Check if coordinates follow Mars rules (n/w/s/e)
-	if ( x1_ > x2_ )
-	{
-		double W = x1_;
-		x1_ = x2_;
-		x2_ = W;
-	}
-	if( y2_ > y1_ )
-	{
-		double W = y1_;
-		y1_ = y2_;
-		y2_ = W;
-	}
-
-	// Get height axis direction
-	heightDir_ = ( (const char*)in("HEIGHT_AXIS_DIRECTION") && strcmp(in("HEIGHT_AXIS_DIRECTION"),"FORWARD") == 0 ) ? HOV_HEIGHTFOR : HOV_HEIGHTBACK;
-
- 	// Get height axis type
-	heightAxisType_ = ( (const char*)in("HEIGHT_AXIS_TYPE") && strcmp(in("HEIGHT_AXIS_TYPE"),"PRESSURE") == 0 ) ? HOV_PRESSURE : HOV_ASINDATA;
-
-     // Initialize Height axis
-     in.getValue(geoAxis_,"HEIGHT_AXIS");
-	if ( !in.countValues("HEIGHT_AXIS") ) 
-		geoAxis_.setVerb ("PAXIS"); //axis not defined in the user interface
-
-	// Set axes orientation
-	verticalAxis_ = HOV_GEO;
-	geoDir_ = -1;  // average direction not applied
-
-	// Initialize x/y resolution  ??? Do we need this ???
-	gridNS_= 1;   //in("RESOLUTION");
-	gridEW_= 1;   //in("RESOLUTION");
-
-	return true;
-}
+   // Check input file
+   if ( !netcdfIn_ )
+   {
+      marslog(LOG_EROR, "Input NetCDF file not accessible");
+      return false;
+   }
 
-int HeightHovmoeller::EvaluateNPoints()
-{
-	nrPoints_ = vlevels_.size();
+   // Copy 'time' values from the input file
+   vector<double> vals;
+   MvNcVar *tvar = netcdfIn_->getVariable(HOV_VARTIME);
+   long *edges = tvar->edges();
+   nrIndexesIn_ = edges[0];
+   tvar->get(vals,edges);
+   for ( unsigned int i = 0; i < vals.size(); i++)
+      vtime_.push_back(vals[i]);
 
-	return nrPoints_;
+   return true;
 }
diff --git a/src/Hovmoeller/HovToolkit.h b/src/Hovmoeller/HovToolkit.h
index 9e59fcf..d565e73 100644
--- a/src/Hovmoeller/HovToolkit.h
+++ b/src/Hovmoeller/HovToolkit.h
@@ -10,293 +10,153 @@
 #ifndef HOVTOOLKIT_H
 #define HOVTOOLKIT_H
 
-#include "Metview.h"
 #include "Factory.h"
-#include "MvFieldSet.h"
-#include "MvDate.h"
 #include "MvHovmFrame.h"
-#include "Hovmoeller.h"
+#include "MvNetCDF.h"
 
-// Constants 
-enum { HOV_AREA, HOV_LINE, HOV_HEIGHT }; //application option: AREA,LINE or HEIGHT
-enum { HOV_NS, HOV_EW };                 //average direction: North-South or East-West
-enum { HOV_TIME, HOV_GEO };              //vertical axis: time or 'second' axis
-enum { HOV_TIMEFOR, HOV_TIMEBACK };      //time axis direction: Forward or Backward
-enum { HOV_HEIGHTFOR, HOV_HEIGHTBACK };  //height axis direction: Forward or Backward
-enum { HOV_AXISLONG, HOV_AXISLAT };      //axis type: latitude or longitude (used for title)
-enum { HOV_ASINDATA, HOV_PRESSURE };     //height axis type options
+enum { HOV_TIME, HOV_GEO };           //vertical axis: time or 'second' axis
+enum { HOV_NS, HOV_EW };              //average direction: North-South or East-West
+enum { HOV_ASINDATA, HOV_PRESSURE };  //height axis type options
 
-#define HOV_SP  1013.25                 // stardard pressure
+const string HOV_VARLEVEL   = "nlev";
+const string HOV_VARTIME    = "time";
+const string HOV_VARLAT     = "lat";
+const string HOV_VARLON     = "lon";
+const double HMISSING_VALUE = 1.0E22;
 
 class HovToolkit {
 
 public:
 
-	HovToolkit();
-	virtual ~HovToolkit();
-
-	// Release memory
-        void ReleaseMemory();
-
-	// Initialize common variables from user interface
-	bool GetInputCommonInfo(MvRequest& in);
-
-	// Initialize variables from user interface
-	virtual bool GetInputInfo(MvRequest&) { 
-		cout << "Should not be here" << endl;
-	        return false;
-	}
-
-	// Initialize variables from the netcdf file
-	virtual bool GetInputInfo(MvNetCDF*);
-
-	// Compute Hovmoeller diagram (main routine)
-	// Create a new netcdf file
-	virtual bool Compute(MvRequest&,MvRequest&);
-
-	// Compute Hovmoeller diagram (main routine)
-	// Used to expand a existing netcdf file
-	virtual bool Compute(string&,MvRequest&,string&);
-
-	// Compute diagram values
-	virtual bool ComputeValues(MvField&) = 0;
-
-	// Create output request
-	virtual void CreateOutputRequest(MvRequest&, const char*);
-
-	// Initialize Param Info structure
-	bool CreateParamInfo(MvRequest&);
-
-        // Create access keys
-	virtual void GenerateKey(string&, MvRequest&);
-	void GenerateTimeKey(string&, MvRequest&);
-
-	// Access time/date information
-	double GetRefTime() { return refTime_; }
-	void   SetRefTime( double ref ) { refTime_ = ref; }
-	MvDate GetDate(MvField& field);
-	double GetDateDif(string& timekey);
-
-	// Compute axes sizes - number of points/indexes(time values)
-	virtual int EvaluateNPoints() {
-		cout << "Should not be here" << endl;
-	        return 0;
-	}
-
-	int EvaluateNrIndexes() { return nrIndexes_ + nrIndexesIn_;}
-	int EvaluateNrIndexes( ParamMap& );
-
-	// Initialize initial variables and the netcdf file
-	bool InitAllocVariables(ParamMap& params);
-
-	// Functions to handle list of levels
-	virtual void InitializeLevelList (int) { }
-	virtual void UpdateLevelList (MvField&,double) { }
-	virtual void CheckDataLevelType(MvField&) { }
-
-	// Functions to handle the netcdf file
-	virtual bool NcGenerateData(MvRequest&);
-	bool NcAddCommonVariables(ParamMap&);
-	void NcAddCoords(MvNcVar* var=0);
-	void NcAddDirection(MvNcVar* var=0);
-	bool NcWriteData(ParamMap&, MvField&, const string& key);
-	void NcAddMetadata(MvNcVar*, ParamInfo*, const string&);
-	virtual void NcAddSecondAxis ();
-	virtual void NcAddType () {
-		cout << "Should not be here" << endl;
-	}
-	virtual void NcAddTitle(MvNcVar*, ParamInfo*) {
-		cout << "Should not be here" << endl;
-	}
-	virtual void NcAddAxes(MvNcVar*) {
-		cout << "Should not be here" << endl;
-	}
-
-	// Update output matrix of values
-	void NcFillValues(MvNcVar*, ParamInfo*);
-	void NcWriteValues (MvNcVar*, IndexesInfo*, int);
-
-	// Functions to handle the Expand option
-	void NcOpenPreviousFile();
-	void NcClosePreviousFile();
-	void NcFillPreviousValues(MvNcVar *ncvar, int&);
-	bool NcFillPreviousValues(MvNcVar *ncvar, int, vector<double>&, int);
-	bool NcFillPreviousTimeValues();
-	MvRequest GetVariableData(MvRequest&);
-	void InitializeAxes(MvRequest&);
-
-	// Functions to handle axes parameters
-	virtual const char* GetSecondAxisName() = 0;  // the first axis name is "time"
-     virtual const char* GetSecondAuxiliaryAxisName() = 0;
-     virtual bool SecondAuxiliaryAxis() = 0;
-	virtual void SetAxes();
-	virtual void SetTimeAxis();
-	virtual void SetSecondAxis() {
-		cout << "Should not be here" << endl;
-	}
-	void CheckAxis(double min, double max, int axisType, MvRequest&);
+   HovToolkit();
+   virtual ~HovToolkit();
+
+   // Release memory
+   void ReleaseAllMemory();
+   void ReleaseMemory();
+   void ReleaseMemoryParam();
+
+   // Initialise internal variables
+   bool GetInputParameters( MvRequest& );
+   virtual bool GetInputInfo(MvRequest&) = 0;
+   bool GetInputCommonInfo(MvRequest&);       //from user interface
+   virtual bool GetInputInfo(MvNetCDF*) = 0;
+   bool GetInputCommonInfo(MvNetCDF*);        //from the netcdf file
+
+   // Compute Hovmoeller diagram (main routine)
+   // Create a new netcdf file
+   virtual bool Compute(MvRequest&,MvRequest&);
+
+   // Compute Hovmoeller diagram (main routine)
+   // Expand a existing netcdf file
+   virtual bool Compute(string&,MvRequest&,string,MvRequest&);
+
+   // Handle creating variables, data and file
+   virtual bool ComputeValues(MvField&, int=0) = 0;
+   virtual bool GenerateData(MvRequest&);
+   virtual bool Initialiser();
+
+   // Create output request
+   virtual MvRequest CreateOutputRequest(const char* = 0);
+
+   // Initialize Param Info structure
+   bool CreateParamInfo(MvRequest&);
+
+   // Create access keys
+   virtual void GenerateKey(string&, MvRequest&);
+   void GenerateTimeKey(string&, MvRequest&);
+
+   // Access time/date information
+   double GetRefTime() { return refTime_; }
+   void   SetRefTime( double ref ) { refTime_ = ref; }
+   MvDate GetDate( MvField& );
+   double GetDateDif( string& );
+   bool   GetTimeInfo();
+   void   GetTimeInfoFromParam();
+
+   // Handle number of points of the second coordinates
+   int NPoints() { return nrPoints_; }
+   void NPoints( int size ) { nrPoints_ = size; }
+
+   // Handle number of indexes
+   int NrIndexes() { return nrIndexes_; }
+
+   // Functions to handle list of levels
+   virtual void InitializeLevelList () { }
+   virtual void UpdateLevelList (MvField&,double) { }
+
+   // Functions to handle the netcdf file
+   bool NcAddCommonVariables();
+   bool NcWriteData(MvField&, const string& key);
+   void NcAddMetadata(MvNcVar*, ParamInfo*);
+   string getNetcdfVarname(string); // Get netCDF variable name
+   virtual string GetTitle(ParamInfo*) = 0;
+   virtual const char* ApplicationType() = 0;
+   virtual void NcWriteGlobalAttributes();
+   virtual void NcWriteGlobalAttributesApp() = 0;
+   virtual bool NcWriteTimeInfo();
+   virtual bool NcWriteSecondCoord() = 0;
+
+   // Update output matrix of values
+   void NcFillValues(MvNcVar*, ParamInfo*);
+   void NcWriteValues (MvNcVar*, IndexesInfo*, int);
+
+   // Functions to handle the Expand option
+   void ExpandOpenNcFile();
+   void ExpandCloseNcFile();
+   void ExpandFillValues(MvNcVar*, int&);
+   bool ExpandFillValues(const char*, int, vector<double>&);
+   bool ExpandGetTimeInfo();
+
+   MvRequest GetVariableData(MvRequest&);
+   void InitializeAxes(MvRequest&);
+
+   // Functions to handle axes parameters
+   virtual const char* GetSecondCoordName() = 0;  // the first axis name is "time"
+   virtual const char* GetSecondAuxiliaryCoordName() { return " "; }
+   virtual bool SecondAuxiliaryCoord() = 0;
+   virtual bool ComputeSecondCoord() = 0;
+
+   // Functions to handle action mode
+   void ActionMode( string action ) { actionMode_ = action; }
+   string ActionMode() { return actionMode_; }
+   bool IsVisualise();
+   bool IsDataModule(const char*);
+
+   // Get Parameter info given the key
+   ParamInfo* GetParamInfo( const string& );
+
+   // Get application view
+   MvRequest GetAppView ( MvRequest& );
 
 protected:
 
-     // variables
-     double x1_, x2_, y1_, y2_;  // geographical coordinates
-	double gridNS_, gridEW_;    // grid interval
-	int verticalAxis_;          // Time axis or Geo axis
-	int timeDir_;               // Time direction (HOV_TIMEFOR or HOV_TIMEBACK)
-	int heightDir_;             // height direction (HOV_HEIGHTFOR or HOV_HEIGHTBACK)
-	int heightAxisType_;        // Flag to indicate the type of the height axis
-	int geoDir_;                // average direction: East-West or North-South
-	MvRequest dataRequest_;     // grib data
-	MvRequest timeAxis_;        // time axis
-	MvRequest geoAxis_;         // geographical/height axis
-	MvRequest geo2Axis_;        // geographical second axis
-	int nrPoints_;              // number of points of the second axis
-	int nrIndexes_;             // number of points of the time axis
-	int nrIndexesIn_;           // number of initial time points (Expand option)
-	string netfnameIn_;         // input Netcdf filename (Expand option)
-	double refTime_;            // reference Time value
-	double minTime_,maxTime_;   // min/max Time values
-	bool swapAxes_;             // swap default axes
-     bool secondAuxiliaryAxis_;  // flag to indicate if second auxiliary axis exists
-	MvNetCDF *netcdf_;          // Netcdf structure
-	MvNetCDF *netcdfIn_;        // Input Netcdf structure (Expand option)
-	string ncdfPath_;           // NetCDF file path
-
-     // auxiliary variables
-     ParamMap params_;           // structure holding computed values
-     double *gcoord1_;           // geographical coordinate values
-     double *gcoord2_;           // second geographical coordinate values
-     double *xint_;              // point values
-     vector<double> vtime_;      // time values
+   bool swapAxes_;                  // swap default axes
+   int procType_;                   // process type
+   int verticalAxis_;               // Time axis or Geo axis
+   int nrPoints_;                   // number of points of the second axis
+   int nrIndexes_;                  // number of points of the time axis
+   double x1_, x2_, y1_, y2_;       // geographical coordinates
+   double gridNS_, gridEW_;         // grid interval
+   double refTime_;                 // reference Time value
+   double dateMinD_,dateMaxD_;      // min/max date values
+   string ncdfPath_;                // netCDF file path
+   string actionMode_;              // "examine"/"save"/"execute"/...
+   MvNetCDF *netcdf_;               // netcdf structure
+   MvRequest dataRequest_;          // grib data
+
+   // Variables related to Param info and values
+   double* xint_;                   // point values
+   vector<double> coord1_;          // second coordinate values (lat/lng/level)
+   vector<double> coord2_;          // second coordinate values (lat/lng)
+   vector<double> vtime_;           // time values
+   ParamMap params_;                // structure holding computed values
+
+   // Variables related to the Expand option
+   bool expand_;                    // true: expand option
+   int nrIndexesIn_;                // number of initial time points
+   string netfnameIn_;              // input netcdf filename
+   MvNetCDF *netcdfIn_;             // Input netcdf structure
 };
 
-class HovLineToolkit : public HovToolkit
-{
-
-public:
-	// Common functions
-	void NcAddType();
-	void NcAddTitle(MvNcVar*, ParamInfo*);
-	void NcAddAxes(MvNcVar*);
-	const char* GetSecondAxisName() { return "longitude"; }
-     const char* GetSecondAuxiliaryAxisName() { return "latitude"; }
-     bool SecondAuxiliaryAxis() { return true; }
-	void SetSecondAxis();
-
-	// Calculate diagram values
-	bool ComputeValues(MvField&);
-};
-
-class HovAreaToolkit : public HovToolkit
-{
-
-public:
-	// Common functions
-	void NcAddType();
-	void NcAddTitle(MvNcVar*, ParamInfo*);
-	void NcAddAxes(MvNcVar*);
-     const char* GetSecondAxisName() { return "longitude"; }
-     const char* GetSecondAuxiliaryAxisName() { return "latitude"; }
-     bool SecondAuxiliaryAxis() { return true; }
-	void SetSecondAxis();
-
-	// Calculate diagram values
-	bool ComputeValues(MvField&);
-};
-
-class HovHeightToolkit : public HovToolkit
-{
-
-public:
-	// Common functions
-	bool NcGenerateData(MvRequest&);
-	void NcAddType();
-	void NcAddTitle(MvNcVar*, ParamInfo*);
-	void NcAddAxes(MvNcVar*);
-	void NcAddSecondAxis();
-	const char* GetSecondAxisName() { return "height"; }
-     const char* GetSecondAuxiliaryAxisName() { return " "; }
-     bool SecondAuxiliaryAxis() { return false; }
-	void SetSecondAxis();
-
-	// Functions to handle list of levels
-	void InitializeLevelList (int size);
-	void UpdateLevelList (MvField&,double);
-	void CheckDataLevelType(MvField& field);
-
-	// Calculate diagram values
-	bool ComputeValues(MvField&);
-
-	// Create output request
-	void CreateOutputRequest(MvRequest&, const char*);
-
-        // Create access keys
-	void GenerateKey(string&, MvRequest&);
-
-protected:
-
-	
-	double hgtVal_;            // Auxiliary value
-	vector<double> vlevels_;  // List of levels
-};
-
-class LineHovmoeller : public HovLineToolkit, public Hovmoeller
-{
-
-public:
-
-	LineHovmoeller();
-	~LineHovmoeller() {};
-
-	// Entry point
-	void serve (MvRequest& in, MvRequest& out);
-
-	// Initialize variables from user interface
-	bool GetInputInfo(MvRequest& in);
-
-	// Compute number of points
-	int EvaluateNPoints();
-};
-
-
-class AreaHovmoeller : public HovAreaToolkit, public Hovmoeller
-{
-
-public:
-        AreaHovmoeller();
-        ~AreaHovmoeller() {};
-
-	// Entry point
-	void serve (MvRequest& in, MvRequest& out);
-
-	// Initialize variables from user interface
-	bool GetInputInfo(MvRequest& in);
-
-	// Compute number of points
-	int EvaluateNPoints();
-};
-
-class HeightHovmoeller : public HovHeightToolkit, public Hovmoeller
-{
-
-public:
-
-        HeightHovmoeller();
-        ~HeightHovmoeller() {};
-
-	// Entry point
-	void serve(MvRequest&, MvRequest&);
-
-	// Initialize variables from user interface
-	bool GetInputInfo(MvRequest& in);
-
-	// Compute number of points
-	int EvaluateNPoints();
-};
-
-
-static SimpleObjectMaker <HovLineToolkit,HovToolkit> line ("LINE");
-static SimpleObjectMaker <HovAreaToolkit,HovToolkit> area ("AREA");
-static SimpleObjectMaker <HovHeightToolkit,HovToolkit> height ("HEIGHT");
-
 #endif
diff --git a/src/Hovmoeller/Hovmoeller.cc b/src/Hovmoeller/Hovmoeller.cc
index 63bda2f..cf69fe5 100644
--- a/src/Hovmoeller/Hovmoeller.cc
+++ b/src/Hovmoeller/Hovmoeller.cc
@@ -8,131 +8,38 @@
  ***************************** LICENSE END *************************************/
 
 #include "Hovmoeller.h"
-#include "MvHovmFrame.h"
-#include <inc_iostream.h> 
-
-#include <HovToolkit.h>
-
-Hovmoeller::Hovmoeller(const char* kw): MvService(kw)
-{
-//empty
-}
-
-ExpandHovmoeller::ExpandHovmoeller() : Hovmoeller("EXPAND_HOV")
-{
-//empty
-}
-
-void ExpandHovmoeller::serve(MvRequest& in,MvRequest& out)
-{
-cout << "Hovmoeller::serve in" << endl;
-in.print();
-
-	// Initialize object from the user interface
-        if ( !GetInputInfo(in) ) return;
-
-	// Instantiate the related HovToolkit
-	HovToolkit* hov = SimpleObjectMaker<HovToolkit>::create(hovTypeIn_.c_str());
-
-	// Compute the Hovmoeller diagram
-	string netfnameOut;
-	if ( !hov->Compute(netfnameIn_,dataRequestIn_,netfnameOut) ) return;
-
-	// Update output request
-	MvRequest cdfreq("NETCDF");
-	cdfreq("PATH") = netfnameOut.c_str();
-	out = out + cdfreq;
-	if ( (const char *)in("_NAME") )
-		out("_NAME") = in("_NAME");
-
-cout << "Hovmoeller::serve out" << endl;
-out.print();
-
-	return;
-}
-
-bool ExpandHovmoeller::GetInputInfo(MvRequest& in)
-{
-	// Get netcdf information from UI
-	if ( (const char*)in("NETCDF_PATH") && (strcmp((const char*)in("NETCDF_PATH"),"OFF") && strcmp((const char*)in("NETCDF_PATH"),"off")) )
-		netfnameIn_ = (const char*)in("NETCDF_PATH");
-	else
-	{
-		// Get information from the icon
-		MvRequest req;
-		in.getValue(req,"NETCDF_DATA");
-		if ( !in.countValues("NETCDF_DATA") || !req.countValues("PATH") ) {
-			setError(1, "No Netcdf Data files specified...");
-			return false;
-		}
-		netfnameIn_ = (const char*)req("PATH");
-	}
-
-        // Get fieldset information from UI
-	string str;
-	if ( (const char*)in("DATA_PATH")  && (strcmp((const char*)in("DATA_PATH"),"OFF") && strcmp((const char*)in("DATA_PATH"),"off"))  )
-	{
-		str = (const char*)in("DATA_PATH");
-		dataRequestIn_.setVerb("GRIB");
-		dataRequestIn_("PATH") = str.c_str();
-	}
-	else
-	{
-		// Get information from the icon
-		in.getValue(dataRequestIn_,"DATA");
-		if ( !in.countValues("DATA") || !dataRequestIn_.countValues("PATH") )
-		{
-			setError(1, "No Data files specified...");
-			return false;
-		}
-	}
-
-	// Extract information from the input netcdf file
-	// Open netcdf file
-	MvNetCDF* netcdfIn = new MvNetCDF();
-	netcdfIn->init(netfnameIn_,'r');
-	reqIn_ = netcdfIn->getRequest();
-
-        // Check netcdf file: attributes _VIEW and TYPE
-	MvNcAtt *tmpatt = netcdfIn->getAttribute("_VIEW");
-	if ( !tmpatt )
-	{
-		setError(1, "Netcdf file: missing attribute _VIEW");
-		delete netcdfIn;
-		return false;
-	}
-
-	tmpatt = netcdfIn->getAttribute("TYPE");
-	if ( tmpatt )
-	    hovTypeIn_ = tmpatt->as_string(0);
-	else
-	{
-	       setError(0,"Netcdf file: missing attribute TYPE");
-	       delete netcdfIn;
-	       return false;
-	}
-
-	delete netcdfIn;
-	return true;
-}
+#include "HovArea.h"
+#include "HovExpand.h"
+#include "HovHeight.h"
+#include "HovLine.h"
 
 //--------------------------------------------------------
 
 int main(int argc,char **argv)
 {
-	MvApplication theApp(argc,argv);
-	LineHovmoeller lhov;
-	AreaHovmoeller ahov;
-  	ExpandHovmoeller ehov;
-  	HeightHovmoeller hhov;
-
-	// The applications don't try to read or write from pool, this
-	// should not be done with the new PlotMod.
-	//a.addModeService("GRIB", "DATA");
-        lhov.saveToPool(false);
-        ahov.saveToPool(false);
-        ehov.saveToPool(false);
-        hhov.saveToPool(false);
-
-	theApp.run();
+   MvApplication theApp(argc,argv);
+
+   LineHovmoeller lhov;
+   AreaHovmoeller ahov;
+   ExpandHovmoeller ehov;
+   HeightHovmoeller hhov;
+
+   // The applications don't try to read or write from pool, this
+   // should not be done with the new PlotMod.
+   //a.addModeService("GRIB", "DATA");
+   lhov.saveToPool(false);
+   ahov.saveToPool(false);
+   ehov.saveToPool(false);
+   hhov.saveToPool(false);
+
+   // These are Metview 3 definitions used for backwards compatibility.
+   // Remove them later.
+   LineHovmoellerM3 lhovM3;
+   AreaHovmoellerM3 ahovM3;
+   HeightHovmoellerM3 hhovM3;
+   lhovM3.saveToPool(false);
+   ahovM3.saveToPool(false);
+   hhovM3.saveToPool(false);
+
+   theApp.run();
 }
diff --git a/src/Hovmoeller/Hovmoeller.h b/src/Hovmoeller/Hovmoeller.h
index 7a84c49..89624a4 100644
--- a/src/Hovmoeller/Hovmoeller.h
+++ b/src/Hovmoeller/Hovmoeller.h
@@ -10,7 +10,7 @@
 #ifndef HOVMOELLER_H
 #define HOVMOELLER_H
 
-/**************
+/*************************************************************
   Application for Hovmoeller (similar to XSection, Average).
   It takes a GRIB file as input (in addition to the values
   given by the user),  and produces an NetCDF
@@ -31,56 +31,23 @@
   names put together from the sorting values, and
   an attribute telling PlotMod how to show these
   data.
+***********************************************************/
 
-  This application needs to be revised after the new visualisation
-  module (DispMod) takes over PlotMod. Since Magics++ does not use the 
-  data matrix as a 'input_field_organization=fitted' (as in Magics), the 
-  application does not need to care about the organization of the matrix. 
-  The application should produce a netcdf file with a unique organization 
-  and the visualisation module should be in charge to plot it according 
-  to user input parameters.
-***************/
-
-#include "Metview.h"
-#include "MvFieldSet.h"
-#include "MvDate.h"
-#include "MvHovmFrame.h"
+#include "MvRequest.h"
+#include <MvProtocol.h>
+#include "MvService.h"
 
 class Hovmoeller : public MvService {
 
 public:
 
-	// Constructor
-	Hovmoeller(const char* kw);
-
-	// Destructor
-	virtual ~Hovmoeller() {};
-
-	virtual void serve(MvRequest&,MvRequest&) {
-		cout << "ERROR: should not be here" << endl; }
-};
-
-class ExpandHovmoeller : public Hovmoeller {
-
-public:
-
-	// Constructor/destructor
-	ExpandHovmoeller();
-	~ExpandHovmoeller() {};
-
-	// Main function
-	void serve(MvRequest&,MvRequest&);
-
-	// Initialize variables from user interface
-	bool GetInputInfo(MvRequest& in);
+   // Constructor
+   Hovmoeller(const char* kw): MvService(kw) {};
 
-private:
+   // Destructor
+   virtual ~Hovmoeller() {};
 
-	// Variables are related to the input netcdf file
-	string    hovTypeIn_;        // Hovmoeller type
-	string    netfnameIn_;       // Input Netcdf filename
-	MvRequest dataRequestIn_;    // grib data
-	MvRequest reqIn_;            // Copy of the input Netcdf structure
+   virtual void serve(MvRequest&,MvRequest&) { }
 };
 
 #endif
diff --git a/src/Hovmoeller/HovmoellerDataDef b/src/Hovmoeller/HovmoellerDataDef
index 728a978..a8c80e9 100644
--- a/src/Hovmoeller/HovmoellerDataDef
+++ b/src/Hovmoeller/HovmoellerDataDef
@@ -1,285 +1,297 @@
 HOVMOELLERDATA_FAMILY; APPLICATION
 {
-	APPLICATION
-	{
-		LINE_HOV
-		AREA_HOV
-		HEIGHT_HOV
-		EXPAND_HOV
-	} = LINE_HOV
+   APPLICATION
+   {
+      LINE_HOV
+      AREA_HOV
+      HEIGHT_HOV
+      EXPAND_HOV
+   } = LINE_HOV
 }
 
 #---------------------------------------------------------------------
 
 LINE_HOV; Hovmoeller Line Application
 {
-	LINE
-	[
-		help = help_input,
-		help_icon = 'help_line',
-		input_type = line,
-		input_window = '/Metview/Defaults/Input Window'
-	]
-	{
-		*
-		/
-	} = 0./-180./0./180.
-
-	DATA
-		[ interface = icon, class = GRIB, exclusive = false,
-		  help = help_data,
-		  help_directory  = '/Metview/Defaults',
-		  help_name       = Data for Hovmoeller,
-		  help_class      = RETRIEVE,
-		  help_definition = ( RETRIEVE,  TYPE = FORECAST,
-					 LEVELIST = 1000,
-					 PARAM = T, 
-					 STEP = 12/TO/36/BY/6,
-					 GRID = 1.5/1.5 )  ]
-	{ @ / }
-
-	TIME_AXIS_DIRECTION
-	{
-		FORWARD
-		BACKWARD
-	} = FORWARD
-
-	SWAP_AXES
-	{
-		NO
-		YES
-	} = NO
-
-	TIME_AXIS [visible = false, interface = icon, class = PAXIS, missing = ignored,
-		  help            = help_data,
-		  help_name       = Time Axis,
-		  help_directory  = '/Metview/Defaults',
-		  help_class      = PAXIS,
-		  help_definition = ( PAXIS,AXIS_TYPE=DATE )
-				]
-	{
-		@
-	}
-
-	GEO_AXIS [visible = false, interface = icon, class = PAXIS, missing = ignored,
-		  help            = help_data,
-		  help_name       = Geo Axis,
-		  help_directory  = '/Metview/Defaults',
-		  help_class      = PAXIS,
-		  help_definition = ( PAXIS,AXIS_ORIENTATION=VERTICAL,
-				      AXIS_TICK_LABEL_TYPE=LATITUDE )
-				]
-	{
-		@
-	}
-
-	GEO2_AXIS [visible = false, interface = icon, class = PAXIS, missing = ignored,
-		  help            = help_data,
-		  help_name       = Geo2 Axis,
-		  help_directory  = '/Metview/Defaults',
-		  help_class      = PAXIS,
-		  help_definition = ( PAXIS,AXIS_ORIENTATION=VERTICAL,
-				      AXIS_TICK_LABEL_TYPE=LONGITUDE )
-				]
-	{
-		@
-	}
-
-	RESOLUTION
-	{
-		*
-	} = 1.0
+   LINE
+      [
+         help         = help_input,
+         help_icon    = 'help_line',
+         input_type   = line,
+         input_window = '/System/Defaults/Input Window'
+      ]
+   {
+      *
+      /
+   } = 0./-180./0./180.
+
+   DATA
+      [
+         interface = icon, class = GRIB, exclusive = false,
+          help            = help_data,
+          help_directory  = '/System/Defaults',
+          help_name       = Data for Hovmoeller,
+          help_class      = RETRIEVE,
+          help_definition = ( RETRIEVE, TYPE = FORECAST, LEVELIST = 1000,
+                              PARAM = T, STEP = 12/TO/36/BY/6, GRID = 1.5/1.5 )
+      ]
+   { @ / }
+
+   TIME_AXIS_DIRECTION
+   {
+      FORWARD
+      BACKWARD
+   } = FORWARD
+
+   SWAP_AXES
+   {
+      NO
+      YES
+   } = NO
+
+   TIME_AXIS
+      [
+         interface = icon, class = MAXIS, missing = ignored,
+         help            = help_data,
+         help_name       = Time Axis,
+         help_directory  = '/System/Defaults',
+         help_class      = MAXIS,
+         help_definition = ( MAXIS, AXIS_TYPE = DATE )
+      ]
+   {
+      @
+   }
+
+   GEO_AXIS
+      [
+         interface = icon, class = MAXIS, missing = ignored,
+         help            = help_data,
+         help_name       = Geo Axis,
+         help_directory  = '/System/Defaults',
+         help_class      = MAXIS,
+         help_definition = ( MAXIS, AXIS_ORIENTATION = VERTICAL,
+                             AXIS_TICK_LABEL_TYPE = LATITUDE )
+      ]
+   {
+      @
+   }
+
+   GEO2_AXIS
+      [
+         interface = icon, class = MAXIS, missing = ignored,
+         help            = help_data,
+         help_name       = Geo2 Axis,
+         help_directory  = '/System/Defaults',
+         help_class      = MAXIS,
+         help_definition = ( MAXIS, AXIS_ORIENTATION = VERTICAL,
+                             AXIS_TICK_LABEL_TYPE = LONGITUDE )
+      ]
+   {
+      @
+   }
+
+   RESOLUTION
+   {
+      *
+   } = 1.0
 }
 
 #----------------------------------------------------------------------
 
 AREA_HOV; Hovmoeller AREA Application
 {
-	AREA
-        [
-                help = help_input,
-		help_icon = 'help_area',
-                input_type = area,
-                input_window = '/Metview/Defaults/Input Window'
-        ]
-	{
-		*
-		/
-	} = 30./-30./-30./30.
-
-	DATA
-		[ interface = icon, class = GRIB, exclusive = false,
-		  help = help_data,
-		  help_directory  = '/Metview/Defaults',
-		  help_name       = Data for Hovmoeller,
-		  help_class      = RETRIEVE,
-		  help_definition = ( RETRIEVE,  TYPE = FORECAST,
-					 LEVELIST = 1000,
-					 PARAM = T, 
-					 STEP = 12/TO/36/BY/6,
-					 GRID = 1.5/1.5 )  ]
-	{ @ / }
-
-	AVERAGE_DIRECTION
-	{
-		EAST_WEST
-		NORTH_SOUTH
-	} = EAST_WEST
-
-	TIME_AXIS_DIRECTION
-	{
-		FORWARD
-		BACKWARD
-	} = FORWARD
-
-	SWAP_AXES
-	{
-		NO
-		YES
-	} = NO
-
-	TIME_AXIS [visible = false, interface = icon, class = PAXIS, missing = ignored,
-		  help            = help_data,
-		  help_name       = Time Axis,
-		  help_directory  = '/Metview/Defaults',
-		  help_class      = PAXIS,
-		  help_definition = ( PAXIS,AXIS_TYPE=DATE )
-				]
-	{
-		@
-	}
-
-	GEO_AXIS [visible = false, interface = icon, class = PAXIS, missing = ignored,
-		  help            = help_data,
-		  help_name       = Geo Axis,
-		  help_directory  = '/Metview/Defaults',
-		  help_class      = PAXIS,
-		  help_definition = ( PAXIS,AXIS_ORIENTATION=VERTICAL )
-				]
-	{
-		@
-	}
-
-	RESOLUTION
-	{
-		*
-	} = 1.0
+   AREA
+      [
+         help         = help_input,
+         help_icon    = 'help_area',
+         input_type   = area,
+         input_window = '/System/Defaults/Input Window'
+      ]
+   {
+      *
+      /
+   } = 30./-30./-30./30.
+
+   DATA
+      [ interface = icon, class = GRIB, exclusive = false,
+        help            = help_data,
+        help_directory  = '/System/Defaults',
+        help_name       = Data for Hovmoeller,
+        help_class      = RETRIEVE,
+        help_definition = ( RETRIEVE, TYPE = FORECAST, LEVELIST = 1000,
+                            PARAM = T, STEP = 12/TO/36/BY/6, GRID = 1.5/1.5 )
+      ]
+   { @ / }
+
+   AVERAGE_DIRECTION
+   {
+      EAST_WEST
+      NORTH_SOUTH
+   } = EAST_WEST
+
+   TIME_AXIS_DIRECTION
+   {
+      FORWARD
+      BACKWARD
+   } = FORWARD
+
+   SWAP_AXES
+   {
+      NO
+      YES
+   } = NO
+
+   TIME_AXIS
+      [
+         interface = icon, class = MAXIS, missing = ignored,
+         help            = help_data,
+         help_name       = Time Axis,
+         help_directory  = '/System/Defaults',
+         help_class      = MAXIS,
+         help_definition = ( MAXIS, AXIS_TYPE = DATE )
+      ]
+   {
+      @
+   }
+
+   GEO_AXIS
+      [
+         interface = icon, class = MAXIS, missing = ignored,
+         help            = help_data,
+         help_name       = Geo Axis,
+         help_directory  = '/System/Defaults',
+         help_class      = MAXIS,
+         help_definition = ( MAXIS, AXIS_ORIENTATION = VERTICAL )
+      ]
+   {
+      @
+   }
+
+   RESOLUTION
+   {
+      *
+   } = 1.0
 }
 
 #----------------------------------------------------------------------
 
 EXPAND_HOV; Hovmoeller Expand Application
 {
-	NETCDF_PATH
-	{
-		OFF ; OFF
-		@
-	} = OFF
-
-	NETCDF_DATA
-		[ interface = icon, class = NETCDF, exclusive = false,
-		  help = help_data,
-		  help_directory  = '/Metview/Defaults',
-		  help_name       = Data ]
-	{ @ / }
-
-	DATA_PATH
-	{
-		OFF ; OFF
-		@
-	} = OFF
-
-	DATA
-		[ interface = icon, class = GRIB, exclusive = false,
-		  help = help_data,
-		  help_directory  = '/Metview/Defaults',
-		  help_name       = Data for Hovmoeller,
-		  help_class      = RETRIEVE,
-		  help_definition = ( RETRIEVE,  TYPE = FORECAST,
-					 LEVELIST = 1000,
-					 PARAM = T, 
-					 STEP = 12/TO/36/BY/6,
-					 GRID = 1.5/1.5 )  ]
-	{ @ / }
+   NETCDF_PATH
+   {
+      OFF ; OFF
+      @
+   } = OFF
+
+   NETCDF_DATA
+      [
+         interface = icon, class = NETCDF, exclusive = false,
+         help            = help_data,
+         help_directory  = '/System/Defaults',
+         help_name       = Data
+      ]
+   { @ / }
+
+   DATA_PATH
+   {
+      OFF ; OFF
+      @
+   } = OFF
+
+   DATA
+      [
+         interface = icon, class = GRIB, exclusive = false,
+         help = help_data,
+         help_directory  = '/System/Defaults',
+         help_name       = Data for Hovmoeller,
+         help_class      = RETRIEVE,
+         help_definition = ( RETRIEVE, TYPE = FORECAST, LEVELIST = 1000,
+                             PARAM = T, STEP = 12/TO/36/BY/6, GRID = 1.5/1.5 )
+      ]
+   { @ / }
 }
 
 #----------------------------------------------------------------------
 
 HEIGHT_HOV; Hovmoeller HEIGHT Application
 {
-	AREA
-        [
-                help = help_input,
-		help_icon = 'help_area',
-                input_type = area,
-                input_window = '/Metview/Defaults/Input Window'
+   AREA
+      [
+         help         = help_input,
+         help_icon    = 'help_area',
+         input_type   = area,
+         input_window = '/System/Defaults/Input Window'
         ]
-	{
-		*
-		/
-	} = 30./-30./-30./30.
-
-	DATA
-		[ interface = icon, class = GRIB, exclusive = false,
-		  help = help_data,
-		  help_directory  = '/Metview/Defaults',
-		  help_name       = Data for Hovmoeller,
-		  help_class      = RETRIEVE,
-		  help_definition = ( RETRIEVE,
-					 TYPE = FORECAST,
-					 PARAM = T, 
-					 STEP = 12/TO/36/BY/6,
-					 GRID = 1.5/1.5 )  ]
-	{ @ / }
-
-	TIME_AXIS_DIRECTION
-	{
-		FORWARD
-		BACKWARD
-	} = FORWARD
-
-	HEIGHT_AXIS_DIRECTION
-	{
-		FORWARD
-		BACKWARD
-	} = BACKWARD
-
-	HEIGHT_AXIS_TYPE [ visible = false ]
-	{
-		AS_IN_DATA
-		PRESSURE
-	} = AS_IN_DATA
-
-	SWAP_AXES [ visible = false ]
-	{
-		NO
-		YES
-	} = NO
-
-	TIME_AXIS [visible = false, interface = icon, class = PAXIS, missing = ignored,
-		  help            = help_data,
-		  help_name       = Time Axis,
-		  help_directory  = '/Metview/Defaults',
-		  help_class      = PAXIS,
-		  help_definition = ( PAXIS,AXIS_TYPE=DATE )
-				]
-	{
-		@
-	}
-
-	HEIGHT_AXIS [visible = false, interface = icon, class = PAXIS, missing = ignored,
-		  help            = help_data,
-		  help_name       = Height Axis,
-		  help_directory  = '/Metview/Defaults',
-		  help_class      = PAXIS,
-		  help_definition = ( PAXIS,AXIS_ORIENTATION=VERTICAL )
-				]
-	{
-		@
-	}
-
-	RESOLUTION [ visible = false ]
-	{
-		*
-	} = 1.0
+   {
+      *
+      /
+   } = 30./-30./-30./30.
+
+   DATA
+      [
+         interface = icon, class = GRIB, exclusive = false,
+         help = help_data,
+         help_directory  = '/System/Defaults',
+         help_name       = Data for Hovmoeller,
+         help_class      = RETRIEVE,
+         help_definition = ( RETRIEVE, TYPE = FORECAST, PARAM = T,
+                             STEP = 12/TO/36/BY/6, GRID = 1.5/1.5 )
+      ]
+   { @ / }
+
+   TIME_AXIS_DIRECTION
+   {
+      FORWARD
+      BACKWARD
+   } = FORWARD
+
+   HEIGHT_AXIS_DIRECTION
+   {
+      FORWARD
+      BACKWARD
+   } = BACKWARD
+
+   HEIGHT_AXIS_TYPE
+   {
+      AS_IN_DATA
+      PRESSURE
+   } = AS_IN_DATA
+
+   SWAP_AXES [ visible = false ]
+   {
+      NO
+      YES
+   } = NO
+
+   TIME_AXIS
+      [
+         interface = icon, class = MAXIS, missing = ignored,
+         help            = help_data,
+         help_name       = Time Axis,
+         help_directory  = '/System/Defaults',
+         help_class      = MAXIS,
+         help_definition = ( MAXIS, AXIS_TYPE = DATE )
+      ]
+   {
+      @
+   }
+
+   HEIGHT_AXIS
+      [
+         interface = icon, class = MAXIS, missing = ignored,
+         help            = help_data,
+         help_name       = Height Axis,
+         help_directory  = '/System/Defaults',
+         help_class      = MAXIS,
+         help_definition = ( MAXIS, AXIS_ORIENTATION = VERTICAL )
+      ]
+   {
+      @
+   }
+
+   RESOLUTION
+      [ visible = false ]
+   {
+      *
+   } = 1.0
 }
diff --git a/src/Hovmoeller/HovmoellerDataRules b/src/Hovmoeller/HovmoellerDataRules
new file mode 100644
index 0000000..e69de29
diff --git a/src/Hovmoeller/HovmoellerViewDef b/src/Hovmoeller/HovmoellerViewDef
new file mode 100644
index 0000000..7a45fe5
--- /dev/null
+++ b/src/Hovmoeller/HovmoellerViewDef
@@ -0,0 +1,27 @@
+HOVMOELLERVIEW; PlotMod Icon; Metview
+{
+%include OverlayControl
+
+   SUBPAGE_X_POSITION
+   {
+      @
+   } = 12
+
+   SUBPAGE_Y_POSITION
+   {
+      @
+   } = 10
+
+   SUBPAGE_X_LENGTH
+   {
+      @
+   } = 75
+
+   SUBPAGE_Y_LENGTH
+   {
+      @
+   } = 80
+
+   %include PageFrameDef
+   %include SubpageFrameDef
+}
diff --git a/src/Hovmoeller/HovmoellerViewRules b/src/Hovmoeller/HovmoellerViewRules
new file mode 100644
index 0000000..9c9f82f
--- /dev/null
+++ b/src/Hovmoeller/HovmoellerViewRules
@@ -0,0 +1,3 @@
+%include OverlayControlRules
+%include PageFrameRules
+%include SubpageFrameRules
diff --git a/share/metview/icons/HOVMOELLERDATA.xpm b/src/Hovmoeller/MHOVMOELLERDATA.xpm
old mode 100755
new mode 100644
similarity index 100%
copy from share/metview/icons/HOVMOELLERDATA.xpm
copy to src/Hovmoeller/MHOVMOELLERDATA.xpm
diff --git a/src/Hovmoeller/MHOVMOELLERVIEW.xpm b/src/Hovmoeller/MHOVMOELLERVIEW.xpm
new file mode 100644
index 0000000..f29675e
--- /dev/null
+++ b/src/Hovmoeller/MHOVMOELLERVIEW.xpm
@@ -0,0 +1,44 @@
+/* XPM */
+static char *test[]={
+"32 32 9 1",
+"e c #000000",
+"f c #007fff",
+". c #333333",
+"c c #777777",
+"a c #7e7e7e",
+"d c #ccccff",
+"g c #d9b777",
+"b c #ff00ff",
+"# c #ffffff",
+"................................",
+".##############################.",
+".#aaaaaaaaaaaaaaaaaaaaaaaaaaaa#.",
+".#a#bbbb#####################a#.",
+".#a###bbb####################a#.",
+".#a#####bbb##################a#.",
+".#a######bbbacccccccccc######a#.",
+".#a##ccccddbbbdddddddddcccc##a#.",
+".#accddddddddbbddddddddddddcca#.",
+".#adddddddddddbbddddddddddddda#.",
+".#addddddddddddbbdddddddddddda#.",
+".#addddddcccccccbbcccccdddddda#.",
+".#addccccddddddddbbddddccccdda#.",
+".#accdddddddddddddbbdddddddcca#.",
+".#addddddddddddddddbbdddddddda#.",
+".#adddddddddddddddddbbddddddda#.",
+".#addddddcccccccccccabcdddddda#.",
+".#addccccddddddddddddbbccccdda#.",
+".#accdddddddddddddddddbbdddcca#.",
+".#addddddddddddddddddddbbddbda#.",
+".#addddddddddddddddddddbbdbbda#.",
+".#addddddccccccccccccccbbbbbda#.",
+".#addccccdddddddddddddddbbbbda#.",
+".#accddddddddddddddddddbbbbbca#.",
+".#adddddddddddddddddddbbbbbbda#.",
+".#addddddddddddddddddbbbbbbbda#.",
+".#addddddeeeeeeeeeeeeeedddddda#.",
+".#addeeeeffffffggggggggeeeeeda#.",
+".#aeefffffffffgggggggggggggeea#.",
+".#aaaaaaaaaaaaaaaaaaaaaaaaaaaa#.",
+".##############################.",
+"................................"};
diff --git a/src/Hovmoeller/MHovmoellerDataDef b/src/Hovmoeller/MHovmoellerDataDef
new file mode 100644
index 0000000..8b13bc1
--- /dev/null
+++ b/src/Hovmoeller/MHovmoellerDataDef
@@ -0,0 +1,168 @@
+MHOVMOELLERDATA_FAMILY; APPLICATION
+{
+   APPLICATION
+   {
+      LINE_HOVM
+      AREA_HOVM
+      VERTICAL_HOVM
+      EXPAND_HOVM
+   } = LINE_HOVM
+}
+
+#---------------------------------------------------------------------
+
+LINE_HOVM; Hovmoeller Line Application
+{
+   LINE
+      [
+         help         = help_input,
+         help_icon    = 'help_line',
+         input_type   = line,
+         input_window = '/System/Defaults/Input Window'
+      ]
+   {
+      *
+      /
+   } = 0./-180./0./180.
+
+   DATA
+      [
+         interface = icon, class = GRIB, exclusive = false,
+          help            = help_data,
+          help_directory  = '/System/Defaults',
+          help_name       = Data for Hovmoeller,
+          help_class      = RETRIEVE,
+          help_definition = ( RETRIEVE, TYPE = FORECAST, LEVELIST = 1000,
+                              PARAM = T, STEP = 12/TO/36/BY/6, GRID = 1.5/1.5 )
+      ]
+   { @ / }
+
+   SWAP_AXES
+   {
+      NO
+      YES
+   } = NO
+
+   RESOLUTION
+   {
+      *
+   } = 1.0
+}
+
+#----------------------------------------------------------------------
+
+AREA_HOVM; Hovmoeller AREA Application
+{
+   AREA
+      [
+         help         = help_input,
+         help_icon    = 'help_area',
+         input_type   = area,
+         input_window = '/System/Defaults/Input Window'
+      ]
+   {
+      *
+      /
+   } = 30./-30./-30./30.
+
+   DATA
+      [ interface = icon, class = GRIB, exclusive = false,
+        help            = help_data,
+        help_directory  = '/System/Defaults',
+        help_name       = Data for Hovmoeller,
+        help_class      = RETRIEVE,
+        help_definition = ( RETRIEVE, TYPE = FORECAST, LEVELIST = 1000,
+                            PARAM = T, STEP = 12/TO/36/BY/6, GRID = 1.5/1.5 )
+      ]
+   { @ / }
+
+   AVERAGE_DIRECTION
+   {
+      EAST_WEST
+      NORTH_SOUTH
+   } = EAST_WEST
+
+   SWAP_AXES
+   {
+      NO
+      YES
+   } = NO
+
+   RESOLUTION
+   {
+      *
+   } = 1.0
+}
+
+#----------------------------------------------------------------------
+
+EXPAND_HOVM; Hovmoeller Expand Application
+{
+   NETCDF_PATH
+   {
+      OFF ; OFF
+      @
+   } = OFF
+
+   NETCDF_DATA
+      [
+         interface = icon, class = NETCDF, exclusive = false,
+         help            = help_data,
+         help_directory  = '/System/Defaults',
+         help_name       = Data
+      ]
+   { @ / }
+
+   DATA_PATH
+   {
+      OFF ; OFF
+      @
+   } = OFF
+
+   DATA
+      [
+         interface = icon, class = GRIB, exclusive = false,
+         help = help_data,
+         help_directory  = '/System/Defaults',
+         help_name       = Data for Hovmoeller,
+         help_class      = RETRIEVE,
+         help_definition = ( RETRIEVE, TYPE = FORECAST, LEVELIST = 1000,
+                             PARAM = T, STEP = 12/TO/36/BY/6, GRID = 1.5/1.5 )
+      ]
+   { @ / }
+}
+
+#----------------------------------------------------------------------
+
+VERTICAL_HOVM; Hovmoeller Vertical Application
+{
+   AREA
+      [
+         help         = help_input,
+         help_icon    = 'help_area',
+         input_type   = area,
+         input_window = '/System/Defaults/Input Window'
+        ]
+   {
+      *
+      /
+   } = 30./-30./-30./30.
+
+   DATA
+      [
+         interface = icon, class = GRIB, exclusive = false,
+         help = help_data,
+         help_directory  = '/System/Defaults',
+         help_name       = Data for Hovmoeller,
+         help_class      = RETRIEVE,
+         help_definition = ( RETRIEVE, TYPE = FORECAST, PARAM = T,
+                             STEP = 12/TO/36/BY/6, GRID = 1.5/1.5 )
+      ]
+   { @ / }
+
+   VERTICAL_LEVEL_TYPE
+   {
+      AS_IN_DATA
+      PRESSURE
+   } = AS_IN_DATA
+}
diff --git a/src/Hovmoeller/MHovmoellerViewDef b/src/Hovmoeller/MHovmoellerViewDef
new file mode 100644
index 0000000..419a92f
--- /dev/null
+++ b/src/Hovmoeller/MHovmoellerViewDef
@@ -0,0 +1,147 @@
+MHOVMOELLERVIEW; uPlot Icon; Metview
+{
+   TYPE
+   {
+      LINE_HOVM
+      AREA_HOVM
+      VERTICAL_HOVM
+   } = LINE_HOVM
+
+   LINE [
+          help         = help_input,
+          help_icon    = 'help_line',
+          input_type   = line,
+          input_window = '/System/Defaults/Input Window'
+        ]
+   {
+      *
+      /
+   } = 0./-180./0./180.
+
+   AREA [
+          help         = help_input,
+          help_icon    = 'help_area',
+          input_type   = area,
+          input_window = '/System/Defaults/Input Window'
+        ]
+   {
+      *
+      /
+   } = 30./-30./-30./30.
+
+   AVERAGE_DIRECTION
+   {
+      EAST_WEST
+      NORTH_SOUTH
+   } = EAST_WEST
+
+   DATE_MIN
+   {
+      AUTOMATIC
+      @
+   } = AUTOMATIC
+
+   DATE_MAX
+   {
+      AUTOMATIC
+      @
+   } = AUTOMATIC
+
+   BOTTOM_LEVEL
+   {
+       *
+   } = 1015.0
+
+   TOP_LEVEL
+   {
+       *
+   } = 0.01
+
+   SWAP_AXES
+   {
+      NO
+      YES
+   } = NO
+
+   RESOLUTION
+   {
+      *
+   } = 1.0
+
+   TIME_AXIS [
+               interface       = icon,
+               class           = MAXIS,
+               missing         = ignored,
+               help            = help_data,
+               help_name       = Time Axis,
+               help_directory  = '/System/Defaults',
+               help_class      = MAXIS,
+               help_definition = ( MAXIS, AXIS_TYPE=DATE )
+             ]
+   {
+      @
+   }
+
+   GEO_AXIS [
+              interface       = icon,
+              class           = MAXIS,
+              missing         = ignored,
+              help            = help_data,
+              help_name       = Geo Axis,
+              help_directory  = '/System/Defaults',
+              help_class      = MAXIS,
+              help_definition = ( MAXIS, AXIS_ORIENTATION=VERTICAL, AXIS_TICK_LABEL_TYPE=LATITUDE )
+            ]
+   {
+      @
+   }
+
+   VERTICAL_AXIS [
+                 interface       = icon,
+                 class           = MAXIS,
+                 missing         = ignored,
+                 help            = help_data,
+                 help_name       = Vertical Axis,
+                 help_directory  = '/System/Defaults',
+                 help_class      = MAXIS,
+                 help_definition = ( MAXIS, AXIS_ORIENTATION=VERTICAL )
+               ]
+   {
+      @
+   }
+
+   VERTICAL_LEVEL_TYPE
+   {
+      AS_IN_DATA
+      PRESSURE
+   } = AS_IN_DATA
+
+   VERTICAL_SCALING
+   {
+      LINEAR
+      LOG
+   } = LINEAR
+
+   SUBPAGE_X_POSITION
+   {
+      @
+   } = 12
+
+   SUBPAGE_Y_POSITION
+   {
+      @
+   } = 10
+
+   SUBPAGE_X_LENGTH
+   {
+      @
+   } = 75
+
+   SUBPAGE_Y_LENGTH
+   {
+      @
+   } = 80
+
+%include PageFrameDef
+%include SubpageFrameDef
+}
diff --git a/src/Hovmoeller/MHovmoellerViewRules b/src/Hovmoeller/MHovmoellerViewRules
new file mode 100644
index 0000000..5ddf7d0
--- /dev/null
+++ b/src/Hovmoeller/MHovmoellerViewRules
@@ -0,0 +1,26 @@
+%if TYPE = LINE_HOVM %then
+   %unset AREA
+   %unset AVERAGE_DIRECTION
+   %unset BOTTOM_LEVEL
+   %unset TOP_LEVEL
+   %unset VERTICAL_AXIS
+   %unset VERTICAL_LEVEL_TYPE
+   %unset VERTICAL_SCALING
+
+%if TYPE = AREA_HOVM %then
+   %unset LINE
+   %unset BOTTOM_LEVEL
+   %unset TOP_LEVEL
+   %unset VERTICAL_AXIS
+   %unset VERTICAL_LEVEL_TYPE
+   %unset VERTICAL_SCALING
+
+%if TYPE = VERTICAL_HOVM %then
+   %unset LINE
+   %unset GEO_AXIS
+   %unset AVERAGE_DIRECTION
+   %unset RESOLUTION
+   %unset SWAP_AXES
+
+%include PageFrameRules
+%include SubpageFrameRules
diff --git a/src/Hovmoeller/Makefile.am b/src/Hovmoeller/Makefile.am
index 07b9f4e..c42674c 100644
--- a/src/Hovmoeller/Makefile.am
+++ b/src/Hovmoeller/Makefile.am
@@ -1,14 +1,23 @@
 bin_PROGRAMS = bin/Hovmoeller
 
-bin_Hovmoeller_SOURCES  = MvHovmFrame.cc HovToolkit.cc Hovmoeller.cc HovToolkit.h Hovmoeller.h MvHovmFrame.h Factory.h
+bin_Hovmoeller_SOURCES  = Hovmoeller.cc HovArea.cc HovExpand.cc HovHeight.cc \
+                          HovLine.cc HovToolkit.cc MvHovmFrame.cc \
+                          Factory.h Hovmoeller.h HovArea.h HovExpand.h HovHeight.h HovLine.h HovToolkit.h MvHovmFrame.h
 bin_Hovmoeller_CPPFLAGS = $(METVIEW_NETCDF_FLAGS)
 bin_Hovmoeller_LDADD    = $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB) $(METVIEW_NETCDF_LIB)
+bin_Hovmoeller_DEPENDENCIES = ../../lib/libMetview.a
 
 sharedir       = $(datadir)/metview/etc
 local_sharedir = ../../share/metview/etc
 local_iconsdir = ../../share/metview/icons
 share_DATA     = $(local_sharedir)/ObjectSpec.Hovmoeller \
-		 $(local_sharedir)/HovmoellerDataDef
+		 $(local_sharedir)/MHovmoellerViewDef \
+		 $(local_sharedir)/MHovmoellerViewRules \
+		 $(local_sharedir)/MHovmoellerDataDef \
+		 $(local_sharedir)/HovmoellerViewDef \
+		 $(local_sharedir)/HovmoellerViewRules \
+		 $(local_sharedir)/HovmoellerDataDef \
+		 $(local_sharedir)/HovmoellerDataRules
 
 # to build the share data, we take the destination files and
 # remove their directory, e.g. $(local_sharedir)/DefFile becomes DefFile.
@@ -17,13 +26,21 @@ $(share_DATA): $(local_sharedir)/%: %
 	${INSTALL} $<  $(local_sharedir)
 
 icons:
+	${INSTALL} MHOVMOELLERDATA.xpm  $(local_iconsdir)
+	${INSTALL} MHOVMOELLERVIEW.xpm  $(local_iconsdir)
 	${INSTALL} HOVMOELLERDATA.xpm  $(local_iconsdir)
+	${INSTALL} HOVMOELLERVIEW.xpm  $(local_iconsdir)
 
-CLEANFILES = $(share_DATA) $(local_iconsdir)/HOVMOELLERDATA.xpm
+CLEANFILES = $(share_DATA) $(local_iconsdir)/MHOVMOELLERDATA.xpm $(local_iconsdir)/MHOVMOELLERVIEW.xpm \
+		$(local_iconsdir)/HOVMOELLERDATA.xpm $(local_iconsdir)/HOVMOELLERVIEW.xpm
 
 BUILT_SOURCES = bin icons
 
-EXTRA_DIST = Factory.cc HOVMOELLERDATA.xpm ObjectSpec.Hovmoeller HovmoellerDataDef
+EXTRA_DIST = Factory.cc ObjectSpec.Hovmoeller \
+	MHOVMOELLERDATA.xpm MHovmoellerDataDef \
+	MHOVMOELLERVIEW.xpm MHovmoellerViewDef MHovmoellerViewRules \
+	HOVMOELLERDATA.xpm HovmoellerDataDef HovmoellerDataRules \
+	HOVMOELLERVIEW.xpm HovmoellerViewDef HovmoellerViewRules
 
 bin:
 	ln -s ../../bin bin
diff --git a/src/Hovmoeller/Makefile.in b/src/Hovmoeller/Makefile.in
index 20e9f7d..d802d3d 100644
--- a/src/Hovmoeller/Makefile.in
+++ b/src/Hovmoeller/Makefile.in
@@ -50,13 +50,15 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sharedir)"
 PROGRAMS = $(bin_PROGRAMS)
-am_bin_Hovmoeller_OBJECTS = bin_Hovmoeller-MvHovmFrame.$(OBJEXT) \
+am_bin_Hovmoeller_OBJECTS = bin_Hovmoeller-Hovmoeller.$(OBJEXT) \
+	bin_Hovmoeller-HovArea.$(OBJEXT) \
+	bin_Hovmoeller-HovExpand.$(OBJEXT) \
+	bin_Hovmoeller-HovHeight.$(OBJEXT) \
+	bin_Hovmoeller-HovLine.$(OBJEXT) \
 	bin_Hovmoeller-HovToolkit.$(OBJEXT) \
-	bin_Hovmoeller-Hovmoeller.$(OBJEXT)
+	bin_Hovmoeller-MvHovmFrame.$(OBJEXT)
 bin_Hovmoeller_OBJECTS = $(am_bin_Hovmoeller_OBJECTS)
 am__DEPENDENCIES_1 =
-bin_Hovmoeller_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 AM_V_lt = $(am__v_lt_$(V))
 am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
 am__v_lt_0 = --silent
@@ -158,6 +160,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -173,6 +176,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -199,11 +204,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -331,18 +339,35 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-bin_Hovmoeller_SOURCES = MvHovmFrame.cc HovToolkit.cc Hovmoeller.cc HovToolkit.h Hovmoeller.h MvHovmFrame.h Factory.h
+bin_Hovmoeller_SOURCES = Hovmoeller.cc HovArea.cc HovExpand.cc HovHeight.cc \
+                          HovLine.cc HovToolkit.cc MvHovmFrame.cc \
+                          Factory.h Hovmoeller.h HovArea.h HovExpand.h HovHeight.h HovLine.h HovToolkit.h MvHovmFrame.h
+
 bin_Hovmoeller_CPPFLAGS = $(METVIEW_NETCDF_FLAGS)
 bin_Hovmoeller_LDADD = $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB) $(METVIEW_NETCDF_LIB)
+bin_Hovmoeller_DEPENDENCIES = ../../lib/libMetview.a
 sharedir = $(datadir)/metview/etc
 local_sharedir = ../../share/metview/etc
 local_iconsdir = ../../share/metview/icons
 share_DATA = $(local_sharedir)/ObjectSpec.Hovmoeller \
-		 $(local_sharedir)/HovmoellerDataDef
+		 $(local_sharedir)/MHovmoellerViewDef \
+		 $(local_sharedir)/MHovmoellerViewRules \
+		 $(local_sharedir)/MHovmoellerDataDef \
+		 $(local_sharedir)/HovmoellerViewDef \
+		 $(local_sharedir)/HovmoellerViewRules \
+		 $(local_sharedir)/HovmoellerDataDef \
+		 $(local_sharedir)/HovmoellerDataRules
+
+CLEANFILES = $(share_DATA) $(local_iconsdir)/MHOVMOELLERDATA.xpm $(local_iconsdir)/MHOVMOELLERVIEW.xpm \
+		$(local_iconsdir)/HOVMOELLERDATA.xpm $(local_iconsdir)/HOVMOELLERVIEW.xpm
 
-CLEANFILES = $(share_DATA) $(local_iconsdir)/HOVMOELLERDATA.xpm
 BUILT_SOURCES = bin icons
-EXTRA_DIST = Factory.cc HOVMOELLERDATA.xpm ObjectSpec.Hovmoeller HovmoellerDataDef
+EXTRA_DIST = Factory.cc ObjectSpec.Hovmoeller \
+	MHOVMOELLERDATA.xpm MHovmoellerDataDef \
+	MHOVMOELLERVIEW.xpm MHovmoellerViewDef MHovmoellerViewRules \
+	HOVMOELLERDATA.xpm HovmoellerDataDef HovmoellerDataRules \
+	HOVMOELLERVIEW.xpm HovmoellerViewDef HovmoellerViewRules
+
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
@@ -434,6 +459,10 @@ mostlyclean-compile:
 distclean-compile:
 	-rm -f *.tab.c
 
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Hovmoeller-HovArea.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Hovmoeller-HovExpand.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Hovmoeller-HovHeight.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Hovmoeller-HovLine.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Hovmoeller-HovToolkit.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Hovmoeller-Hovmoeller.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Hovmoeller-MvHovmFrame.Po at am__quote@
@@ -462,21 +491,85 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
 
-bin_Hovmoeller-MvHovmFrame.o: MvHovmFrame.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-MvHovmFrame.o -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-MvHovmFrame.Tpo -c -o bin_Hovmoeller-MvHovmFrame.o `test -f 'MvHovmFrame.cc' || echo '$(srcdir)/'`MvHovmFrame.cc
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-MvHovmFrame.Tpo $(DEPDIR)/bin_Hovmoeller-MvHovmFrame.Po
+bin_Hovmoeller-Hovmoeller.o: Hovmoeller.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-Hovmoeller.o -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-Hovmoeller.Tpo -c -o bin_Hovmoeller-Hovmoeller.o `test -f 'Hovmoeller.cc' || echo '$(srcdir)/'`Hovmoeller.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-Hovmoeller.Tpo $(DEPDIR)/bin_Hovmoeller-Hovmoeller.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvHovmFrame.cc' object='bin_Hovmoeller-MvHovmFrame.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Hovmoeller.cc' object='bin_Hovmoeller-Hovmoeller.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-MvHovmFrame.o `test -f 'MvHovmFrame.cc' || echo '$(srcdir)/'`MvHovmFrame.cc
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-Hovmoeller.o `test -f 'Hovmoeller.cc' || echo '$(srcdir)/'`Hovmoeller.cc
 
-bin_Hovmoeller-MvHovmFrame.obj: MvHovmFrame.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-MvHovmFrame.obj -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-MvHovmFrame.Tpo -c -o bin_Hovmoeller-MvHovmFrame.obj `if test -f 'MvHovmFrame.cc'; then $(CYGPATH_W) 'MvHovmFrame.cc'; else $(CYGPATH_W) '$(srcdir)/MvHovmFrame.cc'; fi`
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-MvHovmFrame.Tpo $(DEPDIR)/bin_Hovmoeller-MvHovmFrame.Po
+bin_Hovmoeller-Hovmoeller.obj: Hovmoeller.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-Hovmoeller.obj -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-Hovmoeller.Tpo -c -o bin_Hovmoeller-Hovmoeller.obj `if test -f 'Hovmoeller.cc'; then $(CYGPATH_W) 'Hovmoeller.cc'; else $(CYGPATH_W) '$(srcdir)/Hovmoeller.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-Hovmoeller.Tpo $(DEPDIR)/bin_Hovmoeller-Hovmoeller.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvHovmFrame.cc' object='bin_Hovmoeller-MvHovmFrame.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Hovmoeller.cc' object='bin_Hovmoeller-Hovmoeller.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-MvHovmFrame.obj `if test -f 'MvHovmFrame.cc'; then $(CYGPATH_W) 'MvHovmFrame.cc'; else $(CYGPATH_W) '$(srcdir)/MvHovmFrame.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-Hovmoeller.obj `if test -f 'Hovmoeller.cc'; then $(CYGPATH_W) 'Hovmoeller.cc'; else $(CYGPATH_W) '$(srcdir)/Hovmoeller.cc'; fi`
+
+bin_Hovmoeller-HovArea.o: HovArea.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-HovArea.o -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-HovArea.Tpo -c -o bin_Hovmoeller-HovArea.o `test -f 'HovArea.cc' || echo '$(srcdir)/'`HovArea.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-HovArea.Tpo $(DEPDIR)/bin_Hovmoeller-HovArea.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovArea.cc' object='bin_Hovmoeller-HovArea.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-HovArea.o `test -f 'HovArea.cc' || echo '$(srcdir)/'`HovArea.cc
+
+bin_Hovmoeller-HovArea.obj: HovArea.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-HovArea.obj -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-HovArea.Tpo -c -o bin_Hovmoeller-HovArea.obj `if test -f 'HovArea.cc'; then $(CYGPATH_W) 'HovArea.cc'; else $(CYGPATH_W) '$(srcdir)/HovArea.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-HovArea.Tpo $(DEPDIR)/bin_Hovmoeller-HovArea.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovArea.cc' object='bin_Hovmoeller-HovArea.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-HovArea.obj `if test -f 'HovArea.cc'; then $(CYGPATH_W) 'HovArea.cc'; else $(CYGPATH_W) '$(srcdir)/HovArea.cc'; fi`
+
+bin_Hovmoeller-HovExpand.o: HovExpand.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-HovExpand.o -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-HovExpand.Tpo -c -o bin_Hovmoeller-HovExpand.o `test -f 'HovExpand.cc' || echo '$(srcdir)/'`HovExpand.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-HovExpand.Tpo $(DEPDIR)/bin_Hovmoeller-HovExpand.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovExpand.cc' object='bin_Hovmoeller-HovExpand.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-HovExpand.o `test -f 'HovExpand.cc' || echo '$(srcdir)/'`HovExpand.cc
+
+bin_Hovmoeller-HovExpand.obj: HovExpand.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-HovExpand.obj -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-HovExpand.Tpo -c -o bin_Hovmoeller-HovExpand.obj `if test -f 'HovExpand.cc'; then $(CYGPATH_W) 'HovExpand.cc'; else $(CYGPATH_W) '$(srcdir)/HovExpand.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-HovExpand.Tpo $(DEPDIR)/bin_Hovmoeller-HovExpand.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovExpand.cc' object='bin_Hovmoeller-HovExpand.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-HovExpand.obj `if test -f 'HovExpand.cc'; then $(CYGPATH_W) 'HovExpand.cc'; else $(CYGPATH_W) '$(srcdir)/HovExpand.cc'; fi`
+
+bin_Hovmoeller-HovHeight.o: HovHeight.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-HovHeight.o -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-HovHeight.Tpo -c -o bin_Hovmoeller-HovHeight.o `test -f 'HovHeight.cc' || echo '$(srcdir)/'`HovHeight.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-HovHeight.Tpo $(DEPDIR)/bin_Hovmoeller-HovHeight.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovHeight.cc' object='bin_Hovmoeller-HovHeight.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-HovHeight.o `test -f 'HovHeight.cc' || echo '$(srcdir)/'`HovHeight.cc
+
+bin_Hovmoeller-HovHeight.obj: HovHeight.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-HovHeight.obj -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-HovHeight.Tpo -c -o bin_Hovmoeller-HovHeight.obj `if test -f 'HovHeight.cc'; then $(CYGPATH_W) 'HovHeight.cc'; else $(CYGPATH_W) '$(srcdir)/HovHeight.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-HovHeight.Tpo $(DEPDIR)/bin_Hovmoeller-HovHeight.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovHeight.cc' object='bin_Hovmoeller-HovHeight.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-HovHeight.obj `if test -f 'HovHeight.cc'; then $(CYGPATH_W) 'HovHeight.cc'; else $(CYGPATH_W) '$(srcdir)/HovHeight.cc'; fi`
+
+bin_Hovmoeller-HovLine.o: HovLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-HovLine.o -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-HovLine.Tpo -c -o bin_Hovmoeller-HovLine.o `test -f 'HovLine.cc' || echo '$(srcdir)/'`HovLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-HovLine.Tpo $(DEPDIR)/bin_Hovmoeller-HovLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovLine.cc' object='bin_Hovmoeller-HovLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-HovLine.o `test -f 'HovLine.cc' || echo '$(srcdir)/'`HovLine.cc
+
+bin_Hovmoeller-HovLine.obj: HovLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-HovLine.obj -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-HovLine.Tpo -c -o bin_Hovmoeller-HovLine.obj `if test -f 'HovLine.cc'; then $(CYGPATH_W) 'HovLine.cc'; else $(CYGPATH_W) '$(srcdir)/HovLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-HovLine.Tpo $(DEPDIR)/bin_Hovmoeller-HovLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovLine.cc' object='bin_Hovmoeller-HovLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-HovLine.obj `if test -f 'HovLine.cc'; then $(CYGPATH_W) 'HovLine.cc'; else $(CYGPATH_W) '$(srcdir)/HovLine.cc'; fi`
 
 bin_Hovmoeller-HovToolkit.o: HovToolkit.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-HovToolkit.o -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-HovToolkit.Tpo -c -o bin_Hovmoeller-HovToolkit.o `test -f 'HovToolkit.cc' || echo '$(srcdir)/'`HovToolkit.cc
@@ -494,21 +587,21 @@ bin_Hovmoeller-HovToolkit.obj: HovToolkit.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-HovToolkit.obj `if test -f 'HovToolkit.cc'; then $(CYGPATH_W) 'HovToolkit.cc'; else $(CYGPATH_W) '$(srcdir)/HovToolkit.cc'; fi`
 
-bin_Hovmoeller-Hovmoeller.o: Hovmoeller.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-Hovmoeller.o -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-Hovmoeller.Tpo -c -o bin_Hovmoeller-Hovmoeller.o `test -f 'Hovmoeller.cc' || echo '$(srcdir)/'`Hovmoeller.cc
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-Hovmoeller.Tpo $(DEPDIR)/bin_Hovmoeller-Hovmoeller.Po
+bin_Hovmoeller-MvHovmFrame.o: MvHovmFrame.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-MvHovmFrame.o -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-MvHovmFrame.Tpo -c -o bin_Hovmoeller-MvHovmFrame.o `test -f 'MvHovmFrame.cc' || echo '$(srcdir)/'`MvHovmFrame.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-MvHovmFrame.Tpo $(DEPDIR)/bin_Hovmoeller-MvHovmFrame.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Hovmoeller.cc' object='bin_Hovmoeller-Hovmoeller.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvHovmFrame.cc' object='bin_Hovmoeller-MvHovmFrame.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-Hovmoeller.o `test -f 'Hovmoeller.cc' || echo '$(srcdir)/'`Hovmoeller.cc
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-MvHovmFrame.o `test -f 'MvHovmFrame.cc' || echo '$(srcdir)/'`MvHovmFrame.cc
 
-bin_Hovmoeller-Hovmoeller.obj: Hovmoeller.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-Hovmoeller.obj -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-Hovmoeller.Tpo -c -o bin_Hovmoeller-Hovmoeller.obj `if test -f 'Hovmoeller.cc'; then $(CYGPATH_W) 'Hovmoeller.cc'; else $(CYGPATH_W) '$(srcdir)/Hovmoeller.cc'; fi`
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-Hovmoeller.Tpo $(DEPDIR)/bin_Hovmoeller-Hovmoeller.Po
+bin_Hovmoeller-MvHovmFrame.obj: MvHovmFrame.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Hovmoeller-MvHovmFrame.obj -MD -MP -MF $(DEPDIR)/bin_Hovmoeller-MvHovmFrame.Tpo -c -o bin_Hovmoeller-MvHovmFrame.obj `if test -f 'MvHovmFrame.cc'; then $(CYGPATH_W) 'MvHovmFrame.cc'; else $(CYGPATH_W) '$(srcdir)/MvHovmFrame.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_Hovmoeller-MvHovmFrame.Tpo $(DEPDIR)/bin_Hovmoeller-MvHovmFrame.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Hovmoeller.cc' object='bin_Hovmoeller-Hovmoeller.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvHovmFrame.cc' object='bin_Hovmoeller-MvHovmFrame.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-Hovmoeller.obj `if test -f 'Hovmoeller.cc'; then $(CYGPATH_W) 'Hovmoeller.cc'; else $(CYGPATH_W) '$(srcdir)/Hovmoeller.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Hovmoeller_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Hovmoeller-MvHovmFrame.obj `if test -f 'MvHovmFrame.cc'; then $(CYGPATH_W) 'MvHovmFrame.cc'; else $(CYGPATH_W) '$(srcdir)/MvHovmFrame.cc'; fi`
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -750,7 +843,10 @@ $(share_DATA): $(local_sharedir)/%: %
 	${INSTALL} $<  $(local_sharedir)
 
 icons:
+	${INSTALL} MHOVMOELLERDATA.xpm  $(local_iconsdir)
+	${INSTALL} MHOVMOELLERVIEW.xpm  $(local_iconsdir)
 	${INSTALL} HOVMOELLERDATA.xpm  $(local_iconsdir)
+	${INSTALL} HOVMOELLERVIEW.xpm  $(local_iconsdir)
 
 bin:
 	ln -s ../../bin bin
diff --git a/src/Hovmoeller/MvHovmFrame.cc b/src/Hovmoeller/MvHovmFrame.cc
index 45c3c81..8806b45 100644
--- a/src/Hovmoeller/MvHovmFrame.cc
+++ b/src/Hovmoeller/MvHovmFrame.cc
@@ -7,18 +7,18 @@
 
  ***************************** LICENSE END *************************************/
 
-#include <stdio.h>
 #include "MvHovmFrame.h"
 
-// ParamInfo constructor 1
-ParamInfo::ParamInfo(): param_(0),date_(0.),level_(0)
+// Constructors
+ParamInfo::ParamInfo(): param_(0), level_(0.), date_(0.), expver_("_"),
+                        paramName_(" "), paramLongName_(" "), units_(" ")
 {
 // empty
 }
 
-// ParamInfo constructor 2
-ParamInfo::ParamInfo(int i1,double i2,int i5,string& ev,string& pn) :
-                     param_(i1),date_(i2), level_(i5),expver_(ev),paramName_(pn)
+ParamInfo::ParamInfo( int i1, double i2, double i5, string ev, string pn, string pln, string un) :
+                     param_(i1), level_(i5), date_(i2), expver_(ev),
+                     paramName_(pn), paramLongName_(pln), units_(un)
 {
 // empty
 }
@@ -27,58 +27,63 @@ ParamInfo::ParamInfo(int i1,double i2,int i5,string& ev,string& pn) :
 // for the level data.
 ParamInfo::~ParamInfo()
 {
-	IndexIterator ii;
+   for ( IndexIterator ii = indexes_.begin(); ii != indexes_.end(); ii++ )
+   {
+      if ((*ii).second )
+         delete [] (*ii).second->values_;
+   }
+}
+
+string ParamInfo::LevelTitle()
+{
+   ostrstream oss;
+   oss << level_ << " hPa" << ends;
 
-	for ( ii = indexes_.begin();ii != indexes_.end(); ii++ )
-	{
-		if ((*ii).second ) 
-			delete [] (*ii).second->values_;
-	}
+   return oss.str();
 }
 
 string ParamInfo::ExpVerTitle()
 {
-	if( expver_ == "_" )      //-- missing ExpVer is stored as "_"
-		return string("");
-	else
-		return string( "Expver " ) + expver_;
+   if( expver_ == "_" )     //-- missing ExpVer is stored as "_"
+      return string("");
+   else
+      return string( "Expver " ) + expver_;
 }
 
 // Fill in data related to an index/entry in the IndexesMap. Generate
 // the values if needed, and delete any old values from the entry.
 void ParamInfo::FillIndex(double* x, const string& index, int n)
 {
-	// Save data for one entry
-	IndexIterator ii = indexes_.find(index);
-  
-	if ( ii == indexes_.end() )
-	{
-	        double ind = atof(index.substr(12,HOV_STEPSIZE).c_str());
-		indexes_[ index ] = new IndexesInfo( ind );
-		ii = indexes_.find(index);
-	}
-	else 
-	{
-		if ( (*ii).second->values_ )
-		{
-			delete [] (*ii).second->values_;
-			(*ii).second->values_ = 0;
-		}
-	}
-     
-	if (  (*ii).second->values_ == 0 ) 
-		(*ii).second->values_ = new double[n];
+   // Save data for one entry
+   IndexIterator ii = indexes_.find(index);
+   if ( ii == indexes_.end() )
+   {
+      double ind = atof(index.substr(12,HOV_STEPSIZE).c_str());
+      indexes_[ index ] = new IndexesInfo( ind );
+      ii = indexes_.find(index);
+   }
+   else
+   {
+      if ( (*ii).second->values_ )
+      {
+         delete [] (*ii).second->values_;
+         (*ii).second->values_ = 0;
+      }
+   }
+
+   if (  (*ii).second->values_ == 0 )
+      (*ii).second->values_ = new double[n];
 
-	double *xx = (*ii).second->values_;
-	for (int i = 0; i<n; i++)
-		xx[i] = x[i];
+   double *xx = (*ii).second->values_;
+   for (int i = 0; i<n; i++)
+      xx[i] = x[i];
 }
 
 void ParamInfo::AddIndex(string& index) 
 {
-	if ( indexes_.find(index) == indexes_.end() )
-	{
-	      double ind = atof(index.substr(12,HOV_STEPSIZE).c_str());
-	      indexes_[ index ] = new IndexesInfo(ind);
-	}
+   if ( indexes_.find(index) == indexes_.end() )
+   {
+      double ind = atof(index.substr(12,HOV_STEPSIZE).c_str());
+      indexes_[ index ] = new IndexesInfo(ind);
+   }
 }
diff --git a/src/Hovmoeller/MvHovmFrame.h b/src/Hovmoeller/MvHovmFrame.h
index a208a17..425e383 100644
--- a/src/Hovmoeller/MvHovmFrame.h
+++ b/src/Hovmoeller/MvHovmFrame.h
@@ -14,14 +14,7 @@
 #ifndef MVHOVMFRAME_H
 #define MVHOVMFRAME_H
 
-#include <math.h>
-
-#include <string.h>
-#include "inc_iostream.h"
-#include "inc_stl.h"
-
 #include "Metview.h"
-#include "MvNetCDF.h"
 #include "MvDate.h"
 
 #define HOV_STEPSIZE 6   // number of characters to represent parameter STEP
@@ -32,16 +25,17 @@ class IndexesInfo
 {
 public:
 
-	double* Values() { return values_; }
-	double  Index()  { return index_; }
+   double* Values() { return values_; }
+   double  Index()  { return index_; }
 
 private:
-	friend class ParamInfo;
 
-	IndexesInfo(double index) : values_(0), index_(index) {}
+   friend class ParamInfo;
+
+   IndexesInfo(double index) : values_(0), index_(index) {}
 
-	double *values_;
-	double index_;
+   double *values_;
+   double index_;
 };
 
 typedef map<string, IndexesInfo* > IndexesMap;
@@ -54,37 +48,45 @@ class ParamInfo
 {
 public:
 
-	ParamInfo();
-	ParamInfo(int p,double d,int l,string& ev,string& pn);
+   ParamInfo();
+   ParamInfo( int, double, double, string, string, string, string);
 
-        ~ParamInfo();
+   ~ParamInfo();
 
-	MvDate& Date()       { return date_;}
-	int Parameter()      { return param_; }
-	int Level()          { return level_; }
-	string ParamName()   { return paramName_; }
-        const char *ExpVer() { return expver_.c_str(); }
+   MvDate& Date()         { return date_;}
+   int Parameter()        { return param_; }
+   string ParamName()     { return paramName_; }
+   string ParamLongName() { return paramLongName_; }
+   string Units()         { return units_; }
 
-	string ExpVerTitle();
-	void ExpVer(const char *xx) { expver_ = xx; }
-	void FillIndex(double*, const string&, int);
-	IndexesMap& Indexes() { return indexes_; }
+   double Level() { return level_; }
+   string LevelTitle();
 
-	void AddIndex(string& index);
-	int NrIndexes() { return indexes_.size(); }
+   string ExpVer() { return expver_; }
+   string ExpVerTitle();
+   void ExpVer(const char *xx) { expver_ = xx; }
 
-	friend int operator<(const ParamInfo &p1, const ParamInfo &p2)
-	{
-		return ( p1.param_ < p2.param_ || p1.date_ < p2.date_ 
-	              || p1.level_ < p2.level_ );
-	}
+   void FillIndex(double*, const string&, int);
+   IndexesMap& Indexes() { return indexes_; }
+
+   void AddIndex(string& index);
+   int NrIndexes() { return indexes_.size(); }
+
+   friend int operator<(const ParamInfo &p1, const ParamInfo &p2)
+   {
+      return ( p1.param_ < p2.param_ || p1.date_ < p2.date_ || p1.level_ < p2.level_ );
+   }
 
 private:
-	int param_, level_;
-	MvDate date_;
-	string paramName_;
-	string expver_;
-	IndexesMap indexes_;
+
+   int param_;
+   double level_;
+   MvDate date_;
+   string expver_;
+   string paramName_;
+   string paramLongName_;
+   string units_;
+   IndexesMap indexes_;
 };
 
 typedef map<string,ParamInfo * > ParamMap;
diff --git a/src/Hovmoeller/ObjectSpec.Hovmoeller b/src/Hovmoeller/ObjectSpec.Hovmoeller
index 9ffc99e..dab5c06 100644
--- a/src/Hovmoeller/ObjectSpec.Hovmoeller
+++ b/src/Hovmoeller/ObjectSpec.Hovmoeller
@@ -1,13 +1,107 @@
+object,
+    class             = MHOVMOELLERDATA_FAMILY,
+    can_be_created    = True,
+    icon_box          = Data processing,
+    definition_file   = '$METVIEW_DIR_SHARE/etc/MHovmoellerDataDef',
+    default_name      = Hovmoeller Data,
+    help_page         = Hovmoeller_Data,
+    type              = Family,
+    expand            = 512, #expand default values
+    editor_type       = FamilyEditor,
+    pixmap            = '$METVIEW_DIR_SHARE/icons/MHOVMOELLERDATA.icon'
+
+object,
+    class             = LINE_HOVM,
+    can_be_created    = False,
+    definition_file   = '$METVIEW_DIR_SHARE/etc/MHovmoellerDataDef',
+    default_name      = Line Hovmoeller Data,
+    type              = Data,
+    expand            = 512, #expand default values
+    macro             = mhovmoeller_line,
+    editor_type       = SimpleEditor,
+    pixmap            = '$METVIEW_DIR_SHARE/icons/MHOVMOELLERDATA.icon'
+
+object,
+    class             = AREA_HOVM,
+    can_be_created    = False,
+    definition_file   = '$METVIEW_DIR_SHARE/etc/MHovmoellerDataDef',
+    default_name      = Area Hovmoeller Data,
+    type              = Data,
+    expand            = 512, #expand default values
+    macro             = mhovmoeller_area,
+    editor_type       = SimpleEditor,
+    pixmap            = '$METVIEW_DIR_SHARE/icons/MHOVMOELLERDATA.icon'
+
+object,
+    class             = EXPAND_HOVM,
+    can_be_created    = False,
+    definition_file   = '$METVIEW_DIR_SHARE/etc/MHovmoellerDataDef',
+    default_name      = Expand Hovmoeller Data,
+    type              = Data,
+    expand            = 512, #expand default values
+    macro             = mhovmoeller_expand,
+    editor_type       = SimpleEditor,
+    pixmap            = '$METVIEW_DIR_SHARE/icons/MHOVMOELLERDATA.icon'
+
+object,
+    class             = VERTICAL_HOVM,
+    can_be_created    = False,
+    definition_file   = '$METVIEW_DIR_SHARE/etc/MHovmoellerDataDef',
+    default_name      = Vertical Hovmoeller Data,
+    type              = Data,
+    expand            = 512, #expand default values
+    macro             = mhovmoeller_vertical,
+    editor_type       = SimpleEditor,
+    pixmap            = '$METVIEW_DIR_SHARE/icons/MHOVMOELLERDATA.icon'
+
+state,
+    class   = MHOVMOELLERDATA_FAMILY,
+    action  = visualise/hardcopy/prepare/drop,
+    service = Hovmoeller
+
+state,
+    class        = AREA_HOVM/LINE_HOVM/VERTICAL_HOVM/EXPAND_HOVM,
+    output_class = NETCDF,
+    service      = Hovmoeller
+
+service,
+    timeout  = $timeout,
+    name     = 'Hovmoeller',
+    fullname = Hovmoeller,
+    cmd      = "$metview_command $METVIEW_BIN/Hovmoeller"
+
+object,
+    class               = MHOVMOELLERVIEW,
+    can_be_created      = True,
+    icon_box            = Views,
+    definition_file     = '$METVIEW_DIR_SHARE/etc/MHovmoellerViewDef',
+    rules_file          = '$METVIEW_DIR_SHARE/etc/MHovmoellerViewRules',
+    default_name        = Hovmoeller View,
+    help_page           = Hovm_oslash_ller_View,
+    type                = View,
+    macro               = mhovmoellerview,
+    editor_type         = SimpleEditor,
+    pixmap              = '$METVIEW_DIR_SHARE/icons/MHOVMOELLERVIEW.icon',
+    expand              = 512, #expand default values
+    doubleclick_method  = Edit
+
+state,
+   class      = MHOVMOELLERVIEW,
+   action     = execute/visualise,
+   service    = uPlotManager
+
+# These are the Metview 3 icons (temporarily available for backwards compatibility)
 
 object,
     class             = HOVMOELLERDATA_FAMILY,
-    can_be_created    = True,
-    icon_box          = To be organised,
+    can_be_created    = FALSE,
+    icon_box          = Data processing,
     definition_file   = '$METVIEW_DIR_SHARE/etc/HovmoellerDataDef',
+    rules_file        = '$METVIEW_DIR_SHARE/etc/HovmoellerDataRules',
     default_name      = Hovmoeller Data,
     help_page         = Hovmoeller_Data,
     type              = Family,
-    expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
+    expand            = 512, #expand default values
     editor_type       = FamilyEditor,
     pixmap            = '$METVIEW_DIR_SHARE/icons/HOVMOELLERDATA.icon'
 
@@ -15,9 +109,10 @@ object,
     class             = LINE_HOV,
     can_be_created    = False,
     definition_file   = '$METVIEW_DIR_SHARE/etc/HovmoellerDataDef',
+    rules_file        = '$METVIEW_DIR_SHARE/etc/HovmoellerDataRules',
     default_name      = Line Hovmoeller Data,
     type              = Data,
-    expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
+    expand            = 512, #expand default values
     macro             = hovmoeller_line,
     editor_type       = SimpleEditor,
     pixmap            = '$METVIEW_DIR_SHARE/icons/HOVMOELLERDATA.icon'
@@ -26,9 +121,10 @@ object,
     class             = AREA_HOV,
     can_be_created    = False,
     definition_file   = '$METVIEW_DIR_SHARE/etc/HovmoellerDataDef',
+    rules_file        = '$METVIEW_DIR_SHARE/etc/HovmoellerDataRules',
     default_name      = Area Hovmoeller Data,
     type              = Data,
-    expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
+    expand            = 512, #expand default values
     macro             = hovmoeller_area,
     editor_type       = SimpleEditor,
     pixmap            = '$METVIEW_DIR_SHARE/icons/HOVMOELLERDATA.icon'
@@ -37,9 +133,10 @@ object,
     class             = EXPAND_HOV,
     can_be_created    = False,
     definition_file   = '$METVIEW_DIR_SHARE/etc/HovmoellerDataDef',
+    rules_file        = '$METVIEW_DIR_SHARE/etc/HovmoellerDataRules',
     default_name      = Expand Hovmoeller Data,
     type              = Data,
-    expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
+    expand            = 512, #expand default values
     macro             = hovmoeller_expand,
     editor_type       = SimpleEditor,
     pixmap            = '$METVIEW_DIR_SHARE/icons/HOVMOELLERDATA.icon'
@@ -48,9 +145,10 @@ object,
     class             = HEIGHT_HOV,
     can_be_created    = False,
     definition_file   = '$METVIEW_DIR_SHARE/etc/HovmoellerDataDef',
+    rules_file        = '$METVIEW_DIR_SHARE/etc/HovmoellerDataRules',
     default_name      = Height Hovmoeller Data,
     type              = Data,
-    expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
+    expand            = 512, #expand default values
     macro             = hovmoeller_height,
     editor_type       = SimpleEditor,
     pixmap            = '$METVIEW_DIR_SHARE/icons/HOVMOELLERDATA.icon'
@@ -61,28 +159,26 @@ state,
     service = Hovmoeller
 
 state,
-	class    = AREA_HOV,
-	output_class = NETCDF,
-        service  = Hovmoeller
-
-state,
-	class    = LINE_HOV,
-	output_class = NETCDF,
-        service  = Hovmoeller
+    class        = AREA_HOV/LINE_HOV/HEIGHT_HOV/EXPAND_HOV,
+    output_class = NETCDF,
+    service      = Hovmoeller
 
-state,
-	class    = EXPAND_HOV,
-	output_class = NETCDF,
-        service  = Hovmoeller
+object,
+    class               = HOVMOELLERVIEW,
+    can_be_created      = False,
+    icon_box            = Views,
+    definition_file     = '$METVIEW_DIR_SHARE/etc/HovmoellerViewDef',
+    rules_file          = '$METVIEW_DIR_SHARE/etc/HovmoellerViewRules',
+    default_name        = Hovmoeller View,
+    help_page           = Hovm_oslash_ller_View,
+    type                = View,
+    macro               = hovmoellerview,
+    editor_type         = SimpleEditor,
+    pixmap              = '$METVIEW_DIR_SHARE/icons/HOVMOELLERVIEW.icon',
+    expand              = 512, #expand default values
+    doubleclick_method  = Edit
 
 state,
-	class    = HEIGHT_HOV,
-	output_class = NETCDF,
-        service  = Hovmoeller
-
-service,
-	timeout  = $timeout,
-        name     = 'Hovmoeller',
-	fullname = Hovmoeller,
-        cmd      = "$metview_command $METVIEW_BIN/Hovmoeller"
-
+   class      = HOVMOELLERVIEW,
+   action     = execute/visualise,
+   service    = uPlotManager
diff --git a/src/KML/Makefile.in b/src/KML/Makefile.in
index ebc64b0..ab58512 100644
--- a/src/KML/Makefile.in
+++ b/src/KML/Makefile.in
@@ -139,6 +139,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -154,6 +155,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -180,11 +183,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/Macro/Makefile.am b/src/Macro/Makefile.am
index a5c3706..e0ccfed 100644
--- a/src/Macro/Makefile.am
+++ b/src/Macro/Makefile.am
@@ -1,5 +1,5 @@
 
-bin_PROGRAMS = bin/macro  bin/beautify  bin/perlaccess  bin/mvimport
+bin_PROGRAMS = bin/macro  bin/beautify  bin/perlaccess  bin/mvimport bin/mvimportDesktop
 
 
 AR=ar
@@ -10,7 +10,7 @@ SRCS_cc = \
     misc.cc number.cc stack.cc date.cc mstring.cc request.cc \
     Unix.cc grib.cc mlist.cc module.cc remote.cc function.cc \
     matrix.cc image.cc arith.cc extern.cc mvector.cc mtable.cc library.cc \
-    debug.cc bufr.cc compute.cc main.cc vismod.cc vis5d.cc \
+    debug.cc bufr.cc compute.cc main.cc vismod.cc \
     netcdf.cc object.cc pngjpeg.cc \
     mflextra.cc \
     beau.h include/arith.h include/cbufr.h include/cnetcdf.h include/codb.h include/ctable.h \
@@ -43,8 +43,8 @@ bin_perlaccess_LDADD    = $(STANDARD_METVIEW_LIBS)
 bin_mvimport_SOURCES  = mvimport.c
 bin_mvimport_LDADD    = $(STANDARD_METVIEW_LIBS_NO_UTIL) # C/C++ compilation issue otherwise
 
-
-
+bin_mvimportDesktop_SOURCES  = mvimportDesktop.c
+bin_mvimportDesktop_LDADD    = $(STANDARD_METVIEW_LIBS_NO_UTIL) # C/C++ compilation issue otherwise
 
 macroy.c : macrol.c
 macrol.c : macrol.l
diff --git a/src/Macro/Makefile.in b/src/Macro/Makefile.in
index 782ccc5..c253e69 100644
--- a/src/Macro/Makefile.in
+++ b/src/Macro/Makefile.in
@@ -36,7 +36,8 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 bin_PROGRAMS = bin/macro$(EXEEXT) bin/beautify$(EXEEXT) \
-	bin/perlaccess$(EXEEXT) bin/mvimport$(EXEEXT)
+	bin/perlaccess$(EXEEXT) bin/mvimport$(EXEEXT) \
+	bin/mvimportDesktop$(EXEEXT)
 @METVIEW_ODB_TRUE at am__append_1 = codb.cc
 @METVIEW_ODB_TRUE at am__append_2 = $(ODB_CPPFLAGS)
 @METVIEW_ODB_TRUE at am__append_3 = $(ODB_LDFLAGS)
@@ -68,8 +69,8 @@ am__bin_macro_SOURCES_DIST = macroy.y value.cc code.cc variable.cc \
 	date.cc mstring.cc request.cc Unix.cc grib.cc mlist.cc \
 	module.cc remote.cc function.cc matrix.cc image.cc arith.cc \
 	extern.cc mvector.cc mtable.cc library.cc debug.cc bufr.cc \
-	compute.cc main.cc vismod.cc vis5d.cc netcdf.cc object.cc \
-	pngjpeg.cc mflextra.cc beau.h include/arith.h include/cbufr.h \
+	compute.cc main.cc vismod.cc netcdf.cc object.cc pngjpeg.cc \
+	mflextra.cc beau.h include/arith.h include/cbufr.h \
 	include/cnetcdf.h include/codb.h include/ctable.h \
 	include/code.h include/cpngjpeg.h include/date.h \
 	include/macro.h include/node.h include/opcodes.h \
@@ -90,9 +91,8 @@ am__objects_2 = bin_macro-value.$(OBJEXT) bin_macro-code.$(OBJEXT) \
 	bin_macro-library.$(OBJEXT) bin_macro-debug.$(OBJEXT) \
 	bin_macro-bufr.$(OBJEXT) bin_macro-compute.$(OBJEXT) \
 	bin_macro-main.$(OBJEXT) bin_macro-vismod.$(OBJEXT) \
-	bin_macro-vis5d.$(OBJEXT) bin_macro-netcdf.$(OBJEXT) \
-	bin_macro-object.$(OBJEXT) bin_macro-pngjpeg.$(OBJEXT) \
-	bin_macro-mflextra.$(OBJEXT)
+	bin_macro-netcdf.$(OBJEXT) bin_macro-object.$(OBJEXT) \
+	bin_macro-pngjpeg.$(OBJEXT) bin_macro-mflextra.$(OBJEXT)
 @METVIEW_ODB_TRUE at am__objects_3 = bin_macro-codb.$(OBJEXT)
 am_bin_macro_OBJECTS = $(am__objects_1) $(am__objects_2) \
 	$(am__objects_3)
@@ -104,6 +104,9 @@ bin_macro_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
 am_bin_mvimport_OBJECTS = mvimport.$(OBJEXT)
 bin_mvimport_OBJECTS = $(am_bin_mvimport_OBJECTS)
 bin_mvimport_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_bin_mvimportDesktop_OBJECTS = mvimportDesktop.$(OBJEXT)
+bin_mvimportDesktop_OBJECTS = $(am_bin_mvimportDesktop_OBJECTS)
+bin_mvimportDesktop_DEPENDENCIES = $(am__DEPENDENCIES_1)
 am_bin_perlaccess_OBJECTS = perlaccess.$(OBJEXT)
 bin_perlaccess_OBJECTS = $(am_bin_perlaccess_OBJECTS)
 bin_perlaccess_DEPENDENCIES = $(am__DEPENDENCIES_1)
@@ -157,9 +160,11 @@ AM_V_GEN = $(am__v_GEN_$(V))
 am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
 am__v_GEN_0 = @echo "  GEN   " $@;
 SOURCES = $(bin_beautify_SOURCES) $(bin_macro_SOURCES) \
-	$(bin_mvimport_SOURCES) $(bin_perlaccess_SOURCES)
+	$(bin_mvimport_SOURCES) $(bin_mvimportDesktop_SOURCES) \
+	$(bin_perlaccess_SOURCES)
 DIST_SOURCES = $(bin_beautify_SOURCES) $(am__bin_macro_SOURCES_DIST) \
-	$(bin_mvimport_SOURCES) $(bin_perlaccess_SOURCES)
+	$(bin_mvimport_SOURCES) $(bin_mvimportDesktop_SOURCES) \
+	$(bin_perlaccess_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -191,6 +196,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -206,6 +212,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -232,11 +240,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -371,7 +382,7 @@ SRCS_cc = \
     misc.cc number.cc stack.cc date.cc mstring.cc request.cc \
     Unix.cc grib.cc mlist.cc module.cc remote.cc function.cc \
     matrix.cc image.cc arith.cc extern.cc mvector.cc mtable.cc library.cc \
-    debug.cc bufr.cc compute.cc main.cc vismod.cc vis5d.cc \
+    debug.cc bufr.cc compute.cc main.cc vismod.cc \
     netcdf.cc object.cc pngjpeg.cc \
     mflextra.cc \
     beau.h include/arith.h include/cbufr.h include/cnetcdf.h include/codb.h include/ctable.h \
@@ -391,6 +402,8 @@ bin_perlaccess_SOURCES = perlaccess.cc
 bin_perlaccess_LDADD = $(STANDARD_METVIEW_LIBS)
 bin_mvimport_SOURCES = mvimport.c
 bin_mvimport_LDADD = $(STANDARD_METVIEW_LIBS_NO_UTIL) # C/C++ compilation issue otherwise
+bin_mvimportDesktop_SOURCES = mvimportDesktop.c
+bin_mvimportDesktop_LDADD = $(STANDARD_METVIEW_LIBS_NO_UTIL) # C/C++ compilation issue otherwise
 
 # ensure we clean up all the lexical files
 CLEANFILES = lex.yy.c y.tab.c y.output y.tab.h \
@@ -488,6 +501,9 @@ bin/macro$(EXEEXT): $(bin_macro_OBJECTS) $(bin_macro_DEPENDENCIES) bin/$(am__dir
 bin/mvimport$(EXEEXT): $(bin_mvimport_OBJECTS) $(bin_mvimport_DEPENDENCIES) bin/$(am__dirstamp)
 	@rm -f bin/mvimport$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(bin_mvimport_OBJECTS) $(bin_mvimport_LDADD) $(LIBS)
+bin/mvimportDesktop$(EXEEXT): $(bin_mvimportDesktop_OBJECTS) $(bin_mvimportDesktop_DEPENDENCIES) bin/$(am__dirstamp)
+	@rm -f bin/mvimportDesktop$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bin_mvimportDesktop_OBJECTS) $(bin_mvimportDesktop_LDADD) $(LIBS)
 bin/perlaccess$(EXEEXT): $(bin_perlaccess_OBJECTS) $(bin_perlaccess_DEPENDENCIES) bin/$(am__dirstamp)
 	@rm -f bin/perlaccess$(EXEEXT)
 	$(AM_V_CXXLD)$(CXXLINK) $(bin_perlaccess_OBJECTS) $(bin_perlaccess_LDADD) $(LIBS)
@@ -535,9 +551,9 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_macro-stack.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_macro-value.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_macro-variable.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_macro-vis5d.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_macro-vismod.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mvimport.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mvimportDesktop.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/perlaccess.Po at am__quote@
 
 .c.o:
@@ -1084,22 +1100,6 @@ bin_macro-vismod.obj: vismod.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_macro_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_macro-vismod.obj `if test -f 'vismod.cc'; then $(CYGPATH_W) 'vismod.cc'; else $(CYGPATH_W) '$(srcdir)/vismod.cc'; fi`
 
-bin_macro-vis5d.o: vis5d.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_macro_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_macro-vis5d.o -MD -MP -MF $(DEPDIR)/bin_macro-vis5d.Tpo -c -o bin_macro-vis5d.o `test -f 'vis5d.cc' || echo '$(srcdir)/'`vis5d.cc
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_macro-vis5d.Tpo $(DEPDIR)/bin_macro-vis5d.Po
- at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='vis5d.cc' object='bin_macro-vis5d.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_macro_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_macro-vis5d.o `test -f 'vis5d.cc' || echo '$(srcdir)/'`vis5d.cc
-
-bin_macro-vis5d.obj: vis5d.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_macro_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_macro-vis5d.obj -MD -MP -MF $(DEPDIR)/bin_macro-vis5d.Tpo -c -o bin_macro-vis5d.obj `if test -f 'vis5d.cc'; then $(CYGPATH_W) 'vis5d.cc'; else $(CYGPATH_W) '$(srcdir)/vis5d.cc'; fi`
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_macro-vis5d.Tpo $(DEPDIR)/bin_macro-vis5d.Po
- at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='vis5d.cc' object='bin_macro-vis5d.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_macro_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_macro-vis5d.obj `if test -f 'vis5d.cc'; then $(CYGPATH_W) 'vis5d.cc'; else $(CYGPATH_W) '$(srcdir)/vis5d.cc'; fi`
-
 bin_macro-netcdf.o: netcdf.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_macro_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_macro-netcdf.o -MD -MP -MF $(DEPDIR)/bin_macro-netcdf.Tpo -c -o bin_macro-netcdf.o `test -f 'netcdf.cc' || echo '$(srcdir)/'`netcdf.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_macro-netcdf.Tpo $(DEPDIR)/bin_macro-netcdf.Po
diff --git a/src/Macro/beaul.c b/src/Macro/beaul.c
index e317369..c67446c 100644
--- a/src/Macro/beaul.c
+++ b/src/Macro/beaul.c
@@ -8,7 +8,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 33
+#define YY_FLEX_SUBMINOR_VERSION 35
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -30,7 +30,7 @@
 
 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
 
-#if __STDC_VERSION__ >= 199901L
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
 
 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
  * if you want the limit (max/min) macros for int types. 
@@ -93,11 +93,12 @@ typedef unsigned int flex_uint32_t;
 
 #else	/* ! __cplusplus */
 
-#if __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
 
 #define YY_USE_CONST
 
-#endif	/* __STDC__ */
+#endif	/* defined (__STDC__) */
 #endif	/* ! __cplusplus */
 
 #ifdef YY_USE_CONST
@@ -190,14 +191,9 @@ extern FILE *zzin, *zzout;
 
 #define unput(c) zzunput( c, (zztext_ptr)  )
 
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-
 #ifndef YY_TYPEDEF_YY_SIZE_T
 #define YY_TYPEDEF_YY_SIZE_T
-typedef unsigned int zz_size_t;
+typedef size_t zz_size_t;
 #endif
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -752,7 +748,7 @@ static void kword(char *p)
     keyword(buf);
 }
 
-#line 756 "lex.zz.c"
+#line 752 "lex.zz.c"
 
 #define INITIAL 0
 #define SOURCE 1
@@ -771,6 +767,35 @@ static void kword(char *p)
 
 static int zz_init_globals (void );
 
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int zzlex_destroy (void );
+
+int zzget_debug (void );
+
+void zzset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE zzget_extra (void );
+
+void zzset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *zzget_in (void );
+
+void zzset_in  (FILE * in_str  );
+
+FILE *zzget_out (void );
+
+void zzset_out  (FILE * out_str  );
+
+int zzget_leng (void );
+
+char *zzget_text (void );
+
+int zzget_lineno (void );
+
+void zzset_lineno (int line_number  );
+
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
  */
@@ -813,7 +838,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO (void) fwrite( zztext, zzleng, 1, zzout )
+#define ECHO fwrite( zztext, zzleng, 1, zzout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -824,7 +849,7 @@ static int input (void );
 	if ( YY_CURRENT_BUFFER_LVALUE->zz_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		int n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( zzin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -912,7 +937,7 @@ YY_DECL
 #line 96 "beaul.l"
 
 
-#line 916 "lex.zz.c"
+#line 941 "lex.zz.c"
 
 	if ( !(zz_init) )
 		{
@@ -925,6 +950,8 @@ YY_DECL
         /* Create the reject buffer large enough to save one state per allowed character. */
         if ( ! (zz_state_buf) )
             (zz_state_buf) = (zz_state_type *)zzalloc(YY_STATE_BUF_SIZE  );
+            if ( ! (zz_state_buf) )
+                YY_FATAL_ERROR( "out of dynamic memory in zzlex()" );
 
 		if ( ! (zz_start) )
 			(zz_start) = 1;	/* first start state */
@@ -1308,7 +1335,7 @@ YY_RULE_SETUP
 #line 175 "beaul.l"
 ECHO;
 	YY_BREAK
-#line 1312 "lex.zz.c"
+#line 1339 "lex.zz.c"
 			case YY_STATE_EOF(INITIAL):
 			case YY_STATE_EOF(SOURCE):
 				zzterminate();
@@ -1511,7 +1538,7 @@ static int zz_get_next_buffer (void)
 
 		/* Read in more data. */
 		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->zz_ch_buf[number_to_move]),
-			(zz_n_chars), num_to_read );
+			(zz_n_chars), (size_t) num_to_read );
 
 		YY_CURRENT_BUFFER_LVALUE->zz_n_chars = (zz_n_chars);
 		}
@@ -1535,6 +1562,14 @@ static int zz_get_next_buffer (void)
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
+	if ((zz_size_t) ((zz_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->zz_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		zz_size_t new_size = (zz_n_chars) + number_to_move + ((zz_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->zz_ch_buf = (char *) zzrealloc((void *) YY_CURRENT_BUFFER_LVALUE->zz_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->zz_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in zz_get_next_buffer()" );
+	}
+
 	(zz_n_chars) += number_to_move;
 	YY_CURRENT_BUFFER_LVALUE->zz_ch_buf[(zz_n_chars)] = YY_END_OF_BUFFER_CHAR;
 	YY_CURRENT_BUFFER_LVALUE->zz_ch_buf[(zz_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
@@ -1956,7 +1991,9 @@ static void zzensure_buffer_stack (void)
 		(zz_buffer_stack) = (struct zz_buffer_state**)zzalloc
 								(num_to_alloc * sizeof(struct zz_buffer_state*)
 								);
-		
+		if ( ! (zz_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in zzensure_buffer_stack()" );
+								  
 		memset((zz_buffer_stack), 0, num_to_alloc * sizeof(struct zz_buffer_state*));
 				
 		(zz_buffer_stack_max) = num_to_alloc;
@@ -1974,6 +2011,8 @@ static void zzensure_buffer_stack (void)
 								((zz_buffer_stack),
 								num_to_alloc * sizeof(struct zz_buffer_state*)
 								);
+		if ( ! (zz_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in zzensure_buffer_stack()" );
 
 		/* zero only the new slots.*/
 		memset((zz_buffer_stack) + (zz_buffer_stack_max), 0, grow_size * sizeof(struct zz_buffer_state*));
@@ -2018,7 +2057,7 @@ YY_BUFFER_STATE zz_scan_buffer  (char * base, zz_size_t  size )
 
 /** Setup the input buffer state to scan a string. The next call to zzlex() will
  * scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
+ * @param zzstr a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
diff --git a/src/Macro/beauy.c b/src/Macro/beauy.c
index 70c5596..4c8f55c 100644
--- a/src/Macro/beauy.c
+++ b/src/Macro/beauy.c
@@ -1,24 +1,23 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
 
-/* Skeleton implementation for Bison's Yacc-like parsers in C
+/* A Bison parser, made by GNU Bison 2.4.1.  */
 
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
    Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
+   
+   This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -29,7 +28,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-
+   
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -47,7 +46,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.3"
+#define YYBISON_VERSION "2.4.1"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -55,11 +54,49 @@
 /* Pure parsers.  */
 #define YYPURE 0
 
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
 /* Using locations.  */
 #define YYLSP_NEEDED 0
 
 
 
+/* Copy the first part of user declarations.  */
+
+/* Line 189 of yacc.c  */
+#line 10 "beauy.y"
+
+#include <stdlib.h>
+#include <stdio.h>
+extern void newline(int);
+
+
+/* Line 189 of yacc.c  */
+#line 80 "y.tab.c"
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
 /* Tokens.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
@@ -161,46 +198,19 @@
 
 
 
-/* Copy the first part of user declarations.  */
-#line 10 "beauy.y"
-
-#include <stdlib.h>
-#include <stdio.h>
-extern void newline(int);
-
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
 # define zzstype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 
-
 /* Copy the second part of user declarations.  */
 
 
-/* Line 216 of yacc.c.  */
-#line 204 "y.tab.c"
+/* Line 264 of yacc.c  */
+#line 214 "y.tab.c"
 
 #ifdef short
 # undef short
@@ -275,14 +285,14 @@ typedef short int zztype_int16;
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static int
-YYID (int i)
+YYID (int zzi)
 #else
 static int
-YYID (i)
-    int i;
+YYID (zzi)
+    int zzi;
 #endif
 {
-  return i;
+  return zzi;
 }
 #endif
 
@@ -363,9 +373,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
 /* A type that is properly aligned for any stack member.  */
 union zzalloc
 {
-  zztype_int16 zzss;
-  YYSTYPE zzvs;
-  };
+  zztype_int16 zzss_alloc;
+  YYSTYPE zzvs_alloc;
+};
 
 /* The size of the maximum gap between one aligned stack and the next.  */
 # define YYSTACK_GAP_MAXIMUM (sizeof (union zzalloc) - 1)
@@ -399,12 +409,12 @@ union zzalloc
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack)					\
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
     do									\
       {									\
 	YYSIZE_T zznewbytes;						\
-	YYCOPY (&zzptr->Stack, Stack, zzsize);				\
-	Stack = &zzptr->Stack;						\
+	YYCOPY (&zzptr->Stack_alloc, Stack, zzsize);			\
+	Stack = &zzptr->Stack_alloc;					\
 	zznewbytes = zzstacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
 	zzptr += zznewbytes / sizeof (*zzptr);				\
       }									\
@@ -606,17 +616,17 @@ static const char *const zztname[] =
   "line", "name", "declare", "extern", "extern_name", "import", "export",
   "include", "inline", "function", "beginfunction", "param_declare",
   "super_declare", "super_list", "super", "extern_param_declare",
-  "functionheader", "param_list", "param", "endfunction", "@1", "fname",
-  "statement", "return", "assignement", "control", "loop", "@2", "@3",
-  "tell", "@4", "@5", "when", "@6", "@7", "selections", "selection", "@8",
-  "case", "@9", "@10", "choices", "choice", "@11", "otherwise", "@12",
-  "repeat", "@13", "@14", "for", "@15", "by", "while", "@16", "@17", "if",
-  "@18", "closeif", "@19", "@20", "@21", "else", "rbra", "rket", "sbra",
-  "sket", "definition", "function_call", "inline_object", "param_or_empty",
-  "parameters", "parameter", "attribute", "attribute_list", "vector_list",
-  "matrix", "vector", "list", "number", "atom", "atom_or_number", "power",
-  "factor", "term", "condition", "operator", "conjonction", "disjonction",
-  "expression", "empty", 0
+  "functionheader", "param_list", "param", "endfunction", "$@1", "fname",
+  "statement", "return", "assignement", "control", "loop", "$@2", "$@3",
+  "tell", "$@4", "$@5", "when", "$@6", "$@7", "selections", "selection",
+  "$@8", "case", "$@9", "$@10", "choices", "choice", "$@11", "otherwise",
+  "$@12", "repeat", "$@13", "$@14", "for", "$@15", "by", "while", "$@16",
+  "$@17", "if", "$@18", "closeif", "$@19", "$@20", "$@21", "else", "rbra",
+  "rket", "sbra", "sket", "definition", "function_call", "inline_object",
+  "param_or_empty", "parameters", "parameter", "attribute",
+  "attribute_list", "vector_list", "matrix", "vector", "list", "number",
+  "atom", "atom_or_number", "power", "factor", "term", "condition",
+  "operator", "conjonction", "disjonction", "expression", "empty", 0
 };
 #endif
 
@@ -1151,17 +1161,20 @@ zz_symbol_print (zzoutput, zztype, zzvaluep)
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static void
-zz_stack_print (zztype_int16 *bottom, zztype_int16 *top)
+zz_stack_print (zztype_int16 *zzbottom, zztype_int16 *zztop)
 #else
 static void
-zz_stack_print (bottom, top)
-    zztype_int16 *bottom;
-    zztype_int16 *top;
+zz_stack_print (zzbottom, zztop)
+    zztype_int16 *zzbottom;
+    zztype_int16 *zztop;
 #endif
 {
   YYFPRINTF (stderr, "Stack now");
-  for (; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
+  for (; zzbottom <= zztop; zzbottom++)
+    {
+      int zzbot = *zzbottom;
+      YYFPRINTF (stderr, " %d", zzbot);
+    }
   YYFPRINTF (stderr, "\n");
 }
 
@@ -1195,11 +1208,11 @@ zz_reduce_print (zzvsp, zzrule)
   /* The symbols being reduced.  */
   for (zzi = 0; zzi < zznrhs; zzi++)
     {
-      fprintf (stderr, "   $%d = ", zzi + 1);
+      YYFPRINTF (stderr, "   $%d = ", zzi + 1);
       zz_symbol_print (stderr, zzrhs[zzprhs[zzrule] + zzi],
 		       &(zzvsp[(zzi + 1) - (zznrhs)])
 		       		       );
-      fprintf (stderr, "\n");
+      YYFPRINTF (stderr, "\n");
     }
 }
 
@@ -1479,10 +1492,8 @@ zzdestruct (zzmsg, zztype, zzvaluep)
 	break;
     }
 }
-

 
 /* Prevent warnings from -Wmissing-prototypes.  */
-
 #ifdef YYPARSE_PARAM
 #if defined __STDC__ || defined __cplusplus
 int zzparse (void *YYPARSE_PARAM);
@@ -1498,11 +1509,10 @@ int zzparse ();
 #endif /* ! YYPARSE_PARAM */
 
 
-
-/* The look-ahead symbol.  */
+/* The lookahead symbol.  */
 int zzchar;
 
-/* The semantic value of the look-ahead symbol.  */
+/* The semantic value of the lookahead symbol.  */
 YYSTYPE zzlval;
 
 /* Number of syntax errors so far.  */
@@ -1510,9 +1520,9 @@ int zznerrs;
 
 
 
-/*----------.
-| zzparse.  |
-`----------*/
+/*-------------------------.
+| zzparse or zzpush_parse.  |
+`-------------------------*/
 
 #ifdef YYPARSE_PARAM
 #if (defined __STDC__ || defined __C99__FUNC__ \
@@ -1536,66 +1546,68 @@ zzparse ()
 #endif
 #endif
 {
-  
-  int zzstate;
-  int zzn;
-  int zzresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int zzerrstatus;
-  /* Look-ahead token as an internal (translated) token number.  */
-  int zztoken = 0;
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char zzmsgbuf[128];
-  char *zzmsg = zzmsgbuf;
-  YYSIZE_T zzmsg_alloc = sizeof zzmsgbuf;
-#endif
-
-  /* Three stacks and their tools:
-     `zzss': related to states,
-     `zzvs': related to semantic values,
-     `zzls': related to locations.
 
-     Refer to the stacks thru separate pointers, to allow zzoverflow
-     to reallocate them elsewhere.  */
 
-  /* The state stack.  */
-  zztype_int16 zzssa[YYINITDEPTH];
-  zztype_int16 *zzss = zzssa;
-  zztype_int16 *zzssp;
+    int zzstate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int zzerrstatus;
 
-  /* The semantic value stack.  */
-  YYSTYPE zzvsa[YYINITDEPTH];
-  YYSTYPE *zzvs = zzvsa;
-  YYSTYPE *zzvsp;
+    /* The stacks and their tools:
+       `zzss': related to states.
+       `zzvs': related to semantic values.
 
+       Refer to the stacks thru separate pointers, to allow zzoverflow
+       to reallocate them elsewhere.  */
 
+    /* The state stack.  */
+    zztype_int16 zzssa[YYINITDEPTH];
+    zztype_int16 *zzss;
+    zztype_int16 *zzssp;
 
-#define YYPOPSTACK(N)   (zzvsp -= (N), zzssp -= (N))
+    /* The semantic value stack.  */
+    YYSTYPE zzvsa[YYINITDEPTH];
+    YYSTYPE *zzvs;
+    YYSTYPE *zzvsp;
 
-  YYSIZE_T zzstacksize = YYINITDEPTH;
+    YYSIZE_T zzstacksize;
 
+  int zzn;
+  int zzresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int zztoken;
   /* The variables used to return semantic value and location from the
      action routines.  */
   YYSTYPE zzval;
 
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char zzmsgbuf[128];
+  char *zzmsg = zzmsgbuf;
+  YYSIZE_T zzmsg_alloc = sizeof zzmsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (zzvsp -= (N), zzssp -= (N))
 
   /* The number of symbols on the RHS of the reduced rule.
      Keep to zero when no symbol should be popped.  */
   int zzlen = 0;
 
+  zztoken = 0;
+  zzss = zzssa;
+  zzvs = zzvsa;
+  zzstacksize = YYINITDEPTH;
+
   YYDPRINTF ((stderr, "Starting parse\n"));
 
   zzstate = 0;
   zzerrstatus = 0;
   zznerrs = 0;
-  zzchar = YYEMPTY;		/* Cause a token to be read.  */
+  zzchar = YYEMPTY; /* Cause a token to be read.  */
 
   /* Initialize stack pointers.
      Waste one element of value and location stack
      so that they stay on the same level as the state stack.
      The wasted elements are never initialized.  */
-
   zzssp = zzss;
   zzvsp = zzvs;
 
@@ -1625,7 +1637,6 @@ zzparse ()
 	YYSTYPE *zzvs1 = zzvs;
 	zztype_int16 *zzss1 = zzss;
 
-
 	/* Each stack pointer address is followed by the size of the
 	   data in use in that stack, in bytes.  This used to be a
 	   conditional around just the two extra args, but that might
@@ -1633,7 +1644,6 @@ zzparse ()
 	zzoverflow (YY_("memory exhausted"),
 		    &zzss1, zzsize * sizeof (*zzssp),
 		    &zzvs1, zzsize * sizeof (*zzvsp),
-
 		    &zzstacksize);
 
 	zzss = zzss1;
@@ -1656,9 +1666,8 @@ zzparse ()
 	  (union zzalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (zzstacksize));
 	if (! zzptr)
 	  goto zzexhaustedlab;
-	YYSTACK_RELOCATE (zzss);
-	YYSTACK_RELOCATE (zzvs);
-
+	YYSTACK_RELOCATE (zzss_alloc, zzss);
+	YYSTACK_RELOCATE (zzvs_alloc, zzvs);
 #  undef YYSTACK_RELOCATE
 	if (zzss1 != zzssa)
 	  YYSTACK_FREE (zzss1);
@@ -1669,7 +1678,6 @@ zzparse ()
       zzssp = zzss + zzsize - 1;
       zzvsp = zzvs + zzsize - 1;
 
-
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
 		  (unsigned long int) zzstacksize));
 
@@ -1679,6 +1687,9 @@ zzparse ()
 
   YYDPRINTF ((stderr, "Entering state %d\n", zzstate));
 
+  if (zzstate == YYFINAL)
+    YYACCEPT;
+
   goto zzbackup;
 
 /*-----------.
@@ -1687,16 +1698,16 @@ zzparse ()
 zzbackup:
 
   /* Do appropriate processing given the current state.  Read a
-     look-ahead token if we need one and don't already have one.  */
+     lookahead token if we need one and don't already have one.  */
 
-  /* First try to decide what to do without reference to look-ahead token.  */
+  /* First try to decide what to do without reference to lookahead token.  */
   zzn = zzpact[zzstate];
   if (zzn == YYPACT_NINF)
     goto zzdefault;
 
-  /* Not known => get a look-ahead token if don't already have one.  */
+  /* Not known => get a lookahead token if don't already have one.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
   if (zzchar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
@@ -1728,20 +1739,16 @@ zzbackup:
       goto zzreduce;
     }
 
-  if (zzn == YYFINAL)
-    YYACCEPT;
-
   /* Count tokens shifted since error; after three, turn off error
      status.  */
   if (zzerrstatus)
     zzerrstatus--;
 
-  /* Shift the look-ahead token.  */
+  /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", zztoken, &zzlval, &zzlloc);
 
-  /* Discard the shifted token unless it is eof.  */
-  if (zzchar != YYEOF)
-    zzchar = YYEMPTY;
+  /* Discard the shifted token.  */
+  zzchar = YYEMPTY;
 
   zzstate = zzn;
   *++zzvsp = zzlval;
@@ -1781,248 +1788,345 @@ zzreduce:
   switch (zzn)
     {
         case 2:
+
+/* Line 1455 of yacc.c  */
 #line 71 "beauy.y"
     { theend(); }
     break;
 
   case 7:
+
+/* Line 1455 of yacc.c  */
 #line 82 "beauy.y"
     { newline(0); }
     break;
 
   case 10:
+
+/* Line 1455 of yacc.c  */
 #line 85 "beauy.y"
     { newline(0); }
     break;
 
   case 11:
+
+/* Line 1455 of yacc.c  */
 #line 86 "beauy.y"
     { newline(1); }
     break;
 
   case 12:
+
+/* Line 1455 of yacc.c  */
 #line 87 "beauy.y"
     { newline(1); }
     break;
 
   case 13:
+
+/* Line 1455 of yacc.c  */
 #line 88 "beauy.y"
     { newline(1); }
     break;
 
   case 14:
+
+/* Line 1455 of yacc.c  */
 #line 89 "beauy.y"
     { newline(1); }
     break;
 
   case 30:
+
+/* Line 1455 of yacc.c  */
 #line 129 "beauy.y"
     { newline(0); tabs(1); }
     break;
 
   case 31:
+
+/* Line 1455 of yacc.c  */
 #line 130 "beauy.y"
     { newline(1); tabs(1); }
     break;
 
   case 32:
+
+/* Line 1455 of yacc.c  */
 #line 131 "beauy.y"
     { newline(1); tabs(1); }
     break;
 
   case 48:
+
+/* Line 1455 of yacc.c  */
 #line 163 "beauy.y"
     { tabs(-1); }
     break;
 
   case 49:
+
+/* Line 1455 of yacc.c  */
 #line 163 "beauy.y"
     { newline(1); }
     break;
 
   case 70:
+
+/* Line 1455 of yacc.c  */
 #line 204 "beauy.y"
     { newline(0); tabs(1);}
     break;
 
   case 71:
+
+/* Line 1455 of yacc.c  */
 #line 206 "beauy.y"
     { tabs(-1); }
     break;
 
   case 72:
+
+/* Line 1455 of yacc.c  */
 #line 206 "beauy.y"
     { newline(1);}
     break;
 
   case 73:
+
+/* Line 1455 of yacc.c  */
 #line 211 "beauy.y"
     { newline(0); tabs(1);}
     break;
 
   case 74:
+
+/* Line 1455 of yacc.c  */
 #line 213 "beauy.y"
     { tabs(-1); }
     break;
 
   case 75:
+
+/* Line 1455 of yacc.c  */
 #line 213 "beauy.y"
     { newline(1);}
     break;
 
   case 76:
+
+/* Line 1455 of yacc.c  */
 #line 218 "beauy.y"
     { newline(1); tabs(1);}
     break;
 
   case 77:
+
+/* Line 1455 of yacc.c  */
 #line 220 "beauy.y"
     {tabs(-1); }
     break;
 
   case 78:
+
+/* Line 1455 of yacc.c  */
 #line 220 "beauy.y"
     { newline(1);}
     break;
 
   case 81:
+
+/* Line 1455 of yacc.c  */
 #line 226 "beauy.y"
     { newline(1); tabs(1);}
     break;
 
   case 82:
+
+/* Line 1455 of yacc.c  */
 #line 227 "beauy.y"
     { newline(1); tabs(-1);}
     break;
 
   case 83:
+
+/* Line 1455 of yacc.c  */
 #line 231 "beauy.y"
     { newline(1); tabs(1);}
     break;
 
   case 84:
+
+/* Line 1455 of yacc.c  */
 #line 234 "beauy.y"
     { tabs(-1); }
     break;
 
   case 85:
+
+/* Line 1455 of yacc.c  */
 #line 234 "beauy.y"
     { newline(1);}
     break;
 
   case 88:
+
+/* Line 1455 of yacc.c  */
 #line 241 "beauy.y"
     { newline(1); tabs(1);}
     break;
 
   case 89:
+
+/* Line 1455 of yacc.c  */
 #line 242 "beauy.y"
     { newline(1); tabs(-1);}
     break;
 
   case 91:
+
+/* Line 1455 of yacc.c  */
 #line 246 "beauy.y"
     { newline(1); tabs(1);}
     break;
 
   case 92:
+
+/* Line 1455 of yacc.c  */
 #line 247 "beauy.y"
     { newline(1); tabs(-1);}
     break;
 
   case 93:
+
+/* Line 1455 of yacc.c  */
 #line 252 "beauy.y"
     { newline(1); tabs(1);}
     break;
 
   case 94:
+
+/* Line 1455 of yacc.c  */
 #line 254 "beauy.y"
     { tabs(-1); }
     break;
 
   case 95:
+
+/* Line 1455 of yacc.c  */
 #line 254 "beauy.y"
     { newline(0);}
     break;
 
   case 96:
+
+/* Line 1455 of yacc.c  */
 #line 260 "beauy.y"
     { newline(1);tabs(1);}
     break;
 
   case 97:
+
+/* Line 1455 of yacc.c  */
 #line 262 "beauy.y"
     {tabs(-1); newline(1); }
     break;
 
   case 100:
+
+/* Line 1455 of yacc.c  */
 #line 271 "beauy.y"
     { newline(1); tabs(1); }
     break;
 
   case 101:
+
+/* Line 1455 of yacc.c  */
 #line 273 "beauy.y"
     { tabs(-1); }
     break;
 
   case 102:
+
+/* Line 1455 of yacc.c  */
 #line 273 "beauy.y"
     { newline(1);}
     break;
 
   case 103:
+
+/* Line 1455 of yacc.c  */
 #line 278 "beauy.y"
     { newline(1); tabs(1); }
     break;
 
   case 105:
+
+/* Line 1455 of yacc.c  */
 #line 283 "beauy.y"
     { tabs(-1);}
     break;
 
   case 106:
+
+/* Line 1455 of yacc.c  */
 #line 283 "beauy.y"
     { newline(1);}
     break;
 
   case 107:
+
+/* Line 1455 of yacc.c  */
 #line 284 "beauy.y"
     { newline(0); tabs(1);}
     break;
 
   case 109:
+
+/* Line 1455 of yacc.c  */
 #line 285 "beauy.y"
     { newline(1); tabs(1); }
     break;
 
   case 111:
+
+/* Line 1455 of yacc.c  */
 #line 288 "beauy.y"
     { tabs(-1);}
     break;
 
   case 112:
+
+/* Line 1455 of yacc.c  */
 #line 291 "beauy.y"
     { bra(); }
     break;
 
   case 113:
+
+/* Line 1455 of yacc.c  */
 #line 294 "beauy.y"
     { ket(); }
     break;
 
   case 114:
+
+/* Line 1455 of yacc.c  */
 #line 297 "beauy.y"
     { bra(); }
     break;
 
   case 115:
+
+/* Line 1455 of yacc.c  */
 #line 300 "beauy.y"
     { ket(); }
     break;
 
 
-/* Line 1267 of yacc.c.  */
-#line 2026 "y.tab.c"
+
+/* Line 1455 of yacc.c  */
+#line 2130 "y.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", zzr1[zzn], &zzval, &zzloc);
@@ -2033,7 +2137,6 @@ zzreduce:
 
   *++zzvsp = zzval;
 
-
   /* Now `shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
@@ -2098,7 +2201,7 @@ zzerrlab:
 
   if (zzerrstatus == 3)
     {
-      /* If just tried and failed to reuse look-ahead token after an
+      /* If just tried and failed to reuse lookahead token after an
 	 error, discard it.  */
 
       if (zzchar <= YYEOF)
@@ -2115,7 +2218,7 @@ zzerrlab:
 	}
     }
 
-  /* Else will try to reuse look-ahead token after shifting the error
+  /* Else will try to reuse lookahead token after shifting the error
      token.  */
   goto zzerrlab1;
 
@@ -2172,9 +2275,6 @@ zzerrlab1:
       YY_STACK_PRINT (zzss, zzssp);
     }
 
-  if (zzn == YYFINAL)
-    YYACCEPT;
-
   *++zzvsp = zzlval;
 
 
@@ -2199,7 +2299,7 @@ zzabortlab:
   zzresult = 1;
   goto zzreturn;
 
-#ifndef zzoverflow
+#if !defined(zzoverflow) || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | zzexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -2210,7 +2310,7 @@ zzexhaustedlab:
 #endif
 
 zzreturn:
-  if (zzchar != YYEOF && zzchar != YYEMPTY)
+  if (zzchar != YYEMPTY)
      zzdestruct ("Cleanup: discarding lookahead",
 		 zztoken, &zzlval);
   /* Do not reclaim the symbols of the rule which action triggered
@@ -2236,6 +2336,8 @@ zzreturn:
 }
 
 
+
+/* Line 1675 of yacc.c  */
 #line 445 "beauy.y"
 
 #include "beaul.c"
diff --git a/src/Macro/codb.cc b/src/Macro/codb.cc
index 244ff28..624ea10 100644
--- a/src/Macro/codb.cc
+++ b/src/Macro/codb.cc
@@ -245,7 +245,16 @@ Value OdbValueFunction::Execute(int,Value *arg)
 			(*v)[i] = col->stringData().at(i).c_str();
 		}
 	}	
-
+	else if(col->type() == MvOdbColumn::Double)
+	{
+	    	CVector *v = new CVector(col->rowNum());  // vectors can only hold numbers
+        	c = v;
+		for(int i=0; i < col->rowNum(); i++)
+		{
+			(*v)[i] = col->doubleData().at(i);
+		}
+	}
+	
 	odb->unloadColumn(columnName);
 
 	return Value(c);
diff --git a/src/Macro/code.cc b/src/Macro/code.cc
index 64c94d2..f037dd2 100644
--- a/src/Macro/code.cc
+++ b/src/Macro/code.cc
@@ -218,7 +218,12 @@ void new_context(const char *name,int handler,int user,int oo)
 	if(handler)
 		Context::Current->AddHandler(f);
 	else
-		Context::Current->AddFunction(f);
+	{
+		if (user)  // user functions get priority over built-in functions
+			Context::Current->AddFunctionToFront(f);
+		else
+			Context::Current->AddFunction(f);
+	}
 
 	Context::Current = c;
 
diff --git a/src/Macro/files.cc b/src/Macro/files.cc
index 1075254..2674718 100644
--- a/src/Macro/files.cc
+++ b/src/Macro/files.cc
@@ -121,7 +121,6 @@ int Write1Function::ValidArguments(int arity,Value *arg)
 {
 	if(arity < 2) return false;
 	if(arg[0].GetType() != tstring) return false;
-	if(arg[0].GetType() == tvis5d) return false; // vis5d is a special case
 	return true;
 }
 
@@ -310,7 +309,7 @@ Value ReadFunction::Execute(int,Value *arg)
 	if( kind == "GEOPOINTS" )
 	  c = new CGeopts(p);
 
-	if( kind == "NETCDF" || kind == "SCM_INPUT_DATA" || kind == "SCM_OUTPUT_DATA")
+	if( kind == "NETCDF" || kind == "SCM_INPUT_DATA" || kind == "SCM_OUTPUT_DATA" || kind.substr(0,7) == "NETCDF_" )
 		c = new CNetCDF(p);
 
 	if( kind == "TABLE" )
diff --git a/src/Macro/grib.cc b/src/Macro/grib.cc
index 0905bec..7c22660 100644
--- a/src/Macro/grib.cc
+++ b/src/Macro/grib.cc
@@ -5242,7 +5242,7 @@ CGrib::CGrib(request *r) : InPool(tgrib,r), cube(0)
 {
 	fs = request_to_fieldset(r);
 
-	// Make sure all path are temporaty
+	// Make sure all path are temporary
 	while(r)
 	{
 		if(get_value(r,"PATH",0))
@@ -5269,9 +5269,9 @@ CGrib::CGrib(const char *fname) : InPool(tgrib), cube(0)
 	fs = read_fieldset(FullPathName(fname).c_str(),0);
 }
 
-CGrib::~CGrib()
-{
 
+void CGrib::DestroyContent()
+{
 	// Check if we have more that one ref
 
 	if(fs->refcnt>1) isIcon = true;
@@ -5288,6 +5288,11 @@ CGrib::~CGrib()
 
 }
 
+CGrib::~CGrib()
+{
+	DestroyContent();
+}
+
 
 void CGrib::ToRequest(request* &s)
 {
@@ -5332,15 +5337,30 @@ void CGrib::ToRequest(request* &s)
 
 			if (newPath)
 			{
-				if (!strcmp(oldPath, newPath))  // path has been unaltered?
+				if (strcmp(oldPath, newPath))  // path has been altered?
 				{
-					const char* ctemp = get_value(r,"TEMPORARY",0);
-					int itemp = atoi(ctemp);
-					if(itemp)
-					{
-						IsIcon(true); // InPool won't touch the data
-						SetFileTempFlag(true);
-					}
+					// yes - that means that this fieldset is the result of
+					// a merge, and we now have (courtesy of fieldset_to_request)
+					// a new temporary file which contains the actual
+					// merged fieldset. We will now free the 'old' fieldset
+					// and replace it with this new, merged one. This is for two
+					// reasons:  1) to ensure that the new temporary file is
+					// deleted (otherwise no CGrib will point to it, and it will
+					// not be cleaned up) and 2) so that we don't have to write out
+					// a new copy of this temporary merged file every time we pass the
+					// original merged fieldset to another module.
+
+					DestroyContent();
+					fs = request_to_fieldset(r);
+				}
+
+
+				const char* ctemp = get_value(r,"TEMPORARY",0);
+				int itemp = atoi(ctemp);
+				if(itemp)
+				{
+					IsIcon(true); // InPool won't touch the data
+					SetFileTempFlag(true);
 				}
 			}
 		}
diff --git a/src/Macro/include/macro.h b/src/Macro/include/macro.h
index 399c7e9..d33a936 100644
--- a/src/Macro/include/macro.h
+++ b/src/Macro/include/macro.h
@@ -99,7 +99,8 @@ public:
 //====================
 class Context : public Node{
 
-	void      AddNode(List &l,Node *n) { l.Append(n); n->SetOwner(this); };
+	void      AddNode(List &l,Node *n)    { l.Append(n); n->SetOwner(this); }; // append to end of list
+	void      InsertNode(List &l,Node *n) { l.Insert(n); n->SetOwner(this); }; // insert at head of list
 
 static List       DictionaryStack;
 static List       DictionaryCache;
@@ -210,6 +211,7 @@ static  boolean   Stopped(void)   { return stop; }
 
 	    void      AddExtern(const char*name,const char*cmd);
 	    void      AddFunction(Function *f)   { AddNode(oo?Methods:Functions,f); }
+	    void      AddFunctionToFront(Function *f)   { InsertNode(oo?Methods:Functions,f); }
 	    void      AddFallback(Function *f)   { AddNode(Fallbacks,f); }
 	    void      AddHandler(Function *f)    { AddNode(Handlers,f); }
 
diff --git a/src/Macro/include/node.h b/src/Macro/include/node.h
index 64fa621..5b1b491 100644
--- a/src/Macro/include/node.h
+++ b/src/Macro/include/node.h
@@ -80,11 +80,16 @@ public:
 	 }
 	void Print(void)       { Node *o = head; while(o){o->Print();o=o->next;};};
 	Node *Head()           { return head; }
-	void Empty(void)       
-				{ Node *o = head; 
-					while(o){ Node *p=o->next;delete o;o=p;}
-					head = tail = NULL;
-				};
+   void Empty(void)
+   {
+      Node *o = head;
+      while(o) {
+         Node *p = o->next;
+         delete o;
+         o = p;
+      }
+      head = tail = NULL;
+   };
 
 	void Save(List& l)   { l.head = head; l.tail = tail ; head = tail = NULL; };
 	void Restore(List& l){ head = l.head; tail = l.tail ; l.head=l.tail= NULL;};
diff --git a/src/Macro/include/value.h b/src/Macro/include/value.h
index 6ce1b64..3bfb896 100644
--- a/src/Macro/include/value.h
+++ b/src/Macro/include/value.h
@@ -67,7 +67,6 @@ class CVector;
 class CBufr;
 class CGeopts;
 class CFile;
-class CVis5D;
 class Image;
 class CNetCDF;
 class CTable;
@@ -120,7 +119,6 @@ public:
 	virtual void ToMatrix(CMatrix*   &x) { Fail("matrix")   ; x=0;};
 	virtual void ToVector(CVector*   &x) { Fail("vector")   ; x=0;};
 	virtual void ToFile(CFile*       &x) { Fail("file")     ; x=0;};
-	virtual void ToVis5D(CVis5D*     &x) { Fail("vis5d")    ; x=0;};
 	virtual void ToNetCDF(CNetCDF*   &x) { Fail("netcdf")   ; x=0;};
 	virtual void ToTable(CTable*     &x) { Fail("table")    ; x=0;};
 	virtual void ToObject(CObject*   &x) { Fail("object")   ; x=0;};
@@ -257,7 +255,7 @@ class CGrib  : public InPool {
 	virtual Content *Clone(void);
 	virtual void SetSubValue(Value&,int,Value*);
 	virtual void Dump2();
-
+    void DestroyContent();
 
 public:
 	CGrib(const char *);
@@ -402,7 +400,6 @@ public:
 	void GetValue(CBufr*    &x) { c->ToBufr(x);    };
 	void GetValue(CGeopts*  &x) { c->ToGeopts(x);  };
 	void GetValue(CMatrix*  &x) { c->ToMatrix(x);  };
-	void GetValue(CVis5D*   &x) { c->ToVis5D(x);   };
 	void GetValue(CNetCDF*  &x) { c->ToNetCDF(x);  };
 	void GetValue(CTable*   &x) { c->ToTable(x);   };
 	void GetValue(CObject*  &x) { c->ToObject(x);  };
@@ -498,34 +495,6 @@ public:
 
 //============================================================================
 
-class Vis5D;
-class CVis5D : public Content {
-
-	
-	Vis5D*  vis5d;
-
-	void    Copy(const CVis5D&);
-	void    CleanUp(void);
-
-	virtual void Dump(int);
-	virtual void Print(void);
-	virtual void ToVis5D(CVis5D* &x)    { x = this; };
-	virtual Content *Clone(void)       { return new CVis5D(*this); };
-	virtual void SetSubValue(Value&,int,Value*);
-	virtual void ToRequest(request* &);
-
-public:
-
-	CVis5D(Vis5D*);
-	~CVis5D() {  CleanUp(); }
-	CVis5D(const CVis5D& x) : Content(tvis5d) { Copy(x);};
-	CVis5D&  operator=(const CVis5D& x) { CleanUp(); Copy(x); return *this;};
-	Vis5D* GetVis5D() { return vis5d; }
-
-};
-
-//============================================================================
-
 class CMatrix : public Content {
 	int     row;
 	int     col;
diff --git a/src/Macro/macrol.c b/src/Macro/macrol.c
index 3e037ce..974640f 100644
--- a/src/Macro/macrol.c
+++ b/src/Macro/macrol.c
@@ -8,7 +8,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 33
+#define YY_FLEX_SUBMINOR_VERSION 35
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -30,7 +30,7 @@
 
 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
 
-#if __STDC_VERSION__ >= 199901L
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
 
 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
  * if you want the limit (max/min) macros for int types. 
@@ -93,11 +93,12 @@ typedef unsigned int flex_uint32_t;
 
 #else	/* ! __cplusplus */
 
-#if __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
 
 #define YY_USE_CONST
 
-#endif	/* __STDC__ */
+#endif	/* defined (__STDC__) */
 #endif	/* ! __cplusplus */
 
 #ifdef YY_USE_CONST
@@ -190,14 +191,9 @@ extern FILE *zzin, *zzout;
 
 #define unput(c) zzunput( c, (zztext_ptr)  )
 
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-
 #ifndef YY_TYPEDEF_YY_SIZE_T
 #define YY_TYPEDEF_YY_SIZE_T
-typedef unsigned int zz_size_t;
+typedef size_t zz_size_t;
 #endif
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -749,7 +745,7 @@ static void jumpprtf(FILE *f,char *fmt,...)
 	zzerror(buf);
 }
 
-#line 753 "lex.zz.c"
+#line 749 "lex.zz.c"
 
 #define INITIAL 0
 #define SOURCE 1
@@ -768,6 +764,35 @@ static void jumpprtf(FILE *f,char *fmt,...)
 
 static int zz_init_globals (void );
 
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int zzlex_destroy (void );
+
+int zzget_debug (void );
+
+void zzset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE zzget_extra (void );
+
+void zzset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *zzget_in (void );
+
+void zzset_in  (FILE * in_str  );
+
+FILE *zzget_out (void );
+
+void zzset_out  (FILE * out_str  );
+
+int zzget_leng (void );
+
+char *zzget_text (void );
+
+int zzget_lineno (void );
+
+void zzset_lineno (int line_number  );
+
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
  */
@@ -810,7 +835,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO (void) fwrite( zztext, zzleng, 1, zzout )
+#define ECHO fwrite( zztext, zzleng, 1, zzout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -821,7 +846,7 @@ static int input (void );
 	if ( YY_CURRENT_BUFFER_LVALUE->zz_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		int n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( zzin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -906,7 +931,7 @@ YY_DECL
 #line 63 "macrol.l"
 
 
-#line 910 "lex.zz.c"
+#line 935 "lex.zz.c"
 
 	if ( !(zz_init) )
 		{
@@ -919,6 +944,8 @@ YY_DECL
         /* Create the reject buffer large enough to save one state per allowed character. */
         if ( ! (zz_state_buf) )
             (zz_state_buf) = (zz_state_type *)zzalloc(YY_STATE_BUF_SIZE  );
+            if ( ! (zz_state_buf) )
+                YY_FATAL_ERROR( "out of dynamic memory in zzlex()" );
 
 		if ( ! (zz_start) )
 			(zz_start) = 1;	/* first start state */
@@ -1294,7 +1321,7 @@ YY_RULE_SETUP
 #line 150 "macrol.l"
 ECHO;
 	YY_BREAK
-#line 1298 "lex.zz.c"
+#line 1325 "lex.zz.c"
 			case YY_STATE_EOF(INITIAL):
 			case YY_STATE_EOF(SOURCE):
 				zzterminate();
@@ -1497,7 +1524,7 @@ static int zz_get_next_buffer (void)
 
 		/* Read in more data. */
 		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->zz_ch_buf[number_to_move]),
-			(zz_n_chars), num_to_read );
+			(zz_n_chars), (size_t) num_to_read );
 
 		YY_CURRENT_BUFFER_LVALUE->zz_n_chars = (zz_n_chars);
 		}
@@ -1521,6 +1548,14 @@ static int zz_get_next_buffer (void)
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
+	if ((zz_size_t) ((zz_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->zz_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		zz_size_t new_size = (zz_n_chars) + number_to_move + ((zz_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->zz_ch_buf = (char *) zzrealloc((void *) YY_CURRENT_BUFFER_LVALUE->zz_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->zz_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in zz_get_next_buffer()" );
+	}
+
 	(zz_n_chars) += number_to_move;
 	YY_CURRENT_BUFFER_LVALUE->zz_ch_buf[(zz_n_chars)] = YY_END_OF_BUFFER_CHAR;
 	YY_CURRENT_BUFFER_LVALUE->zz_ch_buf[(zz_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
@@ -1940,7 +1975,9 @@ static void zzensure_buffer_stack (void)
 		(zz_buffer_stack) = (struct zz_buffer_state**)zzalloc
 								(num_to_alloc * sizeof(struct zz_buffer_state*)
 								);
-		
+		if ( ! (zz_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in zzensure_buffer_stack()" );
+								  
 		memset((zz_buffer_stack), 0, num_to_alloc * sizeof(struct zz_buffer_state*));
 				
 		(zz_buffer_stack_max) = num_to_alloc;
@@ -1958,6 +1995,8 @@ static void zzensure_buffer_stack (void)
 								((zz_buffer_stack),
 								num_to_alloc * sizeof(struct zz_buffer_state*)
 								);
+		if ( ! (zz_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in zzensure_buffer_stack()" );
 
 		/* zero only the new slots.*/
 		memset((zz_buffer_stack) + (zz_buffer_stack_max), 0, grow_size * sizeof(struct zz_buffer_state*));
@@ -2002,7 +2041,7 @@ YY_BUFFER_STATE zz_scan_buffer  (char * base, zz_size_t  size )
 
 /** Setup the input buffer state to scan a string. The next call to zzlex() will
  * scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
+ * @param zzstr a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
diff --git a/src/Macro/macroy.c b/src/Macro/macroy.c
index f45b625..d0c288b 100644
--- a/src/Macro/macroy.c
+++ b/src/Macro/macroy.c
@@ -1,24 +1,23 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
 
-/* Skeleton implementation for Bison's Yacc-like parsers in C
+/* A Bison parser, made by GNU Bison 2.4.1.  */
 
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
    Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
+   
+   This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -29,7 +28,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-
+   
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -47,7 +46,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.3"
+#define YYBISON_VERSION "2.4.1"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -55,113 +54,20 @@
 /* Pure parsers.  */
 #define YYPURE 0
 
-/* Using locations.  */
-#define YYLSP_NEEDED 0
-
+/* Push parsers.  */
+#define YYPUSH 0
 
+/* Pull parsers.  */
+#define YYPULL 1
 
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum zztokentype {
-     IF = 258,
-     AND = 259,
-     NOT = 260,
-     OR = 261,
-     THEN = 262,
-     ELSE = 263,
-     END = 264,
-     RETURN = 265,
-     DO = 266,
-     FUNCTION = 267,
-     ON = 268,
-     GLOBAL = 269,
-     VECTOR = 270,
-     WHILE = 271,
-     INCLUDE = 272,
-     EXTERN = 273,
-     GE = 274,
-     LE = 275,
-     NE = 276,
-     FOR = 277,
-     TO = 278,
-     BY = 279,
-     NIL = 280,
-     OBJECT = 281,
-     IMPORT = 282,
-     EXPORT = 283,
-     INLINE = 284,
-     CASE = 285,
-     OTHERWISE = 286,
-     OF = 287,
-     IN = 288,
-     REPEAT = 289,
-     UNTIL = 290,
-     LOOP = 291,
-     WHEN = 292,
-     TELL = 293,
-     TASK = 294,
-     ARROW = 295,
-     WORD = 296,
-     STRING = 297,
-     NUMBER = 298,
-     DATE = 299,
-     TIME = 300,
-     ENDINLINE = 301
-   };
-#endif
-/* Tokens.  */
-#define IF 258
-#define AND 259
-#define NOT 260
-#define OR 261
-#define THEN 262
-#define ELSE 263
-#define END 264
-#define RETURN 265
-#define DO 266
-#define FUNCTION 267
-#define ON 268
-#define GLOBAL 269
-#define VECTOR 270
-#define WHILE 271
-#define INCLUDE 272
-#define EXTERN 273
-#define GE 274
-#define LE 275
-#define NE 276
-#define FOR 277
-#define TO 278
-#define BY 279
-#define NIL 280
-#define OBJECT 281
-#define IMPORT 282
-#define EXPORT 283
-#define INLINE 284
-#define CASE 285
-#define OTHERWISE 286
-#define OF 287
-#define IN 288
-#define REPEAT 289
-#define UNTIL 290
-#define LOOP 291
-#define WHEN 292
-#define TELL 293
-#define TASK 294
-#define ARROW 295
-#define WORD 296
-#define STRING 297
-#define NUMBER 298
-#define DATE 299
-#define TIME 300
-#define ENDINLINE 301
-
+/* Using locations.  */
+#define YYLSP_NEEDED 0
 
 
 
 /* Copy the first part of user declarations.  */
+
+/* Line 189 of yacc.c  */
 #line 10 "macroy.y"
 
 #include <stdio.h>
@@ -506,6 +412,9 @@ static void end_selection(void)
 /*===========================================================================*/
 
 
+/* Line 189 of yacc.c  */
+#line 417 "y.tab.c"
+
 /* Enabling traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -524,28 +433,134 @@ static void end_selection(void)
 # define YYTOKEN_TABLE 0
 #endif
 
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum zztokentype {
+     IF = 258,
+     AND = 259,
+     NOT = 260,
+     OR = 261,
+     THEN = 262,
+     ELSE = 263,
+     END = 264,
+     RETURN = 265,
+     DO = 266,
+     FUNCTION = 267,
+     ON = 268,
+     GLOBAL = 269,
+     VECTOR = 270,
+     WHILE = 271,
+     INCLUDE = 272,
+     EXTERN = 273,
+     GE = 274,
+     LE = 275,
+     NE = 276,
+     FOR = 277,
+     TO = 278,
+     BY = 279,
+     NIL = 280,
+     OBJECT = 281,
+     IMPORT = 282,
+     EXPORT = 283,
+     INLINE = 284,
+     CASE = 285,
+     OTHERWISE = 286,
+     OF = 287,
+     IN = 288,
+     REPEAT = 289,
+     UNTIL = 290,
+     LOOP = 291,
+     WHEN = 292,
+     TELL = 293,
+     TASK = 294,
+     ARROW = 295,
+     WORD = 296,
+     STRING = 297,
+     NUMBER = 298,
+     DATE = 299,
+     TIME = 300,
+     ENDINLINE = 301
+   };
+#endif
+/* Tokens.  */
+#define IF 258
+#define AND 259
+#define NOT 260
+#define OR 261
+#define THEN 262
+#define ELSE 263
+#define END 264
+#define RETURN 265
+#define DO 266
+#define FUNCTION 267
+#define ON 268
+#define GLOBAL 269
+#define VECTOR 270
+#define WHILE 271
+#define INCLUDE 272
+#define EXTERN 273
+#define GE 274
+#define LE 275
+#define NE 276
+#define FOR 277
+#define TO 278
+#define BY 279
+#define NIL 280
+#define OBJECT 281
+#define IMPORT 282
+#define EXPORT 283
+#define INLINE 284
+#define CASE 285
+#define OTHERWISE 286
+#define OF 287
+#define IN 288
+#define REPEAT 289
+#define UNTIL 290
+#define LOOP 291
+#define WHEN 292
+#define TELL 293
+#define TASK 294
+#define ARROW 295
+#define WORD 296
+#define STRING 297
+#define NUMBER 298
+#define DATE 299
+#define TIME 300
+#define ENDINLINE 301
+
+
+
+
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 353 "macroy.y"
 {
+
+/* Line 214 of yacc.c  */
+#line 353 "macroy.y"
+
 	char       *str;
 	long		num;
-}
-/* Line 187 of yacc.c.  */
-#line 536 "y.tab.c"
-	YYSTYPE;
+
+
+
+/* Line 214 of yacc.c  */
+#line 552 "y.tab.c"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
 # define zzstype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 
-
 /* Copy the second part of user declarations.  */
 
 
-/* Line 216 of yacc.c.  */
-#line 549 "y.tab.c"
+/* Line 264 of yacc.c  */
+#line 564 "y.tab.c"
 
 #ifdef short
 # undef short
@@ -620,14 +635,14 @@ typedef short int zztype_int16;
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static int
-YYID (int i)
+YYID (int zzi)
 #else
 static int
-YYID (i)
-    int i;
+YYID (zzi)
+    int zzi;
 #endif
 {
-  return i;
+  return zzi;
 }
 #endif
 
@@ -708,9 +723,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
 /* A type that is properly aligned for any stack member.  */
 union zzalloc
 {
-  zztype_int16 zzss;
-  YYSTYPE zzvs;
-  };
+  zztype_int16 zzss_alloc;
+  YYSTYPE zzvs_alloc;
+};
 
 /* The size of the maximum gap between one aligned stack and the next.  */
 # define YYSTACK_GAP_MAXIMUM (sizeof (union zzalloc) - 1)
@@ -744,12 +759,12 @@ union zzalloc
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack)					\
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
     do									\
       {									\
 	YYSIZE_T zznewbytes;						\
-	YYCOPY (&zzptr->Stack, Stack, zzsize);				\
-	Stack = &zzptr->Stack;						\
+	YYCOPY (&zzptr->Stack_alloc, Stack, zzsize);			\
+	Stack = &zzptr->Stack_alloc;					\
 	zznewbytes = zzstacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
 	zzptr += zznewbytes / sizeof (*zzptr);				\
       }									\
@@ -944,19 +959,19 @@ static const char *const zztname[] =
   "STRING", "NUMBER", "DATE", "TIME", "ENDINLINE", "';'", "'='", "'('",
   "')'", "':'", "','", "'['", "']'", "'.'", "'|'", "'-'", "'^'", "'*'",
   "'/'", "'+'", "'&'", "'>'", "'<'", "$accept", "script", "block", "lines",
-  "line", "name", "declare", "@1", "import", "export", "extern",
+  "line", "name", "declare", "$@1", "import", "export", "extern",
   "extern_name", "include", "inline", "function", "param_declare",
   "functionheader", "super_declare", "super_list", "super", "param_list",
   "param", "endfunction", "fname", "statement", "return", "assignement",
-  "@2", "@3", "control", "loop", "@4", "tell", "@5", "when", "@6",
-  "selections", "selection", "@7", "case", "@8", "choices", "choice", "@9",
-  "otherwise", "repeat", "@10", "for", "@11", "@12", "by", "while", "@13",
-  "@14", "if", "@15", "closeif", "@16", "@17", "@18", "definition",
-  "function_call", "inline_object", "param_or_empty", "parameters",
-  "parameter", "attribute", "@19", "@20", "attribute_list", "vector_list",
-  "matrix", "vector", "list", "number", "atom", "atom_or_number", "power",
-  "factor", "term", "condition", "conjonction", "disjonction",
-  "expression", "operator", "empty", 0
+  "$@2", "$@3", "control", "loop", "$@4", "tell", "$@5", "when", "$@6",
+  "selections", "selection", "$@7", "case", "$@8", "choices", "choice",
+  "$@9", "otherwise", "repeat", "$@10", "for", "$@11", "$@12", "by",
+  "while", "$@13", "$@14", "if", "$@15", "closeif", "$@16", "$@17", "$@18",
+  "definition", "function_call", "inline_object", "param_or_empty",
+  "parameters", "parameter", "attribute", "$@19", "$@20", "attribute_list",
+  "vector_list", "matrix", "vector", "list", "number", "atom",
+  "atom_or_number", "power", "factor", "term", "condition", "conjonction",
+  "disjonction", "expression", "operator", "empty", 0
 };
 #endif
 
@@ -1490,17 +1505,20 @@ zz_symbol_print (zzoutput, zztype, zzvaluep)
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static void
-zz_stack_print (zztype_int16 *bottom, zztype_int16 *top)
+zz_stack_print (zztype_int16 *zzbottom, zztype_int16 *zztop)
 #else
 static void
-zz_stack_print (bottom, top)
-    zztype_int16 *bottom;
-    zztype_int16 *top;
+zz_stack_print (zzbottom, zztop)
+    zztype_int16 *zzbottom;
+    zztype_int16 *zztop;
 #endif
 {
   YYFPRINTF (stderr, "Stack now");
-  for (; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
+  for (; zzbottom <= zztop; zzbottom++)
+    {
+      int zzbot = *zzbottom;
+      YYFPRINTF (stderr, " %d", zzbot);
+    }
   YYFPRINTF (stderr, "\n");
 }
 
@@ -1534,11 +1552,11 @@ zz_reduce_print (zzvsp, zzrule)
   /* The symbols being reduced.  */
   for (zzi = 0; zzi < zznrhs; zzi++)
     {
-      fprintf (stderr, "   $%d = ", zzi + 1);
+      YYFPRINTF (stderr, "   $%d = ", zzi + 1);
       zz_symbol_print (stderr, zzrhs[zzprhs[zzrule] + zzi],
 		       &(zzvsp[(zzi + 1) - (zznrhs)])
 		       		       );
-      fprintf (stderr, "\n");
+      YYFPRINTF (stderr, "\n");
     }
 }
 
@@ -1818,10 +1836,8 @@ zzdestruct (zzmsg, zztype, zzvaluep)
 	break;
     }
 }
-

 
 /* Prevent warnings from -Wmissing-prototypes.  */
-
 #ifdef YYPARSE_PARAM
 #if defined __STDC__ || defined __cplusplus
 int zzparse (void *YYPARSE_PARAM);
@@ -1837,11 +1853,10 @@ int zzparse ();
 #endif /* ! YYPARSE_PARAM */
 
 
-
-/* The look-ahead symbol.  */
+/* The lookahead symbol.  */
 int zzchar;
 
-/* The semantic value of the look-ahead symbol.  */
+/* The semantic value of the lookahead symbol.  */
 YYSTYPE zzlval;
 
 /* Number of syntax errors so far.  */
@@ -1849,9 +1864,9 @@ int zznerrs;
 
 
 
-/*----------.
-| zzparse.  |
-`----------*/
+/*-------------------------.
+| zzparse or zzpush_parse.  |
+`-------------------------*/
 
 #ifdef YYPARSE_PARAM
 #if (defined __STDC__ || defined __C99__FUNC__ \
@@ -1875,66 +1890,68 @@ zzparse ()
 #endif
 #endif
 {
-  
-  int zzstate;
-  int zzn;
-  int zzresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int zzerrstatus;
-  /* Look-ahead token as an internal (translated) token number.  */
-  int zztoken = 0;
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char zzmsgbuf[128];
-  char *zzmsg = zzmsgbuf;
-  YYSIZE_T zzmsg_alloc = sizeof zzmsgbuf;
-#endif
-
-  /* Three stacks and their tools:
-     `zzss': related to states,
-     `zzvs': related to semantic values,
-     `zzls': related to locations.
 
-     Refer to the stacks thru separate pointers, to allow zzoverflow
-     to reallocate them elsewhere.  */
 
-  /* The state stack.  */
-  zztype_int16 zzssa[YYINITDEPTH];
-  zztype_int16 *zzss = zzssa;
-  zztype_int16 *zzssp;
+    int zzstate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int zzerrstatus;
 
-  /* The semantic value stack.  */
-  YYSTYPE zzvsa[YYINITDEPTH];
-  YYSTYPE *zzvs = zzvsa;
-  YYSTYPE *zzvsp;
+    /* The stacks and their tools:
+       `zzss': related to states.
+       `zzvs': related to semantic values.
 
+       Refer to the stacks thru separate pointers, to allow zzoverflow
+       to reallocate them elsewhere.  */
 
+    /* The state stack.  */
+    zztype_int16 zzssa[YYINITDEPTH];
+    zztype_int16 *zzss;
+    zztype_int16 *zzssp;
 
-#define YYPOPSTACK(N)   (zzvsp -= (N), zzssp -= (N))
+    /* The semantic value stack.  */
+    YYSTYPE zzvsa[YYINITDEPTH];
+    YYSTYPE *zzvs;
+    YYSTYPE *zzvsp;
 
-  YYSIZE_T zzstacksize = YYINITDEPTH;
+    YYSIZE_T zzstacksize;
 
+  int zzn;
+  int zzresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int zztoken;
   /* The variables used to return semantic value and location from the
      action routines.  */
   YYSTYPE zzval;
 
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char zzmsgbuf[128];
+  char *zzmsg = zzmsgbuf;
+  YYSIZE_T zzmsg_alloc = sizeof zzmsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (zzvsp -= (N), zzssp -= (N))
 
   /* The number of symbols on the RHS of the reduced rule.
      Keep to zero when no symbol should be popped.  */
   int zzlen = 0;
 
+  zztoken = 0;
+  zzss = zzssa;
+  zzvs = zzvsa;
+  zzstacksize = YYINITDEPTH;
+
   YYDPRINTF ((stderr, "Starting parse\n"));
 
   zzstate = 0;
   zzerrstatus = 0;
   zznerrs = 0;
-  zzchar = YYEMPTY;		/* Cause a token to be read.  */
+  zzchar = YYEMPTY; /* Cause a token to be read.  */
 
   /* Initialize stack pointers.
      Waste one element of value and location stack
      so that they stay on the same level as the state stack.
      The wasted elements are never initialized.  */
-
   zzssp = zzss;
   zzvsp = zzvs;
 
@@ -1964,7 +1981,6 @@ zzparse ()
 	YYSTYPE *zzvs1 = zzvs;
 	zztype_int16 *zzss1 = zzss;
 
-
 	/* Each stack pointer address is followed by the size of the
 	   data in use in that stack, in bytes.  This used to be a
 	   conditional around just the two extra args, but that might
@@ -1972,7 +1988,6 @@ zzparse ()
 	zzoverflow (YY_("memory exhausted"),
 		    &zzss1, zzsize * sizeof (*zzssp),
 		    &zzvs1, zzsize * sizeof (*zzvsp),
-
 		    &zzstacksize);
 
 	zzss = zzss1;
@@ -1995,9 +2010,8 @@ zzparse ()
 	  (union zzalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (zzstacksize));
 	if (! zzptr)
 	  goto zzexhaustedlab;
-	YYSTACK_RELOCATE (zzss);
-	YYSTACK_RELOCATE (zzvs);
-
+	YYSTACK_RELOCATE (zzss_alloc, zzss);
+	YYSTACK_RELOCATE (zzvs_alloc, zzvs);
 #  undef YYSTACK_RELOCATE
 	if (zzss1 != zzssa)
 	  YYSTACK_FREE (zzss1);
@@ -2008,7 +2022,6 @@ zzparse ()
       zzssp = zzss + zzsize - 1;
       zzvsp = zzvs + zzsize - 1;
 
-
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
 		  (unsigned long int) zzstacksize));
 
@@ -2018,6 +2031,9 @@ zzparse ()
 
   YYDPRINTF ((stderr, "Entering state %d\n", zzstate));
 
+  if (zzstate == YYFINAL)
+    YYACCEPT;
+
   goto zzbackup;
 
 /*-----------.
@@ -2026,16 +2042,16 @@ zzparse ()
 zzbackup:
 
   /* Do appropriate processing given the current state.  Read a
-     look-ahead token if we need one and don't already have one.  */
+     lookahead token if we need one and don't already have one.  */
 
-  /* First try to decide what to do without reference to look-ahead token.  */
+  /* First try to decide what to do without reference to lookahead token.  */
   zzn = zzpact[zzstate];
   if (zzn == YYPACT_NINF)
     goto zzdefault;
 
-  /* Not known => get a look-ahead token if don't already have one.  */
+  /* Not known => get a lookahead token if don't already have one.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
   if (zzchar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
@@ -2067,20 +2083,16 @@ zzbackup:
       goto zzreduce;
     }
 
-  if (zzn == YYFINAL)
-    YYACCEPT;
-
   /* Count tokens shifted since error; after three, turn off error
      status.  */
   if (zzerrstatus)
     zzerrstatus--;
 
-  /* Shift the look-ahead token.  */
+  /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", zztoken, &zzlval, &zzlloc);
 
-  /* Discard the shifted token unless it is eof.  */
-  if (zzchar != YYEOF)
-    zzchar = YYEMPTY;
+  /* Discard the shifted token.  */
+  zzchar = YYEMPTY;
 
   zzstate = zzn;
   *++zzvsp = zzlval;
@@ -2120,104 +2132,144 @@ zzreduce:
   switch (zzn)
     {
         case 2:
+
+/* Line 1455 of yacc.c  */
 #line 426 "macroy.y"
     {return_function(0);}
     break;
 
   case 17:
+
+/* Line 1455 of yacc.c  */
 #line 450 "macroy.y"
     { start_global((zzvsp[(2) - (2)].str)); push("0",PUSH_NUMBER); 
 						pop((zzvsp[(2) - (2)].str),0); end_global((zzvsp[(2) - (2)].str));free((zzvsp[(2) - (2)].str)); }
     break;
 
   case 18:
+
+/* Line 1455 of yacc.c  */
 #line 452 "macroy.y"
     { start_global((zzvsp[(2) - (3)].str));}
     break;
 
   case 19:
+
+/* Line 1455 of yacc.c  */
 #line 453 "macroy.y"
     { pop((zzvsp[(2) - (5)].str),0); end_global((zzvsp[(2) - (5)].str));free((zzvsp[(2) - (5)].str)); }
     break;
 
   case 20:
+
+/* Line 1455 of yacc.c  */
 #line 456 "macroy.y"
     { push((zzvsp[(2) - (2)].str),PUSH_STRING); 
 					   call("import",1); pop((zzvsp[(2) - (2)].str),0); free((zzvsp[(2) - (2)].str)); }
     break;
 
   case 21:
+
+/* Line 1455 of yacc.c  */
 #line 460 "macroy.y"
     { push((zzvsp[(2) - (2)].str),PUSH_STRING);call("export",1); 
 						pop(NULL,0);free((zzvsp[(2) - (2)].str)); }
     break;
 
   case 22:
+
+/* Line 1455 of yacc.c  */
 #line 464 "macroy.y"
     { end_function(NULL);}
     break;
 
   case 23:
+
+/* Line 1455 of yacc.c  */
 #line 466 "macroy.y"
     { extern_command((zzvsp[(3) - (3)].str),NULL); end_function(NULL); free((zzvsp[(3) - (3)].str));}
     break;
 
   case 24:
+
+/* Line 1455 of yacc.c  */
 #line 469 "macroy.y"
     { extern_command((zzvsp[(3) - (4)].str),(zzvsp[(4) - (4)].str)); end_function(NULL);free((zzvsp[(3) - (4)].str));free((zzvsp[(4) - (4)].str));}
     break;
 
   case 25:
+
+/* Line 1455 of yacc.c  */
 #line 472 "macroy.y"
     { begin_function((zzvsp[(2) - (2)].str),0,0,0); free((zzvsp[(2) - (2)].str)); }
     break;
 
   case 26:
+
+/* Line 1455 of yacc.c  */
 #line 475 "macroy.y"
     { include((zzvsp[(2) - (2)].str)); free((zzvsp[(2) - (2)].str));}
     break;
 
   case 27:
+
+/* Line 1455 of yacc.c  */
 #line 476 "macroy.y"
     { include((zzvsp[(2) - (2)].str)); free((zzvsp[(2) - (2)].str));}
     break;
 
   case 28:
+
+/* Line 1455 of yacc.c  */
 #line 479 "macroy.y"
     { (zzval.str) = (zzvsp[(2) - (2)].str); }
     break;
 
   case 30:
+
+/* Line 1455 of yacc.c  */
 #line 487 "macroy.y"
     { argument_count(-1); }
     break;
 
   case 31:
+
+/* Line 1455 of yacc.c  */
 #line 488 "macroy.y"
     { argument_count(0);  }
     break;
 
   case 32:
+
+/* Line 1455 of yacc.c  */
 #line 489 "macroy.y"
     { argument_count((zzvsp[(2) - (3)].num)); }
     break;
 
   case 33:
+
+/* Line 1455 of yacc.c  */
 #line 492 "macroy.y"
     { begin_function((zzvsp[(2) - (2)].str),0,1,0); free((zzvsp[(2) - (2)].str));}
     break;
 
   case 34:
+
+/* Line 1455 of yacc.c  */
 #line 493 "macroy.y"
     { begin_function((zzvsp[(2) - (2)].str),1,1,0); free((zzvsp[(2) - (2)].str));}
     break;
 
   case 35:
+
+/* Line 1455 of yacc.c  */
 #line 494 "macroy.y"
     { begin_function((zzvsp[(2) - (2)].str),1,1,1); free((zzvsp[(2) - (2)].str));}
     break;
 
   case 37:
+
+/* Line 1455 of yacc.c  */
 #line 498 "macroy.y"
     { 
 						call("list",(zzvsp[(2) - (2)].num));
@@ -2226,66 +2278,92 @@ zzreduce:
     break;
 
   case 38:
+
+/* Line 1455 of yacc.c  */
 #line 504 "macroy.y"
     { (zzval.num) = 1; }
     break;
 
   case 39:
+
+/* Line 1455 of yacc.c  */
 #line 505 "macroy.y"
     { (zzval.num) = (zzvsp[(1) - (3)].num) + 1; }
     break;
 
   case 41:
+
+/* Line 1455 of yacc.c  */
 #line 511 "macroy.y"
     { (zzval.num) = 1;      }
     break;
 
   case 42:
+
+/* Line 1455 of yacc.c  */
 #line 512 "macroy.y"
     { (zzval.num) = (zzvsp[(1) - (3)].num) + 1; }
     break;
 
   case 43:
+
+/* Line 1455 of yacc.c  */
 #line 515 "macroy.y"
     { param((zzvsp[(1) - (1)].str),NULL); free((zzvsp[(1) - (1)].str)); }
     break;
 
   case 44:
+
+/* Line 1455 of yacc.c  */
 #line 516 "macroy.y"
     { param((zzvsp[(1) - (3)].str),(zzvsp[(3) - (3)].str)); free((zzvsp[(1) - (3)].str));free((zzvsp[(3) - (3)].str));}
     break;
 
   case 45:
+
+/* Line 1455 of yacc.c  */
 #line 519 "macroy.y"
     { end_function((zzvsp[(2) - (2)].str));free((zzvsp[(2) - (2)].str)); }
     break;
 
   case 49:
+
+/* Line 1455 of yacc.c  */
 #line 529 "macroy.y"
     { pop(NULL,0); }
     break;
 
   case 51:
+
+/* Line 1455 of yacc.c  */
 #line 531 "macroy.y"
     { call((zzvsp[(1) - (1)].str),0);pop(NULL,0);free((zzvsp[(1) - (1)].str));}
     break;
 
   case 52:
+
+/* Line 1455 of yacc.c  */
 #line 534 "macroy.y"
     { return_function(0); }
     break;
 
   case 53:
+
+/* Line 1455 of yacc.c  */
 #line 535 "macroy.y"
     { return_function(1); }
     break;
 
   case 54:
+
+/* Line 1455 of yacc.c  */
 #line 539 "macroy.y"
     { pop((zzvsp[(1) - (3)].str),0);free((zzvsp[(1) - (3)].str)); }
     break;
 
   case 55:
+
+/* Line 1455 of yacc.c  */
 #line 541 "macroy.y"
     { 
 											   pop((zzvsp[(1) - (6)].str),(zzvsp[(3) - (6)].num));
@@ -2294,11 +2372,15 @@ zzreduce:
     break;
 
   case 56:
+
+/* Line 1455 of yacc.c  */
 #line 545 "macroy.y"
     { push((zzvsp[(3) - (4)].str),PUSH_STRING); }
     break;
 
   case 57:
+
+/* Line 1455 of yacc.c  */
 #line 546 "macroy.y"
     { 
 											   pop((zzvsp[(1) - (6)].str),1);
@@ -2308,11 +2390,15 @@ zzreduce:
     break;
 
   case 58:
+
+/* Line 1455 of yacc.c  */
 #line 551 "macroy.y"
     { push((zzvsp[(3) - (4)].str),PUSH_NUMBER); }
     break;
 
   case 59:
+
+/* Line 1455 of yacc.c  */
 #line 552 "macroy.y"
     { 
 											   pop((zzvsp[(1) - (6)].str),1);
@@ -2322,176 +2408,246 @@ zzreduce:
     break;
 
   case 68:
+
+/* Line 1455 of yacc.c  */
 #line 573 "macroy.y"
     { begin_loop((zzvsp[(2) - (4)].str)); }
     break;
 
   case 69:
+
+/* Line 1455 of yacc.c  */
 #line 575 "macroy.y"
     { end_loop();     }
     break;
 
   case 70:
+
+/* Line 1455 of yacc.c  */
 #line 580 "macroy.y"
     { call(".push.dict",1);pop(NULL,0); }
     break;
 
   case 71:
+
+/* Line 1455 of yacc.c  */
 #line 582 "macroy.y"
     { call(".pop.dict",0);pop(NULL,0);  }
     break;
 
   case 72:
+
+/* Line 1455 of yacc.c  */
 #line 587 "macroy.y"
     { begin_when(); }
     break;
 
   case 73:
+
+/* Line 1455 of yacc.c  */
 #line 589 "macroy.y"
     { end_when(); }
     break;
 
   case 76:
+
+/* Line 1455 of yacc.c  */
 #line 595 "macroy.y"
     { begin_selection(); }
     break;
 
   case 77:
+
+/* Line 1455 of yacc.c  */
 #line 596 "macroy.y"
     { end_selection(); }
     break;
 
   case 78:
+
+/* Line 1455 of yacc.c  */
 #line 600 "macroy.y"
     { begin_case();    }
     break;
 
   case 79:
+
+/* Line 1455 of yacc.c  */
 #line 603 "macroy.y"
     { end_case();      }
     break;
 
   case 82:
+
+/* Line 1455 of yacc.c  */
 #line 610 "macroy.y"
     { begin_choice((zzvsp[(1) - (2)].num));  }
     break;
 
   case 83:
+
+/* Line 1455 of yacc.c  */
 #line 611 "macroy.y"
     { end_choice();    }
     break;
 
   case 86:
+
+/* Line 1455 of yacc.c  */
 #line 621 "macroy.y"
     { begin_repeat(); }
     break;
 
   case 87:
+
+/* Line 1455 of yacc.c  */
 #line 623 "macroy.y"
     { end_until();    }
     break;
 
   case 88:
+
+/* Line 1455 of yacc.c  */
 #line 628 "macroy.y"
     { pop((zzvsp[(2) - (4)].str),0); }
     break;
 
   case 89:
+
+/* Line 1455 of yacc.c  */
 #line 629 "macroy.y"
     { begin_for((zzvsp[(2) - (9)].str),(zzvsp[(8) - (9)].num)); }
     break;
 
   case 90:
+
+/* Line 1455 of yacc.c  */
 #line 631 "macroy.y"
     { end_for((zzvsp[(2) - (13)].str)); free((zzvsp[(2) - (13)].str)); }
     break;
 
   case 91:
+
+/* Line 1455 of yacc.c  */
 #line 634 "macroy.y"
     { (zzval.num) = 0 ; }
     break;
 
   case 92:
+
+/* Line 1455 of yacc.c  */
 #line 635 "macroy.y"
     { (zzval.num) = 1;  }
     break;
 
   case 93:
+
+/* Line 1455 of yacc.c  */
 #line 640 "macroy.y"
     { begin_while(); }
     break;
 
   case 94:
+
+/* Line 1455 of yacc.c  */
 #line 641 "macroy.y"
     { do_while();    }
     break;
 
   case 95:
+
+/* Line 1455 of yacc.c  */
 #line 643 "macroy.y"
     { end_while() ;  }
     break;
 
   case 96:
+
+/* Line 1455 of yacc.c  */
 #line 648 "macroy.y"
     { begin_if();    }
     break;
 
   case 98:
+
+/* Line 1455 of yacc.c  */
 #line 653 "macroy.y"
     { end_if();      }
     break;
 
   case 99:
+
+/* Line 1455 of yacc.c  */
 #line 654 "macroy.y"
     { else_if(); }
     break;
 
   case 101:
+
+/* Line 1455 of yacc.c  */
 #line 655 "macroy.y"
     { else_if();}
     break;
 
   case 102:
+
+/* Line 1455 of yacc.c  */
 #line 656 "macroy.y"
     { begin_if();    }
     break;
 
   case 103:
+
+/* Line 1455 of yacc.c  */
 #line 658 "macroy.y"
     { end_if();      }
     break;
 
   case 104:
+
+/* Line 1455 of yacc.c  */
 #line 663 "macroy.y"
     { call("definition",(zzvsp[(2) - (3)].num));  }
     break;
 
   case 105:
+
+/* Line 1455 of yacc.c  */
 #line 664 "macroy.y"
     { call("definition",1+(zzvsp[(4) - (5)].num));}
     break;
 
   case 106:
+
+/* Line 1455 of yacc.c  */
 #line 665 "macroy.y"
     { call("definition",0);   }
     break;
 
   case 107:
+
+/* Line 1455 of yacc.c  */
 #line 669 "macroy.y"
     { call((zzvsp[(1) - (4)].str),(zzvsp[(3) - (4)].num));free((zzvsp[(1) - (4)].str)); }
     break;
 
   case 108:
+
+/* Line 1455 of yacc.c  */
 #line 670 "macroy.y"
     { call((zzvsp[(1) - (4)].str),(zzvsp[(3) - (4)].num));free((zzvsp[(1) - (4)].str)); }
     break;
 
   case 111:
+
+/* Line 1455 of yacc.c  */
 #line 673 "macroy.y"
     { call("[]",(zzvsp[(3) - (4)].num)+1);}
     break;
 
   case 112:
+
+/* Line 1455 of yacc.c  */
 #line 674 "macroy.y"
     { push((zzvsp[(3) - (3)].str),PUSH_STRING);
 										 	call("[]",2);
@@ -2500,6 +2656,8 @@ zzreduce:
     break;
 
   case 113:
+
+/* Line 1455 of yacc.c  */
 #line 678 "macroy.y"
     { push((zzvsp[(3) - (3)].str),PUSH_NUMBER);
 										 	call("[]",2);
@@ -2508,6 +2666,8 @@ zzreduce:
     break;
 
   case 114:
+
+/* Line 1455 of yacc.c  */
 #line 682 "macroy.y"
     { 
 														push((zzvsp[(1) - (6)].str),PUSH_IDENT);
@@ -2519,6 +2679,8 @@ zzreduce:
     break;
 
   case 115:
+
+/* Line 1455 of yacc.c  */
 #line 689 "macroy.y"
     { 
 														push((zzvsp[(1) - (6)].str),PUSH_IDENT);
@@ -2530,6 +2692,8 @@ zzreduce:
     break;
 
   case 116:
+
+/* Line 1455 of yacc.c  */
 #line 700 "macroy.y"
     { push((zzvsp[(1) - (2)].str),PUSH_STRING); 
 							  push((zzvsp[(2) - (2)].str),PUSH_STRING);
@@ -2539,304 +2703,423 @@ zzreduce:
     break;
 
   case 117:
+
+/* Line 1455 of yacc.c  */
 #line 710 "macroy.y"
     { (zzval.num) = 0; }
     break;
 
   case 119:
+
+/* Line 1455 of yacc.c  */
 #line 714 "macroy.y"
     { (zzval.num) = 1;      }
     break;
 
   case 120:
+
+/* Line 1455 of yacc.c  */
 #line 715 "macroy.y"
     { (zzval.num) = (zzvsp[(3) - (3)].num) + 1; }
     break;
 
   case 122:
+
+/* Line 1455 of yacc.c  */
 #line 721 "macroy.y"
     { push((zzvsp[(1) - (1)].str),PUSH_STRING); }
     break;
 
   case 123:
+
+/* Line 1455 of yacc.c  */
 #line 721 "macroy.y"
     { free((zzvsp[(1) - (4)].str)); }
     break;
 
   case 124:
+
+/* Line 1455 of yacc.c  */
 #line 722 "macroy.y"
     { push((zzvsp[(1) - (1)].str),PUSH_STRING); }
     break;
 
   case 125:
+
+/* Line 1455 of yacc.c  */
 #line 722 "macroy.y"
     { free((zzvsp[(1) - (4)].str)); }
     break;
 
   case 126:
+
+/* Line 1455 of yacc.c  */
 #line 725 "macroy.y"
     { (zzval.num) = 2;      }
     break;
 
   case 127:
+
+/* Line 1455 of yacc.c  */
 #line 726 "macroy.y"
     { (zzval.num) = 3;      }
     break;
 
   case 128:
+
+/* Line 1455 of yacc.c  */
 #line 727 "macroy.y"
     { (zzval.num) = (zzvsp[(3) - (3)].num) + 2; }
     break;
 
   case 129:
+
+/* Line 1455 of yacc.c  */
 #line 728 "macroy.y"
     { (zzval.num) = (zzvsp[(3) - (3)].num) + 1; }
     break;
 
   case 130:
+
+/* Line 1455 of yacc.c  */
 #line 731 "macroy.y"
     { (zzval.num) = 2;      }
     break;
 
   case 131:
+
+/* Line 1455 of yacc.c  */
 #line 732 "macroy.y"
     { (zzval.num) = (zzvsp[(1) - (2)].num) + 1; }
     break;
 
   case 132:
+
+/* Line 1455 of yacc.c  */
 #line 735 "macroy.y"
     { call("_matrix",(zzvsp[(1) - (1)].num));     }
     break;
 
   case 133:
+
+/* Line 1455 of yacc.c  */
 #line 738 "macroy.y"
     { call("_vector",(zzvsp[(2) - (3)].num)); }
     break;
 
   case 134:
+
+/* Line 1455 of yacc.c  */
 #line 740 "macroy.y"
     { call("list",(zzvsp[(2) - (3)].num));    }
     break;
 
   case 135:
+
+/* Line 1455 of yacc.c  */
 #line 743 "macroy.y"
     { push((zzvsp[(1) - (1)].str),PUSH_NUMBER); free((zzvsp[(1) - (1)].str));}
     break;
 
   case 136:
+
+/* Line 1455 of yacc.c  */
 #line 744 "macroy.y"
     { push((zzvsp[(2) - (2)].str),PUSH_NEGATIVE);free((zzvsp[(2) - (2)].str)); }
     break;
 
   case 137:
+
+/* Line 1455 of yacc.c  */
 #line 747 "macroy.y"
     { push((zzvsp[(1) - (1)].str),PUSH_IDENT);  free((zzvsp[(1) - (1)].str));}
     break;
 
   case 138:
+
+/* Line 1455 of yacc.c  */
 #line 748 "macroy.y"
     { push((zzvsp[(1) - (1)].str),PUSH_STRING); free((zzvsp[(1) - (1)].str));}
     break;
 
   case 139:
+
+/* Line 1455 of yacc.c  */
 #line 749 "macroy.y"
     { push((zzvsp[(1) - (2)].str),PUSH_DATE);push((zzvsp[(2) - (2)].str),PUSH_TIME);
 									  call("+",2);free((zzvsp[(1) - (2)].str));free((zzvsp[(2) - (2)].str));}
     break;
 
   case 140:
+
+/* Line 1455 of yacc.c  */
 #line 751 "macroy.y"
     { push((zzvsp[(1) - (1)].str),PUSH_DATE);   free((zzvsp[(1) - (1)].str));}
     break;
 
   case 141:
+
+/* Line 1455 of yacc.c  */
 #line 752 "macroy.y"
     { push((zzvsp[(1) - (1)].str),PUSH_TIME);   free((zzvsp[(1) - (1)].str));}
     break;
 
   case 147:
+
+/* Line 1455 of yacc.c  */
 #line 758 "macroy.y"
     { push(NULL,PUSH_NIL); }
     break;
 
   case 148:
+
+/* Line 1455 of yacc.c  */
 #line 759 "macroy.y"
     { call("neg",1); }
     break;
 
   case 151:
+
+/* Line 1455 of yacc.c  */
 #line 768 "macroy.y"
     { call("^",2); }
     break;
 
   case 153:
+
+/* Line 1455 of yacc.c  */
 #line 772 "macroy.y"
     { call("*",2); }
     break;
 
   case 154:
+
+/* Line 1455 of yacc.c  */
 #line 773 "macroy.y"
     { call("/",2); }
     break;
 
   case 156:
+
+/* Line 1455 of yacc.c  */
 #line 777 "macroy.y"
     { call("+",2); }
     break;
 
   case 157:
+
+/* Line 1455 of yacc.c  */
 #line 778 "macroy.y"
     { call("-",2); }
     break;
 
   case 158:
+
+/* Line 1455 of yacc.c  */
 #line 779 "macroy.y"
     { call("&",2); }
     break;
 
   case 160:
+
+/* Line 1455 of yacc.c  */
 #line 783 "macroy.y"
     { call(">",2); }
     break;
 
   case 161:
+
+/* Line 1455 of yacc.c  */
 #line 784 "macroy.y"
     { call("=",2); }
     break;
 
   case 162:
+
+/* Line 1455 of yacc.c  */
 #line 785 "macroy.y"
     { call("<",2); }
     break;
 
   case 163:
+
+/* Line 1455 of yacc.c  */
 #line 786 "macroy.y"
     { call(">=",2); }
     break;
 
   case 164:
+
+/* Line 1455 of yacc.c  */
 #line 787 "macroy.y"
     { call("<=",2); }
     break;
 
   case 165:
+
+/* Line 1455 of yacc.c  */
 #line 788 "macroy.y"
     { call("<>",2); }
     break;
 
   case 166:
+
+/* Line 1455 of yacc.c  */
 #line 789 "macroy.y"
     { call("in",2); }
     break;
 
   case 167:
+
+/* Line 1455 of yacc.c  */
 #line 790 "macroy.y"
     { call("in",2); call("not",1);}
     break;
 
   case 168:
+
+/* Line 1455 of yacc.c  */
 #line 791 "macroy.y"
     { call("not",1); }
     break;
 
   case 170:
+
+/* Line 1455 of yacc.c  */
 #line 795 "macroy.y"
     { call("and",2); }
     break;
 
   case 172:
+
+/* Line 1455 of yacc.c  */
 #line 799 "macroy.y"
     { call("or",2); }
     break;
 
   case 175:
+
+/* Line 1455 of yacc.c  */
 #line 806 "macroy.y"
     { (zzval.str) = strdup(">"); }
     break;
 
   case 176:
+
+/* Line 1455 of yacc.c  */
 #line 807 "macroy.y"
     { (zzval.str) = strdup("="); }
     break;
 
   case 177:
+
+/* Line 1455 of yacc.c  */
 #line 808 "macroy.y"
     { (zzval.str) = strdup("<"); }
     break;
 
   case 178:
+
+/* Line 1455 of yacc.c  */
 #line 809 "macroy.y"
     { (zzval.str) = strdup(">=");}
     break;
 
   case 179:
+
+/* Line 1455 of yacc.c  */
 #line 810 "macroy.y"
     { (zzval.str) = strdup("<=");}
     break;
 
   case 180:
+
+/* Line 1455 of yacc.c  */
 #line 811 "macroy.y"
     { (zzval.str) = strdup("<>");}
     break;
 
   case 181:
+
+/* Line 1455 of yacc.c  */
 #line 812 "macroy.y"
     { (zzval.str) = strdup("in");}
     break;
 
   case 182:
+
+/* Line 1455 of yacc.c  */
 #line 813 "macroy.y"
     { (zzval.str) = strdup("not");}
     break;
 
   case 183:
+
+/* Line 1455 of yacc.c  */
 #line 814 "macroy.y"
     { (zzval.str) = strdup("^");}
     break;
 
   case 184:
+
+/* Line 1455 of yacc.c  */
 #line 815 "macroy.y"
     { (zzval.str) = strdup("*");}
     break;
 
   case 185:
+
+/* Line 1455 of yacc.c  */
 #line 816 "macroy.y"
     { (zzval.str) = strdup("/");}
     break;
 
   case 186:
+
+/* Line 1455 of yacc.c  */
 #line 817 "macroy.y"
     { (zzval.str) = strdup("+");}
     break;
 
   case 187:
+
+/* Line 1455 of yacc.c  */
 #line 818 "macroy.y"
     { (zzval.str) = strdup("-");}
     break;
 
   case 188:
+
+/* Line 1455 of yacc.c  */
 #line 819 "macroy.y"
     { (zzval.str) = strdup("&");}
     break;
 
   case 189:
+
+/* Line 1455 of yacc.c  */
 #line 820 "macroy.y"
     { (zzval.str) = strdup("and");}
     break;
 
   case 190:
+
+/* Line 1455 of yacc.c  */
 #line 821 "macroy.y"
     { (zzval.str) = strdup("or");}
     break;
 
   case 191:
+
+/* Line 1455 of yacc.c  */
 #line 822 "macroy.y"
     { (zzval.str) = strdup("[]"); }
     break;
 
 
-/* Line 1267 of yacc.c.  */
-#line 2840 "y.tab.c"
+
+/* Line 1455 of yacc.c  */
+#line 3123 "y.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", zzr1[zzn], &zzval, &zzloc);
@@ -2847,7 +3130,6 @@ zzreduce:
 
   *++zzvsp = zzval;
 
-
   /* Now `shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
@@ -2912,7 +3194,7 @@ zzerrlab:
 
   if (zzerrstatus == 3)
     {
-      /* If just tried and failed to reuse look-ahead token after an
+      /* If just tried and failed to reuse lookahead token after an
 	 error, discard it.  */
 
       if (zzchar <= YYEOF)
@@ -2929,7 +3211,7 @@ zzerrlab:
 	}
     }
 
-  /* Else will try to reuse look-ahead token after shifting the error
+  /* Else will try to reuse lookahead token after shifting the error
      token.  */
   goto zzerrlab1;
 
@@ -2986,9 +3268,6 @@ zzerrlab1:
       YY_STACK_PRINT (zzss, zzssp);
     }
 
-  if (zzn == YYFINAL)
-    YYACCEPT;
-
   *++zzvsp = zzlval;
 
 
@@ -3013,7 +3292,7 @@ zzabortlab:
   zzresult = 1;
   goto zzreturn;
 
-#ifndef zzoverflow
+#if !defined(zzoverflow) || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | zzexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -3024,7 +3303,7 @@ zzexhaustedlab:
 #endif
 
 zzreturn:
-  if (zzchar != YYEOF && zzchar != YYEMPTY)
+  if (zzchar != YYEMPTY)
      zzdestruct ("Cleanup: discarding lookahead",
 		 zztoken, &zzlval);
   /* Do not reclaim the symbols of the rule which action triggered
@@ -3050,6 +3329,8 @@ zzreturn:
 }
 
 
+
+/* Line 1675 of yacc.c  */
 #line 828 "macroy.y"
 
 #include "macrol.c"
diff --git a/src/Macro/mvimport.c b/src/Macro/mvimport.c
index 027da69..c2da1d8 100644
--- a/src/Macro/mvimport.c
+++ b/src/Macro/mvimport.c
@@ -598,7 +598,7 @@ static boolean import_request(FILE *f,const char *icon,request *r,request *u)
 		{
 			while(p)
 			{
-				char *str = clean(low(p->name,0,0));
+				const char *str = clean(low(p->name,0,0));
 				size_t thislen = strlen(str);
 				if (thislen > maxlen)
 					maxlen = thislen;
@@ -812,6 +812,23 @@ boolean import_table_visualiser(FILE *f,const char *icon,request *r)
 	return import_request(f,icon,r,NULL);
 }
 
+
+boolean import_rttov_visualiser(FILE *f,const char *icon,request *r)
+{
+	/* DATA is set, then it will be more efficient to change it to SOURCE */
+
+	const char *data = get_value(r,"RTTOV_DATA",0);
+
+	if (data != NULL)
+	{
+		set_value(r, "RTTOV_FILENAME", data);
+		unset_value(r, "RTTOV_DATA");
+	}
+
+
+	return import_request(f,icon,r,NULL);
+}
+
 const char *import(FILE *f, const char *name)
 {
 	char buf[1024];
@@ -822,10 +839,18 @@ const char *import(FILE *f, const char *name)
 	request *r,*u;
 
 	strcpy(icon,name);
-
-	sprintf(buf,"%s/%s",getenv("METVIEW_USER_DIRECTORY"),icon);
+	
+	const char* mvhome=getenv("METVIEW_USER_DIRECTORY");
+	if(!mvhome)
+	  	return 0;
+		
+	if(strstr(name,mvhome) != 0)
+		 sprintf(buf,"%s",icon);	
+	else
+	  	 sprintf(buf,"%s/%s",mvhome,icon);
+		
 	sprintf(dot,"%s/.%s",dirname(buf),mbasename(buf));
-
+	
 	r = read_request_file(buf);
 	u = read_request_file(dot);
 
@@ -847,6 +872,8 @@ const char *import(FILE *f, const char *name)
 			ok = import_table_reader(f,icon,r);
 		else if(strcmp(c,"TABLE_VISUALISER")==0)
 			ok = import_table_visualiser(f,icon,r);
+		else if(strcmp(c,"RTTOV_VISUALISER")==0)
+			ok = import_rttov_visualiser(f,icon,r);
 	}
 
 	if(!ok && (r != NULL || c != NULL))
@@ -1092,7 +1119,7 @@ static void serve(svcid *id,request *r,void *misc)
 
 	f = fopen(name,"w");
 	fprintf(f,"# This macro was gererated automagicaly\n");
-	fprintf(f,"# by %s the %d\n",user(),now);
+	fprintf(f,"# by %s the %d\n",user(NULL),now);
 	fprintf(f,"# The metview user directory was %s",userd);
 	fprintf(f,"\n\n");
 	fprintf(f,"# You can control the playback of the macro by changing\n");
diff --git a/src/Macro/mvimportDesktop.c b/src/Macro/mvimportDesktop.c
new file mode 100644
index 0000000..5aae876
--- /dev/null
+++ b/src/Macro/mvimportDesktop.c
@@ -0,0 +1,1205 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 <mars.h>
+#include <ctype.h>
+#include <stdio.h>
+
+typedef struct data {
+	boolean serve;
+} data;
+
+static option opts[] = {
+	{"serve",NULL,"-serve","0",
+	t_boolean,sizeof(boolean),OFFSET(data,serve),},
+};
+
+static data setup;
+
+const char *reserved[] = {
+	"if",
+	"then",
+	"else",
+	"and",
+	"not",
+	"or",
+	"function",
+	"return",
+	"end",
+	"while",
+	"global",
+	"do",
+	"on",
+	"for",
+	"to",
+	"by",
+	"in",
+	"of",
+	"case",
+	"otherwise",
+	"repeat",
+	"until",
+	"loop",
+	"when",
+	"include",
+	"extern",
+	"tell",
+	"task",
+	"nil",
+	"object",
+	"import",
+	"export",
+	"inline",
+};
+
+const char *import(FILE *f, const char *icon,const char *className);
+static void formula1(FILE *f,const char *ref,math *m,math *p);
+static void formula2(FILE *f,math *m);
+static int need_case(request *r,parameter *p,value *v);
+static int value_need_case(value *w,value *v);
+static request *link1(FILE*,request *);
+static int get_iconClass(const char* iconPath,char *iconClass);
+
+static cvtdates = 0;
+
+static char tab[256] = "";  /* either a tab string or else a row of spaces, set in main() */
+
+
+static void putdate(FILE *f,long date)
+{
+	if(date > 0)
+		fprintf(f,"%ld",date);
+	else 
+		fprintf(f,"today - %ld",-date);
+}
+
+static request *find_object(const char *name)
+{
+	request *u = mars.setup;
+	const char    *c;
+
+	if(!name) return NULL;
+
+	while(u)
+	{
+		if(strcmp(u->name,"object") == 0 && 
+		    (c = get_value(u,"class",0)) &&
+		    strcmp(c,name)==0)
+			return u;
+		u = u->next;
+	}
+
+	return NULL;
+}
+
+static const char *ascii(char a)
+{
+	static char buf[5];
+	if(isspace(a) || a == '_' ) return "_";
+	sprintf(buf,"_%02x_",(unsigned char)a);
+	return buf;
+}
+
+
+static const char *low(const char *s,int under,int clean)
+{
+	static char buf[1024];
+	int i = 0;
+	int c = 0;
+	buf[0] = 0;
+
+	if(under && !isalpha(*s))
+	{
+		const char *p = ascii(*s);
+		while(*p) buf[i++] = *p++;
+		s++;
+	}
+
+	while(*s)
+	{
+		if(*s >= 'A' && *s <= 'Z')
+		    buf[i++] = *s - 'A' + 'a';
+		else
+		  {
+			c = (unsigned char)(*s);
+			if( (under && !isalnum(c)) || (c > 127) )
+			{
+				const char *p = ascii(*s);
+				while(*p)
+				    buf[i++] = *p++;
+			}
+			else buf[i++] = *s;
+		  }
+		s++;
+	}
+
+	buf[i] = 0;
+
+	if(clean)
+	{
+		for(i=0;i<NUMBER(reserved);i++)
+			if(strcmp(reserved[i],buf)==0)
+				strcat(buf,"_");
+	}
+	return buf;
+}
+
+static void importing(FILE *f, const char *icon)
+{
+	static char *tag = NULL;
+	if(!tag) tag = getenv("MVIMPORT_TAG");
+	if(!tag) tag = "# Importing : ";
+	fprintf(f,"%s%s\n\n",tag,icon);
+}
+
+static boolean import_link(FILE *f, const char *icon,request *r)
+{
+	request *s = link1(f,r);
+	int i,j,c=0,m,n;
+
+	importing(f,icon);
+	fprintf(f,"%s = ",low(mbasename(icon),1,1));
+
+	fprintf(f,"[");
+
+	n = count_values(s,"Window");
+
+	for(i=0;i<n;i++)
+	{
+		if(c) fprintf(f,",");
+		fprintf(f,"%s",get_value(s,"Window",i));
+		c++;
+	}
+
+	m = count_values(s,"Visdef");
+	n = count_values(s,"File");
+
+	for(i=0;i<n;i++)
+	{
+		if(c) fprintf(f,",");
+		fprintf(f,"%s",get_value(s,"File",i));
+		c++;
+		for(j=0;j<m;j++)
+		{
+			if(c) fprintf(f,",");
+			fprintf(f,"%s",get_value(s,"Visdef",j));
+			c++;
+		}
+	}
+
+	n = count_values(s,"Data");
+
+	for(i=0;i<n;i++)
+	{
+		if(c) fprintf(f,",");
+		fprintf(f,"%s",get_value(s,"Data",i));
+		c++;
+		for(j=0;j<m;j++)
+		{
+			if(c) fprintf(f,",");
+			fprintf(f,"%s",get_value(s,"Visdef",j));
+			c++;
+		}
+	}
+
+
+	fprintf(f,"]\n\n");
+
+	free_all_requests(s);
+	return true;
+}
+
+static boolean import_compute(FILE *f, const char *icon,request *r)
+{
+	math *m;
+	if(m = compmath(no_quotes(get_value(r,"FORMULA",0))))
+	{
+		formula1(f,icon,m,m);
+		importing(f,icon);
+		fprintf(f,"%s = ",low(mbasename(icon),1,1));
+		formula2(f,m);
+		free_math(m);
+		fprintf(f,"\n\n");
+		return true;
+	}
+	return false;
+}
+
+typedef struct cache {
+	struct cache      *next;
+	const char       *name;
+	request    *lang;
+}cache;
+
+static request *get_language(const char *name)
+{
+	static cache *langs = NULL;
+	cache *c;
+	char *obj = strcache("object");
+	request *r = mars.setup;
+	const char *file = NULL;
+
+	while(r)
+	{
+		if(r->name == obj)
+		{
+			const char *p = get_value(r,"class",0);
+			if(p == name)
+			{
+				file = get_value(r,"definition_file",0);
+				break;
+			}
+		}
+		r = r->next;
+	}
+
+	strfree(obj);
+
+	if(!file) return NULL;
+
+	c = langs;
+	while(c)
+	{
+		if(c->name == file) break;
+		c = c->next;
+	}
+
+	if(c == NULL)
+	{
+		c       = NEW_CLEAR(cache);
+		c->next = langs;
+		langs   = c;
+		c->name = strcache(file);
+		c->lang = read_language_file(file);
+	}
+
+	return c->lang;
+
+}
+
+static int value_need_case(value *w,value *v)
+{
+	while(w)
+	{
+		if(w->ref)
+		{
+			if(value_need_case(w->ref,v) == 0)
+				return 0;
+		}
+		else
+		{
+			value *o = w->other_names;
+			if(w->name == v->name) return 0;
+
+			while(o)
+			{
+				if(o->name == v->name) return 0;
+				o = o->next;
+			}
+
+		}
+		w = w->next;
+	}
+	return 1;
+}
+
+static int need_case(request *r,parameter *p,value *v)
+{
+	request *l = get_language(r->name);
+	while(l)
+	{
+		if(l->name == r->name)
+		{
+			parameter *q = l->params;
+			while(q)
+			{
+				if(q->name == p->name)
+					return value_need_case(q->values,v);
+				q = q->next;
+			}
+		}
+		l = l->next;
+	}
+	return 0;
+}
+
+static void import_sub_objects(FILE *f,const char *icon,request *r,request *dot)
+{
+	parameter *p;
+	int n;
+
+	/* Look for references */
+	request *l = get_language(r->name);
+
+	while(l && (l->name != r->name))
+		l = l->next;
+
+	if(l)
+	{
+		p = l->params;
+		while(p)
+		{
+			const char *i = get_value(p->interface,"interface",0);
+			if(i && (strcmp(i,"icon") == 0))
+			{
+				int i = 0;
+				const char *q ;
+				unset_value(r,"_temp");
+				while( q = get_value(r,p->name,i++) ){
+					q = makepath(dirname(icon),q);
+					add_value(r,"_temp",".%s",import(f,q,NULL));
+				}
+				unset_value(r,p->name);
+				i = 0;
+				while( q = get_value(r,"_temp",i++) )
+					add_value(r,p->name,"%s",q);
+				unset_value(r,"_temp");
+			}
+
+			p = p->next;
+		}
+	}
+
+	/* Check in dot fil for macroparmas */
+
+
+	if(n = count_values(dot,"references"))
+	{
+		int i = 0;
+		const char *s;
+		while(s = get_value(dot,"references",i++))
+		{
+			int i = 0;
+			const char *q ;
+			unset_value(r,"_temp");
+			while( q = get_value(r,s,i++) ){
+				q = makepath(dirname(icon),q);
+				add_value(r,"_temp",".%s",import(f,q,NULL));
+			}
+			unset_value(r,s);
+			i = 0;
+			while( q = get_value(r,"_temp",i++) )
+				add_value(r,s,"%s",q);
+			unset_value(r,"_temp");
+
+		}
+	}
+}
+
+
+static void import_values(FILE *f,request *r,parameter *p)
+{
+	value *v = p->values;
+	int flg = v && v->next;
+	int dateflg = 0;
+
+	if(strcmp(p->name,"DATE") == 0 && cvtdates)
+		dateflg = 1;
+
+	if(flg) fprintf(f,"[");
+	
+	while(v)
+	{
+		/*Handling multi-line text for ODB query */		
+		if(strcmp(p->name,"ODB_QUERY") == 0 || strcmp(p->name,"ODB_WHERE") == 0)	
+		{						
+			if(strstr(v->name,"\n") == 0)
+			{
+				fprintf(f,"\"%s\"",v->name);
+			}
+			else
+			{									
+ 				char * pch;
+				int len=strlen(v->name);
+				if(len>0)
+				{
+					char *buff=(char*) calloc(len+1,sizeof(char));
+					sprintf(buff,"%s",v->name);					
+  					pch = strtok (buff,"\n");
+					fprintf(f,"\"%s \"",pch);
+		
+ 					while (pch != NULL)
+ 					{   				
+						pch = strtok (NULL, "\n");					
+						if(pch != NULL)
+						{
+							fprintf(f," &\n",pch);
+							fprintf(f,"%s%s%s%s%s\"%s \"",tab,tab,tab,tab,tab,pch);
+						}
+
+					}
+						
+					free(buff);
+				}
+  				/*fprintf(f,"\n",pch);*/
+
+				/*fprintf(f,"string inline\n");
+				fprintf(f,"%s\n",v->name);
+				fprintf(f,"%s%s%stend inline", tab, tab, tab);*/	
+
+			}			
+			
+		}				
+		else if(isdate(v->name))
+			fprintf(f,"%s",v->name);
+		else if(is_number(v->name))
+			if(dateflg)
+				putdate(f,atof(v->name));
+			else
+			  fprintf(f,"%s",v->name); /*-- do not convert to number --*/
+		else if(v->name[0] == '.')
+			fprintf(f,"%s",v->name+1);
+		else 
+			if(*v->name == '"')
+				fprintf(f,"%s",v->name);
+			else if(need_case(r,p,v))
+				fprintf(f,"\"%s\"",v->name);
+			else
+				fprintf(f,"\"%s\"",low(v->name,0,0));
+		if(v->next)
+			fprintf(f,",");
+		v = v->next;
+	}
+
+	if(flg) fprintf(f,"]");
+}
+
+static boolean import_simple_formula(FILE *f,const char *icon,request *r)
+{
+
+	request *lang,*s;
+	import_sub_objects(f,icon,r,NULL);
+
+	lang = get_language(r->name);
+	expand_flags(0);
+	s = r;
+	r = expand_all_requests(lang,NULL,r);
+	if(!r) return false;
+
+	{
+		parameter *p0 = find_parameter(r,"PARAMETER");
+		parameter *p1 = find_parameter(r,"PARAMETER_1");
+		parameter *p2 = find_parameter(r,"PARAMETER_2");
+		const char *fn = get_value(r,"FUNCTION",0);
+		const char *op = get_value(r,"OPERATOR",0);
+
+		if(!(p0 || (p1 && p2 ))) return false;
+		importing(f,icon);
+		fprintf(f,"%s = ",low(mbasename(icon),1,1));
+
+		if(fn)
+		{
+			fprintf(f,"%s(",fn);
+			if(p1 && p2)
+			{
+				import_values(f,r,p1);
+				fprintf(f,",");
+				import_values(f,r,p2);
+			}
+			else if(p0) import_values(f,r,p0);
+			fprintf(f,")");
+		} else if(op)
+		{
+			import_values(f,r,p1);
+			fprintf(f," %s",op);
+			if(op[strlen(op)-1] != ' ')
+				fprintf(f," ");
+			import_values(f,r,p2);
+		}
+		else return false;
+		fprintf(f,"\n");
+		return true;
+	}
+	free_all_requests(r);
+}
+
+const char *clean(const char *p)
+{
+	static char buf[1024];
+	int quote = 0;
+	int i;
+	const char *q = p;
+
+	for(i=0;i<NUMBER(reserved);i++)
+		if(strcmp(reserved[i],p) == 0)
+			quote++;
+
+
+	if(*p != '_' && !isalpha(*p))
+		quote++;
+
+	while(*q)
+	{
+		if(*q != '_' && !isalnum(*q))
+			quote++;
+		q++;
+	}
+
+	if(quote)
+	{
+		char c = '\'';
+		q = p;
+		while(*q) if(*q++ == '\'') c = '"';
+
+		i = 0;
+		buf[i++] = c;
+		q = p;
+		while(*q)
+		{
+			if(*q == c) buf[i++] = '\\';
+			buf[i++] = *q++;
+		}
+		buf[i++] = c;
+		buf[i++] = 0;
+		return buf;
+	}
+	return p;
+}
+
+static boolean import_request(FILE *f,const char *icon,request *r,request *u)
+{
+
+	const char *m = NULL;
+	parameter *p;
+
+	if(strncmp(r->name,"SAMPLE_FORMULA",strlen("SAMPLE_FORMULA"))==0)
+		return import_simple_formula(f,icon,r);
+
+
+	/* Note: TABLE_READER does not have an associated macro in
+	ObjecList because we want to over-ride it here. */
+
+	if (strncmp(r->name,"TABLE_READER",strlen("TABLE_READER"))==0)
+		m = "read_table";
+
+	u = u?u:find_object(r->name);
+	
+	if(u != NULL && (m || ( m = get_value(u,"macro",0)))) 
+	{
+		import_sub_objects(f,icon,r,u);
+
+		importing(f,icon);
+		fprintf(f,"%s = ",low(mbasename(icon),1,1));
+
+		fprintf(f,"%s(\n",m);
+
+		p = r->params;
+
+		while(p)
+		{
+
+			fprintf(f,"%s%s%s%s:%s",tab,tab,clean(low(p->name,0,0)),tab,tab);
+			import_values(f,r,p);
+
+			if(p->next) fprintf(f,",");
+			fprintf(f,"\n");
+			p = p->next;
+		}
+
+		fprintf(f,"%s%s)\n\n", tab,tab);
+		return true;
+	}
+	return false;
+}
+
+static boolean import_all_requests(FILE *f,const char *icon,request *r,request *u)
+{
+	const char *p;
+	if(r->next == NULL) return import_request(f,icon,r,u);
+
+	fprintf(f,"%s = []\n",
+	    low(mbasename(icon),1,1));
+
+	while(r)
+	{
+		import_request(f,"tmp",r,u);
+		fprintf(f,"%s = %s & [tmp]\n",
+		    low(mbasename(icon),1,1),
+		    low(mbasename(icon),1,1));
+		r = r->next;
+	}
+
+}
+
+static boolean import_macro(FILE *f, const char *icon, const char *file)
+{
+	char line[1024];
+	FILE *g = fopen(file,"r");
+	importing(f,icon);
+
+	if(g)
+	{
+		int c,last = -1;
+		fprintf(f,"##### Start of macro %s\n",icon);
+
+		while( (c = fgetc(g)) != -1)
+		{
+			last = c;
+			fputc(c,f);
+		}
+		fclose(g);
+		if(last != '\n') fputc('\n',f);
+		fprintf(f,"##### End of macro %s\n",icon);
+	}
+	else
+		fprintf(f,"# Cannot read file %s\n",file);
+
+
+	return true;
+}
+
+static boolean import_file(FILE *f, const char *icon, const char *file)
+{
+	char line[1024];
+	importing(f,icon);
+	fprintf(f,"%s = read(\"%s\")\n\n",low(mbasename(icon),1,1),file);
+	return true;
+}
+
+static boolean import_macroparam(FILE *f, const char *icon, request *r)
+{
+	char buf[1024];
+	char name[1024];
+	const char *p;
+	
+	strcpy(name,low(mbasename(icon),1,1));
+	
+	//We emulate the old dot request!
+	request *dot=empty_request("USER_INTERFACE");
+	set_value(dot,"ICON_CLASS","MACROPARAM");
+	set_value(dot,"macro","");
+	
+	import_request(f,icon,r->next,dot);
+
+	fprintf(f,"# NOTE: You may want to change the execute to visualize\n");
+	fprintf(f,"%s = execute(%s)\n\n",name,name);
+
+	sprintf(buf,"%s%s",
+	    getenv("METVIEW_USER_DIRECTORY"),
+	    makepath(dirname(icon),get_value(r,"MACRO",0)));
+	import_macro(f,get_value(r,"MACRO",0),buf);
+
+	free_all_requests(dot);
+	
+	return true;
+}
+
+static boolean import_shell(FILE *f, const char *icon, const char *file)
+{
+	importing(f,icon);
+	fprintf(f,"%s = shell(\"%s\")\n\n",low(mbasename(icon),1,1),file);
+	return true;
+}
+
+static boolean import_magml(FILE *f, const char *icon, const char *file)
+{
+	importing(f,icon);
+	fprintf(f,"%s = magml(\"%s\")\n\n",low(mbasename(icon),1,1),file);
+	return true;
+}
+
+static boolean import_note(FILE *f, const char *icon, const char *file)
+{
+	FILE *g = fopen(file,"r");
+	importing(f,icon);
+
+	if(g)
+	{
+		int c,last = -1;
+		fprintf(f,"%s = string inline\n",low(mbasename(icon),1,1));
+		while( (c = fgetc(g)) != -1)
+		{
+			last = c;
+			fputc(c,f);
+		}
+		if(last != '\n') fputc('\n',f);
+		fprintf(f,"end inline\n");
+		fclose(g);
+	}
+	else
+		fprintf(f,"# Cannot read file %s\n",file);
+
+	return true;
+}
+
+boolean import_read(FILE *f,const char *icon,request *r)
+{
+	/* if only PATH is set, use the read function */
+	parameter *p = r->params;
+	const char *path   = get_value(r,"SOURCE",0);
+	int n = 0;
+
+	while(p)
+	{
+		if(*p->name != '_') n++;
+		p = p->next;
+	}
+
+	if(path && (n == 1))
+	{
+		importing(f,icon);
+		fprintf(f,"%s = read(\"%s\")\n\n",low(mbasename(icon),1,1),no_quotes(path));
+		return true;
+	}
+
+	return import_request(f,icon,r,NULL);
+}
+
+
+
+boolean import_table_reader(FILE *f,const char *icon,request *r)
+{
+	/* DATA is set, then it will be more efficient to change it to SOURCE */
+
+	const char *data = get_value(r,"DATA",0);
+
+	if (data != NULL)
+	{
+		set_value(r, "TABLE_FILENAME", data);
+		unset_value(r, "DATA");
+	}
+
+
+	return import_request(f,icon,r,NULL);
+}
+
+
+const char *import(FILE *f, const char *name,const char *className)
+{
+	char buf[1024];
+	char dot[1024];
+	char icon[1024];
+	char cname[256];
+	boolean ok = false;
+	const char *c=0;
+	request *r, *u;
+
+	strcpy(icon,name);
+	
+	const char* mvhome=getenv("METVIEW_USER_DIRECTORY");
+	if(!mvhome)
+	  	return 0;
+		
+	if(strstr(name,mvhome) != 0)
+		 sprintf(buf,"%s",icon);	
+	else
+	  	 sprintf(buf,"%s/%s",mvhome,icon);
+	
+	r = read_request_file(buf);
+
+	if(className)
+	{
+	  	c=className;
+	}
+		
+	//We need to parse the request dot file
+	else
+	{		
+	  	if(get_iconClass(buf,cname) == 0 )
+			c=&cname[0];
+	}
+		
+	if(c)
+	{
+		if(strcmp(c,"NOTE")==0)
+			ok = import_note(f,icon,buf);
+		else if(strcmp(c,"SHELL")==0)
+			ok = import_shell(f,icon,buf);
+		else if(strcmp(c,"MAGML")==0)
+			ok = import_magml(f,icon,buf);
+		else if(strcmp(c,"READ")==0)
+			ok = import_read(f,icon,r);
+		else if(strcmp(c,"GEOPOINTS")==0)
+			ok = import_file(f,icon,buf);
+		else if(strcmp(c,"MACROPARAM")==0)
+			ok = import_macroparam(f,icon,r);
+		else if(strcmp(c,"TABLE_READER")==0)
+			ok = import_table_reader(f,icon,r);
+	}
+
+	if(!ok && (r != NULL || c != NULL))
+	{
+		u = find_object(r?r->name:c);
+		const char    *t = u?get_value(u,"type",0):NULL;
+
+		if(t)
+		{
+			if(strcmp(t,"Macro")==0)
+				ok = import_macro(f,icon,buf);
+			else if(strcmp(t,"Family")==0 || strcmp(t,"FamilyWindow") == 0)
+				ok = import_request(f,icon,r?r->next:NULL,NULL);
+			else if(strcmp(t,"File")==0)
+				ok = import_file(f,icon,buf);
+			else
+				;
+			/* printf("Type is %s\n",t); */
+		}		
+	}
+
+	if(!ok && (r != NULL) && (c = r->name ))
+	{
+		if(strcmp(c,"LINK")==0)
+			ok = import_link(f,icon,r);
+		else if(strcmp(c,"COMPUTE")==0)
+			ok = import_compute(f,icon,r);
+		else
+		  	ok = import_request(f,icon,r,NULL);
+	}
+
+	if(!ok)
+	{
+		importing(f,icon);
+		fprintf(f,"# Warning: cannot importe : %s\n",icon);
+		fprintf(f,"# Using the metview function, not available in batch\n\n");
+		fprintf(f,"%s = metview(\"%s\")\n\n",low(mbasename(icon),1,1),icon);
+		/* print_all_requests(r); */
+		/* print_all_requests(u); */
+	}
+
+	free_all_requests(r);
+	return low(mbasename(icon),1,1);
+}
+
+static int get_iconClass(const char* iconPath,char *iconClass)
+{  	
+	char dot[1024]; 
+	char buff[1024];
+	const char *iconName;
+	char name[256];
+	
+	sprintf(dot,"%s/.__metview_icon_",dirname(iconPath));
+	iconName=mbasename(iconPath);
+		
+	FILE* fp;	
+	if((fp=fopen(dot,"r")) != NULL)
+	{
+	  	while(fgets(buff,1024,fp)) 
+		{		  	
+        		//Remove end of line
+			char *nlptr = strchr(buff, '\n');
+			if (nlptr) *nlptr = '\0';
+
+			//Find string after the third ","
+			int cnt = 0;
+			const char *cp = &buff[0];
+			const char *c1=0, *c2=0;
+			cp = strstr(cp,",");
+			if(cp++)
+			{
+			  	c1=strstr(cp,",");
+				if(c1++) c2=strstr(c1,",");
+			}
+			
+			if(c1 && c2++)
+			{			  
+			  	if(strcmp(c2,iconName) == 0)
+				{				  				  
+					strncpy(iconClass,c1,c2-c1-1);
+					iconClass[c2-c1-1]='\0';
+					fclose(fp); 
+					return 0;
+				}
+			}			  			
+		}
+		
+		fclose(fp); 
+	}
+	
+	return 1;
+}	
+	
+static void formula3(math *m,char *name,const char *sub)
+{
+	if(m)
+	{
+		if(m->name && (m->arity<=0) && (name == m->name) )
+		{
+			strfree(name);
+			m->name = strcache(sub);
+		}
+		formula3(m->left,name,sub);
+		formula3(m->right,name,sub);
+	}
+}
+
+static void formula1(FILE *f,const char *ref,math *m,math *x)
+{
+	if(m)
+	{
+		formula1(f,ref,m->left,x);
+		formula1(f,ref,m->right,x);
+		if(m->name)
+			if(m->arity<=0)
+				if(!is_number(m->name) && (m->name[0] != '.') )
+				{
+					char buf[1024];
+					char *y,*name;
+					const char *p = buf;
+					char *o;
+					sprintf(buf,"%s",m->name);
+
+					if(*buf == '"' || *buf =='\'')
+					{
+						p = buf+1;
+						buf[strlen(buf)-1] = 0;
+					}
+
+					if(*p != '/')
+						p = makepath(dirname(ref),p);
+
+					o = strcache(p);
+					y  = strcache(import(f,o,NULL));
+					strfree(o);
+
+					name = strcache(m->name);
+					sprintf(buf,".%s",y);
+					formula3(x,name,buf);
+					strfree(name);
+					strfree(y);
+
+				}
+	}
+}
+
+static void formula2(FILE *f,math *m)
+{
+	if(m)
+	{
+		if(m->name)
+			if(m->arity <= 0)
+			{
+				if(is_number(m->name))
+					fprintf(f,"%.12g",atof(m->name));
+				else
+				{
+					fprintf(f,"%s",m->name + 1);
+				}
+				if(m->arity < 0)
+				{
+					fprintf(f,"[");
+					formula2(f,m->left);
+					fprintf(f,"]");
+				}
+			}
+			else
+			{
+				fprintf(f,"(");
+				if(isalpha(m->name[0]))
+				{
+					fprintf(f,"%s(",m->name);
+					formula2(f,m->left);
+					fprintf(f,")");
+				}
+				else 
+				{
+					formula2(f,m->left);
+					fprintf(f," %s ",m->name);
+					formula2(f,m->right);
+				}
+				fprintf(f,")");
+			}
+		else {
+			formula2(f,m->left);
+			if(m->right) fprintf(f,",");
+			formula2(f,m->right);
+		}
+	}
+}
+
+
+static request *link1(FILE *f,request *r)
+{
+	request *s = empty_request(NULL);
+	r = r->next;
+	while(r)
+	{
+		request *u = find_object(get_value(r,"CLASS",0));
+		if(u) add_value(s,get_value(u,"type",0),"%s",
+		    import(f,get_value(r,"NAME",0),NULL));
+		r = r->next;
+	}
+	return s;
+}
+
+
+static void import_window(FILE *f,request *r)
+{
+	const char *user = getenv("METVIEW_USER_DIRECTORY");
+	char icon[1024];
+	int m  = 0;
+	int i  = 0;
+	const char   *p;
+
+	while(r)
+	{
+		int w = strcmp(r->name,"PLOTWINDOW")==0||strcmp(r->name,"CAROUSEL")==0;
+
+		strcpy(icon,"y");
+
+		if(w) fprintf(f,"if not retval then # Don't create windows\n");
+
+		/* It's an object */
+		if(p = get_value(r,"_NAME",0))
+		{
+			char buf[1024];
+			sprintf(buf,"%s/%s",user,p);
+			if(access(buf,0) == 0)
+			{
+				fprintf(f,"if use_objects then\n");
+				fprintf(f,"  %s = metview(\"%s\")\n",icon,p);
+				fprintf(f,"else\n");
+				fprintf(f,"	%s = %s\n",icon,import(f,p,NULL));
+				fprintf(f,"end if\n");
+			}
+			else p = NULL;
+		}
+		if(!p)
+		{
+			if(!import_request(f,icon,r,NULL))
+			{
+				/* The request is not known */
+				request *u = empty_request(NULL);
+				set_value(u,"macro","");
+				set_value(r,"_VERB","%s",r->name);
+				import_request(f,icon,r,u);
+				free_all_requests(u);
+			}
+		}
+		fprintf(f,"x = x & [%s]\n",icon);
+
+		if(w) fprintf(f,"end if\n");
+
+		r = r->next;
+	}
+}
+
+static void serve(svcid *id,request *r,void *misc)
+{
+	char name[1024];
+	char icon[1024];
+	FILE *f;
+	request *u;
+	const char *p;
+	int n = 0;
+	const char *userd = getenv("METVIEW_USER_DIRECTORY");
+	long now = julian_to_date(date_to_julian(0),1);
+
+	/* mars.debug = 1; */
+	/* print_all_requests(r); */
+	/* mars.debug = 0; */
+
+	p = get_value(r,"TITLE",0);
+	if(!p) p = "Plot Window";
+
+	sprintf(name,"%s/Content of %s",userd,p);
+	while(access(name,0)==0)
+		sprintf(name,"%s/Content of %s (%d)",userd,p,++n);
+
+	if(r && strcmp(r->name,"VISTOOL") == 0)
+		r = r->next;
+
+	cvtdates = 1;
+
+	sprintf(icon,"%s/.%s",userd,mbasename(name));
+	f = fopen(icon,"w");		
+	fprintf(f,"USER_INTERFACE,ICON_CLASS=WMACRO\n");
+	fclose(f);
+
+	f = fopen(name,"w");
+	fprintf(f,"# This macro was gererated automagicaly\n");
+	fprintf(f,"# by %s the %d\n",user(NULL),now);
+	fprintf(f,"# The metview user directory was %s",userd);
+	fprintf(f,"\n\n");
+	fprintf(f,"# You can control the playback of the macro by changing\n");
+	fprintf(f,"# the two following variables (set to 0 or 1):\n\n");
+
+	fprintf(f,"use_objects = 1 # Use the original icon definitions.\n");
+	fprintf(f,"rel_dates   = 1 # Make date relatives to today.\n");
+
+	fprintf(f,"\n#\n\n");
+	fprintf(f,"retval = runmode(\"visualise\")\n\n");
+	fprintf(f,"if rel_dates then\n");
+	fprintf(f,"   today = 0\n");
+	fprintf(f,"else\n");
+	fprintf(f,"   today = %ld\n",now);
+	fprintf(f,"end if\n\n");
+
+	fprintf(f,"if use_objects then\n");
+	fprintf(f,"   putenv(METVIEW_USER_DIRECTORY : '%s' )\n",userd);
+	fprintf(f,"end if\n\n");
+
+	fprintf(f,"x = []\n\n");
+
+	/* Mode ? */
+	if(u = get_subrequest(r,"_MODE",0))
+	{
+		import_window(f,u);
+		free_all_requests(u);
+	}
+	else import_window(f,r);
+
+	fprintf(f,"\n");
+	fprintf(f,"if retval then\n");
+	fprintf(f,"   return x\nelse\n   plot(x)\nend if\n");
+
+	fclose(f);
+
+
+	u = empty_request("STATUS");
+	set_value(u,"NAME", "/%s", mbasename(name));
+	set_value(u,"CLASS",  "WMACRO");
+	set_value(u,"STATUS", "CREATED");
+	send_message(id->s,u);
+	free_all_requests(u);
+
+	u = empty_request("USER_MESSAGE");
+	set_value(u,"INFO","Window content saved in '%s'",mbasename(name));
+	send_message(id->s,u);
+	free_all_requests(u);
+
+	u = empty_request("STRING");
+	set_value(u,"VALUE","Window content saved in '%s'",mbasename(name));
+	send_reply(id,u);
+	free_all_requests(u);
+}
+
+int main(int argc,char **argv)
+{
+	marsinit(&argc,argv,&setup,NUMBER(opts),opts);
+	if(setup.serve)
+	{
+		svc *s = create_service(progname());
+		add_service_callback(s,NULL,serve,NULL);
+		service_run(s);
+	}
+	else	
+	{	
+		/*
+		argv[1]: path to icon file
+	        argv[2]: path to output file
+		argv[3]: icon class
+		argv[4]: number of spaces to use instead of tabs (optional) */
+		  		   
+		if (argc > 4)
+		{
+			int num_spaces = atoi(argv[4]);
+			int i;
+			for (i = 0; i < num_spaces; i++)
+				tab[i] = ' ';
+			tab[i] = '\0';
+		}
+		else
+			strcpy(tab, "\t");
+		
+		
+		import(fopen(argv[2],"w"),argv[1],argv[3]);
+	}
+	
+	return 0;
+}
diff --git a/src/Macro/netcdf.cc b/src/Macro/netcdf.cc
index e5107a0..295c8ff 100644
--- a/src/Macro/netcdf.cc
+++ b/src/Macro/netcdf.cc
@@ -97,26 +97,40 @@ CList* CNetCDF::Variables()
 
 MvRequest CNetCDF::Attributes(bool global)
 {
-  MvNcVar *var = global ? GetGlobalVar() : GetVar();
-
-  MvRequest req("ATTRIBUTES");
-  // Add any attributes to subrequest.
-  int num_attr = var->getNumberOfAttributes();
-  if ( num_attr > 0 )
-  {
-    for ( int j = 0; j < num_attr; j++ )
+    const size_t NUM_CHARS_IN_ADD_VALUE = 1024;  // Mars function add_value has a restriction
+    char shortened_att[NUM_CHARS_IN_ADD_VALUE];                    // on the max number of chars
+    MvNcVar *var = global ? GetGlobalVar() : GetVar();
+
+    MvRequest req("ATTRIBUTES");
+    // Add any attributes to subrequest.
+    int num_attr = var->getNumberOfAttributes();
+    if ( num_attr > 0 )
     {
-      MvNcAtt *tmpatt = var->getAttribute(j);
+        for ( int j = 0; j < num_attr; j++ )
+        {
+            MvNcAtt *tmpatt = var->getAttribute(j);
 
-      if (tmpatt->type() == ncChar )
-        req.addValue(tmpatt->name(),tmpatt->as_string(0));
-      else
-        for (int  k = 0; k < tmpatt->getNumberOfValues();k++ )
-          req.addValue(tmpatt->name(),tmpatt->as_string(k));
+            int numValues = 1;
+
+            if (tmpatt->type() != ncChar )
+                numValues = tmpatt->getNumberOfValues();
+
+            for (int k = 0; k <numValues; k++ )
+            {
+                char *s = tmpatt->as_string(k);
+                // do we have to crop the string so that it fits into a request?
+                if (strlen(s) > 1024)
+                {
+                    strncpy(shortened_att, s, NUM_CHARS_IN_ADD_VALUE-1);
+                    shortened_att[NUM_CHARS_IN_ADD_VALUE] = '\0';
+                    s = &(shortened_att[0]);
+                }
+                req.addValue(tmpatt->name(),s);
+            }
+        }
     }
-  }
 
-  return req;
+    return req;
 }
 
 class CDFCurrentFunction : public Function
@@ -297,6 +311,7 @@ Value CDFValuesFunction::Execute(int,Value *arg)
             if (listOfDims)
             {
                 vector<long> vPositionList;
+		vector<long> vCountList;
                 CList *positions;                       // user-supplied list of position indexes
                 arg[1].GetValue(positions);
 
@@ -309,13 +324,14 @@ Value CDFValuesFunction::Execute(int,Value *arg)
                 for (long i = 0;i<positions->Count();i++)    // extract the elements from the list of positions
                 {
                     long pos;
-
+		    long cnt;			
+		    
                     if ((*positions)[i].GetType() == tstring)  // passing a string?
                     {
                         const char *str;
                         (*positions)[i].GetValue(str);
                         if (!strcmp(str, "all"))    // only accept "all"
-                            pos = 0;                // note that we want all the values for this one
+			  	pos = 0;                // note that we want all the values for this one
                         else
                             return Error("values(netcdf, list): the only string value allowed in the position list is 'all' ('%s' has been passed).", str);
                     }
@@ -337,17 +353,19 @@ Value CDFValuesFunction::Execute(int,Value *arg)
                     }
 
                     vPositionList.push_back(pos - 1);  // user supplies 1-based indexes, we want 0-based
+		    vCountList.push_back((indexOfSelectedDimension != i)? 1 : dim[i]);
                 }
 
 
                 for( int d=0; d < nr_dims; ++d )                    //-- count nr of elements required
-                    num_values *= (indexOfSelectedDimension != d) ? 1 : dim[d];
-
+		  	num_values *= (indexOfSelectedDimension != d) ? 1 : dim[d];
+			
+					
                 CVector *vec = new CVector( num_values );           // output vector
                 vector<double> vd;
 
                 aVar->setCurrent(&(vPositionList[0]));
-                aVar->get(vd, num_values,1,1 );
+	        aVar->get(vd,&(vCountList[0]));
 
                 for ( long elem=0; elem < num_values; ++elem )
                     (*vec)[elem] = vd[elem];
diff --git a/src/Macro/request.cc b/src/Macro/request.cc
index 425c9cd..34529ba 100644
--- a/src/Macro/request.cc
+++ b/src/Macro/request.cc
@@ -512,7 +512,16 @@ request *SimpleRequestFunction::Expand(request *r,long flags)
 		long f = expand_flags(flag);
 		reset_language(lang);
 		request *z = expand_all_requests(lang,test,r);
-		unset_value(z, "_UNSET");  // for efficiency - we don't need this param
+		if (z)
+		{
+			unset_value(z, "_UNSET");  // for efficiency - we don't need this param
+		}
+		else
+		{
+			marslog(LOG_EROR, "There was a problem parsing the definition finishing on line %d. Please see the above message(s) to see which parameter(s) could be at fault.", Context::CurrentLine());
+            //print_all_requests(r);
+		}
+
 		free_all_requests(r);
 		expand_flags(f);
 		r = z;
@@ -531,6 +540,13 @@ Value SimpleRequestFunction::Execute(int arity ,Value *arg)
 	request *r = GetRequest(arity,arg);
 	request *s = 0;
 
+	if (!r)
+	{
+		return Error("Definition was incorrect - please see the preceding message.");
+	}
+
+
+
 	if(service) // Passes the device to modules, needed for VisMod...
 	{
 	   if( strcmp( service, M_UPLOT ) == 0 )
@@ -615,7 +631,16 @@ Value Context::Metview(const char *name)
 	request *s = empty_request("MACRO");
 	set_value(r,"_MODE", "MACRO");
 	set_value(r,"_CALLED_FROM_MACRO", "0");
-	Value v("MetviewUI",r);
+
+	//Get desktop app name
+	char *desktop=getenv("MV_DESKTOP_NAME");
+	if(desktop == 0)  
+	{	
+		cout << "Error: MV_DESKTOP_NAME is not defined! Macro exits!" << endl;
+	}
+	
+	string desktopName(desktop);	
+	Value v(desktopName.c_str(),r);
 	free_all_requests(s);
 	free_all_requests(r);
 	return v;
@@ -1357,7 +1382,10 @@ Value PlotSuperpageFunction::Execute(int arity ,Value *arg)
 
 	// Expand request to make sure that all parameters
 	// are defined in capital letters
-	r = r.ExpandRequest("PlotSuperPageDef","PlotSuperPageRules",EXPAND_NO_DEFAULT);
+	// Also note that we need to expand properly so that the rules
+	// are properly applied so that 'portrait', 'a3', etc are used.
+	// This means we should NOT use EXPAND_NO_DEFAULT.
+	r = r.ExpandRequest("PlotSuperPageDef","PlotSuperPageRules",0);
 
 	// Remove PAGES request
 	MvRequest superpage = r;
@@ -1457,9 +1485,20 @@ static void install(Context *c)
 
 	strfree(object);
 
+	//Get desktop name
+	char *desktop=getenv("MV_DESKTOP_NAME");
+	if(desktop == 0)  
+	{	
+		cout << "Error: MV_DESKTOP_NAME is not defined! GeoTool exits!" << endl;
+		return;
+	}
+	
+	string desktopName(desktop);
+	
+	
 	c->AddFunction(new PlotFunction("plot"));
 	c->AddFunction(new PageFunction("newpage"));
-	c->AddFunction(new DialogFunction("dialog","MetviewUI"));
+	c->AddFunction(new DialogFunction("dialog",desktopName.c_str()));
 	c->AddFunction(new RequestGetElemFunction("[]"));
 	c->AddFunction(new ValuesFunction("values"));
 	c->AddFunction(new PrintRequestFunction("printdef"));
diff --git a/src/Macro/value.cc b/src/Macro/value.cc
index 582330b..dbff6a8 100644
--- a/src/Macro/value.cc
+++ b/src/Macro/value.cc
@@ -35,7 +35,6 @@ static struct { vtype t;const char *n;} types[] =  {
 	{timage,  "image",     },
 	{tvector, "vector",    },
 	{tgeopts, "geopoints", },
-	{tvis5d,  "vis5d",     },
 	{tnetcdf, "netcdf",    },
 	{tobject, "object",    },
 	{tnil  ,  "nil",       },
@@ -191,9 +190,11 @@ InPool::InPool(vtype t,request *r) : Content(t)
 
 InPool::~InPool()
 {
-	if(iconName && !isIcon)
-		ASync::IconStatus(iconName,"MODIFIED");
-	strfree(iconName);
+//   if(iconName && !isIcon)
+//      //ASync::IconStatus(iconName,"MODIFIED");
+//      marslog(LOG_INFO,"VERY IMPORTANT *********** InPool Destructor. The data might not be removed: %s . CHECK PLEASE *****************", iconName);
+
+   strfree(iconName);
 }
 
 //=============================================================================
diff --git a/src/Macro/vis5d.cc b/src/Macro/vis5d.cc
deleted file mode 100644
index fd5563d..0000000
--- a/src/Macro/vis5d.cc
+++ /dev/null
@@ -1,281 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 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 "macro.h"
-
-class Vis5D {
-public:
-
-	Value name;
-	Value date;
-	Value level;
-	Value grib;
-
-	Vis5D* next;
-
-	Vis5D(Value& n,Value& d,Value& l,Value& g,Vis5D* x):
-		name(n),date(d),level(l),grib(g),next(x) {}
-
-	~Vis5D() { delete next; }
-
-	Vis5D* Clone() { return new Vis5D(name,date,level,grib,next?next->Clone():0); }
-
-	void Append(Vis5D* v) {
-		Vis5D* x = this;
-		Vis5D* p = NULL;
-		while(x)
-		{
-			p = x;
-			x = x->next;
-		}
-		p->next = v;
-
-	}
-
-private:
-	Vis5D(const Vis5D&);
-	Vis5D operator=(const Vis5D&);
-};
-
-CVis5D::CVis5D(Vis5D* v) : Content(tvis5d), vis5d(v)
-{
-}
-
-void CVis5D::CleanUp()
-{
-	delete vis5d;
-	vis5d = 0;
-}
-
-void CVis5D::Copy(const CVis5D& v)
-{
-	vis5d = v.vis5d?v.vis5d->Clone():0;
-}
-
-void CVis5D::Dump(int)
-{
-	cout << "<vis5d>";
-}
-
-void CVis5D::Print(void)
-{
-	cout << "vis5d";
-}
-
-void CVis5D::SetSubValue(Value& v,int arity,Value *arg)
-{
-	if(!Check(1,v,arity,arg,tgrib,3,tstring,tdate,tnumber))
-		return;
-
-
-	fieldset *f;
-	v.GetValue(f);
-	if(f->count != 1)
-	{
-		Error("Only one grib at a time can be added to a vis5d object");
-		return;
-	}
-
-
-	vis5d = new Vis5D(arg[0],arg[1],arg[2],v,vis5d);
-}
-
-void CVis5D::ToRequest(request*& r)
-{
-	r          = empty_request("vis5d");
-	request *d = NULL;
-	request *z = NULL;
-	Vis5D*   v = vis5d;
-	while(v)
-	{
-		const char *p;
-
-		v->date.GetValue(p);  add_value(r,"DATE","%s",p);
-		v->level.GetValue(p); add_value(r,"LEVEL","%s",p);
-		v->name.GetValue(p);  add_value(r,"NAME","%s",p);
-		
-		request *g = NULL;
-		v->grib.GetValue(g);
-
-		g  = clone_all_requests(g);
-
-		if(z) z->next = g; else d = g;
-		z  = g;
-
-		v = v->next;
-	}
-
-	set_subrequest(r,"DATA",d);
-}
-
-//=============================================================================
-
-
-class Vis5DMergeFunction : public Function {
-public:
-	Vis5DMergeFunction(char *n) : Function(n) 
-		{info = "Merge 2 vis5d";};
-	virtual Value Execute(int arity,Value *arg);
-	virtual int ValidArguments(int arity,Value *arg);
-};
-
-
-Value Vis5DMergeFunction::Execute(int arity,Value *arg)
-{
-	Vis5D *v = NULL;
-	for(int i = arity-1; i > 0; i--)
-	{
-		CVis5D *w;
-		arg[i].GetValue(w);	
-		Vis5D *k = w->GetVis5D();
-
-		if(v == NULL)
-			v = k?k->Clone():0;
-		else if(k)
-			v->Append(k->Clone());
-	}
-
-	return Value(new CVis5D(v));
-}
-
-int Vis5DMergeFunction::ValidArguments(int arity,Value *arg)
-{
-	for(int i = 0; i< arity; i++)
-		if(arg[i].GetType() != tvis5d)
-			return false;
-	return true;
-}
-
-//=============================================================================
-
-
-class Vis5DWriteFunction : public Function {
-public:
-	Vis5DWriteFunction(char *n) : Function(n,2,tstring,tvis5d) 
-		{info = "writes a vis5d";};
-	virtual Value Execute(int arity,Value *arg);
-};
-
-
-Value Vis5DWriteFunction::Execute(int arity,Value *arg)
-{
-	const char *p;
-	request *r;
-
-	arg[0].GetValue(p);
-	arg[1].GetValue(r);
-	set_value(r,"PATH","%s",p);
-	set_value(r,"_ACTION","save");
-	
-    Value v("Vis5D",r);
-	free_all_requests(r);
-	return v;
-}
-
-//=============================================================================
-
-
-class Vis5DFunction1 : public Function {
-public:
-	Vis5DFunction1(char *n) : Function(n,0) 
-		{info = "Builds an empty vis5d matrix";};
-	virtual Value Execute(int arity,Value *arg);
-};
-
-
-Value Vis5DFunction1::Execute(int ,Value *arg)
-{
-	return Value(new CVis5D(0));
-}
-
-class Vis5DFunction2 : public Function {
-public:
-	Vis5DFunction2(char *n) : Function(n,4,tlist,tlist,tlist,tgrib) 
-		{info = "Builds an empty vis5d matrix";};
-	virtual Value Execute(int arity,Value *arg);
-	virtual int ValidArguments(int arity,Value *arg);
-};
-
-
-Value Vis5DFunction2::Execute(int ,Value *arg)
-{
-	int i;
-
-	CList *names,*dates,*levels;
-
-	arg[0].GetValue(names);
-	arg[1].GetValue(dates);
-	arg[2].GetValue(levels);
-
-	fieldset *grib;
-	arg[3].GetValue(grib);
-
-	int count = grib->count;
-
-	Vis5D* v = 0;
-
-	for(i = count-1; i >= 0 ; i--)
-	{
-		int ni = names->Count() == 1 ? 0 : i;
-		int di = dates->Count() == 1 ? 0 : i;
-		int li = levels->Count() == 1 ? 0 : i;
-		Value g(sub_fieldset(grib,i+1,i+1,1));
-		v = new Vis5D(	(*names)[ni], (*dates)[di], (*levels)[li] , g, v);
-	}
-
-	return Value(new CVis5D(v));
-}
-
-int Vis5DFunction2::ValidArguments(int arity,Value *arg)
-{
-	int i;
-
-	if(!Function::ValidArguments(arity,arg))
-		return false;
-
-	CList *names,*dates,*levels;
-
-	arg[0].GetValue(names);
-	arg[1].GetValue(dates);
-	arg[2].GetValue(levels);
-
-	fieldset *grib;
-	arg[3].GetValue(grib);
-
-	for(i = 0; i< names->Count(); i++)
-		if((*names)[i].GetType() != tstring)
-			return false;
-		
-	for(i = 0; i< dates->Count(); i++)
-		if((*dates)[i].GetType() != tdate)
-			return false;
-
-	for(i = 0; i< levels->Count(); i++)
-		if((*levels)[i].GetType() != tnumber)
-			return false;
-
-	int count = grib->count;
-	if(names->Count() != 1 && names->Count() != count) return false;
-	if(dates->Count() != 1 && dates->Count() != count) return false;
-	if(levels->Count() != 1 && levels->Count() != count) return false;
-
-	return true;
-}
-
-static void install(Context *c)
-{
-	c->AddFunction(new Vis5DFunction1("vis5d"));
-	c->AddFunction(new Vis5DFunction2("vis5d"));
-	c->AddFunction(new Vis5DMergeFunction("merge"));
-	c->AddFunction(new Vis5DMergeFunction("&"));
-	c->AddFunction(new Vis5DWriteFunction("write"));
-}
-
-static Linkage linkage(install);
-
diff --git a/src/MacroEditor/LanguageHelper.cc b/src/MacroEditor/LanguageHelper.cc
index d2da06a..ca35cdc 100644
--- a/src/MacroEditor/LanguageHelper.cc
+++ b/src/MacroEditor/LanguageHelper.cc
@@ -23,10 +23,14 @@ QString LanguageHelper::commentBlock(const QString &text)
 {
     QString result;
     QStringList lines = text.split("\n");   // put separate lines into a list of strings
+    int numLines = lines.size();
 
-    for (int i = 0; i < lines.size(); i++)  // each line will be pre-pended with a '#'
+    for (int i = 0; i < numLines; i++)  // each line will be pre-pended with a '#'
     {
-        result += "#" + lines.at(i) + "\n";
+        result += "# " + lines.at(i);
+
+        if (i != numLines-1)  // append a new line, but not after the last one
+            result += "\n";
     }
 
     return result;
diff --git a/src/MacroEditor/MacroEdit.cc b/src/MacroEditor/MacroEdit.cc
index 3894d86..3e9235a 100644
--- a/src/MacroEditor/MacroEdit.cc
+++ b/src/MacroEditor/MacroEdit.cc
@@ -555,6 +555,8 @@ void MacroEdit::setupEditor()
 	// --- Indent lines ---
     connect(actionIndent_Lines, SIGNAL(triggered()), this, SLOT(onIndentLines()));
 
+	// --- Comment lines ---
+    connect(actionComment_Lines, SIGNAL(triggered()), this, SLOT(onCommentLines()));
 
     // --- Settings menu ---
     connect(actionTabs, SIGNAL(triggered()), this, SLOT(tabsDialog()));
@@ -1321,6 +1323,7 @@ void MacroEdit::gotoLine(int line)
 // ---------------------------------------------------------------------------
 // MacroEdit::onIndentLines
 // triggered when the user asks to indent the selected lines of code
+// if indentString is not empty, then 
 // ---------------------------------------------------------------------------
 
 void MacroEdit::onIndentLines()
@@ -1337,22 +1340,16 @@ void MacroEdit::onIndentLines()
     }
 
 
-    // find the number of lines in the selection - yes - all this code to do that!
+    // find the number of lines in the selection 
 
-    int selStart = cursor.selectionStart();
-    int selEnd   = cursor.selectionEnd();
-    QTextBlock bStart = textEditor->document()->findBlock(selStart);
-    QTextBlock bEnd   = textEditor->document()->findBlock(selEnd);
-    int lineStart = bStart.firstLineNumber();
-    int lineEnd   = bEnd.firstLineNumber();
-    int numLines = (lineEnd - lineStart) + 1;
+    int numLines = textEditor->numLinesSelected();
 
 
     // if the user selected the text from bottom to top, then the cursor will be at the top
     // of the selection - for ease of coding, we will ensure that the cursor is at the bottom
     // of the selection.
     
-    cursor.setPosition(selEnd);
+    cursor.setPosition(cursor.selectionEnd());
 
 
     // if the cursor is at the very start of a line, then we assume that the user does not want
@@ -1375,6 +1372,7 @@ void MacroEdit::onIndentLines()
         {
             cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor);  // move it to the start of the line
             textEditor->setTextCursor(cursor);                                       // send the cursor back to the document
+            if (cursor.block().length() > 1)                                         // only indent lines which are not empty (cb.length includes the newline)
             textEditor->insertTextIndent(cursor, false);                             // indent the line (needs document cursor)
             cursor.movePosition(QTextCursor::Up, QTextCursor::MoveAnchor);           // move it to the start of the line
         }
@@ -1396,6 +1394,70 @@ void MacroEdit::onIndentLines()
 
 
 
+// ---------------------------------------------------------------------------
+// MacroEdit::onCommentLines
+// triggered when the user asks to comment out the selected lines of code
+// ---------------------------------------------------------------------------
+
+void MacroEdit::onCommentLines()
+{
+    QString toAddAtEnd = "";
+
+
+    QTextCursor cursor = textEditor->textCursor();   // get the document's cursor
+
+    cursor.beginEditBlock();  // this should be seen as a single operation for 'undo' purposes
+
+
+    // if no line is currently selected, then first select the current line
+
+    if (!cursor.hasSelection())
+    {
+        cursor.select(QTextCursor::LineUnderCursor);
+        textEditor->setTextCursor(cursor);               // send the cursor back to the document
+    }
+
+
+    // if the user selected the text from bottom to top, then the cursor will be at the top
+    // of the selection - for ease of coding, we will ensure that the cursor is at the bottom
+    // of the selection. For this, we simply swap the cursor and the anchor
+    int anchorPos = cursor.anchor();
+    int cursorPos = cursor.position();
+    if (anchorPos > cursorPos)
+    {
+        cursor.setPosition(cursorPos, QTextCursor::MoveAnchor);
+        cursor.setPosition(anchorPos, QTextCursor::KeepAnchor);
+    }
+
+
+    // if the cursor is at the very start of a line, then we assume that the user does not want
+    // to indent this line, and so we move it up one line
+
+    QTextBlock cb = cursor.block();
+    int column = (cursor.position() - cb.position()) + 1;
+
+    if (column == 1)
+    {
+        cursor.movePosition(QTextCursor::Up, QTextCursor::KeepAnchor);           // move the cursor to the end of the previous line
+        cursor.movePosition(QTextCursor::EndOfLine,   QTextCursor::KeepAnchor);  // move the cursor to the end of the previous line
+        toAddAtEnd = "\n";
+    }
+
+
+    // replace the currently-selected text with a commented out version
+    // note that cursor.selectedText gives line breaks as unicode paragraph breaks, so we
+    // have to replace them
+
+    QString textToReplace = cursor.selectedText().replace(QChar(QChar::ParagraphSeparator), QChar('\n'));
+    textEditor->insertPlainText (languageHelper_->commentBlock(textToReplace)); // add the text at the current cursor position
+
+    if (!toAddAtEnd.isEmpty())  // maybe have to add a newline at the end
+        textEditor->insertPlainText (toAddAtEnd);
+
+    cursor.endEditBlock();  // this should be seen as a single operation for 'undo' purposes
+}
+
+
 
 // ---------------------------------------------------------------------------
 // MacroEdit::tabsDialog
@@ -1813,6 +1875,7 @@ void MacroEdit::insertLicenceText ()
     }
 
     textEditor->insertPlainText (languageHelper_->commentBlock(licenceText_)); // add the text at the current cursor position
+    textEditor->insertPlainText ("\n");
 
     cursor.endEditBlock();  // this should be seen as a single operation for 'undo' purposes
 }
@@ -1880,7 +1943,7 @@ void MacroEdit::processDrop(MvQIconDropItem* drop)
     QString st = "$METVIEW_BIN/mvimport \"" + iconPath + "\" " + outpath + " " + num;
 //cout << "string " << st.c_str() << endl;
     system(st.toUtf8().constData());
-
+    
 
     // we know where the drop occurred, so get a new text cursor at that location
     // so that the generated text will be inserted there
@@ -1893,7 +1956,7 @@ void MacroEdit::processDrop(MvQIconDropItem* drop)
     QFile file(temp.str().c_str());
     if (file.open(QIODevice::ReadOnly | QIODevice::Text))
          textEditor->insertPlainText(file.readAll());
-
+         
     //textEditor->setTextCursor(currentCursor);
 
 
diff --git a/src/MacroEditor/MacroEdit.h b/src/MacroEditor/MacroEdit.h
index 386fa05..8c3d963 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 onCommentLines();
     void tabsDialog();
     void runDialog();
     void functionListDialog();
diff --git a/src/MacroEditor/MacroEdit.ui b/src/MacroEditor/MacroEdit.ui
index c9f96a1..3dc16a5 100644
--- a/src/MacroEditor/MacroEdit.ui
+++ b/src/MacroEditor/MacroEdit.ui
@@ -160,6 +160,7 @@
     <addaction name="actionGo_To_Line"/>
     <addaction name="separator"/>
     <addaction name="actionIndent_Lines"/>
+    <addaction name="actionComment_Lines"/>
    </widget>
    <widget class="QMenu" name="menuView">
     <property name="title">
@@ -725,6 +726,14 @@
     <string>Of&f</string>
    </property>
   </action>
+  <action name="actionComment_Lines">
+   <property name="text">
+    <string>C&omment Lines</string>
+   </property>
+   <property name="toolTip">
+    <string>Comment out the selected lines</string>
+   </property>
+  </action>
  </widget>
  <customwidgets>
   <customwidget>
diff --git a/src/MacroEditor/Makefile.in b/src/MacroEditor/Makefile.in
index 03b0a3b..bc9b719 100644
--- a/src/MacroEditor/Makefile.in
+++ b/src/MacroEditor/Makefile.in
@@ -201,6 +201,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -216,6 +217,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -242,11 +245,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/MacroEditor/MvMain.cc b/src/MacroEditor/MvMain.cc
index 566b411..7b2ce67 100644
--- a/src/MacroEditor/MvMain.cc
+++ b/src/MacroEditor/MvMain.cc
@@ -181,6 +181,7 @@ int main(int argc, char **argv)
 
     MacroEditorService service("MACROEDIT");  // create the service
     MacroEditorService service1("KML");
+    MacroEditorService service2("RTTOV_OUTPUT_FILE");
 
     app.run();    
 }
diff --git a/src/MacroEditor/mvplaintextedit.cc b/src/MacroEditor/mvplaintextedit.cc
index 48bc189..19c64b2 100644
--- a/src/MacroEditor/mvplaintextedit.cc
+++ b/src/MacroEditor/mvplaintextedit.cc
@@ -1,6 +1,6 @@
 /***************************** LICENSE START ***********************************
 
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2013 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.
@@ -13,8 +13,15 @@
 #include "mvplaintextedit.h"
 
 //#include <QtGui>
-#include <QTextBlock>
+#include <QDebug>
+#include <QFile>
 #include <QPainter>
+#include <QTextBlock>
+
+#include "MvQDragDrop.h"
+
+#include "Path.h"
+
 
 MvPlainTextEdit::MvPlainTextEdit(QWidget * parent) :
     QPlainTextEdit(parent)
@@ -32,6 +39,8 @@ MvPlainTextEdit::MvPlainTextEdit(QWidget * parent) :
     connect(this, SIGNAL(cursorPositionChanged()),  lineNumberArea, SLOT(update()));
 
     updateLineNumberAreaWidth(0);
+    
+    setAcceptDrops(true);
 }
 
 
@@ -144,6 +153,29 @@ QChar MvPlainTextEdit::characterBehindCursor(QTextCursor *cursor)
 }
 
 
+// ---------------------------------------------------------------------------
+// MvPlainTextEdit::numLinesSelected
+// returns the number of lines in the current selection
+// yes - all this code to do that!
+// ---------------------------------------------------------------------------
+
+int MvPlainTextEdit::numLinesSelected()
+{
+    QTextCursor cursor = textCursor();   // get the document's cursor
+    int selStart = cursor.selectionStart();
+    int selEnd   = cursor.selectionEnd();
+    QTextBlock bStart = document()->findBlock(selStart);
+    QTextBlock bEnd   = document()->findBlock(selEnd);
+    int lineStart = bStart.firstLineNumber();
+    int lineEnd   = bEnd.firstLineNumber();
+    int numLines = (lineEnd - lineStart) + 1;
+
+    return numLines;
+}
+
+
+
+
 
 // ---------------------------------------------------------------------------
 // MvPlainTextEdit::autoIndentNewLine
@@ -362,6 +394,84 @@ void MvPlainTextEdit::lineNumberAreaPaintEvent(QPaintEvent *event)
 }
 
 
+//===========================
+// Drop from the new Desktop
+//===========================
+
+void MvPlainTextEdit::dragEnterEvent(QDragEnterEvent *event)
+{
+    qDebug() << "dragenter" << event <<  event->proposedAction() << event->source();
+    
+    if((event->proposedAction() == Qt::CopyAction ||
+        event->proposedAction() == Qt::MoveAction))
+    {
+        // move the text cursor to show where the text will be inserted
+        QPoint p(event->pos());
+        QTextCursor tempCursor(cursorForPosition (p));
+        setTextCursor(tempCursor);
+        //setFocus(Qt::MouseFocusReason);
+        event->accept();
+    }
+}
+
+void MvPlainTextEdit::dragMoveEvent(QDragMoveEvent *event)
+{
+    qDebug() << "dragmove" << event <<  event->proposedAction() << event->source();
+    
+    if((event->proposedAction() == Qt::CopyAction ||
+        event->proposedAction() == Qt::MoveAction))
+    {
+        // move the text cursor to show where the text will be inserted
+        QPoint p(event->pos());
+        QTextCursor tempCursor(cursorForPosition (p));
+        setTextCursor(tempCursor);
+        event->accept();
+    }
+}
+
+void MvPlainTextEdit::dropEvent(QDropEvent *event)
+{
+    MvQDrop drop(event);
+    
+    if(drop.hasData())
+    {    
+        // convert icon information to a Macro language text
+        QString numSpaces = "";  // default, meaning 'use tabs, not spaces'
+        if (useSpacesForTabs() && useSpacesForDrops() && numSpacesInTab())
+            numSpaces = QString::number(numSpacesInTab()); // use spaces, not tabs
+        
+        // we know where the drop occurred, so get a new text cursor at that location
+        // so that the generated text will be inserted there
+        QPoint p(event->pos());
+        QTextCursor tempCursor(cursorForPosition (p));
+        setTextCursor(tempCursor);
+
+        for(int i=0; i < drop.iconNum(); i++)
+        {
+            // create a temporary file
+            Path temp(::marstmp());
+            QString outpath(temp.str().c_str());                   
+          
+            QString st = "$METVIEW_BIN/mvimportDesktop \"" + drop.iconPath(i) + "\" " + outpath + " \"" + drop.iconClass(i) + "\" " + numSpaces;
+    
+            system(st.toUtf8().constData());
+          
+            // insert text to the Macro editor
+            QFile file(temp.str().c_str());
+            if (file.open(QIODevice::ReadOnly | QIODevice::Text))
+                insertPlainText(file.readAll());
+         
+            // delete temporary file
+            temp.remove();          
+        }
+        
+        event->accept();
+        return;
+    }
+    
+    event->ignore();
+    return;
+}      
 
 /*
 bool MvPlainTextEdit::event(QEvent* event)
diff --git a/src/MacroEditor/mvplaintextedit.h b/src/MacroEditor/mvplaintextedit.h
index 809c032..620f912 100644
--- a/src/MacroEditor/mvplaintextedit.h
+++ b/src/MacroEditor/mvplaintextedit.h
@@ -62,6 +62,8 @@ public:
     void cursorRowCol(int *row, int *col);
     QChar characterBehindCursor(QTextCursor *cursor=0);
 
+    int numLinesSelected();
+
 
  private slots:
      void updateLineNumberAreaWidth(int newBlockCount);
@@ -77,7 +79,11 @@ protected:
     void resizeEvent(QResizeEvent *event);
     void focusInEvent(QFocusEvent *event);
     void focusOutEvent(QFocusEvent *event);
-
+     
+    void dragEnterEvent(QDragEnterEvent *);
+    void dragMoveEvent(QDragMoveEvent *);
+    void dropEvent(QDropEvent *);
+     
 private:
     void autoIndentNewLine ();
     TabsSettings tabsSettings_;
diff --git a/src/MagML/Makefile.am b/src/MagML/Makefile.am
index d8a8b0d..a62d48a 100644
--- a/src/MagML/Makefile.am
+++ b/src/MagML/Makefile.am
@@ -3,7 +3,7 @@ include $(top_srcdir)/aux_build/autotroll.mk
 bin_PROGRAMS = bin/MagML
 
 bin_MagML_SOURCES  = MagML.cc
-bin_MagML_CPPFLAGS = $(MAGPLUS_CPPFLAGS) $(ODB_CPPFLAGS) $(QT_CPPFLAGS)
+bin_MagML_CPPFLAGS = $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(ODB_CPPFLAGS) $(QT_CPPFLAGS)
 bin_MagML_LDADD    = $(MAGPLUS_LIB) $(STANDARD_METVIEW_LIBS) $(FLIBS) $(METVIEW_UTIL_LIB) $(ODB_LDFLAGS) $(ODB_LIBS) $(QT_LIBS)
 AM_LDFLAGS = $(QT_LDFLAGS)
 # AM_LDFLAGS is placed before $(LDFLAGS) when linking
diff --git a/src/MagML/Makefile.in b/src/MagML/Makefile.in
index 1645c33..ebb341a 100644
--- a/src/MagML/Makefile.in
+++ b/src/MagML/Makefile.in
@@ -178,6 +178,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -193,6 +194,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -219,11 +222,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -359,7 +365,7 @@ SUFFIXES = .moc.cpp .moc.cc .moc.cxx .moc.C .h .hh .hpp \
 
 DISTCLEANFILES = $(BUILT_SOURCES)
 bin_MagML_SOURCES = MagML.cc
-bin_MagML_CPPFLAGS = $(MAGPLUS_CPPFLAGS) $(ODB_CPPFLAGS) $(QT_CPPFLAGS)
+bin_MagML_CPPFLAGS = $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(ODB_CPPFLAGS) $(QT_CPPFLAGS)
 bin_MagML_LDADD = $(MAGPLUS_LIB) $(STANDARD_METVIEW_LIBS) $(FLIBS) $(METVIEW_UTIL_LIB) $(ODB_LDFLAGS) $(ODB_LIBS) $(QT_LIBS)
 AM_LDFLAGS = $(QT_LDFLAGS)
 # AM_LDFLAGS is placed before $(LDFLAGS) when linking
diff --git a/src/MagML/ObjectSpec.MagML b/src/MagML/ObjectSpec.MagML
index 60ca668..b4c88ad 100644
--- a/src/MagML/ObjectSpec.MagML
+++ b/src/MagML/ObjectSpec.MagML
@@ -4,6 +4,7 @@ object,
     check              = False,
     can_be_created     = True,
     type               = File,
+    icon_box	       = Plotting,
     default_object     = False,
     default_name       = MagML File,
     macro              = magml,
diff --git a/src/Makefile.am b/src/Makefile.am
index 02eab9f..65fffa6 100755
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -12,6 +12,10 @@ endif
 endif
 
 
+if METVIEW_ECREGRID
+MV_MARS_ECREGRID_DIR = libMars-ecregrid
+endif
+
 
 
 if METVIEW_OBSTAT
@@ -23,8 +27,14 @@ endif
 
 if METVIEW_QT
 MV_QT_DIR 		= libMvQtGui libMvQtUtil GeopExaminer GribExaminer MacroEditor \
-			  NcExaminer OgcClient FlextraExaminer ScmEditor images
+			  NcExaminer OgcClient FlextraExaminer ScmEditor \
+			  images
+if METVIEW_NEW_GUI
+MV_QT_DIR += Desktop
 endif
+endif
+
+
 
 if METVIEW_MAGICS
 MV_MAGICS_DIR 		= uPlot MagML Reprojection
@@ -34,7 +44,10 @@ endif
 endif
 
 if METVIEW_GUI
-MV_GUI_DIR 		= libMvMotif AppMod MetviewUI Stations VisTools DebugTools WebAccess
+MV_GUI_DIR 		= libMvMotif MetviewUI Stations VisTools WebAccess
+if METVIEW_QT
+MV_GUI_DIR += DebugTools AppMod
+endif
 endif
 
 if METVIEW_EXTERNAL
@@ -66,18 +79,19 @@ endif
 #MV_TRAJ_DIR 		= Traj
 #endif
 
-SUBDIRS			= libMars libUtil libMetview libMvNetCDF libFTimeUtil \
-                          Datacoverage Divrot Ecfile Event ExamineManager Flextra \
-                          GribVectors Hovmoeller KML \
-                          Macro MvApp ObsFilter Percentile PottF Scm StdAppManager \
-                          Velstr XSection \
-			  ${MV_QT_DIR} ${MV_GUI_DIR} ${MV_MAGICS_DIR} \
-			  ${MV_ODB_DIR} ${MV_OBSTAT_DIR} \
-			  ${MV_EXTERNAL_DIR} ${MV_BUFR_DIR} ${MV_OPERA_DIR} \
-			  ${MV_MARS_CATALOG_DIR} ${MV_QTUI_DIR} \
-			  ${MV_INPE_DIR} 
-
-# Curve Hovmoeller PM_Tephigram Relhum Spectra TimeSeries TropCycTrack
+SUBDIRS  =  libMars libUtil libMetview libMvNetCDF libFTimeUtil \
+            Datacoverage Divrot Ecfile Event ExamineManager Flextra \
+            GribVectors Hovmoeller KML \
+            ${MV_INT} ${MV_MARS_ECREGRID_DIR} \
+            Macro MvApp ObsFilter Percentile PM_Tephigram PottF Relhum \
+            Rttov Scm StdAppManager Velstr XSection \
+            ${MV_QT_DIR} ${MV_GUI_DIR} ${MV_MAGICS_DIR} \
+            ${MV_ODB_DIR} ${MV_OBSTAT_DIR} \
+            ${MV_EXTERNAL_DIR} ${MV_BUFR_DIR} ${MV_OPERA_DIR} \
+            ${MV_MARS_CATALOG_DIR} ${MV_QTUI_DIR} \
+            ${MV_INPE_DIR} 
+
+# Curve Spectra TimeSeries TropCycTrack
 # ${MV_TRAJ_DIR}
 
 check_SUBDIRS		=
diff --git a/src/Makefile.in b/src/Makefile.in
index 85d6c27..c25fe60 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -37,7 +37,9 @@ host_triplet = @host@
 target_triplet = @target@
 @METVIEW_ODB_TRUE@@METVIEW_QT_TRUE at am__append_1 = OdbExaminer
 @METVIEW_OBSTAT_TRUE@@METVIEW_QT_TRUE at am__append_2 = Obstat ObstatCurveTool ObstatScatterTool
- at METVIEW_EXTERNAL_FALSE@@METVIEW_MAGICS_TRUE at am__append_3 = Meteogram
+ at METVIEW_NEW_GUI_TRUE@@METVIEW_QT_TRUE at am__append_3 = Desktop
+ at METVIEW_EXTERNAL_FALSE@@METVIEW_MAGICS_TRUE at am__append_4 = Meteogram
+ at METVIEW_GUI_TRUE@@METVIEW_QT_TRUE at am__append_5 = DebugTools AppMod
 subdir = src
 DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) \
 	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
@@ -98,11 +100,12 @@ ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = libMars libUtil libMetview libMvNetCDF libFTimeUtil \
 	Datacoverage Divrot Ecfile Event ExamineManager Flextra \
-	GribVectors Hovmoeller KML Macro MvApp ObsFilter Percentile \
-	PottF Scm StdAppManager Velstr XSection libMvQtGui libMvQtUtil \
+	GribVectors Hovmoeller KML libMars-ecregrid Macro MvApp \
+	ObsFilter Percentile PM_Tephigram PottF Relhum Rttov Scm \
+	StdAppManager Velstr XSection libMvQtGui libMvQtUtil \
 	GeopExaminer GribExaminer MacroEditor NcExaminer OgcClient \
-	FlextraExaminer ScmEditor images libMvMotif AppMod MetviewUI \
-	Stations VisTools DebugTools WebAccess uPlot MagML \
+	FlextraExaminer ScmEditor images Desktop libMvMotif MetviewUI \
+	Stations VisTools WebAccess DebugTools AppMod uPlot MagML \
 	Reprojection Meteogram Odb OdbExaminer Obstat ObstatCurveTool \
 	ObstatScatterTool BufrExaminer OperaRadar MarsCatalog \
 	CptecAccess
@@ -160,6 +163,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -175,6 +179,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -201,11 +207,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -338,13 +347,16 @@ AUTOMAKE_OPTIONS = foreign
 #if METVIEW_GUI
 #MV_ODB_DIR 	       += OdbBrowser
 #endif
+ at METVIEW_ECREGRID_TRUE@MV_MARS_ECREGRID_DIR = libMars-ecregrid
 @METVIEW_OBSTAT_TRUE at MV_OBSTAT_DIR = Obstat $(am__append_2)
- at METVIEW_QT_TRUE@MV_QT_DIR = libMvQtGui libMvQtUtil GeopExaminer GribExaminer MacroEditor \
- at METVIEW_QT_TRUE@			  NcExaminer OgcClient FlextraExaminer ScmEditor images
-
+ at METVIEW_QT_TRUE@MV_QT_DIR = libMvQtGui libMvQtUtil GeopExaminer \
+ at METVIEW_QT_TRUE@	GribExaminer MacroEditor NcExaminer OgcClient \
+ at METVIEW_QT_TRUE@	FlextraExaminer ScmEditor images \
+ at METVIEW_QT_TRUE@	$(am__append_3)
 @METVIEW_MAGICS_TRUE at MV_MAGICS_DIR = uPlot MagML Reprojection \
- at METVIEW_MAGICS_TRUE@	$(am__append_3)
- at METVIEW_GUI_TRUE@MV_GUI_DIR = libMvMotif AppMod MetviewUI Stations VisTools DebugTools WebAccess
+ at METVIEW_MAGICS_TRUE@	$(am__append_4)
+ at METVIEW_GUI_TRUE@MV_GUI_DIR = libMvMotif MetviewUI Stations VisTools \
+ at METVIEW_GUI_TRUE@	WebAccess $(am__append_5)
 @METVIEW_EXTERNAL_TRUE at MV_EXTERNAL_DIR = #DataAccess
 @METVIEW_EMOS_TRUE@@METVIEW_QT_TRUE at MV_BUFR_DIR = BufrExaminer
 @METVIEW_MARS_CATALOG_TRUE@@METVIEW_QT_TRUE at MV_MARS_CATALOG_DIR = MarsCatalog
@@ -355,18 +367,19 @@ AUTOMAKE_OPTIONS = foreign
 #MV_TRAJ_DIR 		= Traj
 #endif
 SUBDIRS = libMars libUtil libMetview libMvNetCDF libFTimeUtil \
-                          Datacoverage Divrot Ecfile Event ExamineManager Flextra \
-                          GribVectors Hovmoeller KML \
-                          Macro MvApp ObsFilter Percentile PottF Scm StdAppManager \
-                          Velstr XSection \
-			  ${MV_QT_DIR} ${MV_GUI_DIR} ${MV_MAGICS_DIR} \
-			  ${MV_ODB_DIR} ${MV_OBSTAT_DIR} \
-			  ${MV_EXTERNAL_DIR} ${MV_BUFR_DIR} ${MV_OPERA_DIR} \
-			  ${MV_MARS_CATALOG_DIR} ${MV_QTUI_DIR} \
-			  ${MV_INPE_DIR} 
-
-
-# Curve Hovmoeller PM_Tephigram Relhum Spectra TimeSeries TropCycTrack
+            Datacoverage Divrot Ecfile Event ExamineManager Flextra \
+            GribVectors Hovmoeller KML \
+            ${MV_INT} ${MV_MARS_ECREGRID_DIR} \
+            Macro MvApp ObsFilter Percentile PM_Tephigram PottF Relhum \
+            Rttov Scm StdAppManager Velstr XSection \
+            ${MV_QT_DIR} ${MV_GUI_DIR} ${MV_MAGICS_DIR} \
+            ${MV_ODB_DIR} ${MV_OBSTAT_DIR} \
+            ${MV_EXTERNAL_DIR} ${MV_BUFR_DIR} ${MV_OPERA_DIR} \
+            ${MV_MARS_CATALOG_DIR} ${MV_QTUI_DIR} \
+            ${MV_INPE_DIR} 
+
+
+# Curve Spectra TimeSeries TropCycTrack
 # ${MV_TRAJ_DIR}
 check_SUBDIRS = 
 
diff --git a/src/MarsCatalog/Makefile.in b/src/MarsCatalog/Makefile.in
index edaccd8..5762887 100644
--- a/src/MarsCatalog/Makefile.in
+++ b/src/MarsCatalog/Makefile.in
@@ -204,6 +204,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -219,6 +220,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -245,11 +248,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/Meteogram/Makefile.in b/src/Meteogram/Makefile.in
index 30c7ff9..48d7d42 100644
--- a/src/Meteogram/Makefile.in
+++ b/src/Meteogram/Makefile.in
@@ -142,6 +142,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -157,6 +158,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -183,11 +186,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/Meteogram/ObjectSpec.Meteogram b/src/Meteogram/ObjectSpec.Meteogram
index 5db6123..f099a42 100644
--- a/src/Meteogram/ObjectSpec.Meteogram
+++ b/src/Meteogram/ObjectSpec.Meteogram
@@ -3,6 +3,7 @@ object,
 	class		= MetPlus,
 	can_be_created  = True,
 	type		= Data,
+        icon_box	= Plotting,
 	definition_file = '$METVIEW_DIR_SHARE/etc/MetPlusDef',
 	rules_file      = '$METVIEW_DIR_SHARE/etc/MetPlusRules',
 	default_name	= Meteogram,
diff --git a/src/MetviewUI/Makefile.in b/src/MetviewUI/Makefile.in
index 3cea689..52180ed 100644
--- a/src/MetviewUI/Makefile.in
+++ b/src/MetviewUI/Makefile.in
@@ -310,6 +310,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -325,6 +326,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -351,11 +354,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/MetviewUI/Parameter.cc b/src/MetviewUI/Parameter.cc
index 0ff8913..75a5bc6 100644
--- a/src/MetviewUI/Parameter.cc
+++ b/src/MetviewUI/Parameter.cc
@@ -94,6 +94,11 @@ Parameter::Parameter(Language& l,parameter* p):
 		if(get_value(param_->interface,"help",0) == 0)
 			set_value(param_->interface,"help",choice.c_str());
 	}
+	else if(strcmp(get_value(param_->interface,"interface",0),"colour") ==0)
+	{
+		if(get_value(param_->interface,"help",0) == 0)
+			set_value(param_->interface,"help","help_colour");	
+	}	
 	
 	const char *h;
 	if( (h = get_value(param_->interface,"hidden",0)) != 0  && (*h == 'T' || *h == 't'))
diff --git a/src/MvApp/Makefile.am b/src/MvApp/Makefile.am
index c6ffbe0..bfec8d7 100644
--- a/src/MvApp/Makefile.am
+++ b/src/MvApp/Makefile.am
@@ -2,6 +2,11 @@
 bin_PROGRAMS = bin/pool  bin/Mars bin/togrib  bin/tomatrix  bin/geo_to_grib  bin/grib_to_geo
 
 
+if METVIEW_ECREGRID
+bin_PROGRAMS += bin/MarsEcRegrid
+endif
+
+
 bin_pool_SOURCES  = pool.cc
 bin_pool_LDADD    = $(STANDARD_METVIEW_LIBS)
 
@@ -32,6 +37,20 @@ bin_grib_to_geo_SOURCES  = grib_to_geo.cc
 bin_grib_to_geo_LDADD    = $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB)
 
 
+if METVIEW_ECREGRID
+
+bin_MarsEcRegrid_SOURCES  = MarsEcRegrid.cc
+bin_MarsEcRegrid_CPPFLAGS  = -I../libMars-ecregrid
+#bin_MarsEcRegrid_LDFLAGS  = $(ODB_LDFLAGS)
+bin_MarsEcRegrid_LDADD    = ../../lib/libMars-ecregrid.a  $(ECREGRID_LIBS) $(STANDARD_METVIEW_LIBS) $(FDBLIB) $(FLIBS) $(METVIEW_UTIL_LIB)
+
+if METVIEW_MARS_ODB
+bin_MarsEcRegrid_LDFLAGS = $(ODB_LDFLAGS)
+bin_MarsEcRegrid_LDADD += $(ODB_LIBS)
+endif
+
+endif
+
 
 sharedir       = $(datadir)/metview/etc
 local_sharedir = ../../share/metview/etc
@@ -43,6 +62,10 @@ if METVIEW_MARS_ODB
 share_DATA     += $(local_sharedir)/ObjectSpec.MarsOdb
 endif
 
+if METVIEW_ECREGRID
+share_DATA     += $(local_sharedir)/ObjectSpec.MarsEcRegrid
+endif
+
 
 # to build the share data, we take the destination files and
 # remove their directory, e.g. $(local_sharedir)/DefFile becomes DefFile.
@@ -57,6 +80,10 @@ if METVIEW_MARS_ODB
 icons += $(local_iconsdir)/ODB_MARS.xpm
 endif
 
+if METVIEW_ECREGRID
+icons += $(local_iconsdir)/RETRIEVE_ECREGRID.xpm $(local_iconsdir)/READ_ECREGRID.xpm
+endif
+
 
 $(icons): $(local_iconsdir)/%: %
 	${INSTALL} $<  $(local_iconsdir)
@@ -69,6 +96,9 @@ if METVIEW_MARS_ODB
 BUILT_SOURCES += $(icons)
 endif
 
+if METVIEW_ECREGRID
+BUILT_SOURCES += $(icons)
+endif
 
 
 EXTRA_DIST =
@@ -77,6 +107,9 @@ if METVIEW_MARS_ODB
 EXTRA_DIST += ODB_MARS.xpm ObjectSpec.MarsOdb
 endif
 
+if METVIEW_ECREGRID
+EXTRA_DIST += RETRIEVE_ECREGRID.xpm READ_ECREGRID.xpm ObjectSpec.MarsEcRegrid
+endif
 
 bin:
 	ln -s ../../bin bin
diff --git a/src/MvApp/Makefile.in b/src/MvApp/Makefile.in
index dcaa149..5eafdb0 100644
--- a/src/MvApp/Makefile.in
+++ b/src/MvApp/Makefile.in
@@ -38,12 +38,18 @@ host_triplet = @host@
 target_triplet = @target@
 bin_PROGRAMS = bin/pool$(EXEEXT) bin/Mars$(EXEEXT) bin/togrib$(EXEEXT) \
 	bin/tomatrix$(EXEEXT) bin/geo_to_grib$(EXEEXT) \
-	bin/grib_to_geo$(EXEEXT)
- at METVIEW_MARS_ODB_TRUE@am__append_1 = $(ODB_LIBS)
- at METVIEW_MARS_ODB_TRUE@am__append_2 = $(local_sharedir)/ObjectSpec.MarsOdb
- at METVIEW_MARS_ODB_TRUE@am__append_3 = $(local_iconsdir)/ODB_MARS.xpm
- at METVIEW_MARS_ODB_TRUE@am__append_4 = $(icons)
- at METVIEW_MARS_ODB_TRUE@am__append_5 = ODB_MARS.xpm ObjectSpec.MarsOdb
+	bin/grib_to_geo$(EXEEXT) $(am__EXEEXT_1)
+ at METVIEW_ECREGRID_TRUE@am__append_1 = bin/MarsEcRegrid
+ at METVIEW_MARS_ODB_TRUE@am__append_2 = $(ODB_LIBS)
+ at METVIEW_ECREGRID_TRUE@@METVIEW_MARS_ODB_TRUE at am__append_3 = $(ODB_LIBS)
+ at METVIEW_MARS_ODB_TRUE@am__append_4 = $(local_sharedir)/ObjectSpec.MarsOdb
+ at METVIEW_ECREGRID_TRUE@am__append_5 = $(local_sharedir)/ObjectSpec.MarsEcRegrid
+ at METVIEW_MARS_ODB_TRUE@am__append_6 = $(local_iconsdir)/ODB_MARS.xpm
+ at METVIEW_ECREGRID_TRUE@am__append_7 = $(local_iconsdir)/RETRIEVE_ECREGRID.xpm $(local_iconsdir)/READ_ECREGRID.xpm
+ at METVIEW_MARS_ODB_TRUE@am__append_8 = $(icons)
+ at METVIEW_ECREGRID_TRUE@am__append_9 = $(icons)
+ at METVIEW_MARS_ODB_TRUE@am__append_10 = ODB_MARS.xpm ObjectSpec.MarsOdb
+ at METVIEW_ECREGRID_TRUE@am__append_11 = RETRIEVE_ECREGRID.xpm READ_ECREGRID.xpm ObjectSpec.MarsEcRegrid
 subdir = src/MvApp
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -55,6 +61,7 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/src/metview_config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
+ at METVIEW_ECREGRID_TRUE@am__EXEEXT_1 = bin/MarsEcRegrid$(EXEEXT)
 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sharedir)"
 PROGRAMS = $(bin_PROGRAMS)
 am_bin_Mars_OBJECTS = MarsG2.$(OBJEXT)
@@ -71,6 +78,22 @@ bin_Mars_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
 	$(CXXFLAGS) $(bin_Mars_LDFLAGS) $(LDFLAGS) -o $@
 am__dirstamp = $(am__leading_dot)dirstamp
+am__bin_MarsEcRegrid_SOURCES_DIST = MarsEcRegrid.cc
+ at METVIEW_ECREGRID_TRUE@am_bin_MarsEcRegrid_OBJECTS = bin_MarsEcRegrid-MarsEcRegrid.$(OBJEXT)
+bin_MarsEcRegrid_OBJECTS = $(am_bin_MarsEcRegrid_OBJECTS)
+ at METVIEW_ECREGRID_TRUE@@METVIEW_MARS_ODB_TRUE at am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
+ at METVIEW_ECREGRID_TRUE@bin_MarsEcRegrid_DEPENDENCIES =  \
+ at METVIEW_ECREGRID_TRUE@	../../lib/libMars-ecregrid.a \
+ at METVIEW_ECREGRID_TRUE@	$(am__DEPENDENCIES_1) \
+ at METVIEW_ECREGRID_TRUE@	$(am__DEPENDENCIES_1) \
+ at METVIEW_ECREGRID_TRUE@	$(am__DEPENDENCIES_1) \
+ at METVIEW_ECREGRID_TRUE@	$(am__DEPENDENCIES_1) \
+ at METVIEW_ECREGRID_TRUE@	$(am__DEPENDENCIES_1) \
+ at METVIEW_ECREGRID_TRUE@	$(am__DEPENDENCIES_3)
+bin_MarsEcRegrid_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(AM_CXXFLAGS) $(CXXFLAGS) $(bin_MarsEcRegrid_LDFLAGS) \
+	$(LDFLAGS) -o $@
 am_bin_geo_to_grib_OBJECTS = geo_to_grib.$(OBJEXT)
 bin_geo_to_grib_OBJECTS = $(am_bin_geo_to_grib_OBJECTS)
 bin_geo_to_grib_DEPENDENCIES = $(am__DEPENDENCIES_1) \
@@ -114,12 +137,15 @@ am__v_CXXLD_0 = @echo "  CXXLD " $@;
 AM_V_GEN = $(am__v_GEN_$(V))
 am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
 am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = $(bin_Mars_SOURCES) $(bin_geo_to_grib_SOURCES) \
-	$(bin_grib_to_geo_SOURCES) $(bin_pool_SOURCES) \
-	$(bin_togrib_SOURCES) $(bin_tomatrix_SOURCES)
-DIST_SOURCES = $(bin_Mars_SOURCES) $(bin_geo_to_grib_SOURCES) \
-	$(bin_grib_to_geo_SOURCES) $(bin_pool_SOURCES) \
-	$(bin_togrib_SOURCES) $(bin_tomatrix_SOURCES)
+SOURCES = $(bin_Mars_SOURCES) $(bin_MarsEcRegrid_SOURCES) \
+	$(bin_geo_to_grib_SOURCES) $(bin_grib_to_geo_SOURCES) \
+	$(bin_pool_SOURCES) $(bin_togrib_SOURCES) \
+	$(bin_tomatrix_SOURCES)
+DIST_SOURCES = $(bin_Mars_SOURCES) \
+	$(am__bin_MarsEcRegrid_SOURCES_DIST) \
+	$(bin_geo_to_grib_SOURCES) $(bin_grib_to_geo_SOURCES) \
+	$(bin_pool_SOURCES) $(bin_togrib_SOURCES) \
+	$(bin_tomatrix_SOURCES)
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -173,6 +199,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -188,6 +215,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -214,11 +243,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -350,7 +382,7 @@ bin_pool_SOURCES = pool.cc
 bin_pool_LDADD = $(STANDARD_METVIEW_LIBS)
 bin_Mars_SOURCES = MarsG2.cc
 bin_Mars_LDADD = $(STANDARD_METVIEW_LIBS) $(FDBLIB) $(FLIBS) \
-	$(METVIEW_UTIL_LIB) $(am__append_1)
+	$(METVIEW_UTIL_LIB) $(am__append_2)
 @METVIEW_MARS_ODB_TRUE at bin_Mars_LDFLAGS = $(ODB_LDFLAGS)
 bin_togrib_SOURCES = togrib.cc
 bin_togrib_LDADD = $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB)
@@ -360,14 +392,24 @@ bin_geo_to_grib_SOURCES = geo_to_grib.cc
 bin_geo_to_grib_LDADD = $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB)
 bin_grib_to_geo_SOURCES = grib_to_geo.cc
 bin_grib_to_geo_LDADD = $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB)
+ at METVIEW_ECREGRID_TRUE@bin_MarsEcRegrid_SOURCES = MarsEcRegrid.cc
+ at METVIEW_ECREGRID_TRUE@bin_MarsEcRegrid_CPPFLAGS = -I../libMars-ecregrid
+#bin_MarsEcRegrid_LDFLAGS  = $(ODB_LDFLAGS)
+ at METVIEW_ECREGRID_TRUE@bin_MarsEcRegrid_LDADD =  \
+ at METVIEW_ECREGRID_TRUE@	../../lib/libMars-ecregrid.a \
+ at METVIEW_ECREGRID_TRUE@	$(ECREGRID_LIBS) \
+ at METVIEW_ECREGRID_TRUE@	$(STANDARD_METVIEW_LIBS) $(FDBLIB) \
+ at METVIEW_ECREGRID_TRUE@	$(FLIBS) $(METVIEW_UTIL_LIB) \
+ at METVIEW_ECREGRID_TRUE@	$(am__append_3)
+ at METVIEW_ECREGRID_TRUE@@METVIEW_MARS_ODB_TRUE at bin_MarsEcRegrid_LDFLAGS = $(ODB_LDFLAGS)
 sharedir = $(datadir)/metview/etc
 local_sharedir = ../../share/metview/etc
 local_iconsdir = ../../share/metview/icons
-share_DATA = $(am__append_2)
-icons = $(am__append_3)
+share_DATA = $(am__append_4) $(am__append_5)
+icons = $(am__append_6) $(am__append_7)
 CLEANFILES = $(share_DATA) $(icons)
-BUILT_SOURCES = bin $(am__append_4)
-EXTRA_DIST = $(am__append_5)
+BUILT_SOURCES = bin $(am__append_8) $(am__append_9)
+EXTRA_DIST = $(am__append_10) $(am__append_11)
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
@@ -452,6 +494,9 @@ bin/$(am__dirstamp):
 bin/Mars$(EXEEXT): $(bin_Mars_OBJECTS) $(bin_Mars_DEPENDENCIES) bin/$(am__dirstamp)
 	@rm -f bin/Mars$(EXEEXT)
 	$(AM_V_CXXLD)$(bin_Mars_LINK) $(bin_Mars_OBJECTS) $(bin_Mars_LDADD) $(LIBS)
+bin/MarsEcRegrid$(EXEEXT): $(bin_MarsEcRegrid_OBJECTS) $(bin_MarsEcRegrid_DEPENDENCIES) bin/$(am__dirstamp)
+	@rm -f bin/MarsEcRegrid$(EXEEXT)
+	$(AM_V_CXXLD)$(bin_MarsEcRegrid_LINK) $(bin_MarsEcRegrid_OBJECTS) $(bin_MarsEcRegrid_LDADD) $(LIBS)
 bin/geo_to_grib$(EXEEXT): $(bin_geo_to_grib_OBJECTS) $(bin_geo_to_grib_DEPENDENCIES) bin/$(am__dirstamp)
 	@rm -f bin/geo_to_grib$(EXEEXT)
 	$(AM_V_CXXLD)$(CXXLINK) $(bin_geo_to_grib_OBJECTS) $(bin_geo_to_grib_LDADD) $(LIBS)
@@ -475,6 +520,7 @@ distclean-compile:
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MarsG2.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsEcRegrid-MarsEcRegrid.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/geo_to_grib.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grib_to_geo.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pool.Po at am__quote@
@@ -505,6 +551,22 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
 
+bin_MarsEcRegrid-MarsEcRegrid.o: MarsEcRegrid.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsEcRegrid_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsEcRegrid-MarsEcRegrid.o -MD -MP -MF $(DEPDIR)/bin_MarsEcRegrid-MarsEcRegrid.Tpo -c -o bin_MarsEcRegrid-MarsEcRegrid.o `test -f 'MarsEcRegrid.cc' || echo '$(srcdir)/'`MarsEcRegrid.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsEcRegrid-MarsEcRegrid.Tpo $(DEPDIR)/bin_MarsEcRegrid-MarsEcRegrid.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MarsEcRegrid.cc' object='bin_MarsEcRegrid-MarsEcRegrid.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsEcRegrid_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsEcRegrid-MarsEcRegrid.o `test -f 'MarsEcRegrid.cc' || echo '$(srcdir)/'`MarsEcRegrid.cc
+
+bin_MarsEcRegrid-MarsEcRegrid.obj: MarsEcRegrid.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsEcRegrid_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsEcRegrid-MarsEcRegrid.obj -MD -MP -MF $(DEPDIR)/bin_MarsEcRegrid-MarsEcRegrid.Tpo -c -o bin_MarsEcRegrid-MarsEcRegrid.obj `if test -f 'MarsEcRegrid.cc'; then $(CYGPATH_W) 'MarsEcRegrid.cc'; else $(CYGPATH_W) '$(srcdir)/MarsEcRegrid.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsEcRegrid-MarsEcRegrid.Tpo $(DEPDIR)/bin_MarsEcRegrid-MarsEcRegrid.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MarsEcRegrid.cc' object='bin_MarsEcRegrid-MarsEcRegrid.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsEcRegrid_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsEcRegrid-MarsEcRegrid.obj `if test -f 'MarsEcRegrid.cc'; then $(CYGPATH_W) 'MarsEcRegrid.cc'; else $(CYGPATH_W) '$(srcdir)/MarsEcRegrid.cc'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
diff --git a/src/MvApp/MarsEcRegrid.cc b/src/MvApp/MarsEcRegrid.cc
new file mode 100644
index 0000000..20ad222
--- /dev/null
+++ b/src/MvApp/MarsEcRegrid.cc
@@ -0,0 +1,354 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+/*
+
+B.Raoult
+ECMWF Oct-93
+
+*/
+
+#include "Metview.h"
+#include "MvPath.hpp"
+#include <stdlib.h>
+
+//static Cached METVIEW_ICON ("METVIEW_ICON");
+
+class Retrieve : public MvService {
+public:
+	Retrieve(char *c);
+	void serve(MvRequest&,MvRequest&);
+	virtual void marsServe(MvRequest&,MvRequest&);
+};
+
+
+class Read : public Retrieve {
+public:
+	Read(char *c) : Retrieve(c) {}
+	virtual void marsServe(MvRequest&,MvRequest&);
+};
+
+class Stage : public Retrieve {
+public:
+	Stage(char *c) : Retrieve(c) {}
+};
+
+Retrieve::Retrieve(char *c) : MvService(c)
+{
+
+  //-- if flag -mlog was set in startup script then
+  //-- activate more log output from Mars processes
+
+  const char* mlog = getenv("MV_MLOG");
+  if( mlog && strcmp(mlog,"yes") == 0  )
+    {
+      mars.info    = true;
+      mars.warning = true;
+      putenv("MV_DEBUG_PRINT=1");
+      marslog(LOG_DBUG,"Spotted -mlog, set all kind of flags...");
+    }
+}
+
+void Retrieve::marsServe(MvRequest& in,MvRequest& out)
+{
+	Cached name       =  (const char*)in("_NAME");
+	Cached icon_class =  (const char*)in("_CLASS");
+
+	Cached mode = getenv("METVIEW_MODE");
+	Cached appl = "metview";
+
+	if(mode) appl = appl + "-" + mode;
+
+	in("_APPL") = appl;
+
+
+	//-- make the varb MARS understandable
+
+	if( strcmp( in.getVerb(), "READ_ECREGRID" ) == 0 )
+		in.setVerb("READ");     
+	else if( strcmp( in.getVerb(), "RETRIEVE_ECREGRID" ) == 0 )
+		in.setVerb("RETRIEVE");
+
+
+	if(is_bufr(in)) {
+
+		in("TARGET")   = marstmp();
+		in.print();
+
+		err  e = handle_request(in,this);
+		if(e != 0)
+		  { setError(e); return ; }
+
+		MvRequest r = "BUFR";
+		r("PATH") = in("TARGET");
+		r("TEMPORARY") = 1;
+
+		out = r;
+
+	}
+/*	else if(is_odb(in)) {
+
+
+		// Check double quotes in FILTER
+		// if we don't have double quotes around the FILTER expression	
+		// then it won't work (actually, any characters will do - ODB
+		// removes the first and last characters from the string!
+		const char *filter=in("FILTER");
+		if(filter)
+		{ 
+	  		string fstr(filter);
+			if(fstr.size() > 0)
+			{
+				if(fstr.substr(0,1) != "\"")
+					fstr.insert(0,"\"");			
+
+				int n=fstr.size();
+				if(fstr.substr(n-1,1) != "\"")
+					fstr.append("\"");
+
+				in("FILTER")=fstr.c_str();	
+			}	
+		}	
+
+
+
+		in("TARGET")   = marstmp();
+		in.print();
+
+		err  e = handle_request(in,this);
+		if(e != 0)
+		  { setError(e); return ; }
+
+		// If size of the target file is 0
+		// then there is no data retrieved
+		if ( !FileHasValidSize(in("TARGET")) )
+		{
+			request* field = NULL;
+			out = field;
+		}
+		else
+		{
+			MvRequest r = "ODB_DB";
+			r("PATH") = in("TARGET");
+			r("TEMPORARY") = 1;
+
+			out = r;
+		}
+	}*/
+	else if(image(in) || simulated_image(in)) {
+
+		in("TARGET")   = marstmp();
+		in.print();
+
+		err  e = handle_request(in,this);
+		if(e != 0)
+		 { setError(e); return ; }
+
+		// If size of the target file is 0
+		// then there is no data retrieved
+		if ( !FileHasValidSize(in("TARGET")) )
+		{
+			request* field = NULL;
+			out = field;
+		}
+		else
+		{
+		MvRequest r = "IMAGE";
+		r("PATH") = in("TARGET");
+		r("TEMPORARY") = 1;
+		out = r;
+		}
+	}
+	else {
+
+	        in.print();
+
+		err e = handle_request(in,this);
+		if(e != 0)
+		  { setError(e); return ; }
+
+		variable *v = find_variable((const char*)in("FIELDSET"));
+		if(v == NULL)
+		  { setError(-2); return ; }
+
+		if(v->scalar)
+		{
+			MvRequest r = "NUMBER";
+			r("VALUE") = v->val;
+
+			out = r;
+		}
+		else
+		{
+			out = fieldset_to_request(v->fs);
+		}
+	}
+
+	out.print();
+
+
+}
+
+void Read::marsServe(MvRequest& in,MvRequest& out)
+{
+	const char *data = in( "DATA" );
+	const char *path = in( "SOURCE" );
+
+	if( data && path )  //-- do not allow two data sources
+	{
+		setError( 1, "READ: two input files: both Source and Data have values!" );
+		return;
+	}
+	if( ( ! data ) && ( ! path ) ) //-- one data source required
+	{
+		setError( 1, "READ: no input file: both Source and Data are empty!" );
+		return;
+	}
+
+	if( data )
+	{
+		MvRequest grib;
+		in.getValue(grib,"DATA");
+		path = grib("PATH");
+		in("SOURCE") = path;
+	}
+
+	int temp = 0;
+	char *name = guess_class(path);
+
+	FILE *f = fopen(path,"r");
+
+	if(!f) {
+		marslog(LOG_EROR|LOG_PERR,"%s",path);
+		setError(1,"READ: unable to open file!");
+		return;
+	}
+
+	fclose(f);
+
+
+
+	if(strcmp(name,"GRIB") == 0)
+	  {
+	    Retrieve::marsServe(in,out);
+
+	    // Check whether the request should be sorted.
+	    const char *field_order = in("ORDER");
+	    if ( field_order && strcmp(field_order,"1") == 0 )
+	      {
+
+		marslog(LOG_DBUG, "============== Before sorting:");
+		out.print();
+
+		MvFieldSet fs(out);
+		MvFieldSetIterator ii(fs);
+		MvField ff;
+		MvRequest one_field;
+
+		out.unsetParam("OFFSET");
+		out.unsetParam("LENGTH");
+
+		ii.sort("PARAM");
+		ii.sort("LEVELIST");
+		ii.sort("LEVTYPE");
+		ii.sort("NUMBER");
+		ii.sort("_DIAGITER");
+		ii.sort("STEP");
+		ii.sort("TIME");
+		ii.sort("DATE");
+		while ( ff = ii() )
+		  {
+		    one_field = ff.getRequest();
+		    out.addValue("OFFSET",ff.getOffset() );
+		    out.addValue("LENGTH",ff.getLength() );
+		  }
+
+		marslog(LOG_DBUG, "============== After sorting:");
+		out.print();
+
+	      }
+	    else
+	      {
+		marslog(LOG_INFO, "READ: No sorting done");
+	      }
+	  }
+	else
+	{
+		out              = MvRequest(name);
+		out("PATH")      = path;
+		out("TEMPORARY") = temp;
+	}
+}
+
+void Retrieve::serve(MvRequest& in,MvRequest& out)
+{
+	// Make sure the request is clean...
+
+
+	marslog(LOG_DBUG, "--> request in -->");
+	in.print();
+
+    // in case we're in the mode where the standard Mars commands
+    // are being forwarded to the Mars/ecRegrid module, we need
+    // to change the verbs to what we understand
+	if( strcmp( in.getVerb(), "READ" ) == 0 )
+	{
+		marslog(LOG_INFO, "* Using ecRegrid module for Mars read() command");
+		in.setVerb("READ_ECREGRID");
+	}   
+	else if( strcmp( in.getVerb(), "RETRIEVE" ) == 0 )
+	{
+		marslog(LOG_INFO, "* Using ecRegrid module for Mars retrieve() command");
+		in.setVerb("RETRIEVE_ECREGRID");
+	}
+
+	reset_language(mars_language());
+	expand_flags(EXPAND_MARS);
+
+	MvRequest clean(
+		expand_all_requests(
+			mars_language(),
+			mars_rules(),
+//			in));
+			trim_all_requests(mars_language(),in)));
+
+	// Make sure we have a fieldset
+
+	clean("FIELDSET") = iconName();
+
+	marslog(LOG_DBUG, "<-- request out <--");
+	clean.print();
+
+	// Do the real job there
+
+	marsServe(clean,out);
+}
+
+int main(int argc,char **argv)
+{
+    // from the environment, check whether we're in 'standard', 'G2' or 'TIGGE' mode
+    // - note that 'G2' and 'TIGGE' are identical; TIGGE is really just the new name
+    // for G2, but G2 is retained for backwards compatibility.
+    
+    char *marsmode = getenv ("MV_MARS_MODE");
+    char *servicename = "marsEcRegrid";
+    
+
+	MvApplication theApp(argc,argv,servicename);
+
+	mars.appl     = servicename;
+
+	Retrieve r  ("RETRIEVE_ECREGRID");
+	Retrieve rn ("RETRIEVE");
+	Read     x  ("READ_ECREGRID");
+	Read     xn ("READ");
+//	Stage    y  ("STAGE");
+
+	theApp.run();
+}
diff --git a/src/MvApp/ObjectSpec.MarsEcRegrid b/src/MvApp/ObjectSpec.MarsEcRegrid
new file mode 100644
index 0000000..94ed59b
--- /dev/null
+++ b/src/MvApp/ObjectSpec.MarsEcRegrid
@@ -0,0 +1,51 @@
+
+object,
+	class		   = RETRIEVE_ECREGRID,
+	type		   = Data,
+	icon_box	   = Data access,
+	can_be_created	   = '$TRUE_IF_MARS_AVAILABLE',
+	definition_file	   = '$METVIEW_DIR_SHARE/etc/MarsEcRegridDef',
+	rules_file	   = '$METVIEW_DIR_SHARE/etc/MarsEcRegridRules',
+	default_name	   = ECREGRID Mars Retrieval,
+	help_page	   = MARS_Retrieval,
+	macro		   = retrieve_ecregrid,
+	editor_type	   = RetrieveEditor,
+	expand 		   = 16, # EXPAND_SECOND_NAME  #144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
+	pixmap 		   = '$METVIEW_DIR_SHARE/icons/RETRIEVE_ECREGRID.icon'
+
+
+object,
+	class		   = READ_ECREGRID,
+	can_be_created	   = True,
+	definition_file	   = '$METVIEW_DIR_SHARE/etc/MarsEcRegridDef',
+	rules_file	   = '$METVIEW_DIR_SHARE/etc/MarsEcRegridRules',
+	default_name	   = ECREGRID GRIB Filter,
+	help_page	   = ECREGRID_GRIB_Filter,
+	type		   = Data,
+        icon_box	   = Filters,
+	macro 		   = read_ecregrid,
+	editor_type	   = SimpleEditor,
+	expand 		   = 16, # EXPAND_SECOND_NAME  #144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
+	pixmap 		   = '$METVIEW_DIR_SHARE/icons/READ_ECREGRID.icon'
+
+
+
+state,
+	class	     = RETRIEVE_ECREGRID,
+	output_class = GRIB/BUFR/ODB_DB,
+	service      = marsEcRegrid
+
+state,
+	class        = READ_ECREGRID,
+	output_class = GRIB/BUFR/GEOPOINTS,
+	service      = marsEcRegrid
+
+service,
+	timeout  = $timeout,
+	name     = 'marsEcRegrid',
+	fullname = MarsECREGRID,
+	cmd      = "$metview_command $METVIEW_BIN/MarsEcRegridWrapper"
+
+
+####### READ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+#####################
diff --git a/src/MvApp/ObjectSpec.MarsOdb b/src/MvApp/ObjectSpec.MarsOdb
index a612aeb..16fcb38 100644
--- a/src/MvApp/ObjectSpec.MarsOdb
+++ b/src/MvApp/ObjectSpec.MarsOdb
@@ -2,7 +2,7 @@
 object,
 	class		   = RETRIEVE_ODB,
 	type		   = Data,
-	can_be_created	   = '$TRUE_IF_MARS_AVAILABLE',
+	can_be_created	   = False,
 	definition_file	   = '$METVIEW_DIR_SHARE/etc/MarsOdbDef',
 	rules_file	   = '$METVIEW_DIR_SHARE/etc/MarsOdbRules',
 	default_name	   = ODB Mars Retrieval,
diff --git a/src/MvApp/READ_ECREGRID.xpm b/src/MvApp/READ_ECREGRID.xpm
new file mode 100644
index 0000000..4006dec
--- /dev/null
+++ b/src/MvApp/READ_ECREGRID.xpm
@@ -0,0 +1,186 @@
+/* XPM */
+static char *READ_ECREGRID[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 148 2",
+"   c #000000",
+".  c #070000",
+"X  c #120000",
+"o  c #160000",
+"O  c #1B0000",
+"+  c #380000",
+"@  c #3F3A26",
+"#  c #670000",
+"$  c #6A0000",
+"%  c #7F0101",
+"&  c #7F0707",
+"*  c #750906",
+"=  c #720C08",
+"-  c #7F0F0F",
+";  c #67160E",
+":  c #681A09",
+">  c #7D1205",
+",  c #751616",
+"<  c #7E1010",
+"1  c #7E1818",
+"2  c #7E1A1A",
+"3  c #7E1F1F",
+"4  c #423824",
+"5  c #6E2323",
+"6  c #682F2F",
+"7  c #7D2323",
+"8  c #7D2525",
+"9  c #7D2929",
+"0  c #643838",
+"q  c #623D3D",
+"w  c #7D3030",
+"e  c #7C3131",
+"r  c #7B3E3E",
+"t  c #34531C",
+"y  c #1F5739",
+"u  c #36422B",
+"i  c #32462E",
+"p  c #34452D",
+"a  c #0E7D2B",
+"s  c #147628",
+"d  c #206924",
+"f  c #404618",
+"g  c #146140",
+"h  c #106542",
+"j  c #00734B",
+"k  c #5B4A4A",
+"l  c #555555",
+"z  c #7B4242",
+"x  c #7B4646",
+"c  c #7B4848",
+"v  c #7A4E4E",
+"b  c #7A5151",
+"n  c #795555",
+"m  c #795A5A",
+"M  c #795D5D",
+"N  c #796161",
+"B  c #796565",
+"V  c #786969",
+"C  c #786A6A",
+"Z  c #786C6C",
+"A  c #786F6F",
+"S  c #777373",
+"D  c #777474",
+"F  c #777777",
+"G  c #787070",
+"H  c #800000",
+"J  c #810303",
+"K  c #820606",
+"L  c #820A0A",
+"P  c #840F0F",
+"I  c #841010",
+"U  c #861515",
+"Y  c #871818",
+"T  c #881C1C",
+"R  c #8C1C1C",
+"E  c #892222",
+"W  c #8B2626",
+"Q  c #912929",
+"!  c #972F2F",
+"~  c #8F3737",
+"^  c #973737",
+"/  c #903838",
+"(  c #903B3B",
+")  c #913C3C",
+"_  c #924040",
+"`  c #9E4747",
+"'  c #954B4B",
+"]  c #975353",
+"[  c #985353",
+"{  c #985656",
+"}  c #995A5A",
+"|  c #9A5E5E",
+" . c #A04B4B",
+".. c #9B6161",
+"X. c #9C6262",
+"o. c #9D6767",
+"O. c #9E6A6A",
+"+. c #9F6F6F",
+"@. c #AE6D6D",
+"#. c #A07171",
+"$. c #A17575",
+"%. c #A27A7A",
+"&. c #A37D7D",
+"*. c #A47F7F",
+"=. c #B07171",
+"-. c #B27676",
+";. c #B57E7E",
+":. c #BF7F7F",
+">. c #06862E",
+",. c #008C30",
+"<. c #6CA631",
+"1. c #3D8585",
+"2. c #329B9B",
+"3. c #24B8B8",
+"4. c #06F3F3",
+"5. c #00FFFF",
+"6. c #A48080",
+"7. c #A58585",
+"8. c #A78989",
+"9. c #A88C8C",
+"0. c #A88F8F",
+"q. c #B68080",
+"w. c #BA8A8A",
+"e. c #AA9494",
+"r. c #AA9696",
+"t. c #AA9797",
+"y. c #AC9A9A",
+"u. c #AC9C9C",
+"i. c #AC9E9E",
+"p. c #BE9393",
+"a. c #BF9595",
+"s. c #AEA1A1",
+"d. c #AFA7A7",
+"f. c #B0AAAA",
+"g. c #B0ACAC",
+"h. c #B2B2B2",
+"j. c #C58B8B",
+"k. c #CB9797",
+"l. c #C09898",
+"z. c #C6A6A6",
+"x. c #CEB9B9",
+"c. c #D8B0B0",
+"v. c #D8D1D1",
+"b. c #DCD9D9",
+"n. c #DDDDDD",
+"m. c #EBD7D7",
+"M. c #ECD8D8",
+"N. c #FFFFFF",
+/* pixels */
+"N.                                                      N.N.N.N.",
+"  d.6.6.n 6.6.n F F F Z n v B F F F F F F F F F n.h.h.F   N.N.N.",
+"  8.H H H H H & F F z K % % H w F       F F F F n.h.h.h.F   N.N.",
+"  8.H ..F h.h.F F m % 8 B G 9 H O h.h.h.n.F F F n.h.h.h.h.F   N.",
+"  8.H _ v $.$.M F w % m F F S S   h.h.h.n.F F F n.h.h.h.h.h.F   ",
+"  8.H K & L L w F 8 H S F F F F   h.h.h.n.F F F n.h.h.h.h.h.h.  ",
+"  8.H ..F h.h.F F w H n F F B b . h.h.h.n.F F F n.h.h.h.h.h.h.  ",
+"  8.H | S g.g.S F n % 7 C Z 3 & o h.h.h.n.F F F n.h.h.h.h.h.h.  ",
+"  8.H H H H H H C F x & % H K x   h.h.h.n.F F F n.h.h.h.h.h.h.  ",
+"  r.] [ z 6.7.r c c c B n v x N F n.a.w.$.C F N z.i.+.#.0.h.h.  ",
+"  *.H H H ( h.E H H % N F - H H v F - H % & C o. .&.H H H $.h.  ",
+"  *.Y %.} H b.Q @.l.l.v.;.P w.` ^ n.R -.p.R ;.;. .&.Y $.~ W h.  ",
+"  *.E h.g.H s.E 6.h.h.h.~ } h.i.] g.U 0.h.' { ..( &.E h.i.% f.  ",
+"  *.T 0.o.P h.E ) } } h.E $.h.h.h.h.U +.7.U $.O.( &.W h.h.K y.  ",
+"  *.H H H ..l # H H H l P M M 2 2 C - H H 1 Z x 9 b 1 h.h.P 0.  ",
+"  *.U ' & . 5.6 i g g 5.$ 0 8.U H i.U ] P +.h.o.( &.W n.h.K e.  ",
+"  &.E   5 4 <.! 3.N.j 5.k @   h.H i.U 8.X.P h...( *.W n.d.H d.  ",
+"  6.$ j 1.> ,.! 2.m.s 4.j.= y + H i.U 8.s.H %.o.( &.T x.[ T h.  ",
+"  q ; <.a H d : H H H c.>.* H H , f.Y 0.h.( ( o.( *.H H % O.h.  ",
+"h.X p <.,.t d k.f f :.M.,.h 4 u . h.o.y.h.0.| 0.$.r.} =.&.h.h.  ",
+"l 5.j <.,.,.N.,.,.,.5.N.5.,.5.N.5.l h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  5.j <.,.,.,.,.5.N.N.N.5.5.j j j   h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  5.j <.,.,.,.,.N.N.5.N.5.<.j j j   h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  5.j <.,.,.,.,.5.N.N.N.5.<.j j j   h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  5.5.N.,.,.,.N.,.,.5.N.5.j j j j   h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"l 5.5.5.N.,.,.N.5.N.N.5.N.5.j j j l h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"h.  5.N.5.N.,.,.,.,.,.N.5.N.5.5.  h.h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  l 5.5.N.5.j j j j j 5.N.5.5.5.l h.h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  h.  5.5.N.5.j j j 5.5.5.5.5.  h.h.h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  h.h.  5.5.N.j j j 5.5.5.5.  h.h.h.h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"  h.h.h.l   5.j j j 5.5.  l h.h.h.h.h.h.h.h.h.h.h.h.h.n.h.h.h.  ",
+"N.        h.l         l h.                                    N."
+};
diff --git a/src/MvApp/RETRIEVE_ECREGRID.xpm b/src/MvApp/RETRIEVE_ECREGRID.xpm
new file mode 100644
index 0000000..43cef8e
--- /dev/null
+++ b/src/MvApp/RETRIEVE_ECREGRID.xpm
@@ -0,0 +1,216 @@
+/* XPM */
+static char *RETRIEVE_ECREGRID[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 178 2",
+"   c #1D202C",
+".  c #20232E",
+"X  c #2D242F",
+"o  c #222531",
+"O  c #262935",
+"+  c #2B2D39",
+"@  c #322834",
+"#  c #2E313C",
+"$  c #30333E",
+"%  c #571821",
+"&  c #622831",
+"*  c #383A45",
+"=  c #3B3E48",
+"-  c #7D135C",
+";  c #4D3E48",
+":  c #3D404B",
+">  c #41444E",
+",  c #434650",
+"<  c #464953",
+"1  c #494C58",
+"2  c #4E505A",
+"3  c #52555E",
+"4  c #59505B",
+"5  c #595C65",
+"6  c #5C5F68",
+"7  c #62656F",
+"8  c #666A73",
+"9  c #696B73",
+"0  c #7A6B73",
+"q  c #70737B",
+"w  c #B41518",
+"e  c #8D1C22",
+"r  c #861E28",
+"t  c #CE0708",
+"y  c #D40202",
+"u  c #D50B0B",
+"i  c #D61212",
+"p  c #D81616",
+"a  c #D81B1B",
+"s  c #D92424",
+"d  c #D62E2F",
+"f  c #DB2D2D",
+"g  c #DB2F30",
+"h  c #D63334",
+"j  c #DC3333",
+"k  c #DE3A3A",
+"l  c #AB3B40",
+"z  c #B33355",
+"x  c #994049",
+"c  c #BE4D6A",
+"v  c #C6464A",
+"b  c #D74546",
+"n  c #DD4343",
+"m  c #D34C4F",
+"M  c #DE5356",
+"N  c #E04646",
+"B  c #E04B4B",
+"V  c #E15353",
+"C  c #E35A5A",
+"Z  c #C86A6F",
+"A  c #E56363",
+"S  c #E66C6C",
+"D  c #E77272",
+"F  c #E87575",
+"G  c #E87A7A",
+"H  c #2924B4",
+"J  c #7B7780",
+"K  c #757982",
+"L  c #797B83",
+"P  c #4B43BC",
+"I  c #1329CB",
+"U  c #182DCC",
+"Y  c #1D32CD",
+"T  c #2837CA",
+"R  c #2539CF",
+"E  c #273BD0",
+"W  c #293DD0",
+"Q  c #2D40D1",
+"!  c #3648D3",
+"~  c #3A4CD3",
+"^  c #4354D5",
+"/  c #505ED5",
+"(  c #5262D9",
+")  c #5B6ADA",
+"_  c #616FDC",
+"`  c #6977DE",
+"'  c #6A78DE",
+"]  c #707EE0",
+"[  c #A179B2",
+"{  c #D47F83",
+"}  c #7F8BE3",
+"|  c #818289",
+" . c #868991",
+".. c #8A8C93",
+"X. c #929197",
+"o. c #90939B",
+"O. c #B5979D",
+"+. c #999CA5",
+"@. c #A0A1A6",
+"#. c #A3A5A9",
+"$. c #A8A9AE",
+"%. c #B5A0A8",
+"&. c #A5A8B0",
+"*. c #AAACB5",
+"=. c #BEABB3",
+"-. c #B3B5BA",
+";. c #D0868B",
+":. c #CD8D92",
+">. c #C8979D",
+",. c #EA8282",
+"<. c #E58D8F",
+"1. c #EB8A8A",
+"2. c #E69192",
+"3. c #EC9191",
+"4. c #EE9A9A",
+"5. c #C19EA5",
+"6. c #C1A7AE",
+"7. c #DFA4A7",
+"8. c #C5B3BA",
+"9. c #C1B8BF",
+"0. c #D6B1B5",
+"q. c #EFA0A0",
+"w. c #EBABAD",
+"e. c #F0A4A4",
+"r. c #F1ABAB",
+"t. c #F2B4B4",
+"y. c #F3BCBC",
+"u. c #A990C7",
+"i. c #B4B7C0",
+"p. c #B6B9C1",
+"a. c #BBBDC4",
+"s. c #828EE3",
+"d. c #8B96E6",
+"f. c #8F99E6",
+"g. c #939DE7",
+"h. c #959EE8",
+"j. c #97A1E8",
+"k. c #A1A9EA",
+"l. c #ABB3EC",
+"z. c #B1B1E6",
+"x. c #B4BBEE",
+"c. c #D1AEC8",
+"v. c #BFC0C3",
+"b. c #BDC1C9",
+"n. c #C2C6CE",
+"m. c #D0C6CD",
+"M. c #DECACE",
+"N. c #C5C8D1",
+"B. c #CCCED3",
+"V. c #D3D5DB",
+"C. c #D7D9DF",
+"Z. c #DBDBDD",
+"A. c #E2CACE",
+"S. c #F5C3C3",
+"D. c #F4C6C8",
+"F. c #F6CBCB",
+"G. c #E4CCDB",
+"H. c #F8D4D4",
+"J. c #F0D8D9",
+"K. c #F9DBDB",
+"L. c #DBDDE1",
+"P. c #C3C9F2",
+"I. c #D0D4F4",
+"U. c #D6DAF6",
+"Y. c #E1E2E4",
+"T. c #E5E6E9",
+"R. c #E9EAED",
+"E. c #FAE4E4",
+"W. c #FBEBEB",
+"Q. c #EEEEF3",
+"!. c #E0E3F8",
+"~. c #EAECFA",
+"^. c #F1EBF3",
+"/. c #EEF0FB",
+"(. c #F3F3F4",
+"). c #FDF3F3",
+"_. c #F5F5FA",
+"`. c #FEFEFE",
+/* pixels */
+"`.`.`.`.`.`.`.`.`.`.(.-.q 2 = o + , 5 ..V.`.`.`.`.`.`.`.`.`.`.`.",
+"`.`.`.`.`.`.`.`.L.8 O O K &.-.b.a.-.+.3   : @.`.`.`.`.`.`.`.`.`.",
+"`.`.`.`.`.`.(.| o 7 b.N.L.R.(._.(.Q.T.V.b.*.$ : a.`.`.`.`.`.`.`.",
+"`.`.`.`.`.Y.> < a.V.J.A B V K.`.`.`.`.`.W.n >.+.. ..`.`.`.`.`.`.",
+"`.`.`.`.B.# q N.(.W.s n r.B w.`.`.`.`.`.S i i b =.+ 9 `.`.`.`.`.",
+"`.`.`.Y.# o.B._.`.e.y ).`.`.`.`.`.`.`.F.y 4.).A i 8.= L `.`.`.`.",
+"`.`.(.< q B.`.`.`.q.y W.`.`.H.D.`.`.`.j y B F.H.y w.b.O #.`.`.`.",
+"`.`.| 1 N._.`.`.`.K.y G `.`.n S `.`.1.y S.N u y M ).R.i.o T.`.`.",
+"`.T.. p.(.`.`.`.`.`.G y A M u [ j.I.g F `.3.s `.`.`.`.C.8 q `.`.",
+"`.q 6 { N `.`.`.`.`.`.w.z - H I I I T z.`.q.y ).`.`.`.(.b.  Z.`.",
+"_.O a.s 4.).j W.`.).!.~ I ^ h.P.x.s.R I ' D.y E.`.`.`.`.Z.8 ..`.",
+"n.+ :.p `.1.k `.S.p / I s.`.`.`.`.`.~.( I j.E.).`.`.`.F.2.v ; `.",
+"q [ h j F.a w.`.V c I ` `.`.`.`.`.`.`._.Q Y !.F.S j y y p u % L.",
+"2 #.<.d y y 4.F.y P R ~.`.`.`.`.`.`.`.`.x.I s.r.u G G s `.m e a.",
+"= v.(.`.F.A u y C I ) `.`.`.`.`.`.`.`.`.`.I ( E.y ).E.y W.;.w $.",
+"o v.`.`.`.`.).4.c.I s.`.`.`.`.`.`.`.`.`.`.~ W `.a t.`.s w.y.t X.",
+"O b.`.`.`.`.`.`.U.I } `.`.`.`.`.`.`.`.`.`.! W `.C G `.S.E.T.J o.",
+": a._.`.`.F.e.H.`.U ( `.`.`.`.`.`.`.`.`._.I ) `.K.K.`.`.`.L.5 $.",
+"3 -.(.S.f y i y { ^ Y !.`.`.`.`.`.`.`.`.k.I d.`.`.`.`.`.`.C.: v.",
+"J  .A.u B H.`.H.y c.I ( `.`.`.`.`.`.`.~.R E ~.`.K.K.`.`.`.n.O Y.",
+"v.* ;.a `.`.`.`.C A _ I ) /.`.`.`.`.I.! I l.K.j y y k H._.-.> `.",
+"_.O 5.u W.`.r.B y s ~.) I W ] k.g.) U U f.).a A E.t.k a M.K ..`.",
+"`.q q d n p y V t.`.`.D u.Q I I I U ^ I.`.4.p `.S.`.W.p Z O Z.`.",
+"`.T.O Z s 1.E.`.`.`.1.y F.E.G.x.P.^.S.).`.G u S i E.`.h l q `.`.",
+"`.`.| 5 B.`.`.`.`.H.y 1.`.3.y S.`.H.y F.`.).A y y.W.4.t @ T.`.`.",
+"`.`.(., ..L.`.`._.g k `.`.`.B p W.H.y F.`.`.`.K.H.y i & #.`.`.`.",
+"`.`.`.Y.# &.L.`.G u K.`.`.`.W.s s C y S.`.`.`.`.(.8.4 J `.`.`.`.",
+"`.`.`.`.B.# o.m.a 4.`.`.`.`.f n ,.G y S.`.`.`.Q.n., 9 `.`.`.`.`.",
+"`.`.`.`.`.Y., 8 c.Y._.`.`.H.y t.`.W.y y.`._.V.-.$ ..`.`.`.`.`.`.",
+"`.`.`.`.`.`.(.| O ..b.C.Q.`.N y u i y 7.B.a.1 @ & x x x x x x x ",
+"`.`.`.`.`.`.`.`.Z.9 O 1 +.p.a.9.6.6.%.q * X & r r r r r r r r r ",
+"`.`.`.`.`.`.`.`.`.`.(.-.q 3 * . + > 6 0 O.0.0.0.0.0.0.0.0.0.0.0."
+};
diff --git a/src/MvApp/geo_to_grib.cc b/src/MvApp/geo_to_grib.cc
index 02ca7e5..64e7fad 100644
--- a/src/MvApp/geo_to_grib.cc
+++ b/src/MvApp/geo_to_grib.cc
@@ -168,7 +168,7 @@ double ToMatrix::value(float lat, float lon)
 	    {
 		float   pi_lat = gp_iter->lat_y();
 
-		if( ( lat - pi_lat ) > Tolerance  )
+		if( ( fabs(lat - pi_lat) ) > Tolerance  )
 		  continue;
 
 		float pi_lon = gp_iter->lon_x();
@@ -373,6 +373,9 @@ void GeoToGRIB::serve( MvRequest& in, MvRequest& out )
       return;
     }
 
+  unlink(path.c_str());  // remove the temporary LLMATRIX file
+
+
   MvRequest grib    = "GRIB";
   grib("PATH")      = tmp.c_str();
   grib("TEMPORARY") = 1;
diff --git a/src/NcExaminer/Makefile.in b/src/NcExaminer/Makefile.in
index 12a2891..5607b14 100644
--- a/src/NcExaminer/Makefile.in
+++ b/src/NcExaminer/Makefile.in
@@ -175,6 +175,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -190,6 +191,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -216,11 +219,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/NcExaminer/MvMain.cc b/src/NcExaminer/MvMain.cc
index 78bfd10..27bf214 100644
--- a/src/NcExaminer/MvMain.cc
+++ b/src/NcExaminer/MvMain.cc
@@ -56,10 +56,13 @@ in.print();
 	//Listen to the mars event loop!
 	setupSocketNotifier();
 	
-	// Send reply to MetviewUI
+	// Send reply to MetviewUI (but not to MvExamineManager)
 	// To turn icon to green; otherwise, it will stay orange
-	MvRequest req;
-	sendReplyFromInteractive(req);
+	if( strcmp( getenv("METVIEW_MODE"), "examine" ) != 0 )
+	{
+		MvRequest req;
+		sendReplyFromInteractive(req);
+	}
 
 	//Enter the app loop
 	app.exec();
@@ -75,6 +78,7 @@ int main( int argc, char **argv )
 	MvNcExaminer nc1("NETCDF");
 	MvNcExaminer nc2("SCM_INPUT_DATA");
 	MvNcExaminer nc3("SCM_OUTPUT_DATA");
+	MvNcExaminer nc4("NETCDF_RTTOV_INPUT");
 	
 	theApp.run();
 }
diff --git a/src/NcExaminer/NcExaminer.cc b/src/NcExaminer/NcExaminer.cc
index 45437ad..ccdff62 100644
--- a/src/NcExaminer/NcExaminer.cc
+++ b/src/NcExaminer/NcExaminer.cc
@@ -301,7 +301,7 @@ void NcExaminer::showDumpBox()
 {
 	stringstream in, err;
 
-	string buf = "ncdump " + data_->path();
+	string buf = "ncdump '" + data_->path() + "'";
 
 	// Send initial info to the log area
 	LogItem *log = new LogItem;
diff --git a/src/ObsFilter/Makefile.in b/src/ObsFilter/Makefile.in
index 01f8ab0..664f0dc 100644
--- a/src/ObsFilter/Makefile.in
+++ b/src/ObsFilter/Makefile.in
@@ -151,6 +151,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -166,6 +167,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -192,11 +195,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/Obstat/Makefile.in b/src/Obstat/Makefile.in
index 3894ee5..6bde5e3 100644
--- a/src/Obstat/Makefile.in
+++ b/src/Obstat/Makefile.in
@@ -143,6 +143,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -158,6 +159,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -184,11 +187,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/ObstatCurveTool/Makefile.am b/src/ObstatCurveTool/Makefile.am
index 635fd61..5c57a07 100644
--- a/src/ObstatCurveTool/Makefile.am
+++ b/src/ObstatCurveTool/Makefile.am
@@ -8,7 +8,7 @@ bin_ObstatCurveTool_SOURCES =  MvMain.cc \
 	MvQObstatCurveData.cc MvQObstatCurveData.h
 
 bin_ObstatCurveTool_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS)
-bin_ObstatCurveTool_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) $(MAGPLUS_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil $(METVIEW_NETCDF_FLAGS)
+bin_ObstatCurveTool_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) -I../libMvQtGui -I../libMvQtUtil $(METVIEW_NETCDF_FLAGS)
 bin_ObstatCurveTool_LDFLAGS  = $(QT_LDFLAGS) $(LDFLAGS) $(ODB_LDFLAGS)
 bin_ObstatCurveTool_LDADD    = $(MAGPLUS_LIB) $(LDADD) $(STANDARD_METVIEW_LIBS) $(FLIBS) ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a  $(METVIEW_NETCDF_LIB)  $(ODB_LIBS) $(QT_LIBS)
 bin_ObstatCurveTool_DEPENDENCIES = ../../lib/libMvQtGui.a  ../../lib/libMvQtUtil.a ../../lib/libUtil.a 
diff --git a/src/ObstatCurveTool/Makefile.in b/src/ObstatCurveTool/Makefile.in
index c073589..f197ff9 100644
--- a/src/ObstatCurveTool/Makefile.in
+++ b/src/ObstatCurveTool/Makefile.in
@@ -199,6 +199,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -214,6 +215,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -240,11 +243,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -385,7 +391,7 @@ bin_ObstatCurveTool_SOURCES = MvMain.cc \
 	MvQObstatCurveData.cc MvQObstatCurveData.h
 
 bin_ObstatCurveTool_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS)
-bin_ObstatCurveTool_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) $(MAGPLUS_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil $(METVIEW_NETCDF_FLAGS)
+bin_ObstatCurveTool_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) -I../libMvQtGui -I../libMvQtUtil $(METVIEW_NETCDF_FLAGS)
 bin_ObstatCurveTool_LDFLAGS = $(QT_LDFLAGS) $(LDFLAGS) $(ODB_LDFLAGS)
 bin_ObstatCurveTool_LDADD = $(MAGPLUS_LIB) $(LDADD) $(STANDARD_METVIEW_LIBS) $(FLIBS) ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a  $(METVIEW_NETCDF_LIB)  $(ODB_LIBS) $(QT_LIBS)
 bin_ObstatCurveTool_DEPENDENCIES = ../../lib/libMvQtGui.a  ../../lib/libMvQtUtil.a ../../lib/libUtil.a 
diff --git a/src/ObstatScatterTool/Makefile.in b/src/ObstatScatterTool/Makefile.in
index 38ccbcc..67974b8 100644
--- a/src/ObstatScatterTool/Makefile.in
+++ b/src/ObstatScatterTool/Makefile.in
@@ -199,6 +199,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -214,6 +215,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -240,11 +243,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/Odb/Makefile.am b/src/Odb/Makefile.am
index 836e290..c15c492 100644
--- a/src/Odb/Makefile.am
+++ b/src/Odb/Makefile.am
@@ -21,7 +21,6 @@ bin_OdbVisualiser_DEPENDENCIES = ../../lib/libUtil.a ../../lib/libMetview.a
 
 sharedir    = $(datadir)/metview/etc
 local_sharedir = ../../share/metview/etc
-local_iconsdir = ../../share/metview/icons
 share_DATA = $(local_sharedir)/ObjectSpec.Odb \
 	     $(local_sharedir)/OdbFilterDef $(local_sharedir)/OdbFilterRules \
 	     $(local_sharedir)/OdbVisualiserDef $(local_sharedir)/OdbVisualiserRules
@@ -32,18 +31,11 @@ share_DATA = $(local_sharedir)/ObjectSpec.Odb \
 $(share_DATA): $(local_sharedir)/%: %
 	${INSTALL} $<  $(local_sharedir)
 
-icons = $(local_iconsdir)/ODB_FILTER.xpm \
-	$(local_iconsdir)/ODB_VISUALISER.xpm
+CLEANFILES = $(share_DATA)
 
-$(icons): $(local_iconsdir)/%: %
-	${INSTALL} $<  $(local_iconsdir)
+BUILT_SOURCES = bin 
 
-CLEANFILES = $(share_DATA) $(icons)
-
-
-BUILT_SOURCES = bin $(icons)
-
-EXTRA_DIST = ODB_FILTER.xpm ODB_VISUALISER.xpm ObjectSpec.Odb OdbFilterDef OdbFilterRules OdbVisualiserDef OdbVisualiserRules 
+EXTRA_DIST = ObjectSpec.Odb OdbFilterDef OdbFilterRules OdbVisualiserDef OdbVisualiserRules 
 
 bin:
 	ln -s ../../bin bin
diff --git a/src/Odb/Makefile.in b/src/Odb/Makefile.in
index 04b8ced..f5d7b55 100644
--- a/src/Odb/Makefile.in
+++ b/src/Odb/Makefile.in
@@ -149,6 +149,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -164,6 +165,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -190,11 +193,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -338,17 +344,13 @@ bin_OdbVisualiser_LDADD = $(STANDARD_METVIEW_LIBS) ../../lib/libUtil.a  $(FLIBS)
 bin_OdbVisualiser_DEPENDENCIES = ../../lib/libUtil.a ../../lib/libMetview.a
 sharedir = $(datadir)/metview/etc
 local_sharedir = ../../share/metview/etc
-local_iconsdir = ../../share/metview/icons
 share_DATA = $(local_sharedir)/ObjectSpec.Odb \
 	     $(local_sharedir)/OdbFilterDef $(local_sharedir)/OdbFilterRules \
 	     $(local_sharedir)/OdbVisualiserDef $(local_sharedir)/OdbVisualiserRules
 
-icons = $(local_iconsdir)/ODB_FILTER.xpm \
-	$(local_iconsdir)/ODB_VISUALISER.xpm
-
-CLEANFILES = $(share_DATA) $(icons)
-BUILT_SOURCES = bin $(icons)
-EXTRA_DIST = ODB_FILTER.xpm ODB_VISUALISER.xpm ObjectSpec.Odb OdbFilterDef OdbFilterRules OdbVisualiserDef OdbVisualiserRules 
+CLEANFILES = $(share_DATA)
+BUILT_SOURCES = bin 
+EXTRA_DIST = ObjectSpec.Odb OdbFilterDef OdbFilterRules OdbVisualiserDef OdbVisualiserRules 
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
@@ -741,9 +743,6 @@ uninstall-am: uninstall-binPROGRAMS uninstall-shareDATA
 $(share_DATA): $(local_sharedir)/%: %
 	${INSTALL} $<  $(local_sharedir)
 
-$(icons): $(local_iconsdir)/%: %
-	${INSTALL} $<  $(local_iconsdir)
-
 bin:
 	ln -s ../../bin bin
 
diff --git a/src/Odb/ODB_FILTER.xpm b/src/Odb/ODB_FILTER.xpm
deleted file mode 100755
index 361d945..0000000
--- a/src/Odb/ODB_FILTER.xpm
+++ /dev/null
@@ -1,590 +0,0 @@
-/* XPM */
-static char * ODB_FILTER_xpm[] = {
-"32 32 555 2",
-"  	c None",
-". 	c #FFFFFF",
-"+ 	c #F4F5FA",
-"@ 	c #D4D9EC",
-"# 	c #B4BDDD",
-"$ 	c #95A3CF",
-"% 	c #8A98CA",
-"& 	c #8191C6",
-"* 	c #7888C2",
-"= 	c #7083BF",
-"- 	c #7082BF",
-"; 	c #7183BF",
-"> 	c #798AC3",
-", 	c #8392C7",
-"' 	c #8E9CCC",
-") 	c #98A4D1",
-"! 	c #B5BDDE",
-"~ 	c #D6DAEC",
-"{ 	c #FEFEFE",
-"] 	c #D1D6EA",
-"^ 	c #8694C8",
-"/ 	c #697BBB",
-"( 	c #6F81BD",
-"_ 	c #7E91C1",
-": 	c #8BA1C5",
-"< 	c #9CB2CC",
-"[ 	c #A4BBD0",
-"} 	c #ABC4D3",
-"| 	c #B4CCD6",
-"1 	c #BAD4DA",
-"2 	c #BDD7DC",
-"3 	c #BFDADE",
-"4 	c #C1DBDF",
-"5 	c #BFD7DD",
-"6 	c #BAD0DA",
-"7 	c #B5CAD9",
-"8 	c #B0C2D6",
-"9 	c #9DAFCE",
-"0 	c #899AC8",
-"a 	c #7384BF",
-"b 	c #6C7EBD",
-"c 	c #8C9ACB",
-"d 	c #D5DAEC",
-"e 	c #B6BEDE",
-"f 	c #6A7CBC",
-"g 	c #788BBE",
-"h 	c #94AAC5",
-"i 	c #A8BDCC",
-"j 	c #AAC0CE",
-"k 	c #ACC3D0",
-"l 	c #AFC6D1",
-"m 	c #B1C9D3",
-"n 	c #B4CCD5",
-"o 	c #B6CFD7",
-"p 	c #B9D2D9",
-"q 	c #BBD5DB",
-"r 	c #BDD8DD",
-"s 	c #C0DBDF",
-"t 	c #C2DBDF",
-"u 	c #C4DCDF",
-"v 	c #C7DCE0",
-"w 	c #C9DDE0",
-"x 	c #CCDEE0",
-"y 	c #CEDEE0",
-"z 	c #D0DFE1",
-"A 	c #D3DFE1",
-"B 	c #D4E0E1",
-"C 	c #BAC5D7",
-"D 	c #8795C6",
-"E 	c #7282BF",
-"F 	c #BFC6E2",
-"G 	c #C3CAE4",
-"H 	c #7183BB",
-"I 	c #9DB2C6",
-"J 	c #A4B9C9",
-"K 	c #A6BBCA",
-"L 	c #A8BECC",
-"M 	c #ABC1CE",
-"N 	c #ADC4D0",
-"O 	c #B0C7D2",
-"P 	c #B2CAD4",
-"Q 	c #B4CDD6",
-"R 	c #B7D0D8",
-"S 	c #B9D3DA",
-"T 	c #BCD6DC",
-"U 	c #BED9DD",
-"V 	c #C3DBDF",
-"W 	c #C5DCDF",
-"X 	c #C8DDE0",
-"Y 	c #CADDE0",
-"Z 	c #CFDEE1",
-"` 	c #D1DFE1",
-" .	c #D6E0E2",
-"..	c #D8E1E2",
-"+.	c #DAE1E2",
-"@.	c #D4DAE0",
-"#.	c #7C8BC2",
-"$.	c #CFD4E9",
-"%.	c #5F71B7",
-"&.	c #97ACC3",
-"*.	c #A2B6C7",
-"=.	c #A7BCCB",
-"-.	c #A9BFCD",
-";.	c #ACC2CF",
-">.	c #AEC5D1",
-",.	c #B0C8D3",
-"'.	c #B3CBD5",
-").	c #B5CED6",
-"!.	c #B8D1D8",
-"~.	c #BCD7DC",
-"{.	c #C6DCDF",
-"].	c #CBDDE0",
-"^.	c #CDDEE0",
-"/.	c #D2DFE1",
-"(.	c #D9E1E2",
-"_.	c #DBE1E2",
-":.	c #DDE2E3",
-"<.	c #CAD0DC",
-"[.	c #6878BB",
-"}.	c #5568B4",
-"|.	c #6175B5",
-"1.	c #97AAC5",
-"2.	c #A5BACA",
-"3.	c #A7BDCC",
-"4.	c #ACC3CF",
-"5.	c #B8D2D9",
-"6.	c #C7DCDF",
-"7.	c #D5E0E1",
-"8.	c #D7E0E2",
-"9.	c #DCE2E2",
-"0.	c #C4CBD9",
-"a.	c #6476B6",
-"b.	c #5F70B6",
-"c.	c #596DB3",
-"d.	c #7691B2",
-"e.	c #5A6FB3",
-"f.	c #6377B7",
-"g.	c #879CC3",
-"h.	c #AFC7D2",
-"i.	c #BCD6DB",
-"j.	c #CEDEE1",
-"k.	c #D0DADF",
-"l.	c #A3AECE",
-"m.	c #6376B6",
-"n.	c #5A6CAF",
-"o.	c #868DA9",
-"p.	c #5D6FB4",
-"q.	c #5B6FB5",
-"r.	c #8EB0B3",
-"s.	c #98B8BB",
-"t.	c #87A2BC",
-"u.	c #6F86BB",
-"v.	c #5D70B5",
-"w.	c #5C70B6",
-"x.	c #687BBA",
-"y.	c #768DBF",
-"z.	c #8AA1C7",
-"A.	c #95ACCC",
-"B.	c #A2BBD1",
-"C.	c #B1CBD8",
-"D.	c #BFD9DD",
-"E.	c #C5DADE",
-"F.	c #BACFDB",
-"G.	c #AEC1D5",
-"H.	c #A3B5D0",
-"I.	c #97A9CC",
-"J.	c #8292C3",
-"K.	c #677BB9",
-"L.	c #586DB3",
-"M.	c #596DB2",
-"N.	c #6277AE",
-"O.	c #687FA0",
-"P.	c #8B979E",
-"Q.	c #A5A4A4",
-"R.	c #8FB0B4",
-"S.	c #A2C0C3",
-"T.	c #ABC8CA",
-"U.	c #B5D0D2",
-"V.	c #B7D0D7",
-"W.	c #A7BED4",
-"X.	c #91A7CE",
-"Y.	c #7E94C5",
-"Z.	c #7289C0",
-"`.	c #697EBB",
-" +	c #6075B7",
-".+	c #5A70B6",
-"++	c #576DB4",
-"@+	c #5A6FB5",
-"#+	c #5F74B5",
-"$+	c #647BB8",
-"%+	c #6B82B9",
-"&+	c #6F89BA",
-"*+	c #7C95BA",
-"=+	c #86A5B8",
-"-+	c #8BAAB2",
-";+	c #84A1A9",
-">+	c #7A95A0",
-",+	c #738C98",
-"'+	c #8D989E",
-")+	c #A7A4A4",
-"!+	c #8FB1B4",
-"~+	c #99B9BC",
-"{+	c #A2C1C3",
-"]+	c #ACC9CB",
-"^+	c #B5D1D3",
-"/+	c #BFD8DA",
-"(+	c #C8E0E2",
-"_+	c #D0E7E8",
-":+	c #CCE4E5",
-"<+	c #C9E2E2",
-"[+	c #C5DFDF",
-"}+	c #C1DCDD",
-"|+	c #BDD9DA",
-"1+	c #BAD6D7",
-"2+	c #B6D3D4",
-"3+	c #B2D0D1",
-"4+	c #AECECE",
-"5+	c #ABCBCB",
-"6+	c #A7C8C8",
-"7+	c #A3C5C5",
-"8+	c #9FC2C2",
-"9+	c #97B8BB",
-"0+	c #8DACB1",
-"a+	c #83A0A8",
-"b+	c #79949F",
-"c+	c #768D99",
-"d+	c #90999F",
-"e+	c #A9A6A5",
-"f+	c #5D70B4",
-"g+	c #90B1B5",
-"h+	c #9AB9BC",
-"i+	c #A3C1C4",
-"j+	c #B6D1D3",
-"k+	c #BFD9DB",
-"l+	c #C9E1E2",
-"m+	c #C8E1E2",
-"n+	c #C5DEDF",
-"o+	c #C1DCDC",
-"p+	c #BDD9D9",
-"q+	c #B9D6D6",
-"r+	c #899FA6",
-"s+	c #6E7F89",
-"t+	c #6D7E88",
-"u+	c #6B7C86",
-"v+	c #697B84",
-"w+	c #647580",
-"x+	c #556472",
-"y+	c #5A6876",
-"z+	c #546272",
-"A+	c #54606F",
-"B+	c #616672",
-"C+	c #6F6C76",
-"D+	c #464F7D",
-"E+	c #F2F2F3",
-"F+	c #556AB3",
-"G+	c #8EAEB5",
-"H+	c #9ABABD",
-"I+	c #A4C2C4",
-"J+	c #ADCACC",
-"K+	c #B6D2D4",
-"L+	c #C0DADB",
-"M+	c #C9E1E3",
-"N+	c #C4DEDF",
-"O+	c #C1DBDC",
-"P+	c #B5D3D3",
-"Q+	c #B2D0D0",
-"R+	c #626C79",
-"S+	c #71717D",
-"T+	c #8D8D96",
-"U+	c #39394C",
-"V+	c #84848E",
-"W+	c #3C3C52",
-"X+	c #E4E4E6",
-"Y+	c #5468B1",
-"Z+	c #647DB3",
-"`+	c #96B6BD",
-" @	c #A4C2C5",
-".@	c #AECACD",
-"+@	c #B7D2D4",
-"@@	c #C1DADC",
-"#@	c #CAE2E3",
-"$@	c #CFE7E8",
-"%@	c #B9D3D4",
-"&@	c #B6D0D1",
-"*@	c #B1D0D0",
-"=@	c #A9A9AF",
-"-@	c #DBDBDB",
-";@	c #454557",
-">@	c #CACACC",
-",@	c #4B4C62",
-"'@	c #5A6DB5",
-")@	c #6D87B4",
-"!@	c #576DB3",
-"~@	c #768EBA",
-"{@	c #A6C2CB",
-"]@	c #B8D3D5",
-"^@	c #CBE3E4",
-"/@	c #CFE6E7",
-"(@	c #CBE4E4",
-"_@	c #AAC3C2",
-":@	c #303A32",
-"<@	c #A7C0C0",
-"[@	c #B5D2D3",
-"}@	c #616C79",
-"|@	c #464658",
-"1@	c #C9C9CB",
-"2@	c #4B4C61",
-"3@	c #5A6EB5",
-"4@	c #94B4BB",
-"5@	c #7D96BB",
-"6@	c #5D73B6",
-"7@	c #6076B7",
-"8@	c #788EC1",
-"9@	c #9BB1D2",
-"0@	c #B8CFDD",
-"a@	c #C7E0E1",
-"b@	c #C4DEDE",
-"c@	c #121B10",
-"d@	c #1F2D1D",
-"e@	c #96AEAD",
-"f@	c #B1CFD0",
-"g@	c #474759",
-"h@	c #C8C8CB",
-"i@	c #99B8BC",
-"j@	c #ABC8CB",
-"k@	c #ADC7D0",
-"l@	c #9DB6CE",
-"m@	c #8CA1C9",
-"n@	c #7286C0",
-"o@	c #5F74B7",
-"p@	c #5D71B7",
-"q@	c #5E71B8",
-"r@	c #576CA4",
-"s@	c #1A2F17",
-"t@	c #38AD14",
-"u@	c #172517",
-"v@	c #4C5D85",
-"w@	c #454D70",
-"x@	c #313144",
-"y@	c #343447",
-"z@	c #343448",
-"A@	c #353549",
-"B@	c #2B2B40",
-"C@	c #36364A",
-"D@	c #3A3A4D",
-"E@	c #3C3C4E",
-"F@	c #3D3D50",
-"G@	c #313247",
-"H@	c #90B1B4",
-"I@	c #98B4B6",
-"J@	c #869D9D",
-"K@	c #91A6A7",
-"L@	c #9AB0B0",
-"M@	c #A5BBB9",
-"N@	c #AFC2C2",
-"O@	c #AFC4C4",
-"P@	c #AFC6C6",
-"Q@	c #AFC6C7",
-"R@	c #96ACAE",
-"S@	c #1E3318",
-"T@	c #48EA16",
-"U@	c #3FC514",
-"V@	c #1C2E17",
-"W@	c #3D4749",
-"X@	c #DADADA",
-"Y@	c #48485A",
-"Z@	c #C4C4C6",
-"`@	c #D6D6D7",
-" #	c #D4D4D5",
-".#	c #D2D2D3",
-"+#	c #494A5F",
-"@#	c #90B2B5",
-"##	c #7A9191",
-"$#	c #1A2A15",
-"%#	c #28521D",
-"&#	c #294D1C",
-"*#	c #274B1E",
-"=#	c #27471E",
-"-#	c #25441D",
-";#	c #24401C",
-">#	c #223B1C",
-",#	c #21381B",
-"'#	c #245016",
-")#	c #43D815",
-"!#	c #1D3D14",
-"~#	c #4E564C",
-"{#	c #D8D8D8",
-"]#	c #4A4A5B",
-"^#	c #C6C6C8",
-"/#	c #5D71B6",
-"(#	c #84A2B5",
-"_#	c #9BBABD",
-":#	c #7B9191",
-"<#	c #2A5B1C",
-"[#	c #47E415",
-"}#	c #275B18",
-"|#	c #434E3F",
-"1#	c #D1D1D1",
-"2#	c #49495B",
-"3#	c #C5C5C8",
-"4#	c #5367B2",
-"5#	c #566CB3",
-"6#	c #6D84B7",
-"7#	c #798E90",
-"8#	c #3BB914",
-"9#	c #141D10",
-"0#	c #373846",
-"a#	c #3F3F51",
-"b#	c #3E3E51",
-"c#	c #2C2C41",
-"d#	c #38384C",
-"e#	c #37374A",
-"f#	c #38394E",
-"g#	c #86A5B3",
-"h#	c #6D86B5",
-"i#	c #435384",
-"j#	c #25561A",
-"k#	c #3CBE15",
-"l#	c #1A2616",
-"m#	c #A5A6A5",
-"n#	c #D3D3D4",
-"o#	c #D4D4D4",
-"p#	c #C0C0C3",
-"q#	c #D9D9D9",
-"r#	c #748B8F",
-"s#	c #1D3B15",
-"t#	c #318F13",
-"u#	c #319312",
-"v#	c #329712",
-"w#	c #339B13",
-"x#	c #359E13",
-"y#	c #35A313",
-"z#	c #36A713",
-"A#	c #38AA13",
-"B#	c #39B113",
-"C#	c #3DC214",
-"D#	c #162312",
-"E#	c #838486",
-"F#	c #4C4C5D",
-"G#	c #C3C3C6",
-"H#	c #8DA8A9",
-"I#	c #576862",
-"J#	c #586860",
-"K#	c #57685E",
-"L#	c #54675C",
-"M#	c #4D5D57",
-"N#	c #42544F",
-"O#	c #3D4E49",
-"P#	c #374843",
-"Q#	c #31433E",
-"R#	c #12190F",
-"S#	c #3FC614",
-"T#	c #182716",
-"U#	c #3E4557",
-"V#	c #A6A6AC",
-"W#	c #4D4D5E",
-"X#	c #131910",
-"Y#	c #3FC915",
-"Z#	c #1C2C17",
-"`#	c #839998",
-" $	c #2C2C40",
-".$	c #323246",
-"+$	c #38384B",
-"@$	c #36364B",
-"#$	c #ADC9CC",
-"$$	c #C0D9DB",
-"%$	c #141C10",
-"&$	c #809693",
-"*$	c #4E4E5F",
-"=$	c #C1C1C4",
-"-$	c #D5D5D6",
-";$	c #4A4B5F",
-">$	c #5D72B5",
-",$	c #88A7B6",
-"'$	c #C0DBDC",
-")$	c #1B2319",
-"!$	c #7F9490",
-"~$	c #CDD2E8",
-"{$	c #6275B6",
-"]$	c #86A4BB",
-"^$	c #A5C3C5",
-"/$	c #AECBCD",
-"($	c #CAE2E4",
-"_$	c #CFE7E7",
-":$	c #CBE4E5",
-"<$	c #879C9B",
-"[$	c #B9D5D6",
-"}$	c #757581",
-"|$	c #92929B",
-"1$	c #3F3F52",
-"2$	c #82828C",
-"3$	c #424255",
-"4$	c #D4D8EB",
-"5$	c #7D8CC3",
-"6$	c #677AB8",
-"7$	c #8DA5C3",
-"8$	c #AEC8D1",
-"9$	c #C2DBDC",
-"0$	c #C7E1E1",
-"a$	c #BCD8D9",
-"b$	c #B8D5D6",
-"c$	c #869CA2",
-"d$	c #6A7A84",
-"e$	c #697883",
-"f$	c #677781",
-"g$	c #657680",
-"h$	c #60707C",
-"i$	c #4C5565",
-"j$	c #525E71",
-"k$	c #4B5773",
-"l$	c #485079",
-"m$	c #585F82",
-"n$	c #808394",
-"o$	c #93939D",
-"p$	c #F1F1F2",
-"q$	c #DFE4F1",
-"r$	c #96A3D0",
-"s$	c #6F7FBE",
-"t$	c #6377BA",
-"u$	c #7D8FC4",
-"v$	c #95ABCE",
-"w$	c #A6BDD5",
-"x$	c #ACC4D6",
-"y$	c #B0CAD6",
-"z$	c #B5D0D7",
-"A$	c #B9D4D7",
-"B$	c #B4D2D3",
-"C$	c #AECCCF",
-"D$	c #A3C1CA",
-"E$	c #9BB9C6",
-"F$	c #91B0C2",
-"G$	c #89A7BE",
-"H$	c #7B94B9",
-"I$	c #6C82B8",
-"J$	c #5E72B5",
-"K$	c #6D7EBD",
-"L$	c #99A6D1",
-"M$	c #E6E8F3",
-"N$	c #F9F9FC",
-"O$	c #D6DBED",
-"P$	c #B1BBDC",
-"Q$	c #96A3D1",
-"R$	c #8A97CA",
-"S$	c #7D8DC4",
-"T$	c #677ABA",
-"U$	c #6175B7",
-"V$	c #6275B9",
-"W$	c #687BBB",
-"X$	c #7182BF",
-"Y$	c #7C8EC3",
-"Z$	c #8796C9",
-"`$	c #94A2CE",
-" %	c #B3BDDC",
-".%	c #DBDEEE",
-"+%	c #FBFBFD",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . + @ # $ % & * = - = ; > , ' ) ! ~ + . . . . . . . ",
-". . . { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d . . . . ",
-". . e f g h i j k l m n o p q r s t u v w x y z A B C D E F . . ",
-". G H I J K L M N O P Q R S T U s V W X Y x Z ` A  ...+. at .#.$.. ",
-"{ %.&.*.J =.-.;.>.,.'.).!.1 ~.3 4 u {.X ].^.Z /.B  .(._.:.<.[.. ",
-". }.|.1.2.3.j 4.l m n o 5.q r s t u 6.w ].y z /.7.8.(.9.0.a.b.. ",
-". c.d.e.f.g.3.N h.P Q R S i.U s V W v Y x j.` A  .k.l.m.n.o.p.. ",
-". q.r.s.t.u.v.w.x.y.z.A.B.C.D.4 V E.F.G.H.I.J.K.L.M.N.O.P.Q.p.. ",
-". q.R.s.S.T.U.V.W.X.Y.Z.`. +.+++++ at +#+$+%+&+*+=+-+;+>+,+'+)+p.. ",
-". q.!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+. ",
-". q.g+h+i+]+j+k+l+_+:+m+n+o+p+q+2+3+r+s+t+u+v+w+x+y+z+A+B+C+D+E+",
-". F+G+H+I+J+K+L+M+_+:+m+N+O+p+q+P+Q+R+S+T+T+T+T+U+V+T+T+T+T+W+X+",
-". Y+Z+`+ @. at +@@@#@$@:+m+N+%@&@q+P+*@R+=@- at -@- at -@;@>@- at -@- at -@, at X+",
-". '@)@!@~@{@]@O+^@/@(@m+N+_@:@<@[@*@}@=@- at -@- at -@|@1 at -@- at -@- at 2@X+",
-". 3 at r.4@5 at 6@7 at 8@9 at 0@M+a at b@_ at c@d at e@f@}@=@- at -@- at -@g at h@- at -@- at -@2 at X+",
-". 3@!+i at S.j@k at l@m at n@o at p@q at r@s at t@u at v@w at x@y at y@z at A@B at C@U+D at E@F at G@X+",
-". 3 at H@~+I at J@K at L@M at N@O at P@Q at R@S at T@U at V@W@=@- at -@- at X@Y at Z@`@ # #.#+#X+",
-". 3@@#H+##$#%#&#*#=#-#;#>#,#'#T at T@)#!#~#{#- at -@-@]#^#- at -@- at -@2 at X+",
-". /#(#_#:#<#T at T@T at T@T at T@T at T@T at T@T at T@[#}#|#1#- at -@2#3#- at -@- at -@2 at X+",
-". 4#5#6#7#<#T at T@T at T@T at T@T at T@T at T@T at T@T at 8#9#0#a#b#c#U+D at d#e#A at f#X+",
-". '@g#h#i#j#T at T@T at T@T at T@T at T@T at T@T at T@k#l#m#n#o# #]#p#{#q#q#X at 2@X+",
-". 3 at r.s.r#s#t#u#v#w#x#y#z#A#B#T at T@C#D#E#- at -@- at -@F#G#- at -@- at -@2 at X+",
-". 3 at R.s.H#I#J#K#L#M#N#O#P#Q#R#T at S#T#U#V#q#- at -@- at W#G#- at -@- at -@2 at X+",
-". 3 at H@~+i+]+^+/+(+_+:+<+[+}+X#Y#Z#`#R+z at A@z at y@y@ $.$A at +$D at E@@$X+",
-". 3@@#H+i+#$j+$$l+_+:+m+N+o+%$V@&$3+R+=@- at -@- at -@*$=$X@{#-$ #;$X+",
-". >$,$_# @J++ at L+#@$@:+m+N+'$)$!$P+*@R+=@- at -@- at -@*$p#- at -@- at -@2 at X+",
-". ~${$]$^$/$+@@@($_$:$m+N+'$<$[$P+*@}@}$|$|$|$|$1$2$|$|$|$|$3$X+",
-". . 4$5$6$7$8$9$^@/@^@0$N+'$a$b$[@*@c$d$e$f$g$h$i$j$k$l$m$n$o$p$",
-". . . . q$r$s$t$u$v$w$x$y$z$A$b$B$C$D$E$F$G$H$I$J$K$L$M$. . . . ",
-". . . . . . . N$O$P$Q$R$S$; T$U$V$W$X$Y$Z$`$ %.%+%. . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
diff --git a/src/Odb/ODB_VISUALISER.xpm b/src/Odb/ODB_VISUALISER.xpm
deleted file mode 100644
index 139e759..0000000
--- a/src/Odb/ODB_VISUALISER.xpm
+++ /dev/null
@@ -1,577 +0,0 @@
-/* XPM */
-static char * ODB_MANAGER_xpm[] = {
-"32 32 542 2",
-"  	c None",
-". 	c #FFFFFF",
-"+ 	c #F4F5FA",
-"@ 	c #D4D9EC",
-"# 	c #B4BDDD",
-"$ 	c #95A3CF",
-"% 	c #8A98CA",
-"& 	c #8191C6",
-"* 	c #7888C2",
-"= 	c #7083BF",
-"- 	c #7082BF",
-"; 	c #7183BF",
-"> 	c #798AC3",
-", 	c #8392C7",
-"' 	c #8E9CCC",
-") 	c #98A4D1",
-"! 	c #B5BDDE",
-"~ 	c #D6DAEC",
-"{ 	c #FEFEFE",
-"] 	c #D1D6EA",
-"^ 	c #8694C8",
-"/ 	c #697BBB",
-"( 	c #6F81BD",
-"_ 	c #7E91C1",
-": 	c #8BA1C5",
-"< 	c #9CB2CC",
-"[ 	c #A4BBD0",
-"} 	c #ABC4D3",
-"| 	c #B4CCD6",
-"1 	c #BAD4DA",
-"2 	c #BDD7DC",
-"3 	c #BFDADE",
-"4 	c #C1DBDF",
-"5 	c #BFD7DD",
-"6 	c #BAD0DA",
-"7 	c #B5CAD9",
-"8 	c #B0C2D6",
-"9 	c #9DAFCE",
-"0 	c #899AC8",
-"a 	c #7384BF",
-"b 	c #6C7EBD",
-"c 	c #8C9ACB",
-"d 	c #D5DAEC",
-"e 	c #B6BEDE",
-"f 	c #6A7CBC",
-"g 	c #788BBE",
-"h 	c #94AAC5",
-"i 	c #A8BDCC",
-"j 	c #AAC0CE",
-"k 	c #ACC3D0",
-"l 	c #AFC6D1",
-"m 	c #B1C9D3",
-"n 	c #B4CCD5",
-"o 	c #B6CFD7",
-"p 	c #B9D2D9",
-"q 	c #BBD5DB",
-"r 	c #BDD8DD",
-"s 	c #C0DBDF",
-"t 	c #C2DBDF",
-"u 	c #C4DCDF",
-"v 	c #C7DCE0",
-"w 	c #C9DDE0",
-"x 	c #CCDEE0",
-"y 	c #CEDEE0",
-"z 	c #D0DFE1",
-"A 	c #D3DFE1",
-"B 	c #D4E0E1",
-"C 	c #BAC5D7",
-"D 	c #8795C6",
-"E 	c #7282BF",
-"F 	c #BFC6E2",
-"G 	c #C3CAE4",
-"H 	c #7183BB",
-"I 	c #9DB2C6",
-"J 	c #A4B9C9",
-"K 	c #A6BBCA",
-"L 	c #A8BECC",
-"M 	c #ABC1CE",
-"N 	c #ADC4D0",
-"O 	c #B0C7D2",
-"P 	c #B2CAD4",
-"Q 	c #B4CDD6",
-"R 	c #B7D0D8",
-"S 	c #B9D3DA",
-"T 	c #BCD6DC",
-"U 	c #BED9DD",
-"V 	c #C3DBDF",
-"W 	c #C5DCDF",
-"X 	c #C8DDE0",
-"Y 	c #CADDE0",
-"Z 	c #CFDEE1",
-"` 	c #D1DFE1",
-" .	c #D6E0E2",
-"..	c #D8E1E2",
-"+.	c #DAE1E2",
-"@.	c #D4DAE0",
-"#.	c #7C8BC2",
-"$.	c #CFD4E9",
-"%.	c #5F71B7",
-"&.	c #97ACC3",
-"*.	c #A2B6C7",
-"=.	c #A7BCCB",
-"-.	c #A9BFCD",
-";.	c #ACC2CF",
-">.	c #AEC5D1",
-",.	c #B0C8D3",
-"'.	c #B3CBD5",
-").	c #B5CED6",
-"!.	c #B8D1D8",
-"~.	c #BCD7DC",
-"{.	c #C6DCDF",
-"].	c #CBDDE0",
-"^.	c #CDDEE0",
-"/.	c #D2DFE1",
-"(.	c #D9E1E2",
-"_.	c #DBE1E2",
-":.	c #DDE2E3",
-"<.	c #CAD0DC",
-"[.	c #6878BB",
-"}.	c #5568B4",
-"|.	c #6175B5",
-"1.	c #97AAC5",
-"2.	c #A5BACA",
-"3.	c #A7BDCC",
-"4.	c #ACC3CF",
-"5.	c #B8D2D9",
-"6.	c #C7DCDF",
-"7.	c #D5E0E1",
-"8.	c #D7E0E2",
-"9.	c #DCE2E2",
-"0.	c #C4CBD9",
-"a.	c #6476B6",
-"b.	c #5F70B6",
-"c.	c #596DB3",
-"d.	c #7691B2",
-"e.	c #5A6FB3",
-"f.	c #6377B7",
-"g.	c #879CC3",
-"h.	c #AFC7D2",
-"i.	c #BCD6DB",
-"j.	c #CEDEE1",
-"k.	c #D0DADF",
-"l.	c #A3AECE",
-"m.	c #6376B6",
-"n.	c #5A6CAF",
-"o.	c #868DA9",
-"p.	c #5D6FB4",
-"q.	c #5B6FB5",
-"r.	c #8EB0B3",
-"s.	c #98B8BB",
-"t.	c #87A2BC",
-"u.	c #6F86BB",
-"v.	c #5D70B5",
-"w.	c #5C70B6",
-"x.	c #687BBA",
-"y.	c #768DBF",
-"z.	c #8AA1C7",
-"A.	c #95ACCC",
-"B.	c #A2BBD1",
-"C.	c #B1CBD8",
-"D.	c #BFD9DD",
-"E.	c #C5DADE",
-"F.	c #BACFDB",
-"G.	c #AEC1D5",
-"H.	c #A3B5D0",
-"I.	c #97A9CC",
-"J.	c #8292C3",
-"K.	c #677BB9",
-"L.	c #586DB3",
-"M.	c #596DB2",
-"N.	c #6277AE",
-"O.	c #687FA0",
-"P.	c #8B979E",
-"Q.	c #A5A4A4",
-"R.	c #8FB0B4",
-"S.	c #A2C0C3",
-"T.	c #ABC8CA",
-"U.	c #B5D0D2",
-"V.	c #B7D0D7",
-"W.	c #A7BED4",
-"X.	c #91A7CE",
-"Y.	c #7E94C5",
-"Z.	c #7289C0",
-"`.	c #697EBB",
-" +	c #6075B7",
-".+	c #5A70B6",
-"++	c #576DB4",
-"@+	c #5A6FB5",
-"#+	c #5F74B5",
-"$+	c #647BB8",
-"%+	c #6B82B9",
-"&+	c #6F89BA",
-"*+	c #7C95BA",
-"=+	c #86A5B8",
-"-+	c #8BAAB2",
-";+	c #84A1A9",
-">+	c #7A95A0",
-",+	c #738C98",
-"'+	c #8D989E",
-")+	c #A7A4A4",
-"!+	c #8FB1B4",
-"~+	c #99B9BC",
-"{+	c #A2C1C3",
-"]+	c #ACC9CB",
-"^+	c #B5D1D3",
-"/+	c #BFD8DA",
-"(+	c #C8E0E2",
-"_+	c #D0E7E8",
-":+	c #CCE4E5",
-"<+	c #C9E2E2",
-"[+	c #C5DFDF",
-"}+	c #C1DCDD",
-"|+	c #BDD9DA",
-"1+	c #BAD6D7",
-"2+	c #B6D3D4",
-"3+	c #B2D0D1",
-"4+	c #AECECE",
-"5+	c #ABCBCB",
-"6+	c #A7C8C8",
-"7+	c #A3C5C5",
-"8+	c #9FC2C2",
-"9+	c #97B8BB",
-"0+	c #8DACB1",
-"a+	c #83A0A8",
-"b+	c #79949F",
-"c+	c #768D99",
-"d+	c #90999F",
-"e+	c #A9A6A5",
-"f+	c #5D70B4",
-"g+	c #90B1B5",
-"h+	c #9AB9BC",
-"i+	c #A3C1C4",
-"j+	c #B6D1D3",
-"k+	c #BFD9DB",
-"l+	c #C9E1E2",
-"m+	c #C8E1E2",
-"n+	c #C5DEDF",
-"o+	c #C1DCDC",
-"p+	c #BDD9D9",
-"q+	c #B9D6D6",
-"r+	c #AECDCE",
-"s+	c #AACBCB",
-"t+	c #96B8BA",
-"u+	c #8CABB1",
-"v+	c #829FA7",
-"w+	c #78939E",
-"x+	c #788E99",
-"y+	c #919A9F",
-"z+	c #ABA6A5",
-"A+	c #556AB3",
-"B+	c #8EAEB5",
-"C+	c #9ABABD",
-"D+	c #A4C2C4",
-"E+	c #ADCACC",
-"F+	c #B6D2D4",
-"G+	c #C0DADB",
-"H+	c #C9E1E3",
-"I+	c #C4DEDF",
-"J+	c #B6CFCF",
-"K+	c #A2BAB9",
-"L+	c #9EB8B6",
-"M+	c #9BB5B4",
-"N+	c #99B3B1",
-"O+	c #95B0AF",
-"P+	c #92ADAD",
-"Q+	c #8EABAB",
-"R+	c #8CA9A8",
-"S+	c #89A7A6",
-"T+	c #809D9E",
-"U+	c #789396",
-"V+	c #6F898F",
-"W+	c #677E87",
-"X+	c #697C84",
-"Y+	c #7E8689",
-"Z+	c #948F8F",
-"`+	c #596AB0",
-" @	c #5468B1",
-".@	c #647DB3",
-"+@	c #96B6BD",
-"@@	c #A4C2C5",
-"#@	c #AECACD",
-"$@	c #B7D2D4",
-"%@	c #C1DADC",
-"&@	c #CAE2E3",
-"*@	c #CFE7E8",
-"=@	c #7F908D",
-"-@	c #1D221B",
-";@	c #2F332D",
-">@	c #2E332D",
-",@	c #2E332C",
-"'@	c #2E322C",
-")@	c #2D322C",
-"!@	c #2D312B",
-"~@	c #2C312B",
-"{@	c #2C302A",
-"]@	c #2B302A",
-"^@	c #2B2F2A",
-"/@	c #272B27",
-"(@	c #1D2222",
-"_@	c #E4E5E4",
-":@	c #5A6DB5",
-"<@	c #6D87B4",
-"[@	c #576DB3",
-"}@	c #768EBA",
-"|@	c #A6C2CB",
-"1@	c #B8D3D5",
-"2@	c #C1DBDC",
-"3@	c #CBE3E4",
-"4@	c #CFE6E7",
-"5@	c #CBE4E4",
-"6@	c #313731",
-"7@	c #B4B2AE",
-"8@	c #E7E4E0",
-"9@	c #5F615D",
-"0@	c #939591",
-"a@	c #5A6EB5",
-"b@	c #94B4BB",
-"c@	c #7D96BB",
-"d@	c #5D73B6",
-"e@	c #6076B7",
-"f@	c #788EC1",
-"g@	c #9BB1D2",
-"h@	c #B8CFDD",
-"i@	c #C7E0E1",
-"j@	c #272D27",
-"k@	c #CCCAC6",
-"l@	c #5B606D",
-"m@	c #B8B7B9",
-"n@	c #E68280",
-"o@	c #E6B9B6",
-"p@	c #7B7C76",
-"q@	c #878985",
-"r@	c #99B8BC",
-"s@	c #ABC8CB",
-"t@	c #ADC7D0",
-"u@	c #9DB6CE",
-"v@	c #8CA1C9",
-"w@	c #7286C0",
-"x@	c #5F74B7",
-"y@	c #5D71B7",
-"z@	c #202524",
-"A@	c #535966",
-"B@	c #B3B3B6",
-"C@	c #E6B0AD",
-"D@	c #E52626",
-"E@	c #E67573",
-"F@	c #90B1B4",
-"G@	c #BFD9DA",
-"H@	c #555A68",
-"I@	c #B1B2B4",
-"J@	c #E7E1DD",
-"K@	c #E54646",
-"L@	c #E68381",
-"M@	c #E54443",
-"N@	c #E7DFDB",
-"O@	c #E69B99",
-"P@	c #E7DAD7",
-"Q@	c #90B2B5",
-"R@	c #ADC9CC",
-"S@	c #C0D9DB",
-"T@	c #555C69",
-"U@	c #B1B0B3",
-"V@	c #E69694",
-"W@	c #E65655",
-"X@	c #E7E2DE",
-"Y@	c #E53333",
-"Z@	c #E6C1BE",
-"`@	c #E65150",
-" #	c #E54645",
-".#	c #E7CDCA",
-"+#	c #5D71B6",
-"@#	c #84A2B5",
-"##	c #9BBABD",
-"$#	c #575D6A",
-"%#	c #AFAFB2",
-"&#	c #E7D8D4",
-"*#	c #E53837",
-"=#	c #E56261",
-"-#	c #E52D2D",
-";#	c #E68583",
-">#	c #E68F8D",
-",#	c #E63838",
-"'#	c #5367B2",
-")#	c #566CB3",
-"!#	c #6D84B7",
-"~#	c #A1BEC3",
-"{#	c #AECBCD",
-"]#	c #CAE2E4",
-"^#	c #CFE7E7",
-"/#	c #CBE4E5",
-"(#	c #595E6C",
-"_#	c #ADAEB0",
-":#	c #E67B79",
-"<#	c #E6706F",
-"[#	c #E7C6C3",
-"}#	c #E7AEAB",
-"|#	c #E6AAA7",
-"1#	c #E54544",
-"2#	c #86A5B3",
-"3#	c #6D86B5",
-"4#	c #576CB3",
-"5#	c #687DB8",
-"6#	c #869DC4",
-"7#	c #B0C9D6",
-"8#	c #C7E1E1",
-"9#	c #ABACAF",
-"0#	c #E64040",
-"a#	c #E7D2CF",
-"b#	c #9AB9C1",
-"c#	c #8BA5C1",
-"d#	c #7990BF",
-"e#	c #667ABB",
-"f#	c #778DC1",
-"g#	c #222725",
-"h#	c #5C616E",
-"i#	c #AAABAE",
-"j#	c #BED8DA",
-"k#	c #C5DEE0",
-"l#	c #B6CCDD",
-"m#	c #A1B8D3",
-"n#	c #97AFCF",
-"o#	c #232825",
-"p#	c #565B69",
-"q#	c #424959",
-"r#	c #49505E",
-"s#	c #494F5F",
-"t#	c #484E5E",
-"u#	c #474E5D",
-"v#	c #464D5C",
-"w#	c #454C5B",
-"x#	c #444B5B",
-"y#	c #B5B5B7",
-"z#	c #2F352F",
-"A#	c #B9B8B3",
-"B#	c #CAC8C8",
-"C#	c #BCBCBD",
-"D#	c #BDBCBE",
-"E#	c #BDBDBD",
-"F#	c #BEBEBE",
-"G#	c #BFBEBF",
-"H#	c #C0BFC0",
-"I#	c #C1C0C1",
-"J#	c #C2C1C1",
-"K#	c #DBD9D7",
-"L#	c #656762",
-"M#	c #90928F",
-"N#	c #788885",
-"O#	c #1E221C",
-"P#	c #3C403A",
-"Q#	c #3B403A",
-"R#	c #3B4039",
-"S#	c #343832",
-"T#	c #1D211B",
-"U#	c #31362F",
-"V#	c #383D37",
-"W#	c #383C37",
-"X#	c #383C36",
-"Y#	c #393C37",
-"Z#	c #353832",
-"`#	c #191E1B",
-" $	c #E1E2E1",
-".$	c #5D72B5",
-"+$	c #88A7B6",
-"@$	c #ADC6C6",
-"#$	c #8DA1A0",
-"$$	c #839997",
-"%$	c #819795",
-"&$	c #7E9592",
-"*$	c #7C9291",
-"=$	c #627572",
-"-$	c #252924",
-";$	c #494A47",
-">$	c #272B26",
-",$	c #4F6160",
-"'$	c #5D7375",
-")$	c #566A6F",
-"!$	c #59686E",
-"~$	c #6A7072",
-"{$	c #7F7C80",
-"]$	c #5F6FB1",
-"^$	c #CDD2E8",
-"/$	c #6275B6",
-"($	c #86A4BB",
-"_$	c #A5C3C5",
-":$	c #61706C",
-"<$	c #1F241F",
-"[$	c #29302A",
-"}$	c #292F29",
-"|$	c #252B25",
-"1$	c #1C201B",
-"2$	c #1C201A",
-"3$	c #242923",
-"4$	c #262C27",
-"5$	c #272C27",
-"6$	c #1C201D",
-"7$	c #7D818B",
-"8$	c #D4D8EB",
-"9$	c #7D8CC3",
-"0$	c #677AB8",
-"a$	c #8DA5C3",
-"b$	c #AEC8D1",
-"c$	c #C2DBDC",
-"d$	c #BED7D7",
-"e$	c #1B211A",
-"f$	c #AEBEC3",
-"g$	c #B6C6CC",
-"h$	c #9CAAAE",
-"i$	c #2A2E28",
-"j$	c #DFE4F1",
-"k$	c #96A3D0",
-"l$	c #6F7FBE",
-"m$	c #6377BA",
-"n$	c #7D8FC4",
-"o$	c #95ABCE",
-"p$	c #A6BDD5",
-"q$	c #ACC4D6",
-"r$	c #B0CAD6",
-"s$	c #2B322D",
-"t$	c #626C6D",
-"u$	c #7D898A",
-"v$	c #555E5C",
-"w$	c #525650",
-"x$	c #F9F9FC",
-"y$	c #D6DBED",
-"z$	c #B1BBDC",
-"A$	c #96A3D1",
-"B$	c #8A97CA",
-"C$	c #7D8DC4",
-"D$	c #6474A6",
-"E$	c #3B465F",
-"F$	c #353F54",
-"G$	c #384155",
-"H$	c #3A4456",
-"I$	c #3E4758",
-"J$	c #424A59",
-"K$	c #47505C",
-"L$	c #525860",
-"M$	c #606466",
-"N$	c #6B6E6C",
-"O$	c #6C706C",
-"P$	c #898A87",
-"Q$	c #E8E9E8",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . + @ # $ % & * = - = ; > , ' ) ! ~ + . . . . . . . ",
-". . . { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d . . . . ",
-". . e f g h i j k l m n o p q r s t u v w x y z A B C D E F . . ",
-". G H I J K L M N O P Q R S T U s V W X Y x Z ` A  ...+. at .#.$.. ",
-"{ %.&.*.J =.-.;.>.,.'.).!.1 ~.3 4 u {.X ].^.Z /.B  .(._.:.<.[.. ",
-". }.|.1.2.3.j 4.l m n o 5.q r s t u 6.w ].y z /.7.8.(.9.0.a.b.. ",
-". c.d.e.f.g.3.N h.P Q R S i.U s V W v Y x j.` A  .k.l.m.n.o.p.. ",
-". q.r.s.t.u.v.w.x.y.z.A.B.C.D.4 V E.F.G.H.I.J.K.L.M.N.O.P.Q.p.. ",
-". q.R.s.S.T.U.V.W.X.Y.Z.`. +.+++++ at +#+$+%+&+*+=+-+;+>+,+'+)+p.. ",
-". q.!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+. ",
-". q.g+h+i+]+j+k+l+_+:+m+n+o+p+q+2+3+r+s+6+7+8+t+u+v+w+x+y+z+f+. ",
-". A+B+C+D+E+F+G+H+_+:+m+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+`+. ",
-".  @. at +@@@#@$@%@&@*@:+m+=@-@;@>@>@>@,@'@'@)@)@!@~@{@]@^@{@/@(@_@",
-". :@<@[@}@|@1 at 2@3 at 4@5 at m+6@7 at 8@8 at 8@8 at 8@8 at 8@8 at 8@8 at 8@8 at 8@8 at 8@8 at 9@0@",
-". a at r.b@c at d@e at f@g at h@H+i at j@k at l@m at 8@8 at 8@8 at n@o at 8@8 at 8@8 at 8@8 at 8@8 at p@q@",
-". a@!+r at S.s@t at u@v at w@x at y@z at k@A at B@8 at 8@8 at C@D at E@8 at 8@8 at 8@8 at 8@8 at 8@p at q@",
-". a at F@~+i+]+j+G at m+_+:+m+j at k@H at I@8 at 8@J at K@L at M@8 at N@O at P@8 at 8@8 at 8@p at q@",
-". a at Q@C+i+R at j+S@l+_+:+m+j at k@T at U@8 at 8@V at W@X at Y@Z@`@ #K at .#8 at 8@8 at p@q@",
-". +#@###@@E+$@G+&@*@:+m+j at k@$#%#8@&#*#Z at 8@=#-#;#8@>#,#o at 8@8 at p@q@",
-". '#)#!#~#{#$@%@]#^#/#m+j at k@(#_#8@:#<#8 at 8@[#}#8 at 8@8@|#1#8 at 8@p at q@",
-". :@2#3#4#5#6#7#3 at 4@3 at 8#j at k@l at 9#8 at 0#a#8 at 8@8 at 8@8 at 8@8 at 8@8 at 8@8 at p@q@",
-". a at r.s.b#c#d#f.:@e#w at f#g#k at h#i#8 at 8@8 at 8@8 at 8@8 at 8@8 at 8@8 at 8@8 at 8@p at q@",
-". a at R.s.S.T.U.j#k#l#m#n#o#k at p#q#r#r#s#s#t#t#u#u#v#v#w#x#x#y#p at q@",
-". a at F@~+i+]+^+/+(+_+:+<+z#A#B#C#D#D#E#E#F#F#G#G#H#H#I#J#J#K#L#M#",
-". a at Q@C+i+R at j+S@l+_+:+m+N#O#P#P#Q#Q#R#S#T#O#O#T#U#V#W#X#Y#Z#`# $",
-". .$+$##@@E+$@G+&@*@:+m+I+@$#$$$%$&$*$=$-$;$;$>$,$'$)$!$~${$]$. ",
-". ^$/$($_${#$@%@]#^#/#m+I+:$<$[$[$[$}$|$1$O#O#2$3$j at 4$4$5$6$7$. ",
-". . 8$9$0$a$b$c$3 at 4@3 at 8#d$e$f$g$g$g$g$g$g$g$g$g$g$g$g$g$g$h$i$. ",
-". . . . j$k$l$m$n$o$p$q$r$s$t$u$u$u$u$u$u$u$u$u$u$u$u$u$u$v$w$. ",
-". . . . . . . x$y$z$A$B$C$D$E$F$F$G$H$I$J$K$L$M$N$O$O$O$O$P$Q$. ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
diff --git a/src/Odb/ObjectSpec.Odb b/src/Odb/ObjectSpec.Odb
index 1837a52..a1c2fdd 100644
--- a/src/Odb/ObjectSpec.Odb
+++ b/src/Odb/ObjectSpec.Odb
@@ -27,6 +27,7 @@ object,
 	rules_file          = '$METVIEW_DIR_SHARE/etc/OdbFilterRules',
 	default_name        = 'ODB Filter',		
 	type                = Data,
+        icon_box	    = Filters,
 	expand	            = 75,	
 	macro               = odb_filter,
 	editor_type	    = SimpleEditor,	
@@ -43,6 +44,7 @@ object,
 	rules_file          = '$METVIEW_DIR_SHARE/etc/OdbVisualiserRules',
 	default_name        = 'Odb Visualiser',
 	type                = Data,
+        icon_box	    = Visualisers,
 	expand	            = 75, 
 	macro               = odb_visualiser,
 	editor_type         = SimpleEditor,
diff --git a/src/OdbExaminer/Makefile.in b/src/OdbExaminer/Makefile.in
index a3a1aff..9273c68 100644
--- a/src/OdbExaminer/Makefile.in
+++ b/src/OdbExaminer/Makefile.in
@@ -201,6 +201,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -216,6 +217,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -242,11 +245,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/OgcClient/Makefile.in b/src/OgcClient/Makefile.in
index 436811c..961880a 100644
--- a/src/OgcClient/Makefile.in
+++ b/src/OgcClient/Makefile.in
@@ -229,6 +229,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -244,6 +245,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -270,11 +273,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/OgcClient/MvQWmsClient.cc b/src/OgcClient/MvQWmsClient.cc
index 3440ee4..5d0df3c 100644
--- a/src/OgcClient/MvQWmsClient.cc
+++ b/src/OgcClient/MvQWmsClient.cc
@@ -515,8 +515,12 @@ void MvQWmsGetClient::runGetMap()
 
 void MvQWmsGetClient::downloadGetMapFrame()
 {
-	qDebug() << "request" << getMapFrameToDownload_ << getMapRequest_->requestFrame(getMapFrameToDownload_);
-	getMapReply_ = networkGetMap_->get(QNetworkRequest(QUrl::fromPercentEncoding(getMapRequest_->requestFrame(getMapFrameToDownload_).toUtf8())));
+	//qDebug() << "request" << getMapFrameToDownload_ << getMapRequest_->requestFrame(getMapFrameToDownload_);
+	
+	QNetworkRequest  netReq(QUrl::fromPercentEncoding(getMapRequest_->requestFrame(getMapFrameToDownload_).toUtf8()));
+	//netReq.setRawHeader("Authorization", "Basic " + QByteArray(QString("%1:%2").arg("egows").arg("egows").toAscii()).toBase64());
+	
+	getMapReply_ = networkGetMap_->get(netReq);
 }
 
 void MvQWmsGetClient::downloadLegend()
@@ -525,7 +529,9 @@ void MvQWmsGetClient::downloadLegend()
 	{
 		//qDebug() << "legend" << QUrl::fromPercentEncoding(legendPath_.toAscii());
 	  
-	  	legendReply_=networkLegend_->get(QNetworkRequest(QUrl::fromPercentEncoding(legendPath_.toUtf8())));
+		QNetworkRequest netReq(QUrl::fromPercentEncoding(legendPath_.toUtf8()));
+		//netReq.setRawHeader("Authorization", "Basic " + QByteArray(QString("%1:%2").arg("egows").arg("egows").toAscii()).toBase64());	
+	  	legendReply_=networkLegend_->get(netReq);
 	}
 	else
 	{
@@ -1096,7 +1102,11 @@ void MvQWmsUiClient::slotRunGetCapabilities()
 
 	emit statusMessage(tr("Load GetCapabilitites ..."));
 	
-	getCapReply_ = networkGetCap_->get(QNetworkRequest(QUrl::fromPercentEncoding(r.toUtf8())));
+	QUrl  url=QUrl::fromPercentEncoding(r.toUtf8());
+	QNetworkRequest nr(url);
+	//nr.setRawHeader("Authorization", "Basic " + QByteArray(QString("%1:%2").arg("egows").arg("egows").toAscii()).toBase64());
+	
+	getCapReply_ = networkGetCap_->get(QNetworkRequest(nr));
 }
 
 
@@ -1138,7 +1148,10 @@ void MvQWmsUiClient::downloadPreview(QSize previewSize)
 	emit statusMessage(tr("Load preview ..."));
 
 	QNetworkRequest netReq(QUrl::fromPercentEncoding(req.request().toUtf8()));
-	netReq.setOriginatingObject(this);
+	netReq.setOriginatingObject(this);	
+	//netReq.setRawHeader("Authorization", "Basic " + QByteArray(QString("%1:%2").arg("egows").arg("egows").toAscii()).toBase64());
+	
+	
 	previewReply_=networkPreview_->get(netReq);
 }
 
@@ -1159,6 +1172,7 @@ void MvQWmsUiClient::downloadLegend()
 		qDebug() << "downloadLegend --> request:" << style_->currentLegend();
 		QNetworkRequest netReq(QUrl::fromPercentEncoding(style_->currentLegend().toUtf8()));		
 		netReq.setOriginatingObject(this);
+		//netReq.setRawHeader("Authorization", "Basic " + QByteArray(QString("%1:%2").arg("egows").arg("egows").toAscii()).toBase64());
 		legendReply_=networkLegend_->get(netReq);			
 	}
 	else
@@ -1185,6 +1199,7 @@ void MvQWmsUiClient::downloadLogo()
 		qDebug() << "downloadLogo --> request:" << node->logo();
 		QNetworkRequest netReq(QUrl::fromPercentEncoding(node->logo().toUtf8()));		
 		netReq.setOriginatingObject(this);
+		//netReq.setRawHeader("Authorization", "Basic " + QByteArray(QString("%1:%2").arg("egows").arg("egows").toAscii()).toBase64());
 		logoReply_=networkLogo_->get(netReq);
 	}
 	else
@@ -1296,8 +1311,8 @@ void MvQWmsUiClient::slotSaveInfo()
 
 void MvQWmsUiClient::slotAuthentication(QNetworkReply */*reply*/,QAuthenticator *auth)
 {
-	auth->setUser("reading");
-	auth->setPassword("metview");
+	auth->setUser("egows");
+	auth->setPassword("egows");
 
 	//auth->setUser(httpUser_);
 	//auth->setPassword(httpPassword_);
diff --git a/src/OgcClient/ObjectSpec.WcsClient b/src/OgcClient/ObjectSpec.WcsClient
index 840cb70..8e1f738 100644
--- a/src/OgcClient/ObjectSpec.WcsClient
+++ b/src/OgcClient/ObjectSpec.WcsClient
@@ -7,6 +7,7 @@ object,
 	default_name	= WcsClient,
 	help_page	= WcsClient,
  	type		= Data,
+        icon_box	= Data access,
  	expand		= 75,
  	macro		= wcsclient,
 #	editor_type	= ExternalServiceEditor,
diff --git a/src/OgcClient/ObjectSpec.WmsClient b/src/OgcClient/ObjectSpec.WmsClient
index 9b63ef8..59a1de8 100644
--- a/src/OgcClient/ObjectSpec.WmsClient
+++ b/src/OgcClient/ObjectSpec.WmsClient
@@ -7,6 +7,7 @@ object,
 	default_name	= WmsClient,
 	help_page	= WmsClient,
  	type		= Data,
+        icon_box	= Data access,
  	expand		= 75,
  	macro		= wmsclient,
 #	editor_type	= ExternalServiceEditor,
diff --git a/src/OperaRadar/Makefile.in b/src/OperaRadar/Makefile.in
index 27bd088..4056b4b 100644
--- a/src/OperaRadar/Makefile.in
+++ b/src/OperaRadar/Makefile.in
@@ -140,6 +140,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -155,6 +156,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -181,11 +184,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/PM_Tephigram/Makefile.am b/src/PM_Tephigram/Makefile.am
new file mode 100644
index 0000000..798e86a
--- /dev/null
+++ b/src/PM_Tephigram/Makefile.am
@@ -0,0 +1,14 @@
+
+bin_PROGRAMS = bin/PM_Tephigram
+
+
+bin_PM_Tephigram_SOURCES  = MvTephiFrame.cc MvTephiFrame.h MvTephiParams.cc MvTephiParams.h MvTephiData.cc MvTephiData.h Tephigrams.cc
+bin_PM_Tephigram_CPPFLAGS = $(METVIEW_NETCDF_FLAGS)
+bin_PM_Tephigram_LDADD    = $(STANDARD_METVIEW_LIBS) $(METVIEW_NETCDF_LIB) $(METVIEW_UTIL_LIB) $(FLIBS)
+
+
+
+BUILT_SOURCES = bin
+
+bin:
+	ln -s ../../bin bin
diff --git a/src/PM_Tephigram/Makefile.in b/src/PM_Tephigram/Makefile.in
new file mode 100644
index 0000000..05b5f96
--- /dev/null
+++ b/src/PM_Tephigram/Makefile.in
@@ -0,0 +1,724 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+bin_PROGRAMS = bin/PM_Tephigram$(EXEEXT)
+subdir = src/PM_Tephigram
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/metview_config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_bin_PM_Tephigram_OBJECTS = bin_PM_Tephigram-MvTephiFrame.$(OBJEXT) \
+	bin_PM_Tephigram-MvTephiParams.$(OBJEXT) \
+	bin_PM_Tephigram-MvTephiData.$(OBJEXT) \
+	bin_PM_Tephigram-Tephigrams.$(OBJEXT)
+bin_PM_Tephigram_OBJECTS = $(am_bin_PM_Tephigram_OBJECTS)
+am__DEPENDENCIES_1 =
+bin_PM_Tephigram_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__dirstamp = $(am__leading_dot)dirstamp
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_$(V))
+am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
+am__v_CXX_0 = @echo "  CXX   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_$(V))
+am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CXXLD_0 = @echo "  CXXLD " $@;
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(bin_PM_Tephigram_SOURCES)
+DIST_SOURCES = $(bin_PM_Tephigram_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AXX = @AXX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPLIBS = @CPPLIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DBMLIB = @DBMLIB@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
+EGREP = @EGREP@
+EMOS_LIB_NAME = @EMOS_LIB_NAME@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FDBLIB = @FDBLIB@
+FFIXED_FLAGS = @FFIXED_FLAGS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FLIBS = @FLIBS@
+GREP = @GREP@
+GRIBAPI_LIBS = @GRIBAPI_LIBS@
+GRIB_API_INC = @GRIB_API_INC@
+GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LDFLAGS_INLINE = @LDFLAGS_INLINE@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBNAME = @LIBNAME@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAGICS_CFLAGS = @MAGICS_CFLAGS@
+MAGICS_LIBS = @MAGICS_LIBS@
+MAGPLUS_CPPFLAGS = @MAGPLUS_CPPFLAGS@
+MAGPLUS_HOME = @MAGPLUS_HOME@
+MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
+MAGPLUS_LIB = @MAGPLUS_LIB@
+MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
+MAKEINFO = @MAKEINFO@
+MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
+MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
+METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
+METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
+METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
+METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
+METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
+METVIEW_NETCDF_FLAGS = @METVIEW_NETCDF_FLAGS@
+METVIEW_NETCDF_LIB = @METVIEW_NETCDF_LIB@
+METVIEW_PACKAGE_NAME = @METVIEW_PACKAGE_NAME@
+METVIEW_PACKAGE_RELEASE_DATE = @METVIEW_PACKAGE_RELEASE_DATE@
+METVIEW_PACKAGE_VERSION = @METVIEW_PACKAGE_VERSION@
+METVIEW_UTIL_LIB = @METVIEW_UTIL_LIB@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MVINCLUDE = @MVINCLUDE@
+MVSTARTDIR = @MVSTARTDIR@
+MV_EMOSLIB = @MV_EMOSLIB@
+MV_ENVIRON = @MV_ENVIRON@
+MV_MOTIF_FLAGS = @MV_MOTIF_FLAGS@
+MV_MOTIF_UTIL_LIB = @MV_MOTIF_UTIL_LIB@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+ODB1_BIN = @ODB1_BIN@
+ODB1_USE_SCRIPT = @ODB1_USE_SCRIPT@
+ODB1_VERSION = @ODB1_VERSION@
+ODB_CPPFLAGS = @ODB_CPPFLAGS@
+ODB_LDFLAGS = @ODB_LDFLAGS@
+ODB_LIBDIR = @ODB_LIBDIR@
+ODB_LIBS = @ODB_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@
+PKG_CONFIG = @PKG_CONFIG@
+PROJ4_LIBS = @PROJ4_LIBS@
+QMAKE = @QMAKE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_CPPFLAGS = @QT_CPPFLAGS@
+QT_CXXFLAGS = @QT_CXXFLAGS@
+QT_DEFINES = @QT_DEFINES@
+QT_INCPATH = @QT_INCPATH@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LFLAGS = @QT_LFLAGS@
+QT_LIBS = @QT_LIBS@
+QT_PATH = @QT_PATH@
+QT_VERSION = @QT_VERSION@
+QT_VERSION_MAJOR = @QT_VERSION_MAJOR@
+RANLIB = @RANLIB@
+RCC = @RCC@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SITE_NAME = @SITE_NAME@
+SITE_WMO_CODE = @SITE_WMO_CODE@
+STANDARD_METVIEW_LIBS = @STANDARD_METVIEW_LIBS@
+STANDARD_METVIEW_LIBS_NO_UTIL = @STANDARD_METVIEW_LIBS_NO_UTIL@
+STARTUP_SCRIPT = @STARTUP_SCRIPT@
+STRIP = @STRIP@
+UIC = @UIC@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+bin_PM_Tephigram_SOURCES = MvTephiFrame.cc MvTephiFrame.h MvTephiParams.cc MvTephiParams.h MvTephiData.cc MvTephiData.h Tephigrams.cc
+bin_PM_Tephigram_CPPFLAGS = $(METVIEW_NETCDF_FLAGS)
+bin_PM_Tephigram_LDADD = $(STANDARD_METVIEW_LIBS) $(METVIEW_NETCDF_LIB) $(METVIEW_UTIL_LIB) $(FLIBS)
+BUILT_SOURCES = bin
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/PM_Tephigram/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/PM_Tephigram/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p || test -f $$p1; \
+	  then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' `; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+bin/$(am__dirstamp):
+	@$(MKDIR_P) bin
+	@: > bin/$(am__dirstamp)
+bin/PM_Tephigram$(EXEEXT): $(bin_PM_Tephigram_OBJECTS) $(bin_PM_Tephigram_DEPENDENCIES) bin/$(am__dirstamp)
+	@rm -f bin/PM_Tephigram$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(bin_PM_Tephigram_OBJECTS) $(bin_PM_Tephigram_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_PM_Tephigram-MvTephiData.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_PM_Tephigram-Tephigrams.Po at am__quote@
+
+.cc.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+bin_PM_Tephigram-MvTephiFrame.o: MvTephiFrame.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-MvTephiFrame.o -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Tpo -c -o bin_PM_Tephigram-MvTephiFrame.o `test -f 'MvTephiFrame.cc' || echo '$(srcdir)/'`MvTephiFrame.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Tpo $(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvTephiFrame.cc' object='bin_PM_Tephigram-MvTephiFrame.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-MvTephiFrame.o `test -f 'MvTephiFrame.cc' || echo '$(srcdir)/'`MvTephiFrame.cc
+
+bin_PM_Tephigram-MvTephiFrame.obj: MvTephiFrame.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-MvTephiFrame.obj -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Tpo -c -o bin_PM_Tephigram-MvTephiFrame.obj `if test -f 'MvTephiFrame.cc'; then $(CYGPATH_W) 'MvTephiFrame.cc'; else $(CYGPATH_W) '$(srcdir)/MvTephiFrame.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Tpo $(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvTephiFrame.cc' object='bin_PM_Tephigram-MvTephiFrame.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-MvTephiFrame.obj `if test -f 'MvTephiFrame.cc'; then $(CYGPATH_W) 'MvTephiFrame.cc'; else $(CYGPATH_W) '$(srcdir)/MvTephiFrame.cc'; fi`
+
+bin_PM_Tephigram-MvTephiParams.o: MvTephiParams.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-MvTephiParams.o -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Tpo -c -o bin_PM_Tephigram-MvTephiParams.o `test -f 'MvTephiParams.cc' || echo '$(srcdir)/'`MvTephiParams.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Tpo $(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvTephiParams.cc' object='bin_PM_Tephigram-MvTephiParams.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-MvTephiParams.o `test -f 'MvTephiParams.cc' || echo '$(srcdir)/'`MvTephiParams.cc
+
+bin_PM_Tephigram-MvTephiParams.obj: MvTephiParams.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-MvTephiParams.obj -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Tpo -c -o bin_PM_Tephigram-MvTephiParams.obj `if test -f 'MvTephiParams.cc'; then $(CYGPATH_W) 'MvTephiParams.cc'; else $(CYGPATH_W) '$(srcdir)/MvTephiParams.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Tpo $(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvTephiParams.cc' object='bin_PM_Tephigram-MvTephiParams.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-MvTephiParams.obj `if test -f 'MvTephiParams.cc'; then $(CYGPATH_W) 'MvTephiParams.cc'; else $(CYGPATH_W) '$(srcdir)/MvTephiParams.cc'; fi`
+
+bin_PM_Tephigram-MvTephiData.o: MvTephiData.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-MvTephiData.o -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-MvTephiData.Tpo -c -o bin_PM_Tephigram-MvTephiData.o `test -f 'MvTephiData.cc' || echo '$(srcdir)/'`MvTephiData.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-MvTephiData.Tpo $(DEPDIR)/bin_PM_Tephigram-MvTephiData.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvTephiData.cc' object='bin_PM_Tephigram-MvTephiData.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-MvTephiData.o `test -f 'MvTephiData.cc' || echo '$(srcdir)/'`MvTephiData.cc
+
+bin_PM_Tephigram-MvTephiData.obj: MvTephiData.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-MvTephiData.obj -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-MvTephiData.Tpo -c -o bin_PM_Tephigram-MvTephiData.obj `if test -f 'MvTephiData.cc'; then $(CYGPATH_W) 'MvTephiData.cc'; else $(CYGPATH_W) '$(srcdir)/MvTephiData.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-MvTephiData.Tpo $(DEPDIR)/bin_PM_Tephigram-MvTephiData.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvTephiData.cc' object='bin_PM_Tephigram-MvTephiData.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-MvTephiData.obj `if test -f 'MvTephiData.cc'; then $(CYGPATH_W) 'MvTephiData.cc'; else $(CYGPATH_W) '$(srcdir)/MvTephiData.cc'; fi`
+
+bin_PM_Tephigram-Tephigrams.o: Tephigrams.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-Tephigrams.o -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-Tephigrams.Tpo -c -o bin_PM_Tephigram-Tephigrams.o `test -f 'Tephigrams.cc' || echo '$(srcdir)/'`Tephigrams.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-Tephigrams.Tpo $(DEPDIR)/bin_PM_Tephigram-Tephigrams.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Tephigrams.cc' object='bin_PM_Tephigram-Tephigrams.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-Tephigrams.o `test -f 'Tephigrams.cc' || echo '$(srcdir)/'`Tephigrams.cc
+
+bin_PM_Tephigram-Tephigrams.obj: Tephigrams.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-Tephigrams.obj -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-Tephigrams.Tpo -c -o bin_PM_Tephigram-Tephigrams.obj `if test -f 'Tephigrams.cc'; then $(CYGPATH_W) 'Tephigrams.cc'; else $(CYGPATH_W) '$(srcdir)/Tephigrams.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-Tephigrams.Tpo $(DEPDIR)/bin_PM_Tephigram-Tephigrams.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Tephigrams.cc' object='bin_PM_Tephigram-Tephigrams.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-Tephigrams.obj `if test -f 'Tephigrams.cc'; then $(CYGPATH_W) 'Tephigrams.cc'; else $(CYGPATH_W) '$(srcdir)/Tephigrams.cc'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+	-rm -rf bin/.libs bin/_libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-rm -f bin/$(am__dirstamp)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-libtool ctags distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-binPROGRAMS
+
+
+bin:
+	ln -s ../../bin bin
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/PM_Tephigram/MvTephiData.cc b/src/PM_Tephigram/MvTephiData.cc
new file mode 100644
index 0000000..197fcb8
--- /dev/null
+++ b/src/PM_Tephigram/MvTephiData.cc
@@ -0,0 +1,715 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+//-- MvTephiData.cc   -   Dec2004/vk
+//
+
+
+#include "MvTephiData.h"
+#include "MvException.h"
+#include "min_max_macros.h"
+#include <math.h>
+
+
+//-- thermodynamic constants --//
+
+const double cTMELT = 273.16;
+const double cR3LES =  17.502;
+const double cR3IES =  22.587;
+const double cR4LES =  32.19;
+const double cR4IES =  -0.7;
+
+const double cRD    =  287.05; 
+const double cRV    =  461.51; 
+const double cRESTT =  611.21;
+const double cR2ES  = cRESTT*cRD/cRV;
+const double cVTMPC1= cRV/cRD-1.; 
+
+const int    cFREE  = -999;             //-- to mark free array cells
+
+//_____________________________________________________________________________
+
+MvTephiDataBase::MvTephiDataBase( MvField& fieldToken, const MvTephiParams& pars )
+  : counter_( 1 )
+  , t_level_( 0 )
+  , d_level_( 0 )
+  , u_level_( 0 )
+  , p_level_( 0 )
+  , min_level_( MaxLevel )
+  , currField_( fieldToken )
+  , pars_( pars )
+{
+}
+
+//_____________________________________________________________________________
+//
+//  Reads and preprocesses one set of files, i.e. all fields valid at
+//  the same time. Fields are sorted and thus we can trust the iterator.
+//
+void
+MvTephiDataBase::readOneSetOfFields( MvFieldSetIterator& iter )
+{
+  const double cBIGDOUBLE = 3.4E35;
+    const double oneMinute = 1.0 / 24.0;
+
+  bool cont = true;
+  while( cont )                            //-- read while same valid time
+    {
+      double y = getValueFromCurrentField();
+      if ( y > cBIGDOUBLE )
+	{
+	  throw MvException("Tephigrams: Unsupported grid or point outside field!");
+	}
+
+      int level = getLevel();              //-- virtual method
+      vertCoordCoefs( level );             //-- virtual method
+
+      int p = currField_.parameter();
+      collectValue( p, level, y );         //-- virtual method
+
+      nextField_ = iter();                 //-- next field - is it still part of current data
+
+      if( ! nextField_ )
+	cont = false;                      //-- end-of-file
+      else
+            cont = ( fabs(currField_.yyyymmddFoh() - nextField_.yyyymmddFoh()) < oneMinute )
+            &&  ( fabs(currField_.stepFoh() - nextField_.stepFoh()) < oneMinute );
+
+      if( cont )
+	currField_ = nextField_;
+    }
+
+  //-- set of current fields preprocessed - everything ok so far?
+  if( t_level_ != d_level_ )
+      throw MvException("Tephigrams: Different number of levels for T and Q!");
+
+  if( t_level_ <= 1 )
+      throw MvException("Tephigrams: T fields are missing!");
+
+  if( p_level_ == 0 )
+      throw MvException("Tephigrams: lnsp field missing!");
+}
+
+//_____________________________________________________________________________
+//
+//  Post-process and generate NetCDF output
+//
+void
+MvTephiDataBase::generate( MvNetCDF& netcdf )
+{
+  MvTephiFrame*  frame = new MvTephiFrame();
+
+
+  cout << "On set of data " << endl;
+  string  Tempkey = generateKey( 1, counter_ );
+  string  Dewkey  = generateKey(2, counter_ );
+  string  Pkey  = generateKey( 3, counter_ );
+  string  Ukey    = generateKey( 4, counter_ );
+
+
+  if( ! frame->setFrame(pars_.P1,pars_.P2,pars_.T1,pars_.T2,pars_.Wf) )
+    {
+      delete frame;
+      throw MvException("Tephigrams: Invalid parameter range (T,P)");
+    }
+
+  MvNcVar* temp = netcdf.addVariable( Tempkey.c_str(), ncDouble,1, (t_level_ - min_level_ + 1) );
+  MvNcVar* dew  = netcdf.addVariable( Dewkey.c_str(),  ncDouble, 1, (d_level_ - min_level_ + 1) );
+  MvNcVar* press  = netcdf.addVariable( Pkey.c_str(),  ncDouble, 1, (d_level_ - min_level_ + 1) );
+  TepDataStrukt tds;
+  computeLevels( tds );
+   netcdf.addAttribute("title", title().c_str());
+  //-- Add some metadata to the x variables.
+  frame->Metadata( pars_.backGround, temp, title().c_str() );
+  frame->Metadata( pars_.backGround, dew, 0 );
+  //frame->AddAttributes( temp, Tempkey );
+  //frame->AddAttributes( dew, Dewkey );
+
+  temp->addAttribute( "_REQUEST_NAMES", "DATA_X_VALUES/DATA_Y_VALUES" );
+  dew->addAttribute( "_REQUEST_NAMES", "DATA_X_VALUES/DATA_Y_VALUES" );
+
+  //-- Add the data to the variables
+  frame->TSonde( tds.PRESS
+	       , T_
+               , min_level_
+               , d_level_
+	       , pars_.line_thick
+	       , (char*)pars_.line_style_temp.c_str()
+	       , pars_.line_colour.c_str()
+	       , temp, press
+	       );
+  frame->TSonde( tds.PRESS
+	       , tds.TD
+               , min_level_
+	       , d_level_
+	       , pars_.line_thick
+	       , (char*)pars_.line_style_dew.c_str()
+	       , pars_.line_colour.c_str()
+	       , dew
+	       );
+			
+  if( u_level_ > 1)
+    {
+      counter_++;
+      string Presskey = generateKey( 0, counter_ );
+      Tempkey         = generateKey( pars_.Temp, counter_ );
+      Ukey            = generateKey( pars_.U_Field, counter_ );
+
+      geopotential( tds );
+
+      //-- Add the wind arrows
+      frame->TFlag( tds.PRESS, T_, U_, V_, tds.Height, u_level_,
+                    pars_.flag_colour.c_str(),   //-- flag colour to define numbers too
+		    netcdf, Presskey, Tempkey, Ukey );
+    }
+
+  u_level_ = t_level_ = d_level_ = 0;
+  counter_++;
+}
+
+//_____________________________________________________________________________
+//
+//  Value can be extracted in several ways...
+//
+double
+MvTephiDataBase::getValueFromCurrentField()
+{
+  double y;
+  switch( pars_.pointType )
+    {
+    case eInterpolated:
+      y = currField_.interpolateAt( pars_.lon, pars_.lat );    //-- x/y
+      break;
+
+    case eGridPoint:
+      y = currField_.nearestGridpoint( pars_.lon, pars_.lat ); //-- x/y
+      break;
+
+    case eAreaAverage:
+      y = currField_.integrate( pars_.lat, pars_.lon, pars_.lat2, pars_.lon2 ); //-- n/w/s/e
+      break;
+    }
+
+  return y;
+}
+
+//_____________________________________________________________________________
+
+void
+MvTephiDataBase::collectValue( int p, int level, double y )
+{
+  if( level < min_level_ && p != pars_.LnPress )
+    min_level_ = level;
+
+  if( p == pars_.U_Field )              //-- collect parameter values
+    {
+      u_level_ = level;
+      U_[level-1] = y;
+    }
+  else if( p == pars_.V_Field )
+    {
+      V_[level-1] = y;
+    }
+  else if( p == pars_.Temp )
+    {
+      t_level_ = level;
+      T_[level-1] = y;
+    }
+  else if( p == pars_.Dew )
+    {
+      d_level_ = level;
+      Q_[level-1] = max(ZEPQMI,y);
+    }
+  else if( p == pars_.LnPress )
+    {
+      processPressure( level, y );
+    }
+  else
+    {
+      ostringstream oss;
+      oss << "Tephigrams: field contains unknown data, param=" << p;
+
+      throw MvException( oss.str().c_str() );
+    }
+}
+
+//_____________________________________________________________________________
+//
+//  Title reflects data extraction type
+//
+string
+MvTephiDataBase::title()
+{
+  MvRequest	r = currField_.getRequest();
+
+  const char*   f_date = r("DATE");
+  const char*   f_time = r("TIME");
+  const char*   f_step = r("STEP");
+  const char*	expver = r("EXPVER");
+
+  char  Title[200];
+  switch( pars_.pointType )
+    {
+    case eInterpolated:
+      sprintf(Title,"%s %s step %s [%.2f,%.2f] %s, expver %s",
+	      f_date, f_time, f_step,
+	      pars_.lat, pars_.lon,
+	      pars_.formulaPrintName.c_str(), (expver?expver:"-")  );	
+      break;
+
+    case eGridPoint:
+      {
+	MvLocation loc = currField_.nearestGridPointLocation( MvLocation( pars_.lat, pars_.lon ) );
+	sprintf(Title,"%s %s step %s [nearest: %.2f,%.2f] %s, expver %s",
+		f_date, f_time, f_step,
+		loc.latitude(), loc.longitude(),
+		pars_.formulaPrintName.c_str(), (expver?expver:"-")  );	
+      }
+      break;
+
+    case eAreaAverage:
+      sprintf(Title,"%s %s step %s [%.1f,%.1f,%.1f,%.1f] %s, expver %s",
+	      f_date, f_time, f_step,
+	      pars_.lat, pars_.lon, pars_.lat2, pars_.lon2,
+	      pars_.formulaPrintName.c_str(), (expver?expver:"-")  );	
+      break;
+    }
+
+  return string(Title);
+}
+
+//_____________________________________________________________________________
+//
+//  This is almost a duplicate of MvTephiFrame::generateKey(...)
+//
+string
+MvTephiDataBase::generateKey( int par, int counter )
+{
+  MvRequest    req    = currField_.getRequest();
+
+  const char*  date   = req("DATE");
+  const char*  time   = req("TIME");
+  const char*  step   = req("STEP");
+  const char*  expver = req("EXPVER");
+
+  ostringstream oss;
+  oss << setfill( '0' )
+      << "p"
+      << setw( 3 ) << par 
+      << setw( 8 ) << date
+      << setw( 4 ) << ( time ? time : "TTTT" )
+      << setw( 4 ) << ( step ? step : "SSSS" )
+      << setw( 4 ) << ( expver ? expver : "1" )
+      << "_"       << counter;
+
+  cout << " Key " << oss.str() << endl;
+  return oss.str();
+}
+
+//_____________________________________________________________________________
+//
+//  This is almost a duplicate of MvTephiFrame::DewPoint(...)
+//
+double
+MvTephiDataBase::dewPoint( double P, double T, double Q, const string& dewPointFormulaType )
+{
+  const string cMixedFormula( "MIXED_PHASE_0_TO_-23" );
+
+  double  ZCVM3, ZCVM4;
+
+  if( dewPointFormulaType == cMixedFormula )
+    {
+      double rtwat   = cTMELT;
+      double rtice   = cTMELT - 23.0;
+      double foealfa = min(1.,pow(((max(rtice,min(rtwat,T))-rtice)/(rtwat-rtice)),2.0) );
+
+      ZCVM3 = foealfa*cR3LES + (1.-foealfa)*cR3IES;
+      ZCVM4 = foealfa*cR4LES + (1.-foealfa)*cR4IES;
+    }
+  else
+    {
+      if( T > cTMELT )
+	{
+	  ZCVM3=cR3LES;
+	  ZCVM4=cR4LES;
+	}
+      else
+	{
+	  ZCVM3=cR3IES;
+	  ZCVM4=cR4IES;
+	}
+    }
+
+  double ZFRAC = log(P*Q/(cR2ES*(1.+cVTMPC1*Q)))/ZCVM3;
+
+  return (cTMELT-ZFRAC*ZCVM4)/(1.-ZFRAC);
+}
+
+//_____________________________________________________________________________
+//
+//  Virtual temperature Tv
+//
+double
+MvTephiDataBase::Tv( double T, double Q )
+{
+  return T * ( 1. + cVTMPC1 * Q );
+}
+
+//_____________________________________________________________________________
+//
+//  This is almost a duplicate of MvTephiFrame::TGeopot
+//
+void
+MvTephiDataBase::geopotential( TepDataStrukt& tds )
+{
+  double  alfa[ MaxLevel ];
+  double  alnqp;
+
+  alfa[0] = 2.;
+  for ( int i=1; i<u_level_; i++ )
+    {
+      alnqp = log( tds.Half[i+1] / tds.Half[i] );
+      alfa[i] = 1. - alnqp * tds.Half[i] / ( tds.Half[i+1] - tds.Half[i]);
+    }
+
+  double  geoph[ MaxLevel+1 ];
+  geoph[u_level_] = 0.;
+  for ( int i = u_level_-1; i > 0; i-- )
+    {
+      alnqp    = log( tds.Half[i+1] / tds.Half[i] );
+      geoph[i] = geoph[i+1] + cRD * Tv(i) * alnqp;
+
+      tds.Height[i] = geoph[i+1] + alfa[i] * cRD * Tv(i);
+    }
+
+  tds.Height[0] = geoph[1] + alfa[0] * cRD * Tv(0);
+
+  return;
+}
+
+//_____________________________________________________________________________
+//
+//  Collect vertical coordinate coefficients
+//
+void
+MvTephiDataBase::vertCoordCoefs( int level )
+{
+  currField_.vertCoordCoefs( C1_[level], C2_[level] );
+}
+
+//_____________________________________________________________________________
+
+int
+MvTephiDataBase::getLevel()
+{
+  int lev = (int)currField_.level();
+  if( lev > MaxLevel )
+    throw MvException("Tephigrams: too many levels (source code needs to be modified)");
+
+  return lev;
+}
+
+//=============================================================================
+//                                                        MvTephiDataHalfLevels
+//_____________________________________________________________________________
+
+void
+MvTephiDataHalfLevels::computeLevels( TepDataStrukt& tds )
+{
+  for( int k=0; k <= d_level_; k++ )    //-- ECMWF level scheme with half levels
+    {
+      tds.Half[k] = currField_.pressureLevel( C1_[k], C2_[k], exp(LNSP_) );
+    }
+
+  for( int k=0; k<d_level_; k++)
+    {
+      tds.PRESS[k] = currField_.meanPressureLevel(C1_[k],C1_[k+1], C2_[k],C2_[k+1], exp(LNSP_) );
+      tds.TD[k]    = dewPoint( tds.PRESS[k], T_[k], Q_[k], pars_.dewPointFormulaType );
+    }
+}
+
+//_____________________________________________________________________________
+
+void
+MvTephiDataHalfLevels::processPressure( int level, double val )
+{
+  p_level_ = level;
+  LNSP_ = val;
+}
+
+//=============================================================================
+//                                                        MvTephiDataFullLevels
+//_____________________________________________________________________________
+
+void
+MvTephiDataFullLevels::computeLevels( TepDataStrukt& tds )
+{
+  for( int k=0; k < d_level_; k++)
+    {
+      tds.PRESS[k] = currField_.pressureLevel(C1_[k+1], C2_[k+1], exp(LNSP_) );
+      tds.TD[k]    = dewPoint( tds.PRESS[k], T_[k], Q_[k], pars_.dewPointFormulaType );
+      tds.Half[k]  = tds.PRESS[k]; //-- is this one really needed??? (041231/vk)
+    }
+}
+
+//_____________________________________________________________________________
+
+void
+MvTephiDataFullLevels::processPressure( int level, double val )
+{
+  if( level < 1 )
+    level = 1;   //-- Q&D check fix for New Zealand data
+  p_level_ = level;
+  LNSP_ = val;
+}
+
+//=============================================================================
+//                                                    MvTephiDataPressureLevels
+//_____________________________________________________________________________
+
+MvTephiDataPressureLevels::MvTephiDataPressureLevels( MvField& fieldToken
+                                                    , const MvTephiParams& pars )
+    : MvTephiDataBase( fieldToken, pars )
+{
+  for( int i=0; i<MaxLevel; ++i )
+    {
+      P_[i] = cFREE;                   //-- initialise to indicate free cell
+    }
+}
+
+//_____________________________________________________________________________
+
+void
+MvTephiDataPressureLevels::collectValue( int p, int level, double y )
+{
+  int levelInd = levelIndex( level );
+  if( levelInd < min_level_ )
+    min_level_ = levelInd;
+
+  if( p == pars_.U_Field )              //-- collect parameter values
+    {
+      u_level_ = levelInd;
+      U_[u_level_] = y;
+    }
+  else if( p == pars_.V_Field )
+    {
+      V_[ levelInd ] = y;
+    }
+  else if( p == pars_.Temp )
+    {
+      t_level_ = levelInd;
+      T_[t_level_] = y;
+    }
+  else if( p == pars_.Dew )
+    {
+      d_level_ = levelInd;
+      Q_[d_level_] = max(ZEPQMI,y);
+    }
+  else
+    {
+      ostringstream oss;
+      oss << "Tephigrams: field contains unknown data, param=" << p;
+
+      throw MvException( oss.str().c_str() );
+    }
+}
+
+//_____________________________________________________________________________
+//                                                                   levelIndex
+//  Converts a pressure level value into an index to corresponding
+//  pressure value in array P_. Add pressure into P_ if not found.
+//
+int
+MvTephiDataPressureLevels::levelIndex( int pressureLevel )
+{
+  for( int i=0; i<MaxLevel; ++i )
+    {
+      if( P_[i] == pressureLevel )
+	{
+	  return i;
+	}
+      else if( P_[i] == cFREE )
+	{
+	  P_[i] = pressureLevel;
+	  p_level_ = i;
+	  return i;
+	}
+    }
+
+  throw("Too many pressure levels, source code needs to be edited!");
+}
+
+//_____________________________________________________________________________
+
+void
+MvTephiDataPressureLevels::computeLevels( TepDataStrukt& tds )
+{
+  for( int k=0; k <= d_level_; k++)
+    {
+      tds.Half[k]  = (double)P_[k] * 100.0;  //-- do we need Half[]???
+      tds.PRESS[k] = (double)P_[k] * 100.0;  //-- hPa -> Pa
+      tds.TD[k]    = dewPoint( tds.PRESS[k], T_[k], Q_[k], pars_.dewPointFormulaType );
+    }
+}
+
+//_____________________________________________________________________________
+
+int
+MvTephiDataPressureLevels::getLevel()
+{
+  int lev = (int)currField_.level();
+  levelIndex( lev );                         //-- forces index range check!
+
+  return lev;
+}
+
+//_____________________________________________________________________________
+
+void
+MvTephiDataPressureLevels::vertCoordCoefs( int )
+{
+  //-- not needed if pressure levels
+}
+
+//_____________________________________________________________________________
+
+void
+MvTephiDataPressureLevels::processPressure( int level, double val )
+{
+  //-- not needed if pressure levels
+}
+
+//=============================================================================
+//                                                      MvTephiDataUkmoNDLevels
+//_____________________________________________________________________________
+
+MvTephiDataUkmoNDLevels::MvTephiDataUkmoNDLevels( MvField& fieldToken
+                                                , const MvTephiParams& pars )
+    : MvTephiDataBase( fieldToken, pars )
+{
+  for( int i=0; i<MaxLevel; ++i )
+    {
+      P_[i] = cFREE;                   //-- initialise to indicate free cell
+    }
+}
+
+//_____________________________________________________________________________
+
+void
+MvTephiDataUkmoNDLevels::processPressure( int level, double val )
+{
+  p_level_ = level;
+  P_[level-1] = val;
+}
+
+//_____________________________________________________________________________
+
+void
+MvTephiDataUkmoNDLevels::computeLevels( TepDataStrukt& tds )
+{
+  for( int k=0; k <= d_level_; k++)
+    {
+      tds.Half[k]  = P_[k];
+      tds.PRESS[k] = P_[k];
+      tds.TD[k]    = dewPoint( tds.PRESS[k], T_[k], Q_[k], pars_.dewPointFormulaType );
+    }
+}
+
+//_____________________________________________________________________________
+
+int
+MvTephiDataUkmoNDLevels::getLevel()
+{
+  int lev2 = (int)currField_.level_L2(); //-- UKMO data: level value in second octet
+  if( lev2 > MaxLevel )
+    throw MvException("Too many levels (source code needs to be modified)");
+
+  return lev2;
+}
+
+//_____________________________________________________________________________
+//
+//  This is a (strongly modified) duplicate of MvTephiFrame::TGeopot
+//
+//  - This is a Q&D code and should be checked by someone more familiar
+//    with atmosphere physics formulas and different vertical coordinate
+//    system discretizations!                                 (vk/050113)
+//
+void
+MvTephiDataUkmoNDLevels::geopotential( TepDataStrukt& tds )
+{
+  const double cStdSurfP = 101325.0;
+
+  tds.Height[0] = log(2.0) * cRD * Tv(0) * log( cStdSurfP / P_[0] );
+
+  double geopotPrev = tds.Height[0];
+
+  for ( int i = 1; i < u_level_; ++i )
+    {
+      double myP = P_[i-1]; //-- ( P_[i] + P_[i-1] ) / 2.0;
+      double myT = T_[i-1]; //-- ( T_[i] + T_[i-1] ) / 2.0;
+      double myQ = Q_[i-1]; //-- ( Q_[i] + Q_[i-1] ) / 2.0;
+
+      double lnqp = log( P_[i-1] / P_[i] );
+      double alfa = 1.0 - lnqp * myP / ( P_[i-1] - P_[i] );
+
+      tds.Height[i] = geopotPrev + cRD * Tv( myT, myQ ) * lnqp;
+      geopotPrev = tds.Height[i];
+    }
+
+  return;
+}
+
+//_____________________________________________________________________________
+
+void
+MvTephiDataUkmoNDLevels::vertCoordCoefs( int )
+{
+  //-- not needed if UKMO New Dynamics levels
+}
+
+//_____________________________________________________________________________
+//_____________________________________________________________________________
+//_____________________________________________________________________________
+//
+//  Factory to create and return an object of the required tephidata class.
+//
+MvTephiDataBase* MvTephiDataFactory( MvField& f, MvTephiParams p )
+{
+  const int cECMWF = 98;
+
+  MvFieldExpander expa( f );
+
+  if( f.centre() == cECMWF && f.isModelLevel() )
+    {
+      cout << "Factory: MvTephiDataHalfLevels" << endl;
+      return new MvTephiDataHalfLevels( f, p );     //-- "standard" ECMWF data
+    }
+
+  if( f.vertCoordCoefPairCount() == 1 )
+    {
+      cout << "Factory: MvTephiDataFullLevels" << endl;
+      return new MvTephiDataFullLevels( f, p );     //-- non-ECMWF data
+    }
+
+  if( f.isPressureLevel() )
+    {
+      cout << "Factory: MvTephiDataPressureLevels" << endl;
+      return new MvTephiDataPressureLevels( f, p ); //-- pressure level data
+    }
+
+  if( f.levelType() == cML_UKMO_ND )
+    {
+      cout << "Factory: MvTephiDataUkmoNDLevels" << endl;
+      return new MvTephiDataUkmoNDLevels( f, p ); //-- UKMO New Dynamics data
+    }
+
+  return 0;                                         //-- unimplemented data
+}
+//_____________________________________________________________________________
diff --git a/src/PM_Tephigram/MvTephiData.h b/src/PM_Tephigram/MvTephiData.h
new file mode 100644
index 0000000..737c1e1
--- /dev/null
+++ b/src/PM_Tephigram/MvTephiData.h
@@ -0,0 +1,179 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// MvTephiData.h  - Dec2004/vk
+//
+//  The purpose of these classes is to clean and simplify Tephigram
+//  code. Note that this is partly a Q&D solution as some methods are
+//  duplicated (with a simplified interface) from class MvTephiFrame.
+//
+//  What is more, this class hierarchy made it much easier to add new
+//  data types, like plain pressure levels and UKMO New Dynamics data.
+//
+
+#ifndef MVTEPHIDATA_H
+#define MVTEPHIDATA_H
+
+#include "MvTephiFrame.h"
+#include "MvTephiParams.h"
+
+//______________________________________________________________________
+//                                                         TepDataStrukt
+
+struct TepDataStrukt
+{
+  double PRESS[MaxLevel+1];
+  double Half[MaxLevel+1];
+  double TD[MaxLevel];
+  double Height[MaxLevel];
+};
+
+//______________________________________________________________________
+//                                                       MvTephiDataBase
+//
+//  Abstract base class for different tephigram input data types
+//
+
+class MvTephiDataBase
+{
+ private:
+  MvTephiDataBase();
+  MvTephiDataBase( MvTephiDataBase& );
+
+ public:
+  MvTephiDataBase( MvField& fieldToken, const MvTephiParams& pars );
+  virtual ~MvTephiDataBase(){}
+
+  void    readOneSetOfFields( MvFieldSetIterator& iter );
+  void    generate( MvNetCDF& netcdf );
+  MvField returnToken(){ return nextField_; }
+
+ protected:
+  virtual void computeLevels( TepDataStrukt& tds ) = 0;
+  virtual void processPressure( int lev, double val ) = 0;
+  virtual void vertCoordCoefs( int lev );
+  virtual int  getLevel();
+  virtual void collectValue( int par, int lev, double val );
+  virtual void geopotential( TepDataStrukt& tds );
+
+  double  getValueFromCurrentField();
+  double  dewPoint( double P, double T, double Q, const string& dewPointFormulaType );
+  double  Tv( int i ){ return Tv( T_[i], Q_[i] ); }
+  double  Tv( double T, double Q );
+  string  title();
+  string  generateKey( int par, int counter );
+
+ protected:
+  int   counter_;        //  = 1;
+  int	t_level_;        //  = 0;
+  int   d_level_;        //  = 0;
+  int   u_level_;        //  = 0;
+  int   p_level_;        //  = 0;
+  int   min_level_;
+  
+  double T_[MaxLevel];
+  double Q_[MaxLevel];
+  double U_[MaxLevel];
+  double V_[MaxLevel];
+  double LNSP_;
+
+  double  C1_[MaxLevel];
+  double  C2_[MaxLevel];
+
+  MvField       currField_;
+  MvField       nextField_;
+  MvTephiParams pars_;
+};
+
+//______________________________________________________________________
+//                                                 MvTephiDataHalfLevels
+//  Class for ECMWF type level data
+
+class MvTephiDataHalfLevels : public MvTephiDataBase
+{
+ public:
+  MvTephiDataHalfLevels( MvField& fieldToken, const MvTephiParams& pars )
+    : MvTephiDataBase( fieldToken, pars ){}
+  virtual ~MvTephiDataHalfLevels(){}
+
+ protected:
+  virtual void computeLevels( TepDataStrukt& tds );
+  virtual void processPressure( int lev, double val );
+};
+
+//______________________________________________________________________
+//                                                 MvTephiDataFullLevels
+//  Class for "simple" level data
+
+class MvTephiDataFullLevels : public MvTephiDataBase
+{
+ public:
+  MvTephiDataFullLevels( MvField& fieldToken, const MvTephiParams& pars )
+    : MvTephiDataBase( fieldToken, pars ){}
+  virtual ~MvTephiDataFullLevels(){}
+
+ protected:
+  virtual void computeLevels( TepDataStrukt& tds );
+  virtual void processPressure( int lev, double val );
+};
+
+//______________________________________________________________________
+//                                             MvTephiDataPressureLevels
+//  Class for data on pressure levels
+
+class MvTephiDataPressureLevels : public MvTephiDataBase
+{
+ public:
+  MvTephiDataPressureLevels( MvField& fieldToken, const MvTephiParams& pars );
+  virtual ~MvTephiDataPressureLevels(){}
+
+ protected:
+  virtual void computeLevels( TepDataStrukt& tds );
+  virtual void collectValue( int par, int lev, double val );
+  virtual void vertCoordCoefs( int lev );
+  virtual int  getLevel();
+  virtual void processPressure( int lev, double val );
+
+  int levelIndex( int pressureLevel );
+
+ private:
+  int P_[MaxLevel];
+};
+
+//______________________________________________________________________
+//                                               MvTephiDataUkmoNDLevels
+//  Class for UKMO "New Dynamics" data
+
+class MvTephiDataUkmoNDLevels : public MvTephiDataBase
+{
+ public:
+  MvTephiDataUkmoNDLevels( MvField& fieldToken, const MvTephiParams& pars );
+  virtual ~MvTephiDataUkmoNDLevels(){}
+
+ protected:
+  virtual void computeLevels( TepDataStrukt& tds );
+  virtual void vertCoordCoefs( int lev );
+  virtual void processPressure( int lev, double val );
+  virtual int  getLevel();
+  virtual void geopotential( TepDataStrukt& tds );
+
+ private:
+  double P_[MaxLevel];
+};
+
+//______________________________________________________________________
+
+
+MvTephiDataBase* MvTephiDataFactory( MvField& f, MvTephiParams p );
+
+
+#endif
+
+
+
diff --git a/src/PM_Tephigram/MvTephiFrame.cc b/src/PM_Tephigram/MvTephiFrame.cc
new file mode 100644
index 0000000..77de758
--- /dev/null
+++ b/src/PM_Tephigram/MvTephiFrame.cc
@@ -0,0 +1,741 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "inc_iostream.h"
+
+#include <math.h>
+#include <stdarg.h>
+
+#include "Metview.h"
+#include "MvTephiFrame.h"
+#include "MvObs.h"
+#include "min_max_macros.h"
+
+extern int UniFlag;
+
+const double SQR2 = sqrt(2.);
+const string cMixedFormula( "MIXED_PHASE_0_TO_-23" );
+
+MvTephiFrame::MvTephiFrame(char *)
+{
+  init();
+}
+
+void MvTephiFrame::init()
+{
+    X1=Y1=X2=Y2=X3=Y3=X4=Y4=
+    DT=DTN=TMM=PYL1=PXL1=ALFA=T3=
+    PMN=PMX=TMN=TMX=XFLAG=
+    RAT=XGPR= XGPL= YGPT= YGPBT= PXL3=
+    ZXX= PXL= PYLT=ZXT= ZYT =PXL2= PYL2=
+    PXP2= PYP2= PYL3= PXP3= PYP3=
+    PXLT= PXPT= PYPT=
+    HNUM= WFL= TRCH=
+    GPT= GPB= ZYY= YGPB=PXP1= PYP1=
+    RATX= RATY = 0.0;
+
+    TMELT =  273.16;
+    RD    =  287.05;
+    RV    =  461.51;
+    CPD   = 1005.46;
+
+    CHI   =  RD/CPD;
+    EPS   =  RD/RV;
+
+    //C1ES=610.78;
+    restt =611.21;      //-- RD correction code 021023/vk
+
+    //C2ES=C1ES*RD/RV;
+    r2es = restt*RD/RV;
+
+    //C3LES=17.269;
+    r3les = 17.502;
+
+    //C4LES=35.86;
+    r4les = 32.19;
+
+    //C3IES=21.875;
+    r3ies = 22.587;
+
+    //C4IES=7.66;
+    r4ies = -0.7;
+
+    //C5LES=C3LES*(TMELT-C4LES);
+    C5LES = r3les*(TMELT-r4les);
+
+    VTMPC1= RV/RD-1.;
+}
+
+MvTephiFrame::~MvTephiFrame()
+{
+}
+
+bool MvTephiFrame::setFrame(double P1, double P2, double T1, double T2,
+			    double Wf)
+{
+  PMN = 100*P1; PMX = 100*P2; TMN = T1+TMELT; TMX = T2+TMELT;
+  XFLAG = Wf;
+
+  /*
+     1. DEFINE THE TEPHIGRAM STRETCHING FACTOR
+     THE TEPHIGRAM IS A (T,ALFA*LN(THE)) DIAGRAM, WHERE ALFA IS A
+     NORMALISATION FACTOR. THIS CHOICE OF ALFA MAKES THE DISTANCE
+     (LOG(THE(TMX))-LOG(THE(TMN))) EQUAL TO TMX-TMN.
+  */
+
+  ALFA=(TMX-TMN)/log(TMX/TMN);
+  /*
+    2. DEFINE THE ASPECT RATIO OF THE TEPHIGRAM
+
+    (TMN,PMX) WILL BE THE COORDINATES OF THE LEFT BOTTOM CORNER (X1,Y1)
+    (TMX,PMX) WILL BE THE COORDINATES OF THE RIGHT BOTTOM CORNER (X2,Y2)
+    (T3,PMN) WILL BE THE COORDINATES OF THE RIGHT BOTTOM CORNER (X3,Y3)
+    (T3 IS TO BE FOUND SOLVING X3=X2 BY NEWTON'S METHOD)
+  */
+
+  double THE2,ZCONS,ZCN2;
+
+  THE2=TMX*pow(100000./PMX,CHI);
+  ZCONS=ALFA*log(THE2)+TMX;
+  ZCN2=pow(100000./PMN,CHI);
+
+  // SEED
+
+  T3 = TMN;
+
+  int not_found = 1;
+
+  for ( int j=0 ; j<30 && not_found; j++)
+    {
+      double F,DF,T3N,THE3;
+
+      THE3=T3*ZCN2;
+      F=ZCONS-ALFA*log(THE3)-T3;
+      DF=-1.-ALFA/T3;
+      T3N = F/DF;
+      T3 = T3 - T3N;
+      if( fabs(T3N) < PREC ) not_found = 0;
+    }
+
+  if(not_found) return false;
+
+  TTP2XY(T3,PMN,ALFA,X3,Y3);
+  TTP2XY(TMN,PMX,ALFA,X1,Y1);
+  TTP2XY(TMX,PMX,ALFA,X2,Y2);
+  X4=X1; Y4=Y3;
+
+  RAT=(Y3-Y2)/(X2-X1);
+
+  /*
+
+    C
+    C          |-------------------------------|
+    C          |T                              |
+    C          |                               |
+    C          |                               |
+    C     |-----------------------------------------|
+    C     |2                                        |
+    C     |    |-------------------------------|    |------------|
+    C     |    |1                              |    |3           |
+    C     |    |                               |    |            |
+    C     |    |                               |    |            |
+    C     |    |                               |    |            |
+    C     |    |                               |    |            |
+    C     |    |                               |    |            |
+    C     |    |                               |    |            |
+    C     |    |                               |    |            |
+    C     |    |-------------------------------|    |------------|
+    C     |                                         |
+    C     |-----------------------------------------|
+    C
+    C      1    SUBPAGE FOR THE TEPHIGRAM STRICTU-SENSU
+    C      2    SUBPAGE FOR THE TEPHIGRAM STRICTU-SENSU+LABELS
+    C      3    SUBPAGE FOR THE WIND FLAG AREA
+    C      T    TITLE-BOX AREA
+  */
+
+  // PRELIMINARY MAGICS SETTING
+
+  // G.A Header("PAGE_FRAME") = "OFF";
+  //G.A Header("PAGE_ID_LINE") = "OFF";
+
+  // SET SUBPAGE LENGTHS AND POSITIONS AS A FUNCTION OF
+  // THE PAGE SIZE AND THE RATIO FOUND IN 2.
+
+  // THE FINAL PICTURE WILL BE THE MAXIMUM PICTURE FITTING IN THE PAGE
+  // WITH THE TEPHIGRAM PART HAVING THE ASPECT RATIO FOUND IN 2.
+
+  // XGPR, XGPL, YGPT, YGPBT ARE THE GAPS TO DEFINE SUBPAGE2
+  XGPR=1.; XGPL=1.; YGPT=0.4; YGPB=0.8;
+
+  PYLT=2.;PXL3=3.2;
+
+  // SUBPAGE 1
+  ZXX=PXL-XGPL-XGPR-PXL3;
+  ZYY=PYL-YGPB-YGPT-PYLT;
+  if (ZXX*RAT <= ZYY)
+    {
+      ZXT=ZXX; ZYT=RAT*ZXT;
+    }
+  else
+    {
+      ZYT=ZYY; ZXT=ZYT/RAT;
+    }
+
+  PXL1=ZXT; PYL1=ZYT; PXP1=XGPL; PYP1=YGPB;
+
+  // RATIO TO CONVERT X UNITS IN PAPER (CM) UNITS
+  RATX=PXL1/(X2-X1); RATY=PYL1/(Y3-Y2);
+
+  // SUBPAGE 2
+  PXL2=PXL1+XGPL+XGPR; PYL2=PYL1+YGPB+YGPT;
+  PXP2=0.; PYP2=0.;
+
+  //SUBPAGE 3
+  PYL3=PYL1; PXP3=PXL2; PYP3=PYP1;
+
+  // TITLE BOX
+  PXLT=PXL1; PXPT=PXP1; PYPT=PYL2;
+
+  // NUMBER HEIGHT
+  HNUM=0.2;
+
+  // WIND FLAG LENGTH
+  WFL=PXL3/5.;
+
+  // TEXT_REFERENCE_CHARACTER_HEIGHT
+  TRCH=0.3;
+
+
+  return true;
+}
+
+
+void MvTephiFrame::TGeopot(double* Half, double* T, double* Q, double* Height,
+			   int Nlev)
+{
+
+  double		alfa[MaxLevel];
+  double		alnqp;
+
+
+  alfa[0] = 2.;
+  int i;
+  for ( i=1; i<Nlev; i++)
+    {
+      alnqp = log( Half[i+1]/Half[i] );
+      alfa[i] = 1.-alnqp*Half[i]/( Half[i+1] -  Half[i]);
+    }
+  double		geoph[MaxLevel+1];
+  geoph[Nlev] = 0.;
+  for ( i = Nlev-1; i>0; i--)
+    {
+      alnqp = log( Half[i+1]/Half[i] );
+      geoph[i]  = geoph[i+1] + RD*T[i]*(1.+VTMPC1*Q[i])*alnqp;
+      Height[i] = geoph[i+1] + alfa[i]*RD*T[i]*(1.+VTMPC1*Q[i]);
+    }
+  Height[0] = geoph[1] + alfa[0]*RD*T[0]*(1.+VTMPC1*Q[0]);
+
+
+  return;
+}
+
+double MvTephiFrame::DewPoint(double P, double T, double Q, const string& dewPointFormulaType )
+{
+  double  ZCVM3,ZCVM4;
+
+  if( dewPointFormulaType == cMixedFormula )
+    {
+      double rtwat = TMELT;
+      double rtice = TMELT - 23.0;
+
+      double foealfa=min(1.,pow(((max(rtice,min(rtwat,T))-rtice)/(rtwat-rtice)),2.0) );
+      //cout << "foealfa = " << foealfa << ", \tT = " << T << endl;
+
+      ZCVM3 = foealfa*r3les + (1.-foealfa)*r3ies;
+      ZCVM4 = foealfa*r4les + (1.-foealfa)*r4ies;
+    }
+  else
+    {
+      if( T > TMELT )
+	{
+	  ZCVM3=r3les;
+	  ZCVM4=r4les;
+	}
+      else
+	{
+	  ZCVM3=r3ies;
+	  ZCVM4=r4ies;
+	}
+    }
+
+  //     ZFRAC=log(P*Q/(C2ES*(1.+VTMPC1*Q)))/ZCVM3;
+  double ZFRAC=log(P*Q/(r2es*(1.+VTMPC1*Q)))/ZCVM3;
+
+  return (TMELT-ZFRAC*ZCVM4)/(1.-ZFRAC);
+}
+
+
+double TNORM(double v,int& ndec)
+{
+  double s = 1.0, d = 5.0;
+
+  ndec = 0;
+  while( v < s*0.75)
+    {
+      s = s/10.0; ndec++;
+    }
+  // v >= 0.75*SCAL
+
+  while( v > s*7.5 ) s=s*10.0;
+  // v <= 7.5*SCAL
+
+  if( v <= 3.5*s )
+    {
+      d = 2.;
+      if( v <= 1.5*s ) d = 1.0;
+    }
+  return d*s;
+}
+
+void MvTephiFrame::TXP2TY(double X, double P, double ALFA, double& T,double& Y)
+{
+  /*
+
+    PURPOSE.
+	--------
+
+	OBTAINS T,Y GIVEN X,P ((X,Y) ARE TEPHIGRAM COORDINATES)
+
+	METHOD.
+	-------
+
+	THE BASIC COORDINATES ARE DEFINED AS
+
+	XT=T
+	YT=ALFA*LOG(THE)
+
+	THE ROTATED (FINAL) COORDINATES ARE DEFINED AS
+	(45 DEGREES CLOCKWISE ROTATION)
+
+	X=(YT+XT)/SQRT(2.)
+	Y=(YT-XT)/SQRT(2.)
+
+	INPUT.
+	-------
+
+	X        X COORDINATE OF THE ROTATED TEPHIGRAM
+	P        PRESSURE (HPA)        DIMENSION NLEV
+	ALFA     NORMALISATION FACTOR FOR THE LOG(THE) AXIS
+
+
+	OUTPUT.
+	-------
+
+	T        TEMPERATURE (KELVIN)  DIMENSION NLEV
+	Y        Y COORDINATE OF THE ROTATED TEPHIGRAM
+
+  */
+
+  double 		PREC = 1.E-04;
+  //double 		ZFAC=1./SQR2;
+  double		TF=TMELT;
+  double		ZC1=-X*SQR2;
+  double		ZC2=pow(100000./P,CHI);
+
+
+  int		not_found=1;
+  for(int j=0; j<50 && not_found; j++)
+    {
+      double	F,DF,TFN,THE;
+
+      THE=TF*ZC2;
+
+      //-- temporary Q&D fix against negative logs (010718/vk)
+      if( THE <= 0 )
+	{
+      break;
+	  cout << "TXP2TY: log(" << THE
+	       << ") [X=" << X
+	       << ", P=" << P
+	       << ", ALFA=" << ALFA
+	       << "]" << endl;
+	  break;
+	}
+
+      F=ZC1+ALFA*log(THE)+TF;
+      DF=1.+ALFA/TF;
+      TFN=F/DF;
+      TF = TF - TFN;
+      if( fabs(TFN) < PREC ) not_found = 0;
+    }
+
+  if(not_found)
+    {
+      T = Y = 0;
+    }
+  else
+    {
+      T = TF;
+      Y = X-SQR2*T;
+    }
+
+  return;
+
+}
+
+void MvTephiFrame::TYQ2TP(double Y, double Q, double ALFA, double& T,double& P)
+{
+  /*
+    PURPOSE.
+	--------
+
+	OBTAINS Y,Q GIVEN T,P ((X,Y) ARE TEPHIGRAM COORDINATES)
+
+	METHOD.
+	 -------
+
+	 THE BASIC COORDINATES ARE DEFINED AS
+
+	 XT=T
+	 YT=ALFA*LOG(THE)
+
+	 THE ROTATED (FINAL) COORDINATES ARE DEFINED AS
+	 (45 DEGREES CLOCKWISE ROTATION)
+
+	 X=(YT+XT)/SQRT(2.)
+	 Y=(YT-XT)/SQRT(2.)
+
+	 INPUT.
+	------
+
+	Y        Y COORDINATE OF THE ROTATED TEPHIGRAM
+	Q        SATURATION MIXING RATIO OVER WATER (KG/KG)
+	ALFA     NORMALISATION FACTOR FOR THE LOG(THE) AXIS
+
+	OUTPUT.
+	-------
+
+	T        TEMPERATURE (KELVIN)  DIMENSION NLEV
+	P        PRESSURE (HPA)        DIMENSION NLEV
+
+  */
+
+  double		PREC = 1.E-04;
+  double		ZC1=(1.-EPS)+EPS/Q;
+  double		ZC2=SQR2*Y;
+  double		TF=TMELT,PS;
+
+  int			not_found=1;
+
+  for(int j=0; j<50 && not_found; j++)
+    {
+      double		ES,THE,F,DF,TFN;
+
+      //ES=C1ES*exp(C3LES*(TF-TMELT)/(TF-C4LES));
+      ES=restt*exp(r3les*(TF-TMELT)/(TF-r4les));
+      PS=ZC1*ES;
+      THE=TF*pow(100000./PS,CHI);
+      F=ALFA*log(THE)-TF-ZC2;
+      //DF=ALFA/TF-1.-ALFA*ZC1*ES*CHI*C5LES/(pow(TF-C4LES,2)*PS);
+      DF=ALFA/TF-1.-ALFA*ZC1*ES*CHI*C5LES/(pow(TF-r4les,2)*PS);
+      TFN = F/DF;
+      TF = TF - TFN;
+      if( fabs(TFN) < PREC ) not_found = 0;
+    }
+
+  if(not_found)
+    {
+      T = P = 0;
+    }
+  else
+    {
+      T = TF;
+      P = PS;
+    }
+
+  return;
+}
+
+void MvTephiFrame::TTP2XY(double T, double P, double ALFA, double& X,double& Y)
+{
+  /*
+    DEFINES THE TEPHIGRAM COORDINATES, FROM (T,P) COORDINATES
+
+    METHOD,
+    THE BASIC COORDINATES ARE DEFINED AS
+
+    XT=T
+    YT=ALFA*LOG(THE)
+
+    THE ROTATED (FINAL) COORDINATES ARE DEFINED AS
+    (45 DEGREES CLOCKWISE ROTATION)
+    X=(YT+XT)/SQRT(2.)
+    Y=(YT-XT)/SQRT(2.)
+
+
+    INPUT.
+
+    T        TEMPERATURE (KELVIN)  DIMENSION NLEV
+    P        PRESSURE (HPA)        DIMENSION NLEV
+    ALFA     NORMALISATION FACTOR FOR THE LOG(THE) AXIS
+
+    OUTPUT.
+    X        X COORDINATE OF THE ROTATED TEPHIGRAM
+    Y        Y COORDINATE OF THE ROTATED TEPHIGRAM
+
+
+  */
+
+
+  double ZFAC, THE;
+
+  ZFAC=1./SQR2;
+  THE= ALFA*(log(T) + CHI*log(100000./P));
+
+  X = (THE+T)*ZFAC;
+  Y = (THE-T)*ZFAC;
+  X = T-273.15;
+  Y = P/100;
+  return;
+}
+
+void MvTephiFrame::Metadata(int backGround, MvNcVar *var, const char* title)
+{
+  // Sets the values for a later call to draw the
+  // tephigram background.
+
+  var->addAttribute("TEPHI_PRESSURE_TOP", PMN );
+  var->addAttribute("TEPHI_PRESSURE_BOTTOM", PMX);
+  var->addAttribute("TEPHI_TEMP_MIN", TMN );
+  var->addAttribute("TEPHI_TEMP_MAX",TMX);
+  var->addAttribute("TEPHI_AXIS_LABEL",backGround);
+  var->addAttribute("MV_VERB", "CURVE");
+  if ( title ) {
+    var->addAttribute("MV_TITLE", title);
+    var->addAttribute("title", title);
+    }
+
+}
+
+void MvTephiFrame::TSonde(double* PRES, double* TEMP, int nMin, int nMax,
+			  int THIK, char* STYLE, const char* COL, MvNcVar *x,  MvNcVar *p)
+{
+  // Add the curve values to netcdf variables
+  int    NPT = 0;
+  int    cMax  = nMax;
+  if( nMin == 0 )     //-- fix for pressure level data
+     ++cMax;
+  double *CRVX = new double[cMax];
+  double *CRVY = new double[cMax];
+
+  // Add graph data to variable. Prefix any fields that should be passed on to
+  // MagicsEngine with _MAGICS_. PlotMod will strip off the prefix and pass
+  // the rest on to MagicsEngine.
+  x->addAttribute("_MAGICS_GRAPH_MISSING_DATA_MODE", "DROP" );
+  x->addAttribute("_MAGICS_GRAPH_MISSING_DATA_STYLE", STYLE );
+  x->addAttribute("_MAGICS_GRAPH_MISSING_DATA_COLOUR", COL );
+  x->addAttribute("_MAGICS_GRAPH_MISSING_DATA_THICKNESS", THIK );
+  x->addAttribute("_MAGICS_GRAPH_LINE_COLOUR", COL );
+  x->addAttribute("_MAGICS_GRAPH_LINE_STYLE", STYLE );
+  x->addAttribute("_MAGICS_GRAPH_LINE_THICKNESS", THIK );
+  x->addAttribute("_MAGICS_GRAPH_CURVE_METHOD", "STRAIGHT" );
+
+  int iMax = 0;
+  for ( int i=0; i<cMax; i++, NPT++)
+    {
+      if( i >= (nMin-1) )  //-- levels start from 1..., indices 0...
+	{
+	  TTP2XY(TEMP[i],PRES[i],ALFA,CRVX[iMax],CRVY[iMax]);
+	  ++iMax;
+	}
+    }
+
+  // Add the data to the netcdf variables
+  x->put(CRVX, 1, iMax);
+  if ( p) 
+    p->put(CRVY, 1, iMax);
+
+  delete [] CRVX;
+  delete [] CRVY;
+}
+
+void MvTephiFrame::TFlag(double* PRES, double* TEMP, double* U, double* V, double* HEIGHT,
+			      int KPT, const char* COLS, MvNetCDF &netcdf,
+			      const string& PressKey,const string &TempKey,
+			      const string& WindKey)
+{
+  /*
+    PURPOSE.
+	-------
+
+	GIVEN N POINTS DEFINED BY THEIR TEMPERATURE (KELVIN) AND
+	PRESSURE (PA), HEIGHT (M) AND WIND COMPONENTS (M/S) THIS
+	ROUTINE DRAWS THE CORRESPONDING WIND FLAGS ON A TEPHIGRAM
+
+
+	INPUT.
+	-----
+
+	PRES     PRESSURE (PA)
+	TEMP     TEMPERATURE (K)
+	U        ZONAL WIND COMPONENT (M/S)
+	V        MERIDIONAL WIND COMPONENT (M/S)
+	HEIGHT   HEIGHT (M)
+	KPT      NUMBER OF POINTS
+	COLS     Colour of Symbols (Numbers) and Flags
+
+
+	NOTE.
+	----
+
+	PRESSURE VALUES ARE ASSUMED IN DECREASING ORDER, THE FIRST VALUE
+	BEING GREATER THAN PMIN.
+	POINTS OUTSIDE THE TEPHIGRAM BOUNDARIES ARE NOT PLOTTED.
+
+  */
+
+  vector<double> vecpres_x,vecpres_y, vecpres_values;
+  vector<double> vectemp_x,vectemp_y, vectemp_values;
+  vector<double> vecwind_x,vecwind_y, vecwind_speed,vecwind_dir;
+
+  double Rad = 180./3.14159;
+  int	nl = KPT/MaxLabels;
+  if( nl == 0) nl = 1;
+
+  for ( int i=0; i<KPT; i++)
+    {
+      double	Direction, Speed, TTERM, TTR, CRVY;
+
+      TXP2TY(X2,PRES[i],ALFA,TTR,CRVY);
+
+      if( CRVY >= Y1 && CRVY <= Y4)
+	{
+	  //-- I hope this comparision works... (vk 980121)
+	  if( HEIGHT[i] != (double)kBufrMissingValue )
+	    {
+	      TTR = HEIGHT[i]/G;
+	      vecpres_values.push_back( floor( TTR+0.5 ) );
+	      vecpres_x.push_back(X1+(X2-X1)/6.);
+	      vecpres_y.push_back( CRVY );
+	    }
+	  if( TEMP[i] != (double)kBufrMissingValue )
+	    {
+	      TTERM = TEMP[i]-TMELT+0.5;
+	      vectemp_values.push_back( floor( TTERM+0.5 ) );
+	      vectemp_x.push_back( X1+(X2-X1)/6.*5.);
+	      vectemp_y.push_back( CRVY );
+	    }
+	  if( U[i] != (double)kBufrMissingValue )
+	    {
+	      Speed = sqrt(pow(U[i],2) + pow(V[i],2));
+	      if ( Speed < 0.2) Speed = 0.2;
+	      Direction = -90.0-atan2(V[i],U[i])*Rad ;
+	      vecwind_speed.push_back(Speed);
+	      vecwind_dir.push_back(Direction);
+	      vecwind_x.push_back( X1+(X2-X1)/2.);
+	      vecwind_y.push_back( CRVY );
+	    }
+	}
+    }
+
+  // Generate NetCDF variables.
+  MvNcVar *pres = netcdf.addVariable(PressKey,ncDouble,3,(long)vecpres_x.size() );
+  pres->addAttribute("MV_VERB","PSYMB");
+  pres->addAttribute("_MAGICS_SYMBOL_POSITION_MODE","GRAPH");
+  pres->addAttribute("_MAGICS_SYMBOL_COLOUR",COLS);
+  pres->addAttribute("_MAGICS_SYMBOL_HEIGHT",0.2);
+  pres->addAttribute("_MAGICS_SYMBOL_FORMAT","(I8)");
+  pres->addAttribute("_MAGICS_SYMBOL_DISTANCE_APART",0.2);
+  pres->addAttribute("_MAGICS_SYMBOL_TYPE","NUMBER");
+
+  pres->addAttribute("_REQUEST_NAMES",
+		       "SYMBOL_INPUT_X_POSITION/SYMBOL_INPUT_Y_POSITION/SYMBOL_INPUT_NUMBER_LIST");
+  AddAttributes(pres,PressKey);
+
+  MvNcVar *temp = netcdf.addVariable(TempKey,ncDouble,3,(long)vectemp_x.size());
+  temp->addAttribute("MV_VERB","PSYMB");
+  temp->addAttribute("_MAGICS_SYMBOL_POSITION_MODE","GRAPH");
+  temp->addAttribute("_MAGICS_SYMBOL_COLOUR",COLS);
+  temp->addAttribute("_MAGICS_SYMBOL_HEIGHT",0.2);
+  temp->addAttribute("_MAGICS_SYMBOL_DISTANCE_APART",0.2);
+  temp->addAttribute("_MAGICS_SYMBOL_TYPE","NUMBER");
+  temp->addAttribute("_REQUEST_NAMES",
+		       "SYMBOL_INPUT_X_POSITION/SYMBOL_INPUT_Y_POSITION/SYMBOL_INPUT_NUMBER_LIST");
+  AddAttributes(temp,PressKey);
+
+  MvNcVar *wind = netcdf.addVariable(WindKey,ncDouble,4,(long)vecwind_x.size());
+  wind->addAttribute("MV_VERB","PSYMB");
+  wind->addAttribute("_MAGICS_SYMBOL_POSITION_MODE","GRAPH");
+  wind->addAttribute("_MAGICS_SYMBOL_TYPE","WIND");
+  wind->addAttribute("_MAGICS_WIND_FLAG_LENGTH",0.5);
+  //wind->addAttribute("_MAGICS_WIND_FLAG_COLOUR",COLF);
+  wind->addAttribute("_MAGICS_SYMBOL_COLOUR",COLS);
+  wind->addAttribute("_MAGICS_WIND_FIELD_TYPE", "FLAGS");
+  wind->addAttribute("_MAGICS_SYMBOL_WIND_ORIGIN_MARKER","ON");
+  wind->addAttribute("_REQUEST_NAMES",
+		       "SYMBOL_INPUT_X_POSITION/SYMBOL_INPUT_Y_POSITION/SYMBOL_INPUT_WIND_DIRECTION/SYMBOL_INPUT_WIND_SPEED");
+  AddAttributes(wind,WindKey);
+
+
+  // Now the header is written, add the data.
+  pres->put(vecpres_x,1,(long)vecpres_x.size());
+  pres->setCurrent(1); pres->put(vecpres_y,1,(long)vecpres_y.size());
+  pres->setCurrent(2); pres->put(vecpres_values,1,(long)vecpres_values.size());
+
+  temp->put(vectemp_x,1,(long)vectemp_x.size());
+  temp->setCurrent(1); temp->put(vectemp_y,1,(long)vectemp_y.size());
+  temp->setCurrent(2); temp->put(vectemp_values,1,(long)vectemp_values.size());
+
+  wind->put(vecwind_x,1,(long)vecwind_x.size());
+  wind->setCurrent(1); wind->put(vecwind_y,1,(long)vecwind_y.size());
+  wind->setCurrent(2); wind->put(vecwind_dir,1,(long)vecwind_dir.size());
+  wind->setCurrent(3); wind->put(vecwind_speed,1,(long)vecwind_speed.size());
+}
+
+void MvTephiFrame::generateKey(string &str,int par,const char *date,const char *time,
+			       const char *step, const char *expver,int counter)
+{
+  // Do it with good old sprintf pPPPYYYYMMDDHHmmSSSSVVVV_N
+  //char key[40];
+  //sprintf(key,"%03d%08s%04s%04s%04s_%d",par,date,time,step,expver,counter);
+  //str = key;
+
+  // But man page says "behaviour of %04s is undefined...", and indeed:
+  //  - on SGI leading zeros are printed
+  //  - on g++ leading spaces are printed => NetCDF key error!
+  // thus let us try smart new iostreams:
+  // (Should we already start using standard stringstreams?)
+
+  char key[40];
+  ostrstream oss( key, sizeof( key ) );
+  oss << setfill( '0' )
+      << "p"
+      << setw( 3 ) << par
+      << setw( 8 ) << date
+      << setw( 4 ) << time
+      << setw( 4 ) << step
+      << setw( 4 ) << ( expver ? expver : "1" )
+      << "_"       << counter
+      << ends;
+
+//  cout << " Key " << key << endl;
+  str = key;
+}
+void MvTephiFrame::AddAttributes(MvNcVar *var,const string &key)
+{
+ // Split the string back into individual components.
+  var->addAttribute("PARAM",key.substr(1,3).c_str());
+  var->addAttribute("DATE",key.substr(4,8).c_str());
+  var->addAttribute("TIME",key.substr(12,4).c_str());
+  var->addAttribute("STEP",key.substr(16,4).c_str());
+  var->addAttribute("EXPVER",key.substr(20,4).c_str());
+
+}
+
diff --git a/src/PM_Tephigram/MvTephiFrame.h b/src/PM_Tephigram/MvTephiFrame.h
new file mode 100644
index 0000000..5bec8c3
--- /dev/null
+++ b/src/PM_Tephigram/MvTephiFrame.h
@@ -0,0 +1,90 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// -*-C++-*-
+// Header file for PlotMod Tephigram application.
+#ifndef MVTEPHIFRAME_H
+#define MVTEPHIFRAME_H
+
+#include "MvNetCDF.h"
+
+double 		TNORM(double, int&);
+
+const double Pi = 3.14159265;
+const double G = 9.80665;
+const double PXL = 29.7;
+const double PYL = 29.7;
+const double PREC = 1.0e-8;
+const double ZEPQMI = 1.0e-12;
+const double EPX = 1.7e38 -1.;
+
+const int    MaxLevel = 100;
+const int    MaxLabels = 10;
+
+//int  U_Field = 131;
+//int  V_Field = 132;
+//int  Temp    = 130;
+//int  Dew     = 133;
+//int  LnPress = 152;
+
+#define max(A,B)  ((A) >(B) ? (A) : (B))
+
+class MvTephiFrame 
+{
+ protected:
+
+  double RD,CPD,CHI,TMELT,RV,EPS, //-- C1ES, C2ES, C3LES, C4LES,
+    C5LES,VTMPC1,                 //--             C3IES, C4IES,
+    X1,Y1,X2,Y2,X3,Y3,X4,Y4,
+    DT,DTN,TMM,PYL1,PXL1,ALFA,T3,
+    PMN,PMX,TMN,TMX,XFLAG,
+    RAT,XGPR, XGPL, YGPT, YGPBT, PXL3,
+    ZXX, PXL, PYLT,ZXT, ZYT ,PXL2, PYL2,
+    PXP2, PYP2, PYL3, PXP3, PYP3,
+    PXLT, PXPT, PYPT,
+    HNUM, WFL, TRCH,
+    GPT, GPB, ZYY, YGPB,PXP1, PYP1,
+    RATX, RATY;
+
+  double restt;    //=611.21
+  double r2es;     //=restt*rd/rv
+  double r3les;    //=17.502
+  double r4les;    //=32.19
+  double r3ies;    //=22.587
+  double r4ies;    //=-0.7
+
+
+  void		init();
+
+
+ public:
+  MvTephiFrame(char* xx = NULL);
+  ~MvTephiFrame(); 
+  void generateKey(string&,int,const char *,const char *,const char *,const char *,int);
+  
+  void Metadata(int, MvNcVar *, const char* title );
+  void AddAttributes(MvNcVar *var,const string &key);
+  
+  void TSonde(double*, double*, int, int, int, char*, 
+	      const char*,MvNcVar *x, MvNcVar *p=0);
+
+  void TFlag(double*,double*,double*,double*,double*,int,
+	     const char*, MvNetCDF&, const string&, const string&,
+	     const string&);
+  
+  double DewPoint(double, double, double, const string& );
+  bool setFrame(double, double, double, double,double );
+  void TGeopot(double*,double*,double*,double*,int);
+  void TYQ2TP(double,double,double,double&,double&);
+  void TTP2XY(double,double,double,double&,double&);
+  void TXP2TY(double,double,double,double&,double&);
+};
+
+
+#endif
diff --git a/src/PM_Tephigram/MvTephiParams.cc b/src/PM_Tephigram/MvTephiParams.cc
new file mode 100644
index 0000000..93ecd80
--- /dev/null
+++ b/src/PM_Tephigram/MvTephiParams.cc
@@ -0,0 +1,146 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// MvTephiParams.cc  - Nov2003/vk
+
+#include "MvTephiParams.h"
+
+
+MvTephiParams::MvTephiParams( const MvRequest& in )
+  :ok_( true )
+  ,backGround( 1 )
+  ,lat2( 0.0 )
+  ,lon2( 0.0 )
+  ,pointType( eInterpolated )
+{
+/*
+  T1 = in("MINIMUM_TEMPERATURE");
+  
+  T2 = in("MAXIMAL_TEMPERATURE");
+  P2 = in("BOTTOM_PRESSURE");
+  P1 = in("TOP_PRESSURE");
+
+
+  if( strcmp(in("BACKGROUND"),"ON") == 0 )
+    backGround = 0;
+*/
+
+T1 = -40;
+T2 = 40;
+  P2 = 1020;
+  P1 = 100; 
+  backGround = 1;
+
+  MvRequest datareq = in;                           //-- get DATA subrequest
+ // in.getValue(datareq,"DATA");
+
+
+  if( (const char*)datareq("DEW_POINT_FORMULATION") )
+    {
+      dewPointFormulaType = (const char*)datareq("DEW_POINT_FORMULATION");
+    }
+
+  formulaPrintName = dewPointFormulaType;
+  for( int it=0; it < formulaPrintName.length(); ++it )
+    {
+      char cc = formulaPrintName[it];
+      if( cc == '_' )
+	formulaPrintName[it] = ' ';
+      else
+	formulaPrintName[it] = tolower(cc);
+    }
+//  cout << "DEW_POINT_FORMULATION = " << dewPointFormulaType.c_str() << endl;
+
+  if( (const char*)datareq("LINE_COLOUR") )
+  {
+      line_colour = (const char*)datareq("LINE_COLOUR");
+  }
+  line_thick  = datareq("LINE_THICKNESS");
+  if( (const char*)datareq("LINE_STYLE") )
+  {
+      if ( strcmp((const char*)datareq("LINE_STYLE"),"DEFAULT") )
+      {
+	      line_style_temp = (const char*)datareq("LINE_STYLE");
+	      line_style_dew  = (const char*)datareq("LINE_STYLE");
+      }
+      else
+      {
+	      line_style_temp = "SOLID";
+	      line_style_dew  = "DASH";
+      }
+  }
+  else
+  {
+      line_style_temp = "SOLID";
+      line_style_dew  = "DASH";
+  }
+
+  if( (const char*)datareq("FLAG_COLOUR") )
+  {
+      flag_colour = (const char*)datareq("FLAG_COLOUR");
+  }
+
+                                               //-- get GRIB parameter numbers
+  const char* p;
+  U_Field = (p=datareq( "U_WIND_PARAM" ))      ? atol(p) : 131;
+  V_Field = (p=datareq( "V_WIND_PARAM" ))      ? atol(p) : 132;
+  Temp    = (p=datareq( "TEMPERATURE_PARAM" )) ? atol(p) : 130;
+  Dew     = (p=datareq( "SPECIFIC_HUMIDITY_PARAM" )) ? atol(p) : 133;
+  LnPress = (p=datareq( "LNSP_PARAM" ))        ? atol(p) : 152;
+//cout << U_Field << ", " << V_Field << ", " << Temp << ", " << Dew << ", " << LnPress << endl;
+
+
+ MvRequest  station;                           //-- get STATION subrequest
+  datareq.getValue( station, "STATION" );
+
+  lat = station( "LATITUDE" );
+  lon = station( "LONGITUDE" );
+
+  Wf = 0.;  //-- constant or a variable???????
+
+	
+                                               //-- check background params
+  if( (T1 == T2) || (P1 == P2) )
+    {
+      ok_ = false;
+      errorMsg_ = "Tephigrams: Invalid Parameters (Temperature/Pressure)..";
+      return;
+    }
+  if( T1 > T2 ) 
+    {
+      double tmp = T2;   T2 = T1;   T1 = tmp;
+      errorMsg_ = "Tephigrams: Minimun Temperature > Maximum...";
+    }
+  if( P1 > P2 )
+    {
+      double tmp = P2;   P2 = P1;   P1 = tmp;
+      errorMsg_ = "Tephigrams: Top Pressure > Bottom...";
+    }
+
+
+                                               //-- check point type
+  if( strcmp( datareq("POINT"), "NEAREST" ) == 0 )
+    {
+      pointType = eGridPoint;
+    }
+  else if( strcmp(datareq("POINT"), "AREA_AVERAGE" ) == 0 )
+    {
+      pointType = eAreaAverage;
+      datareq.getValue( lat,  "AREA", 0 );  //-- n
+      datareq.getValue( lon,  "AREA", 1 );  //-- w
+      datareq.getValue( lat2, "AREA", 2 );  //-- s
+      datareq.getValue( lon2, "AREA", 3 );  //-- e
+    }
+
+}
+
+MvTephiParams::~MvTephiParams()
+{
+  //--free( line_colour );
+}
diff --git a/src/PM_Tephigram/MvTephiParams.h b/src/PM_Tephigram/MvTephiParams.h
new file mode 100644
index 0000000..e146d3a
--- /dev/null
+++ b/src/PM_Tephigram/MvTephiParams.h
@@ -0,0 +1,82 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// MvTephiParams.h  - Nov2003/vk
+//
+//  Hide extracting and checking of input request
+//  parameters - to make Tephigrams.cc more readable!
+//
+//  Q&D struct with all member data directly accessible!
+//
+
+#ifndef MVTEPHIPARAM_H
+#define MVTEPHIPARAM_H
+
+#include <string>
+#include "Metview.h"
+
+
+enum EPointType { eGridPoint, eInterpolated, eAreaAverage };
+
+
+struct MvTephiParams
+{
+ private:
+  MvTephiParams();   //-- not allowed!
+
+ public:
+  MvTephiParams( const MvRequest& in );
+  ~MvTephiParams();
+
+ public:
+  bool   ok_;
+  double T1;
+  double T2;
+  double P1;
+  double P2;
+  int    backGround;
+  string dewPointFormulaType;
+  string formulaPrintName;
+  string line_colour;
+  int    line_thick;
+  string line_style_temp;
+  string line_style_dew;
+  string flag_colour;
+  int    U_Field;
+  int    V_Field;
+  int    Temp;
+  int    Dew;
+  int    LnPress;
+  double lat;
+  double lon;
+  double lat2;
+  double lon2;
+  double Wf;
+  EPointType  pointType;
+
+  string errorMsg_;
+};
+
+
+#if 0
+struct MvTephiData
+{
+  double T;
+  double Q;
+  double PRESS;
+  double Half;
+  double TD;
+  double U;
+  double V;
+  double Height;
+};
+#endif
+
+
+#endif
diff --git a/src/PM_Tephigram/Tephigrams.cc b/src/PM_Tephigram/Tephigrams.cc
new file mode 100644
index 0000000..00cca1c
--- /dev/null
+++ b/src/PM_Tephigram/Tephigrams.cc
@@ -0,0 +1,500 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "inc_iostream.h"
+#include "MvException.h"
+
+#include <math.h>
+
+#include "Metview.h"
+#include "MvTephiFrame.h"
+#include "MvTephiParams.h"
+#include "MvTephiData.h"
+#include "Cached.h"
+#include "MvObs.h"
+
+static Cached GRIB("GRIB");
+static Cached BUFR("BUFR");
+
+//________________________________________________________________________
+
+class BufrTephigram : public MvService {
+protected:
+  BufrTephigram(const char* kw) : MvService(kw) {};
+public:
+  BufrTephigram() : MvService("PM_BUFR_TEPHI") {};
+  void serve(MvRequest&,MvRequest&);
+protected:
+  bool getIdent(MvRequest& station, MvObsSetIterator& iter);
+  bool getLocation(MvRequest& station, MvObsSetIterator& iter);
+protected:
+  int  Temp;
+  int  Dew;
+  int  U_Field;
+};
+//________________________________________________________________________
+
+class GribTephigram : public MvService {
+protected:
+  GribTephigram(const char* kw) : MvService(kw) {};
+  void Grib_Interface(MvRequest&,MvRequest&,MvRequest&);
+public:
+  GribTephigram() : MvService("PM_GRIB_TEPHI") {};
+  void serve(MvRequest&,MvRequest&);
+protected:
+#if 0
+  int  U_Field;
+  int  V_Field;
+  int  Temp;
+  int  Dew;
+  int  LnPress;
+#endif
+};
+//________________________________________________________________________
+
+class OldGribTephigram : public GribTephigram {
+public:
+  OldGribTephigram() : GribTephigram("PM_PRE19950404_GRIB_TEPHI") {};
+  void serve(MvRequest&,MvRequest&);
+};
+//________________________________________________________________________
+
+
+
+void GribTephigram::serve( MvRequest& in, MvRequest& out )
+{
+  cout << "\nin GribTephigram::serve...\n" << endl;
+  cout << "-------- request in ------" << endl;
+  in.print();
+  cout << "ACTION-->" << string(in("_ACTION")) << endl;
+  cout << "-------- end of request in ------" << endl;
+
+  MvRequest datareq;
+  in.getValue(datareq,"DATA");
+
+  MvRequest			grib;        //-- T & LNSP originate from spherical harmonics
+  in.getValue( grib, "DATA_1" );
+  MvFieldSet			fs( grib );
+
+  MvRequest			grib2;       //-- Q originates from Gaussian grid
+  in.getValue( grib, "DATA_2" );
+  MvFieldSet			fs2( grib );
+
+  for( int i=0; i<fs2.countFields(); ++i )   //-- merge fieldsets
+    fs += fs2[ i ];
+
+  MvRequest data_in = fs.getRequest();
+  Grib_Interface( in, data_in, out );
+}
+//________________________________________________________________________
+
+void OldGribTephigram::serve( MvRequest& in, MvRequest& out )
+{
+  MvRequest	data_in;
+  MvRequest datareq;
+  in.getValue(datareq,"DATA");
+
+  datareq.getValue( data_in, "OLDDATA" );
+
+  Grib_Interface( in, data_in, out );
+}
+//________________________________________________________________________
+
+void GribTephigram::Grib_Interface( MvRequest& in
+				  , MvRequest& data_in
+				  , MvRequest& out )
+{
+  MvTephiParams pars(in);
+  if( pars.errorMsg_.length() > 0 )
+    {
+      int err = pars.ok_ ? 0 : 1;
+      setError( err, pars.errorMsg_.c_str() );
+      if( err )
+	return;                     //-- DO NOTHING!!!!!!!!!!!!!!!!!
+    }
+
+  string name = marstmp();          //-- Open netcdf file for writing the results
+
+  MvNetCDF netcdf(name,'w');
+
+
+  MvFieldSet		fs( data_in );
+  MvFieldSetIterator	iter( fs );
+
+  iter.sort("STEP");
+  iter.sort("TIME");
+  iter.sort("DATE");
+
+  MvField firstField = iter();
+  while( firstField )               //-- loops dates, i.e. tephigram plots
+    {
+      MvTephiDataBase* tep = MvTephiDataFactory( firstField, pars );
+      if( ! tep )
+	{
+	  setError( 13, "Tephigrams: unimplemented input field level type!" );
+	  return;
+	}
+
+      try
+	{
+	  tep->readOneSetOfFields( iter );
+	  tep->generate( netcdf );
+	}
+      catch( MvException& e )
+	{
+	  cerr << "Exception caught: " << e.what() << endl;
+	  setError( 13, e.what() );
+	  return;
+	}
+
+      firstField = tep->returnToken();
+
+      delete tep;
+    }
+
+  MvRequest cdfreq("NETCDF");
+  cdfreq("PATH") = name.c_str();
+  out = out + cdfreq;
+
+  if ( (const char *)in("_NAME") )
+    out("_NAME") = in("_NAME");
+
+  out.print();
+  return;
+}
+//____________________________________________________________________________
+
+bool BufrTephigram::getIdent(MvRequest& station, MvObsSetIterator& iter)
+{
+  long ident = station("IDENT");
+  if (ident)
+    {
+      iter.setWmoStation(ident);
+      return true;
+    }
+
+  return false;
+}
+
+bool BufrTephigram::getLocation(MvRequest& station, MvObsSetIterator& iter)
+{
+  double lat = station("LATITUDE");
+  double lon = station("LONGITUDE");
+  double eps = 0.0001;              //-- to allow for BUFR rounding differences
+
+  MvLocation loc1(lat+eps,lon-eps);
+  MvLocation loc2(lat-eps,lon+eps);
+
+  iter.setArea(loc1,loc2);
+
+  return true;
+}
+
+void BufrTephigram::serve( MvRequest& in, MvRequest& out )
+{
+  cout << "\nin BufrTephigram::serve...: "  << endl;
+  in.print();
+
+  Temp    = 130;
+  Dew     = 133;
+  U_Field = 131;  //-- specific humidity
+
+  MvRequest bufr;
+  MvRequest datareq;
+
+ 
+  datareq = in;
+  in.getValue(bufr,"DATA");
+  
+  int			backGround = 1;
+ 
+  backGround = 1;
+
+  MvObsSet		obsset(bufr);
+  MvObsSetIterator	iter(obsset);
+
+  MvRequest		station;
+  datareq.getValue(station,"STATION");
+
+  if( ! getIdent(station,iter) )
+  {
+     if( ! getLocation(station,iter) )
+     {
+        setError(1, "Tephigrams: WMO station number and/or location missing...");
+        return;
+     }
+  }
+
+
+  while (station) {
+    const char *sname =  station("NAME");
+    printf("station : %s\n", sname);
+    station.advance();
+  }
+
+ 
+
+  double T1 = -40,
+    T2 = 40,
+    P2 = 1020,
+    P1 = 200;
+  double Wf = 0.;
+
+  const char *line_colour = datareq("LINE_COLOUR");
+  int   line_thick        = datareq("LINE_THICKNESS");
+  const char *flag_colour = datareq("FLAG_COLOUR");
+
+  string line_style_temp, line_style_dew;
+  if( (const char*)datareq("LINE_STYLE") )
+  {
+      if ( strcmp((const char*)datareq("LINE_STYLE"),"DEFAULT") )
+      {
+	      line_style_temp = (const char*)datareq("LINE_STYLE");
+	      line_style_dew  = (const char*)datareq("LINE_STYLE");
+      }
+      else
+      {
+	      line_style_temp = "SOLID";
+	      line_style_dew  = "DASH";
+      }
+  }
+  else
+  {
+      line_style_temp = "SOLID";
+      line_style_dew  = "DASH";
+  }
+
+in.print();
+
+  if( (T1 == T2) || (P1 == P2) )
+    {
+      setError(1,"Tephigrams: Invalid Parameters (Temperature/Pressure)..");
+      return;
+    }
+  if( T1 > T2 )
+    {
+      setError(0,"Tephigrams: Minimun Temperature > Maximum...");
+      double		w;
+      w = T2;
+      T2 = T1;
+      T1 = w;
+    }
+  if( P1 > P2 )
+    {
+      setError(0,"Tephigrams: Top Pressure > Bottom...");
+      double      w;
+      w = P2;
+      P2 = P1;
+      P1 = w;
+    }
+
+  MvBufrParam		tempe( 12001),t_dew(12003),direction(11001),
+    strength(11002),GeoPotential(10003);
+
+  iter.setMessageType(2); //-- Vertical soundings (other than satellite)
+
+  MvObs obs;
+
+  MvLocation Loc;
+  double lat, lon;
+
+  // Open netcdf file for writing the results.
+  string name = marstmp();
+  MvNetCDF netcdf(name,'w');
+
+  string Tempkey, Dewkey, Ukey;
+  int counter = 1;
+
+  bool found = false;
+
+  while ( obs = iter() )
+    {
+      found = true;
+      obs.printAllValues();
+
+      Loc = obs.location();
+      lat = Loc.latitude();
+      lon = Loc.longitude();
+      float 		myT,myDew,myGeo,myDir,myStr,myP;
+      int		level_t = 0, level_td = 0, level = 0;
+      int		Nlev = obs.numberOfPressureLevels();
+      double		*T = new double[Nlev];
+      double		*T_t = new double[Nlev];
+      double		*PRESS = new double[Nlev];
+      double		*PRESS_t = new double[Nlev];
+      double		*PRESS_td = new double[Nlev];
+      double		*TD = new double[Nlev];
+      double		*U = new double[Nlev];
+      double		*V = new double[Nlev];
+      double		*Height = new double[Nlev];
+
+      float PrevLevel = FLT_MAX;
+      float Level = obs.firstPressureLevel();
+      while( Level != kBufrMissingValue )
+	{
+	  //-- Pressure levels decrease in the main sounding data.
+	  //-- At the end of msg there can be data for "special levels"
+	  //--( e.g. 'Maximum wind level') which refer back to lower
+	  //-- levels (higher pressure) and which should not be used.
+	  if( PrevLevel < Level )
+	     break;
+
+	  myT   =   obs.valueByPressureLevel( Level, tempe);
+	  myDew =   obs.valueByPressureLevel( Level, t_dew);
+	  myDir =   obs.valueByPressureLevel( Level, direction);
+	  myStr =   obs.valueByPressureLevel( Level, strength);
+	  myGeo =   obs.valueByPressureLevel( Level, GeoPotential);
+
+	  myP = Level;
+	  if( myT != kBufrMissingValue )
+	    {
+	      T_t[level_t] = myT;
+	      PRESS_t[level_t] = 100.*myP;
+	      level_t++;
+	    }
+	  if( myDew != kBufrMissingValue )
+	    {
+	      TD[level_td] = myDew;
+	      PRESS_td[level_td] = 100.*myP;
+	      level_td++;
+	    }
+
+	  if( myDir != kBufrMissingValue )
+	    {
+	      U[level] = -myStr*sin(myDir*Pi/180.0);
+	      V[level] = -myStr*cos(myDir*Pi/180.0);
+	    }
+	  else
+	    {
+	      U[level] = kBufrMissingValue;
+	      V[level] = kBufrMissingValue;
+	    }
+
+	  PRESS[level] = 100.*myP;
+	  T[level] = myT;
+	  Height[level] = myGeo;
+	  level++;
+
+	  PrevLevel = Level;
+	  Level = obs.nextPressureLevel();
+	}
+
+      if ( level_t<=1)
+	{
+	  if( obs.messageSubtype() == 91 )  //-- ECMWF code for PILOT!
+	    setError(1,"Tephigrams: Too few data in PILOT soundings (full TEMP sounding needed)" );
+	  else
+	    setError(1,"Tephigrams: Problems with BUFR data.....");
+	  return;
+	}
+
+       MvTephiFrame*  frame = new MvTephiFrame();
+
+      if( ! frame->setFrame(P1,P2,T1,T2,Wf))
+	{
+	  setError(1,"Invalid Range...");
+	  delete frame;
+	  return;
+	}
+
+      MvNcVar *temp;
+      TDynamicTime tmpdate = obs.obsTime();
+      char odate[9],otime[5];
+      sprintf(odate,"%04d%02d%02d",tmpdate.GetYear(),tmpdate.GetMonth(), tmpdate.GetDay() );
+      sprintf(otime,"%02d%02d",tmpdate.GetHour(),tmpdate.GetMin() );
+
+      frame->generateKey(Tempkey,Temp,odate,otime,"0000","0000",counter);
+      frame->generateKey(Dewkey,Dew,odate,otime,"0000","0000",counter);
+      frame->generateKey(Ukey,U_Field,odate,otime,"0000","0000",counter);
+
+      temp = netcdf.addVariable(Tempkey.c_str(), ncDouble,2,level_t);
+
+      char Title[150];
+      sprintf( Title,"Station %5.5d (%.2f %.2f) %s",
+	       obs.WmoIdentNumber(), lat, lon,
+	       obs.obsTime().ShorterCharValue());
+
+      frame->Metadata(backGround,temp, Title);
+      frame->AddAttributes(temp,Tempkey);
+      temp->addAttribute("_REQUEST_NAMES","DATA_X_VALUES/DATA_Y_VALUES");
+
+      frame->TSonde(PRESS_t,T_t,1,level_t,line_thick,(char*)line_style_temp.c_str(),line_colour,temp);
+
+      if ( level_td>1)
+	{
+	  MvNcVar *dew;
+	  dew = netcdf.addVariable(Dewkey.c_str(), ncDouble,2,level_td);
+	  frame->Metadata(backGround,dew, 0);
+
+	  frame->AddAttributes(dew,Dewkey);
+
+	  dew->addAttribute("_REQUEST_NAMES","DATA_X_VALUES/DATA_Y_VALUES");
+	  frame->TSonde(PRESS_td,TD,1,level_td,line_thick,(char*)line_style_dew.c_str(),line_colour,dew);
+	}
+
+      counter++;
+
+      if ( level>1 )
+	{
+	  string Presskey;
+	  frame->generateKey(Tempkey,Temp,odate,otime,"0000","0000",counter);
+	  frame->generateKey(Presskey,0,odate,otime,"0000","0000",counter);
+	  frame->generateKey(Ukey,U_Field,odate,otime,"0000","0000",counter);
+
+	  frame->TFlag(PRESS,T,U,V,Height,level,
+                       flag_colour,                //-- flag colour for numbers too
+		       netcdf,Presskey,Tempkey,Ukey);
+	}
+
+
+      // Free all the allocated arrays.
+      delete [] T;
+      delete [] T_t;
+      delete [] PRESS;
+      delete [] PRESS_t;
+      delete []	PRESS_td;
+      delete []	TD;
+      delete [] U;
+      delete [] V;
+      delete [] Height;
+    }
+
+  if ( ! found )
+    {
+      setError(1,"Tephigrams: No Data found for given Station...");
+      return;
+    }
+
+  MvRequest cdfreq("NETCDF");
+  cdfreq("PATH") = name.c_str();
+  out = out + cdfreq;
+
+  if ( (const char *)in("_NAME") )
+    out("_NAME") = in("_NAME");
+  out.print();
+}
+//____________________________________________________________________________
+
+int main(int argc,char **argv)
+{
+  MvApplication theApp(argc,argv);
+  BufrTephigram     BufrTephi;
+  GribTephigram     GribTephi;
+  OldGribTephigram  OldGribTephi;
+
+  BufrTephi.addModeService("STATION", "STATION");
+
+  // The applications don't try to read or write from pool, this
+  // should not be done with the new PlotMod.
+  BufrTephi.saveToPool(false);
+  GribTephi.saveToPool(false);
+  OldGribTephi.saveToPool(false);
+
+  theApp.run();
+}
diff --git a/src/Percentile/Makefile.in b/src/Percentile/Makefile.in
index bb2bce5..7d561cf 100644
--- a/src/Percentile/Makefile.in
+++ b/src/Percentile/Makefile.in
@@ -156,6 +156,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -171,6 +172,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,11 +200,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/Percentile/ObjectSpec.Percentile b/src/Percentile/ObjectSpec.Percentile
index 147ed1e..14196e6 100644
--- a/src/Percentile/ObjectSpec.Percentile
+++ b/src/Percentile/ObjectSpec.Percentile
@@ -6,6 +6,7 @@ object,
 	rules_file       = '$METVIEW_DIR_SHARE/etc/PercentileRules',
 	default_name     = Percentile,
 	type             = Data,
+        icon_box	 = Data processing,
 	expand           = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
 	macro            = percentile,
 	editor_type      = SimpleEditor,
diff --git a/src/PottF/Makefile.in b/src/PottF/Makefile.in
index 835a617..b4ba601 100644
--- a/src/PottF/Makefile.in
+++ b/src/PottF/Makefile.in
@@ -136,6 +136,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -151,6 +152,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -177,11 +180,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/Relhum/Makefile.am b/src/Relhum/Makefile.am
new file mode 100644
index 0000000..90cb319
--- /dev/null
+++ b/src/Relhum/Makefile.am
@@ -0,0 +1,11 @@
+
+bin_PROGRAMS = bin/Relhum
+
+bin_Relhum_SOURCES  = Relhum.cc MvRelhum.cc MvRelhum.h
+bin_Relhum_LDADD    = $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB)
+
+
+BUILT_SOURCES = bin
+
+bin:
+	ln -s ../../bin bin
diff --git a/src/Relhum/Makefile.in b/src/Relhum/Makefile.in
new file mode 100644
index 0000000..5e0b87e
--- /dev/null
+++ b/src/Relhum/Makefile.in
@@ -0,0 +1,652 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+bin_PROGRAMS = bin/Relhum$(EXEEXT)
+subdir = src/Relhum
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/metview_config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_bin_Relhum_OBJECTS = Relhum.$(OBJEXT) MvRelhum.$(OBJEXT)
+bin_Relhum_OBJECTS = $(am_bin_Relhum_OBJECTS)
+am__DEPENDENCIES_1 =
+bin_Relhum_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__dirstamp = $(am__leading_dot)dirstamp
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_$(V))
+am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
+am__v_CXX_0 = @echo "  CXX   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_$(V))
+am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CXXLD_0 = @echo "  CXXLD " $@;
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(bin_Relhum_SOURCES)
+DIST_SOURCES = $(bin_Relhum_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AXX = @AXX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPLIBS = @CPPLIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DBMLIB = @DBMLIB@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
+EGREP = @EGREP@
+EMOS_LIB_NAME = @EMOS_LIB_NAME@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FDBLIB = @FDBLIB@
+FFIXED_FLAGS = @FFIXED_FLAGS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FLIBS = @FLIBS@
+GREP = @GREP@
+GRIBAPI_LIBS = @GRIBAPI_LIBS@
+GRIB_API_INC = @GRIB_API_INC@
+GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LDFLAGS_INLINE = @LDFLAGS_INLINE@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBNAME = @LIBNAME@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAGICS_CFLAGS = @MAGICS_CFLAGS@
+MAGICS_LIBS = @MAGICS_LIBS@
+MAGPLUS_CPPFLAGS = @MAGPLUS_CPPFLAGS@
+MAGPLUS_HOME = @MAGPLUS_HOME@
+MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
+MAGPLUS_LIB = @MAGPLUS_LIB@
+MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
+MAKEINFO = @MAKEINFO@
+MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
+MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
+METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
+METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
+METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
+METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
+METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
+METVIEW_NETCDF_FLAGS = @METVIEW_NETCDF_FLAGS@
+METVIEW_NETCDF_LIB = @METVIEW_NETCDF_LIB@
+METVIEW_PACKAGE_NAME = @METVIEW_PACKAGE_NAME@
+METVIEW_PACKAGE_RELEASE_DATE = @METVIEW_PACKAGE_RELEASE_DATE@
+METVIEW_PACKAGE_VERSION = @METVIEW_PACKAGE_VERSION@
+METVIEW_UTIL_LIB = @METVIEW_UTIL_LIB@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MVINCLUDE = @MVINCLUDE@
+MVSTARTDIR = @MVSTARTDIR@
+MV_EMOSLIB = @MV_EMOSLIB@
+MV_ENVIRON = @MV_ENVIRON@
+MV_MOTIF_FLAGS = @MV_MOTIF_FLAGS@
+MV_MOTIF_UTIL_LIB = @MV_MOTIF_UTIL_LIB@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+ODB1_BIN = @ODB1_BIN@
+ODB1_USE_SCRIPT = @ODB1_USE_SCRIPT@
+ODB1_VERSION = @ODB1_VERSION@
+ODB_CPPFLAGS = @ODB_CPPFLAGS@
+ODB_LDFLAGS = @ODB_LDFLAGS@
+ODB_LIBDIR = @ODB_LIBDIR@
+ODB_LIBS = @ODB_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@
+PKG_CONFIG = @PKG_CONFIG@
+PROJ4_LIBS = @PROJ4_LIBS@
+QMAKE = @QMAKE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_CPPFLAGS = @QT_CPPFLAGS@
+QT_CXXFLAGS = @QT_CXXFLAGS@
+QT_DEFINES = @QT_DEFINES@
+QT_INCPATH = @QT_INCPATH@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LFLAGS = @QT_LFLAGS@
+QT_LIBS = @QT_LIBS@
+QT_PATH = @QT_PATH@
+QT_VERSION = @QT_VERSION@
+QT_VERSION_MAJOR = @QT_VERSION_MAJOR@
+RANLIB = @RANLIB@
+RCC = @RCC@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SITE_NAME = @SITE_NAME@
+SITE_WMO_CODE = @SITE_WMO_CODE@
+STANDARD_METVIEW_LIBS = @STANDARD_METVIEW_LIBS@
+STANDARD_METVIEW_LIBS_NO_UTIL = @STANDARD_METVIEW_LIBS_NO_UTIL@
+STARTUP_SCRIPT = @STARTUP_SCRIPT@
+STRIP = @STRIP@
+UIC = @UIC@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+bin_Relhum_SOURCES = Relhum.cc MvRelhum.cc MvRelhum.h
+bin_Relhum_LDADD = $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB)
+BUILT_SOURCES = bin
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Relhum/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/Relhum/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p || test -f $$p1; \
+	  then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' `; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+bin/$(am__dirstamp):
+	@$(MKDIR_P) bin
+	@: > bin/$(am__dirstamp)
+bin/Relhum$(EXEEXT): $(bin_Relhum_OBJECTS) $(bin_Relhum_DEPENDENCIES) bin/$(am__dirstamp)
+	@rm -f bin/Relhum$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(bin_Relhum_OBJECTS) $(bin_Relhum_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MvRelhum.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Relhum.Po at am__quote@
+
+.cc.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+	-rm -rf bin/.libs bin/_libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-rm -f bin/$(am__dirstamp)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-libtool ctags distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-binPROGRAMS
+
+
+bin:
+	ln -s ../../bin bin
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Relhum/MvRelhum.cc b/src/Relhum/MvRelhum.cc
new file mode 100644
index 0000000..48a8e11
--- /dev/null
+++ b/src/Relhum/MvRelhum.cc
@@ -0,0 +1,131 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <stdarg.h>
+#include <math.h>
+#include "Metview.h"
+#include "MvRelhum.h"
+#include "MvException.h"
+
+
+inline double min(double a, double b) { return a < b ? a : b; }
+inline double max(double a, double b) { return a > b ? a : b; }
+
+
+MvRelhum::MvRelhum()
+{
+    init();
+}
+
+void MvRelhum::init()
+{
+    refDataRepres = -1;
+    refDataLength = -1;
+}
+
+MvRelhum::~MvRelhum()
+{
+}
+
+
+
+MvRequest MvRelhum::compute(int n, MvField& f_LNSP,
+    MvFieldSetIterator& iter_t, MvFieldSetIterator& iter_q, int lmodlv)
+{
+    if( lmodlv )  //-- check lnsp field format consistency with other fields
+    {
+        if( f_LNSP.dataRepres() != refDataRepres )
+            throw MvException( "LNSP: different data representation!" );
+
+        if( f_LNSP.countValues() != refDataLength )
+            throw MvException( "LNSP: different number of grid points!" );
+    }
+
+    MvFieldSet          out_q;
+
+    for( int j=0; j<n; j++)
+    {
+        MvField f_t = iter_t();
+        MvFieldExpandThenFree x_t(f_t);
+
+        if( f_t.dataRepres() != refDataRepres )
+            throw MvException( "T: different data representation!" );
+        if( f_t.countValues() != refDataLength )
+            throw MvException( "T: different number of grid points!" );
+
+
+        MvField f_q = iter_q();
+        MvFieldExpandThenFree x_q(f_q);
+
+        if( f_q.dataRepres() != refDataRepres )
+            throw MvException( "Q: different data representation!" );
+        if( f_q.countValues() != refDataLength )
+            throw MvException( "Q: different number of grid points!" );
+
+        MvRequest    r = f_q.getRequest();
+        int level = r("LEVELIST");
+
+        for (int jl = 0; jl < f_t.countValues(); jl++)
+        {
+            double EPS  = RV/RD;
+            double C2ES = C1ES*RD/RV;
+            double esice = 0.0, eswat = 0.0, mixphase, es, pres;
+
+            if ( f_t[jl]  < TMELT)
+            {
+                esice = C2ES * exp(C3IES*(f_t[jl]-TMELT) / (f_t[jl]-C4IES));
+            }
+
+            if ( f_t[jl]  > TICE)
+            {
+                eswat = C2ES * exp(C3LES*(f_t[jl]-TMELT) / (f_t[jl]-C4LES));
+            }
+
+
+            // mixphase: 0->1,   0 = ice, 1 = water
+
+            mixphase = min( 1., pow( ((max(TICE,min(TMELT,f_t[jl]))-TICE)/(TMELT-TICE)), 2.) );
+
+            es = mixphase * eswat + (1.-mixphase) * esice;
+
+            //pres = ((lmodlv) ? f_q.modelLevelToPressure (f_LNSP[jl], level) : level * 100.);
+            pres = ((lmodlv) ? f_q.meanML_to_Pressure_byLNSP (f_LNSP[jl], level) : level * 100.);
+
+#define RELHUM_TESTPRINT 0
+
+#if RELHUM_TESTPRINT
+double q_before = f_q[jl];
+#endif
+
+            f_q[jl] = (f_q[jl] * pres * 100.) / ( (1.+(EPS-1.)*f_q[jl]) * es );
+
+#if RELHUM_TESTPRINT
+            //-- in 1.5/1.5 grid, gridpoint 9821 is: (30N,30W)
+            if( jl == 9821 )
+                cout << "  " << level
+                << "\t" << pres
+                << "\t  " << f_t[jl]
+                << "\t  " << q_before
+                << "\t  " << f_q[jl]
+                << endl;
+#endif
+        }
+        f_q.setGribKeyValueLong("paramId", 157);   //-- Relative humidity 
+
+        out_q += f_q;
+      
+//      int prevAcc = mars.accuracy;  // set mars.accuracy to -1 so that libMars
+//      mars.accuracy = -1;           // does not force grib_api to re-allocate
+        out_q[out_q.countFields()-1].setShape (packed_mem); // memory for this
+//      mars.accuracy = prevAcc;
+    }
+
+    return out_q.getRequest();
+}
+
diff --git a/src/Relhum/MvRelhum.h b/src/Relhum/MvRelhum.h
new file mode 100644
index 0000000..776b136
--- /dev/null
+++ b/src/Relhum/MvRelhum.h
@@ -0,0 +1,41 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+const int      Temp = 130;
+const int      Dew = 133;
+const int      LnPress = 152;
+const    float RD = 287.05967367;
+const    float RV = 461.52499331;
+const    float TMELT = 273.16;
+const    float TICE = 250.16;
+const    float C1ES = 611.21;
+const    float C3LES = 17.502;
+const    float C3IES = 22.587;
+const    float C4LES = 32.19;
+const    float C4IES = -0.7;
+
+
+class MvRelhum
+{
+protected:
+    int     refDataRepres;
+    int     refDataLength;
+
+    void    init();
+
+
+public:
+    MvRelhum();
+    ~MvRelhum();
+    virtual MvRequest compute(int,MvField&, MvFieldSetIterator&, MvFieldSetIterator&,int);
+    void setRefDataRepres( int v ) { refDataRepres = v; }
+    void setRefDataLength( int v ) { refDataLength = v; }
+};
+
+
diff --git a/src/Relhum/Relhum.cc b/src/Relhum/Relhum.cc
new file mode 100644
index 0000000..c753eaf
--- /dev/null
+++ b/src/Relhum/Relhum.cc
@@ -0,0 +1,146 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <stdio.h>
+#include <math.h>
+#include "Metview.h"
+#include "MvRelhum.h"
+#include "MvException.h"
+
+
+class Relhum : public MvService {
+protected:
+    Relhum(char* kw) : MvService(kw)         {};
+public:
+    Relhum() : MvService("RELHUM2") {};
+    void serve(MvRequest&,MvRequest&);
+};
+
+
+void Relhum::serve(MvRequest& in,MvRequest& out)
+{
+    mars.computeflg = 0; //-- for a nicer plot title (no "**" in front of param name)
+
+    MvField     field;
+    MvRequest    grib;
+
+    MvRelhum*    mvrh = new MvRelhum();
+
+    in.getValue(grib,"DATA");
+
+    MvFieldSet        fsInput(grib);
+    MvFieldSetIterator    iterLNSP(fsInput),iter_t(fsInput),iter_q(fsInput);
+
+    in.print();
+
+    MvFilter param("PARAM");
+
+    iterLNSP.setFilter(param == LnPress);
+    iter_t.setFilter(param == Temp);
+    iter_q.setFilter(param == Dew);
+
+    int    count_LnPres = 0,  count_Temp = 0, count_Dew = 0;
+
+    while( iterLNSP() ) count_LnPres++;
+        iterLNSP.rewind();
+
+    while( iter_t() )   count_Temp++;
+        iter_t.rewind();
+
+    while( iter_q() )   count_Dew++;
+        iter_q.rewind();
+
+
+    if ( count_Temp != count_Dew )
+    {
+        setError(1,"Different number of T and Q fields");
+        return;
+    }
+    
+    field = iter_q();
+    MvRequest     rq = field.getRequest();
+    const char*     ML = rq("LEVTYPE");
+
+    int        lmodlv;
+    if ( strcmp("ML",ML) )
+    {
+        lmodlv = 0;
+        count_LnPres = rq.countValues("LEVELIST");
+    }
+    else
+    {
+        if ( count_LnPres == 0 )
+        {
+            setError(1,"LNSP must be available in Model Level...");
+            return;
+        }
+        lmodlv = 1;
+    }
+
+    //-- for checking field format consistency --//
+    MvFieldExpander* fe = new MvFieldExpander(field);
+    mvrh->setRefDataLength( field.countValues() );
+    int repres = field.dataRepres();
+    if( repres == 50 )
+    {
+        setError( 13, "Cannot compute with spectral data!" );
+        return;
+    }
+    mvrh->setRefDataRepres( repres );
+    //delete fe;
+    
+    iter_q.rewind();
+                    
+    try
+    {
+        for( int i=0; i<count_LnPres; i++)
+        {
+            MvField f_LNSP;
+            f_LNSP = iterLNSP();
+            MvFieldSet    out_q,out_LNSP;
+
+            if( lmodlv )
+            {
+                MvFieldExpander xLNSP(f_LNSP);
+                out = out + mvrh->compute(count_Temp, f_LNSP, iter_t, iter_q, lmodlv);
+            }
+            else
+            {
+                MvField f_LNSP;
+                f_LNSP = iterLNSP();
+                out = out + mvrh->compute(count_Temp, f_LNSP, iter_t, iter_q, lmodlv);
+            }
+        }
+    }
+    catch( MvException& e )
+    {
+        cerr << "\n Exception caught: "
+        << e.what()
+         << " [in Relhum::serve]"
+         << endl;
+        setError( 13, e.what() );
+    }
+
+    out.print();
+    
+    delete fe;
+    
+    return;
+
+
+}
+
+int main(int argc,char **argv)
+{
+    MvApplication theApp(argc,argv);
+    Relhum Relhum;
+
+    theApp.run();
+}
diff --git a/src/Reprojection/Makefile.am b/src/Reprojection/Makefile.am
index 53538c2..0c16607 100644
--- a/src/Reprojection/Makefile.am
+++ b/src/Reprojection/Makefile.am
@@ -5,7 +5,7 @@ bin_PROGRAMS = bin/Reprojection
 bin_Reprojection_SOURCES = Reprojection.cc ReprojectService.cc
 
 #bin_Reprojection_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS)
-bin_Reprojection_CPPFLAGS = $(MAGPLUS_CPPFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS) -DNOMETVIEW_QT
+bin_Reprojection_CPPFLAGS = $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS) -DNOMETVIEW_QT
 bin_Reprojection_LDFLAGS  =  $(QT_LDFLAGS) -L../../lib $(MAGPLUS_LDFLAGS) $(LDFLAGS) $(ODB_LDFLAGS)
 bin_Reprojection_LDADD    = $(LDADD) $(MAGPLUS_LIB) $(STANDARD_METVIEW_LIBS) $(FLIBS) $(METVIEW_UTIL_LIB) $(ODB_LIBS) $(QT_LIBS)
 bin_Reprojection_DEPENDENCIES = ../../lib/libUtil.a ../../lib/libMetview.a
diff --git a/src/Reprojection/Makefile.in b/src/Reprojection/Makefile.in
index 9f9ba5f..aa84c52 100644
--- a/src/Reprojection/Makefile.in
+++ b/src/Reprojection/Makefile.in
@@ -179,6 +179,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -194,6 +195,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -220,11 +223,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -362,7 +368,7 @@ DISTCLEANFILES = $(BUILT_SOURCES)
 bin_Reprojection_SOURCES = Reprojection.cc ReprojectService.cc
 
 #bin_Reprojection_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS)
-bin_Reprojection_CPPFLAGS = $(MAGPLUS_CPPFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS) -DNOMETVIEW_QT
+bin_Reprojection_CPPFLAGS = $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS) -DNOMETVIEW_QT
 bin_Reprojection_LDFLAGS = $(QT_LDFLAGS) -L../../lib $(MAGPLUS_LDFLAGS) $(LDFLAGS) $(ODB_LDFLAGS)
 bin_Reprojection_LDADD = $(LDADD) $(MAGPLUS_LIB) $(STANDARD_METVIEW_LIBS) $(FLIBS) $(METVIEW_UTIL_LIB) $(ODB_LIBS) $(QT_LIBS)
 bin_Reprojection_DEPENDENCIES = ../../lib/libUtil.a ../../lib/libMetview.a
diff --git a/src/Reprojection/ObjectSpec.Reprojection b/src/Reprojection/ObjectSpec.Reprojection
index 12e75e8..1fd69e2 100644
--- a/src/Reprojection/ObjectSpec.Reprojection
+++ b/src/Reprojection/ObjectSpec.Reprojection
@@ -12,6 +12,7 @@ object,
     default_name      = Reprojection,
     help_page	      = Reprojection,
     type              = Data,
+    icon_box          = Data processing,
     expand            = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
     macro             = reprojection,
     editor_type       = SimpleEditor,
diff --git a/src/Reprojection/ReprojectService.cc b/src/Reprojection/ReprojectService.cc
index 54a17a2..598f849 100644
--- a/src/Reprojection/ReprojectService.cc
+++ b/src/Reprojection/ReprojectService.cc
@@ -42,7 +42,7 @@ ReprojectService::execute()
        
      magics::ImagePlotting tool;
      grib.file_name_ = gribIn_;
-     grib.open();
+     grib.open(NULL);  // it's not clear what purpose the NULL has here - it should be a grib handle, but it seems to be unused
      magics::GribSatelliteInterpretor gribInterpreter;
      magics::GeoRectangularProjection transformation;
      magics::RasterData rdin;  //input data
diff --git a/src/Rttov/Makefile.am b/src/Rttov/Makefile.am
new file mode 100644
index 0000000..e3d9953
--- /dev/null
+++ b/src/Rttov/Makefile.am
@@ -0,0 +1,44 @@
+
+bin_PROGRAMS      = bin/RttovRun  bin/RttovVisualiser
+
+#-------------------------------------------------
+
+bin_RttovRun_SOURCES = RttovRun.cc
+	
+bin_RttovRun_CPPFLAGS = -I../libUtil -I../libMetview
+bin_RttovRun_LDFLAGS  = 
+bin_RttovRun_LDADD    = $(STANDARD_METVIEW_LIBS) $(FLIBS)
+bin_RttovRun_DEPENDENCIES    = ../../lib/libUtil.a 
+
+#-------------------------------------------------
+
+bin_RttovVisualiser_SOURCES = RttovVisualiser.cc
+	
+bin_RttovVisualiser_CPPFLAGS = -I../libUtil -I../libMetview $(METVIEW_NETCDF_FLAGS)
+bin_RttovVisualiser_LDFLAGS  = 
+bin_RttovVisualiser_LDADD    = $(STANDARD_METVIEW_LIBS) ../../lib/libUtil.a $(METVIEW_NETCDF_LIB)
+
+#-------------------------------------------------
+
+sharedir    = $(datadir)/metview/etc
+local_sharedir = ../../share/metview/etc
+share_DATA = $(local_sharedir)/ObjectSpec.Rttov \
+	     $(local_sharedir)/RttovRunDef  $(local_sharedir)/RttovRunRules \
+	     $(local_sharedir)/RttovVisualiserDef  $(local_sharedir)/RttovVisualiserRules
+
+# to build the share data, we take the destination files and
+# remove their directory, e.g. $(local_sharedir)/DefFile becomes DefFile.
+# $< is the 'stripped' version and $@ is the 'full' version
+$(share_DATA): $(local_sharedir)/%: %
+	${INSTALL} $<  $(local_sharedir)
+
+
+CLEANFILES = $(share_DATA) 
+
+BUILT_SOURCES = bin 
+
+EXTRA_DIST = ObjectSpec.Rttov  \
+             RttovRunDef RttovRunRules RttovVisualiserDef RttovVisualiserRules
+
+bin:
+	ln -s ../../bin bin
diff --git a/src/Rttov/Makefile.in b/src/Rttov/Makefile.in
new file mode 100644
index 0000000..d3545dc
--- /dev/null
+++ b/src/Rttov/Makefile.in
@@ -0,0 +1,755 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+bin_PROGRAMS = bin/RttovRun$(EXEEXT) bin/RttovVisualiser$(EXEEXT)
+subdir = src/Rttov
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/metview_config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sharedir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_bin_RttovRun_OBJECTS = bin_RttovRun-RttovRun.$(OBJEXT)
+bin_RttovRun_OBJECTS = $(am_bin_RttovRun_OBJECTS)
+am__DEPENDENCIES_1 =
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+bin_RttovRun_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(bin_RttovRun_LDFLAGS) $(LDFLAGS) -o $@
+am__dirstamp = $(am__leading_dot)dirstamp
+am_bin_RttovVisualiser_OBJECTS =  \
+	bin_RttovVisualiser-RttovVisualiser.$(OBJEXT)
+bin_RttovVisualiser_OBJECTS = $(am_bin_RttovVisualiser_OBJECTS)
+bin_RttovVisualiser_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	../../lib/libUtil.a $(am__DEPENDENCIES_1)
+bin_RttovVisualiser_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(AM_CXXFLAGS) $(CXXFLAGS) $(bin_RttovVisualiser_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_$(V))
+am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
+am__v_CXX_0 = @echo "  CXX   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_$(V))
+am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CXXLD_0 = @echo "  CXXLD " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(bin_RttovRun_SOURCES) $(bin_RttovVisualiser_SOURCES)
+DIST_SOURCES = $(bin_RttovRun_SOURCES) $(bin_RttovVisualiser_SOURCES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+DATA = $(share_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AXX = @AXX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPLIBS = @CPPLIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DBMLIB = @DBMLIB@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
+EGREP = @EGREP@
+EMOS_LIB_NAME = @EMOS_LIB_NAME@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FDBLIB = @FDBLIB@
+FFIXED_FLAGS = @FFIXED_FLAGS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FLIBS = @FLIBS@
+GREP = @GREP@
+GRIBAPI_LIBS = @GRIBAPI_LIBS@
+GRIB_API_INC = @GRIB_API_INC@
+GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LDFLAGS_INLINE = @LDFLAGS_INLINE@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBNAME = @LIBNAME@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAGICS_CFLAGS = @MAGICS_CFLAGS@
+MAGICS_LIBS = @MAGICS_LIBS@
+MAGPLUS_CPPFLAGS = @MAGPLUS_CPPFLAGS@
+MAGPLUS_HOME = @MAGPLUS_HOME@
+MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
+MAGPLUS_LIB = @MAGPLUS_LIB@
+MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
+MAKEINFO = @MAKEINFO@
+MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
+MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
+METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
+METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
+METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
+METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
+METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
+METVIEW_NETCDF_FLAGS = @METVIEW_NETCDF_FLAGS@
+METVIEW_NETCDF_LIB = @METVIEW_NETCDF_LIB@
+METVIEW_PACKAGE_NAME = @METVIEW_PACKAGE_NAME@
+METVIEW_PACKAGE_RELEASE_DATE = @METVIEW_PACKAGE_RELEASE_DATE@
+METVIEW_PACKAGE_VERSION = @METVIEW_PACKAGE_VERSION@
+METVIEW_UTIL_LIB = @METVIEW_UTIL_LIB@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MVINCLUDE = @MVINCLUDE@
+MVSTARTDIR = @MVSTARTDIR@
+MV_EMOSLIB = @MV_EMOSLIB@
+MV_ENVIRON = @MV_ENVIRON@
+MV_MOTIF_FLAGS = @MV_MOTIF_FLAGS@
+MV_MOTIF_UTIL_LIB = @MV_MOTIF_UTIL_LIB@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+ODB1_BIN = @ODB1_BIN@
+ODB1_USE_SCRIPT = @ODB1_USE_SCRIPT@
+ODB1_VERSION = @ODB1_VERSION@
+ODB_CPPFLAGS = @ODB_CPPFLAGS@
+ODB_LDFLAGS = @ODB_LDFLAGS@
+ODB_LIBDIR = @ODB_LIBDIR@
+ODB_LIBS = @ODB_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@
+PKG_CONFIG = @PKG_CONFIG@
+PROJ4_LIBS = @PROJ4_LIBS@
+QMAKE = @QMAKE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_CPPFLAGS = @QT_CPPFLAGS@
+QT_CXXFLAGS = @QT_CXXFLAGS@
+QT_DEFINES = @QT_DEFINES@
+QT_INCPATH = @QT_INCPATH@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LFLAGS = @QT_LFLAGS@
+QT_LIBS = @QT_LIBS@
+QT_PATH = @QT_PATH@
+QT_VERSION = @QT_VERSION@
+QT_VERSION_MAJOR = @QT_VERSION_MAJOR@
+RANLIB = @RANLIB@
+RCC = @RCC@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SITE_NAME = @SITE_NAME@
+SITE_WMO_CODE = @SITE_WMO_CODE@
+STANDARD_METVIEW_LIBS = @STANDARD_METVIEW_LIBS@
+STANDARD_METVIEW_LIBS_NO_UTIL = @STANDARD_METVIEW_LIBS_NO_UTIL@
+STARTUP_SCRIPT = @STARTUP_SCRIPT@
+STRIP = @STRIP@
+UIC = @UIC@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+#-------------------------------------------------
+bin_RttovRun_SOURCES = RttovRun.cc
+bin_RttovRun_CPPFLAGS = -I../libUtil -I../libMetview
+bin_RttovRun_LDFLAGS = 
+bin_RttovRun_LDADD = $(STANDARD_METVIEW_LIBS) $(FLIBS)
+bin_RttovRun_DEPENDENCIES = ../../lib/libUtil.a 
+
+#-------------------------------------------------
+bin_RttovVisualiser_SOURCES = RttovVisualiser.cc
+bin_RttovVisualiser_CPPFLAGS = -I../libUtil -I../libMetview $(METVIEW_NETCDF_FLAGS)
+bin_RttovVisualiser_LDFLAGS = 
+bin_RttovVisualiser_LDADD = $(STANDARD_METVIEW_LIBS) ../../lib/libUtil.a $(METVIEW_NETCDF_LIB)
+
+#-------------------------------------------------
+sharedir = $(datadir)/metview/etc
+local_sharedir = ../../share/metview/etc
+share_DATA = $(local_sharedir)/ObjectSpec.Rttov \
+	     $(local_sharedir)/RttovRunDef  $(local_sharedir)/RttovRunRules \
+	     $(local_sharedir)/RttovVisualiserDef  $(local_sharedir)/RttovVisualiserRules
+
+CLEANFILES = $(share_DATA) 
+BUILT_SOURCES = bin 
+EXTRA_DIST = ObjectSpec.Rttov  \
+             RttovRunDef RttovRunRules RttovVisualiserDef RttovVisualiserRules
+
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Rttov/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/Rttov/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p || test -f $$p1; \
+	  then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' `; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+bin/$(am__dirstamp):
+	@$(MKDIR_P) bin
+	@: > bin/$(am__dirstamp)
+bin/RttovRun$(EXEEXT): $(bin_RttovRun_OBJECTS) $(bin_RttovRun_DEPENDENCIES) bin/$(am__dirstamp)
+	@rm -f bin/RttovRun$(EXEEXT)
+	$(AM_V_CXXLD)$(bin_RttovRun_LINK) $(bin_RttovRun_OBJECTS) $(bin_RttovRun_LDADD) $(LIBS)
+bin/RttovVisualiser$(EXEEXT): $(bin_RttovVisualiser_OBJECTS) $(bin_RttovVisualiser_DEPENDENCIES) bin/$(am__dirstamp)
+	@rm -f bin/RttovVisualiser$(EXEEXT)
+	$(AM_V_CXXLD)$(bin_RttovVisualiser_LINK) $(bin_RttovVisualiser_OBJECTS) $(bin_RttovVisualiser_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_RttovRun-RttovRun.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_RttovVisualiser-RttovVisualiser.Po at am__quote@
+
+.cc.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+bin_RttovRun-RttovRun.o: RttovRun.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_RttovRun_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_RttovRun-RttovRun.o -MD -MP -MF $(DEPDIR)/bin_RttovRun-RttovRun.Tpo -c -o bin_RttovRun-RttovRun.o `test -f 'RttovRun.cc' || echo '$(srcdir)/'`RttovRun.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_RttovRun-RttovRun.Tpo $(DEPDIR)/bin_RttovRun-RttovRun.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='RttovRun.cc' object='bin_RttovRun-RttovRun.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_RttovRun_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_RttovRun-RttovRun.o `test -f 'RttovRun.cc' || echo '$(srcdir)/'`RttovRun.cc
+
+bin_RttovRun-RttovRun.obj: RttovRun.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_RttovRun_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_RttovRun-RttovRun.obj -MD -MP -MF $(DEPDIR)/bin_RttovRun-RttovRun.Tpo -c -o bin_RttovRun-RttovRun.obj `if test -f 'RttovRun.cc'; then $(CYGPATH_W) 'RttovRun.cc'; else $(CYGPATH_W) '$(srcdir)/RttovRun.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_RttovRun-RttovRun.Tpo $(DEPDIR)/bin_RttovRun-RttovRun.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='RttovRun.cc' object='bin_RttovRun-RttovRun.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_RttovRun_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_RttovRun-RttovRun.obj `if test -f 'RttovRun.cc'; then $(CYGPATH_W) 'RttovRun.cc'; else $(CYGPATH_W) '$(srcdir)/RttovRun.cc'; fi`
+
+bin_RttovVisualiser-RttovVisualiser.o: RttovVisualiser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_RttovVisualiser_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_RttovVisualiser-RttovVisualiser.o -MD -MP -MF $(DEPDIR)/bin_RttovVisualiser-RttovVisualiser.Tpo -c -o bin_RttovVisualiser-RttovVisualiser.o `test -f 'RttovVisualiser.cc' || echo '$(srcdir)/'`RttovVisualiser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_RttovVisualiser-RttovVisualiser.Tpo $(DEPDIR)/bin_RttovVisualiser-RttovVisualiser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='RttovVisualiser.cc' object='bin_RttovVisualiser-RttovVisualiser.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_RttovVisualiser_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_RttovVisualiser-RttovVisualiser.o `test -f 'RttovVisualiser.cc' || echo '$(srcdir)/'`RttovVisualiser.cc
+
+bin_RttovVisualiser-RttovVisualiser.obj: RttovVisualiser.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_RttovVisualiser_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_RttovVisualiser-RttovVisualiser.obj -MD -MP -MF $(DEPDIR)/bin_RttovVisualiser-RttovVisualiser.Tpo -c -o bin_RttovVisualiser-RttovVisualiser.obj `if test -f 'RttovVisualiser.cc'; then $(CYGPATH_W) 'RttovVisualiser.cc'; else $(CYGPATH_W) '$(srcdir)/RttovVisualiser.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_RttovVisualiser-RttovVisualiser.Tpo $(DEPDIR)/bin_RttovVisualiser-RttovVisualiser.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='RttovVisualiser.cc' object='bin_RttovVisualiser-RttovVisualiser.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_RttovVisualiser_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_RttovVisualiser-RttovVisualiser.obj `if test -f 'RttovVisualiser.cc'; then $(CYGPATH_W) 'RttovVisualiser.cc'; else $(CYGPATH_W) '$(srcdir)/RttovVisualiser.cc'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+	-rm -rf bin/.libs bin/_libs
+install-shareDATA: $(share_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(sharedir)" || $(MKDIR_P) "$(DESTDIR)$(sharedir)"
+	@list='$(share_DATA)'; test -n "$(sharedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sharedir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(sharedir)" || exit $$?; \
+	done
+
+uninstall-shareDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(share_DATA)'; test -n "$(sharedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(sharedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(sharedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS) $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sharedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-rm -f bin/$(am__dirstamp)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-shareDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-shareDATA
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-libtool ctags distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-shareDATA install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-binPROGRAMS uninstall-shareDATA
+
+
+# to build the share data, we take the destination files and
+# remove their directory, e.g. $(local_sharedir)/DefFile becomes DefFile.
+# $< is the 'stripped' version and $@ is the 'full' version
+$(share_DATA): $(local_sharedir)/%: %
+	${INSTALL} $<  $(local_sharedir)
+
+bin:
+	ln -s ../../bin bin
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Rttov/ObjectSpec.Rttov b/src/Rttov/ObjectSpec.Rttov
new file mode 100644
index 0000000..cfdba2f
--- /dev/null
+++ b/src/Rttov/ObjectSpec.Rttov
@@ -0,0 +1,120 @@
+################################################################################
+#
+#	ObjectSpec.Rttov
+#
+
+#-----------------------
+# Data
+#-----------------------
+
+object,
+	class		= NETCDF_RTTOV_INPUT,
+	can_be_created  = False,
+	check           = False,
+	default_object  = False,
+	type		= File,
+	default_name    = 'Rttov Input Data',
+	pixmap 		= '$METVIEW_DIR_SHARE/icons/NETCDF_RTTOV_INPUT.icon',
+	editor_type     =  NoEditor 
+
+object,
+	class           = RTTOV_OUTPUT_FILE,
+	can_be_created  = False,
+	check           = False,
+	default_object  = False,
+	type            = File,
+	default_name    = 'Rttov Output File',
+	pixmap          = '$METVIEW_DIR_SHARE/icons/RTTOV_OUTPUT_FILE.icon',
+	editor_type     = QtMacroEditor
+
+
+#-----------------------
+# Computation
+#-----------------------
+
+object,
+	class               = RTTOV_RUN,
+ 	can_be_created      = True,
+ 	definition_file     = '$METVIEW_DIR_SHARE/etc/RttovRunDef',
+	rules_file          = '$METVIEW_DIR_SHARE/etc/RttovRunRules',
+	default_name        = 'Rttov Run',		
+	type                = Data,
+        icon_box	    = Data processing,
+	expand	            = 75,	
+	macro               = rttov_run,
+	editor_type	    = SimpleEditor,	
+    	pixmap              = '$METVIEW_DIR_SHARE/icons/RTTOV_RUN.icon'
+
+#-----------------------
+# Visualiser
+#-----------------------
+
+object,
+	class           = RTTOV_VISUALISER,
+ 	can_be_created  = True,
+ 	definition_file = '$METVIEW_DIR_SHARE/etc/RttovVisualiserDef',
+	rules_file      = '$METVIEW_DIR_SHARE/etc/RttovVisualiserRules',
+	default_name    = 'Rttov Visualiser',		
+	type            = Data,
+	icon_box        = Visualisers,
+	expand          = 75,	
+	macro           = rttov_visualiser,
+	editor_type     = SimpleEditor,	
+	pixmap          = '$METVIEW_DIR_SHARE/icons/RTTOV_VISUALISER.icon'
+
+#-----------------------
+# States + services
+#-----------------------
+
+state,
+	class		    = NETCDF_RTTOV_INPUT,
+	action		    = examine,
+        service		    = NcExaminer
+
+state,
+	class		    = NETCDF_RTTOV_INPUT,
+	action		    = analyse,
+        service		    = ScmDataEditor
+
+
+state,
+	class        = RTTOV_RUN,
+	action       = execute,
+	service      = RttovRun
+
+state,
+	class        = RTTOV_RUN,
+	output_class = RTTOV_OUTPUT_FILE,
+	service      = RttovRun
+
+state,
+	class		    = RTTOV_OUTPUT_FILE,
+	action		    = save,
+        service		    = savepool
+
+state,
+	class		    = RTTOV_OUTPUT_FILE,
+	action		    = examine,
+        service		    = macroedit
+
+#state,
+#	class	= RTTOV_OUTPUT_FILE,
+#	action	= prepare/execute/visualise,
+#	service = RttovVisualiser
+
+
+state,
+	class        = RTTOV_VISUALISER,
+    action       = execute/visualise/prepare/drop,
+	output_class = NETCDF_XY_POINTS,
+	service      = RttovVisualiser
+
+service,
+	cmd     = '$METVIEW_CMD $METVIEW_BIN/RttovRun',
+	name    = 'RttovRun'
+
+service,
+	timeout     = $timeout,
+	name        = RttovVisualiser,
+	fullname    = Rttov Visualiser,
+	cmd         = '$metview_command $METVIEW_BIN/RttovVisualiser'
diff --git a/src/Rttov/RttovRun.cc b/src/Rttov/RttovRun.cc
new file mode 100644
index 0000000..47e6e64
--- /dev/null
+++ b/src/Rttov/RttovRun.cc
@@ -0,0 +1,277 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "inc_iostream.h"
+#include "Metview.h"
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <sstream>
+
+#include "MvScm.h"
+
+using namespace std;
+
+
+class Base : public MvService { 
+protected:
+	Base(char* a) : MvService(a) {};
+};
+
+class RttovRun: public Base {	
+public:
+	RttovRun() : Base("RTTOV_RUN") {};
+	void serve(MvRequest&,MvRequest&);
+};
+
+void RttovRun::serve( MvRequest& in, MvRequest& out)
+{
+  	cout << "--------------RttovRun::serve()--------------" << endl;
+  	in.print();
+
+	string errTxt;
+
+	//Find out rttov script path
+	string rttovScript;
+	char *mvbin=getenv("METVIEW_BIN");
+	if (mvbin == 0)  
+	{	
+		marslog(LOG_EROR,"No METVIEW_BIN env variable is defined. Cannot locate script mv_rttov_run!");
+		setError(13);
+		return;
+	}
+	else
+	{
+		rttovScript=string(mvbin) +"/mv_rttov_run";
+	}
+	
+
+	//Create  tmp dir for the flextra run
+	string tmpPath;
+	if(!metview::createWorkDir("rttov",tmpPath,errTxt))
+	{
+		marslog(LOG_EROR,"%s",errTxt.c_str());
+		setError(13);
+		return;
+	}
+	
+	//RttovRun exe
+	string exe;	
+	if(!in.getPath("RTTOV_EXE_PATH",exe,true,errTxt))
+	{
+		marslog(LOG_EROR,"%s",errTxt.c_str());
+		setError(13);
+		return;
+	}	
+	if(exe.empty())
+	{
+	  	exe="_UNDEF_";
+	}	
+
+        //---------------------------------------
+	// Input data
+	//---------------------------------------
+	
+	string data;
+	if(!in.getPath("RTTOV_INPUT_DATA","RTTOV_INPUT_DATA_PATH",data,false,errTxt))
+	{
+		marslog(LOG_EROR,"%s",errTxt.c_str());
+		setError(13);
+		return;
+	}	
+	
+	//-------------------------
+	// Level num
+	//-------------------------
+	
+	int levelNum=MvScm::modelLevelNum(data);
+	if(levelNum == -1)
+	{  
+		marslog(LOG_EROR,"Could not read number of levels from input file!");
+		setError(13);
+		return;	
+	}
+	
+	stringstream sst;
+  	sst << levelNum;
+   	string nlev=sst.str();   
+	
+	//--------------------------------------
+	// Sensor (channels + coefficients)
+	//--------------------------------------
+	
+	const char *sensor=in("RTTOV_SENSOR");
+	
+	string ch="_UNDEF_";
+	string coeff="_UNDEF_";
+	if(sensor && strcmp(sensor,"CUSTOM") == 0)
+	{		  		
+	  		  	  
+	  	//Channels file
+	  	if(!in.getPath("RTTOV_CHANNELS","RTTOV_CHANNELS_PATH",ch,true,errTxt))
+		{
+			marslog(LOG_EROR,"%s",errTxt.c_str());
+			setError(13);
+			return;
+		}	
+	
+		//Coeff file
+		if(!in.getPath("RTTOV_COEFFICIENTS","RTTOV_COEFFICIENTS_PATH",coeff,true,errTxt))
+		{
+			marslog(LOG_EROR,"%s",errTxt.c_str());
+			setError(13);
+			return;
+		}				
+	}
+	
+	//-------------------------
+	// Angles
+	//-------------------------
+	
+	double sat_z,sat_az,solar_z,solar_az;
+	
+	in.getValue(sat_z,"RTTOV_SATELLITE_ZENITH_ANGLE");
+	in.getValue(sat_az,"RTTOV_SATELLITE_AZIMUTH_ANGLE");
+	in.getValue(solar_z,"RTTOV_SOLAR_ZENITH_ANGLE");
+	in.getValue(solar_az,"RTTOV_SOLAR_AZIMUTH_ANGLE");
+	
+	//---------------------------
+	// Prepare input file
+	//---------------------------
+	
+	string inFile=tmpPath + "/rttov_in.txt";
+	bool useOzone=(sensor && strcmp(sensor,"IASI") == 0)?true:false;
+	if(MvScm::createRttovInput(data,inFile,sat_z,sat_az,solar_z,solar_az,useOzone,errTxt) == false)
+	{
+	  	marslog(LOG_EROR,"Could not generate RTTOV input file!");
+		marslog(LOG_EROR," --> %s",errTxt.c_str());
+	  	setError(13);
+		return;
+	}  
+	
+	//-------------------------
+	// Run the model
+	//-------------------------
+		
+	string resFileName="rttov_out.txt";
+	string resFile=tmpPath + "/" + resFileName;
+	
+	string logFileName="log.txt";
+	string logFile=tmpPath + "/" + logFileName;
+	
+        //Run the scm script
+	string cmd = rttovScript + " \"" + tmpPath + "\" \"" + exe  + "\" \"" + inFile + "\" \"" +  nlev +  "\" \"" + sensor + "\" \"" +  ch +  "\" \""  + coeff + "\" \"" + logFileName + "\" \"" + resFileName + "\""; 
+
+	//marslog(LOG_INFO,"Execute command: %s",cmd.c_str());
+	
+	int ret=system(cmd.c_str());	
+	
+	bool runFailed=false;
+	
+	//If the script failed read log file and
+	//write it into LOG_EROR
+	if(ret == -1 || WEXITSTATUS(ret) != 0)
+	{		
+		ifstream in(logFile.c_str());
+		string line;
+
+		if(WEXITSTATUS(ret) == 255)
+		{
+		  	marslog(LOG_WARN,"Warnings were generated during RTTOV run!");
+		}  		
+		else if(WEXITSTATUS(ret) == 1)
+		{		
+			marslog(LOG_EROR,"Failed to perform RTTOV run!");
+			runFailed=true;
+		}
+		else if(WEXITSTATUS(ret) > 1)
+		{		
+			marslog(LOG_EROR,"RTTOV run failed with exit code: %d !",WEXITSTATUS(ret));
+			runFailed=true;
+		}		
+	}
+	
+	//Log locations are always printed!!
+	
+	if(runFailed)
+	{
+	  	marslog(LOG_EROR,"Log files are available at:");
+		marslog(LOG_EROR,"---------------------------");
+		marslog(LOG_EROR," (STDOUT)  %s",logFile.c_str());	
+		string msg=tmpPath + "/fort.20";
+		marslog(LOG_EROR," (fort.20) %s",msg.c_str());
+	}  
+	else
+	{  
+		marslog(LOG_INFO,"Log files are available at:");
+		marslog(LOG_INFO,"---------------------------");
+		marslog(LOG_INFO," (STDOUT)  %s",logFile.c_str());	
+		string msg=tmpPath + "/fort.20";
+		marslog(LOG_INFO," (fort.20) %s",msg.c_str());
+	}
+	
+	//Retrun if run failed!!
+	if(runFailed)
+	{
+		setError(13);  	
+		return;
+	}
+	
+	//---------------------------------------------------
+	// Copy the output into the user-defined location
+	//---------------------------------------------------
+	
+	/*if(!userResFile.empty())
+	{
+	  	const char *dn=dirname(userResFile.c_str());
+	  	cmd="mkdir -p " + string(dn) + "; cp -f " + resFile + " " +  userResFile;
+			
+	  	stringstream outStream;
+		stringstream errStream;
+		shellCommand(cmd,outStream,errStream);
+		
+		if(!errStream.str().empty())
+		{
+			marslog(LOG_EROR,"");
+			marslog(LOG_EROR,"Could not copy ouput file to target location!");  
+		        marslog(LOG_EROR,"This command:");
+			marslog(LOG_EROR,"   %s",cmd.c_str());
+			marslog(LOG_EROR,"failed with this error:");
+			marslog(LOG_EROR,"   %s",errStream.str().c_str());
+			setError(13);
+		}
+	}*/
+		
+	//------------------------------------------
+	//Set out request
+	//------------------------------------------
+	
+	out=MvRequest("RTTOV_OUTPUT_FILE");
+	out("PATH")=resFile.c_str();
+	
+	cout << tmpPath << endl;
+	out.print();
+}
+
+  	
+int main( int argc, char** argv )
+{
+	MvApplication theApp( argc, argv,"RttovRun");
+
+    	RttovRun rttovRun;	
+	
+    	theApp.run();
+}
+
diff --git a/src/Rttov/RttovRunDef b/src/Rttov/RttovRunDef
new file mode 100644
index 0000000..6bbfd00
--- /dev/null
+++ b/src/Rttov/RttovRunDef
@@ -0,0 +1,78 @@
+RTTOV_RUN; Rttov_run; experimental
+{
+        RTTOV_EXE_PATH
+        {
+                @
+        } = ''
+
+        RTTOV_INPUT_DATA
+                [ interface = icon, class = NETCDF_RTTOV_INPUT, exclusive = false,
+                  help = help_data,
+                  help_directory  = '/Metview/Defaults',
+                  help_name       = Data ]
+        { @ }
+
+        RTTOV_INPUT_DATA_PATH
+        {
+                @
+        }  = ''
+
+	RTTOV_SENSOR [interface = option_menu ]
+	{
+		AMSUA  ; AMSUA 
+                IASI ; IASI
+		CUSTOM ; CUSTOM
+	} = IASI
+
+
+	RTTOV_CHANNELS [ interface = icon, class = NOTE, exclusive = true,
+                  help = help_data,
+                  help_directory  = '/Metview/Defaults',
+                  help_name       = Data ]
+        {
+                @
+        } 
+
+	RTTOV_CHANNELS_PATH
+        {
+                @
+        }  = ''
+
+	RTTOV_COEFFICIENTS [ interface = icon, class = NOTE, exclusive = true,
+                  help = help_data,
+                  help_directory  = '/Metview/Defaults',
+                  help_name       = Data ]
+        {
+                @
+        } 
+
+	RTTOV_COEFFICIENTS_PATH
+        {
+                @
+        }  = ''
+
+
+	RTTOV_SATELLITE_ZENITH_ANGLE
+        {
+               * 
+        } = 0
+
+	RTTOV_SATELLITE_AZIMUTH_ANGLE
+        {
+                *
+        } =0
+
+	RTTOV_SOLAR_ZENITH_ANGLE
+        {
+               * 
+        } = 0
+
+	RTTOV_SOLAR_AZIMUTH_ANGLE
+        {
+                *
+        } =0
+
+}
+
+
+    
diff --git a/src/Rttov/RttovRunRules b/src/Rttov/RttovRunRules
new file mode 100644
index 0000000..325a3f6
--- /dev/null
+++ b/src/Rttov/RttovRunRules
@@ -0,0 +1,5 @@
+%if RTTOV_SENSOR  <> CUSTOM %then 
+		%unset RTTOV_CHANNELS
+		%unset RTTOV_CHANNELS_PATH
+		%unset RTTOV_COEFFICIENTS
+		%unset RTTOV_COEFFICIENTS_PATH
diff --git a/src/Rttov/RttovVisualiser.cc b/src/Rttov/RttovVisualiser.cc
new file mode 100644
index 0000000..ea9c4ef
--- /dev/null
+++ b/src/Rttov/RttovVisualiser.cc
@@ -0,0 +1,248 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "Metview.h"
+#include "MvNetCDF.h"
+
+#include "MvRttov.h"
+
+class Base : public MvService { 
+protected:
+    Base(char* a) : MvService(a) {};
+};
+
+
+class RttovVisualiser: public Base {	
+public:
+    RttovVisualiser(char* a) : Base(a) {saveToPool(false);};
+    void serve(MvRequest&,MvRequest&);	
+
+private:
+    bool exportRttovToNetCDF(MvRttov &rttov, string &fileName);
+    bool getDataPath(MvRequest &in, const char *dataParamName, const char *dataPathParamName, string &result);
+	string getString(MvRequest &in, const char *parameter, const char *defaultVal);
+};
+
+
+
+// RttovVisualiser::getDataPath
+// for user parameters which have a data icon and  the alternative of
+// a path icon. Returns the path of the data icon if it's there;
+// otherwise thh path parameters if it's there. The path is returned
+// in the 'result' string.
+// Returns true if it found a path, otherwise false.
+
+bool RttovVisualiser::getDataPath(MvRequest &in, const char *dataParamName, const char *dataPathParamName, string &result)
+{
+	MvRequest dataR=in(dataParamName);
+	const char *dataPath=dataR("PATH");
+
+	if(dataPath)
+	{
+		result=string(dataPath);
+	}
+	else
+	{
+		const char *cval=in(dataPathParamName);
+		if(cval)
+		{
+		  	result=string(cval);
+			if (result == "OFF")
+				result.clear();
+		}	
+	}	
+	
+	if(result.empty())
+	{
+	  	marslog(LOG_EROR,"No value found for paramaters: %s and %s", dataParamName, dataPathParamName);
+		setError(13);
+		return false;	
+	}
+	
+	return true;
+}
+
+
+
+// RttovVisualiser::getString
+// Tries to get the given pstring arameter from the request, returning
+// a user-specified default if it is not there.
+
+string RttovVisualiser::getString(MvRequest &in, const char *parameter, const char *defaultVal)
+{
+	const char *val = in(parameter);
+
+	if (!val)
+		val = defaultVal;
+
+
+	return string(val);
+}
+
+
+void RttovVisualiser::serve( MvRequest& in, MvRequest& out)
+{
+  	cout << "--------------RttovVisualiser::serve()--------------" << endl;
+  	in.print();
+
+    
+//    const char *verb = in.getVerb();
+	string dataPath;
+    bool ok;
+	const char *defVal = "dummy";
+
+
+    // get the path to the data from the requst
+    ok = getDataPath(in, "RTTOV_DATA", "RTTOV_FILENAME", dataPath);
+
+
+    // create and initialise an MvRttov object to handle the data file
+    MvRttov rttov;
+    ok = rttov.parseFile(dataPath);
+
+    if (!ok)
+    {
+        marslog(LOG_EROR, (char *)(rttov.errorMessage().c_str()));
+        setError(13);
+        return;
+    }
+
+
+    // export as netCDF
+    string outNetCDFFileName(marstmp());
+    ok = exportRttovToNetCDF(rttov, outNetCDFFileName);
+
+
+    // note that we create a 'raw' NETCDF requests rather than a
+    // NETCDF_VISUALISER request. This is so as to avoid going through
+    // StdAppManager, which can force the caching of the result
+
+	string str = getString(in, "RTTOV_PLOT_TYPE", defVal);
+
+    if (str == "CHANNEL_TB_GRAPH" || str == defVal)
+    {
+        MvRequest netCDFVisualiserReq("NETCDF_XY_POINTS");
+        netCDFVisualiserReq("NETCDF_FILENAME")       = outNetCDFFileName.c_str();
+        netCDFVisualiserReq("NETCDF_X_VARIABLE")     = "channel";
+        netCDFVisualiserReq("NETCDF_Y_VARIABLE")     = "tb";
+        netCDFVisualiserReq("NETCDF_VALUE_VARIABLE") = "tb";
+        netCDFVisualiserReq("_VERB")                 = "NETCDF_XY_POINTS";
+
+        out = netCDFVisualiserReq;
+    }
+
+    else if (str == "JACOBIAN_MATRIX")
+    {
+        MvRequest netCDFVisualiserReq("NETCDF_XY_MATRIX");
+        netCDFVisualiserReq("NETCDF_FILENAME")       = outNetCDFFileName.c_str();
+        netCDFVisualiserReq("NETCDF_X_VARIABLE")     = "channel";
+        netCDFVisualiserReq("NETCDF_Y_VARIABLE")     = "pressure";
+        netCDFVisualiserReq("NETCDF_VALUE_VARIABLE") = "jacobian";
+        netCDFVisualiserReq("_VERB")                 = "NETCDF_XY_MATRIX";
+
+        out = netCDFVisualiserReq;
+    }
+
+    else if (str == "JACOBIAN_CHANNEL_CURVE")
+    {
+        defVal = "1";
+	    string channelString = getString(in, "RTTOV_JACOBIAN_CHANNEL", defVal);
+        channelString = "channel/" + channelString;
+
+        MvRequest netCDFVisualiserReq("NETCDF_XY_POINTS");
+        netCDFVisualiserReq("NETCDF_FILENAME")          = outNetCDFFileName.c_str();
+        netCDFVisualiserReq("NETCDF_X_VARIABLE")        = "jacobian";
+        netCDFVisualiserReq("NETCDF_Y_VARIABLE")        = "pressure";
+        netCDFVisualiserReq("NETCDF_VALUE_VARIABLE")    = "jacobian";
+        netCDFVisualiserReq("NETCDF_DIMENSION_SETTING") = channelString.c_str();
+        netCDFVisualiserReq("_VERB")                    = "NETCDF_XY_POINTS";
+
+        // currently, NETCDF_XY_POINTS does not honour the order of the
+        // values in the y-axis variable, so we have to create a Cartesian
+        // View which reverses the axis
+        MvRequest viewReq("CARTESIANVIEW");
+        viewReq("X_AUTOMATIC")         = "on";
+        viewReq("Y_AUTOMATIC")         = "on";
+        viewReq("Y_AUTOMATIC_REVERSE") = "on";
+
+        out = netCDFVisualiserReq + viewReq;
+    }
+
+
+    cout << "RttovVisualiser output request:" << endl;
+    out.print();
+}
+
+
+
+
+bool RttovVisualiser::exportRttovToNetCDF(MvRttov &rttov, string &fileName)
+{
+    MvNetCDF netcdf(fileName,'w');
+
+    // add the 'channel' variable
+    long channelsSize = (long)rttov.channels().size();
+    vector<long> channels_dimsize(1, channelsSize);
+    vector<string> channels_name(1, "channel");
+    MvNcVar *ncChannels = netcdf.addVariable(channels_name[0], ncInt, channels_dimsize, channels_name);
+    ncChannels->addAttribute("long_name", "channel");
+    ncChannels->put(rttov.channels(), channelsSize);
+
+    // add the 'tb' variable
+    long tbsSize = (long)rttov.tbs().size();
+    vector<long> tbs_dimsize(1, tbsSize);
+    vector<string> tbs_name(1, "tb");
+    MvNcVar *ncTbs = netcdf.addVariable(tbs_name[0], ncDouble, tbs_dimsize, tbs_name);
+    ncTbs->addAttribute("long_name", "brightness temperature");
+    ncTbs->addAttribute("units",     "kelvin");
+    ncTbs->put(rttov.tbs(), tbsSize);
+
+    // add the Jacobian pressures
+    long jpsSize = (long)rttov.jacobianPressures().size();
+    vector<long> jps_dimsize(1, jpsSize);
+    vector<string> jps_name(1, "pressure");
+    MvNcVar *ncJps = netcdf.addVariable(jps_name[0], ncDouble, jps_dimsize, jps_name);
+    ncJps->addAttribute("long_name", "pressure");
+    ncJps->addAttribute("units",     "hPa");
+    ncJps->put(rttov.jacobianPressures(), jpsSize);
+
+
+    // add the Jacobians themselves
+    vector<long> jvals_dimsize(2);
+    vector<string> jacobiansDimNames(2);
+    jvals_dimsize[0] = channelsSize;
+    jvals_dimsize[1] = jpsSize;
+    jacobiansDimNames[0] = "channel";
+    jacobiansDimNames[1] = "pressure";
+    MvNcVar *ncJVals = netcdf.addVariable("jacobian",ncDouble,jvals_dimsize,jacobiansDimNames);
+
+    for (size_t c = 0; c < channelsSize; c++)
+    {
+        ncJVals->setCurrent(c);
+        ncJVals->put(&(rttov.jacobianValues(c)[0]), 1, jpsSize);
+    }
+
+
+    netcdf.addAttribute("title", "Output from RTTOV");
+
+    netcdf.close();
+
+    return true;
+}
+
+
+int main(int argc, char** argv)
+{
+    MvApplication theApp( argc, argv );
+
+//    RttovVisualiser rttovOutVis("RTTOV_OUTPUT_FILE");
+    RttovVisualiser rttovVisVis("RTTOV_VISUALISER");
+
+    theApp.run();
+}
diff --git a/src/Rttov/RttovVisualiserDef b/src/Rttov/RttovVisualiserDef
new file mode 100644
index 0000000..0a51062
--- /dev/null
+++ b/src/Rttov/RttovVisualiserDef
@@ -0,0 +1,28 @@
+RTTOV_VISUALISER; Rttov Visualiser
+{
+	RTTOV_PLOT_TYPE
+	{
+		CHANNEL_TB_GRAPH
+ 		JACOBIAN_CHANNEL_CURVE
+		JACOBIAN_MATRIX
+	} = CHANNEL_TB_GRAPH
+
+
+	RTTOV_DATA
+		[ interface = icon, class = RTTOV_OUTPUT_FILE, exclusive = false ]
+	{ @ / }
+
+
+	RTTOV_FILENAME
+	{
+		OFF ; OFF
+		@
+	} = OFF
+
+
+	RTTOV_JACOBIAN_CHANNEL
+	{
+		*
+	} = 1
+
+}
diff --git a/src/Rttov/RttovVisualiserRules b/src/Rttov/RttovVisualiserRules
new file mode 100644
index 0000000..2854a4c
--- /dev/null
+++ b/src/Rttov/RttovVisualiserRules
@@ -0,0 +1,3 @@
+
+%if RTTOV_PLOT_TYPE = CHANNEL_TB_GRAPH %or RTTOV_PLOT_TYPE = JACOBIAN_MATRIX %then
+	%unset RTTOV_JACOBIAN_CHANNEL
diff --git a/src/Scm/Makefile.in b/src/Scm/Makefile.in
index ae7b0b3..48a29d6 100644
--- a/src/Scm/Makefile.in
+++ b/src/Scm/Makefile.in
@@ -148,6 +148,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -163,6 +164,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -189,11 +192,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/Scm/ScmRun.cc b/src/Scm/ScmRun.cc
index 0a8803c..6a6c0ec 100644
--- a/src/Scm/ScmRun.cc
+++ b/src/Scm/ScmRun.cc
@@ -37,7 +37,6 @@ public:
 
 protected:	
 	void shellCommand(string &, stringstream&,stringstream&);
-	bool generateTmpPath(string&);
 	
 	string ftmp;
 };
@@ -76,45 +75,13 @@ void ScmRun::shellCommand(string &command, stringstream& out,stringstream& err)
 
 }
 
-bool ScmRun::generateTmpPath(string& tmpPath)
-{
- 	string tmpRoot;
-	
-	char *mvtmp=getenv("METVIEW_TMPDIR");
-	if (mvtmp == 0)  
-	{	
-		marslog(LOG_EROR,"No env variable METVIEW_TMPDIR is not defined!");
-		setError(13);
-		return false;
-	}
-	else
-	{
-		tmpRoot=string(mvtmp);
-	}
-
-    time_t sec = time(NULL);
-  	srand (getpid());
-  	int rNum = rand() % 1000 + 1;
-
- 	std::stringstream out;
-  	out << tmpRoot << "/scm_" << sec << "_" << rNum; 
-	tmpPath=out.str();
-	
-	if(mkdir(tmpPath.c_str(),0777) != 0)
-	{
-		marslog(LOG_EROR,"Could not genarate work directory for SCM run: %s",tmpPath.c_str());
-		setError(13);
-		return false;
-	}
-	
-	return true;
-}  
-
 void ScmRun::serve( MvRequest& in, MvRequest& out)
 {
   	cout << "--------------ScmRun::serve()--------------" << endl;
   	in.print();
-
+	
+	string errTxt;
+	
 	//Find out scm script path
 	string scmScript;
 	char *mvbin=getenv("METVIEW_BIN");
@@ -132,58 +99,37 @@ void ScmRun::serve( MvRequest& in, MvRequest& out)
 
 	//Create  tmp dir for the flextra run
 	string tmpPath;
-	if(!generateTmpPath(tmpPath))
+	if(!metview::createWorkDir("scm",tmpPath,errTxt))
 	{
+		marslog(LOG_EROR,"%s",errTxt.c_str());
+		setError(13);
 		return;
 	}
 	
 	//Scm exe
-	string exe;	
-	const char *exeC=in("SCM_EXE_PATH");
-	if(exeC)
+	string exe;
+	if(!in.getPath("SCM_EXE_PATH",exe,true,errTxt))
 	{
-		exe=string(exeC);
-	}
-	if(!exeC || exe.empty())
+		marslog(LOG_EROR,"%s",errTxt.c_str());
+		setError(13);
+		return;
+	}	
+	if(exe.empty())
 	{
 	  	exe="_UNDEF_";
 	}	
 	
-
         //---------------------------------------
 	// Input data
 	//---------------------------------------
 	
-	MvRequest dataR=in("SCM_INPUT_DATA");
-	const char *dataPath=dataR("PATH");
-	string data;
-	if(dataPath)
-	{
-	  	data=string(dataPath);
-	}
-	else
+	string data;	
+	if(!in.getPath("SCM_INPUT_DATA","SCM_INPUT_DATA_PATH",data,true,errTxt))
 	{
-		const char *cval=in("SCM_INPUT_DATA_PATH");
-		if(cval)
-		{
-		  	data=string(cval);
-		}	
-		else
-		{
-			marslog(LOG_EROR,"No value found for paramater: SCM_INPUT_DATA_PATH");
-			setError(13);
-			return;
-		}
-		
-	}
-	
-	
-	if(data.empty())
-	{
-	  	marslog(LOG_EROR,"No value found for paramaters: SCM_INPUT_DATA and SCM_INPUT_DATA_PATH");
+		marslog(LOG_EROR,"%s",errTxt.c_str());
 		setError(13);
-		return;	
-	}
+		return;
+	}	
 	
 	//-------------------------
 	// Level num
@@ -205,56 +151,25 @@ void ScmRun::serve( MvRequest& in, MvRequest& out)
 	//Namelist
 	//-------------------------
 	
-	MvRequest nameR=in("SCM_NAMELIST");
-	const char *namePath=nameR("PATH");
-	string namelist;
-	if(namePath)
-	{
-	  	namelist=string(namePath);
-	}
-	else
-	{
-	  	const char *cval=in("SCM_NAMELIST_PATH");
-		if(cval)
-		{
-		  	namelist=string(cval);
-		}	
-		else
-		{
-			marslog(LOG_EROR,"No value found for paramater: SCM_NAMELIST_PATH");
-			setError(13);
-			return;
-		}
-	}
-	
-	if(namelist.empty())
+	string namelist;	
+	if(!in.getPath("SCM_NAMELIST","SCM_NAMELIST_PATH",namelist,false,errTxt))
 	{
-	  	marslog(LOG_EROR,"No value found for paramaters: SCM_NAMELIST and SCM_NAMELIST_PATH");
+		marslog(LOG_EROR,"%s",errTxt.c_str());
 		setError(13);
-		return;	
-	}
-	
+		return;
+	}	
 	
 	//-------------------------
 	//Vtable file
 	//-------------------------
 	
-	MvRequest vtabR=in("SCM_VTABLE");
-	const char *vtabPath=vtabR("PATH");
 	string vtable;
-	if(vtabPath)
+	if(!in.getPath("SCM_VTABLE","SCM_VTABLE_PATH",vtable,true,errTxt))
 	{
-	  	vtable=string(vtabPath);
-	}
-	else
-	{
-		const char *cval=in("SCM_VTABLE_PATH");
-		if(cval)
-		{
-		  	vtable=string(cval);
-		}
-	}
-	
+		marslog(LOG_EROR,"%s",errTxt.c_str());
+		setError(13);
+		return;
+	}	
 	if(vtable.empty())
 	{
 	  	vtable=string("_UNDEF_");
@@ -284,49 +199,12 @@ void ScmRun::serve( MvRequest& in, MvRequest& out)
 	const char *copyRes=in("SCM_COPY_OUTPUT_DATA"); 
 	if(copyRes && strcmp(copyRes,"ON") == 0)
 	{ 			
-	  	//Output path
-	  	string userResPath;
-		const char *outPath=in("SCM_OUTPUT_DATA_PATH"); 
-		if(outPath)
+		if(!in.getPath("SCM_OUTPUT_DATA_PATH",userResFile,false,errTxt))
 		{
-	  		userResPath=string(outPath);
-	  		
-	  		if(userResPath.at(0) == ' ')
-			{
-			  	marslog(LOG_EROR,"SCM_OUTPUT_DATA_PATH cannot start with a whitespace!");
-				setError(13);	
-				return;
-			}				
-			else if(userResPath.at(0) != '/')
-			{
-				const char* callerIcon=in("_NAME");
-				if(callerIcon)
-				{
-	  				string callerDir(callerIcon);	  	
-		        		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);
-					}
-					
-					userResPath=callerDir + "/" + userResPath;
-				}	
-			}					
-		}
-				  
-		if(!outPath || userResPath.empty())
-		{
-			marslog(LOG_EROR,"No value is defined for parameter SCM_OUTPUT_PATH!");
-			setError(13);	
+			marslog(LOG_EROR,"%s",errTxt.c_str());
+			setError(13);
 			return;
-		}
-		
-		userResFile=userResPath;		
+		}					
 	}
 	
 	//-------------------------
diff --git a/src/ScmEditor/Makefile.in b/src/ScmEditor/Makefile.in
index 6a98bad..a4b27bc 100644
--- a/src/ScmEditor/Makefile.in
+++ b/src/ScmEditor/Makefile.in
@@ -200,6 +200,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -215,6 +216,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -241,11 +244,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/ScmEditor/MvMain.cc b/src/ScmEditor/MvMain.cc
index 92f950e..67d2b0b 100644
--- a/src/ScmEditor/MvMain.cc
+++ b/src/ScmEditor/MvMain.cc
@@ -86,7 +86,8 @@ int main( int argc, char** argv )
 	
 	MvApplication theApp( argc, argv,"ScmDataEditor");
 
-    	MvScmDataEditor editor("SCM_INPUT_DATA");	
+    	MvScmDataEditor editor("SCM_INPUT_DATA");
+	MvScmDataEditor editor2("NETCDF_RTTOV_INPUT");	
 	
     	theApp.run();
 }
diff --git a/src/ScmEditor/ScmDataEditor.cc b/src/ScmEditor/ScmDataEditor.cc
index dff76f4..3599b85 100644
--- a/src/ScmEditor/ScmDataEditor.cc
+++ b/src/ScmEditor/ScmDataEditor.cc
@@ -64,7 +64,7 @@ ScmDataEditor::ScmDataEditor(QWidget *parent) :
 {
 	setAttribute(Qt::WA_DeleteOnClose);	
 
-	setWindowTitle(tr("Metview - SCM Data Editor"));
+	setWindowTitle(tr("Metview - Profile Data Editor"));
 
 	//Initial size
 	setInitialSize(1100,800);
@@ -360,7 +360,7 @@ void ScmDataEditor::setupHelpActions()
     	QIcon icon;
     	icon.addPixmap(QPixmap(QString::fromUtf8(":/window/metview_logo")), QIcon::Normal, QIcon::Off);
     	actionAbout->setIcon(icon);
-    	actionAbout->setText(tr("&About SCM Data Editor"));
+    	actionAbout->setText(tr("&About Profile Data Editor"));
 
 	connect(actionAbout, SIGNAL(triggered()), this, SLOT(slotShowAboutBox()));
 
@@ -384,7 +384,8 @@ void ScmDataEditor::init(MvScm *data)
 	//Get editable variables
 	editableVars_ << data_->mlVar(MvScm::TempML) << 
 	             data_->mlVar(MvScm::WindUML) << data_->mlVar(MvScm::WindVML) << data_->mlVar(MvScm:: SpHumML) << 
-	             data_->mlVar(MvScm::RelHumML) << data_->mlVar(MvScm::CloudLiqML) << data_->mlVar(MvScm::CloudIceML);	
+	             data_->mlVar(MvScm::RelHumML) << data_->mlVar(MvScm::CloudLiqML) << data_->mlVar(MvScm::CloudIceML) <<
+	             data_->mlVar(MvScm::OzoneML) ;	
 	
 	//Soil
 	editableVars_<< data_->soilVar(MvScm::TempSoil) << data_->soilVar(MvScm::HumSoil);
@@ -447,6 +448,11 @@ void ScmDataEditor::init(MvScm *data)
 	stepCombo_->setCurrentIndex(0);	
 	updateAnimationActionState();
 
+	if(static_cast<int>(steps.size()) <=1)
+	{
+	  	actionOverwrite_->setEnabled(false);
+	}	
+	
 	//Fileinfo label
 	updateFileInfoLabel();
 }
@@ -546,13 +552,14 @@ void ScmDataEditor::slotStepChanged(int step)
 
 void ScmDataEditor::slotShowAboutBox()
 {
-	MvQAbout about("SCM Data Editor","",MvQAbout::MetviewVersion );
+	MvQAbout about("Profile Data Editor","",MvQAbout::MetviewVersion );
 	about.exec();
 }
 
 void ScmDataEditor::updateFileInfoLabel()
 {
-	fileInfoLabel_->setScmTextLabel(QString::fromStdString(data_->fileName()),data_->stepNum(),data_->modelLevelNum());
+	fileInfoLabel_->setProfileTextLabel(QString::fromStdString(data_->fileName()),data_->stepNum(),
+					    data_->modelLevelNum(),QString::fromStdString(data_->id()));
 }
 
 //Callback from the table view editor
@@ -588,7 +595,14 @@ void ScmDataEditor::slotRedo(bool)
 	{
 	  	item.var()->setValue(item.step(),item.level(),item.value());
 		dataPanel_->update(item);
-		profilePanel_->update(item);	
+		profilePanel_->update(item);
+		
+		if(item.group() == MvProfileChange::GroupStart || 
+		   item.group() == MvProfileChange::GroupMember)
+		{  	
+		  	slotRedo(true);
+		}	
+		
 	}
 	
 	updateEditActionStatus();  
@@ -601,7 +615,14 @@ void ScmDataEditor::slotUndo(bool)
 	{
 	  	item.var()->setValue(item.step(),item.level(),item.prevValue());
 		dataPanel_->update(item);
-		profilePanel_->update(item);	
+		profilePanel_->update(item);
+		
+		if(item.group() == MvProfileChange::GroupEnd || 
+		   item.group() == MvProfileChange::GroupMember)
+		{
+		  	slotUndo(true);
+		}	
+		
 	}
 
 	updateEditActionStatus();
diff --git a/src/Stations/Makefile.in b/src/Stations/Makefile.in
index feb2a5b..07d22b6 100644
--- a/src/Stations/Makefile.in
+++ b/src/Stations/Makefile.in
@@ -168,6 +168,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -183,6 +184,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -209,11 +212,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/StdAppManager/INPUTVISUALISER.svg b/src/StdAppManager/INPUTVISUALISER.svg
deleted file mode 100644
index 80d8a46..0000000
--- a/src/StdAppManager/INPUTVISUALISER.svg
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64"
-   height="64"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.47 r22583"
-   version="1.0"
-   sodipodi:docname="INPUTVISUALISER.svg"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     gridtolerance="10000"
-     guidetolerance="10"
-     objecttolerance="10"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="6.796875"
-     inkscape:cx="32"
-     inkscape:cy="31.565804"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer2"
-     width="64px"
-     height="64px"
-     inkscape:window-width="772"
-     inkscape:window-height="646"
-     inkscape:window-x="521"
-     inkscape:window-y="172"
-     showgrid="false" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-        <cc: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:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1" />
-  <g
-     inkscape:groupmode="layer"
-     id="layer2"
-     inkscape:label="circle">
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-       x="2.6482759"
-       y="14.271264"
-       id="text6928"><tspan
-         sodipodi:role="line"
-         id="tspan6930"
-         x="2.6482759"
-         y="14.271264">4/8/15/16</tspan><tspan
-         sodipodi:role="line"
-         x="2.6482759"
-         y="30.521264"
-         id="tspan6932">6/7/8/9/9</tspan><tspan
-         sodipodi:role="line"
-         x="2.6482759"
-         y="46.771264"
-         id="tspan6934">3/5/6/8/4</tspan><tspan
-         sodipodi:role="line"
-         x="2.6482759"
-         y="63.021264"
-         id="tspan6936">23/42/10</tspan></text>
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer3"
-     inkscape:label="text">
-    <flowRoot
-       xml:space="preserve"
-       id="flowRoot3142"
-       style="font-family:Bitstream Vera Sans"><flowRegion
-         id="flowRegion3144"><rect
-           id="rect3146"
-           width="24.422989"
-           height="14.565517"
-           x="21.333334"
-           y="26.188505"
-           style="font-family:Bitstream Vera Sans" /></flowRegion><flowPara
-         id="flowPara3148">SassdfsfdffsSQ</flowPara></flowRoot>    <flowRoot
-       xml:space="preserve"
-       id="flowRoot3150"
-       style="font-family:Bitstream Vera Sans Mono"><flowRegion
-         id="flowRegion3152"><rect
-           id="rect3154"
-           width="18.096552"
-           height="12.8"
-           x="23.834482"
-           y="27.954023"
-           style="font-family:Bitstream Vera Sans Mono" /></flowRegion><flowPara
-         id="flowPara3156">SQ</flowPara></flowRoot>    <g
-       style="display:inline"
-       id="g6326"
-       transform="matrix(2.1061635,0,0,2.1061635,-2.6698689,-2.7501989)">
-      <rect
-         rx="0"
-         ry="0.76569498"
-         y="25.690905"
-         x="20.200878"
-         height="1.53139"
-         width="3.6325176"
-         id="rect4235"
-         style="opacity:1;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.85816514;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <rect
-         ry="1.2517357"
-         y="27.350697"
-         x="13.411453"
-         height="2.7717004"
-         width="17.032545"
-         id="rect4233"
-         style="fill:#b6c6cc;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.95899999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <g
-         id="g6294">
-        <rect
-           style="fill:#e7e4e0;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:1.00858581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="rect4231"
-           width="18.368809"
-           height="12.378362"
-           x="12.631559"
-           y="13.338168"
-           ry="1.2467414" />
-        <path
-           style="fill:none;fill-rule:evenodd;stroke:#e52626;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-           d="M 17.43489,21.539066 L 20.832458,15.548617 L 21.994785,20.108511 L 24.542961,17.962678 C 25.541369,18.812071 26.251737,19.373422 27.538186,20.510855"
-           id="path5224"
-           sodipodi:nodetypes="ccccc" />
-        <path
-           style="fill:none;fill-rule:evenodd;stroke:#1f283c;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="M 14.752598,15.056863 C 14.797303,23.506079 14.797303,23.595489 14.797303,23.595489"
-           id="path5226" />
-        <path
-           style="fill:none;fill-rule:evenodd;stroke:#1f283c;stroke-width:1.00666595px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="M 14.308883,23.726271 L 29.323046,23.688232"
-           id="path5228" />
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/src/StdAppManager/INPUTVISUALISER.xpm b/src/StdAppManager/INPUTVISUALISER.xpm
deleted file mode 100644
index 433b418..0000000
--- a/src/StdAppManager/INPUTVISUALISER.xpm
+++ /dev/null
@@ -1,153 +0,0 @@
-/* XPM */
-static char *INPUTVISUALISER[] = {
-/* columns rows colors chars-per-pixel */
-"32 32 115 2",
-"   c #1D54204D1A68",
-".  c #27122B07267E",
-"X  c #2A412D4128B8",
-"o  c #2D5A31F22D2F",
-"O  c #313633EE2EA7",
-"+  c #3129359730CB",
-"@  c #35E239D134F5",
-"#  c #39963C3D36F8",
-"$  c #3A613E073923",
-"%  c #3D3C41373BD8",
-"&  c #402B42E23D9B",
-"*  c #3E46455D5610",
-"=  c #421146C34202",
-"-  c #441948274351",
-";  c #48EF4B7745CD",
-":  c #46524ED04C5B",
-">  c #4C194EF24984",
-",  c #4F1052844DBC",
-"<  c #504452C94D3D",
-"1  c #546E56A050E1",
-"2  c #574159CD5514",
-"3  c #5D9B5D9B5D9B",
-"4  c #5EDD60665A58",
-"5  c #607962245CEA",
-"6  c #4EBE54F5636B",
-"7  c #5065567064EF",
-"8  c #589C5E506B76",
-"9  c #594F632A61F4",
-"0  c #6350637B6317",
-"q  c #6C6A6CDB6C2B",
-"w  c #612A6638726F",
-"e  c #742274C173B0",
-"r  c #76E8789173E2",
-"t  c #7A6F7B627611",
-"y  c #7D487D787D2D",
-"u  c #E60935B0354F",
-"i  c #E6253CB83C47",
-"p  c #E63D4D364C62",
-"a  c #E65650554F8C",
-"s  c #E6635351526D",
-"d  c #E66A5C435B0E",
-"f  c #E6C060925F96",
-"g  c #E68B62C3613F",
-"h  c #E67F6DEA6C84",
-"j  c #E6AE70746EBE",
-"k  c #E6BB78477675",
-"l  c #E6AD7ABD790A",
-"z  c #81BB83657FD3",
-"x  c #E6EE81197F03",
-"c  c #786F8454858B",
-"v  c #8425846483E6",
-"b  c #8800893B85FC",
-"n  c #890388FC838E",
-"m  c #8C038C4D8B8F",
-"M  c #904C90918FFF",
-"N  c #8EF09C3A9F43",
-"B  c #9405941793EC",
-"V  c #97E098ED9720",
-"C  c #9C9A9CBD9C7E",
-"Z  c #9FCEA1589E8A",
-"A  c #A444A3539E54",
-"S  c #8FEB9D36A042",
-"D  c #90D29E33A149",
-"F  c #98F89AA3A0C0",
-"G  c #9F5FA0C7A620",
-"H  c #A42EA44EA45B",
-"J  c #A858A765A25B",
-"K  c #AB28AA2EA53A",
-"L  c #A49CA5C5AA5B",
-"P  c #AC45AC61AC61",
-"I  c #AFBBAF8EB078",
-"U  c #A7A9B6D5BBAA",
-"Y  c #A8A8B7D4BCB2",
-"T  c #B2F0B2EDB30C",
-"R  c #BBF4BBF7BBF2",
-"E  c #E6C385D883BA",
-"W  c #E6E1899D87A4",
-"Q  c #E7168E0F8C0B",
-"!  c #E72391FE8FD3",
-"~  c #E8879602938A",
-"^  c #E7159EE49C44",
-"/  c #E6F3A2B89FF1",
-"(  c #E74AA7FEA55C",
-")  c #E9E0A847A57D",
-"_  c #E74DABE5A929",
-"`  c #E956ADA7AA99",
-"'  c #E837B7FDB4DF",
-"]  c #E77BB8F9B603",
-"[  c #E77ABC22B8FF",
-"{  c #C486C476C43D",
-"}  c #C8E4C9B3C825",
-"|  c #CC3DCC4CCC11",
-" . c #D507D00BCE84",
-".. c #D376D1AED022",
-"X. c #D3D5D376D317",
-"o. c #D822D869D7C4",
-"O. c #DCD0DC52DB7F",
-"+. c #E783C652C2F1",
-"@. c #E78DCB61C7E9",
-"#. c #E79ACEF7CB7A",
-"$. c #E7B5D2B5CF0A",
-"%. c #E7B5D6E4D313",
-"&. c #EA5FD7BBD42D",
-"*. c #E7C1DA6FD6AB",
-"=. c #E7C8DE04DA2A",
-"-. c #EA70DE39DA66",
-";. c #E73FE300DF37",
-":. c #E8FFE3AFDF97",
-">. c #E618E502E305",
-",. c #E9EBE719E308",
-"<. c #EC0AE972E57B",
-"1. c #ECA7ECA7ECA7",
-"2. c #F080F0B9F033",
-"3. c #F4D1F4D3F4CD",
-"4. c #FF7DFF7EFF7D",
-/* pixels */
-"4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.",
-"4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.",
-"4.4.4.T } 4.1.| X.C T 3.4.| o.C { 4.>.V C o.4.>.X.R C 3.4.>.H V ",
-"4.4.X.0 V 4.{ H b R v X.1.B O.B B 4.{ y | 1.4.P { } q >.4.m L | ",
-"4.3.C C C 4.C X.C r r >.} P 4.{ V 4.X.y y { 3.B 1.3.v >.1.3 b y ",
-"4.R e r q O.B >.v R m { H X.4.{ V 4.4.3.{ y o.C 4.3.v >.1.3 O.V ",
-"4.1.| B b { H 3.y K y T B 3.1.B q O.O.R m V T R 4.} 3 P 3.B H e ",
-"4.4.4.1.>.R X.4.>.T } o.T 4.1.R T O.>.T R 1.P >.4.X.T { 3.1.R { ",
-"4.4.4.4.4.3.4.4.4.4.4.4.3.4.4.4.4.4.4.4.4.4.3.4.4.4.4.4.4.4.4.4.",
-"4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.",
-"4.4.O.K { 4.3.X.{ P K >.4.o.<.R T 1.4.>.>.{ L >.4.3.o.o.H } 4.4.",
-"4.1.v T X.4.} K o.R 0 O.1.M V b m V 2.V V e C t >.R B e C e X.4.",
-"4.{ 3 m P 4.H X.4.X.b >.r # $ & = # < # # $ , O > & $ + < @ 2 } ",
-"4.{ q O.e X.B 1.4.C R C - A P K K K K K P K K K K K K K K K 4 2 ",
-"4.>.y T e R H 4.1.y 1.t r } L ;.,.,.,.-.) &.,.,.,.,.,.,.,.<.J % ",
-"4.4.| H X.T | 4.1.| 4.t t G w O.,.>.,./ u ( ,.>.>.>.>.>.>.,.J % ",
-"4.4.4.4.4.3.4.4.4.4.4.t t H w O.,.>.$.d i x >.>.*.:.>.>.>.,.J % ",
-"4.4.4.4.4.4.4.4.4.4.4.t t L w O.,.>.Q f ! g %.^ d ^ ;.>.>.,.J % ",
-"4.3.{ R 1.4.3.O.X.R | e t L w O.,.+.a _ +.p j s x s W =.>.,.J % ",
-"4.3.R H m 4.| H b C } e t L w O.:.l h =.*.d s ] ,.] d k *.,.J % ",
-"4.4.>.V m 4.L } m v P e t L w O.' p [ ,.>.+. at .,.>.,.+.E #.<.J % ",
-"4.4.>.C b <.B 1.1.O.e - t L w O.` ~ :.,.,.,.,.,.,.,.,.:.,.<.J % ",
-"4.3.O.{ e { C 4.O.o.e ; t L 8 }  . .X.X.X.X.X.X.......X...O.J % ",
-"4.<.C B | R { 4.P m T e t P * 6 7 7 7 7 6 6 6 6 6 6 6 6 6 F K % ",
-"4.4.4.4.4.3.4.4.4.4.4.v 5 { P P P P P P P I I T T T T T T { n - ",
-"4.4.4.4.4.4.4.4.4.4.4.| ; ; 1 1 1 1 1 > ; ; ; ; < 1 1 1 1 < % V ",
-"4.3.X.} 3.4.o.| 1.4.4.1.O.H v m b e z >   o X   5 m m b r B | 4.",
-"4.>.H m B 3.T C b 3.>.H { < % = = % % @ o + + o $ - - = % % z 3.",
-"4.4.4.X.y 3.3.T y 3.R T r 9 U U U U U Y Y Y Y Y U U U U Y D % { ",
-"4.4.1.m } 4.<.C v 1.C | 1 : N N S D D N N N N S D S N D D c % | ",
-"4.1.y H 1.3.>.O.e } V 1.C q @ , # X $ ; % > 1 $ . % , + + @ Z 3.",
-"4.o.q v H ,.B t H { L 4.4.3.H O.C 0 e P m o.>.v 0 M >.H 0 P 4.4."
-};
diff --git a/src/StdAppManager/Makefile.am b/src/StdAppManager/Makefile.am
index 9a06fbe..4930379 100644
--- a/src/StdAppManager/Makefile.am
+++ b/src/StdAppManager/Makefile.am
@@ -8,7 +8,6 @@ bin_StdAppManager_DEPENDENCIES =
 
 sharedir       = $(datadir)/metview/etc
 local_sharedir = ../../share/metview/etc
-local_iconsdir = ../../share/metview/icons
 share_DATA     = $(local_sharedir)/ObjectSpec.StdAppManager \
                  $(local_sharedir)/InputVisualiserDef $(local_sharedir)/InputVisualiserRules \
                  $(local_sharedir)/NetcdfPlusDef $(local_sharedir)/NetcdfPlusRules \
@@ -21,27 +20,14 @@ share_DATA     = $(local_sharedir)/ObjectSpec.StdAppManager \
 $(share_DATA): $(local_sharedir)/%: %
 	${INSTALL} $<  $(local_sharedir)
 
-
-icons:
-	${INSTALL} INPUTVISUALISER.svg $(local_iconsdir)
-	${INSTALL} INPUTVISUALISER.xpm $(local_iconsdir)
-	${INSTALL} NETCDFPLUS.svg $(local_iconsdir)
-	${INSTALL} NETCDFPLUS.xpm $(local_iconsdir)
-	${INSTALL} TABLEVISUALISER.svg $(local_iconsdir)
-	${INSTALL} TABLEVISUALISER.xpm $(local_iconsdir)
-
-
-CLEANFILES = $(share_DATA) \
-             $(local_iconsdir)/INPUTVISUALISER.svg $(local_iconsdir)/INPUTVISUALISER.xpm \
-             $(local_iconsdir)/NETCDFPLUS.svg $(local_iconsdir)/NETCDFPLUS.xpm \
-             $(local_iconsdir)/TABLEVISUALISER.svg $(local_iconsdir)/TABLEVISUALISER.xpm
-
-BUILT_SOURCES = bin icons
+CLEANFILES = $(share_DATA)
+         
+BUILT_SOURCES = bin
 
 EXTRA_DIST = ObjectSpec.StdAppManager \
-             INPUTVISUALISER.svg INPUTVISUALISER.xpm InputVisualiserDef InputVisualiserRules \
-             NETCDFPLUS.svg NETCDFPLUS.xpm NetcdfPlusDef NetcdfPlusRules \
-             TABLEVISUALISER.svg TABLEVISUALISER.xpm TableVisualiserDef TableVisualiserRules
+             InputVisualiserDef InputVisualiserRules \
+             NetcdfPlusDef NetcdfPlusRules \
+             TableVisualiserDef TableVisualiserRules
 
 bin:
 	ln -s ../../bin bin
diff --git a/src/StdAppManager/Makefile.in b/src/StdAppManager/Makefile.in
index 6ee7ef3..2b2fb87 100644
--- a/src/StdAppManager/Makefile.in
+++ b/src/StdAppManager/Makefile.in
@@ -159,6 +159,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -174,6 +175,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -200,11 +203,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -339,22 +345,17 @@ bin_StdAppManager_LDADD = $(STANDARD_METVIEW_LIBS)
 bin_StdAppManager_DEPENDENCIES = 
 sharedir = $(datadir)/metview/etc
 local_sharedir = ../../share/metview/etc
-local_iconsdir = ../../share/metview/icons
 share_DATA = $(local_sharedir)/ObjectSpec.StdAppManager \
                  $(local_sharedir)/InputVisualiserDef $(local_sharedir)/InputVisualiserRules \
                  $(local_sharedir)/NetcdfPlusDef $(local_sharedir)/NetcdfPlusRules \
                  $(local_sharedir)/TableVisualiserDef $(local_sharedir)/TableVisualiserRules
 
-CLEANFILES = $(share_DATA) \
-             $(local_iconsdir)/INPUTVISUALISER.svg $(local_iconsdir)/INPUTVISUALISER.xpm \
-             $(local_iconsdir)/NETCDFPLUS.svg $(local_iconsdir)/NETCDFPLUS.xpm \
-             $(local_iconsdir)/TABLEVISUALISER.svg $(local_iconsdir)/TABLEVISUALISER.xpm
-
-BUILT_SOURCES = bin icons
+CLEANFILES = $(share_DATA)
+BUILT_SOURCES = bin
 EXTRA_DIST = ObjectSpec.StdAppManager \
-             INPUTVISUALISER.svg INPUTVISUALISER.xpm InputVisualiserDef InputVisualiserRules \
-             NETCDFPLUS.svg NETCDFPLUS.xpm NetcdfPlusDef NetcdfPlusRules \
-             TABLEVISUALISER.svg TABLEVISUALISER.xpm TableVisualiserDef TableVisualiserRules
+             InputVisualiserDef InputVisualiserRules \
+             NetcdfPlusDef NetcdfPlusRules \
+             TableVisualiserDef TableVisualiserRules
 
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -728,14 +729,6 @@ uninstall-am: uninstall-binPROGRAMS uninstall-shareDATA
 $(share_DATA): $(local_sharedir)/%: %
 	${INSTALL} $<  $(local_sharedir)
 
-icons:
-	${INSTALL} INPUTVISUALISER.svg $(local_iconsdir)
-	${INSTALL} INPUTVISUALISER.xpm $(local_iconsdir)
-	${INSTALL} NETCDFPLUS.svg $(local_iconsdir)
-	${INSTALL} NETCDFPLUS.xpm $(local_iconsdir)
-	${INSTALL} TABLEVISUALISER.svg $(local_iconsdir)
-	${INSTALL} TABLEVISUALISER.xpm $(local_iconsdir)
-
 bin:
 	ln -s ../../bin bin
 
diff --git a/src/StdAppManager/NETCDFPLUS.svg b/src/StdAppManager/NETCDFPLUS.svg
deleted file mode 100644
index da1d244..0000000
--- a/src/StdAppManager/NETCDFPLUS.svg
+++ /dev/null
@@ -1,268 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64"
-   height="64"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.47 r22583"
-   version="1.0"
-   sodipodi:docname="NETCDFPLUS.svg"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/NETCDF.png"
-   inkscape:export-xdpi="45"
-   inkscape:export-ydpi="45">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     gridtolerance="10000"
-     guidetolerance="10"
-     objecttolerance="10"
-     inkscape:pageopacity="1"
-     inkscape:pageshadow="2"
-     inkscape:zoom="6.796875"
-     inkscape:cx="33.618391"
-     inkscape:cy="29.873382"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer2"
-     width="64px"
-     height="64px"
-     inkscape:window-width="772"
-     inkscape:window-height="646"
-     inkscape:window-x="680"
-     inkscape:window-y="122"
-     showgrid="false" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-        <cc: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:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1" />
-  <g
-     inkscape:groupmode="layer"
-     id="layer2"
-     inkscape:label="circle">
-    <rect
-       style="opacity:0.8699187;fill:#00222b;fill-opacity:1;fill-rule:nonzero;stroke:#00222b;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2194"
-       width="10.264623"
-       height="10.264623"
-       x="3.5481482"
-       y="9.9755964" />
-    <rect
-       style="opacity:0.8699187;fill:#004455;fill-opacity:1;fill-rule:nonzero;stroke:#004455;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2198"
-       width="10.264623"
-       height="10.264623"
-       x="19.290678"
-       y="9.9755964"
-       inkscape:transform-center-x="-5.5402987"
-       inkscape:transform-center-y="3.5310345" />
-    <rect
-       style="opacity:0.8699187;fill:#6f918a;fill-opacity:1;fill-rule:nonzero;stroke:#6f918a;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2200"
-       width="10.264623"
-       height="10.264623"
-       x="34.591827"
-       y="9.9755964"
-       inkscape:transform-center-y="3.8252874"
-       inkscape:transform-center-x="1.0298851" />
-    <rect
-       style="opacity:0.8699187;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2202"
-       width="10.264623"
-       height="10.264623"
-       x="49.157345"
-       y="9.9755964"
-       inkscape:transform-center-x="9.416092"
-       inkscape:transform-center-y="2.0597701"
-       inkscape:export-xdpi="45"
-       inkscape:export-ydpi="45" />
-    <rect
-       style="opacity:0.8699187;fill:#004455;fill-opacity:1;fill-rule:nonzero;stroke:#004455;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2204"
-       width="10.264623"
-       height="10.264623"
-       x="3.5481482"
-       y="24.881483"
-       inkscape:transform-center-x="-5.5402987"
-       inkscape:transform-center-y="3.5310345" />
-    <rect
-       style="opacity:0.49322492;fill:#b7c8c4;fill-opacity:1;fill-rule:nonzero;stroke:#b7c8c4;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2206"
-       width="10.264623"
-       height="10.264623"
-       x="3.5481482"
-       y="41.212517"
-       inkscape:transform-center-y="3.8252874"
-       inkscape:transform-center-x="1.0298851" />
-    <rect
-       style="opacity:0.8699187;fill:#93aca7;fill-opacity:1;fill-rule:nonzero;stroke:#93aca7;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2210"
-       width="10.264623"
-       height="10.264623"
-       x="19.290678"
-       y="24.881483"
-       inkscape:transform-center-y="3.8252874"
-       inkscape:transform-center-x="1.0298851" />
-    <rect
-       style="opacity:0.49322492;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2212"
-       width="10.264623"
-       height="10.264623"
-       x="19.290678"
-       y="41.065388"
-       inkscape:transform-center-x="9.416092"
-       inkscape:transform-center-y="2.0597701" />
-    <rect
-       style="opacity:0.8699187;fill:#93aca7;fill-opacity:1;fill-rule:nonzero;stroke:#93aca7;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2214"
-       width="10.264623"
-       height="10.264623"
-       x="34.591827"
-       y="25.175734"
-       inkscape:transform-center-x="9.416092"
-       inkscape:transform-center-y="2.0597701" />
-    <rect
-       style="opacity:0.8699187;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2216"
-       width="10.264623"
-       height="10.264623"
-       x="49.157345"
-       y="25.469988"
-       inkscape:transform-center-x="9.416092"
-       inkscape:transform-center-y="2.0597701" />
-    <rect
-       style="opacity:0.49322492;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2218"
-       width="10.264623"
-       height="10.264623"
-       x="34.591827"
-       y="40.476883"
-       inkscape:transform-center-x="9.416092"
-       inkscape:transform-center-y="2.0597701" />
-    <rect
-       style="opacity:0.49322493;fill:#dbe3e2;fill-opacity:1;fill-rule:nonzero;stroke:#dbe3e2;stroke-width:0.81597477;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2220"
-       width="10.264623"
-       height="10.264623"
-       x="49.157345"
-       y="40.035503"
-       inkscape:transform-center-x="9.416092"
-       inkscape:transform-center-y="2.0597701" />
-    <g
-       style="display:inline"
-       id="g6326"
-       transform="matrix(2.2375662,0,0,2.0356045,-5.9321915,-2.0574251)">
-      <rect
-         rx="0"
-         ry="0.76569498"
-         y="25.690905"
-         x="20.200878"
-         height="1.53139"
-         width="3.6325176"
-         id="rect4235"
-         style="opacity:1;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.85816514;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <rect
-         ry="1.2517357"
-         y="27.350697"
-         x="13.411453"
-         height="2.7717004"
-         width="17.032545"
-         id="rect4233"
-         style="fill:#b6c6cc;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.95899999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <g
-         id="g6294">
-        <rect
-           style="fill:#e7e4e0;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:1.00858581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="rect4231"
-           width="18.368809"
-           height="12.378362"
-           x="12.631559"
-           y="13.338168"
-           ry="1.2467414" />
-        <path
-           style="fill:none;fill-rule:evenodd;stroke:#e52626;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-           d="M 17.43489,21.539066 L 20.832458,15.548617 L 21.994785,20.108511 L 24.542961,17.962678 C 25.541369,18.812071 26.251737,19.373422 27.538186,20.510855"
-           id="path5224"
-           sodipodi:nodetypes="ccccc" />
-        <path
-           style="fill:none;fill-rule:evenodd;stroke:#1f283c;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="M 14.752598,15.056863 C 14.797303,23.506079 14.797303,23.595489 14.797303,23.595489"
-           id="path5226" />
-        <path
-           style="fill:none;fill-rule:evenodd;stroke:#1f283c;stroke-width:1.00666595px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="M 14.308883,23.726271 L 29.323046,23.688232"
-           id="path5228" />
-      </g>
-    </g>
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer3"
-     inkscape:label="text">
-    <flowRoot
-       xml:space="preserve"
-       id="flowRoot3142"
-       style="font-family:Bitstream Vera Sans"><flowRegion
-         id="flowRegion3144"><rect
-           id="rect3146"
-           width="24.422989"
-           height="14.565517"
-           x="21.333334"
-           y="26.188505"
-           style="font-family:Bitstream Vera Sans" /></flowRegion><flowPara
-         id="flowPara3148">SassdfsfdffsSQ</flowPara></flowRoot>    <flowRoot
-       xml:space="preserve"
-       id="flowRoot3150"
-       style="font-family:Bitstream Vera Sans Mono"><flowRegion
-         id="flowRegion3152"><rect
-           id="rect3154"
-           width="18.096552"
-           height="12.8"
-           x="23.834482"
-           y="27.954023"
-           style="font-family:Bitstream Vera Sans Mono" /></flowRegion><flowPara
-         id="flowPara3156">SQ</flowPara></flowRoot>  </g>
-</svg>
diff --git a/src/StdAppManager/NETCDFPLUS.xpm b/src/StdAppManager/NETCDFPLUS.xpm
deleted file mode 100644
index 9c8b7a6..0000000
--- a/src/StdAppManager/NETCDFPLUS.xpm
+++ /dev/null
@@ -1,207 +0,0 @@
-/* XPM */
-static char *NETCDFPLUS[] = {
-/* columns rows colors chars-per-pixel */
-"32 32 169 2",
-"   c #1DCB217F1B65",
-".  c #21AE24F21F5B",
-"X  c #229C262220AE",
-"o  c #2674298E23DA",
-"O  c #2DCE310C2AA1",
-"+  c #39463CD4368A",
-"@  c #3EBC42893D17",
-"#  c #402542D43D38",
-"$  c #1EE83D4C446D",
-"%  c #207B3EB045BB",
-"&  c #22BE409C47AE",
-"*  c #23B3416B4881",
-"=  c #2B0547C74E9B",
-"-  c #2BEA48A04F48",
-";  c #3F2044F340BA",
-":  c #3A1454815B59",
-">  c #1E415A486984",
-",  c #212F5C676B75",
-"<  c #2B8664037267",
-"1  c #37296CB87A6D",
-"2  c #39CC6EAD7C37",
-"3  c #3F7C72747F86",
-"4  c #451747744112",
-"5  c #440A4A084606",
-"6  c #4A984CDE46A4",
-"7  c #44634C3B4915",
-"8  c #4C7A4F764A37",
-"9  c #4D2550574B42",
-"0  c #44154AFC5AA0",
-"q  c #4E6B57285514",
-"w  c #49BE50385F57",
-"e  c #5211556950C4",
-"r  c #57C25982536B",
-"t  c #59FB5C7B5734",
-"y  c #5D055EFC5938",
-"u  c #5E9B61785CA8",
-"i  c #609D63645ED0",
-"p  c #4C5152AF6169",
-"a  c #42E35C2962B7",
-"s  c #401572E67FEC",
-"d  c #61F464D66032",
-"f  c #6CA86DBA67D8",
-"g  c #671D6EE469D6",
-"h  c #6C0B6F486ADF",
-"j  c #62EC71D06C07",
-"k  c #73B574806ED3",
-"l  c #6F27738E7E76",
-"z  c #6D3578457890",
-"x  c #739D75D871B9",
-"c  c #708F74C37F80",
-"v  c #71A17D267AF5",
-"b  c #E62735E63591",
-"n  c #E63744044370",
-"m  c #E6524E664D8D",
-"M  c #E66752425147",
-"N  c #E66B59A75881",
-"B  c #E69C64576313",
-"V  c #E676690967AD",
-"C  c #E6AD6D526BDE",
-"Z  c #E6C371056F57",
-"A  c #E6B174D17326",
-"S  c #721983017D46",
-"D  c #7EF281147D28",
-"F  c #43587577822E",
-"G  c #49CF7A30867F",
-"H  c #71E6762280A2",
-"J  c #59D985F5915D",
-"K  c #5D1888759384",
-"L  c #77E983A384B4",
-"P  c #795C8513862C",
-"I  c #6D11942C9E23",
-"U  c #873387A682E6",
-"Y  c #880188748393",
-"T  c #8932898584B8",
-"R  c #810184128D14",
-"E  c #90B4925F8F0A",
-"W  c #8705897E9144",
-"Q  c #8A268CF29435",
-"!  c #8F2891CF98A1",
-"~  c #81C29F0C98F9",
-"^  c #92AF964A9300",
-"/  c #95B498DA95B8",
-"(  c #9C1C9D8A9A1B",
-")  c #850CA1A79BC5",
-"_  c #88D3A4939ED2",
-"`  c #9EF0A045A4FC",
-"'  c #9888A658A9D6",
-"]  c #95B8AE64A971",
-"[  c #9D49AA76ADF6",
-"{  c #9B7CB2DAAE21",
-"}  c #8D4FAC0EB3ED",
-"|  c #9257AFB8B755",
-" . c #975EB387BA5B",
-".. c #98C9B4A1BB52",
-"X. c #A7F0A6CDA21F",
-"o. c #A6E1AA16A778",
-"O. c #A678B2F5B666",
-"+. c #A8B4B44DB755",
-"@. c #A813B73EBC3B",
-"#. c #AB1FBA78BFA0",
-"$. c #B4E6B61CB3E6",
-"%. c #BD09BB68B7AF",
-"&. c #B19CBC29BE98",
-"*. c #BE54BEE7BDBF",
-"=. c #E6D785D28404",
-"-. c #E6E08A278802",
-";. c #E8E08F698D4B",
-":. c #E72096F9949B",
-">. c #E7199A0397A0",
-",. c #C132BF54BAED",
-"<. c #E740A38CA0F5",
-"1. c #E74FAB39A853",
-"2. c #E744B2A9AFB6",
-"3. c #E76FB703B3EF",
-"4. c #EAE3B4F8B187",
-"5. c #E77ABE19BACB",
-"6. c #B131C0B5BCFB",
-"7. c #C216C045BBD7",
-"8. c #E7A6C0A8BD59",
-"9. c #E981C0BFBD99",
-"0. c #A768BF35C539",
-"q. c #A886C036C638",
-"w. c #C0B5C015C0A6",
-"e. c #B810C89CC533",
-"r. c #B8C5C935C5D0",
-"t. c #B743CAD9CFC5",
-"y. c #BED4C968CA15",
-"u. c #B8CECBB8D083",
-"i. c #BFC8D0E7D550",
-"p. c #C1E2C13EC1C8",
-"a. c #C97AC80AC6B2",
-"s. c #CA9EC926C7AD",
-"d. c #C0CAC970CB6F",
-"f. c #CACFCB14C958",
-"g. c #D1E4CFDECC5A",
-"h. c #D2BCD173CF97",
-"j. c #C730CEE9D0DD",
-"k. c #CE6BDABBD9AE",
-"l. c #D84CD5D8D19B",
-"z. c #D95FD6E1D2A5",
-"x. c #D420DC9FDBFF",
-"c. c #D95FDE46DFD1",
-"v. c #E79BC7C9C44C",
-"b. c #E7A7CE58CAB9",
-"n. c #E7B6D68FD2E0",
-"m. c #E7C8DAF4D72A",
-"M. c #EB4DDBCDD790",
-"N. c #E7CDDFD0DBF3",
-"B. c #E9CEDD82D992",
-"V. c #E02BE0B7DFB4",
-"C. c #E7DFE28BDE93",
-"Z. c #ED60E3B5DF2B",
-"A. c #D3CADFCAE284",
-"S. c #D66EE189E4A6",
-"D. c #DC60E4F2E32F",
-"F. c #E05EE8D1EAF3",
-"G. c #E574E699E461",
-"H. c #EA00E72EE328",
-"J. c #E280E8EBE736",
-"K. c #EB52E8F6E492",
-"L. c #E53EEB22EACB",
-"P. c #EC9EED4BECA8",
-"I. c #EC9EF0DCEFD4",
-"U. c #EAAFF050F1DE",
-"Y. c #EE58F28EF230",
-"T. c #F464F703F705",
-"R. c #F64FF882F7EA",
-"E. c #F74FF9C2F9DE",
-"W. c #FF75FF97FF91",
-/* pixels */
-"W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.",
-"W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.",
-"W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.",
-"W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.",
-"W.L.d.y.y.y.j.R.W.F.i.i.i.i.k.E.W.L.D.D.D.D.I.W.E.E.E.E.E.E.W.W.",
-"W.[ = - - = a c.W.| < < < < G Y.R.{ _ _ _ _ y.W.Y.J.J.J.J.L.W.W.",
-"W.' $ % % $ : x.W.} > , , > 3 U.R.] ~ ~ ~ ~ e.W.Y.J.J.J.J.L.W.W.",
-"W.' $ % % % : x.W.} , , , > s U.R.] ~ ~ ~ ~ e.W.Y.J.J.J.J.L.W.W.",
-"W.' $ % % $ : x.W.} > , , > 3 U.R.] ~ ~ ~ ~ e.W.Y.J.J.J.J.L.W.W.",
-"W.[ & * * & : c.W.} , , , , F Y.R.] ) ) ) ) r.W.Y.J.J.J.J.L.W.W.",
-"W.D.+.O.+.O.&.T.W.A.0.0.q.q.t.E.W.D.k.k.k.k.L.W.E.T.R.R.T.E.W.W.",
-"W.W.E.E.E.E.E.W.W.W.W.E.P.K.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.P.E.",
-"W.u.K K K K I L.W.D.6.g # @ @ # # @ @ @ @ @ # # # # # # # @ 5 D ",
-"W. .> > > > 1 S.W.x.S + X.%.*.,.,.,.,.,.,.,.,.,.,.,.,.,.,.7.( O ",
-"W...> , , , 2 S.W.x.j t h.R h.K.H.H.K.9.;.B.H.H.H.H.H.H.H.K.z.6 ",
-"W...> , , , 2 S.W.x.j y a.0 p.H.H.H.m.B b 8.H.H.H.H.H.H.H.H.l.6 ",
-"W. .> > > > 1 S.W.x.j y s.w p.H.H.H.>.m M :.K.m.5.m.H.H.H.H.l.6 ",
-"W.t.J J J J I L.W.D.v y s.w p.H.H.v.M <.-.C v.Z n A b.H.H.H.l.6 ",
-"W.E.T.T.T.T.T.W.W.W./ y s.p w.H.C.A C N.3.n m C 2.V N 3.C.H.l.6 ",
-"W.W.W.W.W.W.W.W.W.W.( y s.p *.H.1.m 8.H.n.V -.m.H.m.=.M 5.H.l.6 ",
-"W.R.I.I.I.I.Y.W.W.W./ y s.p *.B.B ;.H.H.C.m.C.H.H.H.C.3.b.H.l.6 ",
-"W.Y.D.D.D.D.D.E.W.E.^ y f.p p.Z.4.M.K.K.K.K.K.K.K.K.K.K.K.K.l.6 ",
-"W.Y.D.D.D.D.D.E.W.E.^ y f.0 H Q Q Q Q Q Q Q Q Q Q Q W W W ` g.6 ",
-"W.Y.D.D.D.D.D.E.W.E.^ r h.R l l l l l c c c c c c H H H c ! f.4 ",
-"W.Y.D.D.D.D.D.E.W.E.*.+ k Y U U U U U T T T T T Y Y Y Y Y T f O ",
-"W.T.J.J.J.J.L.E.W.E.P.o.h u y u u u t o . o o   8 u u u u u x $.",
-"W.W.W.W.W.W.W.W.W.W.W.R.( d u u u u t o   X .   9 u u u u i / P.",
-"W.W.W.W.W.W.W.W.W.W.W.$.@ z L L L L L P P P P P L L L L L v @ E ",
-"W.W.W.W.W.W.W.W.W.W.W.( 7 O.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#. at .q x ",
-"W.W.W.W.W.W.W.W.W.W.W.V.y @ 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 ; e s.",
-"W.W.W.W.W.W.W.W.W.W.W.W.P.h.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.P.W.",
-"W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W."
-};
diff --git a/src/StdAppManager/NetcdfPlusDef b/src/StdAppManager/NetcdfPlusDef
index 89d8cf8..03f77a5 100644
--- a/src/StdAppManager/NetcdfPlusDef
+++ b/src/StdAppManager/NetcdfPlusDef
@@ -16,7 +16,7 @@ NETCDF_VISUALISER; Netcdf Visualiser Application
      } = OFF
 
      NETCDF_DATA
-     [ interface = icon, class = NETCDF/SCM_INPUT_DATA/SCM_OUTPUT_DATA, exclusive = false,
+     [ interface = icon, class = NETCDF/SCM_INPUT_DATA/SCM_OUTPUT_DATA/NETCDF_RTTOV_INPUT, exclusive = false,
        help = help_data,
        help_directory  = '/System/Defaults',
        help_name       = Data
@@ -35,6 +35,12 @@ NETCDF_VISUALISER; Netcdf Visualiser Application
      NETCDF_Y_VARIABLE
      { @ } = ''
 
+     NETCDF_X2_VARIABLE
+     { @ } = ''
+
+     NETCDF_Y2_VARIABLE
+     { @ } = ''
+
      NETCDF_VALUE_VARIABLE
      { @ } = ''
 
diff --git a/src/StdAppManager/NetcdfPlusRules b/src/StdAppManager/NetcdfPlusRules
index bb9c316..caa1b5d 100644
--- a/src/StdAppManager/NetcdfPlusRules
+++ b/src/StdAppManager/NetcdfPlusRules
@@ -1,6 +1,8 @@
 %if NETCDF_PLOT_TYPE = GEO_POINTS %then
      %unset NETCDF_X_VARIABLE
      %unset NETCDF_Y_VARIABLE
+     %unset NETCDF_X2_VARIABLE
+     %unset NETCDF_Y2_VARIABLE
      %unset NETCDF_X_COMPONENT_VARIABLE
      %unset NETCDF_Y_COMPONENT_VARIABLE
      %unset NETCDF_POSITION_TYPE
@@ -8,6 +10,8 @@
 %if NETCDF_PLOT_TYPE = GEO_VECTORS %then
      %unset NETCDF_X_VARIABLE
      %unset NETCDF_Y_VARIABLE
+     %unset NETCDF_X2_VARIABLE
+     %unset NETCDF_Y2_VARIABLE
      %unset NETCDF_VALUE_VARIABLE
      %unset NETCDF_POSITION_TYPE
 
diff --git a/src/StdAppManager/ObjectSpec.StdAppManager b/src/StdAppManager/ObjectSpec.StdAppManager
index 747f937..4102a09 100644
--- a/src/StdAppManager/ObjectSpec.StdAppManager
+++ b/src/StdAppManager/ObjectSpec.StdAppManager
@@ -10,6 +10,7 @@ object,
      default_name    = 'NetCDF Visualiser',
 #    help_page       = to_be_added_once_written,
      type            = Data,
+     icon_box        = Visualisers,
      macro           = netcdf_visualiser,
      expand          = 512, # EXPAND_DEFAULTS
      editor_type     = SimpleEditor,
@@ -42,6 +43,7 @@ object,
      rules_file          = '$METVIEW_DIR_SHARE/etc/InputVisualiserRules',
      default_name        = 'Input Visualiser',
      type                = Data,
+     icon_box            = Visualisers,
      expand              = 512, # EXPAND_DEFAULTS
      macro               = input_visualiser,
      editor_type         = SimpleEditor,
@@ -68,6 +70,7 @@ object,
      rules_file          = '$METVIEW_DIR_SHARE/etc/TableVisualiserRules',
      default_name        = 'Table Visualiser',
      type                = Data,
+     icon_box		 = Visualisers,
      expand              = 512, # EXPAND_DEFAULTS
      macro               = table_visualiser,
      editor_type         = SimpleEditor,
diff --git a/src/StdAppManager/TABLEVISUALISER.svg b/src/StdAppManager/TABLEVISUALISER.svg
deleted file mode 100644
index 9139cce..0000000
--- a/src/StdAppManager/TABLEVISUALISER.svg
+++ /dev/null
@@ -1,264 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64"
-   height="64"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.47 r22583"
-   version="1.0"
-   sodipodi:docname="TABLEVISUALISER.svg"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     gridtolerance="10000"
-     guidetolerance="10"
-     objecttolerance="10"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="6.796875"
-     inkscape:cx="32"
-     inkscape:cy="31.565804"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer2"
-     width="64px"
-     height="64px"
-     inkscape:window-width="772"
-     inkscape:window-height="646"
-     inkscape:window-x="567"
-     inkscape:window-y="193"
-     showgrid="false" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-        <cc: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:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1" />
-  <g
-     inkscape:groupmode="layer"
-     id="layer2"
-     inkscape:label="circle">
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 14.5,4.5 C 14.5,59.5 14.5,59.5 14.5,59.5 L 14.5,59.5"
-       id="path2173" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 29.5,4.5 C 29.5,59.5 29.5,59.5 29.5,59.5 L 29.5,59.5"
-       id="path2175" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 44.5,4.5 C 44.5,59.5 44.5,59.5 44.5,59.5"
-       id="path2177" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 59.5,4.5 C 59.5,59.5 59.5,59.5 59.5,59.5"
-       id="path2179" />
-    <text
-       xml:space="preserve"
-       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-       x="18.140732"
-       y="11.057471"
-       id="text2183"><tspan
-         sodipodi:role="line"
-         id="tspan2185"
-         x="18.140732"
-         y="11.057471">A</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-       x="32.411995"
-       y="11.057471"
-       id="text2187"><tspan
-         sodipodi:role="line"
-         id="tspan2189"
-         x="32.411995"
-         y="11.057471">B</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-       x="47.418892"
-       y="10.887549"
-       id="text2191"><tspan
-         sodipodi:role="line"
-         id="tspan2193"
-         x="47.418892"
-         y="10.887549">C</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-       x="3.7669091"
-       y="27.748047"
-       id="text2195"><tspan
-         sodipodi:role="line"
-         id="tspan2197"
-         x="3.7669091"
-         y="27.748047">1</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-       x="3.6516747"
-       y="41.650116"
-       id="text2199"><tspan
-         sodipodi:role="line"
-         id="tspan2201"
-         x="3.6516747"
-         y="41.650116">2</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-       x="3.4114404"
-       y="55.627129"
-       id="text2203"><tspan
-         sodipodi:role="line"
-         id="tspan2205"
-         x="3.4114404"
-         y="55.627129">3</tspan></text>
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 5,14 C 65,14 65,14 65,14"
-       id="path2207" />
-    <rect
-       style="opacity:0.38172043;fill:#c4d1e6;fill-opacity:1;stroke:#6391d7;stroke-width:1.74761665;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2188"
-       width="62.58112"
-       height="10.792613"
-       x="1.0036925"
-       y="1.8864518"
-       ry="5.3963065"
-       rx="0" />
-    <rect
-       style="opacity:0.38172043;fill:#c4d1e6;fill-opacity:1;stroke:#6391d7;stroke-width:1.707569;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect5217"
-       width="12.156798"
-       height="46.143005"
-       x="0.98366958"
-       y="14.372176"
-       ry="0" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 3.1632183,30.455172 C 61.866667,30.455172 61.866667,30.455172 61.866667,30.455172"
-       id="path5221" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 3.1632182,45.756322 C 61.866667,45.756322 61.866667,45.756322 61.866667,45.756322"
-       id="path5223"
-       inkscape:transform-center-x="19.714943"
-       inkscape:transform-center-y="-7.6505747" />
-    <g
-       style="display:inline"
-       id="g6326"
-       transform="matrix(2.1061635,0,0,2.1061635,-2.6698689,-2.7501989)">
-      <rect
-         rx="0"
-         ry="0.76569498"
-         y="25.690905"
-         x="20.200878"
-         height="1.53139"
-         width="3.6325176"
-         id="rect4235"
-         style="opacity:1;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.85816514;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <rect
-         ry="1.2517357"
-         y="27.350697"
-         x="13.411453"
-         height="2.7717004"
-         width="17.032545"
-         id="rect4233"
-         style="fill:#b6c6cc;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:0.95899999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <g
-         id="g6294">
-        <rect
-           style="fill:#e7e4e0;fill-opacity:1;fill-rule:evenodd;stroke:#10140d;stroke-width:1.00858581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="rect4231"
-           width="18.368809"
-           height="12.378362"
-           x="12.631559"
-           y="13.338168"
-           ry="1.2467414" />
-        <path
-           style="fill:none;fill-rule:evenodd;stroke:#e52626;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-           d="M 17.43489,21.539066 L 20.832458,15.548617 L 21.994785,20.108511 L 24.542961,17.962678 C 25.541369,18.812071 26.251737,19.373422 27.538186,20.510855"
-           id="path5224"
-           sodipodi:nodetypes="ccccc" />
-        <path
-           style="fill:none;fill-rule:evenodd;stroke:#1f283c;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="M 14.752598,15.056863 C 14.797303,23.506079 14.797303,23.595489 14.797303,23.595489"
-           id="path5226" />
-        <path
-           style="fill:none;fill-rule:evenodd;stroke:#1f283c;stroke-width:1.00666595px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="M 14.308883,23.726271 L 29.323046,23.688232"
-           id="path5228" />
-      </g>
-    </g>
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer3"
-     inkscape:label="text">
-    <flowRoot
-       xml:space="preserve"
-       id="flowRoot3142"
-       style="font-family:Bitstream Vera Sans"><flowRegion
-         id="flowRegion3144"><rect
-           id="rect3146"
-           width="24.422989"
-           height="14.565517"
-           x="21.333334"
-           y="26.188505"
-           style="font-family:Bitstream Vera Sans" /></flowRegion><flowPara
-         id="flowPara3148">SassdfsfdffsSQ</flowPara></flowRoot>    <flowRoot
-       xml:space="preserve"
-       id="flowRoot3150"
-       style="font-family:Bitstream Vera Sans Mono"><flowRegion
-         id="flowRegion3152"><rect
-           id="rect3154"
-           width="18.096552"
-           height="12.8"
-           x="23.834482"
-           y="27.954023"
-           style="font-family:Bitstream Vera Sans Mono" /></flowRegion><flowPara
-         id="flowPara3156">SQ</flowPara></flowRoot>  </g>
-</svg>
diff --git a/src/StdAppManager/TABLEVISUALISER.xpm b/src/StdAppManager/TABLEVISUALISER.xpm
deleted file mode 100644
index f16a0ed..0000000
--- a/src/StdAppManager/TABLEVISUALISER.xpm
+++ /dev/null
@@ -1,210 +0,0 @@
-/* XPM */
-static char *TABLEVISUALISER[] = {
-/* columns rows colors chars-per-pixel */
-"32 32 172 2",
-"   c #1DE520DE1B00",
-".  c #2BB72DC02937",
-"X  c #2D7932112D50",
-"o  c #30E936543193",
-"O  c #362E3BE33723",
-"+  c #3A553CD73790",
-"@  c #3B683DEC387B",
-"#  c #3D2D40D73B1C",
-"$  c #3F4044E54069",
-"%  c #3E46455D5610",
-"&  c #455D47724174",
-"*  c #42F9484543A6",
-"=  c #497F4BCC45DF",
-"-  c #4C154E96494B",
-";  c #4BA450E34C9A",
-":  c #510D536D4E06",
-">  c #53CA565650CF",
-",  c #5441581E538D",
-"<  c #588659C2567F",
-"1  c #5B475D3E5B4D",
-"2  c #5E6B5FF459E5",
-"3  c #607C62575D5B",
-"4  c #4EBE54F5636B",
-"5  c #5065567064EF",
-"6  c #589C5E506B76",
-"7  c #591162EC61B6",
-"8  c #637C65746441",
-"9  c #68756ACD66B1",
-"0  c #612A6638726F",
-"q  c #73427512752B",
-"w  c #7A017B3475FC",
-"e  c #7ADF7C857AFD",
-"r  c #E60935B0354F",
-"t  c #E6253CB83C47",
-"y  c #E63D4D354C62",
-"u  c #E65650554F8C",
-"i  c #E6635351526D",
-"p  c #E66A5C435B0E",
-"a  c #E6C060925F96",
-"s  c #E68B62C3613F",
-"d  c #E67F6DEA6C84",
-"f  c #E6AE70746EBE",
-"g  c #E6BB78477675",
-"h  c #E6AD7ABD790A",
-"j  c #7ED780F97D27",
-"k  c #E6EE81197F03",
-"l  c #6DD675AD81D0",
-"z  c #6D98791D8B11",
-"x  c #76D682BB83F2",
-"c  c #7B8981E48BC0",
-"v  c #80A7825A8517",
-"b  c #85FC881584A0",
-"n  c #8923891D83AF",
-"m  c #8DC78F038BC3",
-"M  c #8F1390498D0D",
-"N  c #8F7C94019A90",
-"B  c #8E849BD09EDB",
-"V  c #90CE91069082",
-"C  c #97FA99CF96BA",
-"Z  c #949896CB9A1C",
-"A  c #95C2997C9FBA",
-"S  c #9C639C849C4B",
-"D  c #A319A2289D2A",
-"F  c #8EE09A78AC58",
-"G  c #96BC9BA2A378",
-"H  c #993A9D42A45B",
-"J  c #9596A000AFF8",
-"K  c #8E0A9D5BB536",
-"L  c #9272A02CA36D",
-"P  c #9F0EA20DA73A",
-"I  c #9D77A265AA25",
-"U  c #9C0FA5DFB52C",
-"Y  c #9F1AAAA0BCA5",
-"T  c #A459A58BA6EA",
-"R  c #A858A765A25B",
-"E  c #AABAA9F3A517",
-"W  c #A37CA657AC53",
-"Q  c #AD50AD5FADD3",
-"!  c #A544AA3AB1E4",
-"~  c #AB9FAF0AB476",
-"^  c #A309AD25BCE3",
-"/  c #AC2BB117B817",
-"(  c #A79CB6C8BB9D",
-")  c #AA97B555BBB2",
-"_  c #B102B0F7B177",
-"`  c #B2CCB6BDBCE1",
-"'  c #BD38BE3DBF7C",
-"]  c #E6C385D883BA",
-"[  c #E6E1899D87A4",
-"{  c #E7168E0F8C0B",
-"}  c #E72391FE8FD3",
-"|  c #E8879602938A",
-" . c #E7159EE49C44",
-".. c #E6F3A2B89FF1",
-"X. c #E74AA7FEA55C",
-"o. c #E9E0A847A57D",
-"O. c #E74DABE5A929",
-"+. c #E956ADA7AA99",
-"@. c #E837B7FDB4DF",
-"#. c #E77BB8F9B603",
-"$. c #E77ABC22B8FF",
-"%. c #9E0EAE04C6DF",
-"&. c #AB2AB642C768",
-"*. c #AA73B6DAC9B8",
-"=. c #B4EFB9F0C17B",
-"-. c #BCB1BF4FC359",
-";. c #B4BFBE3ACD1A",
-":. c #B8D1C025CBDF",
-">. c #B2C0BF77D310",
-",. c #BEAEC0D8C3C3",
-"<. c #BF5BC44FCB56",
-"1. c #B467C136D4FC",
-"2. c #BD1FC76FD731",
-"3. c #B373C355DC09",
-"4. c #B9B4C73FDC5B",
-"5. c #BF8CCB7BDE10",
-"6. c #C6B9C64DC4D4",
-"7. c #C87EC94DC7BF",
-"8. c #C165C632CD99",
-"9. c #C417C88DCF21",
-"0. c #CDDBCDFECD50",
-"q. c #D507D00BCE84",
-"w. c #D376D1AED022",
-"e. c #C082C7D6D375",
-"r. c #C64DCB8ED31C",
-"t. c #C8C3CDC3D545",
-"y. c #C85CCFAFDB45",
-"u. c #CB70D075D7F3",
-"i. c #CE26D3B7DC23",
-"p. c #D3A4D220D0A7",
-"a. c #D158D676DE00",
-"s. c #D3BCD8A4DFF1",
-"d. c #DE5ADDB4DC9D",
-"f. c #E783C652C2F1",
-"g. c #E78DCB61C7E9",
-"h. c #E79ACEF7CB7A",
-"j. c #E7B5D2B5CF0A",
-"k. c #E7B5D6E4D313",
-"l. c #EA5FD7BBD42D",
-"z. c #E7C1DA6FD6AB",
-"x. c #E7C8DE04DA2A",
-"c. c #EA70DE39DA66",
-"v. c #E73FE300DF37",
-"b. c #E8FFE3AFDF97",
-"n. c #CF88D76CE389",
-"m. c #D598DAE4E292",
-"M. c #D97EDEB8E642",
-"N. c #D477DE00ECE6",
-"B. c #CDF2DC6AF2E0",
-"V. c #D205DF57F428",
-"C. c #DC10E103E810",
-"Z. c #DD4FE312EB84",
-"A. c #D6C0E1D4F2D8",
-"S. c #DB55E52BF488",
-"D. c #DF62E8CAF7B7",
-"F. c #E7A8E590E1C3",
-"G. c #E9EBE719E308",
-"H. c #EC0AE972E57B",
-"J. c #E199E6F6EEBF",
-"K. c #E3D8E8CBEFCD",
-"L. c #ECFAED3AECA1",
-"P. c #F04AF080EFFB",
-"I. c #E15EE7ACF0C1",
-"U. c #E526EB9BF516",
-"Y. c #EA4FEF7AF6BC",
-"T. c #E6ECEE40F967",
-"R. c #EA09F022F8E0",
-"E. c #EC2DF11BF803",
-"W. c #ED43F245F951",
-"Q. c #F2A4F2DBF265",
-"!. c #F758F888FA6F",
-"~. c #FFA8FFB0FFBB",
-/* pixels */
-"U.D.D.D.D.D.D.D.D.D.S.S.D.D.D.D.S.N.A.D.D.D.D.D.D.N.n.S.D.D.D.D.",
-"B.A.S.S.S.S.A.A.S.S.&.U A.S.A.S.2.F U ;.S.A.A.S.;.J U ;.S.A.A.B.",
-"B.U.Y.Y.Y.Y.C.<.E.K.W G m.E.<.Z.8.W -.W Y.C.<.J.I m.U.J.Y.<.C.A.",
-"B.U.Y.Y.Y.Y.m.~ W.u.I ~ =.W.~ m.8.N I ~ U.m./ C.I K.E.Y.E.~ m.A.",
-"B.U.Y.Y.Y.Y.m./ E.~ I ! H I./ m.8.~ i.H J.m./ U.W 8.m.s.E./ m.A.",
-"B.D.U.U.U.T.n.^ I.:.Z.U.:.Z.^ m.i.U ^ e.U.n.^ T.m.) ^ y.T.^ n.A.",
-"B.B.3.%.%.%.K z ^ Y ^ ^ Y ^ z F ^ Y Y ^ ^ F z ^ ^ ^ ^ ^ ^ z F Y ",
-"B.V.5.&.*.*.F q ,.' ' ' ' ,.q T -.-.' ' -.T q ,.' ' ' ' ,.q T -.",
-"B.U.Y.W.E.R.1.Z ~.~.~.~.~.~.S d.~.~.~.~.~.d.S ~.~.~.~.~.~.S d.~.",
-"B.T.a./ m.R.>.Z ~.~.~.~.~.~.S d.~.~.~.~.~.d.S ~.~.~.~.~.~.S d.~.",
-"B.U.M.I 9.R.>.Z ~.~.~.~.~.~.S d.~.~.~.~.~.d.S ~.~.~.~.~.~.S d.~.",
-"B.U.W.` 9.R.>.Z ~.~.~.~.!.Q.V 0.L.L.L.L.L.0.V P.L.L.L.L.P.V d.~.",
-"B.U.Y./ 8.R.>.Z ~.~.~.H.j : + = : : : : : = + : : : : : : + 8 7.",
-"B.T.m.G W Z.1.Z ~.~.~.S & D Q E E E E E E E E E E E E E E E 2 < ",
-"B.M.9.,.,.r.U v d.d.d.9 w 6.W v.G.G.G.c.o.l.G.G.G.G.G.G.G.H.R # ",
-"V.<.Z Z Z N l 1 S S S - w P 0 d.F.F.F...r X.G.F.F.F.F.F.F.G.R # ",
-"B.U.r./ t.R.1.Z ~.~.~.w w T 0 d.F.F.j.p t k F.F.z.b.F.F.F.G.R # ",
-"B.U.m.i.I C.>.Z ~.~.~.w w T 0 d.F.F.{ a } s k. .p  .v.F.F.G.R # ",
-"B.U.E.i.W J.>.Z ~.~.~.w w T 0 d.G.f.u O.f.y f i k i [ x.F.G.R # ",
-"B.U.a.I a.Y.>.Z ~.~.~.w w W 0 d.b.h d x.z.p i #.F.#.p g z.G.R # ",
-"B.U.! G ` Z.>.Z ~.~.~.w w W 0 d. at .y $.F.F.f.g.F.F.F.f.] h.H.R # ",
-"B.U.K.Z.Z.Y.1.Z ~.~.~.w w W 0 d.+.| b.G.G.G.G.G.G.G.G.b.F.H.R # ",
-"B.r.P P P P c 8 Q Q Q > w W 6 7.q.q.p.p.p.p.p.p.w.w.w.p.w.d.R # ",
-"B.a.A c H -.F e p.0.0.3 w Q % 4 5 5 5 5 4 4 4 4 4 4 4 4 4 G E # ",
-"B.U.C.r.I J.1.Z ~.~.~.b 3 6.~ Q Q Q Q Q Q ~ ~ _ _ _ _ _ _ 6.n & ",
-"B.U.J.! I I.>.Z ~.~.~.0.= = ; : > > > - = = = = : > > > > = @ C ",
-"B.U.I.m.H M.>.Z ~.~.~.~.F.E < e m m M -   X .   9 M m m m 1 ' !.",
-"B.I.-.! ! J.>.Z ~.~.~.~.6.> O $ * * * O X o o X # * * * * o e Q.",
-"B.U.Z.M.U.Y.>.Z ~.~.~.~.q 7 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( L # 6.",
-"B.S.I.U.I.D.4.` ~.~.~.~.j ; B B B B B B B B B B B B B B B x # 0.",
-"S.S.S.S.S.S.S.!.~.~.~.~.d.q , , , , , , , , , , , , , , , 1 T !.",
-"~.~.~.~.~.~.~.~.~.~.~.~.~.!.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.Q.~.~."
-};
diff --git a/src/Velstr/Makefile.in b/src/Velstr/Makefile.in
index e50dadb..d08f99c 100644
--- a/src/Velstr/Makefile.in
+++ b/src/Velstr/Makefile.in
@@ -134,6 +134,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -149,6 +150,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -175,11 +178,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/VisTools/Makefile.in b/src/VisTools/Makefile.in
index 23e36b5..328af4f 100644
--- a/src/VisTools/Makefile.in
+++ b/src/VisTools/Makefile.in
@@ -135,6 +135,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -150,6 +151,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -176,11 +179,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/WebAccess/Makefile.in b/src/WebAccess/Makefile.in
index 7acdc1b..d46cf7c 100644
--- a/src/WebAccess/Makefile.in
+++ b/src/WebAccess/Makefile.in
@@ -157,6 +157,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -172,6 +173,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -198,11 +201,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/XSection/AVERAGE.xpm b/src/XSection/AVERAGE.xpm
new file mode 100644
index 0000000..008efd3
--- /dev/null
+++ b/src/XSection/AVERAGE.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static char * AVERAGE_xpm[] = {
+"32 32 8 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #BABABA",
+"@	c #E9E9FB",
+"#	c #EC92EB",
+"$	c #7F7F7F",
+"%	c #92BEEC",
+"&	c #E4D8C2",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+".........++++++++++++++.........",
+".....++++@@@@@@@@@@@@@@++++.....",
+"..+++@@@@@@@@@@@@@@@@@@@@@@+++..",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+"+@@@@@@@@@@#@@@@@@@@#@@@@@@@@@@+",
+"@@@@@@@@@++##++++++##++@@@@@@@@@",
+"@@@@@++++@@###@@@@###@@++++@@@@@",
+"@@#############@@#############+@",
+"@+@@@@@@@@@###@@@@###@@@@@@@@@+@",
+"+@@@@@@@@@@##@@@@@@##@@@@@@@@@@+",
+"@@@@@@@@@++#++++++++#++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@++++++++++++++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@$$$$$$$$$$$$$$@@@@@@@@@",
+"@@@@@$$$$%%%%%%&&&&&&&&$$$$$@@@@",
+"@@$$$%%%%%%%%%&&&&&&&&&&&&&$$$@@",
+"@$%%%%%%%%%%&&&&&&&&&&&&&&&&&&$@",
+"$%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&$"};
diff --git a/src/XSection/AVERAGEVIEW.xpm b/src/XSection/AVERAGEVIEW.xpm
new file mode 100644
index 0000000..a533ddc
--- /dev/null
+++ b/src/XSection/AVERAGEVIEW.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char * AVERAGEVIEW_xpm[] = {
+"32 32 10 1",
+" 	c None",
+".	c #989898",
+"+	c #FFFFFF",
+"@	c #BCBCBC",
+"#	c #BABABA",
+"$	c #E9E9FB",
+"%	c #EC92EB",
+"&	c #7F7F7F",
+"*	c #92BEEC",
+"=	c #E4D8C2",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++##############++++++ at +.",
+".+ at ++####$$$$$$$$$$$$$$####++ at +.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$%$$$$$$$$%$$$$$$$$@+.",
+".+@$$$$$$##%%######%%##$$$$$$@+.",
+".+@$$####$$%%%$$$$%%%$$####$$@+.",
+".+@%%%%%%%%%%%%$$%%%%%%%%%%%%@+.",
+".+@$$$$$$$$%%%$$$$%%%$$$$$$$$@+.",
+".+@$$$$$$$$%%$$$$$$%%$$$$$$$$@+.",
+".+@$$$$$$##%########%##$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$##############$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$&&&&&&&&&&&&&&$$$$$$@+.",
+".+@$$&&&&******========&&&&&$@+.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".++++++++++++++++++++++++++++++.",
+"................................"};
diff --git a/src/XSection/Average.cc b/src/XSection/Average.cc
new file mode 100644
index 0000000..3569705
--- /dev/null
+++ b/src/XSection/Average.cc
@@ -0,0 +1,231 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+/********************************************************************************
+ Important information:
+
+ 1. The Bottom/Top Levels will be computed automatically from the data, if
+    they are not given as a input parameters.
+
+ 2. Relationship among fields and interpolation:
+
+                  ML    ML&LNSP   PL    PL&LNSP
+         INTY    ok      ok       ok     ok1
+         INTN    ok     error     ok     ok1
+
+   INTY/N = interpolation yes/no
+   ok1    = LNSP is ignored
+
+ 3. If fieldset contains ML&LNSP, a conversion to PL will be computed automatically
+ ********************************************************************************/
+
+#include "Average.h"
+
+// Application mode
+enum { AVERAGE_NS,AVERAGE_EW };
+
+// Function different: returns true if d1 and d2 are larger than e apart
+inline static bool different (double d1, double d2, double e)
+{
+   return (fabs(d1 - d2) > e);
+}
+
+bool Average::getAreaLineParameter( MvRequest& in, double& X1, double& Y1, double& X2, double& Y2)
+{
+   // Get input values
+   Y1 = in("AREA",0);
+   X1 = in("AREA",1);
+   Y2 = in("AREA",2);
+   X2 = in("AREA",3);
+
+   // Check coordinates
+   return checkCoordinates(X1,Y1,X2,Y2);
+}
+
+void Average::getAppParameters( MvRequest& in, ApplicationInfo& appInfo )
+{
+   // Retrieve interpolation flag
+   // Normal interpolation of levels unless INTERPOLATE_VALUES = NO
+   bool interpolate = true;
+   if ( (const char*)in("INTERPOLATE_VALUES") &&
+        strcmp(in("INTERPOLATE_VALUES"),"NO") == 0 )
+           interpolate = false;
+
+   appInfo.Interpolate(interpolate);
+
+   inputMode_ = (strcmp(in("DIRECTION"),"NS") == 0 || strcmp(in("DIRECTION"),"NORTH SOUTH") == 0) ? AVERAGE_NS : AVERAGE_EW;
+}
+
+// Generate data for average aplication.
+bool Average::generateData( ApplicationInfo& appInfo, ParamMap &params,
+                            MvNetCDF &cdf, MvField& field, const string& key )
+{
+   // Get parameter info
+   ParamInfo *par = this->getParamInfo(params,key);
+   if ( !par )
+      return false;
+
+   // SHOULD GENERATE DATA FOR LNSP????
+   if ( par->Parameter() == LnPress)
+      return true;
+
+   // Generate the netCDF parameter variable
+   return contourValues(appInfo,params,cdf,field,key);
+}
+
+// Compute number of points
+int Average::computeNumberPoints( ApplicationInfo& appInfo )
+{
+   double x1,x2,y1,y2;
+   appInfo.getAreaLine(x1,x2,y1,y2);
+   int numberNS = (int)( fabs( (appInfo.Y1()-appInfo.Y2()) / appInfo.GridNS() ) + 0.0000001 ) + 1;  // avoid precision errors
+
+   int numberEW = (int)( fabs( (appInfo.X2()-appInfo.X1()) / appInfo.GridEW() ) + 0.0000001 ) + 1;  // avoid precision errors
+
+   int np = ( inputMode_ == AVERAGE_NS ) ? numberEW : numberNS;
+   appInfo.NrPoints(np);
+
+   return np;
+}
+
+bool Average::fillValues( ApplicationInfo& appInfo, MvField &field, double *vals )
+{
+   // Get initial info
+   MvFieldExpander x(field);
+   int i;
+   int npoint = appInfo.NrPoints();
+   double X1,X2,Y1,Y2;
+   appInfo.getAreaLine( X1,X2,Y1,Y2 );
+
+   // Average over area
+   bool ok = field.averageAlong(vals,X1,Y1,X2,Y2,inputMode_,npoint);
+
+   // AverageAlong() does not know array size. If it fails then
+   // return array remains empty. Thus fill with missing values here!
+   if( ! ok )
+   {
+      for (i = 0; i < npoint; i++ )
+         vals[i] = XMISSING_VALUE;
+
+      return false;
+   }
+
+   // Check missing values
+   for ( i = 0;  i < npoint; i++ )
+   {
+      if ( vals[i] > XMISSING_VALUE )
+         vals[i] = XMISSING_VALUE;
+   }
+
+   return true;
+}
+
+MvRequest Average::createOutputRequest( ApplicationInfo& appInfo, string netcdfName, ParamInfo* parInfo )
+{
+   // Create netCDF data request
+   MvRequest xs("NETCDF");
+   xs("PATH") = netcdfName.c_str();
+   xs("TEMPORARY") = 1;
+
+   // If action is not visualisation related then return the netcdf data
+   if ( !isVisualise( appInfo ) )
+      return xs;
+
+   // Create NetCDF output request
+   MvRequest out1("NETCDF_XY_MATRIX");
+   out1("NETCDF_MISSING_ATTRIBUTE") = "_FillValue";
+   out1("NETCDF_DATA") = xs;
+   out1("NETCDF_VALUE_VARIABLE") = getNetcdfVarname(parInfo->ParamName()).c_str();
+   out1("NETCDF_Y_VARIABLE") = XS_VARLEVEL.c_str();;
+   out1("NETCDF_X_VARIABLE") = (inputMode_ == AVERAGE_NS ) ? "lon" : "lat";
+
+   // Create customised Cartesian View request.
+   // If an icon was dropped into a view, uPlot will ignore it.
+   // Mode-specific options
+   MvRequest axis("HORIZONTAL_AXIS");
+   axis("AXIS_TICK_LABEL_TYPE") = (inputMode_ == AVERAGE_NS ) ? "longitude" : "latitude";
+   MvRequest viewReq("CARTESIANVIEW");
+   viewReq("X_AUTOMATIC") = "on";
+   viewReq("HORIZONTAL_AXIS") = axis;
+   viewReq("Y_AUTOMATIC") = "on";
+   if ( appInfo.levelType() != cML_UKMO_ND )  // UK MetOffice model levels are 'upside-down'
+      viewReq("Y_AUTOMATIC_REVERSE") = "on";
+
+   // Final output request
+   MvRequest out = viewReq + out1;
+   return out;
+}
+
+bool Average::fieldConsistencyCheck( MvField& field, double north, double south, double east, double west )
+{
+   const double epsilon = 0.0015;  // difference allowed in field coordinates
+   if ( different (field.north(), north, epsilon)   ||
+        different (field.south(), south, epsilon)   ||
+        different (field.east(),  east,  epsilon)   ||
+        different (field.west(),  west,  epsilon) )
+   {
+      setError(1, "Fields must all have the same dimensions.");
+      return false;
+   }
+
+   return true;
+}
+
+string Average::titleVariable( ApplicationInfo& appInfo, ParamInfo* par )
+{
+   char titlestr[150];
+
+   // Generate title
+   if ( inputMode_ == AVERAGE_EW )
+   {
+      double x1 = appInfo.X1();
+      double x2 = appInfo.X2();
+      sprintf(titlestr,"Average of %s %d %02d step %d %s (%.1f%s-%.1f%s)",
+              par->ParamLongName().c_str(), par->Date(),par->Time(),par->Step(),
+              par->ExpVerTitle().c_str(),
+              (x1 < 0) ? -x1 : x1, (x1 < 0) ? "W" : "E",
+              (x2 < 0) ? -x2 : x2, (x2 < 0) ? "W" : "E" );
+   }
+   else //AVERAGE_NS
+   {
+      double y1 = appInfo.Y1();
+      double y2 = appInfo.Y2();
+      sprintf(titlestr,"Average of %s %d %02d step %d %s (%.1f%s-%.1f%s)",
+              par->ParamLongName().c_str(), par->Date(),par->Time(),par->Step(),
+              par->ExpVerTitle().c_str(),
+              (y1 < 0) ? -y1 : y1, (y1 < 0) ? "S" : "N",
+              (y2 < 0) ? -y2 : y2, (y2 < 0) ? "S" : "N" );
+   }
+
+   return string(titlestr);
+}
+
+//-------------------------------------------------------------------------
+
+// Translate Metview 3 Average Data to Metview 4 definition. Call Metview 4
+// server to process the job.
+void AverageM3::serve(MvRequest& in,MvRequest& out)
+{
+   // Send a general warning message
+   setError(0, "The Metview 3 AVERAGE DATA icon is deprecated. An automatic translation to the Metview 4 AVERAGE DATA icon will be performed internally, but may not work for all cases. It is recommended to manually replace the old icons with their new equivalents.");
+
+   // There are input parameters that are no longer available in Metview 4.
+   // Remove them and send a warning message.
+   setError(0,"The Metview 3 AVERAGE DATA icon is deprecated. Parameters PRESSURE_LEVEL_AXIS, BOTTOM_PRESSURE and TOP_PRESSURE will not be translated internally.");
+   MvRequest req = in;
+   req.unsetParam("PRESSURE_LEVEL_AXIS");
+   req.unsetParam("BOTTOM_PRESSURE");
+   req.unsetParam("TOP_PRESSURE");
+
+   // Keep the remaining parameters and update the VERB
+   req.setVerb("MXAVERAGE");
+
+   // Call the Xsection server to process the job
+   Xsect::serve(req,out);
+}
diff --git a/src/XSection/Average.h b/src/XSection/Average.h
new file mode 100644
index 0000000..7f2378a
--- /dev/null
+++ b/src/XSection/Average.h
@@ -0,0 +1,70 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 AVERAGE_H
+#define AVERAGE_H
+
+/********************************************************************************
+  Application for Average.
+  It takes a GRIB file as input (in addition to the values given by the user),
+  and produces an NetCDF file as output. There is no metadata on output request,
+  only the path to NetCDF file.
+
+  First the GRIB while is read, and info about all parameters and level are stored.
+  Then several flags is set, based on the data and the input request, to determine
+  how the application should run.
+
+  The file is rewound, and sorted by param, date, time, step and expver. All fields
+  with the same values for the sorting parameters are one plot. If any of these
+  values change, all data are written out as netcdf variables with names put
+  together from the sorting values.
+********************************************************************************/
+
+#include "Xsect.h"
+
+class Average : public Xsect {
+
+public:
+
+   Average() : Xsect("MXAVERAGE")      { view_ = "MXAVERAGEVIEW"; }
+   Average(const char* kw) : Xsect(kw) { view_ = "MXAVERAGEVIEW"; }
+
+   bool getAreaLineParameter( MvRequest&, double&, double&, double&, double&);
+
+   void getAppParameters( MvRequest&, ApplicationInfo& );
+
+   bool generateData( ApplicationInfo&, ParamMap&, MvNetCDF&, MvField&, const string& );
+
+   MvRequest createOutputRequest( ApplicationInfo&, string, ParamInfo* );
+
+   int computeNumberPoints( ApplicationInfo& );
+
+   bool fillValues( ApplicationInfo&, MvField&, double* );
+
+   bool fieldConsistencyCheck( MvField&, double, double, double, double );
+
+private:
+
+   string titleVariable( ApplicationInfo&, ParamInfo*);
+
+   int inputMode_;   // AVERAGE_NS/AVERAGE_EW
+};
+
+//---------------------------------------------------------------------
+
+class AverageM3 : public Average {
+
+public:
+
+   AverageM3() : Average("PM_AVERAGE") {}
+
+   void serve( MvRequest&, MvRequest& );
+};
+
+#endif
diff --git a/src/XSection/AverageDef b/src/XSection/AverageDef
new file mode 100644
index 0000000..3ea5cbb
--- /dev/null
+++ b/src/XSection/AverageDef
@@ -0,0 +1,59 @@
+PM_AVERAGE; Metview; Specific Application
+{
+   DATA
+      [
+         interface       = icon,
+         class           = GRIB,
+         exclusive       = false,
+         help            = help_data,
+         help_directory  = '/System/Defaults',
+         help_name       = Data for Average,
+         help_class      = RETRIEVE,
+         help_definition = ( RETRIEVE, TYPE = FC, LEVTYPE = PL,
+                             PARAM = T, DATE = '-1',
+                             LEVELIST = 1000/850/700/500/400/300,
+                             STEP = 12, GRID = 1.5/1.5 ) 
+      ]
+   {
+      @
+   }
+
+   AREA
+      [
+         help        = help_input,
+         input_type  = area,
+         input_window = '/System/Defaults/Input Window'
+      ]
+   {
+      *
+      /
+   } = 90./-180./-90./180.
+
+   DIRECTION
+   {
+      NORTH SOUTH	; NS
+      EAST WEST	; EW
+   } = NS
+
+   BOTTOM_PRESSURE
+   {
+      *
+   } = 1015.0
+
+   TOP_PRESSURE
+   {
+      *
+   } = 10.0
+
+   PRESSURE_LEVEL_AXIS
+   {
+      LINEAR
+      LOG
+   } = LINEAR
+
+   INTERPOLATE_VALUES
+   {
+      YES
+      NO
+   } = YES
+}
diff --git a/src/XSection/XAverageRules b/src/XSection/AverageRules
similarity index 100%
rename from src/XSection/XAverageRules
rename to src/XSection/AverageRules
diff --git a/src/XSection/AverageViewDef b/src/XSection/AverageViewDef
new file mode 100644
index 0000000..d0c5dcb
--- /dev/null
+++ b/src/XSection/AverageViewDef
@@ -0,0 +1,61 @@
+AVERAGEVIEW; PlotMod Icon; Metview
+{
+   AREA
+      [
+         help         = help_input,
+         help_icon    = 'help_area',
+         input_type   = area,
+         input_window = '/System/Defaults/Input Window'
+      ]
+   {
+      *
+      /
+   } = 90./-180./-90./180.
+
+   DIRECTION
+   {
+      NORTH SOUTH	; NS
+      EAST WEST	; EW
+   } = NS
+
+   BOTTOM_PRESSURE
+   {
+      *
+   } = 1015.0
+
+   TOP_PRESSURE
+   {
+      *
+   } = 10.0
+
+   PRESSURE_LEVEL_AXIS
+   {
+      LINEAR
+      LOG
+   } = LINEAR
+
+%include OverlayControl
+
+   SUBPAGE_X_POSITION
+   {
+      @
+   } = 7.5
+
+   SUBPAGE_Y_POSITION
+   {
+      @
+   } = 7
+
+   SUBPAGE_X_LENGTH
+   {
+      @
+   } = 85
+
+   SUBPAGE_Y_LENGTH
+   {
+      @
+   } = 80
+
+   %include PageFrameDef
+   %include SubpageFrameDef
+}
diff --git a/src/XSection/AverageViewRules b/src/XSection/AverageViewRules
new file mode 100644
index 0000000..2de5c21
--- /dev/null
+++ b/src/XSection/AverageViewRules
@@ -0,0 +1,3 @@
+%include PageFrameRules
+%include SubpageFrameRules
+%include OverlayControlRules
diff --git a/src/XSection/CrossS.cc b/src/XSection/CrossS.cc
new file mode 100644
index 0000000..d398741
--- /dev/null
+++ b/src/XSection/CrossS.cc
@@ -0,0 +1,736 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+/********************************************************************************
+ Important information:
+
+ 1. The Bottom/Top Levels will be computed automatically from the data, if
+    they are not given as a input parameters.
+
+ 2. Relationship among fields and interpolation:
+
+                  ML    ML&LNSP   PL    PL&LNSP
+         INTY    ok      ok       ok     ok1
+         INTN    ok     error     ok     ok1
+
+   INTY/N = interpolation yes/no
+   ok1    = LNSP is ignored
+
+ 3. If fieldset contains ML&LNSP, a conversion to PL will be computed automatically
+ ********************************************************************************/
+
+#include "CrossS.h"
+
+// Application mode
+enum { XWIND,XVELOCITY,XCONTOUR};
+
+// Wind values
+enum {PERPENDICULAR, PARALLEL, INTENSITY };
+
+CrossS::CrossS() :
+                   Xsect("MXSECTION"),
+                   foundUV_(false), foundW_(false),
+                   hcNumber_(0), hcPerpendicular_(0), hcParallel_(0),
+                   hcIntensity_(0), currentHC_(0),
+                   inputMode_(XCONTOUR)
+{
+   view_ = "MXSECTIONVIEW";
+}
+
+CrossS::CrossS(const char*kw) :
+                   Xsect(kw),
+                   foundUV_(false), foundW_(false),
+                   hcNumber_(0), hcPerpendicular_(0), hcParallel_(0),
+                   hcIntensity_(0), currentHC_(0),
+                   inputMode_(XCONTOUR)
+{
+   view_ = "MXSECTIONVIEW";
+}
+
+bool CrossS::getAreaLineParameter( MvRequest& in, double& X1, double& Y1, double& X2, double& Y2)
+{
+   // Get input values
+   Y1 = in("LINE",0);
+   X1 = in("LINE",1);
+   Y2 = in("LINE",2);
+   X2 = in("LINE",3);
+
+   // Check coordinates
+   return checkCoordinates(X1,Y1,X2,Y2);
+}
+
+void CrossS::getAppParameters( MvRequest& in, ApplicationInfo& appInfo )
+{
+   // Retrieve interpolation flag
+   // Normal interpolation of levels unless INTERPOLATE_VALUES = NO
+   bool interpolate = true;
+   if ( (const char*)in("INTERPOLATE_VALUES") &&
+        strcmp(in("INTERPOLATE_VALUES"),"NO") == 0 )
+           interpolate = false;
+
+   appInfo.Interpolate(interpolate);
+
+   // Retrieve Wind input info
+   int hc_perp_ = 0, hc_parallel_ = 0, hc_intensity_ = 0;
+   int hc_number_ = 0;
+   if( (const char*)in("WIND_PERPENDICULAR") &&
+       strcmp(in("WIND_PERPENDICULAR"),"ON") == 0 )
+   {
+      hc_number_++;
+      hc_perp_ = PERPENDICULAR;
+   }
+
+   if( (const char*)in("WIND_PARALLEL") &&
+       strcmp(in("WIND_PARALLEL"),"ON") == 0 )
+          hc_parallel_ = PARALLEL;
+
+   if( (const char*)in("WIND_INTENSITY") &&
+       strcmp(in("WIND_INTENSITY"),"ON") == 0 )
+   {
+      hc_number_++;
+      hc_intensity_ = INTENSITY;
+   }
+
+   // Retrive wind & lnsp param numbers (mostly for non-ECMWF data)
+   if( (const char*)in( "U_WIND_PARAM" ) )
+      U_FIELD = (int)in( "U_WIND_PARAM" );
+
+   if( (const char*)in( "V_WIND_PARAM" ) )
+      V_FIELD = (int)in( "V_WIND_PARAM" );
+
+   if( (const char*)in( "W_WIND_PARAM" ) )
+      W_FIELD = (int)in( "W_WIND_PARAM" );
+
+   if( (const char*)in( "LNSP_PARAM" ) )
+      LnPress = (int)in( "LNSP_PARAM" );
+
+   return;
+}
+
+bool CrossS::generateData ( ApplicationInfo& appInfo, ParamMap& params,
+                            MvNetCDF &cdf, MvField& field,
+                            const string& key )
+{
+   // Get parameter info
+   ParamInfo *par = this->getParamInfo(params,key);
+   if ( !par )
+      return false;
+
+   // Generate data
+   if ( par->Parameter() != LnPress )
+      return generateXsectData(appInfo,params,cdf,field,key);
+   else
+      return generateLNSP(appInfo,cdf,par);
+}
+
+// Generate data for Xsection. If some parameters are generated together, like in some
+// cases U&V or u,v&w, just return if we have not got all the params. Otherwise,
+// generate the data according to the values set.
+bool CrossS::generateXsectData ( ApplicationInfo& appInfo, ParamMap &params,
+                                 MvNetCDF &cdf, MvField& field,
+                                 const string& key )
+{
+   // Get parameter info
+   ParamInfo *par = this->getParamInfo(params,key);
+   if ( !par )
+      return false;
+
+   // Since the data are sorted by parameter, we wait until we get the
+   // highest interesting parameter before doing the work.
+   if ( ( foundUV_ && par->Parameter() == U_FIELD) ||
+        (( foundW_ && (par->Parameter() == U_FIELD || par->Parameter() == V_FIELD) ) && !foundUV_) )
+      return true;
+
+   // Generate the netCDF parameter variable
+   if ( foundUV_ && par->Parameter() == V_FIELD )
+   {
+      inputMode_ = XWIND;
+      return windValues(appInfo,params,cdf,key,field);
+   }
+   else if ( foundW_ && par->Parameter() == W_FIELD )
+   {
+      inputMode_ = XVELOCITY;
+      return velocityValues(appInfo,params,cdf,key,field);
+   }
+   else
+   {
+      inputMode_ = XCONTOUR;
+      return contourValues(appInfo,params,cdf,field,key);
+   }
+}
+
+// Generate data for plotting lnsp curve in xsection view
+bool CrossS::generateLNSP(ApplicationInfo& appInfo, MvNetCDF &cdf, ParamInfo* par )
+{
+   // Get initial info
+   double low   = appInfo.PresTop()/100.;
+   double high  = appInfo.PresBot()/100.;
+   int nrPoints = appInfo.NrPoints();
+
+   // Add/update LNSP and auxiliary variables to the netCDF
+   // These auxiliary variables will be used to plot the orography
+   string varname = this->getNetcdfVarname(par->ParamName());
+   MvNcVar *ncx1 = cdf.getVariable("orography_x_values");
+   MvNcVar *ncy1 = cdf.getVariable("orography_y1_values");
+   MvNcVar *ncy2 = cdf.getVariable("orography_y2_values");
+   MvNcVar *ncln = cdf.getVariable(varname);
+   if ( !ncln )   // Create new variables
+   {
+      ntime_ = -1;
+
+      // Initialise dimensions
+      vector<long> values_ndim;
+      values_ndim.push_back(appInfo.NTimes());
+      values_ndim.push_back(nrPoints);
+      vector<string> values_sdim;
+      values_sdim.push_back(XS_VARTIME);
+      values_sdim.push_back("npoints");
+
+      // Create LNSP variable
+      ncln = cdf.addVariable(varname,ncFloat,values_ndim,values_sdim); //2,nrPoints);
+      ncln->addAttribute("long_name", par->ParamLongName().c_str());
+      ncln->addAttribute("units", par->Units().c_str());
+      ncln->addAttribute("_FillValue", XMISSING_VALUE);
+
+      // Create orography x values variable
+      ncx1 = cdf.addVariable("orography_x_values",ncFloat,values_ndim,values_sdim);
+      ncx1->addAttribute("long_name", "orography_x_values");
+      ncx1->addAttribute("units", " ");
+      ncx1->addAttribute("_FillValue", XMISSING_VALUE);
+
+      // Create orography y1 values variable
+      ncy1 = cdf.addVariable("orography_y1_values",ncFloat,values_ndim, values_sdim);
+      ncy1->addAttribute("long_name", "orography_y1_values");
+      ncy1->addAttribute("units", " ");
+      ncy1->addAttribute("_FillValue", XMISSING_VALUE);
+
+      // Create orography y2 values variable
+      ncy2 = cdf.addVariable("orography_y2_values",ncFloat,values_ndim, values_sdim);
+      ncy2->addAttribute("long_name", "orography_y2_values");
+      ncy2->addAttribute("units", " ");
+      ncy2->addAttribute("_FillValue", XMISSING_VALUE);
+   }
+
+   // Get LNSP values
+   double *splin = appInfo.getOneLevelValues(par,"1");
+   if ( !splin )
+   {
+      setError(1,"ERROR: Could not find LNSP Level values");
+      return false;
+   }
+
+   // Memory allocation
+   double *lon = new double [nrPoints];
+   double *lat = new double [nrPoints];
+   double *y1_values = new double[nrPoints];
+   double *y2_values = new double[nrPoints];
+
+   // Get X values
+   appInfo.computeLine(lon,lat); //compute lat/lng points
+   double *x_values = ( lon[0] == lon[1] ) ? lat : lon;
+
+   // Compute Y values
+   for ( int i = 0; i < nrPoints; i++ )
+   {
+      double w = exp(splin[i]);
+      if ( w > BIGDOUBLE )
+         y1_values[i] = high;
+      else
+      {
+         w /= 100;
+         w = MAX(low,w);
+         w = MIN(high,w);
+         y1_values[i] = w;
+      }
+      y2_values[i] = high;
+   }
+
+   // Write values to the netCDF
+   ntime_++;
+   ncln->setCurrent(ntime_);
+   ncln->put(splin,1,nrPoints);
+   ncx1->setCurrent(ntime_);
+   ncx1->put(x_values,1,nrPoints);
+   ncy1->setCurrent(ntime_);
+   ncy1->put(y1_values,1,nrPoints);
+   ncy2->setCurrent(ntime_);
+   ncy2->put(y2_values,1,nrPoints);
+
+   // Release memory
+   delete [] lat;
+   delete [] lon;
+   delete [] y1_values;
+   delete [] y2_values;
+
+   return true;
+}
+
+// Generate values for contouring u&v
+bool CrossS::windValues( ApplicationInfo& appInfo, ParamMap &params, MvNetCDF &cdf,
+                         const string& key, MvField& field )
+{
+   int i,j;
+
+   // Find the v field
+   ParamInfo* par_v = this->getParamInfo( params,key );
+   if ( !par_v )
+      return false;
+
+   // The paraminfo contains the v field, now find the u field,
+   // substitute u for v in the key and find info in list.
+   char ukey[60];
+   sprintf(ukey,"p%03d%s",U_FIELD,key.substr(4,50).c_str() );
+   ParamInfo *par_u = this->getParamInfo( params,ukey );
+   if ( !par_u )
+      return false;
+
+   // Temporary used for holding mapped u/v values.
+   ParamInfo par_uv( par_v->Parameter(), par_v->Date(), par_v->Time(), par_v->Step(), par_v->ParamName(), par_v->ParamLongName(), par_v->Units(), par_v->LevelType() );
+
+   // Allocate memory
+   int nrLevels = appInfo.NrLevels();
+   int nrPoints = appInfo.NrPoints();
+   double **cp =  new double* [ nrLevels ];
+   for (i = 0; i < nrLevels; i++)
+      cp[i] = new double [ nrPoints ];
+
+   // Main loop
+   int hc_perp = hcPerpendicular_;
+   int hc_int  = hcIntensity_;
+   double* splin;
+   for (i = 0; i < hcNumber_; i++ )
+   {
+      // Get/create the netCDF variable
+      string varname = this->getNetcdfVarname(par_v->ParamName()) + "_";
+      varname += i;
+      MvNcVar *ncv = cdf.getVariable(varname);
+      if ( !ncv )   // Create new variable
+      {
+         if ( i == 0 )   // only initialize/update once
+            ntime_ = -1;
+
+         // Initialise dimensions
+         vector<long> values_ndim;
+         values_ndim.push_back(appInfo.NTimes());
+         values_ndim.push_back(nrLevels);
+         values_ndim.push_back(nrPoints);
+         vector<string> values_sdim;
+         values_sdim.push_back(XS_VARTIME);
+         values_sdim.push_back(XS_VARLEVEL);
+         values_sdim.push_back(XS_VARLON);
+
+         // Create variable
+         ncv = cdf.addVariable(varname,ncFloat,values_ndim, values_sdim);
+         ncv->addAttribute("long_name", par_v->ParamLongName().c_str());
+         ncv->addAttribute("units", par_v->Units().c_str());
+         ncv->addAttribute("_FillValue", XMISSING_VALUE);
+         ncv->addAttribute("title",titleVariable(appInfo,par_v).c_str());
+      }
+
+      // Compute values
+      if ( hc_perp )
+      {
+         currentHC_ = hc_perp; hc_perp = 0;
+      }
+      else if ( hc_int )
+      {
+         currentHC_ = hc_int; hc_int = 0;
+      }
+
+      this->mapValues(appInfo,par_uv,par_u,par_v);
+
+      if( appInfo.levelType() != XS_ML_LNSP )
+         appInfo.InterpolateVerticala(cp,&par_uv);
+      else
+      {
+         // Get LNSP only once
+         if ( i == 0 )
+         {
+            char keyLnsp[60];
+            sprintf(keyLnsp,"p%03d%s",LnPress,key.substr(4,50).c_str() );
+            ParamInfo* parLnsp = this->getParamInfo( params, keyLnsp );
+            if ( ! parLnsp )  //LNSP not found
+            {
+               setError(1,"ERROR: Could not find parameter LNSP");
+               for (j = 0; j < nrLevels; j++)
+                  delete [] cp[j];
+               delete [] cp;
+               return false;
+            }
+
+            splin = appInfo.getOneLevelValues(parLnsp,"1");
+            if ( !splin )  //LNSP not found
+            {
+               setError(1,"ERROR: Could not find LNSP Level values");
+               for (j = 0; j < nrLevels; j++)
+                  delete [] cp[j];
+               delete [] cp;
+               return false;
+            }
+         }
+
+         appInfo.InterpolateVerticalb(field,cp,&par_uv,splin);
+      }
+
+      // Add values to the netCDF
+      if ( i == 0 )  // it should update only once
+         ntime_++;
+
+      for ( j = 0; j < nrLevels; j++ )
+      {
+         ncv->setCurrent(ntime_,j);
+         ncv->put(cp[j],1,1,(long)nrPoints);
+      }
+   }
+
+   // Release memory
+   for ( i = 0; i < nrLevels; i++ )
+      delete [] cp[i];
+   delete [] cp;
+
+   return true;
+}
+
+// Generate wind data for u,v&w.
+bool CrossS::velocityValues( ApplicationInfo& appInfo, ParamMap &params,
+                             MvNetCDF &cdf, const string& key,
+                             MvField& field )
+{
+   int i,j;
+
+   // Find the w field
+   ParamInfo* par_w = this->getParamInfo( params,key );
+   if ( !par_w )
+      return false;
+
+   // The paraminfo contains the w field, now find the u and field,
+   // substitute u for v in the key and find info in list.
+   char key1[60];
+   sprintf(key1,"p%03d%s",U_FIELD,key.substr(4,50).c_str() );
+   ParamInfo* par_u = this->getParamInfo( params,key1 );
+   if ( !par_u )
+      return false;
+
+   sprintf(key1,"p%03d%s",V_FIELD,key.substr(4,50).c_str() );
+   ParamInfo* par_v = this->getParamInfo( params,key1 );
+   if ( !par_v )
+      return false;
+
+   currentHC_ = hcParallel_;
+   appInfo.scaleVelocity(par_w);
+   ParamInfo par_uv( par_v->Parameter(), par_v->Date(), par_v->Time(), par_v->Step(), par_v->ParamName(), par_v->ParamLongName(), par_v->Units(), par_v->LevelType() );
+
+   this->mapValues(appInfo,par_uv,par_u,par_v);
+
+   // Get/create the netCDF variable
+   int nrLevels = appInfo.NrLevels();
+   int nrPoints = appInfo.NrPoints();
+   string varname = this->getNetcdfVarname(par_w->ParamName());
+   MvNcVar *ncv = cdf.getVariable(varname);
+   if ( !ncv )   // Create new variable
+   {
+      ntime_ = -1;
+
+      // Initialise dimensions
+      vector<long> values_ndim;
+      values_ndim.push_back(appInfo.NTimes());
+      values_ndim.push_back(2);
+      values_ndim.push_back(nrLevels);
+      values_ndim.push_back(nrPoints);
+      vector<string> values_sdim;
+      values_sdim.push_back(XS_VARTIME);
+      values_sdim.push_back("uvw");
+      values_sdim.push_back(XS_VARLEVEL);
+      values_sdim.push_back(XS_VARLON);
+
+      // Create variable
+      ncv = cdf.addVariable(varname,ncFloat,values_ndim, values_sdim);
+      ncv->addAttribute("long_name", par_w->ParamLongName().c_str());
+      ncv->addAttribute("units", par_w->Units().c_str());
+      ncv->addAttribute("_FillValue", XMISSING_VALUE);
+      ncv->addAttribute("title",titleVariable(appInfo,par_w).c_str());
+   }
+
+   // Allocate memory
+   double **cp = new double* [ nrLevels ];
+   for (i = 0; i < nrLevels; i++)
+      cp[i] = new double [ nrPoints ];
+
+   // Compute UV values
+   double* splin;
+   if( appInfo.levelType() != XS_ML_LNSP )
+      appInfo.InterpolateVerticala(cp,&par_uv);
+   else
+   {
+      char keyLnsp[60];
+      sprintf(keyLnsp,"p%03d%s",LnPress,key.substr(4,50).c_str() );
+      ParamInfo* parLnsp = this->getParamInfo( params, keyLnsp );
+      if ( ! parLnsp )  // LNSP not found
+      {
+         setError(1,"ERROR: Could not find parameter LNSP");
+         for (j = 0; j < nrLevels; j++)
+            delete [] cp[j];
+         delete [] cp;
+         return false;
+      }
+
+      splin = appInfo.getOneLevelValues(parLnsp,"1");
+      if ( !splin )  // LNSP values not found
+      {
+         setError(1,"ERROR: Could not find LNSP Level values");
+         for (j = 0; j < nrLevels; j++)
+            delete [] cp[j];
+         delete [] cp;
+         return false;
+      }
+
+      appInfo.InterpolateVerticalb(field,cp,&par_uv,splin);
+   }
+
+   // Write UV values to the netCDF
+   ntime_++;
+   for ( i = 0; i < nrLevels; i++)
+   {
+      ncv->setCurrent(ntime_,0,i);
+      ncv->put(cp[i],1,1,1,(long)nrPoints);
+   }
+
+   // Now for the Velocity values
+   // Compute Velocity values
+   if( appInfo.levelType() != XS_ML_LNSP )
+      appInfo.InterpolateVerticala(cp,par_w);
+   else
+      appInfo.InterpolateVerticalb(field,cp,par_w,splin);
+
+   // Write Velocity values to the netCDF
+   for ( i = 0; i < nrLevels; i++ )
+   {
+      ncv->setCurrent(ntime_,1,i);
+      ncv->put(cp[i],1,1,1,(long)nrPoints);
+   }
+
+   // Release memory
+   for ( i = 0; i < nrLevels; i++)
+      delete [] cp[i];
+   delete [] cp;
+
+   return true;
+}
+
+void CrossS::setHorComp( int no, int perp, int par, int intens )
+{
+   hcNumber_ = no; hcPerpendicular_ = perp; hcParallel_ = par;
+   hcIntensity_ = intens;
+}
+
+void CrossS::setHorCompFlags( bool foundU, bool foundV, bool foundW )
+{
+   foundUV_ = foundU && foundV && hcNumber_;
+   foundW_  = foundU && foundV && foundW && hcParallel_;
+}
+
+void CrossS::mapValues( ApplicationInfo& appInfo, ParamInfo &par_uv, ParamInfo *par_u, ParamInfo *par_v)
+{
+   // Map U/V into planes
+   LevelMap  lmap_u = par_u->Levels();
+   LevelMap  lmap_v = par_v->Levels();
+   LevelIterator uu = lmap_u.begin(), vv = lmap_v.begin();
+   double *uValues,*vValues;
+
+   int nrPoints = appInfo.NrPoints();
+   double *valuesuv = new double[nrPoints];
+   double ansin = appInfo.Ansin();
+   double ancos = appInfo.Ancos();
+
+   for (; uu != lmap_u.end(), vv != lmap_v.end();uu++,vv++)
+   {
+      uValues = (*uu).second->XValues();
+      vValues = (*vv).second->XValues();
+
+      for ( int i=0; i < nrPoints; i++)
+      {
+         if (uValues[i] < BIGDOUBLE && vValues[i] < BIGDOUBLE)
+         {
+            if (currentHC_ == PERPENDICULAR )
+               valuesuv[i] = -uValues[i]*ansin + vValues[i] * ancos;
+            else if (currentHC_ == PARALLEL )
+               valuesuv[i] = uValues[i]*ancos + vValues[i] * ansin;
+            else
+               valuesuv[i] =  sqrt (uValues[i] * uValues[i] + vValues[i] * vValues[i]);
+         }
+         else
+            valuesuv[i] = MAXDOUBLE;
+      }
+
+      par_uv.Level(valuesuv,(*uu).first,nrPoints,appInfo.levelType());
+   }
+
+   delete [] valuesuv;
+   return;
+}
+
+int CrossS::computeNumberPoints( ApplicationInfo& appInfo )
+{
+   // Compute distance
+   double x1,x2,y1,y2;
+   appInfo.getAreaLine(x1,x2,y1,y2);
+   double   dellat = ABS(y2-y1), dellon = ABS(x2-x1);
+
+   // Compute number of points
+   int np = int( sqrt( dellon*dellon + dellat*dellat ) / MAX(appInfo.GridNS(),appInfo.GridEW()) );
+   np = MAX(np,64);
+
+   // Save and return value
+   appInfo.NrPoints(np);
+   return np;
+}
+
+bool CrossS::fillValues( ApplicationInfo& appInfo, MvField &field, double *vals )
+{
+   int i;
+   MvFieldExpander x(field);
+
+   // Get number of points and lat/long interpolation points
+   int npoint = appInfo.NrPoints();
+   double *lon   = new double [ npoint ];
+   double *lat   = new double [ npoint ];
+   appInfo.computeLine(lon,lat);
+
+   // Interpolatate along XS line
+   for ( i = 0; i < npoint; i++)
+   {
+      double val = field.interpolateAt(lon[i],lat[i]);
+
+      // Check missing values
+      vals[i] = ( val > XMISSING_VALUE ) ? XMISSING_VALUE : val;
+   }
+
+   // Release memory
+   delete [] lat;   lat = 0;
+   delete [] lon;   lon = 0;
+
+   return true;
+}
+
+MvRequest CrossS::createOutputRequest( ApplicationInfo& appInfo, string netcdfName, ParamInfo* parInfo )
+{
+   // Create netCDF data request
+   MvRequest xs("NETCDF");
+   xs("PATH") = netcdfName.c_str();
+   xs("TEMPORARY") = 1;
+
+   // If action is not visualisation related then return the netcdf data
+   if ( !isVisualise( appInfo ) )
+      return xs;
+
+   // Create NetCDF output request
+   MvRequest out1("NETCDF_XY_MATRIX");
+   out1("NETCDF_MISSING_ATTRIBUTE") = "_FillValue";
+   out1("NETCDF_DATA") = xs;
+   out1("NETCDF_VALUE_VARIABLE") = getNetcdfVarname(parInfo->ParamName()).c_str();
+   out1("NETCDF_Y_VARIABLE") = XS_VARLEVEL.c_str();;
+   double X1,X2,Y1,Y2;
+   appInfo.getAreaLine(X1,X2,Y1,Y2);
+   if (X1 == X2)
+   {
+      out1("NETCDF_X_VARIABLE")           = "lat";
+      out1("NETCDF_X_AUXILIARY_VARIABLE") = "lon";
+      out1("NETCDF_X_GEOLINE_CONVENTION") = "latlon";
+   }
+   else
+   {
+      out1("NETCDF_X_VARIABLE")           = "lon";
+      out1("NETCDF_X_AUXILIARY_VARIABLE") = "lat";
+      out1("NETCDF_X_GEOLINE_CONVENTION") = "lonlat";
+   }
+
+   // Create customised Cartesian View request.
+   // If an icon was dropped into a view, uPlot will ignore it.
+   // Mode-specific options
+   MvRequest viewReq("CARTESIANVIEW");
+   viewReq("X_AXIS_TYPE") = "geoline";
+   viewReq("X_AUTOMATIC") = "on";
+   viewReq("Y_AUTOMATIC") = "on";
+   if ( appInfo.levelType() != cML_UKMO_ND )  // UK MetOffice model levels are 'upside-down'
+      viewReq("Y_AUTOMATIC_REVERSE") = "on";
+
+   // Add the orography curve visualiser
+   if ( appInfo.haveLNSP() && (appInfo.levelType() == XS_ML_LNSP || appInfo.levelType() == XS_PL) )
+   {
+      MvRequest out_orog("NETCDF_XY_POINTS");
+      out_orog("NETCDF_DATA") = xs;
+      out_orog("NETCDF_Y_VARIABLE")  = "orography_y1_values";
+      out_orog("NETCDF_Y2_VARIABLE") = "orography_y2_values";
+      out_orog("NETCDF_X_VARIABLE")  = "orography_x_values";
+      out_orog("NETCDF_X2_VARIABLE") = "orography_x_values";//"orography_x2_values";
+      out_orog("NETCDF_MISSING_ATTRIBUTE") = "_FillValue";
+
+      // create Graph Plotting subrequest
+      // OBS: itt should use a definition from the Default folder
+      MvRequest visdefReq("MGRAPH");
+      visdefReq("GRAPH_TYPE") = "AREA";
+      visdefReq("GRAPH_SHADE_COLOUR") = "CYAN";
+      out_orog = out_orog + visdefReq;
+
+      out1 = out1 + out_orog;
+   }
+
+   // Final output request
+   MvRequest out = viewReq + out1;
+   return out;
+}
+
+string CrossS::titleVariable( ApplicationInfo&, ParamInfo* par )
+{
+   char titlestr[150];
+
+   // Generate title
+   if ( inputMode_ == XWIND )
+      sprintf(titlestr,"Cross section of wind %s %d %02d step %d %s",
+              (currentHC_ == hcPerpendicular_ ) ? "perp." : "intens.",
+              par->Date(),par->Time(),par->Step(),
+              par->ExpVerTitle().c_str() );
+   else if ( inputMode_ == XVELOCITY )
+      sprintf(titlestr,"Cross section of UVW parallel %d %02d step %d %s",
+              par->Date(),par->Time(),par->Step(),
+              par->ExpVerTitle().c_str() );
+   else
+      sprintf(titlestr,"Cross section of %s %d %02d step %d %s",
+              par->ParamLongName().c_str(), par->Date(),par->Time(),par->Step(),
+              par->ExpVerTitle().c_str() );
+
+   return string(titlestr);
+}
+
+//------------------------------------------------------------------------------
+
+// All these methods are created to allow backwards compatibility with Metvew 3.
+// They should be removed when the backwards compatibility is no longer needed.
+
+// Translate Metview 3 Cross Section Data to Metview 4 definition. Call Metview 4
+// server to process the job.
+void CrossSM3::serve(MvRequest& in,MvRequest& out)
+{
+   // Send a general warning message
+   setError(0, "Icon Metview 3 CROSS SECTION DATA is obsolete. An automatic translation to the equivalent icon in Metview 4 will be performed, but may not work for all cases. It is recommended to replace it to the new definition manually.");
+
+   // There are input parameters that are no longer available in Metview 4.
+   // Remove them and send a warning message.
+   setError(0,"Icon Metview 3 CROSS SECTION DATA is obsolete. Parameters PRESSURE_LEVEL_AXIS, BOTTOM_PRESSURE and TOP_PRESSURE will not be automatically translated.");
+   MvRequest req = in;
+   req.unsetParam("PRESSURE_LEVEL_AXIS");
+   req.unsetParam("BOTTOM_PRESSURE");
+   req.unsetParam("TOP_PRESSURE");
+
+   // Keep the remaining parameters and update the VERB
+   req.setVerb("MXSECTION");
+
+   // Call the Xsection server to process the job
+   Xsect::serve(req,out);
+}
diff --git a/src/XSection/CrossS.h b/src/XSection/CrossS.h
new file mode 100644
index 0000000..a2251cb
--- /dev/null
+++ b/src/XSection/CrossS.h
@@ -0,0 +1,87 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 CrossS_H
+#define CrossS_H
+
+/********************************************************************************
+  Application for Xsection.
+  It takes a GRIB file as input (in addition to the values given by the user),
+  and produces an NetCDF file as output. There is no metadata on output request,
+  only the path to NetCDF file.
+
+  First the GRIB while is read, and info about all parameters and level are stored.
+  Then several flags is set, based on the data and the input request, to determine
+  how the application should run.
+
+  The file is rewound, and sorted by param, date, time, step and expver. All fields
+  with the same values for the sorting parameters are one plot. If any of these
+  values change, all data are written out as netcdf variables with names put
+  together from the sorting values.
+********************************************************************************/
+
+#include "Xsect.h"
+
+class CrossS : public Xsect {
+
+public:
+
+   // Constructors
+   CrossS();
+   CrossS(const char* kw);
+
+   bool getAreaLineParameter( MvRequest&, double&, double&, double&, double&);
+
+   void getAppParameters( MvRequest&, ApplicationInfo& );
+
+   bool generateData( ApplicationInfo&, ParamMap&, MvNetCDF&, MvField&, const string& );
+
+   MvRequest createOutputRequest( ApplicationInfo&, string, ParamInfo*);
+
+   int computeNumberPoints( ApplicationInfo& );
+
+   bool fillValues( ApplicationInfo&, MvField &, double* );
+
+private:
+
+   bool generateXsectData( ApplicationInfo&, ParamMap&, MvNetCDF&, MvField&, const string& );
+
+   bool generateLNSP( ApplicationInfo&, MvNetCDF&, ParamInfo*);
+
+   bool windValues( ApplicationInfo&, ParamMap&, MvNetCDF&, const string&, MvField& );
+
+   bool velocityValues( ApplicationInfo&, ParamMap&, MvNetCDF&, const string&, MvField& );
+
+   void setHorCompFlags( bool, bool, bool );
+   void setHorComp( int, int, int, int );
+
+   void mapValues( ApplicationInfo&, ParamInfo&, ParamInfo*, ParamInfo* );
+
+   string titleVariable( ApplicationInfo&, ParamInfo*);
+
+   bool foundUV_, foundW_;
+   int hcNumber_, hcPerpendicular_, hcParallel_, hcIntensity_, currentHC_;
+   int inputMode_;   // XWIND, XVELOCITY, XCONTOUR
+};
+
+//---------------------------------------------------------------------------------
+
+// This class is defined for backwards compatibility with Metview 3.
+// It should be removed in the future
+
+class CrossSM3 : public CrossS {
+
+public:
+
+   CrossSM3() : CrossS("PM_XSECT") { }
+
+   void serve( MvRequest&, MvRequest& );
+};
+
+#endif
diff --git a/share/metview/icons/VPROFILE.xpm b/src/XSection/MVPROFILE.xpm
old mode 100755
new mode 100644
similarity index 100%
rename from share/metview/icons/VPROFILE.xpm
rename to src/XSection/MVPROFILE.xpm
diff --git a/share/metview/icons/MVPROFVIEW.xpm b/src/XSection/MVPROFILEVIEW.xpm
similarity index 100%
rename from share/metview/icons/MVPROFVIEW.xpm
rename to src/XSection/MVPROFILEVIEW.xpm
diff --git a/src/XSection/MVProfileDef b/src/XSection/MVProfileDef
new file mode 100644
index 0000000..97a806c
--- /dev/null
+++ b/src/XSection/MVProfileDef
@@ -0,0 +1,69 @@
+MVPROFILE; Metview; Specific Application
+{
+    DATA [
+           interface       = icon,
+           class           = GRIB,
+           exclusive       = false,
+           help            = help_data,
+           help_directory  = '/System/Defaults',
+           help_name       = Data for VProfile,
+           help_class      = RETRIEVE,
+           help_definition = ( RETRIEVE, TYPE = FC, LEVTYPE = PL,
+                               PARAM = T, DATE = '-1',
+                               LEVELIST = 1000/850/700/500/400/300,
+                               STEP = 12, GRID = 1.5/1.5 )
+        ]
+    {
+        @
+    }
+
+    INPUT_MODE
+    {
+        POINT             ; POINT
+        NEAREST_GRIDPOINT ; GPOINT
+        AREA              ; AREA
+        AREA_2            ; AREA2
+    } = POINT
+
+    POINT [
+            help         = help_input,
+            input_type   = point,
+            input_window = '/System/Defaults/Input Window'
+          ]
+    {
+        *
+        /
+    } = 0./0.
+
+    AREA [
+           help         = help_input,
+           input_type   = area,
+           input_window = '/System/Defaults/Input Window'
+         ]
+    {
+        *
+        /
+    } = 30./-30./-30./30.
+
+    OUTPUT_MODE
+    {
+       NORMAL
+       RTTOV
+    } = NORMAL
+
+    WATER_TYPE
+    {
+       FRESH_WATER ; 0
+       OCEAN_WATER ; 1
+    } = FRESH_WATER
+
+    CLOUD_TOP_PRESSURE
+    {
+       *
+    } = 0.0
+
+    CLOUD_FRACTION
+    {
+       *
+    } = 0.0
+}
diff --git a/src/XSection/MVProfileRules b/src/XSection/MVProfileRules
new file mode 100644
index 0000000..e21fe00
--- /dev/null
+++ b/src/XSection/MVProfileRules
@@ -0,0 +1,10 @@
+%if INPUT_MODE = POINT %then
+    %unset AREA
+
+%if INPUT_MODE = AREA %then
+   %unset POINT
+
+%if OUTPUT_MODE = NORMAL %then
+   %unset WATER_TYPE
+   %unset CLOUD_TOP_PRESSURE
+   %unset CLOUD_FRACTION
diff --git a/src/XSection/MVProfileViewDef b/src/XSection/MVProfileViewDef
new file mode 100644
index 0000000..880db04
--- /dev/null
+++ b/src/XSection/MVProfileViewDef
@@ -0,0 +1,107 @@
+MVPROFILEVIEW; PlotMod Icon; Metview
+{
+   INPUT_MODE
+   {
+       POINT             ; POINT
+       NEAREST_GRIDPOINT ; GPOINT
+       AREA              ; AREA
+       AREA_2            ; AREA2
+   } = POINT
+
+   POINT [
+           help = help_input,
+           help_icon = 'help_point',
+           input_type = point,
+           input_window = '/System/Defaults/Input Window'
+         ]
+   {
+       *
+       /
+   } = 0./0.
+
+   AREA [
+          help = help_input,
+          help_icon = 'help_area',
+          input_type = area,
+          input_window = '/System/Defaults/Input Window'
+        ]
+   {
+       *
+       /
+   } = 30./-30./-30./30.
+
+   BOTTOM_LEVEL
+   {
+      *
+   } = 1015.0
+
+   TOP_LEVEL
+   {
+      *
+   } = 0.01
+
+   VERTICAL_SCALING
+   {
+      LINEAR
+      LOG
+   } = LINEAR
+
+   X_MIN_MAX
+   {
+      *
+      /
+      AUTO
+   } = AUTO/AUTO
+
+   LEVEL_AXIS [ 
+                   interface       = icon,
+                   class           = MAXIS,
+                   missing         = ignored,
+                   help            = help_data,
+                   help_name       = Pressure Axis,
+                   help_directory  = '/System/Defaults',
+                   help_class      = MAXIS,
+                   help_definition = ( MAXIS,AXIS_ORIENTATION = 'VERTICAL',
+                                       AXIS_POSITION = 'LEFT' )
+                 ]
+   {
+       @
+   }
+
+   VALUE_AXIS [
+                interface       = icon,
+                class           = MAXIS,
+                missing         = ignored,
+                help            = help_data,
+                help_name       = Value Axis,
+                help_directory  = '/System/Defaults',
+                help_class      = MAXIS,
+                help_definition = ( MAXIS, AXIS_TICK_LABEL_TYPE = 'NUMBER' )
+             ]
+   {
+       @
+   }
+
+   SUBPAGE_X_POSITION
+   {
+       @
+   } = 7.5
+
+   SUBPAGE_Y_POSITION
+   {
+       @
+   } = 7
+
+   SUBPAGE_X_LENGTH
+   {
+       @
+   } = 85
+
+   SUBPAGE_Y_LENGTH
+   {
+       @
+   } = 80
+
+   %include PageFrameDef
+   %include SubpageFrameDef
+}
diff --git a/src/XSection/MVProfileViewRules b/src/XSection/MVProfileViewRules
new file mode 100644
index 0000000..56b05f4
--- /dev/null
+++ b/src/XSection/MVProfileViewRules
@@ -0,0 +1,8 @@
+%if INPUT_MODE = POINT %or INPUT_MODE = GPOINT %then
+   %unset AREA
+
+%if INPUT_MODE = AREA  %or INPUT_MODE = AREA2 %then
+   %unset POINT
+
+%include PageFrameRules
+%include SubpageFrameRules
diff --git a/share/metview/icons/XAVERAGE.xpm b/src/XSection/MXAVERAGE.xpm
old mode 100755
new mode 100644
similarity index 100%
rename from share/metview/icons/XAVERAGE.xpm
rename to src/XSection/MXAVERAGE.xpm
diff --git a/share/metview/icons/MAVERAGEVIEW.xpm b/src/XSection/MXAVERAGEVIEW.xpm
similarity index 100%
rename from share/metview/icons/MAVERAGEVIEW.xpm
rename to src/XSection/MXAVERAGEVIEW.xpm
diff --git a/src/XSection/MXAverageDef b/src/XSection/MXAverageDef
new file mode 100644
index 0000000..6427c77
--- /dev/null
+++ b/src/XSection/MXAverageDef
@@ -0,0 +1,42 @@
+MXAVERAGE; Metview; Specific Application
+{
+   DATA [
+         interface       = icon,
+         class           = GRIB,
+         exclusive       = false,
+         help            = help_data,
+         help_directory  = '/System/Defaults',
+         help_name       = Data for Average,
+         help_class      = RETRIEVE,
+         help_definition = ( RETRIEVE, TYPE = FC, LEVTYPE = PL,
+                             PARAM = T, DATE = '-1',
+                             LEVELIST = 1000/850/700/500/400/300,
+                             STEP = 12, GRID = 1.5/1.5 )
+        ]
+   {
+      @
+   }
+
+   INTERPOLATE_VALUES
+   {
+       YES
+       NO
+   } = NO
+
+   AREA [
+         help         = help_input,
+         help_icon    = 'help_area',
+         input_type   = area,
+         input_window = '/System/Defaults/Input Window'
+        ]
+   {
+      *
+      /
+   } = 90./-180./-90./180.
+
+   DIRECTION
+   {
+      NORTH SOUTH	; NS
+      EAST WEST	; EW
+   } = NS
+}
diff --git a/src/XSection/MXAverageRules b/src/XSection/MXAverageRules
new file mode 100644
index 0000000..e69de29
diff --git a/src/XSection/MXAverageViewDef b/src/XSection/MXAverageViewDef
new file mode 100644
index 0000000..42cf2d0
--- /dev/null
+++ b/src/XSection/MXAverageViewDef
@@ -0,0 +1,97 @@
+MXAVERAGEVIEW; uPlot Icon; Metview
+{
+   BOTTOM_LEVEL
+   {
+      *
+   } = 1015.0
+
+   TOP_LEVEL
+   {
+      *
+   } = 0.01
+
+   VERTICAL_SCALING
+   {
+      LINEAR
+      LOG
+   } = LINEAR
+
+   INTERPOLATE_VALUES
+   {
+       YES
+       NO
+   } = NO
+
+   AREA [
+          help         = help_input,
+          help_icon    = 'help_area',
+          input_type   = area,
+          input_window = '/System/Defaults/Input Window'
+        ]
+    {
+        *
+        /
+    } = 90./-180./-90./180.
+
+    DIRECTION
+    {
+        NORTH SOUTH ; NS ; NS
+        EAST WEST   ; EW ; EW
+    } = NS
+
+    MAP_PROJECTION  [ visible = false ]
+    {
+        cartesian
+    } = cartesian
+
+    HORIZONTAL_AXIS [
+                      interface       = icon,
+                      class           = MAXIS,
+                      missing         = ignored,
+                      help            = help_data,
+                      help_name       = Horizontal Axis,
+                      help_directory  = '/System/Defaults',
+                      help_class      = MAXIS,
+                      help_definition = ( MAXIS, AXIS_ORIENTATION ='HORIZONTAL' )
+                    ]
+    {
+        @
+    }
+
+    VERTICAL_AXIS [
+                    interface       = icon, 
+                    class           = MAXIS,
+                    missing         = ignored,
+                    help            = help_data,
+                    help_name       = Vertical Axis,
+                    help_directory  = '/System/Defaults',
+                    help_class      = MAXIS,
+                    help_definition = ( MAXIS, AXIS_ORIENTATION ='VERTICAL' )
+                  ]
+    {
+        @
+    }
+
+    SUBPAGE_X_POSITION
+    {
+        @
+    } = 7.5
+
+    SUBPAGE_Y_POSITION
+    {
+        @
+    } = 7
+
+    SUBPAGE_X_LENGTH
+    {
+        @
+    } = 85
+
+    SUBPAGE_Y_LENGTH
+    {
+        @
+    } = 80
+
+    %include PageFrameDef
+    %include SubpageFrameDef
+}
diff --git a/src/XSection/MXAverageViewRules b/src/XSection/MXAverageViewRules
new file mode 100644
index 0000000..a3fbc4e
--- /dev/null
+++ b/src/XSection/MXAverageViewRules
@@ -0,0 +1,2 @@
+%include PageFrameRules
+%include SubpageFrameRules
diff --git a/share/metview/icons/XSECTION.xpm b/src/XSection/MXSECTION.xpm
old mode 100755
new mode 100644
similarity index 100%
rename from share/metview/icons/XSECTION.xpm
rename to src/XSection/MXSECTION.xpm
diff --git a/share/metview/icons/MXSECTVIEW.xpm b/src/XSection/MXSECTIONVIEW.xpm
similarity index 100%
rename from share/metview/icons/MXSECTVIEW.xpm
rename to src/XSection/MXSECTIONVIEW.xpm
diff --git a/src/XSection/MXSectionCommonDef b/src/XSection/MXSectionCommonDef
new file mode 100755
index 0000000..b929b19
--- /dev/null
+++ b/src/XSection/MXSectionCommonDef
@@ -0,0 +1,62 @@
+INTERPOLATE_VALUES
+{
+   YES
+   NO
+} = NO
+
+LINE
+   [
+      help         = help_input,
+      help_icon    = 'help_line',
+      input_type   = line,
+      input_window = '/System/Defaults/Input Window'
+   ]
+{
+   *
+   /
+} = 0./-180./0./180.
+
+WIND_PARALLEL
+{
+   ON
+   OFF
+} = ON
+
+WIND_PERPENDICULAR
+{
+   ON
+   OFF
+} = OFF
+
+WIND_INTENSITY
+{
+   ON
+   OFF
+} = OFF
+
+WIND_HORIZONTAL_COMPONENT [ visible = false ]
+{
+   PERPENDICULAR   ; PER
+   PARALLEL        ; PAR
+   INTENSITY       ; INT
+} = PAR
+
+LNSP_PARAM
+{
+   *
+} = 152
+
+U_WIND_PARAM
+{
+   *
+} = 131
+
+V_WIND_PARAM
+{
+   *
+} = 132
+
+W_WIND_PARAM
+{
+   *
+} = 135
diff --git a/src/XSection/MXSectionCommonRules b/src/XSection/MXSectionCommonRules
new file mode 100644
index 0000000..e69de29
diff --git a/src/XSection/MXSectionDef b/src/XSection/MXSectionDef
new file mode 100644
index 0000000..c040073
--- /dev/null
+++ b/src/XSection/MXSectionDef
@@ -0,0 +1,20 @@
+MXSECTION; Metview 4; Specific Application
+{
+    DATA
+        [
+            interface       = icon,
+            class           = GRIB,
+            exclusive       = false,
+            help            = help_data,
+            help_directory  = '/System/Defaults',
+            help_name       = Data for XSection,
+            help_class      = RETRIEVE,
+            help_definition = ( RETRIEVE, TYPE = FC, LEVTYPE = PL,
+                                PARAM = T, DATE = '-1',
+                                LEVELIST = 1000/850/700/500/400/300,
+                                STEP = 12, GRID = 1.5/1.5 ) 
+        ]
+    { @ }
+
+   %include MXSectionCommonDef
+}
diff --git a/src/XSection/MXSectionRules b/src/XSection/MXSectionRules
new file mode 100644
index 0000000..47a13d9
--- /dev/null
+++ b/src/XSection/MXSectionRules
@@ -0,0 +1 @@
+%include MXSectionCommonRules
diff --git a/src/XSection/MXSectionViewDef b/src/XSection/MXSectionViewDef
new file mode 100644
index 0000000..4947ed2
--- /dev/null
+++ b/src/XSection/MXSectionViewDef
@@ -0,0 +1,75 @@
+MXSECTIONVIEW; uPlot Icon; Metview
+{
+   BOTTOM_LEVEL
+   {
+      *
+   } = 1015.0
+
+   TOP_LEVEL
+   {
+      *
+   } = 0.01
+
+   VERTICAL_SCALING
+   {
+      LINEAR
+      LOG
+   } = LINEAR
+
+   %include MXSectionCommonDef
+
+   MAP_PROJECTION  [ visible = false ]
+   {
+      cartesian
+   } = cartesian
+
+   HORIZONTAL_AXIS [interface       = icon,
+                    class           = MAXIS,
+                    missing         = ignored,
+                    help            = help_data,
+                    help_name       = Horizontal Axis,
+                    help_directory  = '/System/Defaults',
+                    help_class      = MAXIS,
+                    help_definition = ( MAXIS, AXIS_ORIENTATION ='HORIZONTAL' )
+                   ]
+   {
+      @
+   }
+
+   VERTICAL_AXIS [interface = icon,
+                  class           = MAXIS,
+                  exclusive       = true,
+                  missing         = ignored,
+                  help            = help_data,
+                  help_name       = Pressure Axis,
+                  help_directory  = '/System/Defaults',
+                  help_class      = MAXIS,
+                  help_definition = ( MAXIS, AXIS_ORIENTATION ='VERTICAL', AXIS_TITLE_TEXT = 'Pressure (hPa)' )
+                 ]
+   {
+      @
+   }
+
+   SUBPAGE_X_POSITION
+   {
+      @
+   } = 7.5
+
+   SUBPAGE_Y_POSITION
+   {
+      @
+   } = 7
+
+   SUBPAGE_X_LENGTH
+   {
+      @
+   } = 85
+
+   SUBPAGE_Y_LENGTH
+   {
+      @
+   } = 80
+
+   %include PageFrameDef
+   %include SubpageFrameDef
+}
diff --git a/src/XSection/MXSectionViewRules b/src/XSection/MXSectionViewRules
new file mode 100644
index 0000000..5f1be41
--- /dev/null
+++ b/src/XSection/MXSectionViewRules
@@ -0,0 +1,3 @@
+%include MXSectionCommonRules
+%include PageFrameRules
+%include SubpageFrameRules
diff --git a/src/XSection/Makefile.am b/src/XSection/Makefile.am
index 3c75f8a..8f4ee00 100644
--- a/src/XSection/Makefile.am
+++ b/src/XSection/Makefile.am
@@ -1,19 +1,29 @@
 bin_PROGRAMS = bin/XSection
 
-bin_XSection_SOURCES  = MvXsectFrame.cc Xsect.cc MvXsectFrame.h
+bin_XSection_SOURCES  = Average.cc CrossS.cc MvXsectFrame.cc Vprofile.cc Xsect.cc \
+                        Average.h CrossS.h MvXsectFrame.h Vprofile.h Xsect.h 
 bin_XSection_CPPFLAGS = $(METVIEW_NETCDF_FLAGS)
 bin_XSection_LDADD    = $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB) $(METVIEW_NETCDF_LIB)
+bin_XSection_DEPENDENCIES = ../../lib/libMetview.a
 
 sharedir       = $(datadir)/metview/etc
 local_sharedir = ../../share/metview/etc
 local_iconsdir = ../../share/metview/icons
 share_DATA     = $(local_sharedir)/ObjectSpec.XSection \
-		 $(local_sharedir)/XSectionDef \
-		 $(local_sharedir)/XSectionRules \
-		 $(local_sharedir)/XAverageDef \
-		 $(local_sharedir)/XAverageRules \
-		 $(local_sharedir)/VProfileDef \
-		 $(local_sharedir)/VProfileRules
+		$(local_sharedir)/MXAverageDef $(local_sharedir)/MXAverageRules \
+		$(local_sharedir)/MXAverageViewDef $(local_sharedir)/MXAverageViewRules \
+		$(local_sharedir)/MVProfileDef $(local_sharedir)/MVProfileRules \
+		$(local_sharedir)/MVProfileViewDef $(local_sharedir)/MVProfileViewRules \
+		$(local_sharedir)/MXSectionDef $(local_sharedir)/MXSectionRules \
+		$(local_sharedir)/MXSectionCommonDef $(local_sharedir)/MXSectionCommonRules \
+		$(local_sharedir)/MXSectionViewDef $(local_sharedir)/MXSectionViewRules \
+		$(local_sharedir)/AverageDef $(local_sharedir)/AverageRules \
+		$(local_sharedir)/AverageViewDef $(local_sharedir)/AverageViewRules \
+		$(local_sharedir)/VertProfDef $(local_sharedir)/VertProfRules \
+		$(local_sharedir)/VertProfViewDef $(local_sharedir)/VertProfViewRules \
+		$(local_sharedir)/XsectDef $(local_sharedir)/XsectRules \
+		$(local_sharedir)/XsectViewDef $(local_sharedir)/XsectViewRules
+
 
 # to build the share data, we take the destination files and
 # remove their directory, e.g. $(local_sharedir)/DefFile becomes DefFile.
@@ -22,16 +32,42 @@ $(share_DATA): $(local_sharedir)/%: %
 	${INSTALL} $<  $(local_sharedir)
 
 icons:
-	${INSTALL} XSECTION.xpm  $(local_iconsdir)
-	${INSTALL} XAVERAGE.xpm  $(local_iconsdir)
-	${INSTALL} VPROFILE.xpm  $(local_iconsdir)
+	${INSTALL} MXAVERAGE.xpm $(local_iconsdir)
+	${INSTALL} MXAVERAGEVIEW.xpm $(local_iconsdir)
+	${INSTALL} MVPROFILE.xpm $(local_iconsdir)
+	${INSTALL} MVPROFILEVIEW.xpm $(local_iconsdir)
+	${INSTALL} MXSECTION.xpm $(local_iconsdir)
+	${INSTALL} MXSECTIONVIEW.xpm $(local_iconsdir)
+	${INSTALL} AVERAGE.xpm $(local_iconsdir)
+	${INSTALL} AVERAGEVIEW.xpm $(local_iconsdir)
+	${INSTALL} VPROF.xpm $(local_iconsdir)
+	${INSTALL} VPROFVIEW.xpm $(local_iconsdir)
+	${INSTALL} XSECT.xpm $(local_iconsdir)
+	${INSTALL} XSECTVIEW.xpm $(local_iconsdir)
 
-CLEANFILES = $(share_DATA) $(local_iconsdir)/XSECTION.xpm \
-	     $(local_iconsdir)/XAVERAGExpm $(local_iconsdir)/VPROFILE.xpm
+CLEANFILES = $(share_DATA)  $(local_iconsdir)/MXAVERAGE.xpm $(local_iconsdir)/MXAVERAGEVIEW.xpm \
+		$(local_iconsdir)/MVPROFILE.xpm $(local_iconsdir)/MVPROFILEVIEW.xpm \
+		$(local_iconsdir)/MXSECTION.xpm $(local_iconsdir)/MXSECTIONVIEW.xpm \
+		$(local_iconsdir)/AVERAGE.xpm $(local_iconsdir)/AVERAGEVIEW.xpm \
+		$(local_iconsdir)/VPROF.xpm $(local_iconsdir)/VPROFVIEW.xpm \
+		$(local_iconsdir)/XSECT.xpm $(local_iconsdir)/XSECTVIEW.xpm
 
 BUILT_SOURCES = bin icons
 
-EXTRA_DIST = ObjectSpec.XSection XAVERAGE.xpm XAverageDef XAverageRules XSECTION.xpm XSectionDef XSectionRules VPROFILE.xpm VProfileDef VProfileRules
+EXTRA_DIST = ObjectSpec.XSection \
+	MXAVERAGE.xpm MXAverageDef MXAverageRules \
+	MXAVERAGEVIEW.xpm MXAverageViewDef MXAverageViewRules \
+	MVPROFILE.xpm MVProfileDef MVProfileRules \
+	MVPROFILEVIEW.xpm MVProfileViewDef MVProfileViewRules \
+	MXSECTION.xpm MXSectionDef MXSectionRules \
+	MXSECTIONVIEW.xpm MXSectionViewDef MXSectionViewRules \
+	MXSectionCommonDef MXSectionCommonRules \
+	AVERAGE.xpm AverageDef AverageRules \
+	AVERAGEVIEW.xpm AverageViewDef AverageViewRules \
+	VPROF.xpm VertProfDef VertProfRules \
+	VPROFVIEW.xpm VertProfViewDef VertProfViewRules \
+	XSECT.xpm XsectDef XsectRules \
+	XSECTVIEW.xpm XsectViewDef XsectViewRules
 
 bin:
 	ln -s ../../bin bin
diff --git a/src/XSection/Makefile.in b/src/XSection/Makefile.in
index 98b5723..f8dab52 100644
--- a/src/XSection/Makefile.in
+++ b/src/XSection/Makefile.in
@@ -50,12 +50,12 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sharedir)"
 PROGRAMS = $(bin_PROGRAMS)
-am_bin_XSection_OBJECTS = bin_XSection-MvXsectFrame.$(OBJEXT) \
-	bin_XSection-Xsect.$(OBJEXT)
+am_bin_XSection_OBJECTS = bin_XSection-Average.$(OBJEXT) \
+	bin_XSection-CrossS.$(OBJEXT) \
+	bin_XSection-MvXsectFrame.$(OBJEXT) \
+	bin_XSection-Vprofile.$(OBJEXT) bin_XSection-Xsect.$(OBJEXT)
 bin_XSection_OBJECTS = $(am_bin_XSection_OBJECTS)
 am__DEPENDENCIES_1 =
-bin_XSection_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 AM_V_lt = $(am__v_lt_$(V))
 am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
 am__v_lt_0 = --silent
@@ -157,6 +157,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -172,6 +173,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -198,11 +201,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -330,25 +336,53 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-bin_XSection_SOURCES = MvXsectFrame.cc Xsect.cc MvXsectFrame.h
+bin_XSection_SOURCES = Average.cc CrossS.cc MvXsectFrame.cc Vprofile.cc Xsect.cc \
+                        Average.h CrossS.h MvXsectFrame.h Vprofile.h Xsect.h 
+
 bin_XSection_CPPFLAGS = $(METVIEW_NETCDF_FLAGS)
 bin_XSection_LDADD = $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB) $(METVIEW_NETCDF_LIB)
+bin_XSection_DEPENDENCIES = ../../lib/libMetview.a
 sharedir = $(datadir)/metview/etc
 local_sharedir = ../../share/metview/etc
 local_iconsdir = ../../share/metview/icons
 share_DATA = $(local_sharedir)/ObjectSpec.XSection \
-		 $(local_sharedir)/XSectionDef \
-		 $(local_sharedir)/XSectionRules \
-		 $(local_sharedir)/XAverageDef \
-		 $(local_sharedir)/XAverageRules \
-		 $(local_sharedir)/VProfileDef \
-		 $(local_sharedir)/VProfileRules
-
-CLEANFILES = $(share_DATA) $(local_iconsdir)/XSECTION.xpm \
-	     $(local_iconsdir)/XAVERAGExpm $(local_iconsdir)/VPROFILE.xpm
+		$(local_sharedir)/MXAverageDef $(local_sharedir)/MXAverageRules \
+		$(local_sharedir)/MXAverageViewDef $(local_sharedir)/MXAverageViewRules \
+		$(local_sharedir)/MVProfileDef $(local_sharedir)/MVProfileRules \
+		$(local_sharedir)/MVProfileViewDef $(local_sharedir)/MVProfileViewRules \
+		$(local_sharedir)/MXSectionDef $(local_sharedir)/MXSectionRules \
+		$(local_sharedir)/MXSectionCommonDef $(local_sharedir)/MXSectionCommonRules \
+		$(local_sharedir)/MXSectionViewDef $(local_sharedir)/MXSectionViewRules \
+		$(local_sharedir)/AverageDef $(local_sharedir)/AverageRules \
+		$(local_sharedir)/AverageViewDef $(local_sharedir)/AverageViewRules \
+		$(local_sharedir)/VertProfDef $(local_sharedir)/VertProfRules \
+		$(local_sharedir)/VertProfViewDef $(local_sharedir)/VertProfViewRules \
+		$(local_sharedir)/XsectDef $(local_sharedir)/XsectRules \
+		$(local_sharedir)/XsectViewDef $(local_sharedir)/XsectViewRules
+
+CLEANFILES = $(share_DATA)  $(local_iconsdir)/MXAVERAGE.xpm $(local_iconsdir)/MXAVERAGEVIEW.xpm \
+		$(local_iconsdir)/MVPROFILE.xpm $(local_iconsdir)/MVPROFILEVIEW.xpm \
+		$(local_iconsdir)/MXSECTION.xpm $(local_iconsdir)/MXSECTIONVIEW.xpm \
+		$(local_iconsdir)/AVERAGE.xpm $(local_iconsdir)/AVERAGEVIEW.xpm \
+		$(local_iconsdir)/VPROF.xpm $(local_iconsdir)/VPROFVIEW.xpm \
+		$(local_iconsdir)/XSECT.xpm $(local_iconsdir)/XSECTVIEW.xpm
 
 BUILT_SOURCES = bin icons
-EXTRA_DIST = ObjectSpec.XSection XAVERAGE.xpm XAverageDef XAverageRules XSECTION.xpm XSectionDef XSectionRules VPROFILE.xpm VProfileDef VProfileRules
+EXTRA_DIST = ObjectSpec.XSection \
+	MXAVERAGE.xpm MXAverageDef MXAverageRules \
+	MXAVERAGEVIEW.xpm MXAverageViewDef MXAverageViewRules \
+	MVPROFILE.xpm MVProfileDef MVProfileRules \
+	MVPROFILEVIEW.xpm MVProfileViewDef MVProfileViewRules \
+	MXSECTION.xpm MXSectionDef MXSectionRules \
+	MXSECTIONVIEW.xpm MXSectionViewDef MXSectionViewRules \
+	MXSectionCommonDef MXSectionCommonRules \
+	AVERAGE.xpm AverageDef AverageRules \
+	AVERAGEVIEW.xpm AverageViewDef AverageViewRules \
+	VPROF.xpm VertProfDef VertProfRules \
+	VPROFVIEW.xpm VertProfViewDef VertProfViewRules \
+	XSECT.xpm XsectDef XsectRules \
+	XSECTVIEW.xpm XsectViewDef XsectViewRules
+
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
@@ -440,7 +474,10 @@ mostlyclean-compile:
 distclean-compile:
 	-rm -f *.tab.c
 
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_XSection-Average.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_XSection-CrossS.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_XSection-MvXsectFrame.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_XSection-Vprofile.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_XSection-Xsect.Po at am__quote@
 
 .cc.o:
@@ -467,6 +504,38 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
 
+bin_XSection-Average.o: Average.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-Average.o -MD -MP -MF $(DEPDIR)/bin_XSection-Average.Tpo -c -o bin_XSection-Average.o `test -f 'Average.cc' || echo '$(srcdir)/'`Average.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-Average.Tpo $(DEPDIR)/bin_XSection-Average.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Average.cc' object='bin_XSection-Average.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-Average.o `test -f 'Average.cc' || echo '$(srcdir)/'`Average.cc
+
+bin_XSection-Average.obj: Average.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-Average.obj -MD -MP -MF $(DEPDIR)/bin_XSection-Average.Tpo -c -o bin_XSection-Average.obj `if test -f 'Average.cc'; then $(CYGPATH_W) 'Average.cc'; else $(CYGPATH_W) '$(srcdir)/Average.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-Average.Tpo $(DEPDIR)/bin_XSection-Average.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Average.cc' object='bin_XSection-Average.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-Average.obj `if test -f 'Average.cc'; then $(CYGPATH_W) 'Average.cc'; else $(CYGPATH_W) '$(srcdir)/Average.cc'; fi`
+
+bin_XSection-CrossS.o: CrossS.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-CrossS.o -MD -MP -MF $(DEPDIR)/bin_XSection-CrossS.Tpo -c -o bin_XSection-CrossS.o `test -f 'CrossS.cc' || echo '$(srcdir)/'`CrossS.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-CrossS.Tpo $(DEPDIR)/bin_XSection-CrossS.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='CrossS.cc' object='bin_XSection-CrossS.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-CrossS.o `test -f 'CrossS.cc' || echo '$(srcdir)/'`CrossS.cc
+
+bin_XSection-CrossS.obj: CrossS.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-CrossS.obj -MD -MP -MF $(DEPDIR)/bin_XSection-CrossS.Tpo -c -o bin_XSection-CrossS.obj `if test -f 'CrossS.cc'; then $(CYGPATH_W) 'CrossS.cc'; else $(CYGPATH_W) '$(srcdir)/CrossS.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-CrossS.Tpo $(DEPDIR)/bin_XSection-CrossS.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='CrossS.cc' object='bin_XSection-CrossS.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-CrossS.obj `if test -f 'CrossS.cc'; then $(CYGPATH_W) 'CrossS.cc'; else $(CYGPATH_W) '$(srcdir)/CrossS.cc'; fi`
+
 bin_XSection-MvXsectFrame.o: MvXsectFrame.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-MvXsectFrame.o -MD -MP -MF $(DEPDIR)/bin_XSection-MvXsectFrame.Tpo -c -o bin_XSection-MvXsectFrame.o `test -f 'MvXsectFrame.cc' || echo '$(srcdir)/'`MvXsectFrame.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-MvXsectFrame.Tpo $(DEPDIR)/bin_XSection-MvXsectFrame.Po
@@ -483,6 +552,22 @@ bin_XSection-MvXsectFrame.obj: MvXsectFrame.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-MvXsectFrame.obj `if test -f 'MvXsectFrame.cc'; then $(CYGPATH_W) 'MvXsectFrame.cc'; else $(CYGPATH_W) '$(srcdir)/MvXsectFrame.cc'; fi`
 
+bin_XSection-Vprofile.o: Vprofile.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-Vprofile.o -MD -MP -MF $(DEPDIR)/bin_XSection-Vprofile.Tpo -c -o bin_XSection-Vprofile.o `test -f 'Vprofile.cc' || echo '$(srcdir)/'`Vprofile.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-Vprofile.Tpo $(DEPDIR)/bin_XSection-Vprofile.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Vprofile.cc' object='bin_XSection-Vprofile.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-Vprofile.o `test -f 'Vprofile.cc' || echo '$(srcdir)/'`Vprofile.cc
+
+bin_XSection-Vprofile.obj: Vprofile.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-Vprofile.obj -MD -MP -MF $(DEPDIR)/bin_XSection-Vprofile.Tpo -c -o bin_XSection-Vprofile.obj `if test -f 'Vprofile.cc'; then $(CYGPATH_W) 'Vprofile.cc'; else $(CYGPATH_W) '$(srcdir)/Vprofile.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-Vprofile.Tpo $(DEPDIR)/bin_XSection-Vprofile.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Vprofile.cc' object='bin_XSection-Vprofile.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-Vprofile.obj `if test -f 'Vprofile.cc'; then $(CYGPATH_W) 'Vprofile.cc'; else $(CYGPATH_W) '$(srcdir)/Vprofile.cc'; fi`
+
 bin_XSection-Xsect.o: Xsect.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-Xsect.o -MD -MP -MF $(DEPDIR)/bin_XSection-Xsect.Tpo -c -o bin_XSection-Xsect.o `test -f 'Xsect.cc' || echo '$(srcdir)/'`Xsect.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-Xsect.Tpo $(DEPDIR)/bin_XSection-Xsect.Po
@@ -739,9 +824,18 @@ $(share_DATA): $(local_sharedir)/%: %
 	${INSTALL} $<  $(local_sharedir)
 
 icons:
-	${INSTALL} XSECTION.xpm  $(local_iconsdir)
-	${INSTALL} XAVERAGE.xpm  $(local_iconsdir)
-	${INSTALL} VPROFILE.xpm  $(local_iconsdir)
+	${INSTALL} MXAVERAGE.xpm $(local_iconsdir)
+	${INSTALL} MXAVERAGEVIEW.xpm $(local_iconsdir)
+	${INSTALL} MVPROFILE.xpm $(local_iconsdir)
+	${INSTALL} MVPROFILEVIEW.xpm $(local_iconsdir)
+	${INSTALL} MXSECTION.xpm $(local_iconsdir)
+	${INSTALL} MXSECTIONVIEW.xpm $(local_iconsdir)
+	${INSTALL} AVERAGE.xpm $(local_iconsdir)
+	${INSTALL} AVERAGEVIEW.xpm $(local_iconsdir)
+	${INSTALL} VPROF.xpm $(local_iconsdir)
+	${INSTALL} VPROFVIEW.xpm $(local_iconsdir)
+	${INSTALL} XSECT.xpm $(local_iconsdir)
+	${INSTALL} XSECTVIEW.xpm $(local_iconsdir)
 
 bin:
 	ln -s ../../bin bin
diff --git a/src/XSection/MvXsectFrame.cc b/src/XSection/MvXsectFrame.cc
index 344c347..d388cb6 100644
--- a/src/XSection/MvXsectFrame.cc
+++ b/src/XSection/MvXsectFrame.cc
@@ -7,1318 +7,646 @@
 
  ***************************** LICENSE END *************************************/
 
-#include <stdio.h>
 #include "MvXsectFrame.h"
 
-const char *stringModes[] =
-{ "AVERAGE_NS","AVERAGE_EW","XSECT",
-  "VP_POINT","VP_POINT","VP_AREA","VP_AREA2",0};
-
-const double cCDR = atan(1.0)/45.0; //-- conversion factor Degrees->Radians
-                                  //-- atan(1)/45 = (PI/4)/45 = PI/180
-
 // convienience method, (vk/1999-08-05)
 // checks if x is between r1 and r2
 bool isWithinRange( double r1, double r2, double x )
 {
-    if( r1 <= x && x <= r2 )
-        return true;
+   if( r1 <= x && x <= r2 )
+      return true;
 
-    if( r2 <= x && x <= r1 )
-        return true;
+   if( r2 <= x && x <= r1 )
+      return true;
 
-    return false;
+   return false;
 }
 
 // Deletes all info about a parameter, including all space used
 // for the level data.
 ParamInfo::~ParamInfo()
 {
-  LevelIterator ii;
+   LevelIterator ii;
 
-  for ( ii = levels_.begin();ii != levels_.end(); ii++ )
-    {
+   for ( ii = levels_.begin();ii != levels_.end(); ii++ )
+   {
       if ((*ii).second )
-	delete [] (*ii).second->xvalues_;
-    }
+         delete [] (*ii).second->xvalues_;
+   }
+}
+
+bool ParamInfo::IsSurface()
+{
+   return (LevelType() == "sfc" || NrLevels() < 1) ? true : false;
 }
 
 string ParamInfo::ExpVerTitle()
 {
-  if( expver_ == "_" )      //-- missing ExpVer is stored as "_"
-    return string("");
-  else
-    return string( "Expver " ) + expver_;
+   if( expver_ == "_" )      //-- missing ExpVer is stored as "_"
+      return string("");
+   else
+      return string( "Expver " ) + expver_;
 }
 
 // Fill in data into a level in the LevelMap. Generate the level if needed,
 // and delete any old values from the level.
 void ParamInfo::Level(double* x,string lev, int n,int modlev)
 {
-  double flev = atof(lev.c_str() );
-
-  //	Save date for one level
-  LevelIterator ii = levels_.find(lev);
+   double flev = atof(lev.c_str() );
 
-  if ( ii == levels_.end() )
-    {
+   //	Save date for one level
+   LevelIterator ii = levels_.find(lev);
+   if ( ii == levels_.end() )
+   {
       //levels_.insert(pair<string,LevelInfo*>(lev,new LevelInfo(flev,modlev)));
       levels_[ lev ] = new LevelInfo( flev, modlev );
       ii = levels_.find(lev);
-    }
-  else
-    {
+   }
+   else
+   {
       if ( (*ii).second->xvalues_ )
-	{
-	  delete [] (*ii).second->xvalues_;
-	  (*ii).second->xvalues_ = 0;
-	}
-      if ( (*ii).second->yvalue_ == DONTCARE )
-	(*ii).second->yvalue_ = modlev ? flev : flev * 100;
-    }
-
-  if (  (*ii).second->xvalues_ == 0 )
-    (*ii).second->xvalues_ = new double[n];
+      {
+         delete [] (*ii).second->xvalues_;
+         (*ii).second->xvalues_ = 0;
+      }
+      if ( (*ii).second->yvalue_ == XMISSING_VALUE )
+         (*ii).second->yvalue_ = modlev ? flev : flev * 100;
+   }
 
-  double *xx = (*ii).second->xvalues_;
-  for (int i = 0; i<n; i++)
-    xx[i] = x[i];
+   if (  (*ii).second->xvalues_ == 0 )
+      (*ii).second->xvalues_ = new double[n];
 
+   double *xx = (*ii).second->xvalues_;
+   for (int i = 0; i < n; i++)
+      xx[i] = x[i];
 }
 
 void ParamInfo::UpdateLevels(int modlev)
 {
-  LevelIterator ii;
+   LevelIterator ii;
 
-  for ( ii = levels_.begin();ii != levels_.end(); ii++ )
-    {
+   for ( ii = levels_.begin();ii != levels_.end(); ii++ )
+   {
       double flev = atof((*ii).first.c_str());
       (*ii).second->UpdateLevel(flev,modlev);
-    }
+   }
+}
+
+void ParamInfo::AddLevel(string lev)
+{
+   if ( levels_.find(lev) == levels_.end() )
+      levels_[ lev ] = new LevelInfo;
+}
+
+MvDate ParamInfo::ReferenceDate()
+{
+   double tt = date_ + time_/2400.; //YYYYMMDD + HHMM
+   return MvDate(tt);
 }
+
+MvDate ParamInfo::VerificationDate()
+{
+   double tt = date_ + time_/2400. + step_/24.; //YYYYMMDD + HHMM + HH
+   return MvDate(tt);
+}
+
 /////////////////// ApplicationInfo /////////////////////
+
+// Constructor
+ApplicationInfo::ApplicationInfo() :
+                    logax_(false),
+                    x1_(0), x2_(0), y1_(0), y2_(0),
+                    gridNS_(0), gridEW_(0),
+                    PresTop_(0),PresBot_(0),
+                    nrPoints_(0), nrLevels_(0), modlev_(XS_PL),
+                    interpolate_(true), viaPole_(false), haveLNSP_(false)
+{ }
+
 // Update the levels according to the modlev parameter.
 // This info is not known when the parameters and levels were added.
-
-void ApplicationInfo::UpdateLevels(ParamMap &params,int modlev)
+void ApplicationInfo::updateLevels(ParamMap &params,int modlev)
 {
-  ParamIterator ii;
-  for ( ii = params.begin(); ii != params.end(); ii++)
-    (*ii).second->UpdateLevels(modlev);
+   ParamIterator ii;
+   for ( ii = params.begin(); ii != params.end(); ii++)
+      (*ii).second->UpdateLevels(modlev);
 }
 
-
 void ApplicationInfo::Grid( double ns, double ew )
 {
-  gridNS_ = ns;
-  gridEW_ = ew;
+   gridNS_ = ns;
+   gridEW_ = ew;
 
-  if ( ns == cValueNotGiven || ew == cValueNotGiven )
-    {
+   if ( ns == cValueNotGiven || ew == cValueNotGiven )
+   {
       //-- has to be synchronised with averageAlong() (020731/vk)
       gridNS_ = gridEW_ = 1.0;
-    }
+   }
 }
 
-// Fill lat/long values if this is an XSection.
-
-void ApplicationInfo::setLine(double* lon, double* lat)
+// Fill lat/long values if this is an XSection
+void ApplicationInfo::computeLine(double* lon, double* lat)
 {
-  double  dx = double( x2_ - x1_ ) / double(nrPoints_ -1);
-  double  dy = double( y2_ - y1_ ) / double(nrPoints_ -1);
+   double  dx = double( x2_ - x1_ ) / double(nrPoints_ -1);
+   double  dy = double( y2_ - y1_ ) / double(nrPoints_ -1);
 
-  lon[0] = x1_;
-  lat[0] = y1_;
+   lon[0] = x1_;
+   lat[0] = y1_;
 
-  if( viaPole() )
-    {
+   if( viaPole() )
+   {
       double lat_k_prev = y1_;            //-- xsect line over a pole
-//      double lon_0      = x1_;
       bool overThePole  = false;
 
       for( int k = 1;  k< nrPoints_; k++ )
-	{
-	  lon[k] = lon[k-1] + dx;
-
-	  double lat_k = lat_k_prev + dy;
-
-	  if( ( lat_k < -90.0 || lat_k > 90.0 ) && ! overThePole )
-	    {
-	      lat_k_prev += dy;           //-- compensate for mirroring
-
-	      dy = -dy;                   //-- start mirroring backwards
-	      if( lat_k < -90.0 )
-		lat_k = -180.0 - lat_k;   //-- fix for South Pole
-	      else
-		lat_k = 180.0 - lat_k;    //-- fix for North Pole
-
-	      if( dx == 0 )
-		{
-		  lon[k] = x1_ + 180.0;   //-- straight over the pole
-		  if( lon[k] > 360.0 )    //-- ensure inside normal range
-		    lon[k] = lon[k] - 360.0;
-		}
-
-	      overThePole = true;
-	    }
-
-	  lat[k] = lat_k;
-	  lat_k_prev += dy;
-	  //cout << k << "\t" << lat[k] << "\t" << lon[k] << endl;
-	}
-    }
-  else
-    {
+      {
+         lon[k] = lon[k-1] + dx;
+         double lat_k = lat_k_prev + dy;
+         if( ( lat_k < -90.0 || lat_k > 90.0 ) && ! overThePole )
+         {
+            lat_k_prev += dy;           //-- compensate for mirroring
+            dy = -dy;                   //-- start mirroring backwards
+            if( lat_k < -90.0 )
+               lat_k = -180.0 - lat_k;   //-- fix for South Pole
+            else
+               lat_k = 180.0 - lat_k;    //-- fix for North Pole
+
+            if( dx == 0 )
+            {
+               lon[k] = x1_ + 180.0;   //-- straight over the pole
+               if( lon[k] > 360.0 )    //-- ensure inside normal range
+                  lon[k] = lon[k] - 360.0;
+            }
+
+            overThePole = true;
+         }
+
+         lat[k] = lat_k;
+         lat_k_prev += dy;
+      }
+   }
+   else
+   {
       for (int k = 1;  k < nrPoints_; k++) //-- no pole
-	{
-	  lon[k] = lon[k-1] + dx;
-	  lat[k] = lat[k-1] + dy;
-	}
-    }
+      {
+         lon[k] = lon[k-1] + dx;
+         lat[k] = lat[k-1] + dy;
+      }
+   }
 }
 
-void ApplicationInfo::mapValues(ParamInfo &par_uv, ParamInfo *par_u,
-				ParamInfo *par_v)
+// Generate data values.
+// Only ever called if modlev_ != XS_ML_LNSP, ie if we use pressure levels
+// or UKMO model levels
+void ApplicationInfo::InterpolateVerticala( double **cp,ParamInfo *param )
 {
-  //	Map U/V into planes
-  LevelMap  lmap_u = par_u->Levels();
-  LevelMap  lmap_v = par_v->Levels();
-  LevelIterator uu = lmap_u.begin(), vv = lmap_v.begin();
-  double *uValues,*vValues;
-
-  double *valuesuv = new double[nrPoints_];
-
-  for (; uu != lmap_u.end(), vv != lmap_v.end();uu++,vv++)
-    {
-      uValues = (*uu).second->XValues();
-      vValues = (*vv).second->XValues();
-
-      for ( int i=0; i < nrPoints_; i++)
-	{
-	  if (uValues[i] < BIGDOUBLE && vValues[i] < BIGDOUBLE)
-	    {
-	      if (currentHC_ == PERPENDICULAR )
-		valuesuv[i] = -uValues[i]*ansin_ + vValues[i] * ancos_;
-	      else if (currentHC_ == PARALLEL )
-		valuesuv[i] = uValues[i]*ancos_ + vValues[i] * ansin_;
-	      else
-		valuesuv[i] =  sqrt (uValues[i] * uValues[i] +
-				     vValues[i] * vValues[i]);
-	    }
-	  else
-	    valuesuv[i] = MAXDOUBLE;
-	}
-
-      par_uv.Level(valuesuv,(*uu).first,nrPoints_,modlev_);
-    }
-  delete [] valuesuv;
-  return;
+   if ( ! interpolate_ )
+   {
+      this->getLevelValues(param,cp);
+      return;
+   }
+
+   int i;
+   double lpa,pk;
+   LevelInfo *firstlev, *nextlev;
+   for ( int k = 0; k < nrLevels_; k++ )
+   {
+      // Invert Model level data, except for UKMO
+      //kmodel = (modlev_ == cML_UKMO_ND) ? k : (nrLevels_)-k-1;
+
+      pk = GetInterpolatedYValue(k);
+
+      if ( findPressure(param->Levels(),pk,firstlev, nextlev) )
+      {
+         if ( modlev_ )
+            lpa = ( pk - firstlev->YValue()) / (nextlev->YValue() - firstlev->YValue());
+         else
+            if ( logax_ )
+               lpa = ( pk - firstlev->YValue()) / (nextlev->YValue() - firstlev->YValue());
+            else
+               lpa = log( pk/firstlev->YValue()) / log(nextlev->YValue()/firstlev->YValue());
+
+         double *xvals = firstlev->XValues();
+         double *xnext = nextlev->XValues();
+
+         for (i = 0; i < nrPoints_; i++ )
+         {
+            if ( xvals[i] < BIGDOUBLE && xnext[i] < BIGDOUBLE )
+               cp[k][i] = xvals[i] + ( xnext[i] - xvals[i]) *lpa; //replace k with kmodel
+            else
+               cp[k][i] = XMISSING_VALUE; // replace k with kmodel
+         }
+      }
+      else
+         for (i = 0;i < nrPoints_; i++)
+            cp[k][i] = XMISSING_VALUE;
+   }
 }
 
-// Compute number of points etc.
-int ApplicationInfo::EvaluateBlot(double L1, double L2, double R1, double R2,
-				  double P1, double P2 )
+// Generate data values.
+// Only ever called if modlev_ == XS_ML_LNSP ie if we use non-UKMO model levels
+void ApplicationInfo::InterpolateVerticalb( MvField &field, double **cp, ParamInfo *param, double *splin)
 {
-  PresBot_ = 100.*P2;
-  PresTop_ = 100.*P1;
+   if ( ! interpolate_ )
+   {
+      this->getLevelValues(param,cp);
+      return;
+   }
 
-  nrLevels_ = 85;
+   int i;
+   double zdp = ( PresBot_ - PresTop_)/ ( nrLevels_ - 1 );
+   double deltalog,lpa;
+   double *sp = new double[nrPoints_];
+   LevelInfo *firstlev,*nextlev;
+   double  firstval, nextval;
 
-  x1_ = L1;
-  x2_ = L2;
-  y1_ = R1;
-  y2_ = R2;
+   if ( logax_ )
+      deltalog = (log10(PresBot_) - log10(PresTop_))/(nrLevels_ - 1);
 
-  if ( y1_ > 90. || y1_ < -90. || y2_ > 90. || y2_ < -90.)
-    {
-      if( mode_ == XSECT )
-	viaPole_ = true;
-      else
-	return 0;
-    }
-
-  if( mode_ == AVERAGE_NS  || mode_ == AVERAGE_EW )
-    {
-      int numberNS_ = (int)( fabs( (y1_-y2_)/gridNS_ ) + 0.0000001) + 1;  // avoid precision errors
-      int numberEW_ = (int)( fabs( (x2_-x1_)/gridEW_ ) + 0.0000001) + 1;  // avoid precision errors
-      nrPoints_ = ( mode_ == AVERAGE_NS ) ? numberEW_ : numberNS_;
-    }
-  else if ( mode_ == VP_POINT || mode_ == VP_GRIDPOINT || mode_ == VP_AREA || mode_ == VP_AREA2 )
-    {
-      nrPoints_ = 1;
-    }
-  else
-    {
-      double	dellat = ABS(y2_-y1_), dellon = ABS(x2_-x1_);
-      double	latm = (y1_+y2_)/2.;
-      double	dellona = dellon*cos( cCDR*latm );
-
-      dist_ = 110442.3*sqrt (dellat*dellat + dellona*dellona);
+   for (i = 0; i < nrPoints_; i++)
+      sp[i] = exp(splin[i]);
 
-      double angle = atan2 (y2_ - y1_,x2_ - x1_);
-      ancos_ = cos (angle);
-      ansin_ = sin (angle);
+   for ( int k = 0; k < nrLevels_; k++ )
+   {
+      double pk = logax_ ? exp((log10(PresTop_) + k * deltalog) *log(10.0)) : PresTop_ + k * zdp;
+
+      // Invert Model level data
+      //kmodel = nrLevels_-k-1;
+      for ( i =0; i < nrPoints_;i++)
+      {
+         if ( sp[i] > BIGDOUBLE )
+         {
+            cp[k][i] = XMISSING_VALUE;
+            continue;
+         }
 
-      int i = int( sqrt( dellon*dellon + dellat*dellat )/MAX(gridNS_,gridEW_));
+         if ( findModelPressure( param->Levels(), pk, sp[i], field, firstlev,nextlev, firstval, nextval) )
+         {
+            lpa = logax_ ? (pk - firstval)/(nextval - firstval) : log(pk/firstval)/log(nextval/firstval);
 
-      nrPoints_ = MAX(i,64);
-    }
+            cp[k][i] = firstlev->XValues()[i] + ( nextlev->XValues()[i] - firstlev->XValues()[i] ) * lpa;
+         }
+         else
+            cp[k][i] = XMISSING_VALUE;
+      }
+   }
 
-  return nrPoints_;
+   delete [] sp;
 }
 
 
-// We have all the values for one parameter ( for the same date, time,step and expver).
-// Call functions to write the values to netcdf file.
-// Note that only curveValues() requires the min/max_level parameters. 
-bool ApplicationInfo::generateData(ParamMap &params, MvNetCDF &cdf,MvField &field,
-				   const string& key, double *splin, double *min_level, double *max_level)
+bool ApplicationInfo::findPressure( LevelMap &lmap, double value, LevelInfo *&l1, LevelInfo *&l2)
 {
-  bool ret_val = false;
+   LevelIterator ii = lmap.begin();
+   LevelInfo *tmp1 = (*ii).second, *tmp2;
+   ii++;
 
-  ParamIterator ii = params.find(key);
-  if ( ii == params.end() )
-    return ret_val;
+   for (; ii != lmap.end(); ii++ )
+   {
+      tmp2 = (*ii).second;
+      if ( isWithinRange( tmp1->YValue(), tmp2->YValue(), value ) )
+      {
+         l1 = tmp1;
+         l2 = tmp2;
+         return true;
+      }
 
-  int param = (*ii).second->Parameter();
+      tmp1 = tmp2;
+   }
 
-  if ( (mode_ == VP_POINT || mode_ == VP_GRIDPOINT || mode_ == VP_AREA || mode_ == VP_AREA2) && param != LnPress )
-    ret_val = curveValues(params,cdf,key,field,splin, min_level, max_level);
-  else if ( mode_ == XSECT && param != LnPress)
-    ret_val = generateXsectData(params,cdf,key,field, splin);
-  else if ( mode_ == XSECT && modlev_ == 1 && param == LnPress )
-    ret_val = generateLnSP(cdf,key,splin);
-  else  if ( (mode_ == AVERAGE_NS || mode_ == AVERAGE_EW) &&
-	     param != LnPress )
-    ret_val = generateAverageData(params,cdf,key,field, splin);
-  else // param probably lnsp
-    return true;
+   return false;
+}      //kmodel = k;
 
-  return ret_val;
 
-}
 
-// Write curve values to file ( for vertical profile ).
-// We also make a note of the min and max levels so that later on we can
-// correctly construct the Y-axis
-bool ApplicationInfo::curveValues(ParamMap &params,MvNetCDF& cdf,
-				  const string& key,MvField &field,
-				  double *splin, double *min_level, double *max_level)
+bool ApplicationInfo::findModelPressure( LevelMap &lmap, double value, double splin,
+                                         MvField &field, LevelInfo *&l1, LevelInfo *&l2,
+                                         double &val1,double &val2 )
 {
-    char titlestr[150];
-    ParamIterator ii = params.find(key);
-    LevelMap lmap = (*ii).second->Levels();
-    LevelIterator jj;
-    MvNcVar *ncx;
-
-
-    if ( ii == params.end() )
-        return false;
-
-    ParamInfo *par = (*ii).second;
-
-
-    int dimsize;
-
-    // Generate the netCDf axes variables
-    //if ( !GenerateNetcdfAxesVariables(params,cdf,key) )
-        //return false;
-
-    double *y_values = new double[lmap.size()];
-    double *x_values = new double[lmap.size()];
-    int i = 0;
-    double oneY;
-    *min_level =  999999;
-    *max_level = -999999;
-
-    for ( jj = lmap.begin(); jj != lmap.end(); jj++)
-    {
-        if ( modlev_ == 1)
-            //oneY = field.modelLevelToPressure(*splin,(*jj).second->YValue() -1 )/100.;
-            oneY = field.meanML_to_Pressure_byLNSP(*splin,(int)((*jj).second->YValue()) -1 )/100.;
-        else if ( modlev_ == -1 || modlev_ == cML_UKMO_ND )
-            oneY = (*jj).second->YValue();
-        else
-        {
-            oneY = (*jj).second->YValue()/100;
-            if ( oneY < (PresTop_/100) || oneY > (PresBot_/100) )
-                continue;
-        }
-
-        y_values[i] = oneY;
-        x_values[i] = ((*jj).second->XValues())[0];
-        i++;
-
-
-        // update the min/max y values
-        
-        if (oneY < *min_level)
-            *min_level = oneY;
+   LevelIterator ii = lmap.begin();
+   double tmpval1, tmpval2;
+   LevelInfo *tmpl1, *tmpl2;
 
-        if (oneY > *max_level)
-            *max_level = oneY;
-    }
+   tmpl1 = (*ii).second;
+   ii++;
+   tmpval1 = field.meanML_to_Pressure_bySP(splin,(int)(tmpl1->YValue()));
 
-    dimsize = i;
-
-
-    // add the 'levels' variable to the netCDF
-
-    vector<long> levels_dimsize(1,dimsize);
-    vector<string> levels_name(1,"levels");
-    MvNcVar *nclevels = cdf.addVariable(levels_name[0],ncDouble,levels_dimsize,levels_name);
-    nclevels->addAttribute("units", "hPa");
-    nclevels->addAttribute("positive", "down");
-    nclevels->put(y_values,(long)dimsize);
-
-
-
-    // add the 'values' variable to the netCDF
-
-    vector<long> values_dimsize(1,dimsize);
-    vector<string> values_name(1,"values");
-    MvNcVar *ncvalues = cdf.addVariable(values_name[0],ncDouble,values_dimsize,values_name);
-    ncvalues->put(x_values,(long)dimsize);
-
-
-
-    // add the coordinates variables to the netCDF
-
-    vector<long> coord_dimsize(1,1);
-    vector<string> coord_name(1,"latitude");
-    MvNcVar *nccoord = cdf.addVariable(coord_name[0],ncDouble,coord_dimsize,coord_name);
-    nccoord->addAttribute("standard_name", "latitude");
-    nccoord->addAttribute("units", "degrees_north");
-
-    nccoord->put(&y1_, 1);
-
-    coord_name[0] = "longitude";
-    nccoord = cdf.addVariable(coord_name[0],ncDouble,coord_dimsize,coord_name);
-    nccoord->addAttribute("standard_name", "longitude");
-    nccoord->addAttribute("units", "degrees_east");
-    nccoord->put(&x1_, 1);
-
-
-    ncx = cdf.addVariable(key.c_str(), ncDouble,2,dimsize);
-    ncx->addAttribute("MV_VERB","CURVE");
-    ncx->addAttribute("_REQUEST_NAMES","DATA_X_VALUES/DATA_Y_VALUES");
-
-    // Add data for matching
-    AddMetadata(ncx,key);
-    AddLevels(ncx,par);
-
-    SetArea(ncx);
-
-    if ( mode_ == VP_POINT )
-        sprintf(titlestr,"Vertical profile of %s %d %02d step %d %s point (%.1f,%.1f)",
-            par->ParamName().c_str(), par->Date(),par->Time(),par->Step(),
-            par->ExpVerTitle().c_str(), y1_, x1_ );
-    else if ( mode_ == VP_GRIDPOINT )
-        sprintf(titlestr,"Vertical profile of %s %d %02d step %d %s nearest gridpoint (%.2f,%.2f)",
-            par->ParamName().c_str(), par->Date(),par->Time(),par->Step(),
-            par->ExpVerTitle().c_str(), y1_,x1_ );
-    else if ( mode_ == VP_AREA )
-        sprintf(titlestr,"Vertical profile of %s %d %02d step %d %s area [%.1f,%.1f,%.1f,%.1f]",
-            par->ParamName().c_str(), par->Date(),par->Time(),par->Step(),
-            par->ExpVerTitle().c_str(), y1_, x1_, y2_,x2_ );
-    else //-- VP_AREA2
-        sprintf(titlestr,"Vertical profile of %s %d %02d step %d %s area2 [%.1f,%.1f,%.1f,%.1f]",
-        par->ParamName().c_str(), par->Date(),par->Time(),par->Step(),
-        par->ExpVerTitle().c_str(), y1_,x1_, y2_,x2_ );
-
-    //ncx->addAttribute("MV_TITLE",titlestr);
-    cdf.addAttribute("title",titlestr);
-
-
-    if ( logax_ )
-        ncx->addAttribute("AXIS_TICK_POSITIONING","LOGARITHMIC");
+   for (; ii != lmap.end(); ii++ )
+   {
+      tmpl2 = (*ii).second;
+      tmpval2 = field.meanML_to_Pressure_bySP(splin,(int)(tmpl2->YValue()));
 
-    ncx->put(x_values,1, dimsize);
-    ncx->setCurrent(1);
-    ncx->put(y_values,1,dimsize);
+      if ( isWithinRange( tmpval1, tmpval2, value ) )
+      {
+         l1 = tmpl1; l2 = tmpl2;
+         val1 = tmpval1; val2 = tmpval2;
+         return true;
+      }
 
-    delete [] x_values;
-    delete [] y_values;
+      tmpl1 = tmpl2;
+      tmpval1 = tmpval2;
+   }
 
-    return true;
+   l1 = tmpl1;
+   return false;
 }
 
-
-
-// Generate data for Xsection. If some parameters are generated together, like in some cases
-// U&V or u,v&w, just return if we have not got all the params. Otherwise, generate the
-// data according to the values set.
-bool ApplicationInfo::generateXsectData(ParamMap &params,MvNetCDF &cdf, const string& key,
-					MvField& field, double *splin)
+void ApplicationInfo::scaleVelocity(ParamInfo *par)
 {
-  ParamIterator ii = params.find(key);
-  if ( ii == params.end() )
-    return false;
+   LevelMap lmap = par->Levels();
+   LevelIterator ii = lmap.begin();
 
-  ParamInfo *par = (*ii).second;
+   // Compute distance
+   double dellat = ABS(y2_-y1_), dellon = ABS(x2_-x1_);
+   double latm = (y1_+y2_)/2.;
+   double dellona = dellon*cos( cCDR*latm );
+   double dist = 110442.3*sqrt (dellat*dellat + dellona*dellona);
 
-  // Since the data are sorted by parameter, we wait until we get the
-  // highest interesting parameter before doing the work.
-  if ( foundUV_ && par->Parameter() == U_FIELD ||
-       (( foundW_ && (par->Parameter() == U_FIELD ||
-		      par->Parameter() == V_FIELD ) ) && !foundUV_) )
-    return true;
+   double hscale = 21./dist;
+   double vscale = 12./(PresBot_ - PresTop_);
 
-  // Generate the netCDf axes variables
-  if ( !GenerateNetcdfAxesVariables(params,cdf,key) )
-	return false;
+   if (modlev_ == XS_ML )
+      vscale = 12./(100 * 1000);
 
-  // Generate the netCDF parameter variable
-  if ( foundUV_ && par->Parameter() == V_FIELD )
-    return windValues(params,cdf,key,field,splin);
+   double factor = -vscale/hscale;
+   double *values;
+   for ( ; ii  != lmap.end(); ii++ )
+   {
+      values = (*ii).second->XValues();
 
-  else if ( foundW_ && par->Parameter() == W_FIELD )
-    return velocityValues(params,cdf,key,field,splin);
+      for (int i=0; i<nrPoints_; i++)
+      {
+         if (values[i] < BIGDOUBLE)
+            values[i] *= factor;
+         else
+            values[i] = MAXDOUBLE;
+      }
+   }
 
-  else
-    return contourValues(params,cdf,key,field,splin);
+   return;
 }
 
-// Generate data for average aplication.
-bool ApplicationInfo::generateAverageData(ParamMap &params,MvNetCDF &cdf,
-					const string& key,
-					MvField& field, double *splin)
+void ApplicationInfo::setMinMaxLevels( double P1, double P2, int nlevel )
 {
-  // Generate the netCDf axes variables
-  if ( !GenerateNetcdfAxesVariables(params,cdf,key) )
-	return false;
+    PresBot_ = P1;
+    PresTop_ = P2;
 
-  // Generate the netCDF parameter variable
-  return contourValues(params,cdf,key,field,splin);
+    // If interpolate=true, nrLevels_ is hardcoded
+    nrLevels_ = (!nlevel || interpolate_) ? 85 : nlevel;
 }
 
-// Generate contour data ( for xsection or average).
-bool ApplicationInfo::contourValues(ParamMap &params,MvNetCDF &cdf,
-				    const string& key,
-				    MvField& field, double *splin)
+void ApplicationInfo::getMinMaxLevels( double& P1, double& P2, int& nlevel )
 {
-  int i;
-  char titlestr[250];
-
-  ParamIterator ii = params.find(key);
-  if ( ii == params.end() )
-    return false;
-
-  ParamInfo *par = (*ii).second;
-
-  int nrLevels = NrLevels(par);
-
-  double **cp =	new double* [ nrLevels ];
-  for (i=0; i < nrLevels; i++)
-    cp[i] = new double [ nrPoints_ ];
-
-
-  if( modlev_ != 1 )
-    InterpolateVerticala(cp,par);
-  else
-    InterpolateVerticalb(field,cp,par,splin);
-
-  // Generate NetCDF Parameter variable
-  vector<long> dimsize(2);
-  vector<string> vname(2);
-  dimsize[0] = nrLevels;
-  dimsize[1] = nrPoints_;
-  vname[0]   = "levels";
-  vname[1]   = "longitude";
-  MvNcVar *ncvar = cdf.addVariable(key.c_str(),ncDouble,dimsize,vname);
-
-  ncvar->addAttribute("MV_VERB","PCONT");
-  ncvar->addAttribute("missing_value",DONTCARE);
-
-  // Add data for matching
-  AddMetadata(ncvar,key);
-
-  AddLevels(ncvar,par);
-  SetArea(ncvar);
-
-  if ( mode_ == AVERAGE_EW )
-    sprintf(titlestr,"Average of %s %d %02d step %d %s (%.1f%s-%.1f%s)",
-	    par->ParamName().c_str(), par->Date(),par->Time(),par->Step(),
-	    par->ExpVerTitle().c_str(),
-	    (x1_< 0) ? -x1_ : x1_, (x1_<0) ? "W" : "E",
-	    (x2_< 0) ? -x2_ : x2_, (x2_<0) ? "W" : "E"
-	    );
-  else if ( mode_ == AVERAGE_NS )
-    sprintf(titlestr,"Average of %s %d %02d step %d %s (%.1f%s-%.1f%s)",
-	    par->ParamName().c_str(), par->Date(),par->Time(),par->Step(),
-	    par->ExpVerTitle().c_str(),
-	    (y1_< 0) ? -y1_ : y1_, (y1_<0) ? "S" : "N",
-	    (y2_< 0) ? -y2_ : y2_, (y2_<0) ? "S" : "N"
-	    );
-  else  //-- XSECT
-    sprintf(titlestr,"Cross section of %s %d %02d step %d %s",
-	    par->ParamName().c_str(), par->Date(),par->Time(),par->Step(),
-	    par->ExpVerTitle().c_str() );
-
-  //ncvar->addAttribute("MV_TITLE",titlestr);
-  cdf.addAttribute("title",titlestr);
-
-  if ( logax_ )
-    ncvar->addAttribute("AXIS_TICK_POSITIONING","LOGARITHMIC");
-
-  setYValues(ncvar,par);
-
-  for ( i=0; i< nrLevels ;i++)
-    {
-      ncvar->setCurrent(i);
-      ncvar->put(cp[i],1,(long)nrPoints_);
-      delete [] cp[i];
-    }
-
-  delete [] cp;
-
-  return true;
+    P1 = PresBot_;
+    P2 = PresTop_;
+    nlevel = nrLevels_;
 }
 
-
-// Generate data for plotting lnsp curve in xsection view.
-bool ApplicationInfo::generateLnSP(MvNetCDF &cdf, const string& key, double *splin)
-{
-    double low = PresTop_/100., high = PresBot_/100.;
-
-    MvNcVar *ncx = cdf.addVariable(key.c_str(),ncDouble,2,nrPoints_);
-    ncx->addAttribute("MV_VERB","CURVE");
-    ncx->addAttribute("_REQUEST_NAMES","DATA_X_VALUES/DATA_Y_VALUES");
-
-
-    ncx->addAttribute("BOTTOM_PRESSURE",high);
-    ncx->addAttribute("TOP_PRESSURE",low);
-    if ( logax_ )
-        ncx->addAttribute("AXIS_TICK_POSITIONING","LOGARITHMIC");
-
-    // Add data for matching
-    AddMetadata(ncx,key);
-    SetArea(ncx);
-
-    double *y1_values = new double[nrPoints_];
-    double *y2_values = new double[nrPoints_];
-    double *x_values  = new double[nrPoints_];
-
-    for ( int i = 0; i < nrPoints_; i++ )
-    {
-        x_values[i] = i-180;
-        double w = exp(splin[i]);
-
-        if ( w > BIGDOUBLE )
-            y1_values[i] = high;
-        else
-        {
-            w /= 100;
-            w = MAX(low,w);
-            w = MIN(high,w);
-            y1_values[i] = w;
-        }
-        y2_values[i] = 1050;   // XXXXXXXX
-    }
-
-
-
-
-    // add the 'x_values' variable to the netCDF
-
-    vector<long> x_dimsize(1,nrPoints_);
-    vector<string> x_name(1,"orography_x_values");
-    MvNcVar *ncxx = cdf.addVariable(x_name[0],ncDouble,x_dimsize,x_name);
-    ncxx->put(x_values,(long)nrPoints_);
-
-    // add the 'y1_values' variable to the netCDF
-
-    vector<long> y1_dimsize(1,nrPoints_);
-    vector<string> y1_name(1,"orography_y1_values");
-    MvNcVar *ncy1 = cdf.addVariable(y1_name[0],ncDouble,y1_dimsize,y1_name);
-    ncy1->put(y1_values,(long)nrPoints_);
-
-
-    // add the 'y2_values' variable to the netCDF
-
-    vector<long> y2_dimsize(1,nrPoints_);
-    vector<string> y2_name(1,"orography_y2_values");
-    MvNcVar *ncy2 = cdf.addVariable(y2_name[0],ncDouble,y2_dimsize,y2_name);
-    ncy2->put(y2_values,(long)nrPoints_);
-
-
-    // add the 'values' variable to the netCDF
-
-    //vector<long> values_dimsize(1,nrPoints_);
-    //vector<string> values_name(1,"orography_values");
-    //MvNcVar *ncvalues = cdf.addVariable(values_name[0],ncDouble,values_dimsize,values_name);
-    //ncvalues->put(y_values,(long)nrPoints_);
-
-
-
-    ncx->put(x_values,1,nrPoints_);
-    ncx->setCurrent(1);
-    ncx->put(y1_values,1,nrPoints_);
-    ncx->setCurrent(2);
-    ncx->put(y2_values,1,nrPoints_);
-
-    delete [] x_values;
-    delete [] y1_values;
-    delete [] y2_values;
-
-    return true;
-}
-
-// Generate values for contouring u&v.
-bool ApplicationInfo::windValues(ParamMap &params,MvNetCDF &cdf,
-				 const string& key,
-				 MvField& field, double *splin)
+#if 0
+void ApplicationInfo::setYValues(MvNcVar *yvar, ParamInfo *par)
 {
-  int i;
-  char titlestr[150];
-
-  ParamIterator ii = params.find(key);
-  if ( ii == params.end() )
-    return false;
-
-  ParamInfo *par_v = (*ii).second;
-
-
+   int nrY = NrYValues(par);
+   double *yvalues = new double[nrY];
 
-  // The paraminfo contains the v field, now find the u field,
-  // substitute u for v in the key and find info in list.
-  char ukey[60];
-  sprintf(ukey,"p%03d%s",U_FIELD,key.substr(4,50).c_str() );
-  ii =  params.find(string(ukey));
-  if ( ii == params.end() )
-    return false;
-  ParamInfo *par_u = (*ii).second;
+   // Retrieve y values
+   if ( interpolate_ )
+   {
+      if ( modlev_ == XS_ML )
+      {
+         yvalues[0] = PresTop_;   //ncx2->setCurrent(ntime_);
+   //ncx2->put(x_values,1,nrPoints);
 
-  // Temporary used for holding mapped u/v values.
-  ParamInfo par_uv( par_v->Parameter()
-                  , par_v->Date()
-		  , par_v->Time()
-		  , par_v->Step()
-		  , par_v->ParamName()
-		  );
-
-  int nrLevels = NrLevels(&par_uv);
-
-  double **cp =	new double* [ nrLevels ];
-  for (i=0; i < nrLevels; i++)
-    cp[i] = new double [ nrPoints_ ];
-
-  int hc_perp = hcPerpendicular_, hc_int = hcIntensity_;
-
-  for (i = 0; i < hcNumber_;i++ )
-    {
-      if ( hc_perp )
-	{
-	  currentHC_ = hc_perp; hc_perp = 0;
-	}
-      else if ( hc_int )
-	{
-	  currentHC_ = hc_int; hc_int = 0;
-	}
-
-      mapValues(par_uv,par_u,par_v);
-
-      if( modlev_ != 1 )
-	InterpolateVerticala(cp,&par_uv);
+         yvalues[1] = PresBot_;
+      }
+      else if ( modlev_ == cML_UKMO_ND )
+      {
+         yvalues[1] = PresTop_;
+         yvalues[0] = PresBot_;
+      }
       else
-	InterpolateVerticalb(field,cp,&par_uv,splin);
-
-      // Generate the variables and fill with the uv values.
-      // as the variable name is the same.
-      MvNcVar *ncvar = cdf.addVariable(key,ncDouble,nrLevels,nrPoints_);
-
-      ncvar->addAttribute("MV_VERB","PCONT");
-
-      if ( logax_ )
-	ncvar->addAttribute("AXIS_TICK_POSITIONING","LOGARITHMIC");
-      // Add data for matching
-      AddMetadata(ncvar,key);
-
-      AddLevels(ncvar,&par_uv);
-      SetArea(ncvar);
-
-      setYValues(ncvar, &par_uv);
-
-      // Generate a title.
-      sprintf(titlestr,"Cross section of wind %s %d %02d step %d %s",
-	      (currentHC_ == hcPerpendicular_ ) ? "perp." : "intens.",
-	      par_v->Date(),par_v->Time(),par_v->Step(),
-	      par_v->ExpVerTitle().c_str() );
-      ncvar->addAttribute("MV_TITLE",titlestr);
-
-      // X values
-      for ( int j= 0; j < nrLevels; j++ )
-	{
-	  ncvar->setCurrent(j);
-	  ncvar->put(cp[j],1,(long)nrPoints_);
-	}
-    }
-
-  delete [] cp;
-
-  return true;
-}
-
-// Generate wind data for u,v&w.
-bool ApplicationInfo::velocityValues(ParamMap &params,MvNetCDF &cdf,
-				     const string& key,
-				     MvField& field, double *splin)
-{
-  int i;
-  char titlestr[150];
-  ParamIterator ii = params.find(key);
-  if ( ii == params.end() )
-    return false;
-  ParamInfo *par_w = (*ii).second;
-
-// The paraminfo contains the w field, now find the u and field,
-  // substitute u for v in the key and find info in list.
-   char ukey[60];
-   sprintf(ukey,"p%03d%s",U_FIELD,key.substr(4,50).c_str() );
-   ii =  params.find(string(ukey));
-   if ( ii == params.end() )
-     return false;
-
-   ParamInfo *par_u = (*ii).second;
-    sprintf(ukey,"p%03d%s",V_FIELD,key.substr(4,50).c_str() );
-    ii =  params.find(string(ukey));
-   if ( ii == params.end() )
-     return false;
-   ParamInfo *par_v = (*ii).second;
-
-
-
-   currentHC_ = hcParallel_;
-
-   scaleVelocity(par_w);
-
-   ParamInfo par_uv( par_v->Parameter()
-                   , par_v->Date()
-		   , par_v->Time()
-		   , par_v->Step()
-		   , par_v->ParamName()
-		   );
-   mapValues(par_uv,par_u,par_v);
-
-   int nrLevels = NrLevels(&par_uv);
-
-   double **cp = new double* [ nrLevels ];
-   for (i=0; i < nrLevels; i++)
-     cp[i] = new double [ nrPoints_ ];
-
-   if( modlev_ != 1 )
-     InterpolateVerticala(cp,&par_uv);
-   else
-     InterpolateVerticalb(field,cp,&par_uv,splin);
-
-
-   MvNcVar *ncvar = cdf.addVariable(key,ncDouble,2,
-				    nrLevels,nrPoints_);
-
-   ncvar->addAttribute("MV_VERB","PWIND");
-
-   // Add data for matching
-   AddMetadata(ncvar,key);
-
-   AddLevels(ncvar,&par_uv);
-   SetArea(ncvar);
-
-   if ( logax_ )
-     ncvar->addAttribute("AXIS_TICK_POSITIONING","LOGARITHMIC");
-
-   // Generate a title.
-   sprintf(titlestr,"Cross section of UVW parallel %d %02d step %d %s",
-	   par_v->Date(),par_v->Time(),par_v->Step(),
-	   par_v->ExpVerTitle().c_str() );
-   ncvar->addAttribute("MV_TITLE",titlestr);
-
-   setYValues(ncvar, &par_uv);
-
-   int j;
-   for ( j= 0; j < nrLevels; j++ )
-     {
-       ncvar->setCurrent(0,j);
-       ncvar->put(cp[j],1,1,(long)nrPoints_);
-     }
-
-   // Now for the velocity values.
-   if( modlev_ != 1 )
-     InterpolateVerticala(cp,par_w);
+      {
+         yvalues[0] = PresTop_/100;
+         yvalues[1] = PresBot_/100;
+      }
+   }
    else
-     InterpolateVerticalb(field,cp,par_w,splin);
+   {
+      LevelMap lmap = par->Levels();
+      int i = 0;   // the index of the first axis value to set
+      int inc = 1; // the amount to increment the axis value index by
+
+      if ( modlev_ == cML_UKMO_ND )  // UK Met Office model levels are 'upside-down'
+      {
+         i = nrY - 1;
+         inc = -1;
+      }   //ncx2->setCurrent(ntime_);
+   //ncx2->put(x_values,1,nrPoints);
+
+
+      for ( LevelIterator ii = lmap.begin(); ii != lmap.end(); ii++, i+=inc )
+      {
+         yvalues[i] = (*ii).second->YValue();
+         if ( modlev_ == XS_PL )
+            yvalues[i] /= 100;
+      }
+   }
+
+   // Insert Y values as an attribute of the input variable
+   yvar->addAttribute("_Y_VALUES",nrY,yvalues);
+   //ncx2->setCurrent(ntime_);
+   //ncx2->put(x_values,1,nrPoints);
+
+   delete [] yvalues;
+}
+#endif
+
+void ApplicationInfo::computeLevelInfo( ParamInfo* par, vector<double>& vals )
+{
+   // To convert ML&LNSP to PL there are 2 algorithms:
+   // 1. find the correspondent PL for each ML value
+   // 2. split the interval between top and bottom level in N intervals
+   // Option 2 is currently implemented.
+
+   // Compute Pl values, if ML+LNSP is given
+   double factor = (modlev_ == XS_ML) ? 1. : 100.;
+   vals.reserve(nrLevels_);
+   if ( modlev_ == XS_ML_LNSP || interpolate_ )
+   {
+      double presTop = PresTop_/factor;
+      double presBot = PresBot_/factor;
+      double zdp = ( presBot - presTop ) / double( nrLevels_ - 1 );
+      for ( int i = 0; i < nrLevels_; i++ )
+         vals.push_back(presTop + i * zdp);
 
-   for ( j= 0; j < nrLevels; j++ )
-     {
-       ncvar->setCurrent(1,j);
-       ncvar->put(cp[j],1,1,(long)nrPoints_);
-     }
+      return;
+   }
 
-   // Delete after use.
-   for ( i=0; i< nrLevels;i++)
-     delete [] cp[i];
-   delete [] cp;
+   // Get levels
+   LevelMap lmap = par->Levels();
+   for ( LevelIterator jj = lmap.begin(); jj != lmap.end(); jj++ )
+      vals.push_back( (*jj).second->YValue() / factor );
 
-   return true;
-}
+      //if ( modlev == XS_ML_LNSP)
+      //   value = field.meanML_to_Pressure_byLNSP(*splin,(int)((*jj).second->YValue()) -1 )/100.;
 
-
-// Generate data values.
-// Only ever called if modlev_ != 1, ie if we use pressure levels
-// or UKMO model levels
-void ApplicationInfo::InterpolateVerticala(double **cp,ParamInfo *param)
-{
-
-  if ( ! interpolate_ )
-    {
-      FillValues(cp,param);
-      return;
-    }
-
-  int i,kmodel;
-  double lpa,pk;
-  LevelInfo *firstlev, *nextlev;
-
-  for ( int k = 0; k < nrLevels_; k++ )
-    {
-     // Invert Model level data, except for UKMO
-     kmodel = (modlev_ == cML_UKMO_ND) ? k : (nrLevels_)-k-1;
-
-     pk = GetInterpolatedYValue(k);
-
-     if ( findPressure(param->Levels(),pk,firstlev, nextlev) )
-	{
-	  if ( modlev_ )
-	    lpa = ( pk - firstlev->YValue()) /
-	      (nextlev->YValue() - firstlev->YValue());
-	  else
-	    if ( logax_ )
-	      lpa = ( pk - firstlev->YValue()) /
-		(nextlev->YValue() - firstlev->YValue());
-	    else
-	      lpa = log( pk/firstlev->YValue()) /
-		log(nextlev->YValue()/firstlev->YValue());
-
-	  double *xvals = firstlev->XValues();
-	  double *xnext = nextlev->XValues();
-
-	  for (i = 0; i < nrPoints_; i++ )
-	    {
-	      if ( xvals[i] < BIGDOUBLE && xnext[i] < BIGDOUBLE )
-		cp[kmodel][i] = xvals[i] + ( xnext[i] - xvals[i]) *lpa; //replace k with kmodel
-	      else
-		cp[kmodel][i] = DONTCARE; // replace k with kmodel
-	    }
-	}
-      else
-	for (i=0;i<nrPoints_;i++)
-	  cp[kmodel][i] = DONTCARE;
-    }
+   return;
 }
 
-// Generate data values.
-// Only ever called if modlev_ == 1, ie if we use non-UKMO model levels
-void ApplicationInfo::InterpolateVerticalb(MvField &field,double **cp,
-					   ParamInfo *param,double *splin)
+void ApplicationInfo::getLevelValues( ParamInfo *par, double **cp )
 {
+   LevelMap lmap = par->Levels();
+   LevelIterator ii;
 
-  if ( ! interpolate_ )
-    {
-      FillValues(cp,param);
-      return;
-    }
+#if 1
+   int k = 0;
+   for (ii = lmap.begin(); ii != lmap.end(); ii++, k++ )
 
-  int i,kmodel;
-  double zdp = ( PresBot_ - PresTop_)/ ( nrLevels_ - 1 );
-  double deltalog,lpa;
-  double *sp = new double[nrPoints_];
-  LevelInfo *firstlev,*nextlev;
-  double  firstval, nextval;
+#else
+   int nrY = NrYValues(par);
+   int k = nrY - 1;      // the index of the first level to set
+   int kinc = -1;        // the amount to increment the level index by
 
-  if ( logax_ )
-    deltalog = (log10(PresBot_) - log10(PresTop_))/(nrLevels_ - 1);
+   if ( modlev_ == cML_UKMO_ND )  // UK Met Office model levels are 'upside-down'
+   {
+      k = 0;
+      kinc = 1;
+   }
 
-  for (i=0; i < nrPoints_; i++)
-    sp[i] = exp(splin[i]);
+   for (ii = lmap.begin(); ii != lmap.end(); ii++, k += kinc )
+#endif
 
-  for ( int k = 0; k < nrLevels_; k++ )
-    {
-      double pk = logax_ ? exp((log10(PresTop_) + k * deltalog) *log(10.0)) :
-	PresTop_ + k * zdp;
-
-      // Invert Model level data
-      kmodel = nrLevels_-k-1;
-
-      for ( i =0; i < nrPoints_;i++)
-	{
-	  if ( sp[i] > BIGDOUBLE )
-	  {
-	    cp[kmodel][i] = DONTCARE;
-	    continue;
-	  }
-
-	  if ( findModelPressure(param->Levels(),pk,sp[i],field,
-				 firstlev,nextlev, firstval, nextval) )
-	    {
-	      lpa = logax_ ? (pk - firstval)/(nextval - firstval) :
-		log(pk/firstval)/log(nextval/firstval);
-
-	      cp[kmodel][i] = firstlev->XValues()[i] +
-		( nextlev->XValues()[i] - firstlev->XValues()[i] ) * lpa;
-	    }
-	  else
-	  {
-		cp[kmodel][i] = DONTCARE;
-		//		cp[k][i] = firstlev->XValues()[i];
-		//		cout <<  	cp[k][i] << endl;
-	   }
-	}
-    }
-
-  delete [] sp;
+   {
+      LevelInfo *lInfo = (*ii).second;
+      for (int i = 0; i < nrPoints_; i++ )
+         cp[k][i] = lInfo->XValues()[i];
+   }
 }
 
-
-bool ApplicationInfo::findPressure(LevelMap &lmap,double  value, LevelInfo *&l1,
-			       LevelInfo *&l2)
+double* ApplicationInfo::getOneLevelValues( ParamInfo* par, const string& clev )
 {
+   // Find the input level
+   LevelMap levelMap = par->Levels();
+   LevelIterator ll = levelMap.find(clev);
+   if ( ll == levelMap.end() )
+      return 0;
 
-  LevelIterator ii = lmap.begin();
-  LevelInfo *tmp1 = (*ii).second, *tmp2;
-
-  ii++;
-
-  for (; ii != lmap.end(); ii++ )
-    {
-      tmp2 = (*ii).second;
-      if ( isWithinRange( tmp1->YValue(), tmp2->YValue(), value ) )
-	{
-	  l1 = tmp1;
-	  l2 = tmp2;
-	  return true;
-	}
-
-      tmp1 = tmp2;
-    }
-
-  return false;
+   return (*ll).second->XValues();
 }
 
-
-bool ApplicationInfo::findModelPressure(LevelMap &lmap,double value,
-					double splin, MvField &field,
-					LevelInfo *&l1, LevelInfo *&l2,
-					double &val1,double &val2)
+#if 0
+double* ApplicationInfo::GetYValues(ParamInfo *param, double *topValue, double *bottomValue)
 {
-  LevelIterator ii = lmap.begin();
-  double tmpval1, tmpval2;
-  LevelInfo *tmpl1, *tmpl2;
+   // Interpolation
+   if ( interpolate_ )
+   {
+      double *yvals = new double[nrLevels_];
+      int i = nrLevels_ - 1; // should not do this
 
-  tmpl1 = (*ii).second;
-  ii++;
-  tmpval1 = field.meanML_to_Pressure_bySP(splin,(int)(tmpl1->YValue()));
+      // Retrieve y values
+      for ( int k = 0; k < nrLevels_; k++ )
+      {
+         yvals[i] = GetInterpolatedYValue(k);
+         if ( this->verticalLevelType() )
+            yvals[i] /= 100;
+         i--;
+      }
 
-  for (; ii != lmap.end(); ii++ )
-    {
-      tmpl2 = (*ii).second;
-      tmpval2 = field.meanML_to_Pressure_bySP(splin,(int)(tmpl2->YValue()));
+      *topValue    = yvals[nrLevels_-1];
+      *bottomValue = yvals[0];
 
-      if ( isWithinRange( tmpval1, tmpval2, value ) )
-	{
-	  l1 = tmpl1; l2 = tmpl2;
-	  val1 = tmpval1; val2 = tmpval2;
-	  return true;
-	}
-
-      tmpl1 = tmpl2;
-      tmpval1 = tmpval2;
-    }
-
-  l1 = tmpl1;
-  return false;
-}
-
-void ApplicationInfo::scaleVelocity(ParamInfo *par)
-{
+      return yvals;
+   }
 
-  LevelMap lmap = par->Levels();
-  LevelIterator ii = lmap.begin();
+   // No interpolation
+   int nrY = NrYValues(param);
+   double *yvals = new double[nrY];
+   LevelMap lmap = param->Levels();
+   int i = nrY - 1;   // the index of the first axis value to set
+   int inc = -1; // the amount to increment the axis value index by
+   if ( modlev_ == cML_UKMO_ND )  // UK Met Office model levels are 'upside-down'
+   {
+      i = 0;
+      inc = 1;
+   }
 
-  double hscale = 21./dist_;
-  double vscale = 12./(PresBot_ - PresTop_);
+   for ( LevelIterator ii = lmap.begin(); ii != lmap.end(); ii++, i+=inc )
+   {
+      yvals[i] = (*ii).second->YValue();
+      if ( modlev_ == XS_PL ) yvals[i] /= 100;
+   }
 
-  if (modlev_ == -1 ) vscale = 12./(100 * 1000);
+   *topValue    = yvals[nrY - 1];
+   *bottomValue = yvals[0];
 
-  double factor = -vscale/hscale;
-  double *values;
-  for ( ; ii  != lmap.end(); ii++ )
-    {
-      values = (*ii).second->XValues();
-
-      for (int i=0; i<nrPoints_; i++)
-	{
-	  if (values[i] < BIGDOUBLE)
-	    values[i] *= factor;
-	  else
-	    values[i] = MAXDOUBLE;
-	}
-    }
-  return;
+   return yvals;
 }
+#endif
 
-void ApplicationInfo::setMinMax( ParamMap &params)
+double ApplicationInfo::GetInterpolatedYValue(int index)
 {
-  // Find the min and max pressures if modlev_ == -1
-  if ( modlev_ == -1 || modlev_ == cML_UKMO_ND )
-    {
-
-      double p;
-
-      PresTop_ = 5000;
-      PresBot_ = -5000;
-
-      ParamIterator ii;
-      LevelMap lmap;
-      LevelIterator jj;
-
-      for ( ii = params.begin(); ii != params.end(); ii++ )
-	{
-	  lmap = (*ii).second->Levels();
-	  for ( jj = lmap.begin(); jj != lmap.end();jj++ )
-	    {
-	      p = (*jj).second->YValue();
-	      PresTop_ = MIN(PresTop_,p);
-	      PresBot_ = MAX(PresBot_,p);
-	    }
-	}
-
-      nrLevels_ = (int)( PresBot_ - PresTop_ ) + 1;
-    }
-}
+   double pk;
 
-void ApplicationInfo::setYValues(MvNcVar *yvar, ParamInfo *par)
-{
-  int nrY = NrYValues(par);
-  double *yvalues = new double[nrY];
-
-  // Retrieve y values
-  if ( interpolate_ )
-    {
-      if ( modlev_ == -1 )
-	{
-	  yvalues[0] = PresTop_;
-	  yvalues[1] = PresBot_;
-	}
-      else if ( modlev_ == cML_UKMO_ND )
-	{
-	  yvalues[1] = PresTop_;
-	  yvalues[0] = PresBot_;
-	}
-      else
-	{
-	  yvalues[0] = PresTop_/100;
-	  yvalues[1] = PresBot_/100;
-	}
-    }
-  else
-    {
-      LevelMap lmap = par->Levels();
-        int i = 0;   // the index of the first axis value to set
-        int inc = 1; // the amount to increment the axis value index by
-
-        if ( modlev_ == cML_UKMO_ND )  // UK Met Office model levels are 'upside-down'
-	{
-            i = nrY - 1;
-            inc = -1;
-        }
-
-        for ( LevelIterator ii = lmap.begin(); ii != lmap.end(); ii++, i+=inc )
-        {
-	  yvalues[i] = (*ii).second->YValue();
-	  if ( modlev_ == 0 ) yvalues[i] /= 100;
-	}
-    }
-
-  // Insert Y values as an attribute of the input variable
-  yvar->addAttribute("_Y_VALUES",nrY,yvalues);
-
-  // Insert Y values as a new variable
-/*
-  vector<long> dimsize(1,nrY);
-  vector<string> vname(1,"levels");
-  cdf.setCurrent(2);
-  MvNcVar *ncvar = cdf.addVariable("levels",ncDouble,dimsize,vname);
-*/
-  delete [] yvalues;
-}
+   // Interpolation
+   if ( logax_ )
+   {
+      double deltalog = (log10(PresBot_) - log10(PresTop_))/(nrLevels_ - 1);
+      pk = exp((log10(PresTop_) + (double)index*deltalog)*log(10.));
+   }
+   else
+   {
+      double zdp = ( PresBot_ - PresTop_)/ ( nrLevels_ - 1 );
+      pk = modlev_ == cML_UKMO_ND ? PresTop_ + index : PresTop_+ index * zdp;
+   }
 
-void ApplicationInfo::AddMetadata(MvNcVar *var, const string &key)
-{
-  // Split the string back into individual components.
-  var->addAttribute("PARAM",key.substr(1,3).c_str());
-  var->addAttribute("DATE",key.substr(4,8).c_str());
-  var->addAttribute("TIME",key.substr(12,4).c_str());
-  var->addAttribute("STEP",key.substr(16,4).c_str());
-  var->addAttribute("EXPVER",key.substr(20,4).c_str());
-  var->addAttribute("MODE",stringModes[mode_]);
-  var->addAttribute("LEVTYPE",(modlev_) ? "ML" : "PL");
+   return pk;
 }
 
-void ApplicationInfo::AddLevels(MvNcVar *var, ParamInfo *par)
+void ApplicationInfo::setAreaLine( double L1, double L2, double R1, double R2 )
 {
-  if ( ! interpolate_ )
-    {
-      // Get levelist
-      int nrY = NrYValues(par);
-      double *yvalues = new double[nrY];
-      LevelMap lmap = par->Levels();
-      int i = 0;
-
-      for ( LevelIterator ii = lmap.begin(); ii != lmap.end(); ii++, i++ )
-	{
-	  yvalues[i] = (*ii).second->YValue();
-	  if ( modlev_ == 0 ) yvalues[i] /= 100;
-	}
+   // Initialize area or line coordinates
+   x1_ = L1;
+   x2_ = L2;
+   y1_ = R1;
+   y2_ = R2;
 
-      // Insert levelist as a netCDF attributes
-      var->addAttribute("LEVELIST",nrY,yvalues);
+   // Check values
+   if ( y1_ > 90. || y1_ < -90. || y2_ > 90. || y2_ < -90.)
+      viaPole_ = true;
 
-      delete [] yvalues;
-    }
+   return;
 }
 
-void ApplicationInfo::FillValues(double **cp, ParamInfo *par )
+void ApplicationInfo::getAreaLine( double& L1, double& L2, double& R1, double& R2 )
 {
-  LevelMap lmap = par->Levels();
-  LevelIterator ii;
-  int nrY = NrYValues(par);
-  int k = nrY - 1;      // the index of the first level to set
-  int kinc = -1;   // the amount to increment the level index by
-
-  if ( modlev_ == cML_UKMO_ND )  // UK Met Office model levels are 'upside-down'
-  {
-    k = 0;
-    kinc = 1;
-  }
-
-  for (ii = lmap.begin(); ii != lmap.end(); ii++, k+=kinc )
-    {
-      LevelInfo *lInfo = (*ii).second;
-      for (int i = 0; i < nrPoints_; i++ )
-	cp[k][i] = lInfo->XValues()[i];
-    }
+   L1 = x1_;
+   L2 = x2_;
+   R1 = y1_;
+   R2 = y2_;
 }
 
-void ApplicationInfo::SetArea(MvNcVar *var)
+void ApplicationInfo::getAreaLine( double* area )
 {
-  double area[4];
-  area[1] = x1_; area[3] = x2_;
-  area[0] = y1_;area[2] = y2_;
-
-  var->addAttribute("AREA",4,area);
-
-  double grid[2];
-  grid[0] = gridEW_; grid[1] = gridNS_;
-  var->addAttribute("GRID",2,grid);
+   area[0] = y1_;
+   area[1] = x1_;
+   area[2] = y2_;
+   area[3] = x2_;
 }
 
-
-double* ApplicationInfo::GetYValues(ParamInfo *param)
+bool ApplicationInfo::verticalLevelType ()
 {
- 	// Interpolation
-	if ( interpolate_ )
-	{
-		double *yvals = new double[nrLevels_];
-            	int i = nrLevels_ - 1; // should not do this
-
-		// Retrieve y values
- 		for ( int k = 0; k < nrLevels_; k++ )
-		{
-			yvals[i] = GetInterpolatedYValue(k);
-			if ( modlev_ == 0 || haveLNSP() ) yvals[i] /= 100;
-			i--;
-		}
-
-		return yvals;
-	}
-
-	// No interpolation
-	int nrY = NrYValues(param);
-	double *yvals = new double[nrY];
-	LevelMap lmap = param->Levels();
-        int i = nrY - 1;   // the index of the first axis value to set
-        int inc = -1; // the amount to increment the axis value index by
-	if ( modlev_ == cML_UKMO_ND )  // UK Met Office model levels are 'upside-down'
-	{
-            	i = 0;
-            	inc = 1;
-        }
-
-	for ( LevelIterator ii = lmap.begin(); ii != lmap.end(); ii++, i+=inc )
-	{
-		yvals[i] = (*ii).second->YValue();
-		if ( modlev_ == 0 ) yvals[i] /= 100;
-	}
-
-	return yvals;
+   if ( modlev_ == XS_PL || modlev_ == XS_ML_LNSP )
+      return true;
+   else
+      return false;
 }
 
-double ApplicationInfo::GetInterpolatedYValue(int index)
+double ApplicationInfo::Ancos()
 {
-	double pk;
-
-	// Interpolation
-	if ( logax_ )
-	{
-		double deltalog = (log10(PresBot_) - log10(PresTop_))/(nrLevels_ - 1);
-		pk = exp((log10(PresTop_) + (double)index*deltalog)*log(10.));
-	}
-	else
-	{
-		double zdp = ( PresBot_ - PresTop_)/ ( nrLevels_ - 1 );
-		pk = modlev_ == cML_UKMO_ND ? PresTop_ + index : PresTop_+ index * zdp;
-	}
-
-	return pk;
+      double angle = atan2 (y2_ - y1_,x2_ - x1_);
+      return cos(angle);
 }
 
-bool ApplicationInfo::GenerateNetcdfAxesVariables(ParamMap &params, MvNetCDF &cdf, const string& key)
+double ApplicationInfo::Ansin()
 {
-	// Generate the netCDf axes variables, if they do not exist yet
-	// IMPORTANT: It assumes that all field parameters have the same
-	// levels. This needs to be tested somewhere else in the code.
-
-	// Find parameter map
-	ParamIterator ii = params.find(key);
-	if ( ii == params.end() )
-		return false;
-
-	ParamInfo *par = (*ii).second;
-
-	// Create Levels variable
-	int nrLevels = NrLevels(par);
-	vector<long> dimsize1(1,nrLevels);
-	vector<string> vname1(1,"levels");
-	MvNcVar *ncvar = cdf.addVariable("levels",ncDouble,dimsize1,vname1);
-	double* lev = GetYValues(par);
-	ncvar->put(lev,(long)nrLevels);
-	delete []lev;
-
-	// Create Longitude variable
-	dimsize1[0] = nrPoints_;
-	vname1[0]   = "longitude";
-//  MvNcVar *nclon = cdf.addVariable("longitude",ncDouble,dimsize1,vname1);
-	ncvar = cdf.addVariable("longitude",ncDouble,dimsize1,vname1);
-	double *lon = new double [nrPoints_];
-	double *lat = new double [nrPoints_];
-	this->setLine(lon,lat);
-	ncvar->put(lon,(long)nrPoints_);
-	delete []lon;
-
-	// Create Latitude variable
-	vname1[0] = "latitude";
-	ncvar = cdf.addVariable("latitude",ncDouble,dimsize1,vname1);
-	ncvar->put(lat,(long)nrPoints_);
-	delete []lat;
-
-	return true;
+      double angle = atan2 (y2_ - y1_,x2_ - x1_);
+      return sin(angle);
 }
diff --git a/src/XSection/MvXsectFrame.h b/src/XSection/MvXsectFrame.h
index ab536c8..9437209 100644
--- a/src/XSection/MvXsectFrame.h
+++ b/src/XSection/MvXsectFrame.h
@@ -7,7 +7,6 @@
 
  ***************************** LICENSE END *************************************/
 
-// -*-C++-*-
 // Header file for Xsect application. This is really 3 applications : Xsection,
 // Average and Vertical Profile, depending on which request it receives.
 
@@ -15,19 +14,25 @@
 #ifndef MVXSECTFRAME_H
 #define MVXSECTFRAME_H
 
-#include <math.h>
-
-#include <string.h>
-#include "inc_iostream.h"
-#include "inc_stl.h"
-
 #include "Metview.h"
 #include "MvNetCDF.h"
 
-//const double CDR = 0.017453293;
-const double MAXDOUBLE = 3.4E37;
-const double BIGDOUBLE = 3.4E35;
-const double DONTCARE =	1.0E22;
+const double MAXDOUBLE   = 3.4E37;
+const double BIGDOUBLE   = 3.4E35;
+const float  XMISSING_VALUE = 1.0E22;
+
+const int    XS_ML       = -1;       // model level
+const int    XS_PL       =  0;       // pressure level
+const int    XS_ML_LNSP  =  1;       // model level + lnsp
+//           cML_UKMO_ND =  n;       // UKMO New Dynamics - defined elsewhere
+
+const double cCDR = atan(1.0)/45.0; //-- conversion factor Degrees->Radians
+                                    //-- atan(1)/45 = (PI/4)/45 = PI/180
+
+const string XS_VARLEVEL = "nlev";
+const string XS_VARTIME  = "time";
+const string XS_VARLAT   = "lat";
+const string XS_VARLON   = "lon";
 
 //-- Q&D trick: still use global vars
 //-- but let them be non-const!
@@ -43,14 +48,8 @@ const double DONTCARE =	1.0E22;
  extern int	LnPress;
 #endif
 
-// Application mode.
-enum AppMode { AVERAGE_NS,AVERAGE_EW,XSECT,VP_POINT,VP_GRIDPOINT,VP_AREA,VP_AREA2 };
-
-// Which application is running.
-enum {AppAverage, AppXsect, AppVertprof };
-
-// Wind values
-enum {PERPENDICULAR=1,PARALLEL, INTENSITY };
+// Type of input request to be processed
+enum { XS_DATA_DROPPED, XS_DATA_MODULE, XS_DATA_MODULE_DROPPED };
 
 // Holds info about the values for 1 level.
 class LevelInfo
@@ -61,6 +60,7 @@ public:
   double   YValue() { return yvalue_; }
 
 private:
+
   friend class ParamInfo;
 
   void UpdateLevel(double lev, int modlev)
@@ -69,7 +69,7 @@ private:
   LevelInfo(double lev, int modlev) : xvalues_(0)
     { yvalue_ = modlev ? lev : lev * 100; }
 
-  LevelInfo() : xvalues_(0),yvalue_(DONTCARE) {}
+  LevelInfo() : xvalues_(0),yvalue_(XMISSING_VALUE) {}
 
   double *xvalues_,yvalue_;
 };
@@ -79,11 +79,13 @@ private:
 class LevelCompare
 {
 public:
+
   bool operator() ( const string& s1,const string& s2 ) const
-    {
+  {
       return ( atof(s1.c_str() ) < atof(s2.c_str() ) );
-    }
+  }
 };
+
 typedef map<string,LevelInfo*, LevelCompare > LevelMap;
 typedef LevelMap::iterator LevelIterator;
 
@@ -93,10 +95,15 @@ typedef LevelMap::iterator LevelIterator;
 class ParamInfo
 {
 public:
-  ParamInfo(): param_(0),date_(0),step_(0),time_(0) { }
-  ParamInfo(int i1,int i2,int i3,int i4, string pn) :
-    param_(i1),date_(i2), step_(i4),time_(i3),paramName_(pn)
-	    { }
+
+  ParamInfo() : param_(0), date_(0), step_(0), time_(0),
+                paramName_(" "), paramLongName_(" "), expver_("_"),
+                units_(" "), levType_(" ") { }
+
+  ParamInfo(int i1,int i2,int i3,int i4,string sn,string ln,string u,string lt) :
+            param_(i1), date_(i2), step_(i4), time_(i3),
+            paramName_(sn), paramLongName_(ln), expver_("_"),
+            units_(u), levType_(lt) {}
 
   ~ParamInfo();
 
@@ -105,39 +112,40 @@ public:
   int Step() { return step_;}
   int Parameter()  { return param_; }
   string ParamName() { return paramName_; }
+  string ParamLongName() { return paramLongName_; }
+  string Units() { return units_; }
+  string LevelType() { return levType_; }
+  bool IsSurface();
   const char *ExpVer() { return expver_.c_str(); }
   string ExpVerTitle();
   void ExpVer(const char *xx) { expver_ = xx; }
   void Level(double*,string, int,int);
   LevelMap& Levels() { return levels_; }
+  MvDate ReferenceDate();
+  MvDate VerificationDate();
 
-  void AddLevel(string lev)
-    {
-      if ( levels_.find(lev) == levels_.end() )
-        {
-	      //levels_.insert(pair<string,LevelInfo*>(lev,new LevelInfo));
-	      levels_[ lev ] = new LevelInfo;
-        }
-    }
-  void UpdateLevels(int modlev);
+  void AddLevel(string);
+  void UpdateLevels(int);
 
   int NrLevels() { return levels_.size(); }
   void Print() {
-    printf("P: %d %d %d %d \n",param_,date_,step_,time_);
+    printf("P: %d %d %d %d %s %s %s\n",param_,date_,step_,time_,paramName_.c_str(),units_.c_str(),levType_.c_str());
   };
 
   friend int operator<(const ParamInfo &p1, const ParamInfo &p2)
-    {
-      return ( p1.param_ < p2.param_ || p1.date_ < p2.date_
-	       || p1.time_ < p2.time_ || p1.step_ < p2.step_ );
-    }
+  {
+     return ( p1.param_ < p2.param_ || p1.date_ < p2.date_ || p1.time_ < p2.time_ || p1.step_ < p2.step_ );
+  }
 
 private:
+
   int param_, date_, step_, time_;
   string paramName_;
+  string paramLongName_;
   string expver_;
+  string units_;
+  string levType_;
   LevelMap levels_;
-
 };
 
 typedef map<string,ParamInfo * > ParamMap;
@@ -151,120 +159,95 @@ typedef pair<const string,ParamInfo*> ParamPair;
 class ApplicationInfo
 {
 public:
-  ApplicationInfo() :
-    mode_(XSECT),logax_(false),
-    North_(0),South_(0),East_(0),West_(0),
-    x1_(0), x2_(0), y1_(0), y2_(0),
-    gridNS_(0), gridEW_(0),ancos_(0), ansin_(0),
-    dist_(0), PresTop_(0),PresBot_(0),
-    nrPoints_(0),nrLevels_(0),modlev_(0),
-    hcNumber_(0),hcPerpendicular_(0),hcParallel_(0),
-    hcIntensity_(0),currentHC_(0),
-    foundUV_(false), foundW_(false), interpolate_(true),
-    viaPole_(false), haveLNSP_(false)
-  {}
-
-  void LevelType(int ml) { modlev_ = ml; }
-  void AxisType(bool logaxis) { logax_ = logaxis; }
-  void setLine(double *lon, double *lat);
-
-  int EvaluateBlot(double, double, double, double,
-		   double, double );
-
-  void setGlobe(double N, double S,double E, double W)
-    {
-      if ( N == 0 && S == 0 && E == 0 && W == 0 )
-	{
-	  N = 90; S = -90; E = 180; W = -180;
-	}
-
-      North_ = N; South_ = S; East_ = E; West_ = W;
-    }
 
-  void   Grid( double ns, double ew );
+  // Constructor
+  ApplicationInfo();
 
+  void levelType(int lt) { modlev_ = lt; }
+  int  levelType() { return modlev_; }
+  double PresTop() { return PresTop_; }
+  double PresBot() { return PresBot_; }
+
+  void axisType(bool logaxis) { logax_ = logaxis; }
+  void computeLine(double *lon, double *lat);
+
+  void setAreaLine( double, double, double, double );
+  void getAreaLine( double&, double&, double&, double& );
+  void getAreaLine( double* );
+  double X1() { return x1_; }
+  double Y1() { return y1_; }
+  double X2() { return x2_; }
+  double Y2() { return y2_; }
+
+  void   Grid( double ns, double ew );
   double GridNS() { return gridNS_; }
   double GridEW() { return gridEW_; }
 
-  void Mode(AppMode mode) { mode_ = mode; }
-  AppMode Mode() { return mode_; }
+  double Ancos();
+  double Ansin();
 
-  void setHorComp(int no,int perp,int par, int intens,bool foundUV,bool foundW)
-    {
-      hcNumber_ = no; hcPerpendicular_ = perp; hcParallel_ = par;
-      hcIntensity_ = intens;
-      foundUV_ = foundUV; foundW_ = foundW;
-    }
+  void actionMode( string action ) { actionMode_ = action; }
+  string actionMode() { return actionMode_; }
+
+  void processType( int type ) { procType_ = type; }
+  int  processType( ) { return procType_; }
+
+  int NrPoints() { return nrPoints_; }
+  void NrPoints( int np ) { nrPoints_ = np; }
+
+  int NTimes() { return ntimes_; }
+  void NTimes( int ntimes ) { ntimes_ = ntimes; }
+
+  // Handle level info
+  void updateLevels(ParamMap &, int);
+  void setMinMaxLevels( double, double, int=0 );
+  void getMinMaxLevels( double&, double&, int& );
+  int NrLevels(ParamInfo *par ) { return interpolate_ ? nrLevels_ : par->NrLevels(); }
+  int NrLevels() { return nrLevels_; }
+  int NrYValues(ParamInfo *par ) { return interpolate_ ? 2 : par->NrLevels(); }
+
+  // Get level values
+  void getLevelValues( ParamInfo*, double** );
+  double* getOneLevelValues( ParamInfo*, const string& );
+   void computeLevelInfo ( ParamInfo*, vector<double>& );
 
-  void UpdateLevels(ParamMap &, int);
-  void setMinMax(ParamMap &);
-  void setYValues(MvNcVar*, ParamInfo *);
 
-  void mapValues(ParamInfo&, ParamInfo *, ParamInfo *);
   void scaleVelocity(ParamInfo *);
   void InterpolateVerticala(double **cp,ParamInfo *par);
   void InterpolateVerticalb(MvField &,double **cp,ParamInfo *par,double *splin);
 
-  bool findModelPressure(LevelMap &lmap,double value,
-			 double splin, MvField &field,
-			 LevelInfo *&l1, LevelInfo *&l2,
-			 double &val1,double &val2);
+  bool findModelPressure(LevelMap &lmap,double value, double splin, MvField &field,
+                         LevelInfo *&l1, LevelInfo *&l2, double &val1,double &val2);
 
   bool findPressure(LevelMap &lmap,double value, LevelInfo *&l1, LevelInfo *&l2);
 
-  // The following functions write the data to netcdf file.
-  bool generateData(ParamMap &params, MvNetCDF &cdf,MvField&,
-		    const  string&, double *, double *, double *);
-  bool generateXsectData(ParamMap &params,MvNetCDF &cdf, const string&,
-			 MvField&, double *);
-  bool generateAverageData(ParamMap &params,MvNetCDF &cdf,
-			   const string&,MvField&, double *);
-  bool generateLnSP(MvNetCDF &cdf, const string&, double *);
-  bool curveValues(ParamMap &params,MvNetCDF &cdf, const string&,
-		   MvField&, double *, double *, double *);
-
-  bool contourValues(ParamMap &params,MvNetCDF &cdf, const string&,
-		     MvField&, double *);
-  bool windValues(ParamMap &params,MvNetCDF &cdf, const string&,
-		     MvField&, double *);
-  bool velocityValues(ParamMap &params,MvNetCDF &cdf, const string&,
-		     MvField&, double *);
-
+  bool generateAverageData(ParamMap &params,MvNetCDF &cdf, const string&,MvField&, double *, double * , double *);
 
   bool Interpolate() { return interpolate_; }
   void Interpolate(bool xx) { interpolate_ = xx; }
 
-  int NrLevels(ParamInfo *par ) { return interpolate_ ? nrLevels_ : par->NrLevels(); }
-  int NrYValues(ParamInfo *par ) { return interpolate_ ? 2 : par->NrLevels(); }
-  void FillValues(double **cp, ParamInfo *par );
   bool viaPole()  {return viaPole_;}
   bool haveLNSP() {return haveLNSP_;}
   void haveLNSP(bool have) {haveLNSP_ = have;}
 
-  bool GenerateNetcdfAxesVariables(ParamMap&, MvNetCDF&, const string&);
-
 private:
 
-  void AddMetadata(MvNcVar *, const string&);
-  void AddLevels(MvNcVar*, ParamInfo *);
-  void SetArea(MvNcVar*);
   double GetInterpolatedYValue(int);
-  double* GetYValues(ParamInfo*);
+  bool verticalLevelType();
 
-  AppMode mode_;
   bool logax_;
 
-  double North_,South_,East_,West_;
   double x1_, x2_, y1_, y2_;
   double gridNS_, gridEW_;
-  double ancos_, ansin_,dist_;
-  double PresTop_,PresBot_;
+  double PresTop_, PresBot_;
 
-  int nrPoints_,nrLevels_,modlev_;
-  int hcNumber_,hcPerpendicular_,hcParallel_,hcIntensity_,currentHC_;
-  bool foundUV_, foundW_, interpolate_;
+  int nrPoints_, nrLevels_, ntimes_;
+  int modlev_; // XS_ML/XS_PL/XS_ML_LNSP/cML_UKMO_ND
+  bool interpolate_;
   bool viaPole_;
   bool haveLNSP_;
+  string actionMode_;  // e.g. "examine"/"save"/"execute"/...
+  int procType_;       // processing type
 };
 
 #endif
diff --git a/src/XSection/ObjectSpec.XSection b/src/XSection/ObjectSpec.XSection
index 8359326..1570a57 100644
--- a/src/XSection/ObjectSpec.XSection
+++ b/src/XSection/ObjectSpec.XSection
@@ -1,63 +1,206 @@
 object,
-    class           = PM_XSECT,
-    icon_box        = To be organised,
+    class           = MXSECTION,
+    icon_box        = Data processing,
     can_be_created  = True,
-    definition_file = '$METVIEW_DIR_SHARE/etc/XSectionDef',
-    rules_file      = '$METVIEW_DIR_SHARE/etc/XSectionRules',
+    definition_file = '$METVIEW_DIR_SHARE/etc/MXSectionDef',
+    rules_file      = '$METVIEW_DIR_SHARE/etc/MXSectionRules',
     default_name    = Cross Section Data,
     help_page       = Cross_Section_Data,
     type            = Data,
-    expand          = 75, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS|EXPAND_LAST_NAME
-    macro           = cross_sect,
+    expand          = 512, #expand default values
+    macro           = mcross_sect,
     editor_type     = SimpleEditor,
-    pixmap          = '$METVIEW_DIR_SHARE/icons/XSECTION.icon'
-
-state,
-    class        = PM_XSECT,
-    output_class = NETCDF,
-    service      = XSection
-
-service,
-    timeout  = $timeout,
-    name     = 'XSection',
-    fullname = Cross Section,
-    cmd      = "$metview_command $METVIEW_BIN/XSection"
+    pixmap          = '$METVIEW_DIR_SHARE/icons/MXSECTION.icon'
 
 object,
-    class           = PM_AVERAGE,
-    icon_box        = To be organised,
+    class           = MXAVERAGE,
+    icon_box        = Data processing,
     can_be_created  = True,
-    definition_file = '$METVIEW_DIR_SHARE/etc/XAverageDef',
-    rules_file      = '$METVIEW_DIR_SHARE/etc/XAverageRules',
+    definition_file = '$METVIEW_DIR_SHARE/etc/MXAverageDef',
+    rules_file      = '$METVIEW_DIR_SHARE/etc/MXAverageRules',
     default_name    = Average Data,
     help_page       = Average_Data,
     type            = Data,
-    expand          = 75, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS|EXPAND_LAST_NAME
-    macro           = xs_average,
+    expand          = 512, #expand default values
+    macro           = mxs_average,
     editor_type     = SimpleEditor,
-    pixmap          = '$METVIEW_DIR_SHARE/icons/XAVERAGE.icon'
-
-state,
-    class        = PM_AVERAGE,
-    output_class = NETCDF,
-    service      = XSection
+    pixmap          = '$METVIEW_DIR_SHARE/icons/MXAVERAGE.icon'
 
 object,
-    class           = PM_VPROF,
-    icon_box        = To be organised,
+    class           = MVPROFILE,
+    icon_box        = Data processing,
     can_be_created  = True,
-    definition_file = '$METVIEW_DIR_SHARE/etc/VProfileDef',
-    rules_file      = '$METVIEW_DIR_SHARE/etc/VProfileRules',
+    definition_file = '$METVIEW_DIR_SHARE/etc/MVProfileDef',
+    rules_file      = '$METVIEW_DIR_SHARE/etc/MVProfileRules',
     default_name    = Vertical Profile Data,
     help_page       = Vertical_Profile_Data,
     type            = Data,
-    expand          = 75, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS|EXPAND_LAST_NAME
-    macro           = vert_prof,
+    expand          = 520, #EXPAND_DEFAULTS|EXPAND_2ND_NAME
+    macro           = mvert_prof,
     editor_type     = SimpleEditor,
-    pixmap          = '$METVIEW_DIR_SHARE/icons/VPROFILE.icon'
+    pixmap          = '$METVIEW_DIR_SHARE/icons/MVPROFILE.icon'
 
 state,
-    class        = PM_VPROF,
+    class        = MXSECTION/MXAVERAGE,
     output_class = NETCDF,
     service      = XSection
 
+state,
+    class        = MVPROFILE,
+    output_class = NETCDF/NETCDF_RTTOV_INPUT,
+    service      = XSection
+
+service,
+    timeout  = $timeout,
+    name     = 'XSection',
+    fullname = Cross Section,
+    cmd      = "$metview_command $METVIEW_BIN/XSection"
+
+object,
+    class               = MXSECTIONVIEW,
+    can_be_created      = True,
+    icon_box            = Views,
+    definition_file     = '$METVIEW_DIR_SHARE/etc/MXSectionViewDef',
+    rules_file          = '$METVIEW_DIR_SHARE/etc/MXSectionViewRules',
+    default_name        = Cross Section View,
+    help_page           = Cross_Section_View,
+    type                = View,
+    macro               = mxsectview,
+    editor_type         = SimpleEditor,
+    pixmap              = '$METVIEW_DIR_SHARE/icons/MXSECTIONVIEW.icon',
+    expand              = 512, #expand default values
+    doubleclick_method  = Edit
+
+object,
+    class               = MXAVERAGEVIEW,
+    can_be_created      = True,
+    icon_box            = Views,
+    definition_file     = '$METVIEW_DIR_SHARE/etc/MXAverageViewDef',
+    rules_file          = '$METVIEW_DIR_SHARE/etc/MXAverageViewRules',
+    default_name        = Average View,
+    help_page           = Average_View,
+    type                = View,
+    macro               = maverageview,
+    editor_type         = SimpleEditor,
+    pixmap              = '$METVIEW_DIR_SHARE/icons/MXAVERAGEVIEW.icon',
+    expand              = 512, #expand default values
+    doubleclick_method  = Edit
+
+object,
+    class               = MVPROFILEVIEW,
+    can_be_created      = True,
+    icon_box            = Views,
+    definition_file     = '$METVIEW_DIR_SHARE/etc/MVProfileViewDef',
+    rules_file          = '$METVIEW_DIR_SHARE/etc/MVProfileViewRules',
+    default_name        = Vertical Profile View,
+    help_page           = Vertical_Profile_View,
+    type                = View,
+    macro               = mvertprofview,
+    editor_type         = SimpleEditor,
+    pixmap              = '$METVIEW_DIR_SHARE/icons/MVPROFILEVIEW.icon',
+    expand              = 512, #expand default values
+    doubleclick_method  = Edit
+
+state,
+   class      = MXSECTIONVIEW/MXAVERAGEVIEW/MVPROFILEVIEW,
+   action     = execute/visualise,
+   service    = uPlotManager
+
+# These are the Metview 3 icons (temporarily available for backwards compatibility)
+
+object,
+   class           = PM_XSECT,
+   icon_box        = To be organised,
+   can_be_created  = False,
+   definition_file = '$METVIEW_DIR_SHARE/etc/XsectDef',
+   rules_file      = '$METVIEW_DIR_SHARE/etc/XsectRules',
+   default_name    = Cross Section Data,
+   help_page       = Cross_Section_Data,
+   type            = Data,
+   expand          = 512, #expand default values
+   macro           = cross_sect,
+   editor_type     = SimpleEditor,
+   pixmap          = '$METVIEW_DIR_SHARE/icons/XSECT.icon'
+
+object,
+   class           = PM_VPROF,
+   icon_box        = To be organised,
+   can_be_created  = False,
+   definition_file = '$METVIEW_DIR_SHARE/etc/VertProfDef',
+   rules_file      = '$METVIEW_DIR_SHARE/etc/VertProfRules',
+   default_name    = Vertical Profile Data,
+   help_page       = Vertical_Profile_Data,
+   type            = Data,
+   expand          = 512, #expand default values
+   macro           = vert_prof,
+   editor_type     = SimpleEditor,
+   pixmap          = '$METVIEW_DIR_SHARE/icons/VPROF.icon'
+
+object,
+   class           = PM_AVERAGE,
+   icon_box        = To be organised,
+   can_be_created  = False,
+   definition_file = '$METVIEW_DIR_SHARE/etc/AverageDef',
+   rules_file      = '$METVIEW_DIR_SHARE/etc/AverageRules',
+   default_name    = Average Data,
+   help_page       = Average_Data,
+   type            = Data,
+   expand          = 512, #expand default values
+   macro           = xs_average,
+   editor_type     = SimpleEditor,
+   pixmap          = '$METVIEW_DIR_SHARE/icons/AVERAGE.icon'
+
+state,
+   class        = PM_XSECT/PM_AVERAGE/PM_VPROF,
+   output_class = NETCDF,
+   service      = XSection
+
+object,
+    class               = XSECTVIEW,
+    can_be_created      = False,
+    icon_box            = Views,
+    definition_file     = '$METVIEW_DIR_SHARE/etc/XsectViewDef',
+    rules_file          = '$METVIEW_DIR_SHARE/etc/XsectViewRules',
+    default_name        = Cross Section View,
+    help_page           = Cross_Section_View,
+    type                = View,
+    macro               = xsectview,
+    editor_type         = SimpleEditor,
+    pixmap              = '$METVIEW_DIR_SHARE/icons/XSECTVIEW.icon',
+    expand              = 512, #expand default values
+    doubleclick_method  = Edit
+
+object,
+    class               = AVERAGEVIEW,
+    can_be_created      = False,
+    icon_box            = Views,
+    definition_file     = '$METVIEW_DIR_SHARE/etc/AverageViewDef',
+    rules_file          = '$METVIEW_DIR_SHARE/etc/AverageViewRules',
+    default_name        = Average View,
+    help_page           = Average_View,
+    type                = View,
+    macro               = averageview,
+    editor_type         = SimpleEditor,
+    pixmap              = '$METVIEW_DIR_SHARE/icons/AVERAGEVIEW.icon',
+    expand              = 512, #expand default values
+    doubleclick_method  = Edit
+
+object,
+    class               = VERTPROFVIEW,
+    can_be_created      = False,
+    icon_box            = Views,
+    definition_file     = '$METVIEW_DIR_SHARE/etc/VertProfViewDef',
+    rules_file          = '$METVIEW_DIR_SHARE/etc/VertProfViewRules',
+    default_name        = Vertical Profile View,
+    help_page           = Vertical_ProfileView,
+    type                = View,
+    macro               = vertprofview,
+    editor_type         = SimpleEditor,
+    pixmap              = '$METVIEW_DIR_SHARE/icons/VPROFVIEW.icon',
+    expand              = 512, #expand default values
+    doubleclick_method  = Edit
+
+state,
+    class   = VERTPROFVIEW/XSECTVIEW/AVERAGEVIEW,
+    action  = execute/visualise,
+    service = uPlotManager
diff --git a/src/XSection/VPROF.xpm b/src/XSection/VPROF.xpm
new file mode 100644
index 0000000..7684199
--- /dev/null
+++ b/src/XSection/VPROF.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static char * VPROF_xpm[] = {
+"32 32 8 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #EC92EB",
+"@	c #BABABA",
+"#	c #E9E9FB",
+"$	c #7F7F7F",
+"%	c #92BEEC",
+"&	c #E4D8C2",
+".........+......................",
+"..........+.....................",
+"...........+....................",
+"............++..................",
+"..............+.................",
+"..............++................",
+"...............+++..............",
+".........@@@@@@@@+@@@@@.........",
+".....@@@@########+#####@@@@.....",
+"..@@@############+#########@@@..",
+".@###############+############@.",
+"@################+#############@",
+"#########@@@@@@+++@@@@@#########",
+"#####@@@@#####++#######@@@@#####",
+"##@@@######++++############@@@##",
+"#@#########+##################@#",
+"@##########+###################@",
+"#########@@+@@@@@@@@@@@#########",
+"#####@@@@##++##########@@@@#####",
+"##@@@#######+++############@@@##",
+"#@#############++++###########@#",
+"@#################+++##########@",
+"#########@@@@@@@@@@@+++#########",
+"#####@@@@#############++@@@#####",
+"##@@@##################++##@@@##",
+"#@######################+#####@#",
+"@#######################+######@",
+"#########$$$$$$$$$$$$$$#+#######",
+"#####$$$$%%%%%%&&&&&&&&$$$$$####",
+"##$$$%%%%%%%%%&&&&&&&&&&&&&$$$##",
+"#$%%%%%%%%%%&&&&&&&&&&&&&&&&&&$#",
+"$%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&$"};
diff --git a/src/XSection/VPROFVIEW.xpm b/src/XSection/VPROFVIEW.xpm
new file mode 100644
index 0000000..8ef00e8
--- /dev/null
+++ b/src/XSection/VPROFVIEW.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char * VPROFVIEW_xpm[] = {
+"32 32 7 1",
+" 	c None",
+".	c #9F9F9F",
+"+	c #FFFFFF",
+"@	c #7F7F7F",
+"#	c #EC92EB",
+"$	c #BABABA",
+"%	c #E9E9FB",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+............................+.",
+".+@@@+++++++##+++++++++++++++.+.",
+".+. at ++++++++++#++++++++++++++.+.",
+".+. at ++++++++++##+++++++++++++.+.",
+".+@@@++++++++++###+++++++++++.+.",
+".+. at +++++$$$$$$$$#$$$$$++++++.+.",
+".+. at +$$$$%%%%%%%%#%%%%%$$$$++.+.",
+".+@@@%%%%%%%%%%%%#%%%%%%%%%$$.+.",
+".+.@%%%%%%%%%%%%%#%%%%%%%%%%%.+.",
+".+.@%%%%%%%%%%%%%#%%%%%%%%%%%.+.",
+".+.@@%%%%$$$$$$###$$$$$%%%%%%.+.",
+".+.@%$$$$%%%%%##%%%%%%%$$$$%%.+.",
+".+.@$%%%%%%####%%%%%%%%%%%%$$.+.",
+".+@@@%%%%%%#%%%%%%%%%%%%%%%%%.+.",
+".+.@%%%%%%%#%%%%%%%%%%%%%%%%%.+.",
+".+.@%%%%%$$#$$$$$$$$$$$%%%%%%.+.",
+".+@@@$$$$%%##%%%%%%%%%%$$$$%%.+.",
+".+.@$%%%%%%%###%%%%%%%%%%%%$$.+.",
+".+.@%%%%%%%%%%%####%%%%%%%%%%.+.",
+".+@@@%%%%%%%%%%%%%###%%%%%%%%.+.",
+".+.@%%%%%$$$$$$$$$$$###%%%%%%.+.",
+".+.@%$$$$%%%%%%%%%%%%%##$$$%%.+.",
+".+@@@%%%%%%%%%%%%%%%%%%##%%$$.+.",
+".+.@%%%%%%%%%%%%%%%%%%%%#%%%%.+.",
+".+.@%%@%%@%%@%%@%%@%%@%%@%%@%.+.",
+".+.@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+.... at ..@.. at ..@.. at ..@.. at ..@..+.",
+".++++++++++++++++++++++++++++++.",
+".++++++++++++++++++++++++++++++.",
+"@..............................."};
diff --git a/src/XSection/VProfileDef b/src/XSection/VProfileDef
deleted file mode 100644
index 0d9fc47..0000000
--- a/src/XSection/VProfileDef
+++ /dev/null
@@ -1,66 +0,0 @@
-PM_VPROF; Metview; Specific Application
-{
-    DATA
-        [
-            interface       = icon,
-            class           = GRIB,
-            exclusive       = false,
-            help            = help_data,
-            help_directory  = '/System/Defaults',
-            help_name       = Data for Profile,
-            help_class      = RETRIEVE,
-            help_definition = ( RETRIEVE, TYPE = FC, LEVTYPE = PL,
-                                PARAM = T, DATE = '-1',
-                                LEVELIST = 1000/850/700/500/400/300,
-                                STEP = 12, GRID = 1.5/1.5 ) 
-         ]
-    {
-        @
-    }
-
-    INPUT_MODE
-    {
-        POINT             ; POINT
-        NEAREST_GRIDPOINT ; GPOINT
-        AREA              ; AREA
-        AREA_2            ; AREA2
-    } = POINT
-
-    POINT
-        [
-            help         = help_input,
-            input_type   = point,
-            input_window = '/System/Defaults/Input Window'
-        ]
-    {
-        *
-        /
-    } = 0./0.
-
-    AREA
-        [
-            help         = help_input,
-            input_type   = area,
-            input_window = '/System/Defaults/Input Window'
-        ]
-    {
-        *
-        /
-    } = 30./-30./-30./30.
-
-    BOTTOM_PRESSURE
-    {
-        *
-    } = 1015.0
-
-    TOP_PRESSURE
-    {
-        *
-    } = 10.0
-
-    PRESSURE_LEVEL_AXIS
-    {
-        LINEAR
-        LOG
-    } = LINEAR
-}
diff --git a/src/XSection/VProfileRules b/src/XSection/VProfileRules
deleted file mode 100644
index 0a1d489..0000000
--- a/src/XSection/VProfileRules
+++ /dev/null
@@ -1,8 +0,0 @@
-%if INPUT_MODE = POINT
-%then
-%unset AREA
-
-%if INPUT_MODE = AREA
-%then
-%unset POINT
-
diff --git a/src/XSection/VertProfDef b/src/XSection/VertProfDef
new file mode 100644
index 0000000..f93d390
--- /dev/null
+++ b/src/XSection/VertProfDef
@@ -0,0 +1,66 @@
+PM_VPROF; Metview; Specific Application
+{
+   DATA
+      [
+         interface       = icon,
+         class           = GRIB,
+         exclusive       = false,
+         help            = help_data,
+         help_directory  = '/System/Defaults',
+         help_name       = Data for Profile,
+         help_class      = RETRIEVE,
+         help_definition = ( RETRIEVE, TYPE = FC, LEVTYPE = PL,
+                             PARAM = T, DATE = '-1',
+                             LEVELIST = 1000/850/700/500/400/300,
+                             STEP = 12, GRID = 1.5/1.5 ) 
+      ]
+   {
+      @
+   }
+
+   INPUT_MODE
+   {
+      POINT             ; POINT
+      NEAREST_GRIDPOINT ; GPOINT
+      AREA              ; AREA
+      AREA_2            ; AREA2
+   } = POINT
+
+   POINT
+      [
+         help         = help_input,
+         input_type   = point,
+         input_window = '/System/Defaults/Input Window'
+        ]
+   {
+      *
+      /
+   } = 0./0.
+
+   AREA
+      [
+         help         = help_input,
+         input_type   = area,
+         input_window = '/System/Defaults/Input Window'
+      ]
+   {
+      *
+      /
+   } = 30./-30./-30./30.
+
+   BOTTOM_PRESSURE
+   {
+      *
+   } = 1015.0
+
+   TOP_PRESSURE
+   {
+      *
+   } = 10.0
+
+   PRESSURE_LEVEL_AXIS
+   {
+      LINEAR
+      LOG
+   } = LINEAR
+}
diff --git a/src/XSection/VertProfRules b/src/XSection/VertProfRules
new file mode 100644
index 0000000..938a4ec
--- /dev/null
+++ b/src/XSection/VertProfRules
@@ -0,0 +1,5 @@
+%if INPUT_MODE = POINT %or INPUT_MODE = GPOINT %then
+   %unset AREA
+
+%if INPUT_MODE = AREA  %or INPUT_MODE = AREA2 %then
+   %unset POINT
diff --git a/src/XSection/VertProfViewDef b/src/XSection/VertProfViewDef
new file mode 100644
index 0000000..5e429d4
--- /dev/null
+++ b/src/XSection/VertProfViewDef
@@ -0,0 +1,108 @@
+VERTPROFVIEW; PlotMod Icon; Metview
+{
+   INPUT_MODE
+   {
+      POINT             ; POINT
+      NEAREST_GRIDPOINT ; GPOINT
+      AREA              ; AREA
+      AREA_2            ; AREA2
+   } = POINT
+
+   POINT
+      [
+         help         = help_input,
+         help_icon    = 'help_point',
+         input_type   = point,
+         input_window = '/System/Defaults/Input Window'
+      ]
+   {
+      *
+      /
+   } = 0./0.
+
+   AREA
+      [
+         help         = help_input,
+         help_icon    = 'help_area',
+         input_type   = area,
+         input_window = '/System/Defaults/Input Window'
+      ]
+   {
+      *
+      /
+   } = 30./-30./-30./30.
+
+   BOTTOM_PRESSURE
+   {
+      *
+   } = 1015.0
+
+   TOP_PRESSURE
+   {
+      *
+   } = 10.0
+
+   PRESSURE_LEVEL_AXIS
+      [ visible = false ]
+   {
+      LINEAR
+      LOG
+   } = LINEAR
+
+   PRESSURE_AXIS
+      [
+         interface       = icon,
+         class           = MAXIS,
+         missing         = ignored,
+         help            = help_data,
+         help_name       = Pressure Axis,
+         help_directory  = '/System/Defaults',
+         help_class      = MAXIS,
+         help_definition = ( MAXIS,AXIS_ORIENTATION=VERTICAL, AXIS_POSITION = LEFT)
+        ]
+   {
+      @
+      /
+   }
+
+   VALUE_AXIS
+      [
+         interface       = icon,
+         class           = MAXIS,
+         missing         = ignored,
+         help            = help_data,
+         help_name       = Value Axis,
+         help_directory  = '/System/Defaults',
+         help_class      = MAXIS,
+         help_definition = ( MAXIS, AXIS_TICK_LABEL_TYPE =  NUMBER )
+        ]
+   {
+      @
+      /
+   }
+
+%include OverlayControl
+
+   SUBPAGE_X_POSITION
+   {
+      @
+   } = 7.5
+
+   SUBPAGE_Y_POSITION
+   {
+      @
+   } = 7
+
+   SUBPAGE_X_LENGTH
+   {
+      @
+   } = 85
+
+   SUBPAGE_Y_LENGTH
+   {
+      @
+   } = 80
+
+   %include PageFrameDef
+   %include SubpageFrameDef
+}
diff --git a/src/XSection/VertProfViewRules b/src/XSection/VertProfViewRules
new file mode 100644
index 0000000..3d08aeb
--- /dev/null
+++ b/src/XSection/VertProfViewRules
@@ -0,0 +1,9 @@
+%if INPUT_MODE = POINT %or INPUT_MODE = GPOINT %then
+   %unset AREA
+
+%if INPUT_MODE = AREA  %or INPUT_MODE = AREA2 %then
+   %unset POINT
+
+%include PageFrameRules
+%include SubpageFrameRules
+%include OverlayControlRules
diff --git a/src/XSection/Vprofile.cc b/src/XSection/Vprofile.cc
new file mode 100644
index 0000000..2305d07
--- /dev/null
+++ b/src/XSection/Vprofile.cc
@@ -0,0 +1,718 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+/********************************************************************************
+ Important information:
+
+ 1. The Bottom/Top Levels will be computed automatically from the data, if
+    they are not given as a input parameters.
+
+ 2. Relationship among fields and interpolation:
+
+                  ML    ML&LNSP   PL    PL&LNSP
+         INTY    ok      ok       ok     ok1
+         INTN    ok     error     ok     ok1
+
+   INTY/N = interpolation yes/no
+   ok1    = LNSP is ignored
+
+ 3. If fieldset contains ML&LNSP, a conversion to PL will be computed automatically
+ ********************************************************************************/
+
+#include "Vprofile.h"
+#include "MvMiscelaneous.h"
+
+// Application mode
+enum { VP_POINT,VP_GRIDPOINT,VP_AREA,VP_AREA2 };
+
+// Type of VerticalProfile Output Mode
+enum { VP_NORMAL, VP_RTTOV };
+
+bool Vprofile::getAreaLineParameter( MvRequest& in, double& X1, double& Y1, double& X2, double& Y2)
+{
+   // Get input values
+   if( strcmp(in("INPUT_MODE"),"AREA") == 0 || strcmp(in("INPUT_MODE"),"AREA2") == 0 )
+   {
+      inputMode_ = strcmp(in("INPUT_MODE"),"AREA") == 0 ? VP_AREA : VP_AREA2;
+      Y1 = in("AREA",0);
+      X1 = in("AREA",1);
+      Y2 = in("AREA",2);
+      X2 = in("AREA",3);
+   }
+   else
+   {
+      inputMode_ = (strcmp(in("INPUT_MODE"),"POINT") == 0) ? VP_POINT : VP_GRIDPOINT;
+      Y1 = Y2 = in("POINT",0);
+      X1 = X2 = in("POINT",1);
+      return true;
+   }
+
+   // Check coordinates
+   return checkCoordinates(X1,Y1,X2,Y2);
+}
+
+void Vprofile::getAppParameters( MvRequest& in, ApplicationInfo& appInfo )
+{
+   // Retrieve remaining parameters
+   outputMode_ = VP_NORMAL;
+   if( (const char*)in("OUTPUT_MODE") &&
+       strcmp(in("OUTPUT_MODE"),"RTTOV") == 0 )
+   {
+      // Get RTTOV parameters
+      outputMode_ = VP_RTTOV;
+      waterType_ = (const char*)in("WATER_TYPE") ? (int)in("WATER_TYPE") : 0;
+      cloudTP_   = (const char*)in("CLOUD_TOP_PRESSURE") ? (double)in("CLOUD_TOP_PRESSURE") : 0.;
+      cloudFraction_ = (const char*)in("CLOUD_FRACTION") ? (double)in("CLOUD_FRACTION") : 0.;
+   }
+
+   // Default Interpolation flag, by default
+   appInfo.Interpolate(false);
+
+   return;
+}
+
+// It assumes that the dataset contains only 2 set of Level Type: a) Level Type
+// with 1 level (e.g. LNSP), b) Level Type with N levels (e.g. Model or
+// Pressure). At the current implementation, it is not possible to have a dataset
+// with Model and Pressure levels or different numbers of N levels.
+bool Vprofile::writeLevelInfoNetcdf( MvNetCDF& cdf, ApplicationInfo& appInfo, ParamMap &params, MvField* field, double* splin)
+{
+   // Loop through all parameters. It writes to the netCDF the levels from the
+   // first parameter that has more than 1 level. It also performs a consistency
+   // check to guarantee that all parameters have the same number of levels.
+   bool found = false;
+   int modlev = appInfo.levelType();
+   int nlevelM;
+   vector<double> y_values;
+   for ( ParamIterator ii = params.begin(); ii != params.end(); ii++ )
+   {
+      // Retrieve the levels info
+      LevelMap lmap = (*ii).second->Levels();
+      int nlevel = lmap.size();
+
+      // Ignore it if level Type is of type Surface or LNSP
+      if ( nlevel == 1 )
+         continue;
+
+      // Only save the first set of levels.
+      // For the remaining sets, do a simple consistency check.
+      if ( !found )
+      {
+         y_values.reserve(nlevel);
+         for ( LevelIterator jj = lmap.begin(); jj != lmap.end(); jj++ )
+         {
+            if ( modlev == XS_ML_LNSP)
+            {
+               if ( outputMode_ == VP_RTTOV )
+                  y_values.push_back( (*jj).second->YValue() );
+               else
+                  y_values.push_back( field->meanML_to_Pressure_byLNSP(*splin,(int)((*jj).second->YValue()))/100. );
+            }
+            else if ( modlev == XS_ML || modlev == cML_UKMO_ND )
+               y_values.push_back( (*jj).second->YValue() );
+            else
+               y_values.push_back( (*jj).second->YValue() / 100. );
+          }
+
+          found = true;
+          nlevelM = nlevel;
+      }
+      else
+      {
+         // Currently, only checks if the number of levels is the same, apart
+         // from surface fields
+         if ( !(*ii).second->IsSurface() && nlevelM != nlevel )
+         {
+            setError(1,"ERROR: Data has more than one LevelList");
+            return false;
+         }
+      }
+   }
+
+   // Add the 'levels' variable to the netCDF
+   vector<long> levels_dimsize(1,y_values.size());
+   vector<string> levels_name(1,XS_VARLEVEL);
+   MvNcVar *nclevels = cdf.addVariable(levels_name[0],ncDouble,levels_dimsize,levels_name);
+   nclevels->addAttribute("long_name", "Atmospheric Levels");
+   nclevels->addAttribute("units", "hPa");
+   nclevels->addAttribute("positive", "down");
+   nclevels->put(y_values,(long)y_values.size());
+
+   return true;
+}
+
+// Write geographical coordinates info to the netCDF file.
+// In the current implementation the netCDF file will contain
+// only one geographical point.
+bool Vprofile::writeGeoCoordsNetcdf( MvNetCDF& cdf, ApplicationInfo& appInfo )
+{
+   // Add Latitude value
+   vector<string> coord_sdim;
+   if ( outputMode_ == VP_RTTOV )
+      coord_sdim.push_back(XS_VARTIME);
+   else
+      coord_sdim.push_back(XS_VARLAT);
+
+   double val = appInfo.Y1();
+   vector<long> coord_ndim(1,1);
+   string coord_name = XS_VARLAT;
+   MvNcVar *nccoord = cdf.addVariable(coord_name,ncFloat,coord_ndim,coord_sdim);
+   nccoord->addAttribute("long_name", "latitude");
+   nccoord->addAttribute("units", "degrees_north");
+   nccoord->put(&val, 1);
+
+   // Add Longitude value
+   coord_sdim[0] = ( outputMode_ == VP_RTTOV ) ? XS_VARTIME : XS_VARLON;
+   val = appInfo.X1();
+   coord_name = XS_VARLON;
+   nccoord = cdf.addVariable(coord_name,ncFloat,coord_ndim,coord_sdim);
+   nccoord->addAttribute("long_name", "longitude");
+   nccoord->addAttribute("units", "degrees_east");
+   nccoord->put(&val, 1);
+
+   return true;
+}
+
+bool Vprofile::writeGlobalAttributesNetcdf( MvNetCDF& netcdf, ParamMap& params, ApplicationInfo& appInfo )
+{
+   if ( outputMode_ == VP_NORMAL )
+      netcdf.addAttribute("dataID","NETCDF_NORMAL");
+   else
+      netcdf.addAttribute("dataID","NETCDF_RTTOV_INPUT");
+
+   // Add title to the Global Attributes.
+   // Currently, because Magics only checks the Global Attributes to
+   // produce a title and this module plots only the first variable then
+   // we are adding this code below. REMOVE it when Magics is capable to
+   // produce a title from the Variable Attributes.
+   ParamInfo* parInfo = this->plotVariable(params);
+   if ( !parInfo )
+      return false;
+
+   string title = this->titleVariable(appInfo,parInfo);
+   return netcdf.addAttribute("title",title.c_str());
+}
+
+bool Vprofile::generateExtraData( MvNetCDF& cdf, ApplicationInfo& appInfo, ParamMap &params, MvFieldSetIterator& iter  )
+{
+   if ( outputMode_ != VP_RTTOV ) // nothing to be done
+      return true;
+
+   // Add derived fields
+   if ( !this->generateDerivedData( cdf, appInfo, params, iter ) )
+      return false;
+
+   // Time dimension is fixed to one
+   // Add Watertype variable
+   vector<long> values_ndim(1,appInfo.NTimes());
+   vector<string> values_sdim(1,XS_VARTIME);
+   string vname("water_type");
+   MvNcVar *ncx = cdf.addVariable(vname,ncFloat,values_ndim,values_sdim);
+   ncx->addAttribute("long_name", "Water Type");
+   ncx->addAttribute("units", "-");
+   ncx->addAttribute("_FillValue", XMISSING_VALUE);
+   ncx->put(&waterType_, 1);
+
+   // Add Cloud TopPressure variable
+   vname = "p_cloudtop_scs";
+   ncx = cdf.addVariable(vname,ncFloat,values_ndim,values_sdim);
+   ncx->addAttribute("long_name", "Cloud Top Pressure (Simple Cloud Scheme)");
+   ncx->addAttribute("units", "hPa");
+   ncx->addAttribute("_FillValue", XMISSING_VALUE);
+   ncx->put(&cloudTP_, 1);
+
+   // Add Cloud Fraction variable
+   vname = "cloud_fraction_scs";
+   ncx = cdf.addVariable(vname,ncFloat,values_ndim,values_sdim);
+   ncx->addAttribute("long_name", "Cloud Fraction (Simple Clooud Scheme)");
+   ncx->addAttribute("units", "0-1");
+   ncx->addAttribute("_FillValue", XMISSING_VALUE);
+   ncx->put(&cloudFraction_, 1);
+
+   return true;
+}
+
+bool Vprofile::generateDerivedData( MvNetCDF& cdf, ApplicationInfo& appInfo, ParamMap &params, MvFieldSetIterator &iter)
+{
+   // Create Pressure field from LNSP
+   if ( !this->generatePressureFromLNSP(cdf, appInfo, params, iter) )
+      return false;
+
+   // Create Q2 from 2t, LNSP, 2d
+   if ( !this->generateQ2(cdf, appInfo, params) )
+      return false;
+
+   // Create Orography from Z(surface)
+   if ( !this->generateOrography(cdf, appInfo, params) )
+      return false;
+
+   // Create Surface Type from LSM and CI
+   if ( !this->generateSurftype(cdf, appInfo, params) )
+      return false;
+
+   return true;
+}
+
+bool Vprofile::generatePressureFromLNSP( MvNetCDF& cdf, ApplicationInfo& appInfo, ParamMap &params, MvFieldSetIterator &iter)
+{
+   // Check consistency
+   if ( appInfo.levelType() != XS_ML_LNSP )
+   {
+      setError(1,"ERROR: No LNSP or model level data found");
+      return false;
+   }
+
+   // Find the first Model Level field.
+   // To be used to compute the Pressure values.
+   MvField field;
+   iter.rewind();
+   while( field = iter() )
+   {
+      if ( field.isModelLevel() )
+         break;
+   }
+
+   // Get level values
+   int i,nlevels;
+   double* vlevels;
+   ParamIterator ii;
+   for ( ii = params.begin(); ii != params.end(); ii++ )
+   {
+      // Find the first model level field not LNSP
+      if ( (*ii).second->IsSurface() || (*ii).second->Parameter() == LnPress )
+         continue;
+
+      // Get levels
+      LevelMap lmap = (*ii).second->Levels();
+      nlevels = lmap.size();
+      vlevels = new double[nlevels];
+      i = 0;
+      for ( LevelIterator jj = lmap.begin(); jj != lmap.end();jj++ )
+         vlevels[i++] = (*jj).second->YValue();
+
+      break;
+   }
+
+   // Initialise 'pressure' variable in the netcdf file
+   vector<long> values_ndim;
+   values_ndim.push_back(appInfo.NTimes());
+   values_ndim.push_back(nlevels);
+   vector<string> values_sdim;
+   values_sdim.push_back(XS_VARTIME);
+   values_sdim.push_back(XS_VARLEVEL);
+   MvNcVar *ncx = cdf.addVariable("pressure",ncFloat,values_ndim,values_sdim);
+
+   // Add attributes
+   ncx->addAttribute("long_name", "Pressure - full level");
+   ncx->addAttribute("units", "Pa");
+   ncx->addAttribute("_FillValue", XMISSING_VALUE);
+
+   // Get LNSP values, compute pressure and update the netcdf file
+   int ntimes = 0;
+   double* values = new double[nlevels];
+   for ( ii = params.begin(); ii != params.end(); ii++ )
+   {
+      // Find LNSP field
+      if ( (*ii).second->Parameter() != LnPress )
+         continue;
+
+      // Retrieve the levels info (single dimension)
+      LevelMap lmap = (*ii).second->Levels();
+      LevelIterator jj = lmap.begin();
+      double lnsp = ((*jj).second->XValues())[0];
+      for ( i = 0; i < nlevels; i++ )
+      {
+         values[i] = field.meanML_to_Pressure_byLNSP(lnsp,vlevels[i]);
+      }
+
+      // Add 'levels' values to the netCDF
+      ncx->setCurrent(ntimes);
+      ncx->put(values,1,(long)nlevels);
+      ntimes++;
+   }
+
+   // Release memory
+   delete [] vlevels; vlevels = 0;
+   delete [] values;  values  = 0;
+
+   // Check consistency
+   if ( appInfo.NTimes() != ntimes )
+   {
+      setError(1,"ERROR: Number of LNSP fields not consistent with other fields");
+      return false;
+   }
+
+   return true;
+}
+
+bool Vprofile::generateQ2( MvNetCDF& cdf, ApplicationInfo& appInfo, ParamMap &params )
+{
+   // Get input fields: two meter temperature, LNSP, two meter dewpoint temperature
+   int ntimes = appInfo.NTimes();
+   double* tmt    = new double[ntimes];
+   double* lnsp   = new double[ntimes];
+   double* tmdt   = new double[ntimes];
+   double* values = new double[ntimes];
+   int i2t = 0, ilnsp = 0, i2d = 0, icount = 0;
+   double *pt;
+   for ( ParamIterator ii = params.begin(); ii != params.end(); ii++ )
+   {
+      if ( (*ii).second->ParamName() == "2t" )
+         pt = &tmt[i2t++];
+      else if ( (*ii).second->ParamName() == "lnsp" )
+         pt = &lnsp[ilnsp++];
+      else if ( (*ii).second->ParamName() == "2d" )
+         pt = &tmdt[i2d++];
+      else
+         continue;
+
+      // Retrieve the levels info (single dimension)
+      LevelMap lmap = (*ii).second->Levels();
+      LevelIterator jj = lmap.begin();
+      *pt = ((*jj).second->XValues())[0];
+      icount++;
+   }
+
+   // Check consistency
+   if ( icount/3 != ntimes )
+   {
+      setError(1,"ERROR: Number of 2t/lnsp/2d fields not consistent with other fields");
+      return false;
+   }
+
+   // Compute Q2 field
+   for ( int i = 0; i < ntimes; i++ )
+      values[i] = metview::specificHumidityFromTd(tmt[i], exp(lnsp[i]), tmdt[i]);
+
+   // Create Q2 variable in the netcdf file
+   vector<long> values_ndim(1,appInfo.NTimes());
+   vector<string> values_sdim(1,XS_VARTIME);
+   MvNcVar *ncx = cdf.addVariable("q_2",ncFloat,values_ndim,values_sdim);
+
+   // Add attributes and values
+   ncx->addAttribute("long_name", "Skin Specific Humidity");
+   ncx->addAttribute("units", "kg/kg");
+   ncx->addAttribute("_FillValue", XMISSING_VALUE);
+   ncx->put(values,(long)ntimes);
+
+   // Release memory
+   delete [] tmt;    tmt    = 0;
+   delete [] lnsp;   lnsp   = 0;
+   delete [] tmdt;   tmdt   = 0;
+   delete [] values; values = 0;
+
+   return true;
+}
+
+bool Vprofile::generateOrography( MvNetCDF& cdf, ApplicationInfo& appInfo, ParamMap &params )
+{
+   // Get input field: geopotential surface
+   int ntimes = appInfo.NTimes();
+   double* values = new double[ntimes];
+   int icount = 0;
+   for ( ParamIterator ii = params.begin(); ii != params.end(); ii++ )
+   {
+      if ( (*ii).second->ParamName() == "z" &&  (*ii).second->LevelType() == "sfc")
+      {
+         // Retrieve the levels info (single dimension)
+         LevelMap lmap = (*ii).second->Levels();
+         LevelIterator jj = lmap.begin();
+         values[icount] = ((*jj).second->XValues())[0] / 9.81; // g (gravitation acceleration)
+         icount++;
+      }
+   }
+
+   // Check consistency
+   if ( icount != ntimes )
+   {
+      setError(1,"ERROR: Number of Z(surface) fields not consistent with other fields");
+      return false;
+   }
+
+   // Create Orography variable in the netcdf file
+   vector<long> values_ndim(1,appInfo.NTimes());
+   vector<string> values_sdim(1,XS_VARTIME);
+   MvNcVar *ncx = cdf.addVariable("orog",ncFloat,values_ndim,values_sdim);
+
+   // Add attributes and values
+   ncx->addAttribute("long_name", "Orography");
+   ncx->addAttribute("units", "m");
+   ncx->addAttribute("_FillValue", XMISSING_VALUE);
+   ncx->put(values,(long)ntimes);
+
+   // Release memory
+   delete [] values; values = 0;
+
+   return true;
+}
+
+bool Vprofile::generateSurftype( MvNetCDF& cdf, ApplicationInfo& appInfo, ParamMap &params )
+{
+   // Get input fields: LSM and CI (Sea Ice Cover)
+   int ntimes = appInfo.NTimes();
+   double* lsm    = new double[ntimes];
+   double* ci     = new double[ntimes];
+   double* values = new double[ntimes];
+   int ilsm = 0, ici = 0, icount = 0;
+   double *pt;
+   for ( ParamIterator ii = params.begin(); ii != params.end(); ii++ )
+   {
+      if ( (*ii).second->ParamName() == "lsm")
+         pt = &lsm[ilsm++];
+      else if ( (*ii).second->ParamName() == "ci" )
+         pt = &ci[ici++];
+      else
+         continue;
+
+      // Retrieve the levels info (single dimension)
+      LevelMap lmap = (*ii).second->Levels();
+      LevelIterator jj = lmap.begin();
+      *pt = ((*jj).second->XValues())[0];
+      icount++;
+   }
+
+   // Check consistency
+   if ( icount/2 != ntimes )
+   {
+      setError(1,"ERROR: Number of lsm/ci fields not consistent with other fields");
+      return false;
+   }
+
+   // Compute Surface Type field
+   for ( int i = 0; i < ntimes; i++ )
+   {
+      if ( lsm[i] == 0. )
+      {
+         if ( ci[i] > 0.8 )
+            values[i] = 2;
+         else
+            values[i] = 0;
+      }
+      else
+         values[i] = 1;
+   }
+
+   // Create Surface Type variable in the netcdf file
+   vector<long> values_ndim(1,appInfo.NTimes());
+   vector<string> values_sdim(1,XS_VARTIME);
+   MvNcVar *ncx = cdf.addVariable("surftype",ncFloat,values_ndim,values_sdim);
+
+   // Add attributes and values
+   ncx->addAttribute("long_name", "Surface Type");
+   ncx->addAttribute("units", "-");
+   ncx->addAttribute("_FillValue", XMISSING_VALUE);
+   ncx->put(values,(long)ntimes);
+
+   // Release memory
+   delete [] lsm;    lsm    = 0;
+   delete [] ci;     ci     = 0;
+   delete [] values; values = 0;
+
+   return true;
+}
+
+MvRequest Vprofile::createOutputRequest( ApplicationInfo& appInfo, string netcdfName, ParamInfo* parInfo )
+{
+   // If action is not visualisation related then return the netcdf data
+   if ( !isVisualise( appInfo ) )
+   {
+      // Get output data verb
+      string verb;
+      string actionMode = appInfo.actionMode();
+      if ( outputMode_ == VP_RTTOV &&
+           (actionMode == "analyse" || actionMode == "prepare") )
+         verb = "NETCDF_RTTOV_INPUT";
+      else
+         verb = "NETCDF";
+
+      // Build output request
+      MvRequest xs(verb.c_str());
+      xs("PATH") = netcdfName.c_str();
+      xs("TEMPORARY") = 1;
+
+      return xs;
+   }
+
+   // Create netCDF data request
+   MvRequest xs("NETCDF");
+   xs("PATH") = netcdfName.c_str();
+   xs("TEMPORARY") = 1;
+
+   // Create netCDF output request
+   MvRequest out1("NETCDF_XY_POINTS");
+   out1("NETCDF_DATA") = xs;
+   out1("NETCDF_Y_VARIABLE") = XS_VARLEVEL.c_str();
+   out1("NETCDF_X_VARIABLE") = parInfo->ParamName().c_str();
+
+   // Create customised Cartesian View request.
+   // If an icon was dropped into a view, uPlot will ignore it.
+   // Mode-specific options
+   MvRequest viewReq("CARTESIANVIEW");
+   viewReq("X_AXIS_TYPE") = "regular";
+   viewReq("X_AUTOMATIC") = "on";
+   viewReq("Y_AUTOMATIC") = "on";
+   viewReq("Y_AUTOMATIC_REVERSE") = "on";
+
+   // Final output request
+   MvRequest out = viewReq + out1;
+   return out;
+}
+
+// Write curve values to file
+// The routine ignores min/max_level. Remove thiese parameters later
+bool Vprofile::generateData ( ApplicationInfo& appInfo, ParamMap &params,
+                              MvNetCDF& cdf, MvField&, const string& key )
+{
+   // Get parameter info
+   ParamInfo *par = this->getParamInfo(params,key);
+   if ( !par )
+      return false;
+
+   // Add/update Parameter to the netCDF
+   string varname = this->getNetcdfVarname(par->ParamName());
+   MvNcVar *ncx = cdf.getVariable(varname);
+   if ( !ncx )   // Create a new variable
+   {
+      ntime_ = 0;
+      vector<long> values_ndim;
+      values_ndim.push_back(appInfo.NTimes());
+      vector<string> values_sdim;
+      values_sdim.push_back(XS_VARTIME);
+      if ( !par->IsSurface() && par->Parameter() != LnPress)
+      {
+         values_ndim.push_back(par->NrLevels());
+         values_sdim.push_back(XS_VARLEVEL);
+      }
+
+      ncx = cdf.addVariable(varname,ncFloat,values_ndim,values_sdim);
+
+      // Add attributes
+      ncx->addAttribute("long_name", par->ParamLongName().c_str());
+      ncx->addAttribute("units", par->Units().c_str());
+      ncx->addAttribute("_FillValue", XMISSING_VALUE);
+      ncx->addAttribute("title",titleVariable(appInfo,par).c_str());
+   }
+
+   // Retrieve xvalues
+   LevelMap lmap  = par->Levels();
+   int nlevels = lmap.size();
+   double *x_values = new double[nlevels];
+   int i = 0;
+   for (LevelIterator jj = lmap.begin(); jj != lmap.end(); jj++)
+      x_values[i++] = ((*jj).second->XValues())[0];
+
+   // Write values to the netCDF
+   ncx->setCurrent(ntime_++);
+   ncx->put(x_values,1,nlevels);
+
+   delete [] x_values;
+
+   return true;
+}
+
+int Vprofile::computeNumberPoints( ApplicationInfo& appInfo )
+{
+   appInfo.NrPoints(1);
+   return 1;
+}
+
+bool Vprofile::fillValues( ApplicationInfo& appInfo, MvField &field, double *vals )
+{
+   MvFieldExpander x(field);
+
+   // Get data value
+   double X1,X2,Y1,Y2;
+   appInfo.getAreaLine( X1,X2,Y1,Y2 );
+   if ( inputMode_ == VP_POINT )
+      vals[0] =  field.interpolateAt(X1,Y1);
+   else if ( inputMode_ == VP_GRIDPOINT )
+      vals[0] =  field.nearestGridpoint(X1,Y1);
+   else if ( inputMode_ == VP_AREA )
+      vals[0] = field.averageAt(X1,Y1,X2,Y2);
+   else if ( inputMode_ == VP_AREA2 )
+      vals[0] = field.integrate( Y1, X1, Y2, X2 );
+   else
+   {
+      setError(1,"ERROR: Undefined Vertical Profile type");
+      return false;
+   }
+
+   // Check missing value
+   if ( vals[0] > XMISSING_VALUE )
+      vals[0] = XMISSING_VALUE;
+
+   return true;
+}
+
+bool Vprofile::fieldConsistencyCheck ( MvField& field, ApplicationInfo& appInfo)
+{
+   if( inputMode_ == VP_GRIDPOINT )
+   {
+      double X1,X2,Y1,Y2;
+      appInfo.getAreaLine(X1,X2,Y1,Y2);
+      MvLocation nearestGridPoint = field.nearestGridPointLocation( MvLocation( Y1, X1 ) );
+      if( nearestGridPoint.ok() )
+      {
+         X1 = nearestGridPoint.x();
+         Y1 = nearestGridPoint.y();
+         appInfo.setAreaLine(X1,X2,Y1,Y2);
+      }
+   }
+
+   return true;
+}
+
+string Vprofile::titleVariable( ApplicationInfo& appInfo, ParamInfo* par )
+{
+   char titlestr[150];
+   if ( inputMode_ == VP_POINT || inputMode_ == VP_GRIDPOINT)
+      sprintf(titlestr,"Vertical profile of %s %d %02d Step %d %s Point (%.1f,%.1f)",
+              par->ParamLongName().c_str(), par->Date(),par->Time(),par->Step(),
+              par->ExpVerTitle().c_str(), appInfo.Y1(), appInfo.X1() );
+
+   else
+      sprintf(titlestr,"Vertical Profile of %s %d %02d Step %d %s Area [%.1f,%.1f,%.1f,%.1f]",
+              par->ParamLongName().c_str(), par->Date(),par->Time(),par->Step(),
+              par->ExpVerTitle().c_str(), appInfo.Y1(), appInfo.X1(), appInfo.Y2(),appInfo.X2() );
+
+   return string(titlestr);
+}
+
+void Vprofile::updateInterpolateValues( ApplicationInfo& appInfo)
+{
+   // INTERPOLATE_VALUES must be YES because data is MODEL LEVEL plus LNSP
+   if ( appInfo.levelType() != XS_PL && appInfo.haveLNSP() )
+      appInfo.Interpolate(true);
+
+   return;
+}
+
+//---------------------------------------------------------------------
+
+// Translate Metview 3 Vertical Profile Data to Metview 4 definition. Call Metview 4
+// server to process the job.
+void VprofileM3::serve(MvRequest& in,MvRequest& out)
+{
+   // Send a general warning message
+   setError(0, "The Metview 3 VERTICAL PROFILE DATA icon is deprecated. An automatic translation to the Metview 4 VERTICAL PROFILE DATA icon will be performed internally, but may not work for all cases. It is recommended to manually replace the old icons with their new equivalents.");
+
+   // There are input parameters that are no longer available in Metview 4.
+   // Remove them and send a warning message.
+   setError(0,"The Metview 3 VERTICAL PROFILE DATA icon is deprecated. Parameters PRESSURE_LEVEL_AXIS, BOTTOM_PRESSURE and TOP_PRESSURE will not be translated internally.");
+   MvRequest req = in;
+   req.unsetParam("PRESSURE_LEVEL_AXIS");
+   req.unsetParam("BOTTOM_PRESSURE");
+   req.unsetParam("TOP_PRESSURE");
+
+   // Keep the remaining parameters and update the VERB
+   req.setVerb("MVPROFILE");
+
+   // Call the Xsection server to process the job
+   Xsect::serve(req,out);
+}
diff --git a/src/XSection/Vprofile.h b/src/XSection/Vprofile.h
new file mode 100644
index 0000000..74fd39a
--- /dev/null
+++ b/src/XSection/Vprofile.h
@@ -0,0 +1,84 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 VERTPROF_H
+#define VERTPROF_H
+
+/********************************************************************************
+  Application for Vertical Profile.
+  It takes a GRIB file as input (in addition to the values given by the user),
+  and produces an NetCDF file as output. There is no metadata on output request,
+  only the path to NetCDF file.
+
+  First the GRIB while is read, and info about all parameters and level are stored.
+  Then several flags is set, based on the data and the input request, to determine
+  how the application should run.
+
+  The file is rewound, and sorted by param, date, time, step and expver. All fields
+  with the same values for the sorting parameters are one plot. If any of these
+  values change, all data are written out as netcdf variables with names put
+  together from the sorting values.
+********************************************************************************/
+
+#include "Xsect.h"
+
+class Vprofile : public Xsect {
+
+public:
+
+   Vprofile() : Xsect("MVPROFILE")      { view_ = "MVPROFILEVIEW"; }
+   Vprofile(const char* kw) : Xsect(kw) { view_ = "MVPROFILEVIEW"; }
+
+   bool writeLevelInfoNetcdf ( MvNetCDF&, ApplicationInfo&, ParamMap&, MvField*, double* );
+   bool writeGeoCoordsNetcdf ( MvNetCDF&, ApplicationInfo& );
+   bool writeGlobalAttributesNetcdf ( MvNetCDF&, ParamMap&, ApplicationInfo& );
+   bool generateExtraData( MvNetCDF&, ApplicationInfo&, ParamMap&, MvFieldSetIterator& );
+   bool generateDerivedData( MvNetCDF&, ApplicationInfo&, ParamMap&, MvFieldSetIterator& );
+   bool generatePressureFromLNSP( MvNetCDF&, ApplicationInfo&, ParamMap&, MvFieldSetIterator&);
+   bool generateQ2( MvNetCDF&, ApplicationInfo&, ParamMap& );
+   bool generateOrography( MvNetCDF&, ApplicationInfo&, ParamMap& );
+   bool generateSurftype( MvNetCDF&, ApplicationInfo&, ParamMap& );
+   bool generateData( ApplicationInfo&, ParamMap&, MvNetCDF&, MvField&, const string& );
+
+   bool getAreaLineParameter( MvRequest&, double&, double&, double&, double&);
+
+   void getAppParameters( MvRequest&, ApplicationInfo& );
+
+   MvRequest createOutputRequest( ApplicationInfo&, string, ParamInfo* );
+
+   int computeNumberPoints( ApplicationInfo& );
+
+   bool fillValues( ApplicationInfo&, MvField&, double* );
+
+   bool fieldConsistencyCheck ( MvField&, ApplicationInfo& );
+
+   string titleVariable( ApplicationInfo&, ParamInfo*);
+
+   void updateInterpolateValues( ApplicationInfo& );
+
+private:
+
+   int inputMode_;   // VP_POINT/VP_GRIDPOINT/VP_AREA/VP_AREA2
+   int outputMode_;  // VP_NORMAL/VP_RTTOV
+
+  // RTTOV specific parameters
+   double waterType_, cloudTP_, cloudFraction_;
+};
+
+//---------------------------------------------------------------------
+
+class VprofileM3 : public Vprofile {
+
+public:
+
+   VprofileM3() : Vprofile("PM_VPROF") {}
+
+   void serve( MvRequest&, MvRequest& );
+};
+#endif
diff --git a/src/XSection/XAverageDef b/src/XSection/XAverageDef
deleted file mode 100644
index 2ff1f5c..0000000
--- a/src/XSection/XAverageDef
+++ /dev/null
@@ -1,60 +0,0 @@
-PM_AVERAGE; Metview; Specific Application
-{
-    DATA
-        [ 
-            interface       = icon,
-            class           = GRIB,
-            exclusive       = false,
-            help            = help_data,
-            help_directory  = '/System/Defaults',
-            help_name       = Data for Average,
-            help_class      = RETRIEVE,
-            help_definition = ( RETRIEVE, TYPE = FC, LEVTYPE = PL,
-                                PARAM = T, DATE = '-1',
-                                LEVELIST = 1000/850/700/500/400/300,
-                                STEP = 12, GRID = 1.5/1.5 ) 
-        ]
-    {
-        @
-    }
-
-    AREA
-        [
-            help         = help_input,
-            help_icon    = 'help_area',
-            input_type   = area,
-            input_window = '/System/Defaults/Input Window'
-        ]
-    {
-        *
-        /
-    } = 90./-180./-90./180.
-
-    DIRECTION
-    {
-        NORTH SOUTH	; NS
-        EAST WEST	; EW
-    } = NS
-
-    BOTTOM_PRESSURE
-    {
-        *
-    } = 1015.0
-
-    TOP_PRESSURE
-    {
-        *
-    } = 10.0
-
-    PRESSURE_LEVEL_AXIS
-    {
-        LINEAR
-        LOG
-    } = LINEAR
-
-    INTERPOLATE_VALUES
-    {
-        YES
-        NO
-    } = YES
-}
diff --git a/src/XSection/XSECT.xpm b/src/XSection/XSECT.xpm
new file mode 100644
index 0000000..e8dbb6d
--- /dev/null
+++ b/src/XSection/XSECT.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char * XSECT_xpm[] = {
+"32 32 7 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #BABABA",
+"@	c #E9E9FB",
+"#	c #7F7F7F",
+"$	c #92BEEC",
+"%	c #E4D8C2",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+".........++++++++++++++.........",
+".....++++@@@@@@@@@@@@@@++++.....",
+"..+++@@@@@@@@@@@@@@@@@@@@@@+++..",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@++++++++++++++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@++++++++++++++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@++++++++++++++@@@@@@@@@",
+"@@@@@++++@@@@@@@@@@@@@@++++@@@@@",
+"@@+++@@@@@@@@@@@@@@@@@@@@@@+++@@",
+"@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@",
+"+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+",
+"@@@@@@@@@##############@@@@@@@@@",
+"@@@@@####$$$$$$%%%%%%%%#####@@@@",
+"@@###$$$$$$$$$%%%%%%%%%%%%%###@@",
+"@#$$$$$$$$$$%%%%%%%%%%%%%%%%%%#@",
+"#$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%#"};
diff --git a/src/XSection/XSECTVIEW.xpm b/src/XSection/XSECTVIEW.xpm
new file mode 100644
index 0000000..25ac071
--- /dev/null
+++ b/src/XSection/XSECTVIEW.xpm
@@ -0,0 +1,44 @@
+/* XPM */
+static char * XSECTVIEW_xpm[] = {
+"32 32 9 1",
+" 	c None",
+".	c #989898",
+"+	c #FFFFFF",
+"@	c #BEBEBE",
+"#	c #BABABA",
+"$	c #E9E9FB",
+"%	c #7F7F7F",
+"&	c #92BEEC",
+"*	c #E4D8C2",
+"................................",
+".++++++++++++++++++++++++++++++.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++++++++++++++++++++++@+.",
+".+ at ++++++##############++++++ at +.",
+".+ at ++####$$$$$$$$$$$$$$####++ at +.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$##############$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$##############$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$##############$$$$$$@+.",
+".+@$$####$$$$$$$$$$$$$$####$$@+.",
+".+@##$$$$$$$$$$$$$$$$$$$$$$##@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$$$$$$$$$$$$$$$$$$$$$@+.",
+".+@$$$$$$%%%%%%%%%%%%%%$$$$$$@+.",
+".+@$$%%%%&&&&&&********%%%%%$@+.",
+".+@%%&&&&&&&&&*************%%@+.",
+".+@@@@@@@@@@@@@@@@@@@@@@@@@@@@+.",
+".++++++++++++++++++++++++++++++.",
+"................................"};
diff --git a/src/XSection/XSectionDef b/src/XSection/XSectionDef
deleted file mode 100644
index 6fad03f..0000000
--- a/src/XSection/XSectionDef
+++ /dev/null
@@ -1,97 +0,0 @@
-PM_XSECT; Metview; Specific Application
-{
-    DATA
-        [
-            interface       = icon,
-            class           = GRIB,
-            exclusive       = false,
-            help            = help_data,
-            help_directory  = '/System/Defaults',
-            help_name       = Data for XSection,
-            help_class      = RETRIEVE,
-            help_definition = ( RETRIEVE, TYPE = FC, LEVTYPE = PL,
-                                PARAM = T, DATE = '-1',
-                                LEVELIST = 1000/850/700/500/400/300,
-                                STEP = 12, GRID = 1.5/1.5 ) 
-        ]
-    { @ }
-
-    LINE
-        [
-            help         = help_input,
-            help_icon    = 'help_line',
-            input_type   = line,
-            input_window = '/System/Defaults/Input Window'
-        ]
-    {
-        *
-        /
-    } = 0./-180./0./180.
-
-    PRESSURE_LEVEL_AXIS
-    {
-        LINEAR
-        LOG
-    } = LINEAR
-
-    BOTTOM_PRESSURE
-    {
-        *
-    } = 1015.0
-
-    TOP_PRESSURE
-    {
-        *
-    } = 10.0
-
-    WIND_PARALLEL
-    {
-        ON
-        OFF
-    } = ON
-
-    WIND_PERPENDICULAR
-    {
-        ON
-        OFF
-    } = OFF
-
-    WIND_INTENSITY
-    {
-        ON
-        OFF
-    } = OFF
-
-    WIND_HORIZONTAL_COMPONENT [ visible = false ]
-    {
-        PERPENDICULAR   ; PER
-        PARALLEL        ; PAR
-        INTENSITY       ; INT
-    } = PAR
-
-    INTERPOLATE_VALUES
-    {
-        YES
-        NO
-    } = YES
-
-    LNSP_PARAM
-    {
-        *
-    } = 152
-
-    U_WIND_PARAM
-    {
-        *
-    } = 131
-
-    V_WIND_PARAM
-    {
-        *
-    } = 132
-
-    W_WIND_PARAM
-    {
-        *
-    } = 135
-}
diff --git a/src/XSection/XSectionRules b/src/XSection/XSectionRules
deleted file mode 100644
index 6c8eddc..0000000
--- a/src/XSection/XSectionRules
+++ /dev/null
@@ -1,8 +0,0 @@
-%if WIND_HORIZONTAL_COMPONENT = PER %then
-	%set WIND_PERPENDICULAR = ON
-
-%if WIND_HORIZONTAL_COMPONENT = INT %then
-	%set WIND_INTENSITY = ON
-
-%if INTERPOLATE_VALUES = NO %then
-     %unset PRESSURE_LEVEL_AXIS
diff --git a/src/XSection/Xsect.cc b/src/XSection/Xsect.cc
index e386b91..b518f5b 100644
--- a/src/XSection/Xsect.cc
+++ b/src/XSection/Xsect.cc
@@ -7,813 +7,1012 @@
 
  ***************************** LICENSE END *************************************/
 
-#include <inc_iostream.h>
+/********************************************************************************
+ Important information:
 
-#define  INITIALISE_HERE
-#include "MvXsectFrame.h"
+ 1. The Bottom/Top Levels will be computed automatically from the data, if
+    they are not given as a input parameters.
 
+ 2. Relationship among fields and interpolation:
 
-/**************
-  Application for Xsection, Average and Vertical Profile.
-  It takes a GRIB file as input (in addition to the values
-  given by the user),  and produces an NetCDF
-  file as output. There is no metadata on output request,
-  only the path to NetCDF file.
+                  ML    ML&LNSP   PL    PL&LNSP
+         INTY    ok      ok       ok     ok1
+         INTN    ok     error     ok     ok1
 
-  First the GRIB while is read, and info about all
-  parameters and level are stored. Then several
-  flags is set, based on the data and the input
-  request, to determine how the application should
-  run.
+   INTY/N = interpolation yes/no
+   ok1    = LNSP is ignored
 
-  The file is rewound, and sorted by param, date,
-  time, step and expver. All fields with the
-  same values for the sorting parameters are
-  one plot. If any of these values change, all
-  data are written out as netcdf variables with
-  names put together from the sorting values.
+ 3. If fieldset contains ML&LNSP, a conversion to PL will be computed automatically
+ ********************************************************************************/
 
-***************/
+#define INITIALISE_HERE
 
+#include "Xsect.h"
+#include "Average.h"
+#include "CrossS.h"
+#include "MvMiscelaneous.h"
+#include "Vprofile.h"
 
-
-class Xsect : public MvService {
-protected:
-  int			mode;
-  string                view_;
-  Xsect(const char* kw) : MvService(kw)	{};
-
-public:
-
-  void serve(MvRequest&,MvRequest&);
-
-  bool fillValues(MvField &,double*,double,double,double,double,
-		  AppMode,double*,double*,int);
-
-  void generateKey(string&,int,int,int,int,const char *);
-};
-
-
-class Vprofile	:	public Xsect {
-public:
-  Vprofile()	:	Xsect("PM_VPROF")
-  { mode = AppVertprof; view_ = "MVERTPROFVIEW";  }
-};
-
-class CrossS	:	public Xsect {
-public:
-  CrossS()	:	Xsect("PM_XSECT")
-  {mode = AppXsect; view_ = "MXSECTVIEW";}
-};
-
-class Average	:	public Xsect {
-public:
-  Average()	:	 Xsect("PM_AVERAGE")
- {  mode = AppAverage;  view_ = "MAVERAGEVIEW"; }
-};
-
-
-// different: returns true if d1 and d2 are larger than e apart
-
-inline static bool different (double d1, double d2, double e)
+void Xsect::serve(MvRequest& in,MvRequest& out)
 {
-    return (fabs(d1 - d2) > e);
+cout << "request IN" << endl;
+in.print();
+
+   // Get Input parameters
+   MvRequest grib;
+   ApplicationInfo appInfo;
+   if ( !this->getInputParameters( in, grib, appInfo ) )
+      return;
+
+   // Initialize fildset iterator
+   MvFieldSet fs(grib);
+   MvFieldSetIterator iter(fs);
+   MvField field = iter();
+
+   // Retrieve initial info
+   double X1,X2,Y1,Y2;
+   double north, south, east, west;
+   this->getInitialFieldInfo(field,appInfo,north,south,east,west);
+   appInfo.getAreaLine( X1,X2,Y1,Y2 );
+
+   // Compute number of vertical points
+   int npoint = this->computeNumberPoints(appInfo);
+   if( npoint == 0 )
+   {
+      setError(1,"Invalid Area/Line!");
+      return;
+   }
+   if( appInfo.viaPole() )
+      setError( 0, "Xsect line via Pole" );
+
+   // Memory allocation
+   double *xint  = new double [ npoint ];
+   double *splin = new double [ npoint ];
+
+   // First loop: build field keystring and get the Level info.
+   // The LNSP matrix data is also computed, but the other matrices
+   // are computed in the second loop.
+   bool foundLNSP = false;
+   boolean isPL = false;
+   boolean isML = false;
+   ParamMap params;
+   string keystr;
+   bool foundU = false, foundV = false, foundW = false;
+   int iparam, idate, itime, istep;
+   const char* expver = 0;
+   iter.rewind();
+   while( field = iter() )
+   {
+      // Retrieve info from the field request
+      MvRequest rq=field.getRequest();
+      iparam = rq("PARAM");
+      const char *lev = rq("LEVELIST");
+      istep  = rq("STEP");
+      idate  = rq("DATE");
+      itime  = rq("TIME");
+      expver = rq("EXPVER");
+      isML = field.isModelLevel();
+      if ( !isML)
+         isPL = field.isPressureLevel();
+
+      // Check that this field's vital statistics match those of the others
+      // - this is important only in the Average application
+      if ( !fieldConsistencyCheck(field,north,south,east,west) )
+         return;
+
+      // Update level info accordingly
+      if( !lev || !strcmp(lev, "0") || field.levelTypeString() == cML_UKMO_ND_STR )
+      {
+         double dlev = field.level();
+         if( field.levelTypeString() == cML_UKMO_ND_STR )
+            dlev = field.level_L2();
+
+         const int cLVLBUF = 64;
+         static char buf[ cLVLBUF ];
+         ostrstream s( buf, cLVLBUF );
+         s << dlev << ends;
+
+         lev = buf;
+      }
+
+      // Generate keys and insert level info
+      // Calculate the data matrix for LNSP field
+      generateKey(keystr,iparam,idate,itime,istep,expver);
+      if ( iparam == LnPress )
+      {
+         foundLNSP = true;
+         appInfo.haveLNSP(true);
+         fillValues( appInfo,field,splin );
+         ParamInfo* par = new ParamInfo( iparam,idate,itime,istep,
+                                         field.getGribKeyValueString("shortName"),
+                                         field.getGribKeyValueString("name"),
+                                         field.getGribKeyValueString("units"),
+                                         field.getGribKeyValueString("levelType")
+                                       );
+
+         // Add 'level' values info
+         par->Level(splin,lev,npoint,XS_ML_LNSP);
+         par->ExpVer(expver?expver:"_");
+
+         params.insert(ParamPair(keystr,par) );
+      }
+      else
+      {
+         if ( iparam == U_FIELD )
+            foundU = true;
+         else if ( iparam == V_FIELD )
+            foundV = true;
+         else if ( iparam == W_FIELD )
+            foundW = true;
+
+         ParamInfo* par = new ParamInfo( iparam,idate,itime,istep,
+                                         field.getGribKeyValueString("shortName"),
+                                         field.getGribKeyValueString("name"),
+                                         field.getGribKeyValueString("units"),
+                                         field.getGribKeyValueString("levelType")
+                                       );
+
+         ParamInsertPair inserted = params.insert(ParamPair(keystr,par));
+         ParamInfo *pp = (*(inserted.first)).second;
+         pp->AddLevel(lev);
+         pp->ExpVer(expver?expver:"_");
+      }
+   } //end while (first loop)
+
+   // Update INTERPOLATE_VALUES parameter
+   this->updateInterpolateValues(appInfo);
+
+   // Check if fieldset is compatible with the application
+   if ( this->consistencyCheck( appInfo, params ) == false )
+   {
+      setError(1,"ERROR: Consistency check failed");
+      return;
+   }
+
+   // Update/initialize info
+   // If fieldset contains LNSP and PL then IsML and IsPL are true.
+   // In this case, treat as PL with LNSP, which means modlev = XS_ML_LNSP
+   int modlev = appInfo.levelType();
+   if ( foundLNSP && !isPL )
+   {
+      if( modlev != cML_UKMO_ND )
+         modlev = XS_ML_LNSP;
+   }
+   else
+   {
+      if ( isML && !isPL )
+         modlev = XS_ML;
+      else // it must be PL
+         modlev = XS_PL;
+   }
+
+   // Update application info
+   appInfo.updateLevels(params,modlev);
+   appInfo.levelType(modlev);
+   appInfo.axisType(false); //Remove the log code from MvXsectFrame since Magics is doing the job now.
+
+   // Update flags
+   this->setHorCompFlags(foundU,foundV,foundW);
+
+   // Update min/max vertical axis values and number of levels 
+   int nlevel;
+   double pBottom,pTop;
+   appInfo.getMinMaxLevels(pBottom,pTop,nlevel);
+   if ( this->updateTopBottomLevels( params, modlev, iter, pBottom, pTop, nlevel ) )
+      appInfo.setMinMaxLevels( pBottom, pTop, nlevel );
+
+   // Create a temporary netCDF file
+   string netcdfName(marstmp());
+   MvNetCDF netcdf(netcdfName,'w');
+   if ( !netcdf.isValid() )
+   {
+      setError(1,"ERROR: Could not open netCDF file");
+      return;
+   }
+
+   // Write netCDF global attributes
+   if ( !this->writeGlobalAttributesNetcdf(netcdf,params,appInfo) )
+      return;
+
+   // Write initial variables to the netCDF file: levels, time,
+   // geographical coordinates
+   iter.rewind();
+   field = iter();
+   int ntimes;
+   if ( !this->writeLevelInfoNetcdf(netcdf,appInfo,params,&field,splin) )
+      return;
+   if ( !this->writeTimeInfoNetcdf(netcdf,params,ntimes) )
+      return;
+   if ( !this->writeGeoCoordsNetcdf( netcdf, appInfo ) )
+      return;
+
+   // Update application info: number of times
+   appInfo.NTimes (ntimes);
+
+   // Initialize variables
+   string lastKey        = "FIRSTFIELD";
+   int currentGenerated  = 0, lastNrGenerated = -1;
+   MvField lastField;
+
+   // Initialize fieldset iterator
+   iter.rewind();
+   iter.sort("LEVELIST");
+   iter.sort("STEP");
+   iter.sort("EXPVER");
+   iter.sort("TIME");
+   iter.sort("DATE");
+   iter.sort("PARAM");
+
+   // Second loop: generate data
+   ParamIterator paramIter;
+   while( field = iter() )
+   {
+      currentGenerated++;
+      MvRequest	r = field.getRequest();
+      iparam = r("PARAM");
+      idate  = r("DATE");
+      itime  = r("TIME");
+      istep  = r("STEP");
+      expver = r("EXPVER");
+
+      // Update level info accordingly
+      const char *clev = r("LEVELIST");
+      if( !clev || !strcmp(clev, "0") || field.levelTypeString() == cML_UKMO_ND_STR )
+      {
+         double myLevel = field.level();
+         if( field.levelTypeString() == cML_UKMO_ND_STR )
+            myLevel = field.level_L2();
+
+         const int cLVLBUF = 64;
+         static char buf[ cLVLBUF ];
+         ostrstream s( buf, cLVLBUF );
+         s << myLevel << ends;
+
+         clev = buf;
+      }
+
+      // Generate key
+      generateKey(keystr,iparam,idate,itime,istep,expver);
+
+      // Calculate the data matrix for non LNSP field
+      if ( iparam != LnPress ) // Already done for lnsp
+      {
+         bool ok = fillValues(appInfo,field,xint);
+         if ( !ok )
+         {
+            // Error in computing data values. The error message is already written
+            // in the marslog file. That said, the user should be told, otherwise
+            // they stare at  a blank plot!
+            setError(1, "Error when filling the values.");
+            return;
+         }
+
+         if ( ( paramIter = params.find(keystr) ) == params.end() )
+         {
+            setError(0,"Something strange ??");
+            continue;
+         }
+         else
+            (*paramIter).second->Level(xint,clev,npoint,modlev);
+      }
+
+      // Write out the data if we have the end of what can be grouped together.
+      if ( lastKey != keystr && lastKey != string("FIRSTFIELD") )
+      {
+         if ( !generateData(appInfo,params,netcdf,lastField,lastKey) )
+         {
+            setError(1,"Could not generate NETCDF data: error on fieldset or fieldset not suitable");
+            return;
+         }
+         lastNrGenerated = currentGenerated;
+      }
+
+      lastKey = keystr;
+      lastField = field;
+   }  // end while (second loop)
+
+   // Write out the last input field data
+   if ( lastNrGenerated <=  currentGenerated )
+   {
+      if ( !generateData(appInfo,params,netcdf,lastField,lastKey) )
+      {
+         setError(1,"Could not generate NETCDF data: error on fieldset or fieldset not suitable");
+         return;
+      }
+   }
+
+   // Write additional fielcreateOutputRequestds, if it is needed
+   if ( ! this->generateExtraData(netcdf,appInfo,params,iter) )
+   {
+      setError(1,"Could not generate NETCDF extra data");
+      return;
+   }
+
+   // Close netCDF file
+   netcdf.close();
+
+   // Create output request
+   ParamInfo* parInfo = plotVariable(params);
+   if ( !parInfo )
+      return;
+
+   out = this->createOutputRequest( appInfo, netcdfName, parInfo );
+
+   // Add hidden values to tne output request
+   // out1("_VERB") = "NETCDF_MATRIX";
+   if ( (const char *)in("_NAME") )
+      out("_NAME") = in("_NAME");
+
+   // Release memory allocation
+   delete [] xint;  xint = 0;
+   delete [] splin; splin = 0;
+
+   // Free memory for parameters
+   for (paramIter = params.begin(); paramIter != params.end(); paramIter++)
+      delete (*paramIter).second;
+
+cout << "request OUT" << endl;
+out.print();
+
+   return;
 }
 
-void Xsect::serve(MvRequest& in,MvRequest& out)
+void Xsect::generateKey( string &str, int par, int date, int time,
+                        int step, const char *expver )
 {
-	cout << "request IN" << endl;
-	in.print();
-
-	const double epsilon = 0.0015;  // difference allowed in field coordinates
-	MvField   field;
-	MvRequest grib;
-	int i;
-
-	in.getValue(grib,"DATA");
-	int nn = in.countValues("DATA");
-	if ( !nn ) {
-		setError(1, "No Data files specified...");
-		return;
-	}
-
-	MvFieldSet		fs(grib);
-	MvFieldSetIterator	iter(fs);
-
-	// Normal interpolation of levels unless INTERPOLATE_VALUES = NO
-	bool interpolate = true;
-	if ( (const char*)in("INTERPOLATE_VALUES") &&
-		strcmp(in("INTERPOLATE_VALUES"),"NO") == 0 )
-	interpolate = false;
-
-
-	double pBottom = in("BOTTOM_PRESSURE"), pTop = in("TOP_PRESSURE");\
-
-	bool logax = false;
-	AppMode appMode = XSECT;
-	double		Y1,Y2,X1,X2;
-	Y1 = Y2 = X1 = X2 = 0;
-
-	if ( mode == AppVertprof)
-	{
-		// Vertical profile
-		if( strcmp(in("INPUT_MODE"),"AREA") == 0 || strcmp(in("INPUT_MODE"),"AREA2") == 0 )
-		{
-			appMode = strcmp(in("INPUT_MODE"),"AREA") == 0 ? VP_AREA : VP_AREA2;
-
-			Y1 = in("AREA",0);
-			X1 = in("AREA",1);
-			Y2 = in("AREA",2);
-			X2 = in("AREA",3);
-
-			if ( X1 > X2 )
-			{
-				double W = X1;
-				X1 = X2;
-				X2 = W;
-			}
-
-			if( Y2 > Y1 )
-			{
-				double W = Y1;
-				Y1 = Y2;
-				Y2 = W;
-			}
-		}
-		else
-		{
-			if( strcmp(in("INPUT_MODE"),"POINT") == 0)
-				appMode = VP_POINT;
-			else
-				appMode = VP_GRIDPOINT;
-
-			Y1 = Y2 = in("POINT",0);
-			X1 = X2 = in("POINT",1);
-		}
-	}
-
-	else if( mode == AppXsect )
-	{
-		// Cross Section
-		Y1 = in("LINE",0);
-		X1 = in("LINE",1);
-		Y2 = in("LINE",2);
-		X2 = in("LINE",3);
-	}
-	else if( mode == AppAverage )
-	{
-		// Average Application
-        if ( strcmp(in("DIRECTION"),"NS") == 0 || strcmp(in("DIRECTION"),"NORTH SOUTH") == 0 )
-            appMode = AVERAGE_NS;
-        else
-            appMode = AVERAGE_EW;
-
-		Y1 = in("AREA",0);
-		X1 = in("AREA",1);
-		Y2 = in("AREA",2);
-		X2 = in("AREA",3);
-
-		if ( X1 > X2 )
-		{
-			double W = X1;
-			X1 = X2;
-			X2 = W;
-		}
-
-		if( Y2 > Y1 )
-		{
-			double W = Y1;
-			Y1 = Y2;
-			Y2 = W;
-		}
-	}
-
-	else
-	{
-		setError(1,"Invalid Operation...");
-		return;
-	}
-
-
-
-	if( pTop == pBottom )
-	{
-		setError(1,"Invalid Pressure Parameters ...");
-		return;
-	}
-
-	if( pTop > pBottom )
-	{
-		setError(0,"Top Pressure > Bottom (swapping)...");
-		double      w;
-		w = pBottom;
-		pBottom = pTop;
-		pTop = w;
-	}
-
-	int hc_perp = 0,hc_parallel = 0,hc_intensity = 0;
-	int hc_number = 0;
-
-	if ( mode == AppXsect )
-	{
-		if( strcmp(in("WIND_PERPENDICULAR"),"ON") == 0 ||
-			strcmp(in("WIND_PERPENDICULAR"),"On") == 0)
-		{
-			hc_number++;
-			hc_perp = PERPENDICULAR;
-		}
-
-		if( strcmp(in("WIND_PARALLEL"),"ON") == 0 ||
-			strcmp(in("WIND_PARALLEL"),"On") == 0)
-		hc_parallel = PARALLEL;
-
-		if( strcmp(in("WIND_INTENSITY"),"ON") == 0 ||
-			strcmp(in("WIND_INTENSITY"),"On") == 0)
-		{
-			hc_number++;
-			hc_intensity = INTENSITY;
-		}
-	}
-
-	bool foundLNSP = false;
-	ParamMap params;
-	ParamIterator paramIter;
-	string keystr;
-
-	bool foundU = false, foundV = false, foundW = false;
-
-	field = iter();
-	double North   = field.north();
-	double South   = field.south();
-	double East    = field.east();
-	double West    = field.west();
-	double Grid_ns = field.gridNS();    //-- may return cValueNotGiven!
-	double Grid_ew = field.gridWE();    //-- may return cValueNotGiven!
-
-	// Check settings.
-	int modlev = 0;
-	boolean isML = field.isModelLevel();
-	boolean isPL = field.isPressureLevel();
-	if( isML && field.levelTypeString() == cML_UKMO_ND_STR )
-		modlev = field.levelType();
-
-	if( ! isML && ! field.isPressureLevel() )
-		marslog(LOG_WARN,"Xsect: Unknown level type!");
-
-	if ( (const char *)in("PRESSURE_LEVEL_AXIS") &&
-		strcmp(in("PRESSURE_LEVEL_AXIS"),"LOG") == 0 )
-	logax = true;
-
-	if( appMode == VP_GRIDPOINT )
-	{
-		MvLocation nearestGridPoint = field.nearestGridPointLocation( MvLocation( Y1, X1 ) );
-		if( nearestGridPoint.ok() )
-		{
-			X1 = nearestGridPoint.x();
-			Y1 = nearestGridPoint.y();
-		}
-	}
-
-	ApplicationInfo appInfo;
-
-	appInfo.setGlobe(North,South,East,West);
-	appInfo.Grid(Grid_ns,Grid_ew);
-	appInfo.Mode(appMode);
-	appInfo.Interpolate(interpolate);
-
-	int npoint = appInfo.EvaluateBlot(X1,X2,Y1,Y2,pTop,pBottom );
-	if( appInfo.viaPole() )
-    	setError( 0, "Xsect line via Pole" );
-
-	if( !npoint )
-	{
-		setError(1,"Invalid Area/Line!");
-		return;
-	}
-
-                                        //-- get wind & lnsp param numbers
-                                        //-- (mostly for non-ECMWF data)
-	if( (const char*)in( "U_WIND_PARAM" ) )
-		U_FIELD = (int)in( "U_WIND_PARAM" );
-
-	if( (const char*)in( "V_WIND_PARAM" ) )
-		V_FIELD = (int)in( "V_WIND_PARAM" );
-
-	if( (const char*)in( "W_WIND_PARAM" ) )
-		W_FIELD = (int)in( "W_WIND_PARAM" );
-
-	if( (const char*)in( "LNSP_PARAM" ) )
-		LnPress = (int)in( "LNSP_PARAM" );
-
-
-	double *lon    = new double [ npoint ];
-	double *lat    = new double [ npoint ];
-	double *xint   = new double [ npoint ];
-	double *splin  = new double [ npoint ];
-
-	for ( i = 0; i < npoint; i++ )
-		splin[i] = 0;
-
-	int idate = 0;
-	int itime = 0;
-	const char* expver = 0;
-
-	// Cross section
-	if( appMode == XSECT )
-		appInfo.setLine(lon,lat);
-
-	iter.rewind();
-
-	while( field =iter() )
-	{
-		MvRequest rq=field.getRequest();
-		i = rq("PARAM");
-		const char *lev = rq("LEVELIST");
-		int istp = rq("STEP");
-		idate  = rq("DATE");
-		itime  = rq("TIME");
-		expver = rq("EXPVER");
-
-		// check that this field's vital statistics match those of the others
-		// - this is important only in the Average application
-
-		if (appMode == AVERAGE_NS || appMode == AVERAGE_EW )
-		{
-			if ( different (field.north  (), North,   epsilon) ||
-				different (field.south  (), South,   epsilon) ||
-				different (field.east   (), East,    epsilon) ||
-				different (field.west   (), West,    epsilon) ||
-				different (field.gridNS (), Grid_ns, epsilon) ||
-				different (field.gridWE (), Grid_ew, epsilon))
-			{
-				setError(1, "Fields must all have the same dimensions and resolution.");
-				return;
-			}
-		}
-
-		if( ! lev || field.levelTypeString() == cML_UKMO_ND_STR )
-		{
-			double dlev = field.level();
-			if( field.levelTypeString() == cML_UKMO_ND_STR )
-				dlev = field.level_L2();
-
-			const int cLVLBUF = 64;
-			static char buf[ cLVLBUF ];
-			ostrstream s( buf, cLVLBUF );
-			s << dlev << ends;
-
-			lev = buf;
-		}
-
-		if ( i == LnPress )
-		{
-			foundLNSP = true;
-			appInfo.haveLNSP(true);
-			fillValues(field,splin,X1,X2,Y1,Y2,appMode,lat,lon,npoint);
-			generateKey(keystr,i,idate,itime,istp,expver);
-			params.insert(ParamPair(keystr,new ParamInfo(i,idate,itime,istp,string(field.magicsName()) )) );
-		}
-		else
-		{
-			if ( i == U_FIELD )
-				foundU = true;
-			if ( i == V_FIELD )
-				foundV = true;
-			if ( i == W_FIELD )
-				foundW = true;
-
-			generateKey(keystr,i,idate,itime,istp,expver);
-
-
-			ParamInsertPair inserted =
-				params.insert(ParamPair(keystr,new ParamInfo(i,idate,itime,istp,string(field.magicsName()) )) );
-
-			ParamInfo *pp = (*(inserted.first)).second;
-			pp->AddLevel(lev);
-		}
-	}
-
-
-	if (params.size() == 0 )
-	{
-		setError(1,"GRIB file invalid, no parameters found.");
-		return;
-	}
-
-	// Rewind iterator.
-	iter.rewind();
-
-
-	bool UV_B = foundU && foundV && hc_number;
-	bool W_B  = foundU && foundV && foundW && hc_parallel;
-	appInfo.setHorComp(hc_number,hc_perp,hc_parallel,hc_intensity,UV_B,W_B);
-
-
-	if ( foundLNSP )
-	{
-		if( modlev != cML_UKMO_ND )
-			modlev = 1;
-	}
-	else
-	{
-		if( modlev == cML_UKMO_ND )
-		{
-			if ( logax )
-				setError(0,"No Log Axis for Model Levels...");
-			logax = false;
-		}
-		else if ( isML )
-		{
-			modlev = -1;
-			if ( logax )
-				setError(0,"No Log Axis for Model Levels...");
-			logax = false;
-		}
-		else if ( isPL )
-		{
-			modlev = 0;
-		}
-		else
-		{
-			setError(1,"Unimplemented level type (not ML/PL)");
-			return;
-		}
-	}
-
-	iter.rewind();
-	appInfo.UpdateLevels(params,modlev);
-	appInfo.LevelType(modlev);
-	appInfo.AxisType(logax);
-	appInfo.setMinMax(params);
-
-	// Initialize netCDF file
-	// Create netCDF file
-	string name(marstmp());
-	MvNetCDF netcdf(name,'w');
-	netcdf.addAttribute("_VIEW",view_.c_str() );
-
-	int istep;
-	string lastKey        = "FIRSTFIELD";
-	string lastNonLNSPKey = "NONE";
-	MvField lastField;
-
-	iter.sort("LEVELIST");
-	iter.sort("STEP");
-	iter.sort("EXPVER");
-	iter.sort("TIME");
-	iter.sort("DATE");
-	iter.sort("PARAM");
-
-	int currentGenerated = 0,lastNrGenerated = -1;
-	double min_level, max_level;
-
-	while( field = iter() )
-	{
-		currentGenerated++;
-		MvRequest	r = field.getRequest();
-		int p = r("PARAM");
-
-		idate = r("DATE");
-		itime = r("TIME");
-		istep = r("STEP");
-		expver= r("EXPVER");
-
-		const char *clev = r("LEVELIST");
-		if( ! clev || field.levelTypeString() == cML_UKMO_ND_STR )
-		{
-			double myLevel = field.level();
-			if( field.levelTypeString() == cML_UKMO_ND_STR )
-				myLevel = field.level_L2();
-
-			const int cLVLBUF = 64;
-			static char buf[ cLVLBUF ];
-			ostrstream s( buf, cLVLBUF );
-			s << myLevel << ends;
-
-			clev = buf;
-		}
-			generateKey(keystr,p,idate,itime,istep,expver);
-
-
-		if ( p != LnPress ) // Already done for lnsp
-		{
-			bool ok = fillValues(field,xint,X1,X2,Y1,Y2,appMode,lat,lon,npoint);
-
-			if ( !ok )
-			{
-				// Error in computing data values. The error message is
-				// already written in the marslog file.
-				// That said, the user should be told, otherwise they stare at
-				// a blank plot!
-				setError(1, "Error when filling the values.");
-				return;
-			}
-
-			if ( ( paramIter = params.find(keystr) ) == params.end() )
-			{
-				setError(0,"Something strange ??");
-				continue;
-			}
-			else
-			{
-				(*paramIter).second->Level(xint,clev,npoint,modlev);
-				(*paramIter).second->ExpVer(expver?expver:"_");
-			}
-		}
-
-		// Write out the data if we have the end of what can be grouped together.
-		if ( lastKey != keystr && lastKey != string("FIRSTFIELD") )
-		{
-			appInfo.generateData(params,netcdf,lastField,lastKey,splin,&min_level,&max_level);
-			lastNrGenerated = currentGenerated;
-
-		}
-
-		lastKey = keystr;
-		lastField = field;
-
-		if (p != LnPress)
-		{
-			lastNonLNSPKey = keystr;
-		}
-
-
-
-	}  // end while
-
-	// Write out the last data
-	if ( lastNrGenerated <=  currentGenerated )
-	{
-		if ( ! appInfo.generateData(params,netcdf,lastField,lastKey,splin,&min_level,&max_level) )
-		{
-			setError(1,"Could not generate NETCDF data");
-			return;
-		}
-	}
-
-	// Close netCDF file
-	netcdf.close();
-
-	// Release memory allocation
-	delete [] xint;
-	delete [] lat;
-	delete [] lon;
-	delete [] splin;
-	// Free memory for parameters
-	for (paramIter = params.begin(); paramIter != params.end(); paramIter++)
-		delete (*paramIter).second;
-
-
-
-
-	// Create output request
-
-	bool verticalProfile = (appMode == VP_POINT || appMode == VP_GRIDPOINT || appMode == VP_AREA || appMode == VP_AREA2);
-
-
-	MvRequest xs("NETCDF");
-	xs("PATH") = name.c_str();
-
-	MvRequest out1("NETCDF_XY_MATRIX");
-	if (verticalProfile)
-		out1.setVerb("NETCDF_XY_POINTS");
-
-	out1("NETCDF_DATA") = xs;
-	out1("NETCDF_Y_VARIABLE") = "levels";
-
-	if (verticalProfile)
-		out1("NETCDF_X_VARIABLE") = "values";
-	else if (appMode == AVERAGE_NS )
-		out1("NETCDF_X_VARIABLE") = "longitude";
-	else if (appMode == XSECT )
-	{
-		if (X1 == X2)  // difficulity when plotting an axis from 0 to 0
-		{
-			out1("NETCDF_X_VARIABLE")           = "latitude";
-			out1("NETCDF_X_AUXILIARY_VARIABLE") = "longitude";  // cross section requires 2 variables to describe the axes
-		}
-		else
-			out1("NETCDF_X_VARIABLE")           = "longitude";
-			out1("NETCDF_X_AUXILIARY_VARIABLE") = "latitude";  // cross section requires 2 variables to describe the axes
-	}
-	else
-		out1("NETCDF_X_VARIABLE") = "latitude";
-
-
-
-	if (!verticalProfile)
-		out1("NETCDF_VALUE_VARIABLE") = lastNonLNSPKey.c_str();
-
-
-//	out1("_VERB") = "NETCDF_MATRIX";
-	if ( (const char *)in("_NAME") )
-		out1("_NAME") = in("_NAME");
-
-
-	// mode-specific options
-
-	const char *xAxisType = "regular";
-	if      (appMode == XSECT)      xAxisType = "geoline";
-	else if (appMode == AVERAGE_NS) xAxisType = "longitude";
-	else if (appMode == AVERAGE_EW) xAxisType = "latitude";
-
-	const char *yAxisType = (logax) ? "logarithmic" : "regular";
-
-	MvRequest viewReq("CARTESIANVIEW");  // Create view subrequest
-	viewReq("X_AXIS_TYPE") = xAxisType;  // AXIS_TYPE *must* be in the request
-	viewReq("X_AUTOMATIC") = "on";
-	//viewReq("Y_AUTOMATIC") = "on";
-	//viewReq("X_MIN_LONGITUDE") = X1;
-	//viewReq("X_MAX_LONGITUDE") = X2;
-	//viewReq("X_MIN_LATITUDE")  = Y1;
-	//viewReq("X_MAX_LATITUDE")  = Y2;
-	viewReq("Y_AXIS_TYPE") = yAxisType;  // AXIS_TYPE *must* be in the request
-
-	if (verticalProfile)  // for xy/points plots, we need to hard-code the y-axis to ensure correct vertical ordering
-	{
-		viewReq("Y_MIN") = max_level;
-		viewReq("Y_MAX") = min_level;
-	}
-	else
-	{
-		viewReq("Y_AUTOMATIC") = "on";  // for matrices (e.g. cross section), the ordering of the y-axis comes from the data
-	}
-		//viewReq("Y_MIN") = pBottom-5;
-		//viewReq("Y_MAX") = pTop;
-
-
-	char *yAxisTitle;
-	if (modlev == 0 || foundLNSP) yAxisTitle = "Pressure (hPa)";
-	else                          yAxisTitle = "Model level";
-
-	MvRequest yAxisReq("MAXIS");
-	yAxisReq("AXIS_ORIENTATION") = "Vertical";
-	yAxisReq("AXIS_TITLE_TEXT")  = yAxisTitle;
-	viewReq("VERTICAL_AXIS")     = yAxisReq;
+   // Format: pPPPYYYYMMDDHHmmSSSS
+   char key[40];
+   ostrstream oss( key, sizeof( key ) );
+   oss << setfill( '0' )
+      << "p"
+      << setw( 3 ) << par
+      << setw( 8 ) << date
+      << setw( 4 ) << time
+      << setw( 4 ) << step
+      << setw( 4 ) << ( expver ? expver : "_" )
+      << ends;
+
+   str = key;
+}
 
-	//out1("_VIEW") = "CARTESIANVIEW";    // add the view specification to the request
-	//out1("_VIEW_REQUEST") = viewReq;    // add the view specification to the request
-	//out1 = viewReq + out1;    // add the view specification to the request
+bool Xsect::updateTopBottomLevels( ParamMap &params, int modlev, MvFieldSetIterator &iter, double &pBottom, double &pTop, int &nlevel )
+{
+   // Only computes min/max if bottom and top levels are not initialized
+   if ( pTop || pBottom )
+      return false;
+
+  // Find the min/max levels for the first parameter that
+  // is not LNSP or a surface field. It assumes that the
+  // remaining fields have the same number of levels.
+  double p;
+  pTop = 50000000.;
+  pBottom = -50000000.;
+  ParamIterator ii;
+  LevelMap lmap;
+  LevelIterator jj;
+  for ( ii = params.begin(); ii != params.end(); ii++ )
+  {
+     ParamInfo* par = (*ii).second;
+     if ( par->Parameter() == LnPress || par->IsSurface() )
+     {
+        if ( params.size() == 1 )
+        {
+           // There is only the LNSP or a surface field
+           nlevel = 1;
+           pTop = pBottom = 1;
+        }
+        continue;
+     }
+
+     lmap = par->Levels();
+     nlevel = lmap.size();
+     for ( jj = lmap.begin(); jj != lmap.end();jj++ )
+     {
+        p = (*jj).second->YValue();
+        pTop = MIN(pTop,p);
+        pBottom = MAX(pBottom,p);
+     }
+     break;
+  }
+
+   // Compute min/max pressure levels from ML&LNSP fieldset
+   if ( modlev == XS_ML_LNSP )
+   {
+      MvField field;
+      iter.rewind();
+      while( field = iter() )
+      {
+         // Retrieve info from the field
+         MvRequest rq=field.getRequest();
+         int iparam = rq("PARAM");
+         if ( iparam == LnPress )
+         {
+            double lnspMax = field.getGribKeyValueDouble("maximum");
+            double lnspMin = field.getGribKeyValueDouble("minimum");
+            pTop = field.meanML_to_Pressure_byLNSP(lnspMin,pTop);
+            pBottom = field.meanML_to_Pressure_byLNSP(lnspMax,pBottom);
+            break;
+         }
+      }
+   }
+
+   return true;
+}
 
-#if 0 //FAMI03-2012 uPlot should associate the default visdef to the data according to
-      // uPlotTable
-	if (verticalProfile)  // for vertical profile, we want the default visual definition to be Graph Plotting
-	{
-		MvRequest visdefReq("MGRAPH");	// create Graph Plotting subrequest
-		out1 = out1 + visdefReq;		// add it to the request
-	}
-#endif
+bool Xsect::isVisualise( ApplicationInfo& appInfo )
+{
+   // If the output is not 'visualisation' related: actions
+   // "not visualise" or "prepare" (in certain cases), then
+   // send back the "netCDF" request
+   string actionMode = appInfo.actionMode();
+   int    procType   = appInfo.processType();
+   if ( actionMode != "visualise" &&
+        !(actionMode == "prepare" && procType == XS_DATA_MODULE_DROPPED) &&
+        !(actionMode == "prepare" && procType == XS_DATA_DROPPED) )
+      return false;
+   else
+      return true;
+}
 
+// Retrieve parameters from the input request and make a consistency check.
+// There are 4 types of input request:
+// 1. DATA_DROPPED: Grib dropped into a View: MXSECT, DATA(), _CONTEXT(),...
+// 2. DATA_MODULE_DROPPED: Data module dropped into a View: MXSECT, DATA(),...
+// 3. DATA_MODULE: Process a data module: MXSECT, ...
+// 4. netCDF dropped in a View:
+//
+// Actions for each 4 types:
+// 1. Use the original View.
+// 2. Use the original View and check if the input XSectData parameters are
+//    consistent with the View.
+// 3. Build a new View.
+// 4. Use the original View and check if the netCDF parameters are consistent
+//    with the View.
+//
+bool Xsect::getInputParameters( MvRequest& in, MvRequest& grib, ApplicationInfo& appInfo )
+{
+   // Retrieve fieldset
+   in.getValue(grib,"DATA");
+   if ( !(int)in.countValues("DATA") ) {
+      setError(1, "No Data files specified...");
+      return false;
+   }
+
+   // Retrieve original View if exists, e.g. if a grib data or a
+   // xs/av/vpdata module was dropped into a view
+   MvRequest viewRequest;
+   if ( (const char*)in("_CONTEXT") )
+      viewRequest = in("_CONTEXT");
+
+   // Retrieve xsectdata parameters if exist, e.g. if a xs/av/vpata module
+   // was dropped into a view or if it was called to be processed
+   double X1,Y1,X2,Y2;
+   const char* verb = (const char*)in("_VERB");
+   bool moduleDropped = this->isDataModuleDropped(verb);
+
+   // Check the type of input request to be processed
+   MvRequest commonRequest;
+   int procType;
+   if ( viewRequest )
+      procType = moduleDropped ? XS_DATA_MODULE_DROPPED : XS_DATA_DROPPED;
+   else
+      procType = XS_DATA_MODULE;
+
+   // Type of input request is a DATA_DROPPED into a View
+   // Get information from the View request
+   double pBottom=0., pTop=0.;
+   if ( procType == XS_DATA_DROPPED )
+   {
+      // Retrieve 'original' request from the View
+      commonRequest = getAppView( viewRequest );
+
+      // Retrieve parameters
+      if ( !this->getParameters(commonRequest, appInfo, X1, Y1, X2, Y2) )
+         return false;
+   }
+   // Process a data module
+   // Get information from the module icon parameters
+   else if ( procType == XS_DATA_MODULE )
+   {
+      // Retrieve parameters
+      if ( !this->getParameters(in, appInfo, X1, Y1, X2, Y2) )
+         return false;
+   }
+   // Process a data module dropped into a view
+   // Get information from the module and view. Check if they are compatible.
+   else if ( procType == XS_DATA_MODULE_DROPPED )
+   {
+      // Retrieve 'original' request from the View
+      commonRequest = getAppView( viewRequest );
+
+      // Retrieve 'checked' parameters from the View
+      if ( !this->getCheckedParameters(commonRequest, X1, Y1, X2, Y2) )
+         return false;
+
+      // Retrieve 'checked' parameters from the module
+      double X11,Y11,X22,Y22;
+      if ( !this->getCheckedParameters(in, X11, Y11, X22, Y22) )
+         return false;
+
+      // Consistency check
+      if ( X1 != X11 || Y1 != Y11 || X2 != X22 || Y2 != Y22 )
+      {
+         setError(1,"Invalid line/area");
+         return false;
+      }
+
+      // Retrieve application specific parametes
+      getAppParameters( in, appInfo );
+   }
+
+   // Retrieve action mode. Default value is "prepare"
+   string actionMode = (const char*)in("_ACTION") ? (const char*)in("_ACTION") : "prepare";
+
+   // Save info
+   appInfo.setMinMaxLevels( pBottom, pTop );
+   appInfo.actionMode(actionMode);
+   appInfo.processType(procType);
+   appInfo.setAreaLine(X1,X2,Y1,Y2);
+
+   return true;
+}
 
-	// add the orography curve visualiser?
-	
-	if (0)
-	{
-	    MvRequest out_orog("NETCDF_XY_POINTS");
-		out_orog("NETCDF_DATA") = xs;
-		out_orog("NETCDF_Y_VARIABLE") = "orography_y1_values";
+bool Xsect::getParameters( MvRequest& in, ApplicationInfo& appInfo, double& X1, double& Y1, double& X2, double& Y2)
+{
+   // Retrieve 'checked' parameters
+   if ( !this->getCheckedParameters(in, X1, Y1, X2, Y2) )
+         return false;
 
-		if (appMode == XSECT || appMode == AVERAGE_NS )
-			out_orog("NETCDF_X_VARIABLE") = "orography_x_values"; //"longitude";
-		else
-			out_orog("NETCDF_X_VARIABLE") = "orography_x_values"; //"latitude";
+   // Retrieve parameters specific to an application
+   getAppParameters( in, appInfo );
 
-		//if (appMode == XSECT )  // cross section requires 2 variables to describe the axes
-		//	out_orog("NETCDF_X_AUXILIARY_VARIABLE") = "latitude";
+   return true;
+}
 
-		MvRequest visdefReq("MGRAPH");	// create Graph Plotting subrequest
-        visdefReq("GRAPH_TYPE") = "AREA";
-        visdefReq("GRAPH_SHADE_COLOUR") = "CYAN";
-		out_orog = out_orog + visdefReq;		// add it to the request
+// Retrieves the so called checked parameters: geographical coordinates.
+// These parameters are checked against the View if a data module or
+// a netCDF file is dropped into the View.
+bool Xsect::getCheckedParameters( MvRequest& in, double& X1, double& Y1, double& X2, double& Y2 )
+{
+   // Retrieve LINE or AREA coordinates
+   if ( !getAreaLineParameter(in,X1,Y1,X2,Y2) )
+      return false;
 
-		//MvRequest viewReq2("CARTESIANVIEW");  // Create view subrequest
-		//viewReq2("X_AXIS_TYPE") = xAxisType;   // AXIS_TYPE *must* be in the request
-		//viewReq2("X_AUTOMATIC") = "on";
-		//viewReq2("Y_AXIS_TYPE") = yAxisType;   // AXIS_TYPE *must* be in the request
-		//viewReq2("Y_MIN")       = 1015;
-		//viewReq2("Y_MAX")       = 400;
-		//out2("_VIEW") = "CARTESIANVIEW";    // add the view specification to the request
-		//out2("_VIEW_REQUEST") = viewReq2;    // add the view specification to the request
+   return true;
+}
 
-		//out2 = viewReq2;// + out2;
+bool Xsect::checkCoordinates( double& X1, double& Y1, double& X2, double& Y2)
+{
+   // Update coordinates
+   if ( X1 > X2 )
+   {
+      double W = X1;
+      X1 = X2;
+      X2 = W;
+   }
+
+   if( Y2 > Y1 )
+   {
+      double W = Y1;
+      Y1 = Y2;
+      Y2 = W;
+   }
+
+   if ( X1 == X2 && Y1 == Y2  )
+   {
+      setError(1,"Not valid AREA or LINE coordinates");
+      return false;
+   }
+
+   return true;
+}
 
-		out1 = out_orog + out1;
+void Xsect::getInitialFieldInfo( MvField& field, ApplicationInfo& appInfo, double& north, double& south, double& east, double& west )
+{
+   // Get area and grid from the field
+   north   = field.north();
+   south   = field.south();
+   east    = field.east();
+   west    = field.west();
+   double Grid_ns = field.gridNS();    //-- may return cValueNotGiven!
+   double Grid_ew = field.gridWE();    //-- may return cValueNotGiven!
+
+   //appInfo.setGlobe(North,South,East,West);
+   appInfo.Grid(Grid_ns,Grid_ew);
+
+   // Check model/pressure level settings
+   int modlev = XS_PL;   // -1 = ML, 0 = PL, 1 = LNSP+ML, cML_UKMO_ND = UKMO New Dynamics
+   if ( field.isModelLevel() )
+   {
+      if ( field.levelTypeString() == cML_UKMO_ND_STR )
+         modlev = field.levelType();
+      else
+         modlev = XS_ML;
+   }
+   appInfo.levelType(modlev);
+
+   // Check field's geographical grid point positions
+   fieldConsistencyCheck( field, appInfo );
+}
 
-	}
+MvRequest Xsect::getAppView ( MvRequest& viewRequest )
+{
+   // Check if the original view request has been already processed,
+   // e.g. it has been already replaced by the CartesianView
+   if ( (const char*)viewRequest("_ORIGINAL_REQUEST") )
+      return viewRequest("_ORIGINAL_REQUEST");
+
+   // The original view request has not been processed yet.
+   // Retrieve it from the input request
+   string sview = viewRequest.getVerb();
+   if ( view_ == sview )
+      return viewRequest;
+
+   return MvRequest();
+}
 
+bool Xsect::consistencyCheck( ApplicationInfo& appInfo, ParamMap &params )
+{
+   // 1) Number of parameters to be processed must be greater than 0
+   if (params.size() == 0 )
+   {
+      setError(1,"ERROR: GRIB file invalid, no parameters found");
+      return false;
+   }
+
+   // 2) Compatibility between INTERPOLATE_VALUES and fieldset
+   if ( !appInfo.Interpolate() && appInfo.levelType() != XS_PL && appInfo.haveLNSP() )
+   {
+      setError(1,"ERROR: INTERPOLATE_VALUES must be YES because data is MODEL LEVEL plus LNSP");
+      return false;
+   }
+
+   // 3) If there is only one parameter, it must contain several levels
+   if (params.size() == 1 )
+   {
+      ParamIterator ii = params.begin();
+      if ( (*ii).second->NrLevels() <= 1 )
+      {
+         setError(1,"ERROR: Number of levels must be greater than 1");
+         return false;
+      }
+   }
+
+   return true;
+}
 
+// Write Time info to the netCDF file.
+// The current implementation performs only a simple consistency check:
+// the dimension has to be the same for all variables.
+bool Xsect::writeTimeInfoNetcdf( MvNetCDF& cdf, ParamMap &params, int& ntimes )
+{
+   // Loop through all parameters
+   vector<int> stepS;
+   int idNew;
+   bool first = true;
+   int ntimesNew = 0;
+   ParamIterator ii = params.begin();
+   int id = (*ii).second->Parameter();  // parameter id
+   MvDate refDate = (*ii).second->ReferenceDate();
+   while ( ii != params.end() )
+   {
+      // Accumulate and check time consistency
+      idNew = (*ii).second->Parameter();
+      if ( id != idNew )
+      {
+         if ( first )
+         {
+            // Save number of times
+            ntimes = ntimesNew;
+            first = false;
+         }
+         else
+         {
+            // Check time consistency
+            if ( ntimes != ntimesNew )
+            {
+               setError(1,"ERROR: Data has more than one Time range");
+               return false;
+            }
+         }
+         ntimesNew = 0;
+         id = idNew;
+      }
+      else if (first)  // Add new time to the list
+      {
+         MvDate newDate = (*ii).second->VerificationDate();
+         double diff = (newDate - refDate);
+         int step = (int)(diff*86400.);  //seconds
+         stepS.push_back(step);
+      }
+      ntimesNew++;
+      ii++;
+   }
+
+   // To handle the last variable time range
+   if ( first )
+      ntimes = ntimesNew;
+   else
+   {
+      // Check time consistency
+      if ( ntimes != ntimesNew )
+      {
+         setError(1,"ERROR: Data has more than one Time range");
+         return false;
+      }
+   }
+
+   // Add the 'time' variable to netCDF
+   vector<long> levels_dimsize(1,ntimes);
+   vector<string> levels_name(1,XS_VARTIME);
+   MvNcVar *nctime = cdf.addVariable(levels_name[0],ncInt,levels_dimsize,levels_name);
+   char buf[128];
+   refDate.Format(refDate.StringFormat(),buf);
+   nctime->addAttribute("long_name", "Time");
+   nctime->addAttribute("units", "seconds");
+   nctime->addAttribute("reference_date", buf);
+   nctime->put(stepS,(int)ntimes);
+
+   return true;
+}
 
+bool Xsect::writeGlobalAttributesNetcdf ( MvNetCDF& netcdf, ParamMap& params, ApplicationInfo& appInfo )
+{
+   netcdf.addAttribute("_FillValue",XMISSING_VALUE );
+   netcdf.addAttribute("_View",view_.c_str() );
+
+   // Add title to the Global Attributes.
+   // Currently, because Magics only checks the Global Attributes to
+   // produce a title and this module plots only the first variable then
+   // we are adding this code below. REMOVE it when Magics is capable to
+   // produce a title from the Variable Attributes.
+   ParamInfo* parInfo = this->plotVariable(params);
+   if ( !parInfo )
+      return false;
+
+   string title = this->titleVariable(appInfo,parInfo);
+   return netcdf.addAttribute("title",title.c_str());
+}
 
+ParamInfo* Xsect::plotVariable ( ParamMap& params )
+{
+   // Return the first variable that has more than 1 level
+   for ( ParamIterator ii = params.begin(); ii != params.end(); ii++ )
+   {
+      if ( (*ii).second->NrLevels() > 1 )
+         return (*ii).second;
+   }
+
+   setError(1,"ERROR: Invalid variable to be plotted - less than 2 levels");
+   return 0;
+}
 
-	//out = MvRequest("NETCDF_VISUALISER") + out1;
-	out = viewReq + out1;
+bool Xsect::writeGeoCoordsNetcdf( MvNetCDF& cdf, ApplicationInfo& appInfo )
+{
+   // Compute lat/long interpolation points
+   int npoint = appInfo.NrPoints();
+   double *lon   = new double [ npoint ];
+   double *lat   = new double [ npoint ];
+   appInfo.computeLine(lon,lat);
+
+   // Add Latitude value
+   vector<string> coord_sdim(1,XS_VARLAT);
+   vector<long> coord_ndim(1,npoint);
+   MvNcVar *nccoord = cdf.addVariable(coord_sdim[0],ncFloat,coord_ndim,coord_sdim);
+   nccoord->addAttribute("long_name", "latitude");
+   nccoord->addAttribute("units", "degrees_north");
+   nccoord->put(lat,(long)npoint);
+
+   // Add Longitude value
+   coord_sdim[0] = XS_VARLON;
+   nccoord = cdf.addVariable(coord_sdim[0],ncFloat,coord_ndim,coord_sdim);
+   nccoord->addAttribute("long_name", "longitude");
+   nccoord->addAttribute("units", "degrees_east");
+   nccoord->put(lon,(long)npoint);
+
+   // Release memory
+   delete [] lon; lon = 0;
+   delete [] lat; lat = 0;
+
+   return true;
+}
 
-	cout << "request OUT" << endl;
-	out.print();
+// It assumes that the dataset contains only 2 set of Level Type: a) Level Type
+// with 1 level (e.g. LNSP), b) Level Type with N levels (e.g. Model or
+// Pressure). At the current implementation, it is not possible to have a dataset
+// with Model and Pressure levels or different numbers of N levels.
+bool Xsect::writeLevelInfoNetcdf( MvNetCDF& cdf, ApplicationInfo& appInfo, ParamMap &params, MvField*, double* )
+{
+   // Loop through all parameters. It writes to the netCDF the levels from the
+   // first parameter that has more than 1 level. It also performs a consistency
+   // check to guarantee that all parameters have the same number of levels.
+   bool found = false;
+   int nlevelM;
+   vector<double> y_values;
+   for ( ParamIterator ii = params.begin(); ii != params.end(); ii++ )
+   {
+      // Retrieve the levels info
+      LevelMap lmap = (*ii).second->Levels();
+      int nlevel = lmap.size();
+
+      // Ignore it if level Type is of type Surface or LNSP
+      if ( nlevel == 1 )
+         continue;
+
+      // Only save the first set of levels.
+      // For the remaining sets, do a simple consistency check.
+      if ( !found )
+      {
+         appInfo.computeLevelInfo((*ii).second,y_values);
+         found = true;
+         nlevelM = nlevel;
+      }
+      else
+      {
+         // Currently, only checks if the number of levels is the same, apart
+         // from surface fields
+         if ( !(*ii).second->IsSurface() && nlevelM != nlevel )
+         {
+            setError(1,"ERROR: Data has more than one LevelList");
+            return false;
+         }
+      }
+   }
+
+   // Add the 'levels' variable to the netCDF
+   vector<long> levels_dimsize(1,y_values.size());
+   vector<string> levels_name(1,XS_VARLEVEL);
+   MvNcVar *nclevels = cdf.addVariable(levels_name[0],ncDouble,levels_dimsize,levels_name);
+   nclevels->addAttribute("long_name", "Atmospheric Levels");
+   nclevels->addAttribute("units", "hPa");
+   nclevels->addAttribute("positive", "down");
+   nclevels->put(y_values,(long)y_values.size());
+
+   return true;
+}
 
-	return;
+// Generate contour data ( for xsection or average).
+bool Xsect::contourValues ( ApplicationInfo& appInfo, ParamMap& params,
+                            MvNetCDF &cdf, MvField& field, string key )
+{
+   // Get parameter info
+   ParamIterator ii = params.find(key);
+   ParamInfo *par = (*ii).second;
+
+   // Add/update variable to the netCDF
+   int i;
+   int nrLevels = appInfo.NrLevels();
+   int nrPoints = appInfo.NrPoints();
+   string varname = this->getNetcdfVarname(par->ParamName());
+   MvNcVar *ncv = cdf.getVariable(varname);
+   if ( !ncv )   // Create new variables
+   {
+      ntime_ = -1;
+
+      // Initialise dimensions
+      vector<long> values_ndim;
+      values_ndim.push_back(appInfo.NTimes());
+      values_ndim.push_back(nrLevels);
+      values_ndim.push_back(nrPoints);
+      vector<string> values_sdim;
+      values_sdim.push_back(XS_VARTIME);
+      values_sdim.push_back(XS_VARLEVEL);
+      values_sdim.push_back(XS_VARLON);
+
+      // Create variable
+      ncv = cdf.addVariable(varname,ncFloat,values_ndim, values_sdim);
+      ncv->addAttribute("long_name", par->ParamLongName().c_str());
+      ncv->addAttribute("units", par->Units().c_str());
+      ncv->addAttribute("_FillValue", XMISSING_VALUE);
+      ncv->addAttribute("title",titleVariable(appInfo,par).c_str());
+   }
+
+   // Memory allocation
+   double **cp =  new double* [ nrLevels ];
+   for (i = 0; i < nrLevels; i++)
+      cp[i] = new double [ nrPoints ];
+
+   // Compute values
+   if( appInfo.levelType() != XS_ML_LNSP )
+      appInfo.InterpolateVerticala(cp,par);
+   else
+   {
+      // Get LNSP values
+      char keyLnsp[60];
+      sprintf(keyLnsp,"p%03d%s",LnPress,key.substr(4,50).c_str() );
+      ParamInfo* parLnsp = this->getParamInfo( params, keyLnsp );
+      if ( ! parLnsp )
+         return 0;
+
+      double *splin = appInfo.getOneLevelValues(parLnsp,"1");
+      if ( !splin )  // LNSP not found
+      {
+         setError(1,"ERROR: Could not find LNSP Level values");
+         for (i = 0; i < nrLevels; i++)
+            delete [] cp[i];
+         delete [] cp;
+         return false;
+      }
+
+      appInfo.InterpolateVerticalb(field,cp,par,splin);
+   }
+
+   // Write values to the netCDF
+   ntime_++;
+   for ( i = 0; i < nrLevels ;i++)
+   {
+      ncv->setCurrent(ntime_,i);
+      ncv->put(cp[i],1,1,(long)nrPoints);
+      delete [] cp[i];
+   }
+   delete [] cp;
+
+   return true;
 }
 
-void Xsect::generateKey(string &str,int par,int date,int time, int step,
-			const char *expver)
+// Variable name in netCDF has some restrictions, e.g. can not
+// start with a non-alphabetic letter.
+// RTTOV specific: variable name SKT is replaced by t_ski
+string Xsect::getNetcdfVarname(string name)
 {
-	// Do it with good old sprintf PPPYYYYMMDDHHmmSSSSVVVV
-	//char key[40];
-	//sprintf(key,"%03d%08d%-04.4d%04d%04s",par,date,time,step,expver?expver:"_");
-	//str = key;
-
-	// But man page says "behaviour of %04s is undefined...", and indeed:
-	//  - on SGI leading zeros are printed
-	//  - on g++ leading spaces are printed => NetCDF key error!
-	// thus let us try smart new iostreams:
-	// (Should we already start using standard stringstreams?)
-
-	char key[40];
-	ostrstream oss( key, sizeof( key ) );
-	oss << setfill( '0' )
-		<< "p"
-		<< setw( 3 ) << par
-		<< setw( 8 ) << date
-		<< setw( 4 ) << time
-		<< setw( 4 ) << step
-		<< setw( 4 ) << ( expver ? expver : "_" )
-		<< ends;
-
-//  cout << " Key " << key << endl;
-	str = key;
+   // RTTOV specific
+   if ( name == "skt" )
+      return string("t_skin");
+
+   // Netcdf only accepts variable name starting with a alphabetic letter
+   if ( !isalpha(name[0]) )
+   {
+      string newname = "a_" + name;
+      return newname;
+   }
+
+   return name;
 }
 
-bool Xsect::fillValues(MvField &field,double *vals,double X1,
-		       double X2, double Y1,double Y2,
-		       AppMode appMode, double *lat,
-		       double *lon, int npoint)
+ParamInfo* Xsect::getParamInfo( ParamMap &params, string key )
 {
-	MvFieldExpander x(field);
-	bool ok = false;
-
-	// Average over area
-	if( appMode == AVERAGE_NS ||
-		appMode == AVERAGE_EW  )
-	{
-		ok = field.averageAlong(vals,X1,Y1,X2,Y2,appMode,npoint);
-
-		//-- averageAlong() does not know array size,
-		//-- if it fails then return array remains empty,
-		//-- thus fill with missing values here!
-		if( ! ok )
-		{
-			for (int i = 0; i < npoint; i++ )
-				vals[i] = DBL_MAX;
-
-			return false;
-
-		}
-	}
-	else if ( appMode == VP_POINT )          //-- Vertical Profile at interpolated point
-	{
-		vals[0] =  field.interpolateAt(X1,Y1);
-	}
-	else if ( appMode == VP_GRIDPOINT )      //-- Vertical Profile at nearest gridpoint
-	{
-		vals[0] =  field.nearestGridpoint(X1,Y1);
-	}
-	else if ( appMode == VP_AREA )           //-- Vertical Profile for area (buggy???)
-	{
-		vals[0] = field.averageAt(X1,Y1,X2,Y2);
-	}
-	else if ( appMode == VP_AREA2 )          //-- Vertical Profile for new area computation method
-	{
-		vals[0] = field.integrate( Y1, X1, Y2, X2 );
-	}
-	else                                     //-- Interpolatate along XS line
-	{
-		for ( int k = 0; k < npoint; k++)
-			vals[k] = field.interpolateAt(lon[k], lat[k]);
-	}
-
-	return true;
+   // Check if field is valid
+   ParamIterator ii = params.find(key);
+   if ( ii == params.end() )
+   {
+      setError(1,"ERROR: Could not find the requested field (getParamInfo)");
+      return 0;
+   }
+
+   // Get parameter info
+   return (*ii).second;
 }
 
+bool Xsect::isDataModuleDropped( const char* verb )
+{
+   return (verb && (strcmp(verb,"MXSECTION")  == 0 || strcmp(verb,"MXAVERAGE") == 0 ||
+                 strcmp(verb,"MVPROFILE")  == 0 || strcmp(verb,"PM_XSECT" ) == 0 ||
+                 strcmp(verb,"PM_AVERAGE") == 0 || strcmp(verb,"PM_VPROF")  == 0 ));
+}
 
+//------------------------------------------------------------------------------
 
 int main(int argc,char **argv)
 {
-	MvApplication theApp(argc,argv);
-	CrossS	c;
-	Average	a;
-	Vprofile v;
-
-
-	// The applications don't try to read or write from pool, this
-	// should not be done with the new PlotMod.
-	//a.addModeService("GRIB", "DATA");
-	a.saveToPool(false);
-
-	//v.addModeService("GRIB", "DATA");
-	v.saveToPool(false);
-
-	//c.addModeService("GRIB", "DATA");
-	c.saveToPool(false);
-
-	theApp.run();
+   MvApplication theApp(argc,argv);
+   CrossS	c;
+   Average	a;
+   Vprofile v;
+
+   // The applications don't try to read or write from pool, this should
+   // not be done with the new PlotMod.
+   a.saveToPool(false);
+   v.saveToPool(false);
+   c.saveToPool(false);
+
+   // These are Metview 3 definitions used for backwards compatibility.
+   // Remove them later.
+   CrossSM3   cM3;
+   AverageM3  aM3;
+   VprofileM3 vM3;
+   cM3.saveToPool(false);
+   aM3.saveToPool(false);
+   vM3.saveToPool(false);
+
+   theApp.run();
 }
diff --git a/src/XSection/Xsect.h b/src/XSection/Xsect.h
new file mode 100644
index 0000000..e86a05f
--- /dev/null
+++ b/src/XSection/Xsect.h
@@ -0,0 +1,131 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 XSECT_H
+#define XSECT_H
+
+/********************************************************************************
+  Application for Xsection, Average and Vertical Profile.
+  It takes a GRIB file as input (in addition to the values given by the user),
+  and produces an NetCDF file as output. There is no metadata on output request,
+  only the path to NetCDF file.
+
+  First the GRIB while is read, and info about all parameters and level are stored.
+  Then several flags is set, based on the data and the input request, to determine
+  how the application should run.
+
+  The file is rewound, and sorted by param, date, time, step and expver. All fields
+  with the same values for the sorting parameters are one plot. If any of these
+  values change, all data are written out as netcdf variables with names put
+  together from the sorting values.
+********************************************************************************/
+
+#include "MvXsectFrame.h"
+
+class Xsect : public MvService {
+
+public:
+
+   void serve(MvRequest&,MvRequest&);
+
+   bool getInputParameters( MvRequest&, MvRequest&, ApplicationInfo& );
+
+   void generateKey(string&,int,int,int,int,const char *);
+
+   // Get the application (original) view request
+   MvRequest getAppView ( MvRequest& );
+
+   // Consistency check
+   bool consistencyCheck( ApplicationInfo&, ParamMap& );
+
+   // Write level info to the Netcdf file
+   virtual bool writeLevelInfoNetcdf ( MvNetCDF&, ApplicationInfo&, ParamMap&, MvField* = 0, double* = 0);
+
+   // Write time info to the Netcdf file
+   bool writeTimeInfoNetcdf( MvNetCDF&, ParamMap&, int& );
+
+   // Write geographical coordinates info to the Netcdf file
+   virtual bool writeGeoCoordsNetcdf ( MvNetCDF&, ApplicationInfo& );
+
+   // Write global attributes info to the Netcdf file
+   virtual bool writeGlobalAttributesNetcdf ( MvNetCDF&, ParamMap&, ApplicationInfo& );
+
+   // Write extra variables to the Netcdf file
+   virtual bool generateExtraData( MvNetCDF&, ApplicationInfo&, ParamMap&, MvFieldSetIterator& ) { return true; }
+
+  // Check if action is visualisation related
+   bool isVisualise( ApplicationInfo& );
+
+   // Write the data to the netcdf file
+   virtual bool generateData( ApplicationInfo&, ParamMap&, MvNetCDF&, MvField&, const string& ) = 0;
+
+   // Get title related to a variable
+   virtual string titleVariable( ApplicationInfo&, ParamInfo*) = 0; //{ return " ";}
+
+   // Compute data values
+   virtual bool fillValues( ApplicationInfo&, MvField&, double* ) = 0;
+
+   // Create output request
+   virtual MvRequest createOutputRequest( ApplicationInfo&, string, ParamInfo* ) = 0;
+
+   // Compute number of points
+   virtual int computeNumberPoints( ApplicationInfo& ) = 0;
+
+  // Get Parameter info given the key
+  ParamInfo* getParamInfo( ParamMap&, string );
+
+protected:
+
+   Xsect(const char* kw) : MvService(kw), ntime_(0)  {};
+
+   bool getParameters( MvRequest&, ApplicationInfo&, double&, double&, double&, double&);
+   bool getCheckedParameters( MvRequest&, double&, double&, double&, double& );
+   void getInitialFieldInfo( MvField&, ApplicationInfo&, double&, double&, double&, double& );
+   bool updateTopBottomLevels( ParamMap&, int, MvFieldSetIterator&, double&, double&, int& );
+   bool checkCoordinates( double&, double&, double&, double&);
+
+   bool contourValues( ApplicationInfo&, ParamMap&, MvNetCDF&, MvField&, string );
+
+   //bool generateNetcdfAxesVariables( ApplicationInfo&, ParamInfo*, MvNetCDF&, double*, double*);
+
+   // Get Area/Line parameter
+   virtual bool getAreaLineParameter( MvRequest&, double&, double&, double&, double&) = 0;
+
+   // Get application specific parameters
+   virtual void getAppParameters( MvRequest&, ApplicationInfo& ) = 0;
+
+   // Set flags
+   virtual void setHorCompFlags( bool, bool, bool ) {}
+
+   // Check that this field's vital statistics match those of the others
+  // - this is important only in the Average application
+   virtual bool fieldConsistencyCheck( MvField&, double, double, double, double ) { return true; }
+
+   // Check this field's geographical grid point positions against the user input
+   // grid point postion. This is important only in the Vertical Profile application
+   virtual bool fieldConsistencyCheck ( MvField&, ApplicationInfo& ) { return true; }
+
+   // Get default variable to be plotted
+   ParamInfo* plotVariable ( ParamMap& );
+
+   // Get netCDF variable name
+   string getNetcdfVarname(string);
+
+   // Check if data module was dropped
+   bool isDataModuleDropped( const char* );
+
+   // Update INTERPOLATE_VALUES parameter
+   virtual void updateInterpolateValues( ApplicationInfo& ) {}
+
+   string view_;
+   int ntime_;     // time counter. It assumes that the input data is sorted
+                   // by variable and time, e.g. v1t1, v1t2, .. vntm, v2t1, ...
+};
+
+#endif
diff --git a/src/XSection/XsectDef b/src/XSection/XsectDef
new file mode 100644
index 0000000..308410e
--- /dev/null
+++ b/src/XSection/XsectDef
@@ -0,0 +1,97 @@
+PM_XSECT; Metview; Specific Application
+{
+   DATA
+      [
+         interface       = icon,
+         class           = GRIB,
+         exclusive       = false,
+         help            = help_data,
+         help_directory  = '/System/Defaults',
+         help_name       = Data for XSection,
+         help_class      = RETRIEVE,
+         help_definition = ( RETRIEVE, TYPE = FC, LEVTYPE = PL,
+                             PARAM = T, DATE = '-1',
+                             LEVELIST = 1000/850/700/500/400/300,
+                             STEP = 12, GRID = 1.5/1.5 )
+      ]
+   { @ }
+
+   LINE
+      [
+         help         = help_input,
+         input_type   = line,
+         input_window = '/System/Defaults/Input Window'
+      ]
+   {
+      *
+      /
+   } = 0./-180./0./180.
+
+   PRESSURE_LEVEL_AXIS
+   {
+      LINEAR
+      LOG
+   } = LINEAR
+
+   BOTTOM_PRESSURE
+   {
+      *
+   } = 1015.0
+
+   TOP_PRESSURE
+   {
+      *
+   } = 10.0
+
+   WIND_PARALLEL
+   {
+      ON
+      OFF
+   } = ON
+
+   WIND_PERPENDICULAR
+   {
+      ON
+      OFF
+   } = OFF
+
+   WIND_INTENSITY
+   {
+      ON
+      OFF
+   } = OFF
+
+   WIND_HORIZONTAL_COMPONENT
+      [ visible = false ]
+   {
+      PERPENDICULAR   ; PER
+      PARALLEL        ; PAR
+      INTENSITY       ; INT
+   } = PAR
+
+   INTERPOLATE_VALUES
+   {
+      YES
+      NO
+   } = YES
+
+   LNSP_PARAM
+   {
+      *
+   } = 152
+
+   U_WIND_PARAM
+   {
+      *
+   } = 131
+
+   V_WIND_PARAM
+   {
+      *
+   } = 132
+
+   W_WIND_PARAM
+   {
+      *
+   } = 135
+}
diff --git a/src/XSection/XsectRules b/src/XSection/XsectRules
new file mode 100644
index 0000000..b20016b
--- /dev/null
+++ b/src/XSection/XsectRules
@@ -0,0 +1,8 @@
+%if WIND_HORIZONTAL_COMPONENT = PER %then
+   %set WIND_PERPENDICULAR = ON
+
+%if WIND_HORIZONTAL_COMPONENT = INT %then
+   %set WIND_INTENSITY = ON
+
+%if INTERPOLATE_VALUES = NO %then
+   %unset PRESSURE_LEVEL_AXIS
diff --git a/src/XSection/XsectViewDef b/src/XSection/XsectViewDef
new file mode 100644
index 0000000..2a2c07a
--- /dev/null
+++ b/src/XSection/XsectViewDef
@@ -0,0 +1,81 @@
+XSECTVIEW; PlotMod Icon; Metview
+{
+   LINE
+      [
+         help = help_input,
+         help_icon = 'help_line',
+         input_type = line,
+         input_window = '/System/Defaults/Input Window'
+      ]
+   {
+      *
+      /
+   } = 0./-180./0./180.
+
+   BOTTOM_PRESSURE
+   {
+      *
+   } = 1015.0
+
+   TOP_PRESSURE
+   {
+      *
+   } = 10.0
+
+   WIND_PARALLEL
+   {
+      ON
+      OFF
+   } = ON
+
+   WIND_PERPENDICULAR
+   {
+      ON
+      OFF
+   } = OFF
+
+   WIND_INTENSITY
+   {
+      ON
+      OFF
+   } = OFF
+
+   WIND_HORIZONTAL_COMPONENT
+      [ visible = false ]
+   {
+      PERPENDICULAR   ; PER
+      PARALLEL        ; PAR
+      INTENSITY       ; INT
+   } = PAR
+
+   PRESSURE_LEVEL_AXIS
+   {
+      LINEAR
+      LOG
+   } = LINEAR
+
+%include OverlayControl
+
+   SUBPAGE_X_POSITION
+   {
+      @
+   } = 7.5
+
+   SUBPAGE_Y_POSITION
+   {
+      @
+   } = 7
+
+   SUBPAGE_X_LENGTH
+   {
+      @
+   } = 85
+
+   SUBPAGE_Y_LENGTH
+   {
+      @
+   } = 80
+
+   %include PageFrameDef
+   %include SubpageFrameDef
+}
diff --git a/src/XSection/XsectViewRules b/src/XSection/XsectViewRules
new file mode 100644
index 0000000..2de5c21
--- /dev/null
+++ b/src/XSection/XsectViewRules
@@ -0,0 +1,3 @@
+%include PageFrameRules
+%include SubpageFrameRules
+%include OverlayControlRules
diff --git a/src/images/Makefile.am b/src/images/Makefile.am
index 3503a60..800fe65 100644
--- a/src/images/Makefile.am
+++ b/src/images/Makefile.am
@@ -1,43 +1,99 @@
 
-EXTRA_DIST = add.svg\
+EXTRA_DIST = accept.svg \
+             add.svg\
+             add_bookmark.svg \
+             add_bookmark_group.svg \
              animation.svg \
 	     antialias.svg \
-	     arrow_bottom.svg \
+	     archive.svg \
+             arrow_bottom.svg \
              arrow_down.svg \
              arrow_left.svg \
              arrow_top.svg \
              arrow_up.svg \
              check_consistency.svg \
-	     check_syntax.svg \
+	     big_arrow_left.svg \
+             big_arrow_right.svg \
+             big_arrow_up.svg \
+             bookmark.svg \
+             bookmark_broken.svg \
+             bookmark_group.svg \
+	     cancel.svg \
+             check_syntax.svg \
 	     clear_left.svg \
              close.svg \
 	     configure.svg \
 	     connectAnimations.svg \
+             create_folder.svg \
+             create_macro.svg \
 	     create_mars.svg \
-	     data_probe.svg \
+	     cursor_bdiag.svg \
+	     cursor_fdiag.svg \
+             cursor_horiz.svg \
+	     cursor_vert.svg \
+             cursor_bdiag_hover.svg \
+	     cursor_fdiag_hover.svg \
+             cursor_horiz_hover.svg \
+	     cursor_vert_hover.svg \
+             data_probe.svg \
+             detailed_view.svg \
+             drawer.svg \
+	     duplicate.svg \
              edit.svg \
 	     editcopy.svg \
 	     editcut.svg \
  	     editpaste.svg \
+	     embedded.svg \
+             error.svg \
+             examine.svg \
+             execute.svg \
 	     exit.svg \
+             expand_left.svg \
+             expand_right.svg \
 	     fileInfo.svg \
 	     filesave.svg\
 	     filesaveas.svg \
+	     filter.svg \
+             folder.svg \
+             foldergroup.svg \
+	     gui_edit.svg \
 	     gunsight.svg \
+             help_line.svg \
+             help_map.svg \
+             help_point.svg \
+             help_script.svg \
 	     highlight_scene.svg \
 	     histogram.svg \
-	     insert_licence.svg \
+	     history.svg \
+             home.svg \
+             icon_group.svg \
+	     icon_view.svg \
+             insert_licence.svg \
 	     key.svg \
 	     layers.svg \
+	     link.svg \
+	     link_broken.svg \
 	     log.svg \
 	     macro.svg \
 	     magnifier.svg \
 	     magnifier_handler.png \
+             mail_send.svg \
+             menu_indicator.png \
 	     meta_data.svg \
 	     metview_logo.png \
 	     monitor.svg \
              overwrite_steps.svg \
-             player_end.svg \
+	     padlock.svg \
+             page_add.svg \
+             page_connect.svg \
+             page_disconnect.svg \
+             page_delete.svg \
+	     page_expand.svg \
+	     page_join.svg \
+	     page_select_all.svg \
+	     page_setup.svg \
+	     page_split.svg \
+	     player_end.svg \
 	     player_next.svg \
              player_play.svg \
 	     player_prev.svg \
@@ -63,16 +119,26 @@ EXTRA_DIST = add.svg\
 	     select_rect.svg \
              show_editable_only.svg \
 	     sidebar.svg \
+             sidebar_left.svg \
 	     size_up.svg \
 	     size_down.svg \
+	     snap_to_grid.svg \
+             splash_screen.png \
+	     splash_screen.svg \
 	     stats.svg \
 	     swap_direction.svg \
+             text_edit.svg \
              triangle_left.svg \
              triangle_right.svg \
 	     undo.svg \
+             unknown.svg \
+             view_grid.svg \
+	     visualise.svg \
+             warning.svg \
+	     wastebasket.svg \
 	     wizard.svg \
 	     zoom.svg \
              zoom_in.svg \
 	     zoom_out.svg \
 	     zoom_stack.svg 
-	    	 
\ No newline at end of file
+	    	 
diff --git a/src/images/Makefile.in b/src/images/Makefile.in
index 7086241..4ae617d 100644
--- a/src/images/Makefile.in
+++ b/src/images/Makefile.in
@@ -82,6 +82,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -97,6 +98,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -123,11 +126,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -255,45 +261,101 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-EXTRA_DIST = add.svg\
+EXTRA_DIST = accept.svg \
+             add.svg\
+             add_bookmark.svg \
+             add_bookmark_group.svg \
              animation.svg \
 	     antialias.svg \
-	     arrow_bottom.svg \
+	     archive.svg \
+             arrow_bottom.svg \
              arrow_down.svg \
              arrow_left.svg \
              arrow_top.svg \
              arrow_up.svg \
              check_consistency.svg \
-	     check_syntax.svg \
+	     big_arrow_left.svg \
+             big_arrow_right.svg \
+             big_arrow_up.svg \
+             bookmark.svg \
+             bookmark_broken.svg \
+             bookmark_group.svg \
+	     cancel.svg \
+             check_syntax.svg \
 	     clear_left.svg \
              close.svg \
 	     configure.svg \
 	     connectAnimations.svg \
+             create_folder.svg \
+             create_macro.svg \
 	     create_mars.svg \
-	     data_probe.svg \
+	     cursor_bdiag.svg \
+	     cursor_fdiag.svg \
+             cursor_horiz.svg \
+	     cursor_vert.svg \
+             cursor_bdiag_hover.svg \
+	     cursor_fdiag_hover.svg \
+             cursor_horiz_hover.svg \
+	     cursor_vert_hover.svg \
+             data_probe.svg \
+             detailed_view.svg \
+             drawer.svg \
+	     duplicate.svg \
              edit.svg \
 	     editcopy.svg \
 	     editcut.svg \
  	     editpaste.svg \
+	     embedded.svg \
+             error.svg \
+             examine.svg \
+             execute.svg \
 	     exit.svg \
+             expand_left.svg \
+             expand_right.svg \
 	     fileInfo.svg \
 	     filesave.svg\
 	     filesaveas.svg \
+	     filter.svg \
+             folder.svg \
+             foldergroup.svg \
+	     gui_edit.svg \
 	     gunsight.svg \
+             help_line.svg \
+             help_map.svg \
+             help_point.svg \
+             help_script.svg \
 	     highlight_scene.svg \
 	     histogram.svg \
-	     insert_licence.svg \
+	     history.svg \
+             home.svg \
+             icon_group.svg \
+	     icon_view.svg \
+             insert_licence.svg \
 	     key.svg \
 	     layers.svg \
+	     link.svg \
+	     link_broken.svg \
 	     log.svg \
 	     macro.svg \
 	     magnifier.svg \
 	     magnifier_handler.png \
+             mail_send.svg \
+             menu_indicator.png \
 	     meta_data.svg \
 	     metview_logo.png \
 	     monitor.svg \
              overwrite_steps.svg \
-             player_end.svg \
+	     padlock.svg \
+             page_add.svg \
+             page_connect.svg \
+             page_disconnect.svg \
+             page_delete.svg \
+	     page_expand.svg \
+	     page_join.svg \
+	     page_select_all.svg \
+	     page_setup.svg \
+	     page_split.svg \
+	     player_end.svg \
 	     player_next.svg \
              player_play.svg \
 	     player_prev.svg \
@@ -319,13 +381,23 @@ EXTRA_DIST = add.svg\
 	     select_rect.svg \
              show_editable_only.svg \
 	     sidebar.svg \
+             sidebar_left.svg \
 	     size_up.svg \
 	     size_down.svg \
+	     snap_to_grid.svg \
+             splash_screen.png \
+	     splash_screen.svg \
 	     stats.svg \
 	     swap_direction.svg \
+             text_edit.svg \
              triangle_left.svg \
              triangle_right.svg \
 	     undo.svg \
+             unknown.svg \
+             view_grid.svg \
+	     visualise.svg \
+             warning.svg \
+	     wastebasket.svg \
 	     wizard.svg \
 	     zoom.svg \
              zoom_in.svg \
diff --git a/src/images/accept.svg b/src/images/accept.svg
new file mode 100644
index 0000000..fe34796
--- /dev/null
+++ b/src/images/accept.svg
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="svg1455"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="accept.svg"
+   inkscape:export-xdpi="120.00000"
+   inkscape:export-ydpi="120.00000"
+   version="1.1"
+   style="display:inline">
+  <defs
+     id="defs3">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective31" />
+    <linearGradient
+       id="linearGradient3693">
+      <stop
+         id="stop3695"
+         offset="0"
+         style="stop-color:#42f56a;stop-opacity:1;" />
+      <stop
+         id="stop3697"
+         offset="1"
+         style="stop-color:#00a100;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3710-9">
+      <stop
+         id="stop3712-2"
+         offset="0"
+         style="stop-color:#cccccc;stop-opacity:1" />
+      <stop
+         id="stop3714-2"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="6.1443644"
+       x2="23.48575"
+       y1="30.518726"
+       x1="4.5201936"
+       gradientTransform="matrix(1.0420975,0,0,0.96389885,-0.17180634,0.90619192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3110"
+       xlink:href="#linearGradient3710-9"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3693"
+       id="linearGradient3691"
+       x1="14.173127"
+       y1="27.414982"
+       x2="13.18478"
+       y2="9.1505356"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.79904875,1.3317479)" />
+    <linearGradient
+       y2="13.539209"
+       x2="25.816109"
+       y1="13.5"
+       x1="-0.5"
+       gradientTransform="matrix(-0.4901308,0,0,0.48520668,2.0508751,4.1217947)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2990"
+       xlink:href="#linearGradient11462"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient11462">
+      <stop
+         id="stop11464"
+         offset="0"
+         style="stop-color:#b3caff;stop-opacity:1;" />
+      <stop
+         id="stop11466"
+         offset="1"
+         style="stop-color:#5a98ec;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3630"
+       id="linearGradient3636"
+       x1="13.045778"
+       y1="7.4768147"
+       x2="20.514267"
+       y2="32.043404"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.66985248,0,0,0.94377063,16.337689,-0.88872133)" />
+    <linearGradient
+       id="linearGradient3630">
+      <stop
+         style="stop-color:#f6e1c0;stop-opacity:1;"
+         offset="0"
+         id="stop3632" />
+      <stop
+         style="stop-color:#f5e7d1;stop-opacity:1;"
+         offset="1"
+         id="stop3634" />
+    </linearGradient>
+    <linearGradient
+       y2="30.458979"
+       x2="10.126635"
+       y1="7.4387646"
+       x1="2.0493469"
+       gradientTransform="matrix(0.70225464,0,0,0.94234674,17.220617,-0.34925834)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2977"
+       xlink:href="#linearGradient3630"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="26.09375"
+     inkscape:cx="14.716168"
+     inkscape:cy="16"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1484"
+     inkscape:window-height="1096"
+     inkscape:window-x="2036"
+     inkscape:window-y="35"
+     inkscape:window-maximized="0"
+     inkscape:snap-smooth-nodes="false"
+     inkscape:object-nodes="false"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3734"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="data"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="mark"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3691);fill-opacity:1;stroke:#295723;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 2.3590963,17.769322 5.7835909,15.029727 10.045184,20.546968 27.434007,7.5719382 29.907253,11.034483 9.0558853,26.634959 2.3590963,17.769322 z"
+       id="path2911"
+       sodipodi:nodetypes="ccccccc" />
+  </g>
+</svg>
diff --git a/src/images/add_bookmark.svg b/src/images/add_bookmark.svg
new file mode 100644
index 0000000..0c0a916
--- /dev/null
+++ b/src/images/add_bookmark.svg
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="add_bookmark.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3608">
+      <stop
+         id="stop3610"
+         offset="0"
+         style="stop-color:#2eaf1d;stop-opacity:1;" />
+      <stop
+         id="stop3612"
+         offset="1"
+         style="stop-color:#91ff44;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3612">
+      <stop
+         style="stop-color:#616161;stop-opacity:1;"
+         offset="0"
+         id="stop3614" />
+      <stop
+         style="stop-color:#383838;stop-opacity:1;"
+         offset="1"
+         id="stop3616" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3601">
+      <stop
+         style="stop-color:#a2a2a2;stop-opacity:1;"
+         offset="0"
+         id="stop3603" />
+      <stop
+         style="stop-color:#343434;stop-opacity:1;"
+         offset="1"
+         id="stop3605" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2825"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2841"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3601"
+       id="linearGradient3607"
+       x1="10.653805"
+       y1="3.7712457"
+       x2="24.085051"
+       y2="29.5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96774194,0,0,-0.96774194,0.58051457,31.158684)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3612"
+       id="linearGradient3618"
+       x1="3"
+       y1="28.806061"
+       x2="29"
+       y2="28.806061"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3612"
+       id="linearGradient3620"
+       gradientUnits="userSpaceOnUse"
+       x1="3"
+       y1="28.806061"
+       x2="29"
+       y2="28.806061"
+       gradientTransform="translate(0,-32.806061)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3608"
+       id="linearGradient3606"
+       x1="24"
+       y1="26"
+       x2="7"
+       y2="8"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.83718675,0,0,0.87310139,-36.94508,11.435241)" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="23.49078"
+       x2="7.2979932"
+       y1="7.6554561"
+       x1="9.0300617"
+       id="linearGradient3765"
+       xlink:href="#linearGradient3757"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757">
+      <stop
+         id="stop3759"
+         offset="0"
+         style="stop-color:#fdfb72;stop-opacity:1;" />
+      <stop
+         id="stop3761"
+         offset="1"
+         style="stop-color:#ffb41b;stop-opacity:1;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective2882"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3015"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       y2="19.5"
+       x2="38.5"
+       y1="19.5"
+       x1="7.5"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3945"
+       xlink:href="#linearGradient3845"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3845">
+      <stop
+         style="stop-color:#326dc2;stop-opacity:1;"
+         offset="0"
+         id="stop3847" />
+      <stop
+         style="stop-color:#6295be;stop-opacity:1;"
+         offset="1"
+         id="stop3849" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.46875"
+     inkscape:cx="4.820918"
+     inkscape:cy="16.354555"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1584"
+     inkscape:window-height="1058"
+     inkscape:window-x="2081"
+     inkscape:window-y="48"
+     inkscape:window-maximized="0"
+     inkscape:snap-to-guides="false"
+     inkscape:snap-grids="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2831"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer3"
+     inkscape:label="plus"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="star">
+    <g
+       transform="matrix(1.0129137,0,0,0.99958419,0.15655371,-1019.3091)"
+       id="layer1-2"
+       inkscape:label="Layer 1">
+      <path
+         inkscape:transform-center-y="-1.4817371"
+         inkscape:transform-center-x="0.053227332"
+         transform="matrix(0.99363412,0.30409271,-0.29423698,1.0269168,10.313398,1022.4196)"
+         d="M 20.997045,20.992528 C 20.75931,21.308892 11.617197,19.181414 11.238826,19.297493 10.860454,19.413572 4.5202372,26.329466 4.1459842,26.201371 3.7717312,26.073276 2.9704721,16.715905 2.7432329,16.391868 2.5159936,16.067831 -6.016519,12.168242 -6.0107214,11.772479 c 0.0058,-0.395763 8.6627974,-4.0484273 8.8998098,-4.3653101 0.2370125,-0.3168827 1.3050227,-9.6358293 1.6832674,-9.7523143 0.3782446,-0.116485 6.5253462,6.9706314 6.8997352,7.0989866 0.374389,0.1283552 9.578158,-1.7 [...]
+         inkscape:randomized="-0.001"
+         inkscape:rounded="0.04"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.2718196"
+         sodipodi:arg1="0.64350111"
+         sodipodi:r2="7.6500001"
+         sodipodi:r1="15"
+         sodipodi:cy="12"
+         sodipodi:cx="9"
+         sodipodi:sides="5"
+         id="path2987"
+         style="fill:url(#linearGradient3765);fill-opacity:1;fill-rule:evenodd;stroke:#a7723a;stroke-width:0.94051594;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:type="star" />
+    </g>
+    <path
+       transform="matrix(0.40524526,0,0,0.41647107,15.508018,-0.88078194)"
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3945);fill-opacity:1;fill-rule:evenodd;stroke:#3a4a97;stroke-width:2.92098856;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path2978"
+       sodipodi:cx="23"
+       sodipodi:cy="19.5"
+       sodipodi:rx="15"
+       sodipodi:ry="14.5"
+       d="m 38,19.5 a 15,14.5 0 1 1 -30,0 15,14.5 0 1 1 30,0 z" />
+    <path
+       style="fill:#ececec;fill-opacity:1;stroke:none;display:inline"
+       d="m 23.586636,1.8439153 2.63086,3.6e-6 -0.06465,4.0117805 3.693339,0 4e-6,2.6580646 -3.69334,0 -4e-6,4.076429 -2.501562,-0.06465 -0.06465,-4.0764294 -4.016573,4e-7 0,-2.6580647 4.016572,0 0,-3.947134 z"
+       id="path2826-4"
+       sodipodi:nodetypes="ccccccccccccc" />
+  </g>
+</svg>
diff --git a/src/images/add_bookmark_group.svg b/src/images/add_bookmark_group.svg
new file mode 100644
index 0000000..91ca51d
--- /dev/null
+++ b/src/images/add_bookmark_group.svg
@@ -0,0 +1,499 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="add_bookmark_group.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3608">
+      <stop
+         id="stop3610"
+         offset="0"
+         style="stop-color:#2eaf1d;stop-opacity:1;" />
+      <stop
+         id="stop3612"
+         offset="1"
+         style="stop-color:#91ff44;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3612">
+      <stop
+         style="stop-color:#616161;stop-opacity:1;"
+         offset="0"
+         id="stop3614" />
+      <stop
+         style="stop-color:#383838;stop-opacity:1;"
+         offset="1"
+         id="stop3616" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3601">
+      <stop
+         style="stop-color:#a2a2a2;stop-opacity:1;"
+         offset="0"
+         id="stop3603" />
+      <stop
+         style="stop-color:#343434;stop-opacity:1;"
+         offset="1"
+         id="stop3605" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2825"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2841"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3601"
+       id="linearGradient3607"
+       x1="10.653805"
+       y1="3.7712457"
+       x2="24.085051"
+       y2="29.5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96774194,0,0,-0.96774194,0.58051457,31.158684)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3612"
+       id="linearGradient3618"
+       x1="3"
+       y1="28.806061"
+       x2="29"
+       y2="28.806061"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3612"
+       id="linearGradient3620"
+       gradientUnits="userSpaceOnUse"
+       x1="3"
+       y1="28.806061"
+       x2="29"
+       y2="28.806061"
+       gradientTransform="translate(0,-32.806061)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3608"
+       id="linearGradient3606"
+       x1="24"
+       y1="26"
+       x2="7"
+       y2="8"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.83718675,0,0,0.87310139,-36.94508,11.435241)" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="23.49078"
+       x2="7.2979932"
+       y1="7.6554561"
+       x1="9.0300617"
+       id="linearGradient3765"
+       xlink:href="#linearGradient3757"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757">
+      <stop
+         id="stop3759"
+         offset="0"
+         style="stop-color:#fdfb72;stop-opacity:1;" />
+      <stop
+         id="stop3761"
+         offset="1"
+         style="stop-color:#ffb41b;stop-opacity:1;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective2882"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3015"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       y2="19.5"
+       x2="38.5"
+       y1="19.5"
+       x1="7.5"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3945"
+       xlink:href="#linearGradient3845"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3845">
+      <stop
+         style="stop-color:#326dc2;stop-opacity:1;"
+         offset="0"
+         id="stop3847" />
+      <stop
+         style="stop-color:#6295be;stop-opacity:1;"
+         offset="1"
+         id="stop3849" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective4539"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4409"
+       id="linearGradient3891"
+       gradientUnits="userSpaceOnUse"
+       x1="9.0300617"
+       y1="7.6554561"
+       x2="7.2979932"
+       y2="23.49078" />
+    <linearGradient
+       id="linearGradient4409">
+      <stop
+         id="stop4411"
+         offset="0"
+         style="stop-color:#fde772;stop-opacity:1;" />
+      <stop
+         id="stop4413"
+         offset="1"
+         style="stop-color:#8ea5b4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4403"
+       id="linearGradient3887"
+       gradientUnits="userSpaceOnUse"
+       x1="9.0300617"
+       y1="7.6554561"
+       x2="7.2979932"
+       y2="23.49078" />
+    <linearGradient
+       id="linearGradient4403">
+      <stop
+         id="stop4405"
+         offset="0"
+         style="stop-color:#fdf272;stop-opacity:1;" />
+      <stop
+         id="stop4407"
+         offset="1"
+         style="stop-color:#d2b882;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-7"
+       id="linearGradient3765-7"
+       x1="9.0300617"
+       y1="7.6554561"
+       x2="7.2979932"
+       y2="23.49078"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3757-7">
+      <stop
+         style="stop-color:#fdfb72;stop-opacity:1;"
+         offset="0"
+         id="stop3759-5" />
+      <stop
+         style="stop-color:#ffb41b;stop-opacity:1;"
+         offset="1"
+         id="stop3761-4" />
+    </linearGradient>
+    <linearGradient
+       y2="23.49078"
+       x2="7.2979932"
+       y1="7.6554561"
+       x1="9.0300617"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4558"
+       xlink:href="#linearGradient3757-7"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       id="perspective4607"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4409-1"
+       id="linearGradient3891-8"
+       gradientUnits="userSpaceOnUse"
+       x1="9.0300617"
+       y1="7.6554561"
+       x2="7.2979932"
+       y2="23.49078" />
+    <linearGradient
+       id="linearGradient4409-1">
+      <stop
+         id="stop4411-2"
+         offset="0"
+         style="stop-color:#fde772;stop-opacity:1;" />
+      <stop
+         id="stop4413-8"
+         offset="1"
+         style="stop-color:#8ea5b4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4403-3"
+       id="linearGradient3887-9"
+       gradientUnits="userSpaceOnUse"
+       x1="9.0300617"
+       y1="7.6554561"
+       x2="7.2979932"
+       y2="23.49078" />
+    <linearGradient
+       id="linearGradient4403-3">
+      <stop
+         id="stop4405-6"
+         offset="0"
+         style="stop-color:#fdf272;stop-opacity:1;" />
+      <stop
+         id="stop4407-8"
+         offset="1"
+         style="stop-color:#d2b882;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-2"
+       id="linearGradient3765-0"
+       x1="9.0300617"
+       y1="7.6554561"
+       x2="7.2979932"
+       y2="23.49078"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3757-2">
+      <stop
+         style="stop-color:#fdfb72;stop-opacity:1;"
+         offset="0"
+         id="stop3759-1" />
+      <stop
+         style="stop-color:#ffb41b;stop-opacity:1;"
+         offset="1"
+         id="stop3761-0" />
+    </linearGradient>
+    <linearGradient
+       y2="23.49078"
+       x2="7.2979932"
+       y1="7.6554561"
+       x1="9.0300617"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4626"
+       xlink:href="#linearGradient3757-2"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       id="perspective3719"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-4"
+       id="linearGradient3765-2"
+       x1="9.0300617"
+       y1="7.6554561"
+       x2="7.2979932"
+       y2="23.49078"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3757-4">
+      <stop
+         style="stop-color:#fdfb72;stop-opacity:1;"
+         offset="0"
+         id="stop3759-7" />
+      <stop
+         style="stop-color:#ffb41b;stop-opacity:1;"
+         offset="1"
+         id="stop3761-7" />
+    </linearGradient>
+    <linearGradient
+       y2="23.49078"
+       x2="7.2979932"
+       y1="7.6554561"
+       x1="9.0300617"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2846"
+       xlink:href="#linearGradient3639"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3639">
+      <stop
+         style="stop-color:#eed7a7;stop-opacity:1;"
+         offset="0"
+         id="stop3641" />
+      <stop
+         style="stop-color:#ec821f;stop-opacity:1;"
+         offset="1"
+         id="stop3643" />
+    </linearGradient>
+    <linearGradient
+       y2="23.49078"
+       x2="7.2979932"
+       y1="7.6554561"
+       x1="9.0300617"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3733"
+       xlink:href="#linearGradient3639"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.46875"
+     inkscape:cx="1.0499267"
+     inkscape:cy="16.354555"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:window-width="1584"
+     inkscape:window-height="1058"
+     inkscape:window-x="2081"
+     inkscape:window-y="48"
+     inkscape:window-maximized="0"
+     inkscape:snap-to-guides="false"
+     inkscape:snap-grids="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2831"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer3"
+     inkscape:label="plus"
+     style="display:inline">
+    <path
+       inkscape:transform-center-y="-1.0055606"
+       inkscape:transform-center-x="0.035630578"
+       transform="matrix(0.66513436,0.20635065,-0.19696097,0.69684323,7.7759503,2.6831552)"
+       d="M 20.997045,20.992528 C 20.75931,21.308892 11.617197,19.181414 11.238826,19.297493 10.860454,19.413572 4.5202372,26.329466 4.1459842,26.201371 3.7717312,26.073276 2.9704721,16.715905 2.7432329,16.391868 2.5159936,16.067831 -6.016519,12.168242 -6.0107214,11.772479 c 0.0058,-0.395763 8.6627974,-4.0484273 8.8998098,-4.3653101 0.2370125,-0.3168827 1.3050227,-9.6358293 1.6832674,-9.7523143 0.3782446,-0.116485 6.5253462,6.9706314 6.8997352,7.0989866 0.374389,0.1283552 9.578158,-1.722 [...]
+       inkscape:randomized="-0.001"
+       inkscape:rounded="0.04"
+       inkscape:flatsided="false"
+       sodipodi:arg2="1.2718196"
+       sodipodi:arg1="0.64350111"
+       sodipodi:r2="7.6500001"
+       sodipodi:r1="15"
+       sodipodi:cy="12"
+       sodipodi:cx="9"
+       sodipodi:sides="5"
+       id="path3885"
+       style="fill:url(#linearGradient3733);fill-opacity:1;fill-rule:evenodd;stroke:#de8b52;stroke-width:1.40417337;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="star" />
+    <path
+       sodipodi:type="star"
+       style="fill:url(#linearGradient3765-2);fill-opacity:1;fill-rule:evenodd;stroke:#a7723a;stroke-width:1.3212862;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path2987"
+       sodipodi:sides="5"
+       sodipodi:cx="9"
+       sodipodi:cy="12"
+       sodipodi:r1="15"
+       sodipodi:r2="7.6500001"
+       sodipodi:arg1="0.64350111"
+       sodipodi:arg2="1.2718196"
+       inkscape:flatsided="false"
+       inkscape:rounded="0.04"
+       inkscape:randomized="-0.001"
+       d="M 20.997045,20.992528 C 20.75931,21.308892 11.617197,19.181414 11.238826,19.297493 10.860454,19.413572 4.5202372,26.329466 4.1459842,26.201371 3.7717312,26.073276 2.9704721,16.715905 2.7432329,16.391868 2.5159936,16.067831 -6.016519,12.168242 -6.0107214,11.772479 c 0.0058,-0.395763 8.6627974,-4.0484273 8.8998098,-4.3653101 0.2370125,-0.3168827 1.3050227,-9.6358293 1.6832674,-9.7523143 0.3782446,-0.116485 6.5253462,6.9706314 6.8997352,7.0989866 0.374389,0.1283552 9.578158,-1.722 [...]
+       transform="matrix(0.70283106,0.22055243,-0.20812378,0.74480248,16.218766,9.3782104)"
+       inkscape:transform-center-x="0.037649093"
+       inkscape:transform-center-y="-1.0747454" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="star"
+     style="display:inline">
+    <path
+       transform="matrix(0.40524526,0,0,0.41647107,15.508018,-0.88078194)"
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3945);fill-opacity:1;fill-rule:evenodd;stroke:#3a4a97;stroke-width:2.92098856;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path2978"
+       sodipodi:cx="23"
+       sodipodi:cy="19.5"
+       sodipodi:rx="15"
+       sodipodi:ry="14.5"
+       d="m 38,19.5 a 15,14.5 0 1 1 -30,0 15,14.5 0 1 1 30,0 z" />
+    <path
+       style="fill:#ececec;fill-opacity:1;stroke:none;display:inline"
+       d="m 23.586636,1.8439153 2.63086,3.6e-6 -0.06465,4.0117805 3.693339,0 4e-6,2.6580646 -3.69334,0 -4e-6,4.076429 -2.501562,-0.06465 -0.06465,-4.0764294 -4.016573,4e-7 0,-2.6580647 4.016572,0 0,-3.947134 z"
+       id="path2826-4"
+       sodipodi:nodetypes="ccccccccccccc" />
+  </g>
+</svg>
diff --git a/src/images/antialias.svg b/src/images/antialias.svg
index 94847db..34f5798 100644
--- a/src/images/antialias.svg
+++ b/src/images/antialias.svg
@@ -28,7 +28,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
+        <dc:title></dc:title>
         <cc:license
            rdf:resource="Apache License 2.0" />
         <dc:creator>
@@ -60,24 +60,25 @@
      borderopacity="0.25490196"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="23.8125"
-     inkscape:cx="14.679458"
-     inkscape:cy="14.582104"
+     inkscape:zoom="26.09375"
+     inkscape:cx="16"
+     inkscape:cy="16"
      inkscape:current-layer="layer4"
      showgrid="true"
      inkscape:grid-bbox="true"
      inkscape:document-units="px"
      inkscape:showpageshadow="true"
-     inkscape:window-width="1521"
+     inkscape:window-width="1673"
      inkscape:window-height="1096"
-     inkscape:window-x="193"
-     inkscape:window-y="35"
+     inkscape:window-x="2022"
+     inkscape:window-y="75"
      gridtolerance="10000"
      inkscape:grid-points="true"
      showborder="true"
      borderlayer="false"
-     inkscape:snap-grids="true"
-     inkscape:window-maximized="0">
+     inkscape:snap-grids="false"
+     inkscape:window-maximized="0"
+     inkscape:snap-to-guides="false">
     <inkscape:grid
        type="xygrid"
        id="grid2841"
@@ -87,28 +88,29 @@
        snapvisiblegridlinesonly="true" />
   </sodipodi:namedview>
   <defs
-     id="defs3" />
-  <g
-     inkscape:groupmode="layer"
-     id="layer3"
-     inkscape:label="bg"
-     style="display:none">
-    <rect
-       style="fill:#5c84bc;fill-opacity:1;stroke:#92a8ce;stroke-width:2.0999999;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="rect3619"
-       width="30"
-       height="30"
-       x="1"
-       y="1"
-       ry="2.7585204" />
-  </g>
+     id="defs3">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective46" />
+    <inkscape:perspective
+       id="perspective3652"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
   <g
      inkscape:groupmode="layer"
      id="layer4"
      inkscape:label="bg1"
      style="display:inline">
     <rect
-       style="fill:#e5eaf0;fill-opacity:1;fill-rule:evenodd;stroke:#8996cb;stroke-width:1;stroke-opacity:1"
+       style="fill:#e0e6ed;stroke:#384780;stroke-width:1;stroke-opacity:1;fill-opacity:1"
        id="rect3648"
        width="30"
        height="30"
@@ -122,7 +124,7 @@
      inkscape:label="rects"
      style="display:inline">
     <rect
-       style="fill:#afc6e9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       style="fill:#8aacdf;fill-opacity:1;fill-rule:evenodd;stroke:none"
        id="rect2845"
        width="8"
        height="8"
@@ -136,9 +138,9 @@
        height="8"
        width="8"
        id="rect3621"
-       style="fill:#d7e3f4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+       style="fill:#bfd2ed;fill-opacity:1;fill-rule:evenodd;stroke:none" />
     <rect
-       style="fill:#f8f9fb;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       style="fill:#dce4ef;fill-opacity:1;fill-rule:evenodd;stroke:none"
        id="rect3623"
        width="8"
        height="8"
@@ -152,9 +154,9 @@
        height="8"
        width="8"
        id="rect3627"
-       style="fill:#6d97d6;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+       style="fill:#5c8bd1;fill-opacity:1;fill-rule:evenodd;stroke:none" />
     <rect
-       style="fill:#afc6e9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       style="fill:#8aacdf;fill-opacity:1;fill-rule:evenodd;stroke:none"
        id="rect3629"
        width="8"
        height="8"
@@ -168,209 +170,9 @@
        height="8"
        width="8"
        id="rect3631"
-       style="fill:#d7e3f4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-    <rect
-       style="fill:#214478;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect3635"
-       width="8"
-       height="8.000001"
-       x="2"
-       y="-11"
-       ry="0" />
-    <rect
-       ry="0"
-       y="-11"
-       x="7"
-       height="5.0341206"
-       width="5.0000005"
-       id="rect3637"
-       style="fill:#3771c8;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-    <rect
-       style="fill:#5f8dd3;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect3639"
-       width="5.0000005"
-       height="5.0341206"
-       x="12"
-       y="-11"
-       ry="0" />
-    <rect
-       ry="0"
-       y="-11"
-       x="17"
-       height="5.0000005"
-       width="5.0000005"
-       id="rect3608"
-       style="fill:#87aade;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-    <rect
-       style="fill:#afc6e9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect3610"
-       width="5.0000005"
-       height="5.0000005"
-       x="22"
-       y="-11"
-       ry="0" />
-    <rect
-       ry="0"
-       y="-6"
-       x="1.9999995"
-       height="5.0000005"
-       width="5.0000005"
-       id="rect3632"
-       style="fill:#3771c8;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-    <rect
-       style="fill:#214478;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect3634"
-       width="5.0000005"
-       height="5.034121"
-       x="7"
-       y="-6"
-       ry="0" />
-    <rect
-       ry="0"
-       y="-6"
-       x="12"
-       height="5.0341206"
-       width="5.0000005"
-       id="rect3636"
-       style="fill:#3771c8;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-    <rect
-       style="fill:#5f8dd3;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect3638"
-       width="5.0000005"
-       height="5.034121"
-       x="17"
-       y="-6"
-       ry="0" />
-    <rect
-       ry="0"
-       y="-6"
-       x="22"
-       height="5.0000005"
-       width="5.0000005"
-       id="rect3640"
-       style="fill:#87aade;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-    <rect
-       style="fill:#5f8dd3;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect3642"
-       width="5"
-       height="4.9658799"
-       x="4"
-       y="48.965881"
-       ry="0" />
-    <rect
-       ry="0"
-       y="48.965881"
-       x="9"
-       height="4.9658799"
-       width="5.000001"
-       id="rect3644"
-       style="fill:#3771c8;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+       style="fill:#bfd2ed;fill-opacity:1;fill-rule:evenodd;stroke:none" />
     <rect
-       style="fill:#214478;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect3646"
-       width="5.0000005"
-       height="5.0682411"
-       x="14"
-       y="48.965881"
-       ry="0" />
-    <rect
-       ry="0"
-       y="49"
-       x="19"
-       height="4.9658799"
-       width="5.0000005"
-       id="rect3649"
-       style="fill:#3771c8;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-    <rect
-       style="fill:#5f8dd3;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect3651"
-       width="5.0000005"
-       height="4.9658799"
-       x="24"
-       y="49"
-       ry="0" />
-    <rect
-       style="fill:#87aade;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect3653"
-       width="5"
-       height="5.0000005"
-       x="4"
-       y="53.965881"
-       ry="0" />
-    <rect
-       ry="0"
-       y="53.965881"
-       x="9"
-       height="5.0000005"
-       width="5.0000005"
-       id="rect3655"
-       style="fill:#5f8dd3;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-    <rect
-       style="fill:#3771c8;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect3657"
-       width="5.0000005"
-       height="5.0341206"
-       x="14"
-       y="53.931759"
-       ry="0" />
-    <rect
-       ry="0"
-       y="53.965881"
-       x="19"
-       height="5.0000005"
-       width="5.0000005"
-       id="rect3659"
-       style="fill:#214478;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-    <rect
-       style="fill:#3771c8;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect3661"
-       width="5.0000005"
-       height="4.9658799"
-       x="24"
-       y="54"
-       ry="0" />
-    <rect
-       ry="0"
-       y="58.965881"
-       x="3.9999995"
-       height="5.0000005"
-       width="5.0000005"
-       id="rect3663"
-       style="fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-    <rect
-       style="fill:#87aade;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect3665"
-       width="5.0000005"
-       height="5.0000005"
-       x="9"
-       y="58.965881"
-       ry="0" />
-    <rect
-       ry="0"
-       y="58.897636"
-       x="14"
-       height="5.0682411"
-       width="5.0000005"
-       id="rect3667"
-       style="fill:#5f8dd3;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-    <rect
-       style="fill:#3771c8;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       id="rect3669"
-       width="5.0000005"
-       height="4.9658799"
-       x="19"
-       y="58.965881"
-       ry="0" />
-    <rect
-       ry="0"
-       y="58.965881"
-       x="24"
-       height="5.0000005"
-       width="5.0000005"
-       id="rect3671"
-       style="fill:#214478;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-    <rect
-       style="fill:#436fb5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       style="fill:#3b6cbc;fill-opacity:1;fill-rule:evenodd;stroke:none"
        id="rect3675"
        width="8"
        height="8"
@@ -384,14 +186,34 @@
        height="8"
        width="8"
        id="rect3677"
-       style="fill:#6d97d6;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+       style="fill:#5c8bd1;fill-opacity:1;fill-rule:evenodd;stroke:none" />
     <rect
-       style="fill:#afc6e9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       style="fill:#8aacdf;fill-opacity:1;fill-rule:evenodd;stroke:none"
        id="rect3679"
        width="8"
        height="8"
        x="20"
        y="20"
        ry="0" />
+    <rect
+       style="opacity:0;fill:none;stroke:#5368b4;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3633"
+       width="18"
+       height="13"
+       x="-5"
+       y="5" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="frame">
+    <rect
+       style="fill:none;stroke:#556084;stroke-width:0.69999999000000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       id="rect3641"
+       width="24"
+       height="24"
+       x="4"
+       y="4"
+       ry="0" />
   </g>
 </svg>
diff --git a/src/images/archive.svg b/src/images/archive.svg
new file mode 100644
index 0000000..964eee7
--- /dev/null
+++ b/src/images/archive.svg
@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="archive.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient4073">
+      <stop
+         style="stop-color:#524630;stop-opacity:1;"
+         offset="0"
+         id="stop4075" />
+      <stop
+         style="stop-color:#563a06;stop-opacity:1;"
+         offset="1"
+         id="stop4077" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4060">
+      <stop
+         style="stop-color:#5e5e5e;stop-opacity:1;"
+         offset="0"
+         id="stop4062" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop4064" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4010">
+      <stop
+         style="stop-color:#d9c18d;stop-opacity:1;"
+         offset="0"
+         id="stop4012" />
+      <stop
+         style="stop-color:#c5a152;stop-opacity:1;"
+         offset="1"
+         id="stop4014" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3939">
+      <stop
+         style="stop-color:#b58232;stop-opacity:1;"
+         offset="0"
+         id="stop3941" />
+      <stop
+         style="stop-color:#dccc8a;stop-opacity:1;"
+         offset="1"
+         id="stop3943" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3931">
+      <stop
+         style="stop-color:#d4c872;stop-opacity:1;"
+         offset="0"
+         id="stop3933" />
+      <stop
+         style="stop-color:#dfd195;stop-opacity:1;"
+         offset="1"
+         id="stop3935" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="38.871195 : 24.877412 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="10.92453 : 27.810746 : 1"
+       inkscape:persp3d-origin="-5.0754711 : 22.477413 : 1"
+       id="perspective3871" />
+    <linearGradient
+       id="linearGradient3789">
+      <stop
+         style="stop-color:#d7e3f4;stop-opacity:1;"
+         offset="0"
+         id="stop3791" />
+      <stop
+         style="stop-color:#f7f7f7;stop-opacity:1;"
+         offset="1"
+         id="stop3793" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4000">
+      <stop
+         id="stop3783"
+         offset="0"
+         style="stop-color:#adcbdd;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop4004" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3939"
+       id="linearGradient3945"
+       x1="14.750791"
+       y1="26.042974"
+       x2="4.8126822"
+       y2="19.05831"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1667599,0,0,1.3722561,-1.5619115,-11.299549)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4010"
+       id="linearGradient4016"
+       x1="5"
+       y1="12"
+       x2="17"
+       y2="24"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-20,21)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="14.049912"
+     inkscape:cy="16.5248"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:snap-grids="true"
+     inkscape:window-width="1599"
+     inkscape:window-height="990"
+     inkscape:window-x="96"
+     inkscape:window-y="20"
+     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="layer4"
+     inkscape:label="back" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="left" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="Layer">
+    <path
+       style="fill:url(#linearGradient3945);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+       d="m 2.3733333,10.96 20.9999997,0 0,19 c 0,0 -9.333252,0.173333 -9.32,-1.106667 l -3,0 C 11.100003,30.065556 5.6533333,29.96 2.3733333,29.96 c -0.1066667,-3.035556 -0.5866667,-8.693334 0.68,-8.106667 l 0,-3 c -1.32,0.48 -1,-8 -0.68,-7.893333 z"
+       id="rect3806"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccc" />
+    <path
+       style="fill:#b28539;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 9.3733333,2.96 C 11.617516,2.9422222 18.108239,2.5377778 18.053333,3.8533333 l 3,0 C 21.001773,2.4666667 26.097778,3 30,3 l -6.626667,7.96 c -3.89109,0.171868 -7.32,-0.106667 -9.32,0.893333 l -3,0 c -1.9999997,-1 -6.4695027,-0.966332 -8.733333,-1.000002 z"
+       id="rect3868"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="right">
+    <path
+       style="fill:#6e5223;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 23.373333,10.96 6.573333,-7.7333333 c 0,0 0.366657,8.5618613 -0.893333,8.6266663 l 0,3 c 1.50996,-1.195844 1.159999,7.04 1.159999,7.04 l -6.84,8.066667 c 0,0 0.426667,-8 -1.32,-8.106667 l 0,-3 c 1.32,-0.48 1.32,-7.893333 1.320001,-7.893333 z"
+       id="rect3808-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="edge" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="strip1">
+    <path
+       sodipodi:nodetypes="ccssscc"
+       inkscape:connector-curvature="0"
+       id="path4039"
+       d="m 11.053333,11.853333 c 1.901035,-3.3682091 3.821518,-5.4410082 7,-7.9999997 0.392901,-0.5892306 3.301572,-0.350017 3,0 0,0 -6.211577,6.2549737 -7,7.9999997 -0.675247,1.494533 -0.492523,13.149644 -0.16,17 0.07536,0.872653 -3.449035,0.106667 -2.786667,0.106667 -0.24284,-4.892354 -0.71596,-11.932156 -0.05333,-17.106667 z"
+       style="fill:#c8c4b7;stroke:#6c3c1a;stroke-width:0.55166680000000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:#00112b;stroke:none"
+       d="m 11.319999,11.959999 c 1.901035,-3.3682084 3.768185,-5.3343408 6.946667,-7.8933324 0.392901,-0.5892305 1.541572,-0.510017 1.24,-0.16 0,0 -6.158243,6.4149734 -6.946666,8.1599994 -0.675247,1.494533 -0.43919,12.776312 -0.106663,16.626668 0.07536,0.872653 -1.742369,-0.05333 -1.080001,-0.05333 -0.24284,-4.892354 -0.71596,-11.50549 -0.05334,-16.680002 z"
+       id="path4083"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccssscc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="strip">
+    <path
+       style="fill:#aca793;fill-opacity:1;stroke:#6c3c1a;stroke-width:0.54893386;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 3.105464,21.96 c 6.905659,0.576498 10.645378,0.477304 19.116977,-0.03051 2.003073,-1.150801 5.204447,-4.948645 6.871483,-7.196159 0.419301,-0.565306 0.378061,-3.682807 -0.05393,-2.893334 -0.819792,1.498185 -5.559834,6.767453 -6.884934,7.195893 C 20.525936,18.98784 9.5703946,19.862176 3.1587943,18.96 c -0.619725,0 -0.6700466,2.948515 -0.05333,3 z"
+       id="path4018"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="scssccs" />
+    <path
+       sodipodi:nodetypes="scssccs"
+       inkscape:connector-curvature="0"
+       id="path4081"
+       d="m 3.3721307,21.853333 c 6.9056593,0.576498 10.5920443,0.370638 19.0636433,-0.137173 2.003073,-1.150801 4.991114,-4.895312 6.65815,-7.142826 0.419301,-0.565306 0.164728,-1.65614 -0.267263,-0.866667 -0.819792,1.498185 -5.186501,6.607452 -6.511601,7.035892 -1.629127,-0.04805 -12.8513357,0.666286 -19.2629354,-0.23589 -0.619725,0 -0.2967132,1.295182 0.3200061,1.346664 z"
+       style="fill:#00112b;fill-opacity:1;stroke:none" />
+  </g>
+</svg>
diff --git a/src/images/big_arrow_left.svg b/src/images/big_arrow_left.svg
new file mode 100644
index 0000000..72b6792
--- /dev/null
+++ b/src/images/big_arrow_left.svg
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="big_arrow_left.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective2953" />
+    <linearGradient
+       id="linearGradient3797">
+      <stop
+         style="stop-color:#1f4db9;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+      <stop
+         style="stop-color:#a6c8dd;stop-opacity:1;"
+         offset="1"
+         id="stop3801" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3785">
+      <stop
+         style="stop-color:#c4d8e6;stop-opacity:1;"
+         offset="0"
+         id="stop3787" />
+      <stop
+         style="stop-color:#4880bb;stop-opacity:1;"
+         offset="1"
+         id="stop3789" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3785"
+       id="linearGradient3791"
+       x1="0.7379019"
+       y1="1037.1975"
+       x2="28.724367"
+       y2="1037.1975"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(1.1760155,1021.5383)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3797"
+       id="linearGradient3803"
+       x1="-0.90713501"
+       y1="1040.1685"
+       x2="30.395551"
+       y2="1040.3545"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9736902,0,0,0.82895833,-0.69805647,174.10643)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.15625"
+     inkscape:cx="-0.27852998"
+     inkscape:cy="17.66317"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1179"
+     inkscape:window-x="1916"
+     inkscape:window-y="-4"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <path
+       style="fill:url(#linearGradient3791);fill-opacity:1;stroke:#26356e;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+       d="m 29.338485,1041.4685 -11.450676,-0.1238 -5e-6,7.7369 c 0,0 -9.6067873,-7.6092 -15.4119911,-12.5648 4.950477,-4.3138 15.5976781,-12.9363 15.5976781,-12.9363 -2e-6,1.9188 -5e-6,6.0659 -5e-6,7.9847 l 11.265006,0.062 -7e-6,9.8413 z"
+       id="path3015"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccc" />
+    <path
+       sodipodi:nodetypes="cccccccccc"
+       inkscape:connector-curvature="0"
+       id="path3793"
+       d="m 27.763115,1033.5471 -3e-6,5.9023 -11.318316,-0.095 -0.253127,6.3577 c 0,0 -6.5860788,-5.5256 -11.1501699,-9.1614 3.9160983,-3.6752 11.2286419,-9.3516 11.2286419,-9.3516 -2e-6,1.4778 0.06189,4.7331 0.06189,6.2107 l 11.2454,0.013 -0.0619,0.062 0.247582,0.062 z"
+       style="fill:url(#linearGradient3803);fill-opacity:1;stroke:none" />
+  </g>
+</svg>
diff --git a/src/images/big_arrow_right.svg b/src/images/big_arrow_right.svg
new file mode 100644
index 0000000..9a40f27
--- /dev/null
+++ b/src/images/big_arrow_right.svg
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="big_arrow_right.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective18" />
+    <linearGradient
+       id="linearGradient3797">
+      <stop
+         style="stop-color:#1f4db9;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+      <stop
+         style="stop-color:#a6c8dd;stop-opacity:1;"
+         offset="1"
+         id="stop3801" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3785">
+      <stop
+         style="stop-color:#c4d8e6;stop-opacity:1;"
+         offset="0"
+         id="stop3787" />
+      <stop
+         style="stop-color:#4880bb;stop-opacity:1;"
+         offset="1"
+         id="stop3789" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3785"
+       id="linearGradient3791"
+       x1="0.7379019"
+       y1="1037.1975"
+       x2="28.724367"
+       y2="1037.1975"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1,0,0,1,31.195349,1021.6002)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3797"
+       id="linearGradient3803"
+       x1="-0.90713501"
+       y1="1040.1685"
+       x2="30.395551"
+       y2="1040.3545"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.9736902,0,0,0.82895833,33.069421,174.16833)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.15625"
+     inkscape:cx="-0.27852998"
+     inkscape:cy="17.66317"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1179"
+     inkscape:window-x="1916"
+     inkscape:window-y="-4"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <path
+       style="fill:url(#linearGradient3791);fill-opacity:1;stroke:#26356e;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+       d="m 3.0328799,1041.5304 11.4506761,-0.1238 5e-6,7.7369 c 0,0 9.606787,-7.6092 15.411991,-12.5648 -4.950477,-4.3138 -15.597678,-12.9363 -15.597678,-12.9363 2e-6,1.9188 5e-6,6.0659 5e-6,7.9847 l -11.2650061,0.062 7e-6,9.8413 z"
+       id="path3015"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccc" />
+    <path
+       sodipodi:nodetypes="cccccccccc"
+       inkscape:connector-curvature="0"
+       id="path3793"
+       d="m 4.6082499,1033.609 3e-6,5.9023 11.3183161,-0.095 0.253127,6.3577 c 0,0 6.586079,-5.5256 11.15017,-9.1614 -3.916099,-3.6752 -11.228642,-9.3516 -11.228642,-9.3516 2e-6,1.4778 -0.06189,4.7331 -0.06189,6.2107 l -11.2454001,0.013 0.0619,0.062 -0.247582,0.062 z"
+       style="fill:url(#linearGradient3803);fill-opacity:1;stroke:none" />
+  </g>
+</svg>
diff --git a/src/images/big_arrow_up.svg b/src/images/big_arrow_up.svg
new file mode 100644
index 0000000..c5a8cda
--- /dev/null
+++ b/src/images/big_arrow_up.svg
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="big_arrow_up.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective3031" />
+    <linearGradient
+       id="linearGradient3797">
+      <stop
+         style="stop-color:#1f4db9;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+      <stop
+         style="stop-color:#a6c8dd;stop-opacity:1;"
+         offset="1"
+         id="stop3801" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3785">
+      <stop
+         style="stop-color:#c4d8e6;stop-opacity:1;"
+         offset="0"
+         id="stop3787" />
+      <stop
+         style="stop-color:#4880bb;stop-opacity:1;"
+         offset="1"
+         id="stop3789" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3785"
+       id="linearGradient3791"
+       x1="0.7379019"
+       y1="1037.1975"
+       x2="28.724367"
+       y2="1037.1975"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,1,-1,0,31.00938,1021.4761)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3797"
+       id="linearGradient3803"
+       x1="-0.90713501"
+       y1="1040.1685"
+       x2="30.395551"
+       y2="1040.3545"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.9736902,-0.82895833,0,878.38007,1019.6647)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.15625"
+     inkscape:cx="-0.27852998"
+     inkscape:cy="17.66317"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1179"
+     inkscape:window-x="1916"
+     inkscape:window-y="-4"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <path
+       style="fill:url(#linearGradient3791);fill-opacity:1;stroke:#26356e;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+       d="m 11.07918,1049.6386 0.1238,-11.4507 -7.7368998,0 c 0,0 7.6091998,-9.6068 12.5647998,-15.412 4.3138,4.9505 12.9363,15.5977 12.9363,15.5977 -1.9188,0 -6.0659,0 -7.9847,0 l -0.062,11.265 -9.8413,0 z"
+       id="path3015"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccc" />
+    <path
+       sodipodi:nodetypes="cccccccccc"
+       inkscape:connector-curvature="0"
+       id="path3793"
+       d="m 18.939434,1048.1259 -5.9023,0 0.095,-11.3183 -6.3577002,-0.2531 c 0,0 5.5256002,-6.5861 9.1614002,-11.1502 3.6752,3.9161 9.3516,11.2286 9.3516,11.2286 -1.4778,0 -4.7331,0.062 -6.2107,0.062 l -0.013,11.2454 -0.062,-0.062 -0.062,0.2476 z"
+       style="fill:url(#linearGradient3803);fill-opacity:1;stroke:none" />
+  </g>
+</svg>
diff --git a/src/images/bookmark.svg b/src/images/bookmark.svg
new file mode 100644
index 0000000..6c3cc42
--- /dev/null
+++ b/src/images/bookmark.svg
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="bookmark.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective2882" />
+    <linearGradient
+       id="linearGradient3757">
+      <stop
+         style="stop-color:#fdfb72;stop-opacity:1;"
+         offset="0"
+         id="stop3759" />
+      <stop
+         style="stop-color:#ffb41b;stop-opacity:1;"
+         offset="1"
+         id="stop3761" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757"
+       id="linearGradient3765"
+       x1="9.0300617"
+       y1="7.6554561"
+       x2="7.2979932"
+       y2="23.49078"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="12.46875"
+     inkscape:cx="-14.405339"
+     inkscape:cy="16"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1421"
+     inkscape:window-height="925"
+     inkscape:window-x="414"
+     inkscape:window-y="57"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <path
+       sodipodi:type="star"
+       style="fill:url(#linearGradient3765);fill-opacity:1;fill-rule:evenodd;stroke:#a7723a;stroke-width:0.94637238999999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path2987"
+       sodipodi:sides="5"
+       sodipodi:cx="9"
+       sodipodi:cy="12"
+       sodipodi:r1="15"
+       sodipodi:r2="7.6500001"
+       sodipodi:arg1="0.64350111"
+       sodipodi:arg2="1.2718196"
+       inkscape:flatsided="false"
+       inkscape:rounded="0.04"
+       inkscape:randomized="-0.001"
+       d="M 20.997045,20.992528 C 20.75931,21.308892 11.617197,19.181414 11.238826,19.297493 10.860454,19.413572 4.5202372,26.329466 4.1459842,26.201371 3.7717312,26.073276 2.9704721,16.715905 2.7432329,16.391868 2.5159936,16.067831 -6.016519,12.168242 -6.0107214,11.772479 c 0.0058,-0.395763 8.6627974,-4.0484273 8.8998098,-4.3653101 0.2370125,-0.3168827 1.3050227,-9.6358293 1.6832674,-9.7523143 0.3782446,-0.116485 6.5253462,6.9706314 6.8997352,7.0989866 0.374389,0.1283552 9.578158,-1.722 [...]
+       transform="matrix(0.99363412,0.30409271,-0.29423698,1.0269168,10.313398,1022.4196)"
+       inkscape:transform-center-x="0.053227332"
+       inkscape:transform-center-y="-1.4817371" />
+  </g>
+</svg>
diff --git a/src/images/bookmark_broken.svg b/src/images/bookmark_broken.svg
new file mode 100644
index 0000000..0332b43
--- /dev/null
+++ b/src/images/bookmark_broken.svg
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="bookmark_broken.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective2882" />
+    <linearGradient
+       id="linearGradient3757">
+      <stop
+         style="stop-color:#c2c0bf;stop-opacity:1;"
+         offset="0"
+         id="stop3759" />
+      <stop
+         style="stop-color:#e8e8e8;stop-opacity:1;"
+         offset="1"
+         id="stop3761" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757"
+       id="linearGradient3765"
+       x1="9.0300617"
+       y1="7.6554561"
+       x2="7.2979932"
+       y2="23.49078"
+       gradientUnits="userSpaceOnUse" />
+    <inkscape:perspective
+       id="perspective4259"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3674"
+       id="linearGradient3680"
+       x1="13.117022"
+       y1="1020.3622"
+       x2="19.563829"
+       y2="1053.5383"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3674">
+      <stop
+         style="stop-color:#f9f9ea;stop-opacity:1;"
+         offset="0"
+         id="stop3676" />
+      <stop
+         style="stop-color:#fcf10d;stop-opacity:0.99215686;"
+         offset="1"
+         id="stop3678" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.76050982,0,0,0.7476372,7.917339,-753.94313)"
+       y2="1053.5383"
+       x2="19.563829"
+       y1="1020.3622"
+       x1="13.117022"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4270"
+       xlink:href="#linearGradient3674"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="12.46875"
+     inkscape:cx="0.31431278"
+     inkscape:cy="16"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1421"
+     inkscape:window-height="925"
+     inkscape:window-x="1018"
+     inkscape:window-y="98"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <path
+       sodipodi:type="star"
+       style="fill:url(#linearGradient3765);fill-opacity:1;fill-rule:evenodd;stroke:#8a7870;stroke-width:1.26161897;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path2987"
+       sodipodi:sides="5"
+       sodipodi:cx="9"
+       sodipodi:cy="12"
+       sodipodi:r1="15"
+       sodipodi:r2="7.6500001"
+       sodipodi:arg1="0.64350111"
+       sodipodi:arg2="1.2718196"
+       inkscape:flatsided="false"
+       inkscape:rounded="0.04"
+       inkscape:randomized="-0.001"
+       d="M 20.997045,20.992528 C 20.75931,21.308892 11.617197,19.181414 11.238826,19.297493 10.860454,19.413572 4.5202372,26.329466 4.1459842,26.201371 3.7717312,26.073276 2.9704721,16.715905 2.7432329,16.391868 2.5159936,16.067831 -6.016519,12.168242 -6.0107214,11.772479 c 0.0058,-0.395763 8.6627974,-4.0484273 8.8998098,-4.3653101 0.2370125,-0.3168827 1.3050227,-9.6358293 1.6832674,-9.7523143 0.3782446,-0.116485 6.5253462,6.9706314 6.8997352,7.0989866 0.374389,0.1283552 9.578158,-1.722 [...]
+       transform="matrix(0.75937609,0.22389441,-0.22486801,0.75608826,8.7758941,1022.7889)"
+       inkscape:transform-center-x="0.040678202"
+       inkscape:transform-center-y="-1.0909575" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="warning">
+    <path
+       style="fill:url(#linearGradient4270);fill-opacity:1;stroke:#3c3333;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       d="M 8.9999999,30.343094 19.920744,11 31.453428,30.250537 8.9999999,30.343092 z"
+       id="path2822"
+       sodipodi:nodetypes="cccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:18.7939415px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+       x="12.945469"
+       y="36.050858"
+       id="text3604"
+       transform="scale(1.297898,0.77047655)"><tspan
+         sodipodi:role="line"
+         id="tspan3606"
+         x="12.945469"
+         y="36.050858">!</tspan></text>
+  </g>
+</svg>
diff --git a/src/images/bookmark_group.svg b/src/images/bookmark_group.svg
new file mode 100644
index 0000000..b4e96a3
--- /dev/null
+++ b/src/images/bookmark_group.svg
@@ -0,0 +1,380 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="bookmark_group.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective58" />
+    <linearGradient
+       id="linearGradient5637">
+      <stop
+         id="stop5639"
+         offset="0"
+         style="stop-color:#202020;stop-opacity:1" />
+      <stop
+         id="stop5641"
+         offset="1"
+         style="stop-color:#b5b5b5;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5617">
+      <stop
+         style="stop-color:#ededed;stop-opacity:1;"
+         offset="0"
+         id="stop5619" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop5621" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5513">
+      <stop
+         style="stop-color:#202020;stop-opacity:1"
+         offset="0"
+         id="stop5515" />
+      <stop
+         style="stop-color:#828282;stop-opacity:1;"
+         offset="1"
+         id="stop5517" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5489">
+      <stop
+         id="stop5491"
+         offset="0"
+         style="stop-color:#e9e9e9;stop-opacity:1;" />
+      <stop
+         id="stop5493"
+         offset="1"
+         style="stop-color:#fbfbfb;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5465">
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="0"
+         id="stop5467" />
+      <stop
+         style="stop-color:#fbfbfb;stop-opacity:1;"
+         offset="1"
+         id="stop5469" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3757-1">
+      <stop
+         style="stop-color:#fdfb72;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4" />
+      <stop
+         style="stop-color:#ffb41b;stop-opacity:1;"
+         offset="1"
+         id="stop3761-6" />
+    </linearGradient>
+    <linearGradient
+       y2="23.49078"
+       x2="7.2979932"
+       y1="7.6554561"
+       x1="9.0300617"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5438"
+       xlink:href="#linearGradient3757-1"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5465"
+       id="linearGradient5471"
+       x1="7"
+       y1="1031.3622"
+       x2="7"
+       y2="1043.3622"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.80001395,0.889725,202.65806)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5465"
+       id="linearGradient5479"
+       x1="19"
+       y1="1030.3622"
+       x2="19"
+       y2="1043.3622"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.84615383,0,0,0.61538399,4.8461543,395.2939)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5513"
+       id="linearGradient5519"
+       x1="1"
+       y1="12"
+       x2="1"
+       y2="32"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.82352941,0.889725,1018.6564)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5513"
+       id="linearGradient5541"
+       x1="25"
+       y1="9"
+       x2="25"
+       y2="24"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.61538457,1,1023.2083)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5513"
+       id="linearGradient5549"
+       x1="12"
+       y1="9"
+       x2="12"
+       y2="25"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.61836705,1,1023.1785)" />
+    <linearGradient
+       id="linearGradient5465-8">
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="0"
+         id="stop5467-3" />
+      <stop
+         style="stop-color:#fbfbfb;stop-opacity:1;"
+         offset="1"
+         id="stop5469-2" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5637"
+       id="linearGradient5635"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.82352941,13.889725,1018.6564)"
+       x1="1"
+       y1="12"
+       x2="1"
+       y2="32" />
+    <linearGradient
+       id="linearGradient5617-8">
+      <stop
+         style="stop-color:#dddddd;stop-opacity:1;"
+         offset="0"
+         id="stop5619-4" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop5621-7" />
+    </linearGradient>
+    <linearGradient
+       y2="1052.3622"
+       x2="13"
+       y1="1045.3622"
+       x1="13"
+       gradientTransform="matrix(0.96666667,0,0,1.3999842,1.033333,-1446.8907)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5662"
+       xlink:href="#linearGradient5617-8"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5489"
+       id="linearGradient5687"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.84615383,0,0,0.61538399,20.846154,401.29388)"
+       x1="19"
+       y1="1030.3622"
+       x2="19"
+       y2="1043.3622" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5465"
+       id="linearGradient5695"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.23076923,0,0,0.61538399,25.230769,395.29392)"
+       x1="19"
+       y1="1030.3622"
+       x2="19"
+       y2="1043.3622" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5513"
+       id="linearGradient5697"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.61538457,14,1028.2083)"
+       x1="25"
+       y1="9"
+       x2="25"
+       y2="24" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5637"
+       id="linearGradient5699"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.27272727,0,0,0.82352941,27.697197,1018.6564)"
+       x1="1"
+       y1="12"
+       x2="1"
+       y2="32" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="17.633475"
+     inkscape:cx="26.065502"
+     inkscape:cy="13.959979"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:window-width="1421"
+     inkscape:window-height="925"
+     inkscape:window-x="403"
+     inkscape:window-y="67"
+     inkscape:window-maximized="0"
+     objecttolerance="1"
+     guidetolerance="1"
+     inkscape:snap-from-guide="false"
+     inkscape:snap-global="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="star 2"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="rect">
+    <rect
+       style="fill:url(#linearGradient5662);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       id="rect5461"
+       width="29"
+       height="6.9999661"
+       x="2"
+       y="18.000034" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="line"
+     style="display:inline">
+    <path
+       style="fill:#6d6d6d;fill-opacity:1;stroke:#818181;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="m 2,18.000085 3.2623588,0 25.7376412,0"
+       id="path5511"
+       sodipodi:nodetypes="ccc" />
+  </g>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)"
+     style="display:inline">
+    <rect
+       style="fill:url(#linearGradient5471);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect4909"
+       width="11"
+       height="8.0001659"
+       x="1.8897252"
+       y="1029.3622" />
+    <rect
+       y="1029.3622"
+       x="15"
+       height="7.9999933"
+       width="11"
+       id="rect5459"
+       style="fill:url(#linearGradient5479);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       ry="1.2642015e-05" />
+    <path
+       style="fill:none;stroke:url(#linearGradient5519);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 13,1029.3622 -11,0 0,18"
+       id="path5495"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:url(#linearGradient5541);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 26,1029.3622 0,9"
+       id="path5501"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:url(#linearGradient5549);stroke-width:0.99999982px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       d="m 13,1038.3622 0,-9"
+       id="path5503"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="ccc"
+       id="path5633"
+       d="m 26,1029.3622 -11,0 0,9"
+       style="fill:none;stroke:url(#linearGradient5635);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       ry="1.2642015e-05"
+       style="fill:url(#linearGradient5695);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect5689"
+       width="3"
+       height="7.9999933"
+       x="28"
+       y="1029.3622" />
+    <path
+       style="fill:none;stroke:url(#linearGradient5699);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 31,1029.3622 -3,0 0,9"
+       id="path5693"
+       sodipodi:nodetypes="ccc" />
+  </g>
+</svg>
diff --git a/src/images/cancel.svg b/src/images/cancel.svg
new file mode 100644
index 0000000..a48d2f7
--- /dev/null
+++ b/src/images/cancel.svg
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="exit.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient4000">
+      <stop
+         style="stop-color:#da0a0a;stop-opacity:1;"
+         offset="0"
+         id="stop4002" />
+      <stop
+         style="stop-color:#f9bdbd;stop-opacity:1;"
+         offset="1"
+         id="stop4004" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4000"
+       id="linearGradient4006"
+       x1="0.76666671"
+       y1="30.486666"
+       x2="33.526669"
+       y2="7.0666671"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.93451327,0,0,0.98521257,1.0298524,0.55304991)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="8.7199422"
+     inkscape:cy="16.554812"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer6"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1599"
+     inkscape:window-height="990"
+     inkscape:window-x="797"
+     inkscape:window-y="87"
+     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 />
+        <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="layer6"
+     inkscape:label="Layer">
+    <rect
+       style="fill:url(#linearGradient4006);fill-opacity:1;fill-rule:evenodd;stroke:#bd1b1b;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3998"
+       width="28.160002"
+       height="28.426666"
+       x="2.0266666"
+       y="1.8666666"
+       ry="1.4187062" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="left">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#fffcfc;stroke-width:3.33834791;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect3809"
+       width="1.4149849"
+       height="17.969641"
+       x="-0.88293612"
+       y="13.929389"
+       ry="0.11241483"
+       transform="matrix(0.69887353,-0.71524526,0.71524526,0.69887353,0,0)" />
+    <rect
+       ry="0.11177491"
+       y="-9.1891193"
+       x="-23.917221"
+       height="17.86735"
+       width="1.4193591"
+       id="rect3811"
+       style="fill:#ffffff;fill-opacity:1;stroke:#fffcfc;stroke-width:3.33397388;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       transform="matrix(-0.71524526,-0.69887353,0.69887353,-0.71524526,0,0)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer8"
+     inkscape:label="screw" />
+</svg>
diff --git a/src/images/create_folder.svg b/src/images/create_folder.svg
new file mode 100644
index 0000000..e1b08a8
--- /dev/null
+++ b/src/images/create_folder.svg
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg2985"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="create_folder.svg"
+   sodipodi:version="0.32"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <title
+     id="title2993">Metview icon</title>
+  <defs
+     id="defs2987">
+    <linearGradient
+       id="linearGradient3753">
+      <stop
+         style="stop-color:#e2c36e;stop-opacity:1;"
+         offset="0"
+         id="stop3755" />
+      <stop
+         style="stop-color:#ffef8a;stop-opacity:0.34210527;"
+         offset="1"
+         id="stop3757" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3753"
+       id="linearGradient3759"
+       x1="20.381924"
+       y1="25.776665"
+       x2="36.550461"
+       y2="-0.56834435"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0942429,0,0,1.0732344,-1.9950829,-1.8776448)" />
+    <linearGradient
+       id="linearGradient3845">
+      <stop
+         style="stop-color:#289028;stop-opacity:1;"
+         offset="0"
+         id="stop3847" />
+      <stop
+         style="stop-color:#83c56d;stop-opacity:1;"
+         offset="1"
+         id="stop3849" />
+    </linearGradient>
+    <linearGradient
+       y2="19.5"
+       x2="38.5"
+       y1="19.5"
+       x1="7.5"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3945"
+       xlink:href="#linearGradient3845"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="10.27"
+     inkscape:cx="2.0027401"
+     inkscape:cy="29.889877"
+     inkscape:current-layer="layer6"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1179"
+     inkscape:window-x="1916"
+     inkscape:window-y="-4"
+     inkscape:window-maximized="1"
+     inkscape:snap-from-guide="false"
+     objecttolerance="2"
+     gridtolerance="2"
+     guidetolerance="2">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2995"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:url(#linearGradient3759);fill-opacity:1;stroke:#000000;stroke-width:0.91029769000000005;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="m 15,11 1.581791,-6.9553125 12.469348,3.7367772 2.255924,-3.4100421 9.343738,2.403001 -0.330091,4.3734044 c 7.786256,2.404387 11.284931,2.859172 19.842246,4.961637 L 51.55289,61.721726 7.8648109,40.823438 4.7046001,8.1600399 24.33753,14.182435 l -0.156955,3.272483 11.16368,3.580674 0.959165,-3.353576 13.555361,3.888862 1.763869,39.771774"
+       id="rect2984"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccccc" />
+    <path
+       style="fill:#0056c8;fill-opacity:1;stroke:#0056c8;stroke-width:0.89524412;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="M 31.5222,5.3369036 39.610516,7.4558961 39.486855,11 30,8 31.5222,5.3369036 z"
+       id="rect3761"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="plus">
+    <path
+       transform="matrix(0.96666667,0,0,1,25.896296,-3.5)"
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3945);fill-opacity:1;fill-rule:evenodd;stroke:#228b20;stroke-width:1.01709521;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path2978"
+       sodipodi:cx="23"
+       sodipodi:cy="19.5"
+       sodipodi:rx="15"
+       sodipodi:ry="14.5"
+       d="m 38,19.5 a 15,14.5 0 1 1 -30,0 15,14.5 0 1 1 30,0 z" />
+    <path
+       style="fill:#ececec;fill-opacity:1;stroke:none;display:inline"
+       d="m 46,3.6875 4.62963,0 0,10.3125 10.185185,0 0,4.6875 -10.185185,0 0,10.3125 L 46,29 l 0,-10.3125 -10.185186,0 0,-4.6875 L 46,14 46,3.6875 z"
+       id="path2826"
+       sodipodi:nodetypes="ccccccccccccc" />
+  </g>
+</svg>
diff --git a/src/images/create_macro.svg b/src/images/create_macro.svg
new file mode 100644
index 0000000..635a974
--- /dev/null
+++ b/src/images/create_macro.svg
@@ -0,0 +1,282 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg2160"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="create_macro.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/tmp/cgr/work/icons/metview/macro.png"
+   inkscape:export-xdpi="45"
+   inkscape:export-ydpi="45"
+   version="1.1">
+  <defs
+     id="defs2162">
+    <linearGradient
+       id="linearGradient3845">
+      <stop
+         style="stop-color:#289028;stop-opacity:1;"
+         offset="0"
+         id="stop3847" />
+      <stop
+         style="stop-color:#83c56d;stop-opacity:1;"
+         offset="1"
+         id="stop3849" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3143">
+      <stop
+         style="stop-color:#ec6a4e;stop-opacity:1"
+         offset="0"
+         id="stop3145" />
+      <stop
+         style="stop-color:#f1a394;stop-opacity:1"
+         offset="1"
+         id="stop3147" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3143"
+       id="linearGradient3152"
+       x1="12.037533"
+       y1="15.457104"
+       x2="50.160858"
+       y2="45.912868"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0026322,0,0,0.7350282,-8.4226285e-2,8.0357927)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3845"
+       id="linearGradient3851"
+       x1="7.5"
+       y1="19.5"
+       x2="38.5"
+       y2="19.5"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.65625"
+     inkscape:cx="23.576646"
+     inkscape:cy="38.704708"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1485"
+     inkscape:window-height="1062"
+     inkscape:window-x="518"
+     inkscape:window-y="49"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2831" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="bg">
+    <path
+       style="fill:url(#linearGradient3152);fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:0.94039041px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 2.4701952,49.529805 L 61.529803,49.529805 L 61.529803,12.470196 L 18.674981,12.619931 L 2.4701952,24.598794 L 2.4701952,49.529805 z "
+       id="path2169"
+       sodipodi:nodetypes="cccccc" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="holes"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3151"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,6.5395477,15.213011)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3156"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,6.5395477,23.773008)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3158"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,25.486737,23.773008)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3160"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,6.5395477,32.333006)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3162"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
+       transform="matrix(0.4377048,0,0,0.3789124,35.456161,17.213011)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3164"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
+       transform="matrix(0.4377048,0,0,0.3789124,44.431144,17.213011)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3166"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,25.486737,32.333006)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3168"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
+       transform="matrix(0.4377048,0,0,0.3789124,24.486737,9.9427495)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3170"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,16.054581,23.773008)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3172"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
+       transform="matrix(0.4377048,0,0,0.3789124,24.486737,17.213011)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3174"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,36.456161,32.333006)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3176"
+       sodipodi:cx="17.818182"
+       sodipodi:cy="29.454546"
+       sodipodi:rx="3.2727273"
+       sodipodi:ry="3.090909"
+       d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1  14.545455,29.454546 A 3.2727273 3.090909 0 1 1  21.090909 29.454546 z"
+       transform="matrix(0.4377048,0,0,0.3789124,45.431144,23.773008)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="circle">
+    <path
+       transform="matrix(0.96666667,0,0,1,25.266667,-3.5)"
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3851);fill-opacity:1;fill-rule:evenodd;stroke:#228b20;stroke-width:1.01709521;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path2978"
+       sodipodi:cx="23"
+       sodipodi:cy="19.5"
+       sodipodi:rx="15"
+       sodipodi:ry="14.5"
+       d="m 38,19.5 a 15,14.5 0 1 1 -30,0 15,14.5 0 1 1 30,0 z" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="plus">
+    <path
+       style="fill:#ececec;fill-opacity:1;stroke:none;display:inline"
+       d="M 45.37037,3.6875 50,3.6875 50,14 l 10.185185,0 0,4.6875 L 50,18.6875 50,29 l -4.62963,0 0,-10.3125 -10.185185,0 0,-4.6875 10.185185,0 0,-10.3125 z"
+       id="path2826"
+       sodipodi:nodetypes="ccccccccccccc" />
+  </g>
+</svg>
diff --git a/src/images/cursor_bdiag.svg b/src/images/cursor_bdiag.svg
new file mode 100644
index 0000000..165305a
--- /dev/null
+++ b/src/images/cursor_bdiag.svg
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="12"
+   height="12"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="cursor_bdiag.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#e6e6e6;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient3935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9202257,0,0,2.5990709,-3.6450585,-45.649231)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3685-4-4">
+      <stop
+         id="stop3687-6-7"
+         offset="0"
+         style="stop-color:#c78e5b;stop-opacity:1;" />
+      <stop
+         id="stop3689-9-3"
+         offset="1"
+         style="stop-color:#cf7d3e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3675-2-5">
+      <stop
+         id="stop3677-2-6"
+         offset="0"
+         style="stop-color:#e6bc10;stop-opacity:1;" />
+      <stop
+         id="stop3679-4-1"
+         offset="1"
+         style="stop-color:#dbe683;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="15.711069"
+       x2="24.332083"
+       y1="3.2495306"
+       x1="8.3320827"
+       gradientTransform="matrix(1.0001759,0,0,1.0001946,0.997537,-0.4039633)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3879"
+       xlink:href="#linearGradient3665-7-6"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3665-7-6">
+      <stop
+         id="stop3667-7-5"
+         offset="0"
+         style="stop-color:#b7b7b7;stop-opacity:1;" />
+      <stop
+         id="stop3669-5-1"
+         offset="1"
+         style="stop-color:#f1f1f1;stop-opacity:0.99215686;" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-0.66675033,-27.802407)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4468-2"
+       xlink:href="#linearGradient3851-1-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1-7">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7-6" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4-1" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="69.75"
+     inkscape:cx="8.2468621"
+     inkscape:cy="6.415046"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:snap-to-guides="true"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2816"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="8.3010753,9.390681"
+       id="guide6044" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="3.5555556,10.824373"
+       id="guide6046" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="-0.20071685,5.9784946"
+       id="guide6048" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0.3297491,7.7849462"
+       id="guide6050" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="1.6774194,4.0143369"
+       id="guide6054" />
+  </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="layer4"
+     inkscape:label="page"
+     style="display:inline"
+     transform="translate(0,-20)">
+    <path
+       style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 9.7969308,29.880783 0.6557182,-4.958112 -1.5305302,1.53536 -3.3608722,-3.350298 1.5811407,-1.586131 -5.1076751,0.621384 -0.54861,5.052753 1.4131253,-1.417585 3.3608722,3.350298 -1.4232452,1.427737 z"
+       id="path6042"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccc" />
+  </g>
+</svg>
diff --git a/src/images/cursor_bdiag_hover.svg b/src/images/cursor_bdiag_hover.svg
new file mode 100644
index 0000000..89bb6a6
--- /dev/null
+++ b/src/images/cursor_bdiag_hover.svg
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="12"
+   height="12"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="cursor_bdiag_hover.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#e6e6e6;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient3935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9202257,0,0,2.5990709,-3.6450585,-45.649231)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3685-4-4">
+      <stop
+         id="stop3687-6-7"
+         offset="0"
+         style="stop-color:#c78e5b;stop-opacity:1;" />
+      <stop
+         id="stop3689-9-3"
+         offset="1"
+         style="stop-color:#cf7d3e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3675-2-5">
+      <stop
+         id="stop3677-2-6"
+         offset="0"
+         style="stop-color:#e6bc10;stop-opacity:1;" />
+      <stop
+         id="stop3679-4-1"
+         offset="1"
+         style="stop-color:#dbe683;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="15.711069"
+       x2="24.332083"
+       y1="3.2495306"
+       x1="8.3320827"
+       gradientTransform="matrix(1.0001759,0,0,1.0001946,0.997537,-0.4039633)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3879"
+       xlink:href="#linearGradient3665-7-6"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3665-7-6">
+      <stop
+         id="stop3667-7-5"
+         offset="0"
+         style="stop-color:#b7b7b7;stop-opacity:1;" />
+      <stop
+         id="stop3669-5-1"
+         offset="1"
+         style="stop-color:#f1f1f1;stop-opacity:0.99215686;" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-0.66675033,-27.802407)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4468-2"
+       xlink:href="#linearGradient3851-1-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1-7">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7-6" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4-1" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="69.75"
+     inkscape:cx="5.9672922"
+     inkscape:cy="6.1383487"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:snap-to-guides="true"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2816"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="8.3010753,9.390681"
+       id="guide6044" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="3.5555556,10.824373"
+       id="guide6046" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="-0.20071685,5.9784946"
+       id="guide6048" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0.3297491,7.7849462"
+       id="guide6050" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="1.6774194,4.0143369"
+       id="guide6054" />
+  </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="layer4"
+     inkscape:label="page"
+     style="display:inline"
+     transform="translate(0,-20)">
+    <path
+       style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 9.6908873,29.986819 10.484573,25.048914 8.9118348,26.54101 5.6456685,23.098319 7.2704128,21.556884 2.1474,22.035634 1.4581423,27.071129 2.9102381,25.69349 6.1764044,29.136181 4.71391,30.523685 z"
+       id="path6042"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccc" />
+    <path
+       style="fill:#00ff00;fill-opacity:1;stroke:none"
+       d="M 9.9638614,27.644155 9.59077,29.875552 7.1396228,30.145718 1.9492801,24.674857 2.2887673,22.178903 4.5761675,21.965276 z"
+       id="path6091"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccc" />
+  </g>
+</svg>
diff --git a/src/images/cursor_fdiag.svg b/src/images/cursor_fdiag.svg
new file mode 100644
index 0000000..1cc1c8e
--- /dev/null
+++ b/src/images/cursor_fdiag.svg
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="12"
+   height="12"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="cursor_fdiag.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#e6e6e6;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient3935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9202257,0,0,2.5990709,-3.6450585,-45.649231)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3685-4-4">
+      <stop
+         id="stop3687-6-7"
+         offset="0"
+         style="stop-color:#c78e5b;stop-opacity:1;" />
+      <stop
+         id="stop3689-9-3"
+         offset="1"
+         style="stop-color:#cf7d3e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3675-2-5">
+      <stop
+         id="stop3677-2-6"
+         offset="0"
+         style="stop-color:#e6bc10;stop-opacity:1;" />
+      <stop
+         id="stop3679-4-1"
+         offset="1"
+         style="stop-color:#dbe683;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="15.711069"
+       x2="24.332083"
+       y1="3.2495306"
+       x1="8.3320827"
+       gradientTransform="matrix(1.0001759,0,0,1.0001946,0.997537,-0.4039633)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3879"
+       xlink:href="#linearGradient3665-7-6"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3665-7-6">
+      <stop
+         id="stop3667-7-5"
+         offset="0"
+         style="stop-color:#b7b7b7;stop-opacity:1;" />
+      <stop
+         id="stop3669-5-1"
+         offset="1"
+         style="stop-color:#f1f1f1;stop-opacity:0.99215686;" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-0.66675033,-27.802407)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4468-2"
+       xlink:href="#linearGradient3851-1-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1-7">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7-6" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4-1" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="69.75"
+     inkscape:cx="8.2468621"
+     inkscape:cy="6.415046"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:snap-to-guides="true"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2816"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="8.3010753,9.390681"
+       id="guide6044" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="3.5555556,10.824373"
+       id="guide6046" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="-0.20071685,5.9784946"
+       id="guide6048" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0.3297491,7.7849462"
+       id="guide6050" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="1.6774194,4.0143369"
+       id="guide6054" />
+  </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="layer4"
+     inkscape:label="page"
+     style="display:inline"
+     transform="translate(0,-20)">
+    <path
+       style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 2.1418204,29.880783 -0.6557182,-4.958112 1.5305302,1.53536 3.3608722,-3.350298 -1.5811407,-1.586131 5.1076751,0.621384 0.54861,5.052753 -1.4131253,-1.417585 -3.3608722,3.350298 1.4232452,1.427737 z"
+       id="path6042"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccc" />
+  </g>
+</svg>
diff --git a/src/images/cursor_fdiag_hover.svg b/src/images/cursor_fdiag_hover.svg
new file mode 100644
index 0000000..6ffea65
--- /dev/null
+++ b/src/images/cursor_fdiag_hover.svg
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="12"
+   height="12"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="cursor_fdiag_hover.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#e6e6e6;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient3935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9202257,0,0,2.5990709,-3.6450585,-45.649231)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3685-4-4">
+      <stop
+         id="stop3687-6-7"
+         offset="0"
+         style="stop-color:#c78e5b;stop-opacity:1;" />
+      <stop
+         id="stop3689-9-3"
+         offset="1"
+         style="stop-color:#cf7d3e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3675-2-5">
+      <stop
+         id="stop3677-2-6"
+         offset="0"
+         style="stop-color:#e6bc10;stop-opacity:1;" />
+      <stop
+         id="stop3679-4-1"
+         offset="1"
+         style="stop-color:#dbe683;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="15.711069"
+       x2="24.332083"
+       y1="3.2495306"
+       x1="8.3320827"
+       gradientTransform="matrix(1.0001759,0,0,1.0001946,0.997537,-0.4039633)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3879"
+       xlink:href="#linearGradient3665-7-6"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3665-7-6">
+      <stop
+         id="stop3667-7-5"
+         offset="0"
+         style="stop-color:#b7b7b7;stop-opacity:1;" />
+      <stop
+         id="stop3669-5-1"
+         offset="1"
+         style="stop-color:#f1f1f1;stop-opacity:0.99215686;" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-0.66675033,-27.802407)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4468-2"
+       xlink:href="#linearGradient3851-1-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1-7">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7-6" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4-1" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="69.75"
+     inkscape:cx="5.9672922"
+     inkscape:cy="6.1383487"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:snap-to-guides="true"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2816"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="8.3010753,9.390681"
+       id="guide6044" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="3.5555556,10.824373"
+       id="guide6046" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="-0.20071685,5.9784946"
+       id="guide6048" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0.3297491,7.7849462"
+       id="guide6050" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="1.6774194,4.0143369"
+       id="guide6054" />
+  </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="layer4"
+     inkscape:label="page"
+     style="display:inline"
+     transform="translate(0,-20)">
+    <path
+       style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 2.251828,29.986819 1.4581423,25.048914 3.0308805,26.54101 6.2970468,23.098319 4.6723025,21.556884 9.7953153,22.035634 10.484573,27.071129 9.0324772,25.69349 5.7663109,29.136181 7.2288053,30.523685 z"
+       id="path6042"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccc" />
+    <path
+       style="fill:#00ff00;fill-opacity:1;stroke:none"
+       d="M 1.9788539,27.644155 2.3519453,29.875552 4.8030925,30.145718 9.9934352,24.674857 9.653948,22.178903 7.3665478,21.965276 z"
+       id="path6091"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccc" />
+  </g>
+</svg>
diff --git a/src/images/cursor_horiz.svg b/src/images/cursor_horiz.svg
new file mode 100644
index 0000000..b9a8be3
--- /dev/null
+++ b/src/images/cursor_horiz.svg
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="12"
+   height="12"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="handler_rightmid.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#e6e6e6;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient3935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9202257,0,0,2.5990709,-3.6450585,-45.649231)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3685-4-4">
+      <stop
+         id="stop3687-6-7"
+         offset="0"
+         style="stop-color:#c78e5b;stop-opacity:1;" />
+      <stop
+         id="stop3689-9-3"
+         offset="1"
+         style="stop-color:#cf7d3e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3675-2-5">
+      <stop
+         id="stop3677-2-6"
+         offset="0"
+         style="stop-color:#e6bc10;stop-opacity:1;" />
+      <stop
+         id="stop3679-4-1"
+         offset="1"
+         style="stop-color:#dbe683;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="15.711069"
+       x2="24.332083"
+       y1="3.2495306"
+       x1="8.3320827"
+       gradientTransform="matrix(1.0001759,0,0,1.0001946,0.997537,-0.4039633)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3879"
+       xlink:href="#linearGradient3665-7-6"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3665-7-6">
+      <stop
+         id="stop3667-7-5"
+         offset="0"
+         style="stop-color:#b7b7b7;stop-opacity:1;" />
+      <stop
+         id="stop3669-5-1"
+         offset="1"
+         style="stop-color:#f1f1f1;stop-opacity:0.99215686;" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-0.66675033,-27.802407)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4468-2"
+       xlink:href="#linearGradient3851-1-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1-7">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7-6" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4-1" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="69.75"
+     inkscape:cx="8.2468621"
+     inkscape:cy="6.1844649"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:snap-to-guides="true"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2816"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="8.3010753,9.390681"
+       id="guide6044" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="3.5555556,10.824373"
+       id="guide6046" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="-0.20071685,5.9784946"
+       id="guide6048" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0.3297491,7.7849462"
+       id="guide6050" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="1.6774194,4.0143369"
+       id="guide6054" />
+  </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="layer4"
+     inkscape:label="page"
+     style="display:inline"
+     transform="translate(0,-20)">
+    <path
+       style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 0.51956131,26.021505 3.03599429,-3.974366 0,2.167915 4.7455197,0 0,-2.239602 3.1786667,4.046053 -3.1786667,3.965775 0,-2.001617 -4.7455197,0 0,2.015951 z"
+       id="path6042"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccc" />
+  </g>
+</svg>
diff --git a/src/images/cursor_horiz_hover.svg b/src/images/cursor_horiz_hover.svg
new file mode 100644
index 0000000..158b0d5
--- /dev/null
+++ b/src/images/cursor_horiz_hover.svg
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="12"
+   height="12"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="cursor_horiz_hover.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#e6e6e6;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient3935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9202257,0,0,2.5990709,-3.6450585,-45.649231)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3685-4-4">
+      <stop
+         id="stop3687-6-7"
+         offset="0"
+         style="stop-color:#c78e5b;stop-opacity:1;" />
+      <stop
+         id="stop3689-9-3"
+         offset="1"
+         style="stop-color:#cf7d3e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3675-2-5">
+      <stop
+         id="stop3677-2-6"
+         offset="0"
+         style="stop-color:#e6bc10;stop-opacity:1;" />
+      <stop
+         id="stop3679-4-1"
+         offset="1"
+         style="stop-color:#dbe683;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="15.711069"
+       x2="24.332083"
+       y1="3.2495306"
+       x1="8.3320827"
+       gradientTransform="matrix(1.0001759,0,0,1.0001946,0.997537,-0.4039633)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3879"
+       xlink:href="#linearGradient3665-7-6"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3665-7-6">
+      <stop
+         id="stop3667-7-5"
+         offset="0"
+         style="stop-color:#b7b7b7;stop-opacity:1;" />
+      <stop
+         id="stop3669-5-1"
+         offset="1"
+         style="stop-color:#f1f1f1;stop-opacity:0.99215686;" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-0.66675033,-27.802407)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4468-2"
+       xlink:href="#linearGradient3851-1-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1-7">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7-6" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4-1" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="69.75"
+     inkscape:cx="5.9672922"
+     inkscape:cy="6.1844649"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:snap-to-guides="true"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2816"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="8.3010753,9.390681"
+       id="guide6044" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="3.5555556,10.824373"
+       id="guide6046" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="-0.20071685,5.9784946"
+       id="guide6048" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0.3297491,7.7849462"
+       id="guide6050" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="1.6774194,4.0143369"
+       id="guide6054" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer4"
+     inkscape:label="page"
+     style="display:inline"
+     transform="translate(0,-20)">
+    <path
+       style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 0.51956131,26.021505 3.03599429,-3.974366 0,2.167915 4.7455197,0 0,-2.239602 3.1786667,4.046053 -3.1786667,3.965775 0,-2.001617 -4.7455197,0 0,2.015951 z"
+       id="path6042"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccc" />
+    <path
+       style="fill:#00ff00;fill-opacity:1;stroke:none"
+       d="m 2.0788531,4.2150538 -1.36200724,1.8064516 1.49103944,1.9641577 7.5412187,0 L 11.326165,6.0215054 9.90681,4.2150538 z"
+       id="path6091"
+       inkscape:connector-curvature="0"
+       transform="translate(0,20)"
+       sodipodi:nodetypes="ccccccc" />
+  </g>
+</svg>
diff --git a/src/images/cursor_vert.svg b/src/images/cursor_vert.svg
new file mode 100644
index 0000000..cf52a47
--- /dev/null
+++ b/src/images/cursor_vert.svg
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="12"
+   height="12"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="cursor_vert.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#e6e6e6;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient3935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9202257,0,0,2.5990709,-3.6450585,-45.649231)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3685-4-4">
+      <stop
+         id="stop3687-6-7"
+         offset="0"
+         style="stop-color:#c78e5b;stop-opacity:1;" />
+      <stop
+         id="stop3689-9-3"
+         offset="1"
+         style="stop-color:#cf7d3e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3675-2-5">
+      <stop
+         id="stop3677-2-6"
+         offset="0"
+         style="stop-color:#e6bc10;stop-opacity:1;" />
+      <stop
+         id="stop3679-4-1"
+         offset="1"
+         style="stop-color:#dbe683;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="15.711069"
+       x2="24.332083"
+       y1="3.2495306"
+       x1="8.3320827"
+       gradientTransform="matrix(1.0001759,0,0,1.0001946,0.997537,-0.4039633)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3879"
+       xlink:href="#linearGradient3665-7-6"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3665-7-6">
+      <stop
+         id="stop3667-7-5"
+         offset="0"
+         style="stop-color:#b7b7b7;stop-opacity:1;" />
+      <stop
+         id="stop3669-5-1"
+         offset="1"
+         style="stop-color:#f1f1f1;stop-opacity:0.99215686;" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-0.66675033,-27.802407)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4468-2"
+       xlink:href="#linearGradient3851-1-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1-7">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7-6" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4-1" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="69.75"
+     inkscape:cx="8.2468621"
+     inkscape:cy="6.9223244"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:snap-to-guides="true"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2816"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="8.3010753,9.390681"
+       id="guide6044" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="3.5555556,10.824373"
+       id="guide6046" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="-0.20071685,5.9784946"
+       id="guide6048" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0.3297491,7.7849462"
+       id="guide6050" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="1.6774194,4.0143369"
+       id="guide6054" />
+  </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="layer4"
+     inkscape:label="page"
+     style="display:inline"
+     transform="translate(0,-20)">
+    <path
+       style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 6.0326237,31.468623 -3.974366,-3.035994 2.167915,0 0,-4.74552 -2.239602,0 4.046053,-3.178666 3.965775,3.178666 -2.001617,0 0,4.74552 2.0159513,0 z"
+       id="path6042"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccc" />
+  </g>
+</svg>
diff --git a/src/images/cursor_vert_hover.svg b/src/images/cursor_vert_hover.svg
new file mode 100644
index 0000000..10f51d7
--- /dev/null
+++ b/src/images/cursor_vert_hover.svg
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="12"
+   height="12"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="cursor_horiz_vert.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#e6e6e6;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient3935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9202257,0,0,2.5990709,-3.6450585,-45.649231)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3685-4-4">
+      <stop
+         id="stop3687-6-7"
+         offset="0"
+         style="stop-color:#c78e5b;stop-opacity:1;" />
+      <stop
+         id="stop3689-9-3"
+         offset="1"
+         style="stop-color:#cf7d3e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3675-2-5">
+      <stop
+         id="stop3677-2-6"
+         offset="0"
+         style="stop-color:#e6bc10;stop-opacity:1;" />
+      <stop
+         id="stop3679-4-1"
+         offset="1"
+         style="stop-color:#dbe683;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="15.711069"
+       x2="24.332083"
+       y1="3.2495306"
+       x1="8.3320827"
+       gradientTransform="matrix(1.0001759,0,0,1.0001946,0.997537,-0.4039633)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3879"
+       xlink:href="#linearGradient3665-7-6"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3665-7-6">
+      <stop
+         id="stop3667-7-5"
+         offset="0"
+         style="stop-color:#b7b7b7;stop-opacity:1;" />
+      <stop
+         id="stop3669-5-1"
+         offset="1"
+         style="stop-color:#f1f1f1;stop-opacity:0.99215686;" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-0.66675033,-27.802407)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4468-2"
+       xlink:href="#linearGradient3851-1-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1-7">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7-6" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4-1" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="69.75"
+     inkscape:cx="5.9672922"
+     inkscape:cy="6.1844649"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:snap-to-guides="true"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2816"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="8.3010753,9.390681"
+       id="guide6044" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="3.5555556,10.824373"
+       id="guide6046" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="-0.20071685,5.9784946"
+       id="guide6048" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="0.3297491,7.7849462"
+       id="guide6050" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="1.6774194,4.0143369"
+       id="guide6054" />
+  </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="layer4"
+     inkscape:label="page"
+     style="display:inline"
+     transform="translate(0,-20)">
+    <path
+       style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 6.0326237,31.468623 -3.974366,-3.035994 2.167915,0 0,-4.74552 -2.239602,0 4.046053,-3.178666 3.965775,3.178666 -2.001617,0 0,4.74552 2.0159513,0 z"
+       id="path6042"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccc" />
+    <path
+       style="fill:#00ff00;fill-opacity:1;stroke:none"
+       d="m 4.2222223,29.956989 1.8064516,1.362007 1.9641577,-1.491039 0,-7.541219 -1.9641577,-1.577061 -1.8064516,1.419355 z"
+       id="path6091"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccc" />
+  </g>
+</svg>
diff --git a/src/images/detailed_view.svg b/src/images/detailed_view.svg
new file mode 100644
index 0000000..24b2390
--- /dev/null
+++ b/src/images/detailed_view.svg
@@ -0,0 +1,371 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.4 r9939"
+   version="1.0"
+   sodipodi:docname="detailed_view.svg"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3648">
+      <stop
+         id="stop3650"
+         offset="0"
+         style="stop-color:#c4c4c4;stop-opacity:1" />
+      <stop
+         id="stop3652"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective45" />
+    <linearGradient
+       id="linearGradient3923">
+      <stop
+         id="stop3925"
+         offset="0"
+         style="stop-color:#7da0a8;stop-opacity:1" />
+      <stop
+         id="stop3927"
+         offset="1"
+         style="stop-color:#d9e4e7;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3715">
+      <stop
+         style="stop-color:#d2d2d2;stop-opacity:1;"
+         offset="0"
+         id="stop3717" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3719" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3665">
+      <stop
+         style="stop-color:#233690;stop-opacity:1;"
+         offset="0"
+         id="stop3667" />
+      <stop
+         style="stop-color:#79c6dd;stop-opacity:1;"
+         offset="1"
+         id="stop3669" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5774">
+      <stop
+         id="stop5776"
+         offset="0"
+         style="stop-color:#a8abab;stop-opacity:1;" />
+      <stop
+         id="stop5778"
+         offset="1"
+         style="stop-color:#e2e9eb;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5774"
+       id="linearGradient2886"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.80897999,0,0,0.59391541,-26.080126,-1.0973868)"
+       x1="32.000004"
+       y1="3.5336473"
+       x2="-1.0000013"
+       y2="7.6579084" />
+    <linearGradient
+       id="linearGradient3665-6">
+      <stop
+         style="stop-color:#5e6ba6;stop-opacity:1;"
+         offset="0"
+         id="stop3667-9" />
+      <stop
+         style="stop-color:#d9e4e7;stop-opacity:1;"
+         offset="1"
+         id="stop3669-2" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3648"
+       id="linearGradient3721"
+       x1="-0.31546342"
+       y1="2.5266564"
+       x2="23.518356"
+       y2="21.141323"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.032834,0,0,1.0916659,-0.29039613,-0.12398887)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3665"
+       id="linearGradient3733"
+       gradientUnits="userSpaceOnUse"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11"
+       gradientTransform="translate(1.8418579e-7,10)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3665"
+       id="linearGradient3761"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(9.9999975,1)"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3665"
+       id="linearGradient3765"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(9.9999981,10)"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3665"
+       id="linearGradient3769"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(19.000002,1)"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3665-6"
+       id="linearGradient3794"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(1.9999997,10)"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3665-6"
+       id="linearGradient3798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(15.000001,1)"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3665-6"
+       id="linearGradient3802"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(15.000002,10)"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3715"
+       id="linearGradient3646"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0085347,0,0,-0.92400198,26.222385,24.816007)"
+       x1="13"
+       y1="8.5197887"
+       x2="23.518356"
+       y2="21.141323" />
+    <inkscape:perspective
+       id="perspective3666"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3923-6"
+       id="linearGradient3931-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(16.000001,10.999998)"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11" />
+    <linearGradient
+       id="linearGradient3923-6">
+      <stop
+         id="stop3925-9"
+         offset="0"
+         style="stop-color:#7da0a8;stop-opacity:1" />
+      <stop
+         id="stop3927-2"
+         offset="1"
+         style="stop-color:#d9e4e7;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3715"
+       id="linearGradient3799"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.2466743,0,0,-1.1316794,31.175847,31.167266)"
+       x1="13"
+       y1="8.5197887"
+       x2="23.518356"
+       y2="21.141323" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5774"
+       id="linearGradient3803"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.99999982,0,0,0.72740301,-30.999997,-0.57038572)"
+       x1="32.000004"
+       y1="3.5336473"
+       x2="-1.0000013"
+       y2="7.6579084" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3648"
+       id="linearGradient3806"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2767112,0,0,1.3370272,-1.5972457,0.62179177)"
+       x1="-0.31546342"
+       y1="2.5266564"
+       x2="23.518356"
+       y2="21.141323" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#efefef"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="17.011593"
+     inkscape:cx="9.7754732"
+     inkscape:cy="14.237351"
+     inkscape:document-units="px"
+     inkscape:current-layer="g3845"
+     inkscape:showpageshadow="false"
+     showborder="true"
+     borderlayer="top"
+     showgrid="true"
+     inkscape:grid-points="false"
+     inkscape:window-width="1366"
+     inkscape:window-height="706"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="1"
+     inkscape:snap-grids="false">
+    <inkscape:grid
+       id="GridFromPre046Settings"
+       type="xygrid"
+       originx="0px"
+       originy="0px"
+       spacingx="1px"
+       spacingy="1px"
+       color="#9f9f9f"
+       empcolor="#9f9f9f"
+       opacity="0.10196078"
+       empopacity="0.25490196"
+       empspacing="10" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer4"
+     inkscape:label="prof header"
+     style="display:inline">
+    <g
+       id="g3845"
+       transform="translate(1.0000014,1)">
+      <rect
+         style="fill:url(#linearGradient3806);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:0.61783040000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect10509"
+         width="30"
+         height="27.569721"
+         x="-1.3333558e-006"
+         y="2.4302771" />
+      <rect
+         transform="scale(-1,1)"
+         style="fill:url(#linearGradient3803);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:0.63949221;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect10511"
+         width="30"
+         height="5.8429823"
+         x="-29.999998"
+         y="0.15701789" />
+      <path
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccccc"
+         id="rect3637"
+         d="M 0.33716858,6.2974099 0.25383031,29.609904 1.0416654,29.666671 0.99999808,7.0000049 29.624998,7.0416712 l -0.0091,-0.7442568 -29.2786928,0 z"
+         style="fill:url(#linearGradient3799);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+      <g
+         style="display:inline"
+         inkscape:label="add"
+         id="layer7" />
+      <path
+         style="fill:none;stroke:#585c65;stroke-width:0.69999999000000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="M 10.512113,6.0526989 10.470446,30.052699"
+         id="path3779"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3781"
+         d="M 20.419029,6.2634951 20.377359,30.263495"
+         style="fill:none;stroke:#585c65;stroke-width:0.69999999000000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>
diff --git a/src/images/drawer.svg b/src/images/drawer.svg
new file mode 100644
index 0000000..bb1c08c
--- /dev/null
+++ b/src/images/drawer.svg
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="48"
+   height="48"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="drawer.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient2828">
+      <stop
+         id="stop2830"
+         offset="0"
+         style="stop-color:#e6e6e6;stop-opacity:1;" />
+      <stop
+         id="stop2834"
+         offset="1"
+         style="stop-color:#5e9aa7;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3134">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3136" />
+      <stop
+         style="stop-color:#b8c5c8;stop-opacity:1;"
+         offset="1"
+         id="stop3138" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3134"
+       id="linearGradient3157"
+       gradientUnits="userSpaceOnUse"
+       x1="4.2422905"
+       y1="58.145554"
+       x2="38.280991"
+       y2="27.284977"
+       gradientTransform="matrix(0.7010416,0,0,0.6043896,-46.559891,4.7317659)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2828"
+       id="linearGradient2849"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-1.092724,1.0174397,0,-0.8065182,28.792278)"
+       x1="4.7154722"
+       y1="10.295263"
+       x2="-22.359737"
+       y2="34.304337" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2828"
+       id="linearGradient3629"
+       x1="-16.24024"
+       y1="35.806011"
+       x2="1.2411834"
+       y2="21.927578"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-30.190925,0.05498628)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3134"
+       id="linearGradient3645"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.68598001,-0.57554319,0,42.404582,2.2282024)"
+       x1="4.2422905"
+       y1="58.145554"
+       x2="38.280991"
+       y2="27.284977" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.895833"
+     inkscape:cx="24"
+     inkscape:cy="24"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     width="48px"
+     height="48px"
+     showgrid="true"
+     inkscape:window-width="1885"
+     inkscape:window-height="1104"
+     inkscape:window-x="31"
+     inkscape:window-y="31"
+     inkscape:window-maximized="1"
+     inkscape:snap-grids="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3647" />
+  </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="layer2"
+     inkscape:label="l1"
+     style="display:inline">
+    <rect
+       style="fill:url(#linearGradient3157);fill-opacity:1;fill-rule:evenodd;stroke:#24344d;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect2161"
+       width="42.984715"
+       height="36.924061"
+       x="-45.492359"
+       y="5.5682945"
+       transform="matrix(0,-1,1,0,0,0)" />
+    <path
+       style="fill:url(#linearGradient3645);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m 41.583872,6.0546369 -32.410993,0.06375 -0.1255942,25.8046961 -2.6081963,0 0,-28.6521537 35.1447835,0 0,2.7837088 z"
+       id="rect3631"
+       sodipodi:nodetypes="ccccccc" />
+  </g>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline">
+    <rect
+       style="fill:url(#linearGradient3629);fill-opacity:1;fill-rule:evenodd;stroke:#24344d;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3153"
+       width="12.739919"
+       height="36.920658"
+       x="-45.531166"
+       y="5.5946541"
+       transform="matrix(0,-1,1,0,0,0)" />
+    <path
+       style="fill:url(#linearGradient2849);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m 6.4757718,33.59178 35.1016712,0 -0.06291,2.640254 -32.6007532,-0.125819 0.06291,8.578158 -2.500918,-0.06291 0,-11.029683 z"
+       id="rect2839"
+       sodipodi:nodetypes="ccccccc" />
+  </g>
+</svg>
diff --git a/src/images/duplicate.svg b/src/images/duplicate.svg
new file mode 100644
index 0000000..5f200ad
--- /dev/null
+++ b/src/images/duplicate.svg
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="48"
+   height="48"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.2 r9819"
+   version="1.0"
+   sodipodi:docname="duplicate.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient2828">
+      <stop
+         id="stop2830"
+         offset="0"
+         style="stop-color:#e6e6e6;stop-opacity:1;" />
+      <stop
+         id="stop2834"
+         offset="1"
+         style="stop-color:#5e9aa7;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3134">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3136" />
+      <stop
+         style="stop-color:#ededed;stop-opacity:1;"
+         offset="1"
+         id="stop3138" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3134"
+       id="linearGradient3157"
+       gradientUnits="userSpaceOnUse"
+       x1="4.2422905"
+       y1="58.145554"
+       x2="38.280991"
+       y2="27.284977"
+       gradientTransform="matrix(0.49276403,0,0,0.6043896,-45.895596,7.3436429)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2828"
+       id="linearGradient3629"
+       x1="-16.24024"
+       y1="35.806011"
+       x2="1.2411834"
+       y2="21.927578"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-52.264255,3.648755)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3134"
+       id="linearGradient3645"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.67694305,0,0,-0.57657342,14.915915,45.0191)"
+       x1="4.2422905"
+       y1="58.145554"
+       x2="38.280991"
+       y2="27.284977" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3134"
+       id="linearGradient3645-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.54304224,0,0,-0.40662859,2.8728752,29.159527)"
+       x1="4.2422905"
+       y1="58.145554"
+       x2="38.280991"
+       y2="27.284977" />
+    <linearGradient
+       id="linearGradient3134-6">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3136-9" />
+      <stop
+         style="stop-color:#b8c5c8;stop-opacity:1;"
+         offset="1"
+         id="stop3138-2" />
+    </linearGradient>
+    <linearGradient
+       y2="27.284977"
+       x2="38.280991"
+       y1="58.145554"
+       x1="4.2422905"
+       gradientTransform="matrix(0.39529424,0,0,0.42624594,-27.724709,2.7776266)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2854"
+       xlink:href="#linearGradient3134"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.895833"
+     inkscape:cx="13.395779"
+     inkscape:cy="24"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     width="48px"
+     height="48px"
+     showgrid="true"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:snap-grids="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3647" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline">
+    <rect
+       style="fill:url(#linearGradient2854);fill-opacity:1;fill-rule:evenodd;stroke:#0c0c0c;stroke-width:1.79999983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       id="rect2161-4"
+       width="24.237663"
+       height="26.040705"
+       x="-27.122765"
+       y="3.3675885"
+       transform="scale(-1,1)" />
+    <path
+       style="fill:url(#linearGradient3645-4);fill-opacity:1.0;fill-rule:evenodd;stroke:none;display:inline"
+       d="M 5.8286102,28.283713 5.9524614,5.6809052 26.1915,5.5921716 l 0,-1.7169044 -22.4931713,-0.1258196 0.2201571,24.4602754 1.9101244,0.07399 z"
+       id="rect3631-7"
+       sodipodi:nodetypes="ccccccc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l1"
+     style="display:inline">
+    <rect
+       style="fill:url(#linearGradient3157);fill-opacity:1;fill-rule:evenodd;stroke:#000205;stroke-width:1.79999994999999990;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect2161"
+       width="30.214071"
+       height="36.924061"
+       x="-45.145226"
+       y="8.180172"
+       transform="scale(-1,1)" />
+    <path
+       style="fill:url(#linearGradient3645);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m 18.691941,44.196921 0.06291,-32.469009 25.464751,-0.125819 0,-2.6128646 -28.274697,0 0,35.2076926 2.747037,0 z"
+       id="rect3631"
+       sodipodi:nodetypes="ccccccc" />
+  </g>
+</svg>
diff --git a/src/images/edit.svg b/src/images/edit.svg
index 4f9be60..fb86177 100644
--- a/src/images/edit.svg
+++ b/src/images/edit.svg
@@ -14,7 +14,7 @@
    height="32"
    id="svg1455"
    sodipodi:version="0.32"
-   inkscape:version="0.47 r22583"
+   inkscape:version="0.48.2 r9819"
    sodipodi:docname="edit.svg"
    inkscape:export-xdpi="120.00000"
    inkscape:export-ydpi="120.00000"
@@ -27,7 +27,7 @@
       <stop
          id="stop3712-2"
          offset="0"
-         style="stop-color:#cccccc;stop-opacity:1" />
+         style="stop-color:#dcdcdc;stop-opacity:1;" />
       <stop
          id="stop3714-2"
          offset="1"
@@ -125,20 +125,21 @@
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
      inkscape:zoom="26.28125"
-     inkscape:cx="22.500632"
+     inkscape:cx="16.450691"
      inkscape:cy="15.079834"
-     inkscape:current-layer="layer2"
+     inkscape:current-layer="layer8"
      showgrid="true"
      inkscape:document-units="px"
      inkscape:grid-bbox="true"
      inkscape:window-width="1438"
-     inkscape:window-height="1096"
+     inkscape:window-height="1066"
      inkscape:window-x="385"
      inkscape:window-y="10"
      inkscape:window-maximized="0"
      inkscape:snap-smooth-nodes="false"
      inkscape:object-nodes="false"
-     inkscape:snap-grids="false">
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
     <inkscape:grid
        type="xygrid"
        id="grid3734"
@@ -184,7 +185,7 @@
      inkscape:label="paper 2"
      style="display:inline">
     <path
-       style="fill:url(#linearGradient3110);fill-opacity:1;stroke:#717171;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       style="fill:url(#linearGradient3110);fill-opacity:1;stroke:#080808;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
        d="m 5.0386825,2.8339896 0,26.9891684 21.8840475,0 0,-19.277978 -8.044056,0.06932 0.07493,-7.7111895 -13.9149278,-0.06931 z"
        id="path3698-4"
        sodipodi:nodetypes="ccccccc" />
@@ -196,7 +197,7 @@
      transform="translate(0,-16)"
      style="display:inline">
     <path
-       style="fill:none;stroke:#717171;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       style="fill:none;stroke:#050505;stroke-width:0.99999987999999995px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
        d="m 19.119196,18.848334 7.917942,7.552847"
        id="path3783-4"
        sodipodi:nodetypes="cc" />
@@ -215,20 +216,11 @@
          d="M 20.627643,0.76015116 13.43532,18.950953 l -0.001,5.07806 4.010906,-3.362709 7.198968,-18.3772475 c 0,0 -1.194687,-0.8032788 -1.861149,-1.0587055 C 22.096384,0.96718296 20.627643,0.76015116 20.627643,0.76015116 z"
          style="fill:#7d7d7d;fill-opacity:1;stroke:none;display:inline" />
       <path
-         sodipodi:nodetypes="ccccac"
-         id="path3877-7"
-         d="M 24.471152,2.3346905 17.287658,20.620719 15.938556,20.322441 23.189372,1.5289365 c 0,0 0.483607,0.2563827 0.714453,0.402877 0.195836,0.1242772 0.567327,0.402877 0.567327,0.402877 z"
-         style="fill:#7d7d7d;fill-opacity:1;stroke:none;display:inline" />
-      <path
-         sodipodi:nodetypes="cccc"
+         sodipodi:nodetypes="cc"
          id="path3883-2"
-         d="m 13.340389,19.108085 -0.04097,5.072043 4.262629,-3.362811 -4.221661,-1.709232 z"
-         style="fill:#7d7d7d;fill-opacity:1;stroke:none;display:inline" />
-      <path
-         sodipodi:nodetypes="cccc"
-         id="path3887-9"
-         d="m 13.555334,20.697405 6.24e-4,3.109939 2.428517,-2.113485 -2.429141,-0.996454 z"
-         style="fill:#7d7d7d;fill-opacity:1;stroke:none;display:inline" />
+         d="m 13.299419,24.180128 c -6.4627241,13.215063 -3.231362,6.607531 0,0 z"
+         style="fill:#7d7d7d;fill-opacity:1;stroke:none;display:inline"
+         inkscape:connector-curvature="0" />
     </g>
   </g>
   <g
@@ -243,17 +235,19 @@
          sodipodi:nodetypes="cccccac"
          id="path3867"
          d="M 20.627643,0.76015116 13.43532,18.950953 l -0.001,5.07806 4.010906,-3.362709 7.198968,-18.3772475 c 0,0 -1.194687,-0.8032788 -1.861149,-1.0587055 C 22.096384,0.96718296 20.627643,0.76015116 20.627643,0.76015116 z"
-         style="fill:url(#linearGradient3031);fill-opacity:1;stroke:#c6a22a;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+         style="fill:url(#linearGradient3031);fill-opacity:1;stroke:#866e1d;stroke-width:0.40000001000000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
       <path
          sodipodi:nodetypes="ccccac"
          id="path3877"
-         d="M 24.471152,2.3346905 17.287658,20.620719 15.938556,20.322441 23.189372,1.5289365 c 0,0 0.483607,0.2563827 0.714453,0.402877 0.195836,0.1242772 0.567327,0.402877 0.567327,0.402877 z"
-         style="fill:url(#linearGradient3835);fill-opacity:1;stroke:none;display:inline" />
+         d="M 24.471152,2.3346905 17.173508,20.849019 15.938556,20.322441 23.189372,1.5289365 c 0,0 0.483607,0.2563827 0.714453,0.402877 0.195836,0.1242772 0.567327,0.402877 0.567327,0.402877 z"
+         style="fill:url(#linearGradient3835);fill-opacity:1;stroke:none;display:inline"
+         inkscape:connector-curvature="0" />
       <path
          sodipodi:nodetypes="cccc"
          id="path3883"
-         d="m 13.340389,19.108085 -0.04097,5.072043 4.262629,-3.362811 -4.221661,-1.709232 z"
-         style="fill:#c8a656;fill-opacity:1;stroke:none;display:inline" />
+         d="m 13.188189,19.108085 0.07318,5.376443 4.338729,-3.667211 z"
+         style="fill:#c8a656;fill-opacity:1;stroke:none;display:inline"
+         inkscape:connector-curvature="0" />
       <path
          sodipodi:nodetypes="cccc"
          id="path3887"
diff --git a/src/images/embedded.svg b/src/images/embedded.svg
new file mode 100644
index 0000000..f75fbe7
--- /dev/null
+++ b/src/images/embedded.svg
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="embedded.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3608">
+      <stop
+         style="stop-color:#e2780c;stop-opacity:1;"
+         offset="0"
+         id="stop3610" />
+      <stop
+         style="stop-color:#f8942d;stop-opacity:1;"
+         offset="1"
+         id="stop3612" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3600">
+      <stop
+         style="stop-color:#cd631d;stop-opacity:1;"
+         offset="0"
+         id="stop3602" />
+      <stop
+         style="stop-color:#ffb27f;stop-opacity:1;"
+         offset="1"
+         id="stop3604" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective14" />
+    <linearGradient
+       id="linearGradient3759">
+      <stop
+         style="stop-color:#0f1934;stop-opacity:1;"
+         offset="0"
+         id="stop3761" />
+      <stop
+         style="stop-color:#0f1123;stop-opacity:1;"
+         offset="1"
+         id="stop3763" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3600"
+       id="linearGradient3606"
+       x1="18.803423"
+       y1="32.618954"
+       x2="21.075436"
+       y2="3.58284"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3608"
+       id="linearGradient3616"
+       x1="-17.578337"
+       y1="3.473701"
+       x2="-17.578337"
+       y2="31.616526"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.15625"
+     inkscape:cx="-0.52526343"
+     inkscape:cy="13.610401"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false"
+     inkscape:window-width="1885"
+     inkscape:window-height="1144"
+     inkscape:window-x="1916"
+     inkscape:window-y="31"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <path
+       style="fill:#ffffff;fill-opacity:1;stroke:none"
+       d="m -12.956486,1043.667 0.0032,-20.5743 -20.32,0.053 6.924043,6.9976 c 0,0 -2.972593,2.8778 -3.632973,6.177 -0.478694,2.3918 -0.9246,8.6718 7.538261,12.6139 -1.914006,-5.1063 -1.9566,-7.2031 -0.929791,-9.6974 0.828566,-2.0127 3.035543,-2.9301 3.035543,-2.9301 2.661727,2.6493 4.682965,4.7519 7.381263,7.3634 z"
+       id="path3757"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccscsccc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3606);fill-opacity:1;fill-rule:evenodd;stroke:#f9f9f9;stroke-width:1.96768378999999993;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path2820"
+       sodipodi:cx="21.075436"
+       sodipodi:cy="18.785299"
+       sodipodi:rx="14.32882"
+       sodipodi:ry="13.833655"
+       d="m 35.404256,18.785299 a 14.32882,13.833655 0 1 1 -28.6576406,0 14.32882,13.833655 0 1 1 28.6576406,0 z"
+       transform="matrix(0.89693839,0,0,0.93297877,-2.7867861,1018.899)" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Arial Black;-inkscape-font-specification:'Arial Black, Bold'"
+       x="8.9129601"
+       y="1043.635"
+       id="text2822"><tspan
+         sodipodi:role="line"
+         id="tspan2824"
+         x="8.9129601"
+         y="1043.635"
+         style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#ffffff;font-family:Arial Black;-inkscape-font-specification:'Arial Black, Bold'">E</tspan></text>
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:url(#linearGradient3616);stroke-width:1.11313628999999992;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path3598"
+       sodipodi:cx="-17.578337"
+       sodipodi:cy="18.135397"
+       sodipodi:rx="13.49323"
+       sodipodi:ry="12.936171"
+       d="m -4.0851068,18.135397 a 13.49323,12.936171 0 1 1 -26.9864602,0 13.49323,12.936171 0 1 1 26.9864602,0 z"
+       transform="matrix(1.0555475,0,0,1.1010017,34.654384,1016.4193)" />
+  </g>
+</svg>
diff --git a/src/images/error.svg b/src/images/error.svg
new file mode 100644
index 0000000..743c52c
--- /dev/null
+++ b/src/images/error.svg
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="error.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3831">
+      <stop
+         id="stop3833"
+         offset="0"
+         style="stop-color:#f8f4f4;stop-opacity:1;" />
+      <stop
+         id="stop3835"
+         offset="1"
+         style="stop-color:#d40000;stop-opacity:0.30357143;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3819">
+      <stop
+         id="stop3821"
+         offset="0"
+         style="stop-color:#edcdc9;stop-opacity:1;" />
+      <stop
+         id="stop3823"
+         offset="1"
+         style="stop-color:#c91b0b;stop-opacity:0.99215686;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3783">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3785" />
+      <stop
+         style="stop-color:#d40000;stop-opacity:1;"
+         offset="1"
+         id="stop3787" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3674">
+      <stop
+         style="stop-color:#f0c7c1;stop-opacity:1;"
+         offset="0"
+         id="stop3676" />
+      <stop
+         style="stop-color:#de1a08;stop-opacity:0.99215686;"
+         offset="1"
+         id="stop3678" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3783"
+       id="linearGradient3789"
+       x1="-4.8186264"
+       y1="4.2037883"
+       x2="-4.5480547"
+       y2="39.719273"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3674"
+       id="linearGradient3806"
+       x1="-4.7521257"
+       y1="1.3206121"
+       x2="-8.2720757"
+       y2="7.3490696"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3783"
+       id="linearGradient3808"
+       gradientUnits="userSpaceOnUse"
+       x1="-4.0871224"
+       y1="33.62529"
+       x2="-8.2720757"
+       y2="7.3490696" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3783"
+       id="linearGradient3814"
+       gradientUnits="userSpaceOnUse"
+       x1="-4.8186264"
+       y1="4.2037883"
+       x2="-4.5480547"
+       y2="39.719273"
+       gradientTransform="matrix(0.93075485,0,0,0.94458483,20.730415,-1.9099)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3674"
+       id="linearGradient3816"
+       gradientUnits="userSpaceOnUse"
+       x1="-4.7521257"
+       y1="1.3206121"
+       x2="-4.5480547"
+       y2="39.719273"
+       gradientTransform="matrix(0.93075485,0,0,0.94458483,20.730415,-1.9099)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3831"
+       id="linearGradient3829"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.56279655,-0.71788239,0.73596717,0.56540236,5.2720134,1022.061)"
+       x1="-5.2841291"
+       y1="4.1382613"
+       x2="-5.0135574"
+       y2="14.16385" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.15625"
+     inkscape:cx="-1.2721091"
+     inkscape:cy="17.039481"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="Layer" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3808);fill-opacity:1;stroke:url(#linearGradient3806);stroke-opacity:1"
+       id="path3011"
+       sodipodi:cx="-4.9825921"
+       sodipodi:cy="18.816248"
+       sodipodi:rx="15.628627"
+       sodipodi:ry="15.288201"
+       d="m 10.646035,18.816248 a 15.628627,15.288201 0 1 1 -31.257254,0 15.628627,15.288201 0 1 1 31.257254,0 z"
+       transform="matrix(0.73907864,-0.56574495,0.57415129,0.75006053,8.9719977,1019.2936)" />
+    <path
+       style="fill:url(#linearGradient3829);fill-opacity:1;stroke:none"
+       d="m 5.0764601,1027.6409 c -4.85771212,6.1963 -3.7707131,15.0997 2.4434244,19.8738 1.8564653,1.4262 3.9729615,2.2775 6.1389485,2.6693 -3.60634,-3.802 -3.383933,-10.6125 0.764022,-15.9036 3.823852,-4.8775 9.737043,-6.8773 14.253388,-5.1927 -0.88861,-1.5138 -2.083151,-2.8749 -3.564304,-4.0127 -6.214137,-4.7741 -15.1777072,-3.6306 -20.0354789,2.5659 z"
+       id="path3810"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:none"
+       id="rect3013"
+       width="19.682785"
+       height="6.1895556"
+       x="6.7466159"
+       y="1032.9578" />
+  </g>
+</svg>
diff --git a/src/images/examine.svg b/src/images/examine.svg
new file mode 100755
index 0000000..bc67fbc
--- /dev/null
+++ b/src/images/examine.svg
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="examine.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3804">
+      <stop
+         style="stop-color:#93481b;stop-opacity:1;"
+         offset="0"
+         id="stop3806" />
+      <stop
+         style="stop-color:#c17242;stop-opacity:1;"
+         offset="1"
+         id="stop3808" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3796">
+      <stop
+         style="stop-color:#f4f421;stop-opacity:1;"
+         offset="0"
+         id="stop3798" />
+      <stop
+         style="stop-color:#ed8159;stop-opacity:1;"
+         offset="1"
+         id="stop3800" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective35" />
+    <linearGradient
+       id="linearGradient3852">
+      <stop
+         style="stop-color:#467b3c;stop-opacity:1;"
+         offset="0"
+         id="stop3854" />
+      <stop
+         style="stop-color:#3d9f3d;stop-opacity:0.99215686;"
+         offset="1"
+         id="stop3856" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3799">
+      <stop
+         style="stop-color:#aae1be;stop-opacity:1;"
+         offset="0"
+         id="stop3801" />
+      <stop
+         style="stop-color:#4bc82b;stop-opacity:1;"
+         offset="1"
+         id="stop3803" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3777">
+      <stop
+         style="stop-color:#5b7db3;stop-opacity:1;"
+         offset="0"
+         id="stop3779" />
+      <stop
+         style="stop-color:#2589ce;stop-opacity:1;"
+         offset="1"
+         id="stop3781" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3756">
+      <stop
+         id="stop3758"
+         offset="0"
+         style="stop-color:#519aed;stop-opacity:1;" />
+      <stop
+         id="stop3760"
+         offset="1"
+         style="stop-color:#e9dddd;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3728">
+      <stop
+         style="stop-color:#f1f3fb;stop-opacity:1;"
+         offset="0"
+         id="stop3730" />
+      <stop
+         style="stop-color:#273df9;stop-opacity:0;"
+         offset="1"
+         id="stop3732" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3728"
+       id="linearGradient3710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+       x1="15.413333"
+       y1="3.4795053"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3756"
+       id="linearGradient3720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+       x1="24.437176"
+       y1="3.4853487"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3777"
+       id="linearGradient3783"
+       x1="1.4276053"
+       y1="16.374115"
+       x2="28.440671"
+       y2="16.374115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0279887,0,0,1.0323478,7.1553463,-2.2096664)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3799"
+       id="linearGradient3834"
+       x1="-9.2158766"
+       y1="17.617861"
+       x2="36.303471"
+       y2="17.617861"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3852"
+       id="linearGradient3858"
+       x1="4.4050612"
+       y1="16.300755"
+       x2="23.332099"
+       y2="16.521188"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96778437,0,0,0.96778437,1.3383248,1.0794304)" />
+    <inkscape:perspective
+       id="perspective2935"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4026"
+       id="linearGradient4032"
+       x1="16.804222"
+       y1="14.95285"
+       x2="27.970543"
+       y2="14.95285"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.7702794,0,0,1.4225865,-38.983045,1.405527)" />
+    <linearGradient
+       id="linearGradient4026">
+      <stop
+         style="stop-color:#f30e1e;stop-opacity:1;"
+         offset="0"
+         id="stop4028" />
+      <stop
+         style="stop-color:#ba2f39;stop-opacity:1;"
+         offset="1"
+         id="stop4030" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3975">
+      <stop
+         style="stop-color:#565c64;stop-opacity:1;"
+         offset="0"
+         id="stop3977" />
+      <stop
+         style="stop-color:#99a4b4;stop-opacity:1;"
+         offset="1"
+         id="stop3979" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3796"
+       id="linearGradient3802"
+       x1="15.914507"
+       y1="23.599308"
+       x2="30.455095"
+       y2="23.599308"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2121763,-0.04965461,0.04965461,1.2121763,-7.0612789,-5.2490049)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.09375"
+     inkscape:cx="9.9491394"
+     inkscape:cy="16"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1">
+    <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 />
+        <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="layer3"
+     inkscape:label="circle"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3710);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3720);stroke-width:1.03536737;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="m 3.2264279,23.061819 c -2.1124368,6.24846 -1.0562184,3.12423 0,0 z"
+       id="path3695"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:url(#linearGradient3802);fill-opacity:1;stroke:#000000;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 13.780035,16.981945 3.164712,-3.015223 13.655024,12.258011 -1.096124,2.729167 -2.890113,1.527625 z"
+       id="path3794"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="item"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:#ebf2f2;fill-opacity:1;stroke:#000000;stroke-width:1.56218109;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path3849"
+       sodipodi:cx="-18.321243"
+       sodipodi:cy="31.392056"
+       sodipodi:rx="7.599309"
+       sodipodi:ry="7.1848016"
+       d="m -10.721934,31.392056 a 7.599309,7.1848016 0 1 1 -15.198618,0 7.599309,7.1848016 0 1 1 15.198618,0 z"
+       transform="matrix(1.2448556,0,0,1.316674,34.176042,-30.152621)" />
+  </g>
+</svg>
diff --git a/src/images/execute.svg b/src/images/execute.svg
new file mode 100644
index 0000000..048b708
--- /dev/null
+++ b/src/images/execute.svg
@@ -0,0 +1,323 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="execute.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3756">
+      <stop
+         id="stop3758"
+         offset="0"
+         style="stop-color:#519aed;stop-opacity:1;" />
+      <stop
+         id="stop3760"
+         offset="1"
+         style="stop-color:#e9dddd;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3728">
+      <stop
+         style="stop-color:#f1f3fb;stop-opacity:1;"
+         offset="0"
+         id="stop3730" />
+      <stop
+         style="stop-color:#273df9;stop-opacity:0;"
+         offset="1"
+         id="stop3732" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3728"
+       id="linearGradient3710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+       x1="15.413333"
+       y1="3.4795053"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3756"
+       id="linearGradient3720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+       x1="24.437176"
+       y1="3.4853487"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4026"
+       id="linearGradient4032"
+       x1="16.804222"
+       y1="14.95285"
+       x2="27.970543"
+       y2="14.95285"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.7702794,0,0,1.4225865,-24.613442,-6.221416)" />
+    <linearGradient
+       id="linearGradient4026">
+      <stop
+         style="stop-color:#f30e1e;stop-opacity:1;"
+         offset="0"
+         id="stop4028" />
+      <stop
+         style="stop-color:#ba2f39;stop-opacity:1;"
+         offset="1"
+         id="stop4030" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3975"
+       id="linearGradient3981"
+       x1="21.350325"
+       y1="20.322937"
+       x2="23.313965"
+       y2="20.322939"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.8350726,0,0,1.5404984,-24.709291,-6.8580543)" />
+    <linearGradient
+       id="linearGradient3975">
+      <stop
+         style="stop-color:#565c64;stop-opacity:1;"
+         offset="0"
+         id="stop3977" />
+      <stop
+         style="stop-color:#99a4b4;stop-opacity:1;"
+         offset="1"
+         id="stop3979" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3648-8"
+       id="radialGradient3656-4"
+       cx="15.794774"
+       cy="23.04089"
+       fx="15.794774"
+       fy="23.04089"
+       r="1.5355394"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3648-8">
+      <stop
+         style="stop-color:#43e011;stop-opacity:1;"
+         offset="0"
+         id="stop3650-8" />
+      <stop
+         style="stop-color:#8ef06d;stop-opacity:1;"
+         offset="1"
+         id="stop3652-2" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3700-5"
+       id="linearGradient3706-4"
+       x1="22.977591"
+       y1="16.533602"
+       x2="29.822767"
+       y2="16.274597"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0161202,0,0,1.3108053,-5.9402834,-6.6388268)" />
+    <linearGradient
+       id="linearGradient3700-5">
+      <stop
+         style="stop-color:#959191;stop-opacity:1;"
+         offset="0"
+         id="stop3702-5" />
+      <stop
+         style="stop-color:#cfcfcf;stop-opacity:1;"
+         offset="1"
+         id="stop3704-1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3700-5"
+       id="linearGradient3714-7"
+       x1="12.987333"
+       y1="40.467396"
+       x2="29.933771"
+       y2="40.467396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2226534,0,0,1.3108053,-10.521002,-48.584594)" />
+    <linearGradient
+       id="linearGradient3708-1">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710-1" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712-5" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3716-7">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718-6" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720-1" />
+    </linearGradient>
+    <linearGradient
+       y2="51.049667"
+       x2="23.125591"
+       y1="51.049667"
+       x1="12.98733"
+       gradientTransform="matrix(1.2078637,0,0,1.3108053,-10.328923,-48.584594)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2985"
+       xlink:href="#linearGradient3700-5"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="14.619992"
+     inkscape:cx="5.3296793"
+     inkscape:cy="16.702449"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1108"
+     inkscape:window-height="653"
+     inkscape:window-x="229"
+     inkscape:window-y="12"
+     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 />
+        <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="layer3"
+     inkscape:label="circle"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3710);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3720);stroke-width:1.03536737;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="m 3.2264279,23.061819 c -2.1124368,6.24846 -1.0562184,3.12423 0,0 z"
+       id="path3695"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="item"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient2985);fill-opacity:1.0;fill-rule:evenodd;stroke:#000000;display:inline;stroke-opacity:1;stroke-linejoin:round"
+       d="m 5.3580013,5.3817997 c 0,0 3.1512585,1.2709227 5.1791347,1.6806895 2.027877,0.4097656 6.97712,0.6499144 6.97712,0.6499144 l 0.08939,23.5689504 c 0,0 -4.993467,-0.336568 -7.43148,-0.899088 C 8.5250404,30.002227 5.3580069,28.720499 5.3580069,28.720499 l 0,-23.3386993 z"
+       id="rect2870-42"
+       sodipodi:nodetypes="czccacc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient3714-7);fill-opacity:1.0;fill-rule:evenodd;stroke:#000000;display:inline;stroke-opacity:1;stroke-linejoin:round"
+       d="m 16.803557,1.113708 9.274068,1.6515895 -8.595477,5.0415534 c 0,0 -4.915906,-0.3428332 -6.940184,-0.7637144 C 8.5176866,6.6222553 5.3580052,5.4400007 5.3580052,5.4400007 L 16.803557,1.113708 z"
+       id="rect2870-4-3"
+       sodipodi:nodetypes="ccczcc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient3706-4);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-linejoin:round;stroke-opacity:1;display:inline"
+       d="M 17.407716,7.7583499 25.881692,2.8597449 25.768903,25.36423 17.41451,31.252754 z"
+       id="rect3690-2"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient3656-4);fill-opacity:1;fill-rule:evenodd;stroke:#171b23;stroke-width:0.29755139000000003;stroke-miterlimit:3.29999995000000010;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path3724-2"
+       sodipodi:cx="16.631927"
+       sodipodi:cy="23.101271"
+       sodipodi:rx="1.5355394"
+       sodipodi:ry="1.5355394"
+       d="m 18.167467,23.101271 a 1.5355394,1.5355394 0 1 1 -3.071079,0 1.5355394,1.5355394 0 1 1 3.071079,0 z"
+       transform="matrix(1.5091698,-0.13387392,0.16793633,1.8561207,-18.4053,-17.373486)" />
+    <path
+       sodipodi:nodetypes="czcczcc"
+       id="path3728-6"
+       d="m 5.426406,9.2456842 c 0,0 3.5663029,1.3770508 5.58401,1.7945388 2.017706,0.417487 6.514678,0.679014 6.514678,0.679014 l -2e-6,2.085545 c 0,0 -4.793314,-0.295796 -6.808573,-0.727516 C 8.7012592,12.645547 5.4753874,11.379731 5.4753874,11.379731 L 5.4264064,9.2456842 z"
+       style="fill:#36515d;fill-opacity:1;stroke:none;display:inline"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:#36515d;fill-opacity:1;stroke:none;display:inline"
+       d="m 5.426406,13.82845 c 0,0 3.5663029,1.377051 5.58401,1.794539 2.017706,0.417487 6.514678,0.679014 6.514678,0.679014 l -2e-6,2.085545 c 0,0 -4.793314,-0.295796 -6.808573,-0.727516 C 8.7012592,17.228313 5.4753874,15.962497 5.4753874,15.962497 L 5.4264064,13.82845 z"
+       id="path3795"
+       sodipodi:nodetypes="czcczcc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="top"
+     style="display:none"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:#2f6ab7;stroke-width:1.24076998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path3786"
+       sodipodi:cx="16.213333"
+       sodipodi:cy="17.973333"
+       sodipodi:rx="13.973333"
+       sodipodi:ry="13.706667"
+       d="m 30.186666,17.973333 a 13.973333,13.706667 0 1 1 -27.9466662,0 13.973333,13.706667 0 1 1 27.9466662,0 z"
+       transform="matrix(1.0376908,0,0,1.0578794,-0.937761,-2.9536141)" />
+  </g>
+</svg>
diff --git a/src/images/expand_left.svg b/src/images/expand_left.svg
new file mode 100644
index 0000000..518d3be
--- /dev/null
+++ b/src/images/expand_left.svg
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="32"
+   height="32"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="expand_left.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3821">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3823" />
+      <stop
+         style="stop-color:#3c3c3c;stop-opacity:1;"
+         offset="1"
+         id="stop3825" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3601">
+      <stop
+         style="stop-color:#a2a2a2;stop-opacity:1;"
+         offset="0"
+         id="stop3603" />
+      <stop
+         style="stop-color:#343434;stop-opacity:1;"
+         offset="1"
+         id="stop3605" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.46875"
+     inkscape:cx="1.5838384"
+     inkscape:cy="16.354555"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:snap-to-guides="false"
+     inkscape:snap-grids="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2831"
+       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="layer1"
+     inkscape:label="bg"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="arrow"
+     style="display:inline">
+    <path
+       sodipodi:nodetypes="ccc"
+       inkscape:connector-curvature="0"
+       id="path3829"
+       d="M 29,23 19,16 29,9"
+       style="fill:none;stroke:#000000;stroke-width:2.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 16,23 6.0000004,16 16,9"
+       id="path3818"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+  </g>
+</svg>
diff --git a/src/images/expand_right.svg b/src/images/expand_right.svg
new file mode 100644
index 0000000..0216564
--- /dev/null
+++ b/src/images/expand_right.svg
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="32"
+   height="32"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="expand_right.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3821">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3823" />
+      <stop
+         style="stop-color:#3c3c3c;stop-opacity:1;"
+         offset="1"
+         id="stop3825" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3601">
+      <stop
+         style="stop-color:#a2a2a2;stop-opacity:1;"
+         offset="0"
+         id="stop3603" />
+      <stop
+         style="stop-color:#343434;stop-opacity:1;"
+         offset="1"
+         id="stop3605" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.46875"
+     inkscape:cx="1.5838384"
+     inkscape:cy="16.354555"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:snap-to-guides="false"
+     inkscape:snap-grids="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2831"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer1"
+     inkscape:label="bg"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="arrow"
+     style="display:inline">
+    <path
+       sodipodi:nodetypes="ccc"
+       inkscape:connector-curvature="0"
+       id="path3829"
+       d="M 4.0000004,23 14,16 4.0000004,9"
+       style="fill:none;stroke:#000000;stroke-width:2.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 17,23 27,16 17,9"
+       id="path3818"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+  </g>
+</svg>
diff --git a/src/images/filter.svg b/src/images/filter.svg
new file mode 100644
index 0000000..909bd40
--- /dev/null
+++ b/src/images/filter.svg
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16"
+   height="16"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="filter.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3617">
+      <stop
+         style="stop-color:#f7f6f2;stop-opacity:1;"
+         offset="0"
+         id="stop3619" />
+      <stop
+         style="stop-color:#0e729a;stop-opacity:1;"
+         offset="1"
+         id="stop3621" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3776">
+      <stop
+         id="stop3778"
+         offset="0"
+         style="stop-color:#61728a;stop-opacity:1;" />
+      <stop
+         id="stop3780"
+         offset="1"
+         style="stop-color:#b1bec2;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3717-3">
+      <stop
+         style="stop-color:#9cb1da;stop-opacity:1;"
+         offset="0"
+         id="stop3719-8" />
+      <stop
+         style="stop-color:#ecf0f1;stop-opacity:1;"
+         offset="1"
+         id="stop3721-3" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="52.3125"
+     inkscape:cx="4.9605735"
+     inkscape:cy="8"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <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="layer3"
+     inkscape:label="body"
+     transform="translate(0,-16)" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="connect"
+     transform="translate(0,-16)" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="lens"
+     transform="translate(0,-16)">
+    <path
+       style="fill:#666666;stroke:none"
+       d="M 7.1875747,30.434382 7.1684588,25.576596 2.1983274,19.672519 c 0,0 3.8335398,0.847537 6.1362007,0.784718 2.2376879,-0.06105 5.8685789,-0.728668 5.8685789,-0.728668 l -4.989248,5.866712 1e-7,4.839101 c 0,0 -0.5050549,0.334661 -1.0322581,0.33631 -0.672244,0.0021 -0.9940263,-0.33631 -0.9940263,-0.33631 z"
+       id="path3025"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccscccsc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;stroke:#595959;stroke-width:0.33966306;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3795"
+       sodipodi:cx="4.3870969"
+       sodipodi:cy="2.7048984"
+       sodipodi:rx="5.1135006"
+       sodipodi:ry="0.90800476"
+       d="m 9.5005975,2.7048984 a 5.1135006,0.90800476 0 1 1 -10.22700121,0 5.1135006,0.90800476 0 1 1 10.22700121,0 z"
+       transform="matrix(1.1570094,0,0,2.1515275,3.0770152,13.579345)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="item"
+     style="display:inline"
+     transform="translate(0,-16)" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="okulars"
+     transform="translate(0,-16)" />
+</svg>
diff --git a/src/images/folder.svg b/src/images/folder.svg
new file mode 100644
index 0000000..fb5a7ce
--- /dev/null
+++ b/src/images/folder.svg
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg2985"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="FOLDER.svg"
+   sodipodi:version="0.32"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <title
+     id="title2993">Metview icon</title>
+  <defs
+     id="defs2987">
+    <linearGradient
+       id="linearGradient3753">
+      <stop
+         style="stop-color:#e2c36e;stop-opacity:1;"
+         offset="0"
+         id="stop3755" />
+      <stop
+         style="stop-color:#ffef8a;stop-opacity:0.34210527;"
+         offset="1"
+         id="stop3757" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3753"
+       id="linearGradient3759"
+       x1="20.381924"
+       y1="25.776665"
+       x2="36.550461"
+       y2="-0.56834435"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0942429,0,0,1.0732344,-1.9950829,-1.8776448)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="10.27"
+     inkscape:cx="14.271484"
+     inkscape:cy="29.889877"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1672"
+     inkscape:window-height="973"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:snap-from-guide="false"
+     objecttolerance="2"
+     gridtolerance="2"
+     guidetolerance="2">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2995"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:url(#linearGradient3759);fill-opacity:1;stroke:#000000;stroke-width:0.91029769000000005;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="m 15,11 1.581791,-6.9553125 12.469348,3.7367772 2.255924,-3.4100421 9.343738,2.403001 -0.330091,4.3734044 c 7.786256,2.404387 11.284931,2.859172 19.842246,4.961637 L 51.55289,61.721726 7.8648109,40.823438 4.7046001,8.1600399 24.33753,14.182435 l -0.156955,3.272483 11.16368,3.580674 0.959165,-3.353576 13.555361,3.888862 1.763869,39.771774"
+       id="rect2984"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccccc" />
+    <path
+       style="fill:#0056c8;fill-opacity:1;stroke:#0056c8;stroke-width:0.89524412;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="M 31.5222,5.3369036 39.610516,7.4558961 39.486855,11 30,8 31.5222,5.3369036 z"
+       id="rect3761"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+  </g>
+</svg>
diff --git a/src/images/foldergroup.svg b/src/images/foldergroup.svg
new file mode 100644
index 0000000..fc35b2b
--- /dev/null
+++ b/src/images/foldergroup.svg
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg2985"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="foldergroup.svg"
+   sodipodi:version="0.32"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <title
+     id="title2993">Metview icon</title>
+  <defs
+     id="defs2987">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective15" />
+    <linearGradient
+       id="linearGradient3753">
+      <stop
+         style="stop-color:#e2c36e;stop-opacity:1;"
+         offset="0"
+         id="stop3755" />
+      <stop
+         style="stop-color:#ffef8a;stop-opacity:0.34210527;"
+         offset="1"
+         id="stop3757" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3753"
+       id="linearGradient3759"
+       x1="20.381924"
+       y1="25.776665"
+       x2="36.550461"
+       y2="-0.56834435"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0942429,0,0,1.0732344,-1.9950829,-1.8776448)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="10.27"
+     inkscape:cx="14.271484"
+     inkscape:cy="29.889877"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1179"
+     inkscape:window-x="1916"
+     inkscape:window-y="-4"
+     inkscape:window-maximized="1"
+     inkscape:snap-from-guide="false"
+     objecttolerance="2"
+     gridtolerance="2"
+     guidetolerance="2">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2995"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:url(#linearGradient3759);fill-opacity:1;stroke:#000000;stroke-width:0.91029769000000005;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="m 15,11 1.581791,-6.9553125 12.469348,3.7367772 2.255924,-3.4100421 9.343738,2.403001 -0.330091,4.3734044 c 7.786256,2.404387 11.284931,2.859172 19.842246,4.961637 L 51.55289,61.721726 7.8648109,40.823438 4.7046001,8.1600399 24.33753,14.182435 l -0.156955,3.272483 11.16368,3.580674 0.959165,-3.353576 13.555361,3.888862 1.763869,39.771774"
+       id="rect2984"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccccc" />
+    <path
+       style="fill:#0056c8;fill-opacity:1;stroke:#0056c8;stroke-width:0.89524412;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="M 31.5222,5.3369036 39.610516,7.4558961 39.486855,11 30,8 31.5222,5.3369036 z"
+       id="rect3761"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot2821"
+       style="font-size:24px;font-style:normal;font-weight:normal;fill:#2c5aa0;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
+       transform="matrix(2.0162786,0,0,2.0090514,-35.222794,-50.187092)"><flowRegion
+         id="flowRegion2823"><rect
+           id="rect2825"
+           width="38.753651"
+           height="26.77702"
+           x="21.032133"
+           y="30.796495"
+           style="font-size:24px;fill:#2c5aa0" /></flowRegion><flowPara
+         id="flowPara2827"
+         style="font-size:24px;fill:#2c5aa0;font-family:Arial;-inkscape-font-specification:Arial">G</flowPara></flowRoot>  </g>
+</svg>
diff --git a/src/images/gui_edit.svg b/src/images/gui_edit.svg
new file mode 100644
index 0000000..6b310ab
--- /dev/null
+++ b/src/images/gui_edit.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="gui_edit.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3774">
+      <stop
+         style="stop-color:#f1f1f1;stop-opacity:1;"
+         offset="0"
+         id="stop3776" />
+      <stop
+         style="stop-color:#dddddd;stop-opacity:1;"
+         offset="1"
+         id="stop3778" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3774"
+       id="linearGradient3780"
+       x1="13.307544"
+       y1="1021.8786"
+       x2="31.876209"
+       y2="1031.1011"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0699504,0,0,1.3164372,-10.384106,-324.54736)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3774"
+       id="linearGradient3786"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4279801,0,0,1.3164307,17.046356,-324.54067)"
+       x1="13.307544"
+       y1="1021.8786"
+       x2="31.876209"
+       y2="1031.1011" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="19.21875"
+     inkscape:cx="16"
+     inkscape:cy="16"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="true"
+     inkscape:snap-to-guides="false"
+     inkscape:window-width="1087"
+     inkscape:window-height="897"
+     inkscape:window-x="128"
+     inkscape:window-y="28"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <rect
+       y="1022.3622"
+       x="2"
+       height="11.000017"
+       width="20"
+       id="rect3772"
+       style="fill:url(#linearGradient3780);fill-opacity:1;stroke:#646464;stroke-width:0.7;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       ry="1.1407425" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#646464;stroke-width:0.7;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3782"
+       width="28"
+       height="17"
+       x="2"
+       y="1033.3622"
+       ry="0" />
+    <rect
+       ry="1.1407371"
+       style="fill:url(#linearGradient3786);fill-opacity:1;stroke:#646464;stroke-width:0.7;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3784"
+       width="7.9999995"
+       height="10.999966"
+       x="22"
+       y="1022.3622" />
+    <path
+       style="fill:#1a1a1a;fill-opacity:1;stroke:none"
+       d="m 23,1026.306 2.963855,4.6713 L 29,1026.3622 z"
+       id="path3790"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/src/images/help_line.svg b/src/images/help_line.svg
new file mode 100644
index 0000000..cdb1534
--- /dev/null
+++ b/src/images/help_line.svg
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg3187"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="help_line.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.1">
+  <defs
+     id="defs3189" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="10.390625"
+     inkscape:cx="28.732605"
+     inkscape:cy="32"
+     inkscape:current-layer="layer5"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1146"
+     inkscape:window-height="875"
+     inkscape:window-x="497"
+     inkscape:window-y="101"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer6"
+     inkscape:label="rect under" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="rect">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#202830;stroke-width:3.83869385999999980;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:7.67738762000000020, 7.67738762000000020;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 6.9193469,49.080653 L 55.080653,3.5110751 L 55.080653,3.5110751"
+       id="path8281" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#678ca8;fill-opacity:1;fill-rule:evenodd;stroke:#0e1215;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 48.833402,61.418045 L 39.049457,42.299663 L 30.99511,52.457854 L 27,15.399482 L 56.970623,37.683287 L 44.043921,39.365506 L 55.974121,57.360933 L 48.833402,61.418045 z "
+       id="path5208"
+       sodipodi:nodetypes="cccccccc" />
+  </g>
+</svg>
diff --git a/src/images/help_map.svg b/src/images/help_map.svg
new file mode 100644
index 0000000..99c16c8
--- /dev/null
+++ b/src/images/help_map.svg
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg3187"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="help_map.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.1">
+  <defs
+     id="defs3189">
+    <linearGradient
+       id="linearGradient3761">
+      <stop
+         style="stop-color:#9edefc;stop-opacity:1;"
+         offset="0"
+         id="stop3763" />
+      <stop
+         style="stop-color:#4284d4;stop-opacity:1;"
+         offset="1"
+         id="stop3765" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="10.390625"
+     inkscape:cx="32.779375"
+     inkscape:cy="32"
+     inkscape:current-layer="layer5"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1146"
+     inkscape:window-height="875"
+     inkscape:window-x="53"
+     inkscape:window-y="73"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="rect">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#202830;stroke-width:4.62894154;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.79999995;stroke-opacity:1;stroke-dasharray:9.25788354, 4.62894177;stroke-dashoffset:0"
+       id="rect5213"
+       width="44.753803"
+       height="36.414646"
+       x="10.121249"
+       y="4.7784348" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#678ca8;fill-opacity:1;fill-rule:evenodd;stroke:#030303;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 51.543982,60.818563 L 41.760037,41.700181 L 33.70569,51.858372 L 29.71058,14.8 L 59.681203,37.083805 L 46.754501,38.766024 L 58.684701,56.761451 L 51.543982,60.818563 z "
+       id="path5208"
+       sodipodi:nodetypes="cccccccc" />
+  </g>
+</svg>
diff --git a/src/images/help_point.svg b/src/images/help_point.svg
new file mode 100644
index 0000000..c049bb9
--- /dev/null
+++ b/src/images/help_point.svg
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg3187"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="help_point.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.1">
+  <defs
+     id="defs3189" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.546875"
+     inkscape:cx="27.635144"
+     inkscape:cy="30.935283"
+     inkscape:current-layer="layer5"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1321"
+     inkscape:window-height="976"
+     inkscape:window-x="163"
+     inkscape:window-y="20"
+     inkscape:snap-grids="false"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2826" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer6"
+     inkscape:label="rect under"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="point"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#0a0d10;stroke-width:2.56360555;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       id="path3602-2"
+       sodipodi:cx="33.462524"
+       sodipodi:cy="36.446068"
+       sodipodi:rx="21.996344"
+       sodipodi:ry="20.767824"
+       d="m 55.458868,36.446068 a 21.996344,20.767824 0 1 1 -43.992687,0 21.996344,20.767824 0 1 1 43.992687,0 z"
+       transform="matrix(1.0743506,0,0,1.1379038,-9.223951,-15.593217)" />
+    <path
+       transform="matrix(0.36853848,0,0,0.39033934,15.112866,12.260579)"
+       d="m 55.458868,36.446068 a 21.996344,20.767824 0 1 1 -43.992687,0 21.996344,20.767824 0 1 1 43.992687,0 z"
+       sodipodi:ry="20.767824"
+       sodipodi:rx="21.996344"
+       sodipodi:cy="36.446068"
+       sodipodi:cx="33.462524"
+       id="path4839"
+       style="fill:#e6e6e6;fill-opacity:1;stroke:#0a0d10;stroke-width:7.90967560999999990;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="arrow"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="fill:#678ca8;fill-opacity:1;fill-rule:evenodd;stroke:#0e1215;stroke-width:0.73585808;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="M 56.610273,61.872448 45.632739,47.913878 41.63105,58.205277 31.46101,27.901312 58.033704,40.143535 48.768421,44.362511 61.12026,56.910979 56.610273,61.872448 z"
+       id="path5208"
+       sodipodi:nodetypes="cccccccc"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/src/images/help_script.svg b/src/images/help_script.svg
new file mode 100644
index 0000000..0d883cd
--- /dev/null
+++ b/src/images/help_script.svg
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="help_script.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3614">
+      <stop
+         style="stop-color:#cecece;stop-opacity:1;"
+         offset="0"
+         id="stop3616" />
+      <stop
+         style="stop-color:#fbfbfb;stop-opacity:1;"
+         offset="1"
+         id="stop3618" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3614"
+       id="linearGradient3710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0688752,0,0,-1.1672542,-33.433021,42.207333)"
+       x1="15.413333"
+       y1="3.4795053"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3614"
+       id="linearGradient3720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0688752,0,0,-1.1672542,-33.433021,42.207333)"
+       x1="24.437176"
+       y1="3.4853487"
+       x2="15.941438"
+       y2="18.883736" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="10.032489"
+     inkscape:cy="16.374922"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1328"
+     inkscape:window-height="1062"
+     inkscape:window-x="205"
+     inkscape:window-y="0"
+     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 />
+        <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="layer3"
+     inkscape:label="circle"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:35.16520309px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#1a1a1a;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Adobe Courier Bold"
+       x="4.9493303"
+       y="29.053167"
+       id="text3613"
+       transform="scale(0.99406375,1.0059717)"><tspan
+         sodipodi:role="line"
+         id="tspan3615"
+         x="4.9493303"
+         y="29.053167"
+         style="font-size:35.16520309px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#1a1a1a;font-family:Sans;-inkscape-font-specification:Adobe Courier Bold">?</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="item"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Calibri;-inkscape-font-specification:Calibri"
+       x="3.8399999"
+       y="21.973333"
+       id="text3783"><tspan
+         sodipodi:role="line"
+         id="tspan3785"
+         x="3.8399999"
+         y="21.973333" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="7.2533331"
+       y="15.146667"
+       id="text3787"><tspan
+         sodipodi:role="line"
+         id="tspan3789"
+         x="7.2533331"
+         y="15.146667" /></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="top"
+     style="display:inline" />
+</svg>
diff --git a/src/images/history.svg b/src/images/history.svg
new file mode 100644
index 0000000..56f33ef
--- /dev/null
+++ b/src/images/history.svg
@@ -0,0 +1,463 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="history.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_RUN_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3910">
+      <stop
+         style="stop-color:#4b71ab;stop-opacity:1;"
+         offset="0"
+         id="stop3912" />
+      <stop
+         style="stop-color:#dddfe1;stop-opacity:1;"
+         offset="1"
+         id="stop3914" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3902">
+      <stop
+         style="stop-color:#7fa7e3;stop-opacity:1;"
+         offset="0"
+         id="stop3904" />
+      <stop
+         style="stop-color:#b39045;stop-opacity:1;"
+         offset="1"
+         id="stop3906" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3882">
+      <stop
+         style="stop-color:#5f8dd3;stop-opacity:1;"
+         offset="0"
+         id="stop3884" />
+      <stop
+         style="stop-color:#28446f;stop-opacity:1;"
+         offset="1"
+         id="stop3886" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3925">
+      <stop
+         style="stop-color:#0044aa;stop-opacity:1;"
+         offset="0"
+         id="stop3927" />
+      <stop
+         style="stop-color:#0055d3;stop-opacity:1;"
+         offset="1"
+         id="stop3929" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3917">
+      <stop
+         style="stop-color:#0055d4;stop-opacity:1;"
+         offset="0"
+         id="stop3919" />
+      <stop
+         style="stop-color:#1975ff;stop-opacity:1;"
+         offset="1"
+         id="stop3921" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3909">
+      <stop
+         style="stop-color:#2a7fff;stop-opacity:1;"
+         offset="0"
+         id="stop3911" />
+      <stop
+         style="stop-color:#63a1ff;stop-opacity:1;"
+         offset="1"
+         id="stop3913" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3678">
+      <stop
+         style="stop-color:#e3e9ef;stop-opacity:1;"
+         offset="0"
+         id="stop3680" />
+      <stop
+         style="stop-color:#d9e3f2;stop-opacity:1;"
+         offset="1"
+         id="stop3682" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3648">
+      <stop
+         style="stop-color:#acc6d2;stop-opacity:1;"
+         offset="0"
+         id="stop3650" />
+      <stop
+         style="stop-color:#498ca2;stop-opacity:1;"
+         offset="1"
+         id="stop3652" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3716">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3708">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3700">
+      <stop
+         style="stop-color:#727272;stop-opacity:1;"
+         offset="0"
+         id="stop3702" />
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="1"
+         id="stop3704" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective3219" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3749">
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:1;"
+         offset="0"
+         id="stop3751" />
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:0;"
+         offset="1"
+         id="stop3753" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3741">
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:1;"
+         offset="0"
+         id="stop3743" />
+      <stop
+         style="stop-color:#2f3d85;stop-opacity:0;"
+         offset="1"
+         id="stop3745" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3733">
+      <stop
+         style="stop-color:#2f528a;stop-opacity:1"
+         offset="0"
+         id="stop3735" />
+      <stop
+         style="stop-color:#3f5e91;stop-opacity:0;"
+         offset="1"
+         id="stop3737" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3622-8">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop3624-3" />
+      <stop
+         style="stop-color:#e9f0fa;stop-opacity:1"
+         offset="1"
+         id="stop3626-2" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3622-95">
+      <stop
+         style="stop-color:#c6cee3;stop-opacity:1;"
+         offset="0"
+         id="stop3624-5" />
+      <stop
+         style="stop-color:#eaeef9;stop-opacity:0;"
+         offset="1"
+         id="stop3626-7" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3733"
+       id="linearGradient2886"
+       gradientUnits="userSpaceOnUse"
+       x1="78.128151"
+       y1="102.62679"
+       x2="110.16354"
+       y2="102.62679"
+       gradientTransform="translate(-26.687459,-0.0778789)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3749"
+       id="linearGradient2892"
+       gradientUnits="userSpaceOnUse"
+       x1="88.325951"
+       y1="84.507774"
+       x2="119.71897"
+       y2="63.179432" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3741"
+       id="linearGradient2894"
+       gradientUnits="userSpaceOnUse"
+       x1="98.523994"
+       y1="99.79335"
+       x2="127.85975"
+       y2="99.79335" />
+    <inkscape:perspective
+       id="perspective3676"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3700"
+       id="linearGradient3706"
+       x1="22.977591"
+       y1="16.533602"
+       x2="29.822767"
+       y2="16.274597"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7675676,0,0,1,5.1557318,30.408959)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3708"
+       id="linearGradient3714"
+       x1="12.987333"
+       y1="40.467396"
+       x2="29.933771"
+       y2="40.467396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9235808,0,0,1,1.6954997,-1.5910409)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3716"
+       id="linearGradient3722"
+       x1="12.98733"
+       y1="51.049667"
+       x2="23.125591"
+       y2="51.049667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91240876,0,0,1,1.8405944,-1.5910409)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3648"
+       id="radialGradient3656"
+       cx="15.794774"
+       cy="23.04089"
+       fx="15.794774"
+       fy="23.04089"
+       r="1.5355394"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3648-8">
+      <stop
+         style="stop-color:#acc6d2;stop-opacity:1;"
+         offset="0"
+         id="stop3650-8" />
+      <stop
+         style="stop-color:#498ca2;stop-opacity:1;"
+         offset="1"
+         id="stop3652-2" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3700-5">
+      <stop
+         style="stop-color:#727272;stop-opacity:1;"
+         offset="0"
+         id="stop3702-5" />
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="1"
+         id="stop3704-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3708-1">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop3710-1" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop3712-5" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3716-7"
+       id="linearGradient3722-2"
+       x1="12.98733"
+       y1="51.049667"
+       x2="23.125591"
+       y2="51.049667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.91240876,0,0,1,1.8405944,-1.5910409)" />
+    <linearGradient
+       id="linearGradient3716-7">
+      <stop
+         style="stop-color:#a5a5a5;stop-opacity:1;"
+         offset="0"
+         id="stop3718-6" />
+      <stop
+         style="stop-color:#bbbbbb;stop-opacity:1;"
+         offset="1"
+         id="stop3720-1" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="13.75"
+     inkscape:cx="16"
+     inkscape:cy="14.50303"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="914"
+     inkscape:window-height="629"
+     inkscape:window-x="54"
+     inkscape:window-y="23"
+     inkscape:window-maximized="0"
+     gridtolerance="6">
+    <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="layer6"
+     inkscape:label="desktop"
+     style="display:inline">
+    <path
+       style="fill:#a6b4e3;stroke:#446f8a;stroke-width:0.99999994000000003;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
+       d="M 16.21875 1.3125 C 8.0951569 1.3125 1.5 7.8764068 1.5 16 C 1.5 24.123593 8.0951569 30.71875 16.21875 30.71875 C 24.342343 30.71875 30.90625 24.123593 30.90625 16 C 30.90625 7.8764068 24.342343 1.3125 16.21875 1.3125 z M 16.21875 3.40625 C 23.17696 3.40625 28.8125 9.04179 28.8125 16 C 28.8125 22.95821 23.17696 28.625 16.21875 28.625 C 9.2605402 28.625 3.625 22.95821 3.625 16 C 3.625 9.04179 9.2605402 3.40625 16.21875 3.40625 z "
+       id="path3070" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="circle" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="hand"
+     style="display:inline">
+    <path
+       style="fill:#7bbfcf;fill-opacity:1;stroke:#3c6d92;stroke-width:1.02823055000000000px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       d="m 15.927272,16.286745 -1.018181,-9.119003 1.163636,-2.7222873 1.018182,2.803343 -0.578881,4.2845913 -0.584756,4.830247"
+       id="path3843"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       sodipodi:nodetypes="ccccccc"
+       inkscape:connector-curvature="0"
+       id="path3845"
+       d="m 16.611446,16.512283 5.416144,3.47022 1.326995,2.195284 -2.065572,-0.867277 -2.232824,-2.203655 -1.78106,-1.882519 -1.116216,-0.993233"
+       style="fill:#7bbfcf;fill-opacity:1;stroke:#3c6d92;stroke-width:0.78629643000000005px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#216778;fill-opacity:1;stroke:none;display:inline"
+       id="path3847"
+       sodipodi:cx="10.8"
+       sodipodi:cy="22.618181"
+       sodipodi:rx="0.90909094"
+       sodipodi:ry="0.94545454"
+       d="m 11.709091,22.618181 a 0.90909094,0.94545454 0 1 1 -1.8181817,0 0.90909094,0.94545454 0 1 1 1.8181817,0 z"
+       transform="matrix(1.65,0,0,1.65,-1.747273,-21.101817)" />
+    <path
+       style="fill:#216778;stroke:#4d7a97;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 4.0727273,15.854545 c 2.8363632,0 2.9090912,0 2.9090912,0"
+       id="path3867"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 6.0363636,16 z"
+       id="path3869"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3871"
+       d="m 25.454545,16.072727 c 2.836364,0 2.909091,0 2.909091,0"
+       style="fill:#216778;stroke:#4d7a97;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3880"
+       d="m 16.072727,28.218183 c 0,-2.836364 0,-2.909092 0,-2.909092"
+       style="fill:#216778;stroke:#4d7a97;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+</svg>
diff --git a/src/images/home.svg b/src/images/home.svg
new file mode 100644
index 0000000..a794454
--- /dev/null
+++ b/src/images/home.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="home.svg"
+   style="display:inline">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3753">
+      <stop
+         style="stop-color:#539ec0;stop-opacity:1;"
+         offset="0"
+         id="stop3755" />
+      <stop
+         id="stop3713"
+         offset="0.5"
+         style="stop-color:#6798c4;stop-opacity:1;" />
+      <stop
+         style="stop-color:#5391d7;stop-opacity:1;"
+         offset="1"
+         id="stop3757" />
+    </linearGradient>
+    <linearGradient
+       y2="-0.56834435"
+       x2="36.550461"
+       y1="25.776665"
+       x1="20.381924"
+       gradientTransform="matrix(0.55845763,0,0,0.55794702,-1.3287357,-1.8666085)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2910"
+       xlink:href="#linearGradient3753"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="12.46875"
+     inkscape:cx="1.5704858"
+     inkscape:cy="19.139085"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1651"
+     inkscape:window-height="1068"
+     inkscape:window-x="2159"
+     inkscape:window-y="103"
+     inkscape:window-maximized="0"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)"
+     style="display:inline">
+    <path
+       sodipodi:nodetypes="ccccccccccccccc"
+       inkscape:connector-curvature="0"
+       id="path3715"
+       d="m 5.2413216,1050.9903 0.133129,-18.308 -4.2264311,0 12.5644495,-9.0077 2.228061,-1.5976 6.339645,4.3196 8.765878,6.5227 -3.949479,0 -0.02429,18.0705 -4.91255,5e-4 0,-10.8423 -8.886327,0 0,10.8423 -8.0320799,-5e-4 -1.6e-6,5e-4 z"
+       style="fill:#87aade;fill-opacity:1;stroke:#2c2e6d;stroke-width:1.29999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+</svg>
diff --git a/src/images/icon_group.svg b/src/images/icon_group.svg
new file mode 100644
index 0000000..fad7341
--- /dev/null
+++ b/src/images/icon_group.svg
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="icon_group.svg"
+   style="display:inline"
+   inkscape:export-filename="/var/tmp/cgr/PERFORCE/development/metview/src/Flextra/FLEXTRA_RUN_128.png"
+   inkscape:export-xdpi="360"
+   inkscape:export-ydpi="360">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3947">
+      <stop
+         id="stop3949"
+         offset="0"
+         style="stop-color:#4691a3;stop-opacity:1;" />
+      <stop
+         id="stop3951"
+         offset="1"
+         style="stop-color:#c6d6d9;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3941">
+      <stop
+         id="stop3943"
+         offset="0"
+         style="stop-color:#4691a3;stop-opacity:1;" />
+      <stop
+         id="stop3945"
+         offset="1"
+         style="stop-color:#a7d2dc;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3883">
+      <stop
+         style="stop-color:#4691a3;stop-opacity:1;"
+         offset="0"
+         id="stop3885" />
+      <stop
+         style="stop-color:#83b7c3;stop-opacity:1;"
+         offset="1"
+         id="stop3887" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3883"
+       id="linearGradient3889"
+       x1="10.111295"
+       y1="23.488705"
+       x2="10.706336"
+       y2="22.232506"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3941"
+       id="linearGradient3893"
+       gradientUnits="userSpaceOnUse"
+       x1="10.111295"
+       y1="23.488705"
+       x2="10.706336"
+       y2="22.232506" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3947"
+       id="linearGradient3897"
+       gradientUnits="userSpaceOnUse"
+       x1="10.111295"
+       y1="23.488705"
+       x2="10.706336"
+       y2="22.232506" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="13.75"
+     inkscape:cx="16"
+     inkscape:cy="16"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="false"
+     inkscape:window-width="914"
+     inkscape:window-height="629"
+     inkscape:window-x="54"
+     inkscape:window-y="23"
+     inkscape:window-maximized="0"
+     gridtolerance="6">
+    <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="layer6"
+     inkscape:label="desktop"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="circle" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="hand"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3889);fill-opacity:1;stroke:#4d7a97;stroke-width:0.15151516;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path3847"
+       sodipodi:cx="10.8"
+       sodipodi:cy="22.618181"
+       sodipodi:rx="0.90909094"
+       sodipodi:ry="0.94545454"
+       d="m 11.709091,22.618181 a 0.90909094,0.94545454 0 1 1 -1.8181817,0 0.90909094,0.94545454 0 1 1 1.8181817,0 z"
+       transform="matrix(6.1014218,0,0,5.8667519,-56.004449,-124.05343)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 6.6909091,16.872727 z"
+       id="path3869"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="matrix(6.1014218,0,0,5.8667518,-50.258996,-116.708)"
+       d="m 11.709091,22.618181 a 0.90909094,0.94545454 0 1 1 -1.8181817,0 0.90909094,0.94545454 0 1 1 1.8181817,0 z"
+       sodipodi:ry="0.94545454"
+       sodipodi:rx="0.90909094"
+       sodipodi:cy="22.618181"
+       sodipodi:cx="10.8"
+       id="path3891"
+       style="fill:url(#linearGradient3893);fill-opacity:1;stroke:#4d7a97;stroke-width:0.15151516;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       sodipodi:type="arc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3897);fill-opacity:1;stroke:#4d7a97;stroke-width:0.15151516;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path3895"
+       sodipodi:cx="10.8"
+       sodipodi:cy="22.618181"
+       sodipodi:rx="0.90909094"
+       sodipodi:ry="0.94545454"
+       d="m 11.709091,22.618181 a 0.90909094,0.94545454 0 1 1 -1.8181817,0 0.90909094,0.94545454 0 1 1 1.8181817,0 z"
+       transform="matrix(6.1014218,0,0,5.8667518,-44.586268,-109.65343)" />
+  </g>
+</svg>
diff --git a/src/images/icon_view.svg b/src/images/icon_view.svg
new file mode 100644
index 0000000..51d1f7f
--- /dev/null
+++ b/src/images/icon_view.svg
@@ -0,0 +1,329 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.4 r9939"
+   version="1.0"
+   sodipodi:docname="icon_view.svg"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3648">
+      <stop
+         id="stop3650"
+         offset="0"
+         style="stop-color:#c4c4c4;stop-opacity:1;" />
+      <stop
+         id="stop3652"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3715">
+      <stop
+         style="stop-color:#d2d2d2;stop-opacity:1;"
+         offset="0"
+         id="stop3717" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3719" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5774">
+      <stop
+         id="stop5776"
+         offset="0"
+         style="stop-color:#a8abab;stop-opacity:1;" />
+      <stop
+         id="stop5778"
+         offset="1"
+         style="stop-color:#e2e9eb;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5774"
+       id="linearGradient2886"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.80897999,0,0,0.59391541,-26.080126,-1.0973868)"
+       x1="33.000004"
+       y1="-0.59061384"
+       x2="-1.0000013"
+       y2="7.6579084" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3648"
+       id="linearGradient3721"
+       x1="-2.0451682"
+       y1="2.183856"
+       x2="22.758142"
+       y2="20.695072"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.032834,0,0,1.0916659,-0.29039613,-0.12398887)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5774"
+       id="linearGradient3931"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3416423,0,0,1.1605799,13.399924,9.135738)"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5774"
+       id="linearGradient3935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3627065,0,0,1.1869101,0.47216773,8.7570795)"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5774"
+       id="linearGradient3939"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2682051,0,0,1.2098574,-7.5767172,-8.0108824)"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3715"
+       id="linearGradient3646"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0085347,0,0,-0.92400198,26.222385,24.816007)"
+       x1="13.007086"
+       y1="9.1088839"
+       x2="26.593204"
+       y2="21.976063" />
+    <linearGradient
+       y2="11"
+       x2="8.999999"
+       y1="14"
+       x1="1.9999986"
+       gradientTransform="matrix(1.5442783,0,0,1.2571263,-0.02487577,-2.1514095)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3675"
+       xlink:href="#linearGradient5774"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3715"
+       id="linearGradient3800"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.2466743,0,0,-1.1316794,31.175847,31.167266)"
+       x1="13.007086"
+       y1="9.1088839"
+       x2="26.593204"
+       y2="21.976063" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5774"
+       id="linearGradient3803"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.99999982,0,0,0.72740301,-30.999997,-0.57038572)"
+       x1="33.000004"
+       y1="-0.59061384"
+       x2="-1.0000013"
+       y2="7.6579084" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3648"
+       id="linearGradient3806"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2767112,0,0,1.3370272,-1.5972457,0.62179177)"
+       x1="-2.0451682"
+       y1="2.183856"
+       x2="22.758142"
+       y2="20.695072" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5774"
+       id="linearGradient3810"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5442783,0,0,1.2571263,13.016627,-2.08871)"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5774"
+       id="linearGradient3814"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5442783,0,0,1.2571263,-0.0875753,7.9432155)"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5774"
+       id="linearGradient3818"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5442783,0,0,1.2571263,13.016628,7.9432155)"
+       x1="1.9999986"
+       y1="14"
+       x2="8.999999"
+       y2="11" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#efefef"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.949082"
+     inkscape:cx="15.213847"
+     inkscape:cy="16"
+     inkscape:document-units="px"
+     inkscape:current-layer="g3845"
+     inkscape:showpageshadow="false"
+     showborder="true"
+     borderlayer="top"
+     showgrid="true"
+     inkscape:grid-points="false"
+     inkscape:window-width="1014"
+     inkscape:window-height="697"
+     inkscape:window-x="47"
+     inkscape:window-y="2"
+     width="32px"
+     height="32px"
+     inkscape:window-maximized="0"
+     inkscape:snap-grids="false">
+    <inkscape:grid
+       id="GridFromPre046Settings"
+       type="xygrid"
+       originx="0px"
+       originy="0px"
+       spacingx="1px"
+       spacingy="1px"
+       color="#9f9f9f"
+       empcolor="#9f9f9f"
+       opacity="0.10196078"
+       empopacity="0.25490196"
+       empspacing="10" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer4"
+     inkscape:label="prof header"
+     style="display:inline">
+    <g
+       id="g3845"
+       transform="translate(1.0000014,1)">
+      <rect
+         style="fill:url(#linearGradient3806);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:0.618;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect10509"
+         width="30"
+         height="27.569721"
+         x="-1.3333558e-006"
+         y="2.4302771" />
+      <rect
+         transform="scale(-1,1)"
+         style="fill:url(#linearGradient3803);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:0.63949221;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect10511"
+         width="30"
+         height="5.8429823"
+         x="-29.999998"
+         y="0.15701789" />
+      <path
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccccc"
+         id="rect3637"
+         d="M 0.3371687,6.2974099 0.25383044,29.609904 0.95833216,29.75 0.99999944,7 29.666667,7 l -0.05081,-0.7025901 -29.27869256,0 z"
+         style="fill:url(#linearGradient3800);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+      <g
+         style="display:inline"
+         inkscape:label="add"
+         id="layer7" />
+      <rect
+         ry="0"
+         rx="0.64596623"
+         y="10.419856"
+         x="4.6079535"
+         height="5.0285039"
+         width="7.7213922"
+         id="rect3929-2"
+         style="fill:url(#linearGradient3675);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+      <rect
+         style="fill:url(#linearGradient3810);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+         id="rect3808"
+         width="7.7213922"
+         height="5.0285039"
+         x="17.649458"
+         y="10.482555"
+         rx="0.64596623"
+         ry="0" />
+      <rect
+         style="fill:url(#linearGradient3814);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+         id="rect3812"
+         width="7.7213922"
+         height="5.0285039"
+         x="4.5452542"
+         y="20.514481"
+         rx="0.64596623"
+         ry="0" />
+      <rect
+         style="fill:url(#linearGradient3818);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+         id="rect3816"
+         width="7.7213922"
+         height="5.0285039"
+         x="17.649458"
+         y="20.514482"
+         rx="0.64596623"
+         ry="0" />
+    </g>
+  </g>
+</svg>
diff --git a/src/images/link.svg b/src/images/link.svg
new file mode 100644
index 0000000..e1d2d12
--- /dev/null
+++ b/src/images/link.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="32"
+   height="32"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="link.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective14" />
+    <linearGradient
+       id="linearGradient3759">
+      <stop
+         style="stop-color:#0f1934;stop-opacity:1;"
+         offset="0"
+         id="stop3761" />
+      <stop
+         style="stop-color:#0f1123;stop-opacity:1;"
+         offset="1"
+         id="stop3763" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.15625"
+     inkscape:cx="-0.52526343"
+     inkscape:cy="17.039481"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false"
+     inkscape:window-width="1885"
+     inkscape:window-height="1144"
+     inkscape:window-x="1916"
+     inkscape:window-y="31"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#0c0c0d;stroke-width:1.05381035999999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2987"
+       width="31.17182"
+       height="30.907959"
+       x="0.53787953"
+       y="1020.9786" />
+    <path
+       style="fill:#00112b;fill-opacity:1;stroke:none"
+       d="m 25.356946,1044.3837 0.0031,-18.2581 -19.76294,0.047 6.734225,6.2099 c 0,0 -2.8911019,2.5538 -3.533378,5.4816 -0.4655709,2.1225 -0.8992526,7.6955 7.331605,11.1939 -1.861536,-4.5315 -1.902962,-6.3922 -0.904302,-8.6057 0.805852,-1.7862 2.952325,-2.6003 2.952325,-2.6003 2.588758,2.3511 4.554585,4.2169 7.178911,6.5345 z"
+       id="path3757"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccscsccc" />
+  </g>
+</svg>
diff --git a/src/images/link_broken.svg b/src/images/link_broken.svg
new file mode 100644
index 0000000..25dcfcc
--- /dev/null
+++ b/src/images/link_broken.svg
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="link_broken.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3773">
+      <stop
+         style="stop-color:#f9f9f9;stop-opacity:1;"
+         offset="0"
+         id="stop3775" />
+      <stop
+         style="stop-color:#f2e0e0;stop-opacity:1;"
+         offset="1"
+         id="stop3777" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3765">
+      <stop
+         style="stop-color:#d32525;stop-opacity:1;"
+         offset="0"
+         id="stop3767" />
+      <stop
+         style="stop-color:#c69292;stop-opacity:1;"
+         offset="1"
+         id="stop3769" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3759">
+      <stop
+         style="stop-color:#0f1934;stop-opacity:1;"
+         offset="0"
+         id="stop3761" />
+      <stop
+         style="stop-color:#0f1123;stop-opacity:1;"
+         offset="1"
+         id="stop3763" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765"
+       id="linearGradient3771"
+       x1="8.6144562"
+       y1="1019.6589"
+       x2="18.186312"
+       y2="1052.5874"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.15625"
+     inkscape:cx="10.863518"
+     inkscape:cy="16.344149"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false"
+     inkscape:window-width="1366"
+     inkscape:window-height="706"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <rect
+       style="fill:url(#linearGradient3771);fill-opacity:1;stroke:#813a34;stroke-width:1.05381035999999990;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2987"
+       width="31.17182"
+       height="30.907959"
+       x="0.53787953"
+       y="1020.9786" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;stroke:none"
+       d="m 25.790129,1044.7192 0.0032,-20.5743 -20.32,0.053 6.924043,6.9976 c 0,0 -2.9725934,2.8778 -3.6329734,6.177 -0.478694,2.3918 -0.9246,8.6718 7.5382614,12.6139 -1.914006,-5.1063 -1.9566,-7.2031 -0.929791,-9.6974 0.828566,-2.0127 3.035543,-2.9301 3.035543,-2.9301 2.661727,2.6493 4.682965,4.7519 7.381263,7.3634 z"
+       id="path3757"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccscsccc" />
+  </g>
+</svg>
diff --git a/src/images/mail_send.svg b/src/images/mail_send.svg
new file mode 100644
index 0000000..df4e447
--- /dev/null
+++ b/src/images/mail_send.svg
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="mail_send.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3789">
+      <stop
+         style="stop-color:#d7e3f4;stop-opacity:1;"
+         offset="0"
+         id="stop3791" />
+      <stop
+         style="stop-color:#f7f7f7;stop-opacity:1;"
+         offset="1"
+         id="stop3793" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4000">
+      <stop
+         id="stop3783"
+         offset="0"
+         style="stop-color:#adcbdd;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop4004" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3789"
+       id="linearGradient3795"
+       x1="11.553333"
+       y1="3.0133319"
+       x2="14.606666"
+       y2="13.573333"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.96019899,0.11999967,-0.4452892)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3789"
+       id="linearGradient3803"
+       x1="14.633333"
+       y1="32.666668"
+       x2="15.926666"
+       y2="-0.34666666"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.88937899,0.11999967,-0.01470351)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="5.6242242"
+     inkscape:cy="11.5392"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer6"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1599"
+     inkscape:window-height="990"
+     inkscape:window-x="96"
+     inkscape:window-y="20"
+     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 />
+        <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="layer6"
+     inkscape:label="Layer">
+    <rect
+       style="fill:url(#linearGradient3803);fill-opacity:1;fill-rule:evenodd;stroke:#14214c;stroke-width:0.94306892;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3998"
+       width="30"
+       height="21.345095"
+       x="1.1199996"
+       y="5.3215704"
+       ry="1.0286845" />
+    <path
+       style="fill:none;stroke:#14214c;stroke-width:0.94306892px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       d="M 1.7466664,26.109321 16.12,13.165981 30.746667,26.334632"
+       id="path3785"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3787"
+       d="M 13.12,16.838293 1.6666664,5.4951419 30.333332,5.3927188 19.12,16.838293 c -2.003486,1.78542 -3.912887,1.984603 -6,0 z"
+       style="fill:url(#linearGradient3795);fill-opacity:1;stroke:#14214c;stroke-width:0.97989744px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       sodipodi:nodetypes="ccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="left" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer8"
+     inkscape:label="screw" />
+</svg>
diff --git a/src/images/menu_indicator.png b/src/images/menu_indicator.png
new file mode 100644
index 0000000..3fee3ed
Binary files /dev/null and b/src/images/menu_indicator.png differ
diff --git a/src/images/padlock.svg b/src/images/padlock.svg
new file mode 100644
index 0000000..ab2f3fa
--- /dev/null
+++ b/src/images/padlock.svg
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="padlock.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3610">
+      <stop
+         id="stop3612"
+         offset="0"
+         style="stop-color:#f5d12a;stop-opacity:1;" />
+      <stop
+         id="stop3614"
+         offset="1"
+         style="stop-color:#ea3e3b;stop-opacity:1;" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective17" />
+    <linearGradient
+       id="linearGradient3773">
+      <stop
+         style="stop-color:#6a6a6a;stop-opacity:1;"
+         offset="0"
+         id="stop3775" />
+      <stop
+         style="stop-color:#0b0000;stop-opacity:1;"
+         offset="1"
+         id="stop3777" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3773"
+       id="linearGradient3779"
+       x1="5.3230176"
+       y1="19.404255"
+       x2="26.862669"
+       y2="19.404255"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.89367816,0,0,0.89367816,1.8657596,2.7243)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3773"
+       id="linearGradient3821"
+       x1="-10.279497"
+       y1="18.785299"
+       x2="4.3375244"
+       y2="18.785299"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3773"
+       id="linearGradient3002"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.89367816,0,0,0.89367816,1.8657596,2.7243)"
+       x1="5.3230176"
+       y1="19.404255"
+       x2="26.862669"
+       y2="19.404255" />
+    <inkscape:perspective
+       id="perspective3626"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3624"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.8125"
+     inkscape:cx="4.5533597"
+     inkscape:cy="16"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false"
+     inkscape:window-width="1256"
+     inkscape:window-height="767"
+     inkscape:window-x="551"
+     inkscape:window-y="218"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="bg"
+     style="display:inline">
+    <rect
+       y="0.48412517"
+       x="0.41408974"
+       height="30.846064"
+       width="31.233715"
+       id="rect3616"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000007;stroke-width:1.05381024;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)"
+     style="display:inline">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:none"
+       id="rect2987"
+       width="12.850737"
+       height="12.834458"
+       x="8.8937807"
+       y="1034.286" />
+    <path
+       style="fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.99999994000000003;stroke-opacity:1"
+       d="m 7.3397103,1034.8308 17.4549587,-0.2372 c 0.03041,-7.5368 -4.486899,-10.2518 -8.723449,-10.2206 -4.23655,0.031 -8.807814,2.4387 -8.7315097,10.4576 l 0,-10e-5 0,3e-4 z m 14.9438947,0.037 c 0.01107,0.068 -5.887621,-0.079 -6.461184,-0.079 l -5.9336673,0 c -0.06324,-6.8613 3.3144033,-8.1159 6.1180073,-8.1046 3.045953,0.047 6.758172,1.1468 6.276844,8.1839 l 0,-3e-4 z"
+       id="rect3771"
+       sodipodi:nodetypes="cczcccczcscc" />
+    <rect
+       style="opacity:0;fill:#ff5555;fill-opacity:1;fill-rule:evenodd;stroke:#b1575c;stroke-opacity:1"
+       id="rect2831"
+       width="21.601551"
+       height="13.864602"
+       x="-45.617023"
+       y="0.49516439"
+       transform="translate(0,1020.3622)" />
+    <path
+       sodipodi:type="star"
+       style="opacity:0;fill:#aa0000;fill-opacity:1;fill-rule:evenodd;stroke:#b1575c;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path3609"
+       sodipodi:sides="3"
+       sodipodi:cx="-39.613152"
+       sodipodi:cy="3.3423598"
+       sodipodi:r1="21.948847"
+       sodipodi:r2="10.974423"
+       sodipodi:arg1="0.65139717"
+       sodipodi:arg2="1.6985947"
+       inkscape:flatsided="false"
+       inkscape:rounded="-3.469447e-18"
+       inkscape:randomized="0"
+       d="M -22.158606,16.649903 -41.01185,14.227286 -59.865095,11.804668 -48.340424,-3.3114119 -36.815753,-18.427492 -29.48718,-0.88879442 -22.158606,16.649903 z"
+       transform="translate(0,1020.3622)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="fg"
+     style="display:inline">
+    <rect
+       style="fill:#4d4d4d;fill-opacity:1;stroke:none;display:inline"
+       id="rect3613"
+       width="21.206635"
+       height="13.453413"
+       x="5.4235935"
+       y="13.873748" />
+  </g>
+</svg>
diff --git a/src/images/page_add.svg b/src/images/page_add.svg
new file mode 100644
index 0000000..03a543b
--- /dev/null
+++ b/src/images/page_add.svg
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="page_add.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3803">
+      <stop
+         style="stop-color:#9ce45e;stop-opacity:1;"
+         offset="0"
+         id="stop3805" />
+      <stop
+         style="stop-color:#4ba84b;stop-opacity:1;"
+         offset="1"
+         id="stop3807" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="15.655987"
+       y1="21.776218"
+       x1="7.823595"
+       gradientTransform="matrix(1.5100066,0,0,1.7583288,1.3920388,-24.151539)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5028"
+       xlink:href="#linearGradient3851-1"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3803"
+       id="linearGradient3809"
+       x1="12.878514"
+       y1="12.41102"
+       x2="31.591381"
+       y2="27.233433"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="15.358178"
+     inkscape:cy="15.318782"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1212"
+     inkscape:window-height="885"
+     inkscape:window-x="765"
+     inkscape:window-y="113"
+     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 />
+        <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>
+  <rect
+     style="fill:url(#linearGradient5028);fill-opacity:1;stroke:#000000;stroke-width:0.88421828;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     id="rect3933"
+     width="22.594961"
+     height="19.345436"
+     x="5.8680902"
+     y="7.8129754" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="Layer"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="top"
+     style="display:inline">
+    <path
+       transform="matrix(0.49922617,0,0,0.51001453,-2.3622021,-0.66528347)"
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3809);fill-opacity:1;fill-rule:evenodd;stroke:#368c53;stroke-width:2.92117474;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path2978"
+       sodipodi:cx="23"
+       sodipodi:cy="19.5"
+       sodipodi:rx="15"
+       sodipodi:ry="14.5"
+       d="m 38,19.5 a 15,14.5 0 1 1 -30,0 15,14.5 0 1 1 30,0 z" />
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:#fffcfc;fill-opacity:1;stroke:#79c290;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 7.5443943,2.8992693 3.1679987,4.3e-6 -0.07785,4.78312 4.447404,0 4e-6,3.1691264 -4.447404,0 -5e-6,4.860199 -3.0123032,-0.07707 -0.07785,-4.8602 -4.8366325,0 0,-3.1691264 4.8366314,0 0,-4.7060439 z"
+       id="path2826-4"
+       sodipodi:nodetypes="ccccccccccccc" />
+  </g>
+</svg>
diff --git a/src/images/page_connect.svg b/src/images/page_connect.svg
new file mode 100644
index 0000000..4d8ddd6
--- /dev/null
+++ b/src/images/page_connect.svg
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="page_connect.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#e6e6e6;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851"
+       id="linearGradient3857"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="16.766666"
+       y2="28.320002"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1206735,0,0,1.4145748,-27.684833,-16.90552)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851"
+       id="linearGradient3866"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2095984,0,0,0.80192046,7.8602575,6.0156474)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="16.766666"
+       y2="28.320002" />
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-2.213417,-27.322407)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4468"
+       xlink:href="#linearGradient3851-1"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.3328808,0,0,1.1592695,-0.18280694,-8.9880267)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5028"
+       xlink:href="#linearGradient3851-1"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="19.5"
+       x2="38.5"
+       y1="19.5"
+       x1="7.5"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3945"
+       xlink:href="#linearGradient3845"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3845">
+      <stop
+         style="stop-color:#326dc2;stop-opacity:1;"
+         offset="0"
+         id="stop3847" />
+      <stop
+         style="stop-color:#6295be;stop-opacity:1;"
+         offset="1"
+         id="stop3849" />
+    </linearGradient>
+    <linearGradient
+       y2="19.5"
+       x2="38.5"
+       y1="19.5"
+       x1="7.5"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3096"
+       xlink:href="#linearGradient3845"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient3037"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0050513,0,0,1.1592695,9.2689648,-14.641359)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="-4.8767483"
+     inkscape:cy="19.808208"
+     inkscape:document-units="px"
+     inkscape:current-layer="svg2"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1">
+    <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 />
+        <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>
+  <rect
+     style="fill:url(#linearGradient5028);fill-opacity:1;stroke:#000000;stroke-width:0.6463967;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     id="rect3933"
+     width="19.94454"
+     height="12.754481"
+     x="3.768198"
+     y="12.086237" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="Layer"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="top"
+     style="display:inline" />
+  <rect
+     y="6.4329042"
+     x="12.248198"
+     height="12.754481"
+     width="15.039068"
+     id="rect3035"
+     style="fill:url(#linearGradient3037);fill-opacity:1;stroke:#000000;stroke-width:0.56130332;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <rect
+     style="fill:#000000;fill-opacity:1;stroke:#0c0c0c;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect3039"
+     width="1.8666667"
+     height="1.9733334"
+     x="1.1733333"
+     y="2.6133335" />
+  <rect
+     y="2.8800001"
+     x="28.746666"
+     height="1.9733334"
+     width="1.8666667"
+     id="rect3041"
+     style="fill:#000000;fill-opacity:1;stroke:#0c0c0c;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     inkscape:transform-center-x="0.8" />
+  <rect
+     y="27.306665"
+     x="1.4399999"
+     height="1.9733334"
+     width="1.8666667"
+     id="rect3043"
+     style="fill:#000000;fill-opacity:1;stroke:#0c0c0c;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+  <rect
+     style="fill:#000000;fill-opacity:1;stroke:#0c0c0c;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect3045"
+     width="1.8666667"
+     height="1.9733334"
+     x="28.746666"
+     y="27.199999" />
+</svg>
diff --git a/src/images/page_delete.svg b/src/images/page_delete.svg
new file mode 100644
index 0000000..396ed4c
--- /dev/null
+++ b/src/images/page_delete.svg
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="page_delete.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#e6e6e6;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851"
+       id="linearGradient3857"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="16.766666"
+       y2="28.320002"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1206735,0,0,1.4145748,-27.684833,-16.90552)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851"
+       id="linearGradient3866"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2095984,0,0,0.80192046,7.8602575,6.0156474)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="16.766666"
+       y2="28.320002" />
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-2.213417,-27.322407)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4468"
+       xlink:href="#linearGradient3851-1"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#cbcbcb;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.857965"
+       x1="7.552681"
+       gradientTransform="matrix(1.4728796,0,0,1.7695395,2.0305269,-24.518028)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5028"
+       xlink:href="#linearGradient3851-1"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="19.5"
+       x2="38.5"
+       y1="19.5"
+       x1="7.5"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3945"
+       xlink:href="#linearGradient3845"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3845">
+      <stop
+         style="stop-color:#ee7d83;stop-opacity:1;"
+         offset="0"
+         id="stop3847" />
+      <stop
+         style="stop-color:#d72222;stop-opacity:1;"
+         offset="1"
+         id="stop3849" />
+    </linearGradient>
+    <linearGradient
+       y2="30.51734"
+       x2="28.263607"
+       y1="9.2034216"
+       x1="17.94319"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3096"
+       xlink:href="#linearGradient3845"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="10.082738"
+     inkscape:cy="18.741603"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="935"
+     inkscape:window-height="787"
+     inkscape:window-x="125"
+     inkscape:window-y="125"
+     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 />
+        <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>
+  <rect
+     style="fill:url(#linearGradient5028);fill-opacity:1;stroke:#000000;stroke-width:0.8395083;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     id="rect3933"
+     width="22.039412"
+     height="19.468777"
+     x="6.3965244"
+     y="7.6502838" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="Layer"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="top"
+     style="display:inline">
+    <path
+       transform="matrix(0.51580669,0,0,0.5179714,-2.4768874,-0.74044233)"
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3096);fill-opacity:1;fill-rule:evenodd;stroke:#ae1d1f;stroke-width:2.84394347000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path2978"
+       sodipodi:cx="23"
+       sodipodi:cy="19.5"
+       sodipodi:rx="15"
+       sodipodi:ry="14.5"
+       d="m 38,19.5 a 15,14.5 0 1 1 -30,0 15,14.5 0 1 1 30,0 z" />
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:#ffffff;fill-opacity:1;stroke:#df3131;display:inline;stroke-width:0.50000000000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 3.4364793,5.6954954 5.770159,3.2986945 9.2981327,6.8348112 12.574269,3.4700523 14.949781,5.7739317 11.673642,9.1386912 15.316736,12.671948 13.039978,14.894927 9.3395331,11.420571 5.7766746,15.079808 3.4011676,12.775924 6.9640258,9.116689 3.4364802,5.6955024 z"
+       id="path2826-4"
+       sodipodi:nodetypes="ccccccccccccc" />
+  </g>
+</svg>
diff --git a/src/images/page_disconnect.svg b/src/images/page_disconnect.svg
new file mode 100644
index 0000000..eb2f103
--- /dev/null
+++ b/src/images/page_disconnect.svg
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="page_disconnect.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3831">
+      <stop
+         id="stop3833"
+         offset="0"
+         style="stop-color:#fafafa;stop-opacity:1;" />
+      <stop
+         id="stop3835"
+         offset="1"
+         style="stop-color:#dfa74f;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.3328808,0,0,1.1592695,-0.18280694,-8.9880267)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5028"
+       xlink:href="#linearGradient3831"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient3037"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0050513,0,0,1.1592695,9.2689648,-14.641359)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="-13.356748"
+     inkscape:cy="19.808208"
+     inkscape:document-units="px"
+     inkscape:current-layer="svg2"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1">
+    <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 />
+        <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>
+  <rect
+     style="fill:url(#linearGradient5028);fill-opacity:1.0;stroke:#000000;stroke-width:0.64639670000000005;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     id="rect3933"
+     width="19.94454"
+     height="12.754481"
+     x="3.768198"
+     y="12.086237" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="Layer"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="top"
+     style="display:inline" />
+  <rect
+     y="6.4329042"
+     x="12.248198"
+     height="12.754481"
+     width="15.039068"
+     id="rect3035"
+     style="fill:url(#linearGradient3037);fill-opacity:1;stroke:#000000;stroke-width:0.56130332;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <rect
+     style="fill:#000000;fill-opacity:1;stroke:#0c0c0c;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect3039"
+     width="1.8666667"
+     height="1.9733334"
+     x="1.3866667"
+     y="8.0533333" />
+  <rect
+     y="3.8400002"
+     x="28.959999"
+     height="1.9733334"
+     width="1.8666667"
+     id="rect3041"
+     style="fill:#000000;fill-opacity:1;stroke:#0c0c0c;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     inkscape:transform-center-x="0.8" />
+  <rect
+     y="26.293333"
+     x="1.28"
+     height="1.9733334"
+     width="1.8666667"
+     id="rect3043"
+     style="fill:#000000;fill-opacity:1;stroke:#0c0c0c;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+  <rect
+     style="fill:#000000;fill-opacity:1;stroke:#0c0c0c;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect3045"
+     width="1.8666667"
+     height="1.9733334"
+     x="26.453333"
+     y="26.24" />
+  <rect
+     inkscape:transform-center-x="0.8"
+     style="fill:#000000;fill-opacity:1;stroke:#0c0c0c;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect3049"
+     width="1.8666667"
+     height="1.9733334"
+     x="8.7999983"
+     y="3.9466667" />
+  <rect
+     y="18.666666"
+     x="8.9066658"
+     height="1.9733334"
+     width="1.8666667"
+     id="rect3051"
+     style="fill:#000000;fill-opacity:1;stroke:#0c0c0c;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     inkscape:transform-center-x="0.8" />
+  <rect
+     inkscape:transform-center-x="0.8"
+     style="fill:#000000;fill-opacity:1;stroke:#0c0c0c;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect3053"
+     width="1.8666667"
+     height="1.9733334"
+     x="8.9066658"
+     y="18.666666" />
+  <rect
+     y="18.666666"
+     x="28.906666"
+     height="1.9733334"
+     width="1.8666667"
+     id="rect3055"
+     style="fill:#000000;fill-opacity:1;stroke:#0c0c0c;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     inkscape:transform-center-x="0.8" />
+</svg>
diff --git a/src/images/page_expand.svg b/src/images/page_expand.svg
new file mode 100644
index 0000000..7ae7554
--- /dev/null
+++ b/src/images/page_expand.svg
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="page_expand.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#e6e6e6;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3852">
+      <stop
+         style="stop-color:#467b3c;stop-opacity:1;"
+         offset="0"
+         id="stop3854" />
+      <stop
+         style="stop-color:#3d9f3d;stop-opacity:0.99215686;"
+         offset="1"
+         id="stop3856" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3799">
+      <stop
+         style="stop-color:#aae1be;stop-opacity:1;"
+         offset="0"
+         id="stop3801" />
+      <stop
+         style="stop-color:#4bc82b;stop-opacity:1;"
+         offset="1"
+         id="stop3803" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3777">
+      <stop
+         style="stop-color:#0000ad;stop-opacity:1;"
+         offset="0"
+         id="stop3779" />
+      <stop
+         style="stop-color:#25d4ce;stop-opacity:1;"
+         offset="1"
+         id="stop3781" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3756">
+      <stop
+         id="stop3758"
+         offset="0"
+         style="stop-color:#519aed;stop-opacity:1;" />
+      <stop
+         id="stop3760"
+         offset="1"
+         style="stop-color:#e9dddd;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3728">
+      <stop
+         style="stop-color:#f1f3fb;stop-opacity:1;"
+         offset="0"
+         id="stop3730" />
+      <stop
+         style="stop-color:#273df9;stop-opacity:0;"
+         offset="1"
+         id="stop3732" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3777"
+       id="linearGradient3783"
+       x1="1.4276053"
+       y1="16.374115"
+       x2="28.440671"
+       y2="16.374115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0279887,0,0,1.0323478,7.1553463,-2.2096664)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851"
+       id="linearGradient3857"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="16.766666"
+       y2="28.320002"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1006907,0,0,1.0370581,-1.1739438,-0.04592383)" />
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.7717798,0,0,1.9166829,-1.75708,-28.310245)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5028"
+       xlink:href="#linearGradient3851-1"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c0c1c2;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="22.261148"
+       x1="8.4925022"
+       gradientTransform="matrix(0.85843513,0,0,0.91591979,7.0139663,-5.750136)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3953"
+       xlink:href="#linearGradient3851-1"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="-10.76029"
+     inkscape:cy="19.808208"
+     inkscape:document-units="px"
+     inkscape:current-layer="svg2"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1">
+    <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 />
+        <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>
+  <rect
+     style="fill:url(#linearGradient3953);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     id="rect3933"
+     width="12.845181"
+     height="10.077106"
+     x="9.5585899"
+     y="10.900293" />
+  <path
+     style="fill:#1a1a1a;stroke:#030000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     d="M 8.2697078,9.6036327 C 4.8416598,5.5525791 4.8416598,5.5525791 4.8416598,5.5525791"
+     id="path3843"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#1a1a1a;stroke:none"
+     d="M 9.0917679,3.4746377 1.8489685,9.036013 1.2686905,0.68143287 z"
+     id="path3845"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccc" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path4510"
+     d="m 24.135357,22.534767 c 3.428048,4.051053 3.428048,4.051053 3.428048,4.051053"
+     style="fill:#1a1a1a;stroke:#030000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     sodipodi:nodetypes="cccc"
+     inkscape:connector-curvature="0"
+     id="path4512"
+     d="m 23.313296,28.663762 7.2428,-5.561376 0.580278,8.35458 z"
+     style="fill:#1a1a1a;stroke:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path4514"
+     d="M 23.922024,9.816966 C 27.350072,5.7659124 27.350072,5.7659124 27.350072,5.7659124"
+     style="fill:#1a1a1a;stroke:#030000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     sodipodi:nodetypes="cccc"
+     inkscape:connector-curvature="0"
+     id="path4516"
+     d="m 23.099964,3.687971 7.242799,5.5613753 0.580278,-8.3545801 z"
+     style="fill:#1a1a1a;stroke:none" />
+  <path
+     style="fill:#1a1a1a;stroke:#030000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     d="M 8.1097076,22.534767 C 4.6816596,26.58582 4.6816596,26.58582 4.6816596,26.58582"
+     id="path4518"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#1a1a1a;stroke:none"
+     d="m 8.9317676,28.663762 -7.242799,-5.561376 -0.580278,8.35458 z"
+     id="path4520"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccc" />
+</svg>
diff --git a/src/images/page_join.svg b/src/images/page_join.svg
new file mode 100644
index 0000000..55b6885
--- /dev/null
+++ b/src/images/page_join.svg
@@ -0,0 +1,367 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="page_join.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#e6e6e6;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient3935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9202257,0,0,2.5990709,-3.6450585,-45.649231)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3851-1-7">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7-4" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4-0" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-2.213417,-27.322407)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4468-9"
+       xlink:href="#linearGradient3851-1-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3925">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3927" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3929" />
+    </linearGradient>
+    <linearGradient
+       y2="27.949936"
+       x2="12.861054"
+       y1="22.254391"
+       x1="9.6529655"
+       gradientTransform="matrix(0.6690809,0,0,1.4651161,2.6697792,-19.180232)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3933"
+       xlink:href="#linearGradient3851-1-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1-7-8">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7-4-8" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4-0-2" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-1.6522254,-27.430875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3933-4"
+       xlink:href="#linearGradient3851-1-7-8"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4002">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop4004" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop4006" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.3241465,0,0,1.1683201,-25.648232,-25.662212)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4010"
+       xlink:href="#linearGradient3851-1-7-8"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1-7"
+       id="linearGradient4051"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7720383,0,0,1.6773442,25.64762,-23.808608)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.3241465,0,0,1.1683201,-25.648232,-25.662212)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4010-1"
+       xlink:href="#linearGradient3851-1-7-8-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1-7-8-7">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7-4-8-1" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4-0-2-1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1-7"
+       id="linearGradient4661"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.68711492,0,0,0.96075082,15.468063,-7.3463411)"
+       x1="9.9806023"
+       y1="21.383446"
+       x2="14.933549"
+       y2="27.622316" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="1.6471122"
+     inkscape:cy="19.577846"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:snap-to-guides="false">
+    <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 />
+        <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="layer2"
+     inkscape:label="bg" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="Layer">
+    <rect
+       style="fill:url(#linearGradient3933);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3933"
+       width="10.011781"
+       height="16.119457"
+       x="4.6531086"
+       y="7.4539971" />
+    <rect
+       y="10.119071"
+       x="17.50485"
+       height="10.570345"
+       width="10.281632"
+       id="rect4659"
+       style="fill:url(#linearGradient4661);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3831"
+       width="4.1613708"
+       height="1.3347042"
+       x="2.0526478"
+       y="2.4259815" />
+    <rect
+       y="2.5326481"
+       x="9.945981"
+       height="1.3347042"
+       width="4.1613708"
+       id="rect3851"
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <rect
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3853"
+       width="4.1613708"
+       height="1.3347042"
+       x="18.159315"
+       y="2.4793148" />
+    <rect
+       y="2.4793148"
+       x="26.052649"
+       height="1.3347042"
+       width="4.1613708"
+       id="rect3855"
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <rect
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3857"
+       width="4.1613708"
+       height="1.3347042"
+       x="5.4393148"
+       y="-31.787354"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-31.787354"
+       x="13.545981"
+       height="1.3347042"
+       width="4.1613708"
+       id="rect3859"
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <rect
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3861"
+       width="4.1613708"
+       height="1.3347042"
+       x="21.439314"
+       y="-31.680687"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-1.8140203"
+       x="5.5459805"
+       height="1.3347042"
+       width="4.1613708"
+       id="rect3863"
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <rect
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3865"
+       width="4.1613708"
+       height="1.3347042"
+       x="13.492647"
+       y="-1.760687"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-1.760687"
+       x="21.54598"
+       height="1.3347042"
+       width="4.1613708"
+       id="rect3867"
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <rect
+       y="27.385981"
+       x="2.6393147"
+       height="1.3347042"
+       width="4.1613708"
+       id="rect3871"
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <rect
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3873"
+       width="4.1613708"
+       height="1.3347042"
+       x="10.639315"
+       y="27.439314" />
+    <rect
+       y="27.439314"
+       x="18.745981"
+       height="1.3347042"
+       width="4.1613708"
+       id="rect3875"
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <rect
+       style="fill:#1b892a;fill-opacity:1;stroke:#1b892a;stroke-width:0.80583334;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3877"
+       width="4.1613708"
+       height="1.3347042"
+       x="26.639315"
+       y="27.439314" />
+  </g>
+</svg>
diff --git a/src/images/page_select_all.svg b/src/images/page_select_all.svg
new file mode 100644
index 0000000..b31dde4
--- /dev/null
+++ b/src/images/page_select_all.svg
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="page_select_all.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="22.516994"
+       x1="6.5265112"
+       gradientTransform="matrix(1.1243884,0,0,0.39828594,3.9079699,14.74447)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3081"
+       xlink:href="#linearGradient3851-1"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient3102"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1225992,0,0,0.39870052,3.7666599,6.558986)"
+       x1="6.0073161"
+       y1="21.979418"
+       x2="14.933549"
+       y2="27.622316" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient4665"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1225992,0,0,0.39870052,3.7666599,-1.5476807)"
+       x1="6.0073166"
+       y1="23.584633"
+       x2="13.888355"
+       y2="26.150869" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="-7.980001"
+     inkscape:cy="19.808208"
+     inkscape:document-units="px"
+     inkscape:current-layer="svg2"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1">
+    <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 />
+        <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>
+  <rect
+     style="fill:url(#linearGradient3081);fill-opacity:1;stroke:#000000;stroke-width:0.6;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     id="rect3933"
+     width="16.82477"
+     height="4.38201"
+     x="7.2409496"
+     y="21.984877" />
+  <rect
+     y="13.80693"
+     x="7.094336"
+     height="4.3865709"
+     width="16.797997"
+     id="rect3100"
+     style="fill:url(#linearGradient3102);fill-opacity:1;stroke:#000000;stroke-width:0.6;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <rect
+     style="fill:url(#linearGradient4665);fill-opacity:1;stroke:#000000;stroke-width:0.6;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     id="rect4663"
+     width="16.797997"
+     height="4.3865709"
+     x="7.094336"
+     y="5.7002635" />
+  <rect
+     style="fill:#000000;fill-opacity:1;stroke:none"
+     id="rect3055"
+     width="3.9466667"
+     height="1.9733334"
+     x="-0.053333335"
+     y="0.053333335" />
+  <rect
+     y="1.2914398e-009"
+     x="7.04"
+     height="1.9733334"
+     width="3.9466667"
+     id="rect3825"
+     style="fill:#000000;fill-opacity:1;stroke:none" />
+  <rect
+     style="fill:#000000;fill-opacity:1;stroke:none"
+     id="rect3827"
+     width="3.9466667"
+     height="1.9733334"
+     x="14.026667"
+     y="0.053333335" />
+  <rect
+     y="1.2914327e-009"
+     x="21.066668"
+     height="1.9733334"
+     width="3.9466667"
+     id="rect3829"
+     style="fill:#000000;fill-opacity:1;stroke:none" />
+  <rect
+     style="fill:#000000;fill-opacity:1;stroke:none"
+     id="rect3831"
+     width="3.9466667"
+     height="1.9733334"
+     x="28.053333"
+     y="0.053333335" />
+  <rect
+     y="30.186666"
+     x="-1.2914327e-009"
+     height="1.9733334"
+     width="3.9466667"
+     id="rect3833"
+     style="fill:#000000;fill-opacity:1;stroke:none" />
+  <rect
+     style="fill:#000000;fill-opacity:1;stroke:none"
+     id="rect3835"
+     width="3.9466667"
+     height="1.9733334"
+     x="7.0933332"
+     y="30.133333" />
+  <rect
+     y="30.186666"
+     x="14.08"
+     height="1.9733334"
+     width="3.9466667"
+     id="rect3837"
+     style="fill:#000000;fill-opacity:1;stroke:none" />
+  <rect
+     style="fill:#000000;fill-opacity:1;stroke:none"
+     id="rect3839"
+     width="3.9466667"
+     height="1.9733334"
+     x="21.120001"
+     y="30.133333" />
+  <rect
+     y="30.186666"
+     x="28.106667"
+     height="1.9733334"
+     width="3.9466667"
+     id="rect3841"
+     style="fill:#000000;fill-opacity:1;stroke:none" />
+  <rect
+     y="-0.043239538"
+     x="-28.987036"
+     height="1.9733334"
+     width="3.9466667"
+     id="rect3845"
+     style="fill:#000000;fill-opacity:1;stroke:none"
+     transform="matrix(-8.2627909e-4,-0.99999966,0.99999966,-8.2627909e-4,0,0)" />
+  <rect
+     style="fill:#000000;fill-opacity:1;stroke:none"
+     id="rect3847"
+     width="3.9466667"
+     height="1.9733334"
+     x="-22.00037"
+     y="0.010093745"
+     transform="matrix(-8.2627909e-4,-0.99999966,0.99999966,-8.2627909e-4,0,0)" />
+  <rect
+     y="-0.043239538"
+     x="-14.960369"
+     height="1.9733334"
+     width="3.9466667"
+     id="rect3849"
+     style="fill:#000000;fill-opacity:1;stroke:none"
+     transform="matrix(-8.2627909e-4,-0.99999966,0.99999966,-8.2627909e-4,0,0)" />
+  <rect
+     style="fill:#000000;fill-opacity:1;stroke:none"
+     id="rect3851"
+     width="3.9466667"
+     height="1.9733334"
+     x="-7.9737"
+     y="0.010093745"
+     transform="matrix(-8.2627909e-4,-0.99999966,0.99999966,-8.2627909e-4,0,0)" />
+  <rect
+     transform="matrix(-8.2627909e-4,-0.99999966,0.99999966,-8.2627909e-4,0,0)"
+     style="fill:#000000;fill-opacity:1;stroke:none"
+     id="rect3853"
+     width="3.9466667"
+     height="1.9733334"
+     x="-28.798645"
+     y="30.143593" />
+  <rect
+     transform="matrix(-8.2627909e-4,-0.99999966,0.99999966,-8.2627909e-4,0,0)"
+     y="30.196926"
+     x="-21.811979"
+     height="1.9733334"
+     width="3.9466667"
+     id="rect3855"
+     style="fill:#000000;fill-opacity:1;stroke:none" />
+  <rect
+     transform="matrix(-8.2627909e-4,-0.99999966,0.99999966,-8.2627909e-4,0,0)"
+     style="fill:#000000;fill-opacity:1;stroke:none"
+     id="rect3857"
+     width="3.9466667"
+     height="1.9733334"
+     x="-14.771978"
+     y="30.143593" />
+  <rect
+     transform="matrix(-8.2627909e-4,-0.99999966,0.99999966,-8.2627909e-4,0,0)"
+     y="30.196926"
+     x="-7.7853093"
+     height="1.9733334"
+     width="3.9466667"
+     id="rect3859"
+     style="fill:#000000;fill-opacity:1;stroke:none" />
+</svg>
diff --git a/src/images/page_setup.svg b/src/images/page_setup.svg
new file mode 100644
index 0000000..7e08b86
--- /dev/null
+++ b/src/images/page_setup.svg
@@ -0,0 +1,289 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="page_setup.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#e6e6e6;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient3935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9202257,0,0,2.5990709,-3.6450585,-45.649231)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+    <linearGradient
+       id="linearGradient3851-1">
+      <stop
+         style="stop-color:#fafafa;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7" />
+      <stop
+         style="stop-color:#c1cdd4;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-0.66675033,-27.802407)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4468"
+       xlink:href="#linearGradient3851-1"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851-1"
+       id="linearGradient4503"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.99828843,0,0,1.5982633,-0.35261773,-16.992547)"
+       x1="4.3920174"
+       y1="20.106667"
+       x2="14.933549"
+       y2="27.622316" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3685-4-4"
+       id="linearGradient3763-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0001757,0,0,1.0001944,0.31683859,-1.540927)"
+       x1="12"
+       y1="28"
+       x2="7"
+       y2="23" />
+    <linearGradient
+       id="linearGradient3685-4-4">
+      <stop
+         id="stop3687-6-7"
+         offset="0"
+         style="stop-color:#c78e5b;stop-opacity:1;" />
+      <stop
+         id="stop3689-9-3"
+         offset="1"
+         style="stop-color:#cf7d3e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3675-2-5"
+       id="linearGradient3765-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.76500936,0,0,0.81089378,7.4558201,2.1570054)"
+       x1="2.9597764"
+       y1="23.762827"
+       x2="8.3402863"
+       y2="25.275562" />
+    <linearGradient
+       id="linearGradient3675-2-5">
+      <stop
+         id="stop3677-2-6"
+         offset="0"
+         style="stop-color:#e48e38;stop-opacity:1;" />
+      <stop
+         id="stop3679-4-1"
+         offset="1"
+         style="stop-color:#e5d532;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="15.711069"
+       x2="24.332083"
+       y1="3.2495306"
+       x1="8.3320827"
+       gradientTransform="matrix(1.0001759,0,0,1.0001946,0.997537,-0.4039633)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3879"
+       xlink:href="#linearGradient3665-7-6"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3665-7-6">
+      <stop
+         id="stop3667-7-5"
+         offset="0"
+         style="stop-color:#b7b7b7;stop-opacity:1;" />
+      <stop
+         id="stop3669-5-1"
+         offset="1"
+         style="stop-color:#f1f1f1;stop-opacity:0.99215686;" />
+    </linearGradient>
+    <linearGradient
+       y2="15.711069"
+       x2="24.332083"
+       y1="3.2495306"
+       x1="8.3320827"
+       gradientTransform="matrix(0.76500936,0,0,0.81089378,7.4558201,2.1570054)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5430"
+       xlink:href="#linearGradient3665-7-6"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3685-4-4"
+       id="linearGradient5471"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.76500921,0,0,0.81089361,7.4558194,1.913581)"
+       x1="12"
+       y1="28"
+       x2="7"
+       y2="23" />
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="20.106667"
+       x1="4.3920174"
+       gradientTransform="matrix(1.4281186,0,0,1.9641936,-0.66675033,-27.802407)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4468-2"
+       xlink:href="#linearGradient3851-1-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3851-1-7">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3853-7-6" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3855-4-1" />
+    </linearGradient>
+    <linearGradient
+       y2="27.622316"
+       x2="14.933549"
+       y1="21.716114"
+       x1="7.9814553"
+       gradientTransform="matrix(1.1440975,0,0,2.4521865,0.56438072,-42.219543)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5489"
+       xlink:href="#linearGradient3851-1-7"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="1.633445"
+     inkscape:cy="19.808208"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1">
+    <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 />
+        <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="layer4"
+     inkscape:label="page"
+     style="display:inline">
+    <rect
+       style="fill:url(#linearGradient5489);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3933-4"
+       width="17.119684"
+       height="26.979376"
+       x="3.9557827"
+       y="2.3585558" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="spanner"
+     style="display:inline">
+    <path
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="casaacsascaaca"
+       id="path2891-6"
+       d="M 25.051032,11.076836 C 24.16139,10.980836 23.242071,10.038555 23.123434,9.0990423 23.022711,8.3012253 23.328149,7.9057705 24.28603,7.0223655 25.243896,6.1389776 26.296799,5.4204212 25.816046,4.5896809 24.680222,2.626974 20.928483,3.8251111 19.344325,5.4005775 17.756236,6.9799547 18.165957,12.211782 18.165957,12.211782 l -9.7154814,10.21756 c -0.8168129,0.859027 0.027398,2.726642 0.8884441,3.535684 0.8746143,0.821793 2.6440793,1.393266 3.4719683,0.518785 l 9.434158,-9.965006 c  [...]
+       style="fill:url(#linearGradient5430);fill-opacity:1;stroke:#222222;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;stroke-miterlimit:4;stroke-dasharray:none" />
+    <path
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccsasc"
+       id="path3673-3"
+       d="m 14.340906,15.593792 4.872806,4.917097 -6.402824,6.783823 c -1.119095,1.185684 -3.6242801,0.04583 -4.5900584,-1.28252 -0.768596,-1.057275 -0.8954344,-3.065812 0,-4.004264 l 6.1200764,-6.414136 z"
+       style="fill:url(#linearGradient3765-6);fill-opacity:1;stroke:#634714;stroke-width:0.78747064000000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+    <path
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccaac"
+       id="path3683-4"
+       d="m 16.635935,18.942335 1.530016,1.378369 -6.120076,6.730561 c 0,0 -1.238871,0.07288 -1.530017,-0.389465 -0.306847,-0.487378 0.0053,-1.216455 0.261221,-1.735889 1.254924,-2.548328 5.858856,-5.983576 5.858856,-5.983576 z"
+       style="fill:url(#linearGradient5471);fill-opacity:1;stroke:none;display:inline" />
+    <path
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccaaccaacaaccc"
+       id="path3731-1"
+       d="m 18.778324,19.296452 2.961969,-3.354981 c 0,0 4.722776,0.2158 6.348744,-1.282205 1.146606,-1.056367 1.550574,-2.965346 1.468326,-4.573265 -0.02917,-0.5702777 -0.161221,-1.4267127 -0.683164,-1.5528017 -0.996163,0.933861 -1.914482,2.1403467 -3.0595,3.0378567 -0.890987,0.235854 -1.821027,-0.08042 -2.4535,-0.674167 C 22.745781,10.319156 22.335148,9.3257333 22.458401,8.4642073 22.680888,6.909057 25.853733,6.1746863 25.243009,4.782471 24.970445,4.1611103 23.709638,4.2647254 22.94784 [...]
+       style="fill:none;stroke:#7a8ca4;stroke-width:0.70872468;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+  </g>
+</svg>
diff --git a/src/images/page_split.svg b/src/images/page_split.svg
new file mode 100644
index 0000000..bc08ac7
--- /dev/null
+++ b/src/images/page_split.svg
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="page_split.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3851">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3853" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3855" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3851"
+       id="linearGradient3935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9202257,0,0,1.8622867,-3.7517252,-27.990726)"
+       x1="6.6695275"
+       y1="21.71891"
+       x2="14.933549"
+       y2="27.622316" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="-0.66879019"
+     inkscape:cy="15.638015"
+     inkscape:document-units="px"
+     inkscape:current-layer="svg2"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1">
+    <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 />
+        <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>
+  <rect
+     style="fill:url(#linearGradient3935);fill-opacity:1;stroke:#000000;stroke-width:0.96864289;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     id="rect3933"
+     width="28.733267"
+     height="20.489195"
+     x="1.9403235"
+     y="5.8636303" />
+  <rect
+     style="fill:#a71016;fill-opacity:1;stroke:none"
+     id="rect3781"
+     width="3.0933335"
+     height="6.6666665"
+     x="13.973332"
+     y="11.893333" />
+  <rect
+     y="2.24"
+     x="13.866668"
+     height="6.7200003"
+     width="3.0933335"
+     id="rect3783"
+     style="fill:#a71016;fill-opacity:1;stroke:none" />
+  <rect
+     y="21.813335"
+     x="14.026666"
+     height="6.7733335"
+     width="3.0933335"
+     id="rect3785"
+     style="fill:#a71016;fill-opacity:1;stroke:none" />
+</svg>
diff --git a/src/images/redo.svg b/src/images/redo.svg
index d736f68..8cc41a8 100644
--- a/src/images/redo.svg
+++ b/src/images/redo.svg
@@ -14,31 +14,115 @@
    height="32"
    id="svg2"
    version="1.1"
-   inkscape:version="0.47 r22583"
+   inkscape:version="0.48.2 r9819"
    sodipodi:docname="redo.svg">
   <defs
      id="defs4">
     <linearGradient
-       id="linearGradient3650">
+       id="linearGradient3852">
       <stop
-         style="stop-color:#45d04f;stop-opacity:1;"
+         style="stop-color:#467b3c;stop-opacity:1;"
          offset="0"
-         id="stop3652" />
+         id="stop3854" />
       <stop
-         style="stop-color:#d8ecdc;stop-opacity:1;"
+         style="stop-color:#3d9f3d;stop-opacity:0.99215686;"
          offset="1"
-         id="stop3654" />
+         id="stop3856" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3799">
+      <stop
+         style="stop-color:#dff4e6;stop-opacity:1"
+         offset="0"
+         id="stop3801" />
+      <stop
+         style="stop-color:#4bc82b;stop-opacity:1;"
+         offset="1"
+         id="stop3803" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3777">
+      <stop
+         style="stop-color:#0000ad;stop-opacity:1;"
+         offset="0"
+         id="stop3779" />
+      <stop
+         style="stop-color:#25d4ce;stop-opacity:1;"
+         offset="1"
+         id="stop3781" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3756">
+      <stop
+         id="stop3758"
+         offset="0"
+         style="stop-color:#519aed;stop-opacity:1;" />
+      <stop
+         id="stop3760"
+         offset="1"
+         style="stop-color:#e9dddd;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3728">
+      <stop
+         style="stop-color:#f1f3fb;stop-opacity:1;"
+         offset="0"
+         id="stop3730" />
+      <stop
+         style="stop-color:#273df9;stop-opacity:0;"
+         offset="1"
+         id="stop3732" />
     </linearGradient>
     <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3650"
-       id="linearGradient3656"
-       x1="15.603005"
-       y1="11.415942"
-       x2="14.703928"
-       y2="5.6313658"
+       xlink:href="#linearGradient3728"
+       id="linearGradient3710"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.0480094,0.17867819,-0.16288865,1.1495978,2.2419773,-3.7945046)" />
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.12399072,40.353343)"
+       x1="15.413333"
+       y1="3.4795053"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3756"
+       id="linearGradient3720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.12399072,40.353343)"
+       x1="24.437176"
+       y1="3.4853487"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3777"
+       id="linearGradient3783"
+       x1="1.4276053"
+       y1="16.374115"
+       x2="28.440671"
+       y2="16.374115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0279887,0,0,1.0323478,7.1553463,-2.2096664)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3799"
+       id="linearGradient3834"
+       x1="-9.2158766"
+       y1="17.617861"
+       x2="36.303471"
+       y2="17.617861"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.59369669,0,0,0.71540403,6.9548532,6.6693401)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3852"
+       id="linearGradient3823"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96778437,0,0,0.96778437,1.4449915,4.3327637)"
+       x1="4.4050612"
+       y1="16.300755"
+       x2="23.332099"
+       y2="16.521188" />
   </defs>
   <sodipodi:namedview
      id="base"
@@ -48,16 +132,16 @@
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
      inkscape:zoom="18.75"
-     inkscape:cx="13.946609"
-     inkscape:cy="16.554812"
+     inkscape:cx="14.980246"
+     inkscape:cy="16.744645"
      inkscape:document-units="px"
      inkscape:current-layer="layer2"
      showgrid="true"
      inkscape:snap-grids="false"
-     inkscape:window-width="1285"
-     inkscape:window-height="990"
-     inkscape:window-x="214"
-     inkscape:window-y="35"
+     inkscape:window-width="1349"
+     inkscape:window-height="828"
+     inkscape:window-x="320"
+     inkscape:window-y="43"
      inkscape:window-maximized="0">
     <inkscape:grid
        type="xygrid"
@@ -75,7 +159,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
+        <dc:title></dc:title>
         <cc:license
            rdf:resource="Apache License 2.0" />
         <dc:creator>
@@ -100,13 +184,55 @@
   </metadata>
   <g
      inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="circle"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3710);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3720);stroke-width:1.03536737;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="m 3.1197612,26.155152 c -2.1124368,6.24846 -1.0562184,3.12423 0,0 z"
+       id="path3695"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
      id="layer2"
      inkscape:label="item"
      style="display:inline">
     <path
-       style="fill:url(#linearGradient3656);fill-opacity:1;stroke:#3e773e;stroke-width:0.80000000999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 2.7435209,15.694049 c 0,0 -0.1253927,0.480966 0.4369907,-1.87208 C 3.8743895,10.918745 6.6037093,8.0755264 8.9875804,6.7745262 11.371451,5.473526 13.643428,5.5293861 16.187724,6.0555164 c 2.046302,0.4231508 4.289942,1.5257702 5.655439,2.9107958 1.365497,1.3850258 3.433756,4.3424528 3.433756,4.3424528 L 30.470832,9.103897 28.610894,21.834403 16.416689,20.59974 21.876924,16.023316 C 19.942919,12.6162 17.982538,10.434874 14.290279,9.7507683 11.508491,9.3068022 10.101388,9.396637 [...]
-       id="path2876"
-       sodipodi:nodetypes="cszssccccccsc" />
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="M 24.084362,8.1136233 17.37415,18.514148 26.633331,17.135057 24.084362,8.1136233 z"
+       id="path3872"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path3823"
+       style="fill:url(#linearGradient3834);fill-opacity:1;stroke:#18361c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 12.128149,22.099576 C 9.3414388,20.6292 8.9467117,18.22634 8.9573498,17.829446 c 0.074316,-2.772627 1.3547222,-3.843702 2.0829762,-4.428348 1.911829,-1.534824 6.78796,-1.978204 10.016276,0.849992 0.02892,0.02534 -4.111848,5.095513 -4.073819,5.089966 L 29.515016,16.965628 29.332615,4.3394918 25.342321,9.1658483 C 19.712352,4.2336636 9.4800246,4.0671464 4.7480649,9.8351063 0.56339897,14.93595 0.98478062,20.810375 5.2883913,26.498717"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csssscccsc" />
+    <path
+       style="fill:url(#linearGradient3823);fill-opacity:1;stroke:none"
+       d="M 15.185285,8.8454786 C 5.7088979,8.6520652 2.6693046,19.032185 7.9348779,24.336457 9.2960236,23.564816 10.663089,23.140158 10.974338,22.208052 7.6722827,20.150487 7.0928242,15.551894 11.223282,12.349663 c 2.311195,-0.861978 3.46514,-0.931631 4.786489,-0.848761 1.729731,0.108482 3.333984,0.601468 5.592702,2.26066 C 21.214007,11.03281 18.790994,9.1787352 15.185285,8.8454786 z"
+       id="path3844"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccscc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="top"
+     style="display:none"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:#2f6ab7;stroke-width:1.24076998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path3786"
+       sodipodi:cx="16.213333"
+       sodipodi:cy="17.973333"
+       sodipodi:rx="13.973333"
+       sodipodi:ry="13.706667"
+       d="m 30.186666,17.973333 a 13.973333,13.706667 0 1 1 -27.9466662,0 13.973333,13.706667 0 1 1 27.9466662,0 z"
+       transform="matrix(1.0376908,0,0,1.0578794,-0.937761,-2.9536141)" />
   </g>
 </svg>
diff --git a/src/images/reload.svg b/src/images/reload.svg
index 0de45ad..1714b87 100644
--- a/src/images/reload.svg
+++ b/src/images/reload.svg
@@ -19,73 +19,66 @@
   <defs
      id="defs4">
     <linearGradient
-       id="linearGradient3756">
+       id="linearGradient3852">
       <stop
-         id="stop3758"
+         style="stop-color:#467b3c;stop-opacity:1;"
          offset="0"
-         style="stop-color:#519aed;stop-opacity:1;" />
+         id="stop3854" />
       <stop
-         id="stop3760"
+         style="stop-color:#3d9f3d;stop-opacity:0.99215686;"
          offset="1"
-         style="stop-color:#e9dddd;stop-opacity:0;" />
+         id="stop3856" />
     </linearGradient>
     <linearGradient
-       id="linearGradient3728">
+       id="linearGradient3799">
       <stop
-         style="stop-color:#f1f3fb;stop-opacity:1;"
+         style="stop-color:#aae1be;stop-opacity:1;"
          offset="0"
-         id="stop3730" />
+         id="stop3801" />
       <stop
-         style="stop-color:#273df9;stop-opacity:0;"
+         style="stop-color:#4bc82b;stop-opacity:1;"
          offset="1"
-         id="stop3732" />
+         id="stop3803" />
     </linearGradient>
     <linearGradient
-       id="linearGradient3614">
+       id="linearGradient3777">
       <stop
-         style="stop-color:#2c71d9;stop-opacity:1;"
+         style="stop-color:#0000ad;stop-opacity:1;"
          offset="0"
-         id="stop3616" />
+         id="stop3779" />
       <stop
-         style="stop-color:#ececec;stop-opacity:1;"
+         style="stop-color:#25d4ce;stop-opacity:1;"
          offset="1"
-         id="stop3618" />
+         id="stop3781" />
     </linearGradient>
     <linearGradient
-       id="linearGradient3602">
+       id="linearGradient3756">
       <stop
-         style="stop-color:#f5f5f5;stop-opacity:1;"
+         id="stop3758"
          offset="0"
-         id="stop3604" />
+         style="stop-color:#519aed;stop-opacity:1;" />
       <stop
-         style="stop-color:#141bc6;stop-opacity:1;"
+         id="stop3760"
          offset="1"
-         id="stop3606" />
+         style="stop-color:#e9dddd;stop-opacity:0;" />
     </linearGradient>
     <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3614"
-       id="linearGradient3691"
-       gradientUnits="userSpaceOnUse"
-       x1="15.413333"
-       y1="12.89746"
-       x2="15.413333"
-       y2="31.085577" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3602"
-       id="linearGradient3693"
-       gradientUnits="userSpaceOnUse"
-       x1="15.413333"
-       y1="2.2337441"
-       x2="15.413333"
-       y2="31.085577" />
+       id="linearGradient3728">
+      <stop
+         style="stop-color:#f1f3fb;stop-opacity:1;"
+         offset="0"
+         id="stop3730" />
+      <stop
+         style="stop-color:#273df9;stop-opacity:0;"
+         offset="1"
+         id="stop3732" />
+    </linearGradient>
     <linearGradient
        inkscape:collect="always"
        xlink:href="#linearGradient3728"
        id="linearGradient3710"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.0688752,0,0,-1.1672542,-0.7930209,35.114)"
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
        x1="15.413333"
        y1="3.4795053"
        x2="15.941438"
@@ -95,11 +88,40 @@
        xlink:href="#linearGradient3756"
        id="linearGradient3720"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.0688752,0,0,-1.1672542,-0.7930209,35.114)"
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
        x1="24.437176"
        y1="3.4853487"
        x2="15.941438"
        y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3777"
+       id="linearGradient3783"
+       x1="1.4276053"
+       y1="16.374115"
+       x2="28.440671"
+       y2="16.374115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0279887,0,0,1.0323478,7.1553463,-2.2096664)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3799"
+       id="linearGradient3834"
+       x1="-9.2158766"
+       y1="17.617861"
+       x2="36.303471"
+       y2="17.617861"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3852"
+       id="linearGradient3858"
+       x1="4.4050612"
+       y1="16.300755"
+       x2="23.332099"
+       y2="16.521188"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96778437,0,0,0.96778437,1.3383248,1.0794304)" />
   </defs>
   <sodipodi:namedview
      id="base"
@@ -109,16 +131,16 @@
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
      inkscape:zoom="18.75"
-     inkscape:cx="12.549147"
-     inkscape:cy="16.502353"
+     inkscape:cx="16.76671"
+     inkscape:cy="19.808208"
      inkscape:document-units="px"
      inkscape:current-layer="layer2"
      showgrid="true"
      inkscape:snap-grids="false"
-     inkscape:window-width="1005"
-     inkscape:window-height="751"
-     inkscape:window-x="214"
-     inkscape:window-y="-17"
+     inkscape:window-width="1349"
+     inkscape:window-height="828"
+     inkscape:window-x="525"
+     inkscape:window-y="135"
      inkscape:window-maximized="0">
     <inkscape:grid
        type="xygrid"
@@ -165,19 +187,11 @@
      inkscape:label="circle"
      style="display:inline">
     <path
-       sodipodi:type="arc"
-       style="fill:url(#linearGradient3691);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3693);stroke-width:0.90856528;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-       id="path2820"
-       sodipodi:cx="15.413333"
-       sodipodi:cy="16.559999"
-       sodipodi:rx="13.76"
-       sodipodi:ry="12.613334"
-       d="m 29.173333,16.559999 a 13.76,12.613334 0 1 1 -27.5200003,0 13.76,12.613334 0 1 1 27.5200003,0 z"
-       transform="matrix(1.0537791,0,0,-1.1495772,-0.30224808,35.097001)" />
-    <path
-       style="fill:url(#linearGradient3710);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3720);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-       d="M 28.894346,9.3702377 C 27.010842,13.07042 22.728069,16.870583 17.080503,19.355951 11.585061,21.774374 6.0764534,22.392799 2.1004164,21.400807 c 2.2087693,5.337492 7.4536969,9.09961 13.5842156,9.09961 8.12285,0 14.707722,-6.591694 14.707722,-14.722963 0,-2.303016 -0.556212,-4.465993 -1.498008,-6.4072163 z"
-       id="path3695" />
+       style="fill:url(#linearGradient3710);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3720);stroke-width:1.03536737;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="m 3.2264279,23.061819 c -2.1124368,6.24846 -1.0562184,3.12423 0,0 z"
+       id="path3695"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
   </g>
   <g
      inkscape:groupmode="layer"
@@ -186,27 +200,30 @@
      style="display:inline">
     <path
        style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       d="M 23.308883,5.5222291 16.827886,15.567481 25.770781,14.235498 23.308883,5.5222291 z"
+       d="M 24.191029,5.02029 17.480817,15.420815 26.739998,14.041724 24.191029,5.02029 z"
        id="path3872"
-       sodipodi:nodetypes="cccc" />
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
     <path
-       sodipodi:type="arc"
-       style="fill:none;stroke:#ffffff;stroke-width:3.36740041;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3008"
-       sodipodi:cx="18.133333"
-       sodipodi:cy="19.786667"
-       sodipodi:rx="8.4266663"
-       sodipodi:ry="8.5333338"
-       d="M 26.559999,19.786667 A 8.4266663,8.5333338 0 1 1 16.366947,11.442916"
-       sodipodi:start="0"
-       sodipodi:end="4.5012041"
-       sodipodi:open="true"
-       transform="matrix(0.60281508,0.6467517,-0.63948552,0.59604253,17.699987,-7.0720911)" />
+       id="path3823"
+       style="fill:url(#linearGradient3834);fill-opacity:1;stroke:#204725;stroke-width:1.53441202999999993;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 25.04574,25.291389 C 20.1239,29.658981 11.725874,29.994842 6.2882212,26.041558 3.8402081,24.261803 2.4095333,21.916148 2.0254393,19.476323 1.556364,16.496684 2.6482164,13.376594 5.3542598,10.975278 10.276099,6.6076859 18.674126,6.2718231 24.111778,10.225108 c 0.04872,0.03542 -6.281017,6.258775 -6.232957,6.294764 L 37.550313,15.212319 36.79392,-2.2875395 30.252486,4.0860475 C 20.769582,-2.8082171 6.1239851,-2.2224954 -2.4593731,5.3942938 -11.042732,13.011082 -10.313508,24.7746 [...]
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cssssccccssc"
+       transform="matrix(0.59369669,0,0,0.71540403,7.0615199,3.5760068)" />
+    <path
+       style="fill:url(#linearGradient3858);fill-opacity:1;stroke:none"
+       d="M 14.971951,6.178812 C 7.0422312,6.4120653 1.3893045,16.152186 7.9882112,23.589791 c 0.8045098,0.77647 3.8813318,2.771417 7.5038868,2.500239 6.076112,-0.400327 7.297181,-3.115105 6.816734,-3.219652 -1.211698,-0.26367 -1.183604,1.747421 -6.623135,2.069363 C 7.569448,23.711756 4.3424572,14.798698 11.223282,9.8963297 c 1.609257,-0.962255 3.116069,-1.5700954 4.679822,-1.6487606 1.84087,-0.092606 3.760651,0.5481345 6.019369,2.2073269 C 21.534007,7.7261435 18.57766,6.5120686 14.97195 [...]
+       id="path3844"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccsccscc" />
   </g>
   <g
      inkscape:groupmode="layer"
      id="layer4"
-     inkscape:label="top">
+     inkscape:label="top"
+     style="display:none"
+     sodipodi:insensitive="true">
     <path
        sodipodi:type="arc"
        style="fill:none;stroke:#2f6ab7;stroke-width:1.24076998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
diff --git a/src/images/sidebar.svg b/src/images/sidebar.svg
index ad3c2ae..232b386 100644
--- a/src/images/sidebar.svg
+++ b/src/images/sidebar.svg
@@ -21,25 +21,24 @@
   <defs
      id="defs4">
     <linearGradient
-       id="linearGradient3159">
+       id="linearGradient2828">
       <stop
-         style="stop-color:#e6e6e6;stop-opacity:1;"
+         id="stop2830"
          offset="0"
-         id="stop3161" />
+         style="stop-color:#e6e6e6;stop-opacity:1;" />
       <stop
-         style="stop-color:#5e9aa7;stop-opacity:0;"
+         id="stop2834"
          offset="1"
-         id="stop3163" />
+         style="stop-color:#5e9aa7;stop-opacity:1;" />
     </linearGradient>
     <linearGradient
-       inkscape:collect="always"
        id="linearGradient3134">
       <stop
-         style="stop-color:#dee3e4;stop-opacity:1;"
+         style="stop-color:#ffffff;stop-opacity:1;"
          offset="0"
          id="stop3136" />
       <stop
-         style="stop-color:#dee3e4;stop-opacity:0;"
+         style="stop-color:#b8c5c8;stop-opacity:1;"
          offset="1"
          id="stop3138" />
     </linearGradient>
@@ -48,21 +47,41 @@
        xlink:href="#linearGradient3134"
        id="linearGradient3157"
        gradientUnits="userSpaceOnUse"
-       x1="0.99999994"
-       y1="31.930655"
-       x2="63.361065"
-       y2="31.930655"
-       gradientTransform="matrix(0.7010416,0,0,0.6043896,1.4704382,4.701441)" />
+       x1="4.2422905"
+       y1="58.145554"
+       x2="38.280991"
+       y2="27.284977"
+       gradientTransform="matrix(0.7010416,0,0,0.6043896,-46.590215,4.701441)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2828"
+       id="linearGradient2849"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.092724,0,0,1.0174397,28.779105,-0.79334515)"
+       x1="4.7154722"
+       y1="10.295263"
+       x2="-22.359737"
+       y2="34.304337" />
     <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3159"
-       id="linearGradient3165"
-       x1="62.518417"
-       y1="30.428375"
-       x2="40.084583"
-       y2="30.690311"
+       xlink:href="#linearGradient2828"
+       id="linearGradient3629"
+       x1="-16.24024"
+       y1="35.806011"
+       x2="1.2411834"
+       y2="21.927578"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-30.120087,0)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3134"
+       id="linearGradient3645"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.688908,0,0,0.6311989,3.2671546,3.8016354)" />
+       gradientTransform="matrix(0.67694305,0,0,-0.57657342,2.5227299,42.376898)"
+       x1="4.2422905"
+       y1="58.145554"
+       x2="38.280991"
+       y2="27.284977" />
   </defs>
   <sodipodi:namedview
      id="base"
@@ -74,18 +93,24 @@
      objecttolerance="10"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="14.958333"
-     inkscape:cx="22.945355"
-     inkscape:cy="24.134142"
+     inkscape:zoom="15.895833"
+     inkscape:cx="24"
+     inkscape:cy="24"
      inkscape:document-units="px"
-     inkscape:current-layer="layer1"
+     inkscape:current-layer="layer2"
      width="48px"
      height="48px"
      showgrid="true"
-     inkscape:window-width="1128"
-     inkscape:window-height="928"
-     inkscape:window-x="577"
-     inkscape:window-y="25" />
+     inkscape:window-width="1885"
+     inkscape:window-height="1104"
+     inkscape:window-x="31"
+     inkscape:window-y="31"
+     inkscape:window-maximized="1"
+     inkscape:snap-grids="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3647" />
+  </sodipodi:namedview>
   <metadata
      id="metadata7">
     <rdf:RDF>
@@ -94,7 +119,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
+        <dc:title></dc:title>
         <cc:license
            rdf:resource="Apache License 2.0" />
         <dc:creator>
@@ -123,12 +148,18 @@
      inkscape:label="l1"
      style="display:inline">
     <rect
-       style="opacity:1;fill:url(#linearGradient3157);fill-opacity:1;fill-rule:evenodd;stroke:#24344d;stroke-width:1.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       style="fill:url(#linearGradient3157);fill-opacity:1;fill-rule:evenodd;stroke:#24344d;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
        id="rect2161"
        width="42.984715"
        height="36.924061"
-       x="2.5379691"
-       y="5.5379701" />
+       x="-45.522682"
+       y="5.5379701"
+       transform="scale(-1,1)" />
+    <path
+       style="fill:url(#linearGradient3645);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m 6.2987559,41.554719 0.06291,-32.4690085 25.4647511,-0.1258192 0,-2.6128648 -28.2746971,0 0,35.2076925 2.747037,0 z"
+       id="rect3631"
+       sodipodi:nodetypes="ccccccc" />
   </g>
   <g
      inkscape:label="Layer 1"
@@ -136,11 +167,17 @@
      id="layer1"
      style="display:inline">
     <rect
-       style="opacity:1;fill:url(#linearGradient3165);fill-opacity:1;fill-rule:evenodd;stroke:#24344d;stroke-width:1.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       style="fill:url(#linearGradient3629);fill-opacity:1;fill-rule:evenodd;stroke:#24344d;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
        id="rect3153"
        width="12.739919"
        height="36.920658"
-       x="32.720413"
-       y="5.5396705" />
+       x="-45.460327"
+       y="5.5396705"
+       transform="scale(-1,1)" />
+    <path
+       style="fill:url(#linearGradient2849);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m 33.578607,6.488945 0,35.101671 2.640254,-0.06291 -0.125819,-32.6007529 8.578158,0.06291 -0.06291,-2.5009177 -11.029683,0 z"
+       id="rect2839"
+       sodipodi:nodetypes="ccccccc" />
   </g>
 </svg>
diff --git a/src/images/sidebar_left.svg b/src/images/sidebar_left.svg
new file mode 100644
index 0000000..3122c65
--- /dev/null
+++ b/src/images/sidebar_left.svg
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="48"
+   height="48"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="sidebar_left.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient2828">
+      <stop
+         id="stop2830"
+         offset="0"
+         style="stop-color:#e6e6e6;stop-opacity:1;" />
+      <stop
+         id="stop2834"
+         offset="1"
+         style="stop-color:#5e9aa7;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3134">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3136" />
+      <stop
+         style="stop-color:#b8c5c8;stop-opacity:1;"
+         offset="1"
+         id="stop3138" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3134"
+       id="linearGradient3157"
+       gradientUnits="userSpaceOnUse"
+       x1="4.2422905"
+       y1="58.145554"
+       x2="38.280991"
+       y2="27.284977"
+       gradientTransform="matrix(0.7010416,0,0,0.6043896,-46.590215,4.701441)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2828"
+       id="linearGradient2849"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.092724,0,0,1.0174397,-1.4100518,-0.79334515)"
+       x1="4.7154722"
+       y1="10.295263"
+       x2="-22.359737"
+       y2="34.304337" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2828"
+       id="linearGradient3629"
+       x1="-16.24024"
+       y1="35.806011"
+       x2="1.2411834"
+       y2="21.927578"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3134"
+       id="linearGradient3633"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.7010416,0,0,0.6043896,45.654281,10.651302)"
+       x1="4.2422905"
+       y1="58.145554"
+       x2="38.280991"
+       y2="27.284977" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3134"
+       id="linearGradient3640"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.7010416,0,0,0.6043896,25.00312,4.9819058)"
+       x1="4.2422905"
+       y1="58.145554"
+       x2="38.280991"
+       y2="27.284977" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3134"
+       id="linearGradient3645"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.67694305,0,0,-0.57657342,15.205243,42.376898)"
+       x1="4.2422905"
+       y1="58.145554"
+       x2="38.280991"
+       y2="27.284977" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.895833"
+     inkscape:cx="24"
+     inkscape:cy="24"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     width="48px"
+     height="48px"
+     showgrid="true"
+     inkscape:window-width="1885"
+     inkscape:window-height="1104"
+     inkscape:window-x="31"
+     inkscape:window-y="31"
+     inkscape:window-maximized="1"
+     inkscape:snap-grids="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3647" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer2"
+     inkscape:label="l1"
+     style="display:inline">
+    <rect
+       style="fill:url(#linearGradient3157);fill-opacity:1;fill-rule:evenodd;stroke:#24344d;stroke-width:1.79999994999999990;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect2161"
+       width="42.984715"
+       height="36.924061"
+       x="-45.522682"
+       y="5.5379701"
+       transform="scale(-1,1)" />
+    <path
+       style="fill:url(#linearGradient3645);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m 18.981269,41.554719 0.06291,-32.4690085 25.464751,-0.1258192 0,-2.6128648 -28.274697,0 0,35.2076925 2.747037,0 z"
+       id="rect3631"
+       sodipodi:nodetypes="ccccccc" />
+  </g>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline">
+    <rect
+       style="fill:url(#linearGradient3629);fill-opacity:1;fill-rule:evenodd;stroke:#24344d;stroke-width:1.79999994999999990;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3153"
+       width="12.739919"
+       height="36.920658"
+       x="-15.34024"
+       y="5.5396705"
+       transform="scale(-1,1)" />
+    <path
+       style="fill:url(#linearGradient2849);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m 3.3894502,6.488945 0,35.101671 2.6402534,-0.06291 -0.1258191,-32.6007529 8.5781585,0.06291 -0.06291,-2.5009177 -11.0296828,0 z"
+       id="rect2839"
+       sodipodi:nodetypes="ccccccc" />
+  </g>
+</svg>
diff --git a/src/images/snap_to_grid.svg b/src/images/snap_to_grid.svg
new file mode 100644
index 0000000..7f811b2
--- /dev/null
+++ b/src/images/snap_to_grid.svg
@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="snap_to_grid.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3821">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3823" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3825" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3852">
+      <stop
+         style="stop-color:#467b3c;stop-opacity:1;"
+         offset="0"
+         id="stop3854" />
+      <stop
+         style="stop-color:#3d9f3d;stop-opacity:0.99215686;"
+         offset="1"
+         id="stop3856" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3799">
+      <stop
+         style="stop-color:#aae1be;stop-opacity:1;"
+         offset="0"
+         id="stop3801" />
+      <stop
+         style="stop-color:#4bc82b;stop-opacity:1;"
+         offset="1"
+         id="stop3803" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3777">
+      <stop
+         style="stop-color:#0000ad;stop-opacity:1;"
+         offset="0"
+         id="stop3779" />
+      <stop
+         style="stop-color:#25d4ce;stop-opacity:1;"
+         offset="1"
+         id="stop3781" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3756">
+      <stop
+         id="stop3758"
+         offset="0"
+         style="stop-color:#519aed;stop-opacity:1;" />
+      <stop
+         id="stop3760"
+         offset="1"
+         style="stop-color:#e9dddd;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3728">
+      <stop
+         style="stop-color:#f1f3fb;stop-opacity:1;"
+         offset="0"
+         id="stop3730" />
+      <stop
+         style="stop-color:#273df9;stop-opacity:0;"
+         offset="1"
+         id="stop3732" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3728"
+       id="linearGradient3710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+       x1="15.413333"
+       y1="3.4795053"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3756"
+       id="linearGradient3720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+       x1="24.437176"
+       y1="3.4853487"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3777"
+       id="linearGradient3783"
+       x1="1.4276053"
+       y1="16.374115"
+       x2="28.440671"
+       y2="16.374115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0279887,0,0,1.0323478,7.1553463,-2.2096664)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3799"
+       id="linearGradient3834"
+       x1="-9.2158766"
+       y1="17.617861"
+       x2="36.303471"
+       y2="17.617861"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3852"
+       id="linearGradient3858"
+       x1="4.4050612"
+       y1="16.300755"
+       x2="23.332099"
+       y2="16.521188"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96778437,0,0,0.96778437,1.3383248,1.0794304)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3821"
+       id="linearGradient3827"
+       x1="18.113333"
+       y1="7.04"
+       x2="27.966665"
+       y2="17.066668"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8613736,0,0,0.72722922,-5.4868851,8.5239213)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3821-7"
+       id="linearGradient3827-1"
+       x1="18.113333"
+       y1="7.04"
+       x2="27.966665"
+       y2="17.066668"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8613736,0,0,0.72722922,-5.4868851,8.5239213)" />
+    <linearGradient
+       id="linearGradient3821-7">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3823-4" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3825-0" />
+    </linearGradient>
+    <linearGradient
+       y2="17.066668"
+       x2="27.966665"
+       y1="7.04"
+       x1="18.113333"
+       gradientTransform="matrix(0.97315279,0,0,0.73574929,-6.6212502,8.7314849)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3851"
+       xlink:href="#linearGradient3821-7"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="-0.19329"
+     inkscape:cy="19.808208"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1">
+    <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 />
+        <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="layer2"
+     inkscape:label="lines">
+    <path
+       style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 5.093333,1.066667 c 0,29.866667 0,29.866667 0,29.866667"
+       id="path3057"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3831"
+       d="m 29.519999,1.3866669 c 0,29.8666661 0,29.8666661 0,29.8666661"
+       style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3833"
+       d="m 0.9866663,6.7733337 c 29.8666677,0 29.8666677,0 29.8666677,0"
+       style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3837"
+       d="m 1.0933331,13.866666 c 29.8666679,0 29.8666679,0 29.8666679,0"
+       style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 0.9333327,28.426667 c 29.8666683,0 29.8666683,0 29.8666683,0"
+       id="path3839"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3832"
+       d="m 13.146667,1.0133336 c 0,29.8666664 0,29.8666664 0,29.8666664"
+       style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 21.413334,1.0133337 c 0,29.8666673 0,29.8666673 0,29.8666673"
+       id="path3906"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 0.933333,21.013333 c 29.866668,0 29.866668,0 29.866668,0"
+       id="path3910"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="box">
+    <rect
+       style="fill:url(#linearGradient3851);fill-opacity:1;stroke:#000000;stroke-width:0.84616572;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3051-9"
+       width="19.099747"
+       height="17.108625"
+       x="5.3679929"
+       y="6.9656868" />
+  </g>
+</svg>
diff --git a/src/images/splash_screen.png b/src/images/splash_screen.png
new file mode 100644
index 0000000..7646e3d
Binary files /dev/null and b/src/images/splash_screen.png differ
diff --git a/src/images/splash_screen.svg b/src/images/splash_screen.svg
new file mode 100644
index 0000000..152cbe1
--- /dev/null
+++ b/src/images/splash_screen.svg
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="300"
+   height="200"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="splash_screen.svg"
+   inkscape:export-filename="D:\work\icons\splash_screen.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3837">
+      <stop
+         style="stop-color:#00a0e2;stop-opacity:1;"
+         offset="0"
+         id="stop3839" />
+      <stop
+         style="stop-color:#6ca3b9;stop-opacity:1"
+         offset="1"
+         id="stop3841" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3755">
+      <stop
+         id="stop3763"
+         offset="0"
+         style="stop-color:#4471a6;stop-opacity:1;" />
+      <stop
+         style="stop-color:#cdd6de;stop-opacity:1;"
+         offset="1"
+         id="stop3759" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3755"
+       id="linearGradient3761"
+       x1="131.57895"
+       y1="1.9138784"
+       x2="130.14354"
+       y2="183.73206"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0806175,0,0,1.0294118,0.03857296,852.36218)" />
+    <filter
+       inkscape:collect="always"
+       id="filter3825"
+       x="-0.08313741"
+       width="1.1662748"
+       y="-0.15224844"
+       height="1.3044969">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="3.1394306"
+         id="feGaussianBlur3827" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3837"
+       id="linearGradient3843"
+       x1="114.31874"
+       y1="78.254387"
+       x2="154.7113"
+       y2="159.10545"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.77369385,0.38684724)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.585"
+     inkscape:cx="150"
+     inkscape:cy="100"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     width="200px"
+     inkscape:window-width="1366"
+     inkscape:window-height="706"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="bg"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-852.36218)">
+    <rect
+       style="fill:url(#linearGradient3761);fill-opacity:1;stroke:none"
+       id="rect2985"
+       width="301.43539"
+       height="200.95694"
+       x="-0.47846889"
+       y="852.36218" />
+    <rect
+       style="fill:#425c7a;fill-opacity:1;stroke:none"
+       id="rect3765"
+       width="301.37759"
+       height="29.607269"
+       x="-0.61869133"
+       y="1023.1756" />
+    <rect
+       style="fill:#6f899f;fill-opacity:1;stroke:none"
+       id="rect3776"
+       width="264.99033"
+       height="4.2553191"
+       x="8.8974857"
+       y="85.106384"
+       transform="translate(0,852.36218)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="logo shadow">
+    <path
+       style="fill:#181f22;fill-opacity:1;stroke:none;stroke-width:1.60142027999999990;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;filter:url(#filter3825)"
+       d="m 102.998,146.93595 c 0.0423,-8.42373 -0.28656,-17.1743 -0.0825,-27.20912 1.9508,-5.33144 9.07107,-10.67746 15.76307,-10.47359 8.11254,-0.0279 8.72161,4.74915 12.65039,4.75989 3.92879,0.0107 5.64597,-3.96254 9.45516,-4.88958 3.9315,-0.9568 12.86465,-0.75632 16.43914,6.66939 4.1407,8.60194 12.32994,25.67525 12.32994,25.67525 0,0 9.20981,-18.31317 14.30353,-29.82416 0.70722,-1.59822 3.76338,-2.90097 6.65685,-1.79916 2.89346,1.10181 3.37444,3.13775 2.68423,4.67358 -5.7231,12.73497 [...]
+       id="path3790-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="scczsscszssassassasssassas" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="text">
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3768"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#e8e8eb;fill-opacity:1;stroke:none;font-family:Sans"
+       transform="translate(7.2146999e-8,-7.7369443)"><flowRegion
+         id="flowRegion3770"><rect
+           id="rect3772"
+           width="240.2321"
+           height="86.65377"
+           x="20.502901"
+           y="41.005802"
+           style="fill:#e8e8eb;fill-opacity:1;stroke:none" /></flowRegion><flowPara
+         id="flowPara3774"
+         style="font-size:56px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#e8e8eb;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial Bold">Metview</flowPara></flowRoot>  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="logo"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3843);fill-opacity:1;stroke:#294099;stroke-width:1.60142028;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 99.795396,139.6971 c 0.0423,-8.42373 -0.28656,-17.1743 -0.0825,-27.20912 1.950804,-5.33144 9.071074,-10.67746 15.763074,-10.47359 8.11254,-0.0279 8.72161,4.74915 12.65039,4.75989 3.92879,0.0107 5.64597,-3.96254 9.45516,-4.88958 3.9315,-0.9568 12.86465,-0.75632 16.43914,6.66939 4.1407,8.60194 12.32994,25.67525 12.32994,25.67525 0,0 9.20981,-18.31317 14.30353,-29.82416 0.70722,-1.59822 3.76338,-2.90097 6.65685,-1.79916 2.89346,1.10181 3.37444,3.13775 2.68423,4.67358 -5.7231,12. [...]
+       id="path3790"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="scczsscszssassassasssassas" />
+  </g>
+</svg>
diff --git a/src/images/text_edit.svg b/src/images/text_edit.svg
new file mode 100644
index 0000000..d4b1088
--- /dev/null
+++ b/src/images/text_edit.svg
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="text_edit.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3770">
+      <stop
+         style="stop-color:#003380;stop-opacity:1;"
+         offset="0"
+         id="stop3772" />
+      <stop
+         style="stop-color:#728197;stop-opacity:1;"
+         offset="1"
+         id="stop3774" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3674">
+      <stop
+         style="stop-color:#f0c7c1;stop-opacity:1;"
+         offset="0"
+         id="stop3676" />
+      <stop
+         style="stop-color:#de1a08;stop-opacity:0.99215686;"
+         offset="1"
+         id="stop3678" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3770"
+       id="linearGradient3776"
+       x1="1.9993501"
+       y1="1026.3696"
+       x2="18.444277"
+       y2="1056.4508"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.53730146,0,0,0.53730141,8.2858437,442.50522)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3774"
+       id="linearGradient3786"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4279801,0,0,1.3164307,17.046356,-324.54067)"
+       x1="13.307544"
+       y1="1021.8786"
+       x2="31.876209"
+       y2="1031.1011" />
+    <linearGradient
+       id="linearGradient3774">
+      <stop
+         style="stop-color:#f1f1f1;stop-opacity:1;"
+         offset="0"
+         id="stop3776" />
+      <stop
+         style="stop-color:#dddddd;stop-opacity:1;"
+         offset="1"
+         id="stop3778" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3774"
+       id="linearGradient3780"
+       x1="13.307544"
+       y1="1021.8786"
+       x2="31.876209"
+       y2="1031.1011"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0699504,0,0,1.3164372,-10.384106,-324.54736)" />
+    <linearGradient
+       id="linearGradient3846">
+      <stop
+         style="stop-color:#f1f1f1;stop-opacity:1;"
+         offset="0"
+         id="stop3848" />
+      <stop
+         style="stop-color:#dddddd;stop-opacity:1;"
+         offset="1"
+         id="stop3850" />
+    </linearGradient>
+    <linearGradient
+       y2="1031.1011"
+       x2="31.876209"
+       y1="1021.8786"
+       x1="13.307544"
+       gradientTransform="matrix(1.0699504,0,0,1.3164372,-10.384106,-324.54727)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3856"
+       xlink:href="#linearGradient3774"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3774-7"
+       id="linearGradient3780-1"
+       x1="13.307544"
+       y1="1021.8786"
+       x2="31.876209"
+       y2="1031.1011"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0699504,0,0,1.3164372,-10.384106,-324.54736)" />
+    <linearGradient
+       id="linearGradient3774-7">
+      <stop
+         style="stop-color:#f1f1f1;stop-opacity:1;"
+         offset="0"
+         id="stop3776-4" />
+      <stop
+         style="stop-color:#dddddd;stop-opacity:1;"
+         offset="1"
+         id="stop3778-0" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="14.1875"
+     inkscape:cx="15.788546"
+     inkscape:cy="16"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="true"
+     inkscape:snap-to-guides="false"
+     inkscape:window-width="926"
+     inkscape:window-height="912"
+     inkscape:window-x="812"
+     inkscape:window-y="50"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#646464;stroke-width:0.7;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3782"
+       width="28"
+       height="24.999949"
+       x="2"
+       y="1025.3622"
+       ry="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:23.29074668999999900px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#333333;fill-opacity:1;stroke:none;font-family:Times New Roman;-inkscape-font-specification:'Times New Roman,'"
+       x="9.2929001"
+       y="1013.3822"
+       id="text3889"
+       sodipodi:linespacing="125%"
+       transform="scale(0.96848127,1.0325445)"><tspan
+         sodipodi:role="line"
+         id="tspan3891"
+         x="9.2929001"
+         y="1013.3822">T</tspan></text>
+    <rect
+       y="1022.3622"
+       x="2"
+       height="2.9999998"
+       width="28"
+       id="rect3772"
+       style="fill:#ffccaa;fill-opacity:1;stroke:#646464;stroke-width:0.69999999999999996;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       ry="0.31111109" />
+  </g>
+</svg>
diff --git a/src/images/undo.svg b/src/images/undo.svg
index 29d3b8f..02ea8ce 100644
--- a/src/images/undo.svg
+++ b/src/images/undo.svg
@@ -14,31 +14,115 @@
    height="32"
    id="svg2"
    version="1.1"
-   inkscape:version="0.47 r22583"
+   inkscape:version="0.48.2 r9819"
    sodipodi:docname="undo.svg">
   <defs
      id="defs4">
     <linearGradient
-       id="linearGradient3679">
+       id="linearGradient3852">
       <stop
-         id="stop3681"
+         style="stop-color:#c26e1e;stop-opacity:1;"
          offset="0"
-         style="stop-color:#ebb938;stop-opacity:1;" />
+         id="stop3854" />
       <stop
-         id="stop3683"
+         style="stop-color:#fdc030;stop-opacity:0.99215686;"
          offset="1"
-         style="stop-color:#e9e998;stop-opacity:1;" />
+         id="stop3856" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3799">
+      <stop
+         style="stop-color:#f2ec60;stop-opacity:1;"
+         offset="0"
+         id="stop3801" />
+      <stop
+         style="stop-color:#ecc118;stop-opacity:1;"
+         offset="1"
+         id="stop3803" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3777">
+      <stop
+         style="stop-color:#0000ad;stop-opacity:1;"
+         offset="0"
+         id="stop3779" />
+      <stop
+         style="stop-color:#25d4ce;stop-opacity:1;"
+         offset="1"
+         id="stop3781" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3756">
+      <stop
+         id="stop3758"
+         offset="0"
+         style="stop-color:#519aed;stop-opacity:1;" />
+      <stop
+         id="stop3760"
+         offset="1"
+         style="stop-color:#e9dddd;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3728">
+      <stop
+         style="stop-color:#f1f3fb;stop-opacity:1;"
+         offset="0"
+         id="stop3730" />
+      <stop
+         style="stop-color:#273df9;stop-opacity:0;"
+         offset="1"
+         id="stop3732" />
     </linearGradient>
     <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3679"
-       id="linearGradient3656"
-       x1="15.603005"
-       y1="11.415942"
-       x2="14.703928"
-       y2="5.6313658"
+       xlink:href="#linearGradient3728"
+       id="linearGradient3710"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.0480094,0.17867819,0.16288865,1.1495978,30.960449,-3.7945046)" />
+       gradientTransform="matrix(-1.1066784,0,0,-1.2085368,31.215951,40.353343)"
+       x1="15.413333"
+       y1="3.4795053"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3756"
+       id="linearGradient3720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.1066784,0,0,-1.2085368,31.215951,40.353343)"
+       x1="24.437176"
+       y1="3.4853487"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3777"
+       id="linearGradient3783"
+       x1="1.4276053"
+       y1="16.374115"
+       x2="28.440671"
+       y2="16.374115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0279887,0,0,1.0323478,7.1553463,-2.2096664)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3799"
+       id="linearGradient3834"
+       x1="-9.2158766"
+       y1="17.617861"
+       x2="36.303471"
+       y2="17.617861"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.59369669,0,0,0.71540403,24.385089,6.6693401)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3852"
+       id="linearGradient3823"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.96778437,0,0,0.96778437,29.89495,4.3327637)"
+       x1="4.4050612"
+       y1="16.300755"
+       x2="23.332099"
+       y2="16.521188" />
   </defs>
   <sodipodi:namedview
      id="base"
@@ -48,16 +132,16 @@
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
      inkscape:zoom="18.75"
-     inkscape:cx="13.946609"
-     inkscape:cy="16.554812"
+     inkscape:cx="14.980246"
+     inkscape:cy="16.22725"
      inkscape:document-units="px"
      inkscape:current-layer="layer2"
      showgrid="true"
      inkscape:snap-grids="false"
-     inkscape:window-width="1285"
-     inkscape:window-height="990"
-     inkscape:window-x="214"
-     inkscape:window-y="35"
+     inkscape:window-width="1349"
+     inkscape:window-height="828"
+     inkscape:window-x="320"
+     inkscape:window-y="43"
      inkscape:window-maximized="0">
     <inkscape:grid
        type="xygrid"
@@ -75,7 +159,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
+        <dc:title></dc:title>
         <cc:license
            rdf:resource="Apache License 2.0" />
         <dc:creator>
@@ -100,13 +184,55 @@
   </metadata>
   <g
      inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="circle"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient3710);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3720);stroke-width:1.03536737;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="m 28.220181,26.155152 c 2.112436,6.24846 1.056218,3.12423 0,0 z"
+       id="path3695"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
      id="layer2"
      inkscape:label="item"
      style="display:inline">
     <path
-       style="fill:url(#linearGradient3656);fill-opacity:1;stroke:#b88a17;stroke-width:0.80000000999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 30.458905,15.694049 c 0,0 0.125393,0.480966 -0.43699,-1.87208 C 29.328037,10.918745 26.598717,8.0755264 24.214846,6.7745262 21.830975,5.473526 19.558998,5.5293861 17.014702,6.0555164 14.9684,6.4786672 12.72476,7.5812866 11.359263,8.9663122 9.9937663,10.351338 7.9255073,13.308765 7.9255073,13.308765 L 2.7315943,9.103897 4.5915323,21.834403 16.785737,20.59974 11.325502,16.023316 c 1.934005,-3.407116 3.894386,-5.588442 7.586645,-6.2725477 2.781788,-0.4439661 4.188891,-0.3541304  [...]
-       id="path2876"
-       sodipodi:nodetypes="cszssccccccsc" />
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="M 7.2555798,8.1136233 13.965792,18.514148 4.7066108,17.135057 7.2555798,8.1136233 z"
+       id="path3872"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path3823"
+       style="fill:url(#linearGradient3834);fill-opacity:1;stroke:#633624;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+       d="m 19.211793,22.099576 c 2.78671,-1.470376 3.181437,-3.873236 3.170799,-4.27013 -0.07432,-2.772627 -1.354722,-3.843702 -2.082976,-4.428348 -1.911829,-1.534824 -6.78796,-1.978204 -10.016276,0.849992 -0.02892,0.02534 4.111848,5.095513 4.073819,5.089966 L 1.8249258,16.965628 2.0073268,4.3394918 5.9976208,9.1658483 C 11.62759,4.2336636 21.859917,4.0671464 26.591877,9.8351063 30.776543,14.93595 30.355161,20.810375 26.05155,26.498717"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csssscccsc" />
+    <path
+       style="fill:url(#linearGradient3823);fill-opacity:1;stroke:none"
+       d="m 16.154657,8.8454786 c 9.476387,-0.1934134 12.51598,10.1867064 7.250407,15.4909784 -1.361146,-0.771641 -2.728211,-1.196299 -3.03946,-2.128405 3.302055,-2.057565 3.881514,-6.656158 -0.248944,-9.858389 -2.311195,-0.861978 -3.46514,-0.931631 -4.786489,-0.848761 -1.729731,0.108482 -3.333984,0.601468 -5.5927022,2.26066 C 10.125935,11.03281 12.548948,9.1787352 16.154657,8.8454786 z"
+       id="path3844"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccscc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="top"
+     style="display:none"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:#2f6ab7;stroke-width:1.24076998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path3786"
+       sodipodi:cx="16.213333"
+       sodipodi:cy="17.973333"
+       sodipodi:rx="13.973333"
+       sodipodi:ry="13.706667"
+       d="m 30.186666,17.973333 a 13.973333,13.706667 0 1 1 -27.9466662,0 13.973333,13.706667 0 1 1 27.9466662,0 z"
+       transform="matrix(1.0376908,0,0,1.0578794,-0.937761,-2.9536141)" />
   </g>
 </svg>
diff --git a/src/images/unknown.svg b/src/images/unknown.svg
new file mode 100644
index 0000000..e29e0a7
--- /dev/null
+++ b/src/images/unknown.svg
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="unknown.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3614">
+      <stop
+         style="stop-color:#cecece;stop-opacity:1;"
+         offset="0"
+         id="stop3616" />
+      <stop
+         style="stop-color:#fbfbfb;stop-opacity:1;"
+         offset="1"
+         id="stop3618" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3614"
+       id="linearGradient3691"
+       gradientUnits="userSpaceOnUse"
+       x1="15.413333"
+       y1="12.89746"
+       x2="15.413333"
+       y2="31.085577" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3614"
+       id="linearGradient3693"
+       gradientUnits="userSpaceOnUse"
+       x1="15.413333"
+       y1="2.2337441"
+       x2="15.413333"
+       y2="31.085577" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3614"
+       id="linearGradient3710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0688752,0,0,-1.1672542,-33.433021,42.207333)"
+       x1="15.413333"
+       y1="3.4795053"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3614"
+       id="linearGradient3720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0688752,0,0,-1.1672542,-33.433021,42.207333)"
+       x1="24.437176"
+       y1="3.4853487"
+       x2="15.941438"
+       y2="18.883736" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="10.032489"
+     inkscape:cy="16.374922"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1328"
+     inkscape:window-height="1106"
+     inkscape:window-x="2504"
+     inkscape:window-y="65"
+     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 />
+        <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="layer3"
+     inkscape:label="circle"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3691);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3693);stroke-width:0.90856528;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path2820"
+       sodipodi:cx="15.413333"
+       sodipodi:cy="16.559999"
+       sodipodi:rx="13.76"
+       sodipodi:ry="12.613334"
+       d="m 29.173333,16.559999 a 13.76,12.613334 0 1 1 -27.5200003,0 13.76,12.613334 0 1 1 27.5200003,0 z"
+       transform="matrix(1.0537791,0,0,-1.1495772,-0.30224808,35.097001)" />
+    <text
+       xml:space="preserve"
+       style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#808080;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Adobe Courier Bold"
+       x="7.52"
+       y="25.759998"
+       id="text3613"><tspan
+         sodipodi:role="line"
+         id="tspan3615"
+         x="7.52"
+         y="25.759998"
+         style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#808080;font-family:Sans;-inkscape-font-specification:Adobe Courier Bold">?</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="item"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Calibri;-inkscape-font-specification:Calibri"
+       x="3.8399999"
+       y="21.973333"
+       id="text3783"><tspan
+         sodipodi:role="line"
+         id="tspan3785"
+         x="3.8399999"
+         y="21.973333" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="7.2533331"
+       y="15.146667"
+       id="text3787"><tspan
+         sodipodi:role="line"
+         id="tspan3789"
+         x="7.2533331"
+         y="15.146667" /></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="top"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:#888888;stroke-width:1.24076998000000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path3786"
+       sodipodi:cx="16.213333"
+       sodipodi:cy="17.973333"
+       sodipodi:rx="13.973333"
+       sodipodi:ry="13.706667"
+       d="m 30.186666,17.973333 a 13.973333,13.706667 0 1 1 -27.9466662,0 13.973333,13.706667 0 1 1 27.9466662,0 z"
+       transform="matrix(1.0376908,0,0,1.0578794,-0.937761,-2.9536141)" />
+  </g>
+</svg>
diff --git a/src/images/view_grid.svg b/src/images/view_grid.svg
new file mode 100644
index 0000000..db28d68
--- /dev/null
+++ b/src/images/view_grid.svg
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.2 r9819"
+   sodipodi:docname="view_grid.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3852">
+      <stop
+         style="stop-color:#467b3c;stop-opacity:1;"
+         offset="0"
+         id="stop3854" />
+      <stop
+         style="stop-color:#3d9f3d;stop-opacity:0.99215686;"
+         offset="1"
+         id="stop3856" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3799">
+      <stop
+         style="stop-color:#aae1be;stop-opacity:1;"
+         offset="0"
+         id="stop3801" />
+      <stop
+         style="stop-color:#4bc82b;stop-opacity:1;"
+         offset="1"
+         id="stop3803" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3777">
+      <stop
+         style="stop-color:#0000ad;stop-opacity:1;"
+         offset="0"
+         id="stop3779" />
+      <stop
+         style="stop-color:#25d4ce;stop-opacity:1;"
+         offset="1"
+         id="stop3781" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3756">
+      <stop
+         id="stop3758"
+         offset="0"
+         style="stop-color:#519aed;stop-opacity:1;" />
+      <stop
+         id="stop3760"
+         offset="1"
+         style="stop-color:#e9dddd;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3728">
+      <stop
+         style="stop-color:#f1f3fb;stop-opacity:1;"
+         offset="0"
+         id="stop3730" />
+      <stop
+         style="stop-color:#273df9;stop-opacity:0;"
+         offset="1"
+         id="stop3732" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3728"
+       id="linearGradient3710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+       x1="15.413333"
+       y1="3.4795053"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3756"
+       id="linearGradient3720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+       x1="24.437176"
+       y1="3.4853487"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3777"
+       id="linearGradient3783"
+       x1="1.4276053"
+       y1="16.374115"
+       x2="28.440671"
+       y2="16.374115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0279887,0,0,1.0323478,7.1553463,-2.2096664)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3799"
+       id="linearGradient3834"
+       x1="-9.2158766"
+       y1="17.617861"
+       x2="36.303471"
+       y2="17.617861"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3852"
+       id="linearGradient3858"
+       x1="4.4050612"
+       y1="16.300755"
+       x2="23.332099"
+       y2="16.521188"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96778437,0,0,0.96778437,1.3383248,1.0794304)" />
+    <linearGradient
+       y2="17.066668"
+       x2="27.966665"
+       y1="7.04"
+       x1="18.113333"
+       gradientTransform="matrix(0.97315279,0,0,0.73574929,-6.8879173,8.7581518)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3851"
+       xlink:href="#linearGradient3821-7"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3821-7">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3823-4" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3825-0" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.75"
+     inkscape:cx="-0.45264602"
+     inkscape:cy="19.808208"
+     inkscape:document-units="px"
+     inkscape:current-layer="svg2"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1881"
+     inkscape:window-height="1026"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1">
+    <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 />
+        <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>
+  <path
+     style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 4.8266667,1.0933339 c 0,29.8666661 0,29.8666661 0,29.8666661"
+     id="path3057-4"
+     inkscape:connector-curvature="0" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path3831-8"
+     d="m 29.253332,1.4133338 c 0,29.8666652 0,29.8666652 0,29.8666652"
+     style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path3833-8"
+     d="m 0.71999967,6.8000006 c 29.86666733,0 29.86666733,0 29.86666733,0"
+     style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path3837-2"
+     d="m 0.82666667,13.893333 c 29.86666733,0 29.86666733,0 29.86666733,0"
+     style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 0.66666567,28.453333 c 29.86666833,0 29.86666833,0 29.86666833,0"
+     id="path3839-4"
+     inkscape:connector-curvature="0" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path3832"
+     d="m 12.88,1.0400005 c 0,29.8666655 0,29.8666655 0,29.8666655"
+     style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 21.146667,1.0400006 c 0,29.8666664 0,29.8666664 0,29.8666664"
+     id="path3906"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:none;stroke:#010098;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 0.66666667,21.039999 c 29.86666733,0 29.86666733,0 29.86666733,0"
+     id="path3910"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/src/images/visualise.svg b/src/images/visualise.svg
new file mode 100644
index 0000000..9814cc3
--- /dev/null
+++ b/src/images/visualise.svg
@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="visualise.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective35" />
+    <linearGradient
+       id="linearGradient3852">
+      <stop
+         style="stop-color:#467b3c;stop-opacity:1;"
+         offset="0"
+         id="stop3854" />
+      <stop
+         style="stop-color:#3d9f3d;stop-opacity:0.99215686;"
+         offset="1"
+         id="stop3856" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3799">
+      <stop
+         style="stop-color:#aae1be;stop-opacity:1;"
+         offset="0"
+         id="stop3801" />
+      <stop
+         style="stop-color:#4bc82b;stop-opacity:1;"
+         offset="1"
+         id="stop3803" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3777">
+      <stop
+         style="stop-color:#5b7db3;stop-opacity:1;"
+         offset="0"
+         id="stop3779" />
+      <stop
+         style="stop-color:#2589ce;stop-opacity:1;"
+         offset="1"
+         id="stop3781" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3756">
+      <stop
+         id="stop3758"
+         offset="0"
+         style="stop-color:#519aed;stop-opacity:1;" />
+      <stop
+         id="stop3760"
+         offset="1"
+         style="stop-color:#e9dddd;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3728">
+      <stop
+         style="stop-color:#f1f3fb;stop-opacity:1;"
+         offset="0"
+         id="stop3730" />
+      <stop
+         style="stop-color:#273df9;stop-opacity:0;"
+         offset="1"
+         id="stop3732" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3728"
+       id="linearGradient3710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+       x1="15.413333"
+       y1="3.4795053"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3756"
+       id="linearGradient3720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+       x1="24.437176"
+       y1="3.4853487"
+       x2="15.941438"
+       y2="18.883736" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3777"
+       id="linearGradient3783"
+       x1="1.4276053"
+       y1="16.374115"
+       x2="28.440671"
+       y2="16.374115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0279887,0,0,1.0323478,7.1553463,-2.2096664)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3799"
+       id="linearGradient3834"
+       x1="-9.2158766"
+       y1="17.617861"
+       x2="36.303471"
+       y2="17.617861"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3852"
+       id="linearGradient3858"
+       x1="4.4050612"
+       y1="16.300755"
+       x2="23.332099"
+       y2="16.521188"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96778437,0,0,0.96778437,1.3383248,1.0794304)" />
+    <inkscape:perspective
+       id="perspective2935"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4026"
+       id="linearGradient4032"
+       x1="16.804222"
+       y1="14.95285"
+       x2="27.970543"
+       y2="14.95285"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.7702794,0,0,1.4225865,-24.613442,-6.221416)" />
+    <linearGradient
+       id="linearGradient4026">
+      <stop
+         style="stop-color:#f30e1e;stop-opacity:1;"
+         offset="0"
+         id="stop4028" />
+      <stop
+         style="stop-color:#ba2f39;stop-opacity:1;"
+         offset="1"
+         id="stop4030" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3975">
+      <stop
+         style="stop-color:#565c64;stop-opacity:1;"
+         offset="0"
+         id="stop3977" />
+      <stop
+         style="stop-color:#99a4b4;stop-opacity:1;"
+         offset="1"
+         id="stop3979" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="18.09375"
+     inkscape:cx="16"
+     inkscape:cy="16"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1349"
+     inkscape:window-height="768"
+     inkscape:window-x="11"
+     inkscape:window-y="0"
+     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 />
+        <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="layer2"
+     inkscape:label="item"
+     style="display:inline">
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="M 24.191029,5.02029 17.480817,15.420815 26.739998,14.041724 24.191029,5.02029 z"
+       id="path3872"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#2d669e;fill-opacity:1;fill-rule:evenodd;stroke:#0a2b54;stroke-width:0.30266553;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.29999995;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       id="path3869"
+       sodipodi:cx="-3.3759081"
+       sodipodi:cy="15.175204"
+       sodipodi:rx="2.6094856"
+       sodipodi:ry="1.2408743"
+       d="m -0.76642251,15.175204 a 2.6094856,1.2408743 0 1 1 -5.21897129,0 2.6094856,1.2408743 0 1 1 5.21897129,0 z"
+       transform="matrix(2.9049982,0.48594166,-0.59972852,2.3046406,33.130451,-6.0083377)" />
+    <path
+       style="fill:#5d7791;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 10.988977,20.408122 c 0,0 0.416835,1.887186 3.227865,2.368755 2.811037,0.48157 3.911949,-1.147766 3.911949,-1.147766 l -0.01,5.772177 c 0,0 -1.099758,1.15955 -3.939024,0.798709 -2.418792,-0.307406 -3.257724,-1.615625 -3.257724,-1.615625 l 0.06699,-6.17625 4.5e-5,0 z"
+       id="rect2870-42"
+       sodipodi:nodetypes="czccsccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#4d7cb5;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 8.294836,1.4877248 c 0,0 4.910333,1.409822 8.717425,1.8531728 3.807095,0.4433509 13.225611,0.2050453 13.225611,0.2050453 l -2.397579,3.1033595 c 0,0 -9.369842,-0.00934 -14.276558,-0.6164277 C 8.6570191,5.4258019 2.1408318,2.9157456 2.1408318,2.9157456 z"
+       id="rect2870-4-3-8"
+       sodipodi:nodetypes="czcczcc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#0b61b9;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 27.501535,6.3671979 2.524606,-2.7133374 0.02722,16.7923185 -2.369216,3.765342 z"
+       id="rect3690-2-0"
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#dbdde3;fill-opacity:1;fill-rule:evenodd;stroke:#0c2248;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.29999995;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       d="m 2.6195238,3.4660146 c 0,0 4.7770349,1.8164118 11.0752852,2.642457 6.298252,0.8260453 13.569058,0.5060029 13.569058,0.5060029 l 0.07336,16.9229705 c 0,0 -8.135058,0.415096 -13.762886,-0.34594 C 7.946513,22.43047 2.7190892,20.116481 2.7190892,20.116481 L 2.6195108,3.4660146 z"
+       id="rect3828-2"
+       sodipodi:nodetypes="czcczcc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#6c5b5d;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 5.1711488,16.898239 c 2.9504617,0.900037 5.2548362,2.110252 8.8513852,2.544039 1.3569,0.259974 4.906729,0.588514 11.371123,0.207676"
+       id="path3996-1"
+       sodipodi:nodetypes="ccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#6c5b5d;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="M 12.084277,21.467124 11.890449,6.9816813"
+       id="path3998-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:url(#linearGradient4032);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+       d="m 6.0198667,13.821013 c 0,0 1.3570035,3.844537 2.0238061,3.056809 2.6009202,-3.072599 5.5992952,-8.4327176 6.1130362,-7.7181369 1.139269,1.5846439 1.941589,7.0894529 3.340991,9.2688259 0.568046,0.884654 3.986518,-3.883055 3.986518,-3.883055 l 2.532877,6.460329"
+       id="path3992"
+       sodipodi:nodetypes="cssscc"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/src/images/warning.svg b/src/images/warning.svg
new file mode 100644
index 0000000..d62083c
--- /dev/null
+++ b/src/images/warning.svg
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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.47 r22583"
+   sodipodi:docname="warning.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3674">
+      <stop
+         style="stop-color:#f9f9ea;stop-opacity:1;"
+         offset="0"
+         id="stop3676" />
+      <stop
+         style="stop-color:#fcf10d;stop-opacity:0.99215686;"
+         offset="1"
+         id="stop3678" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3596">
+      <stop
+         style="stop-color:#ffff00;stop-opacity:1;"
+         offset="0"
+         id="stop3598" />
+      <stop
+         style="stop-color:#ededd2;stop-opacity:0.99137932;"
+         offset="1"
+         id="stop3600" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3759">
+      <stop
+         style="stop-color:#0f1934;stop-opacity:1;"
+         offset="0"
+         id="stop3761" />
+      <stop
+         style="stop-color:#0f1123;stop-opacity:1;"
+         offset="1"
+         id="stop3763" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3674"
+       id="linearGradient3680"
+       x1="13.117022"
+       y1="1020.3622"
+       x2="19.563829"
+       y2="1053.5383"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.15625"
+     inkscape:cx="9.1304426"
+     inkscape:cy="17.039481"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:snap-to-guides="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1179"
+     inkscape:window-x="1916"
+     inkscape:window-y="-4"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+        <cc: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:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <path
+       style="fill:url(#linearGradient3680);fill-opacity:1;stroke:#3c3333;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       d="m 1.4235977,1049.0198 14.3597683,-25.8723 15.164409,25.7485 -29.5241773,0.1238 z"
+       id="path2822"
+       sodipodi:nodetypes="cccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:24.92413139px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+       x="9.0781498"
+       y="1345.5308"
+       id="text3604"
+       transform="scale(1.2868668,0.77708119)"><tspan
+         sodipodi:role="line"
+         id="tspan3606"
+         x="9.0781498"
+         y="1345.5308">!</tspan></text>
+  </g>
+</svg>
diff --git a/src/images/wastebasket.svg b/src/images/wastebasket.svg
new file mode 100644
index 0000000..a368410
--- /dev/null
+++ b/src/images/wastebasket.svg
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns: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="32px"
+   height="32px"
+   id="svg3797"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="New document 4">
+  <defs
+     id="defs3799">
+    <linearGradient
+       id="linearGradient4484">
+      <stop
+         id="stop4486"
+         offset="0"
+         style="stop-color:#cbd7d9;stop-opacity:1;" />
+      <stop
+         id="stop4488"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4405">
+      <stop
+         style="stop-color:#949494;stop-opacity:1;"
+         offset="0"
+         id="stop4407" />
+      <stop
+         id="stop4453"
+         offset="0.27231014"
+         style="stop-color:#dadada;stop-opacity:1;" />
+      <stop
+         style="stop-color:#919191;stop-opacity:1;"
+         offset="1"
+         id="stop4409" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4395">
+      <stop
+         style="stop-color:#83aeb5;stop-opacity:0.33035713;"
+         offset="0"
+         id="stop4397" />
+      <stop
+         id="stop4490"
+         offset="0.23168908"
+         style="stop-color:#f4f4f4;stop-opacity:0.76785713;" />
+      <stop
+         style="stop-color:#7fb7b8;stop-opacity:0.5089286;"
+         offset="1"
+         id="stop4399" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4326">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4328" />
+      <stop
+         style="stop-color:#dbd0d0;stop-opacity:0.98214287;"
+         offset="1"
+         id="stop4330" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4326-7"
+       id="linearGradient4332-1"
+       x1="4"
+       y1="20"
+       x2="13.5"
+       y2="19.5"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4326-7">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4328-4" />
+      <stop
+         style="stop-color:#dbd0d0;stop-opacity:0.98214287;"
+         offset="1"
+         id="stop4330-0" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4326-8"
+       id="linearGradient4332-4"
+       x1="4"
+       y1="20"
+       x2="13.5"
+       y2="19.5"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4326-8">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4328-8" />
+      <stop
+         style="stop-color:#dbd0d0;stop-opacity:0.98214287;"
+         offset="1"
+         id="stop4330-2" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4395"
+       id="linearGradient4401"
+       x1="4.5378874"
+       y1="17.720084"
+       x2="27.447205"
+       y2="14.120708"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4405"
+       id="linearGradient4415"
+       x1="6.6356025"
+       y1="25.970015"
+       x2="25.064154"
+       y2="22.812668"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4405-1"
+       id="linearGradient4415-5"
+       x1="6.6356025"
+       y1="25.970015"
+       x2="24.622126"
+       y2="25.970015"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4405-1">
+      <stop
+         style="stop-color:#949494;stop-opacity:1;"
+         offset="0"
+         id="stop4407-7" />
+      <stop
+         style="stop-color:#949494;stop-opacity:0;"
+         offset="1"
+         id="stop4409-1" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(1,0,0,-1,-0.14115083,49.09877)"
+       y2="26.285749"
+       x2="24.116951"
+       y1="25.970015"
+       x1="6.6356025"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4433"
+       xlink:href="#linearGradient4405-1"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4484"
+       id="linearGradient4482"
+       x1="4.6149011"
+       y1="5.8973427"
+       x2="18.496874"
+       y2="11.138537"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-1.9813129e-8,-0.44202853)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.836083"
+     inkscape:cx="11.439751"
+     inkscape:cy="17.823852"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:snap-to-guides="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1227"
+     inkscape:window-height="635"
+     inkscape:window-x="13"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3805" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+        <cc: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="layer4"
+     inkscape:label="back1"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       style="fill:url(#linearGradient4482);fill-opacity:1;stroke:#7f889b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 5.1149009,5.7940253 7.7437436,27.080392 23.704446,27.354529 26.633885,5.938433 26.648003,5.7940254 C 21.852931,3.632815 19.715169,3.2717258 16.005965,3.326084 12.296761,3.3804422 8.9792445,3.9899149 5.6397402,5.3746701 5.4301369,5.461584 5.1149009,5.7940253 5.1149009,5.7940253 z"
+       id="path4474"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccczsc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="back"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient4433);fill-opacity:1;stroke:#7f889b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 7.1207457,22.466258 C 12.193549,20.866536 18.845024,20.403459 24.170415,22.592553 l -0.947203,4.862313 C 17.329499,25.265772 13.39334,24.844792 7.8153622,27.139134 z"
+       id="path4403-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="fill:url(#linearGradient4401);fill-opacity:1;stroke:#7f889b;stroke-opacity:1"
+       d="M 5.1641813,6.4556946 C 11.757763,9.6107676 19.82091,9.6107676 26.442028,6.295033 l -2.810559,21.252588 c -5,2 -11,2 -15.9999997,0 0,0 -1.4548629,-14.00495 -2.467288,-21.0919264 z"
+       id="rect3807"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#1a1a1a;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 20,-1 20,0 1,-2 c -2,-0.6666666 -4,-1.3333335 -6,-2 l -11,0 -5,2 z"
+       id="path4322"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 17,-1 1,-2 2,0 1,2 z"
+       id="path4385"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient4415);fill-opacity:1;stroke:#7f889b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 7.767072,27.579715 c 5.072803,1.599722 10.587634,2.0628 15.913025,-0.126294 L 23.995832,23.15943 C 18.102119,25.348524 12.713581,25.264328 7.1356027,22.969989 z"
+       id="path4403"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+  </g>
+</svg>
diff --git a/src/libFTimeUtil/Makefile.in b/src/libFTimeUtil/Makefile.in
index c417c81..d5a89c0 100644
--- a/src/libFTimeUtil/Makefile.in
+++ b/src/libFTimeUtil/Makefile.in
@@ -135,6 +135,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -150,6 +151,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -176,11 +179,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/libMars-ecregrid/Makefile.am b/src/libMars-ecregrid/Makefile.am
new file mode 100644
index 0000000..ce93b82
--- /dev/null
+++ b/src/libMars-ecregrid/Makefile.am
@@ -0,0 +1,115 @@
+target=lib/libMars-ecregrid.a
+#target2=lib/libmacro_api_f90.a
+#target3=lib/libMacroApiF77.a
+lib_LIBRARIES = $(target) $(target2)
+
+AR=ar
+RPCGEN  = rpcgen
+CP = cp -p
+SOURCES_lex = langy.y
+
+include_dir = ../../include
+
+BUILT_SOURCES = lib $(include_dir) rpcmars.h
+
+
+lib_libMars_ecregrid_a_SOURCES = $(SOURCES_lex) tcp.c server.c request.c expand.c \
+	hash.c memory.c logfile.c options.c \
+	base.c netbase.c nullbase.c gribbase.c nfdbbase.c dhsbase.c odbbase.c \
+	multibase.c archive.c retrieve.c ibmblk.c \
+	lock.c files.c sh2ll.c guess.c hypercube.c \
+	check.c environ.c \
+	handler.c target.c grib.c calc.c field.c \
+	list.c tools.c hidden.c index.c bufr.c \
+	externf.c service.c xservice.c \
+	udp.c queue.c variable.c \
+	filebase.c account.c cos.c llmatrix.c pproc.c restricted.c \
+	wind.c control.c stream.c \
+	remove.c authenticate.c flatfilebase.c time.c timer.c \
+	version.c statistics.c metadata.c webbase.c ecaccess.c free.c \
+	schedule.c \
+	base.h bufr.h control.h cos.h ecaccess.h field.h globals.h grib.h hypercube.h \
+	ibmblk.h index.h lang.h mars.h mcs.h \
+	netbase.h proto.h queue.h restricted.h tools.h variable.h 
+
+if METVIEW_MARS_ODB
+lib_libMars_ecregrid_a_SOURCES += odb.cc odb.h
+lib_libMars_ecregrid_a_CPPFLAGS = $(ODB_CPPFLAGS)
+endif
+
+nodist_lib_libMars_ecregrid_a_SOURCES = rpcmars.h rpcmars.c
+
+#lib_libmacro_api_f90_a_SOURCES = macro_api_f90.f90
+
+#include_HEADERS = macro_api.h
+
+# for the fortran macro_api library
+# note that we need to put FCFLAGS first in case the user's flags
+# need to overide the autotools flags
+# lib_libmacro_api_f90_a_FCFLAGS = ${FCFLAGS} @METVIEW_FC_FLAGS@
+
+#noinst_lib_libMars_a_HEADERS  = base.h bufr.h control.h \
+#	field.h globals.h grib.h \
+#	ibmblk.h lang.h mars.h mcs.h \
+#	netbase.h proto.h rpcmars.h tools.h \
+#	cos.h
+
+#all: lib
+#	$(UPDATE_TITLE)
+
+lib:
+	ln -s ../../lib lib
+
+
+$(include_dir):
+	mkdir $(include_dir)
+
+#macro_header: $(include_dir)/macro_api.h
+
+#$(include_dir)/macro_api.h: macro_api.h
+#	${INSTALL} macro_api.h $(include_dir)
+
+
+langy.c : langl.c
+langl.c : langl.l
+	$(LEX) $(LFLAGS) langl.l
+	sed -e s/yy/yy_mars/g < lex.yy.c > $@
+	$(RM) lex.yy.c
+langy.c : langy.y
+	$(YACC) $(YFLAGS) langy.y
+	sed -e s/yy/yy_mars/g < y.tab.c > $@
+	$(RM) y.tab.c
+
+rpcmars.h : rpcmars.x
+	$(RPCGEN) -h -o rpcmars.h rpcmars.x
+	- chmod a+rw rpcmars.h
+
+rpcmars.c : rpcmars.x
+	$(RPCGEN) -c -o rpcmars.c rpcmars.x
+	- chmod a+rw rpcmars.c
+
+
+# a note about cleaning: in order that the end user does not need to
+# install lex and yacc, we distribute the generated source files. We also
+# don't want these to be cleaned during a normal clean, because the end user
+# would then need to have lex and yacc installed... so we don't clean
+# these by default, but instead have a separate target, 'cleanall' which
+# remove the lex/yacc generated source.
+
+clean-all: clean
+	-rm -f langy.c langl.c
+
+
+
+# ensure we clean up all the lexical files
+CLEANFILES = rpcmars.h rpcmars.c lex.yy.c y.tab.c y.output y.tab.h
+
+EXTRA_DIST = rpcmars.x langl.l langy.y langl.c
+
+
+# do not distribute certain files in the tarball...
+#dist-hook:
+#	rm -f $(distdir)/langy.c $(distdir)/langl.c
+
+
+
diff --git a/src/libMars-ecregrid/Makefile.in b/src/libMars-ecregrid/Makefile.in
new file mode 100644
index 0000000..1f8a093
--- /dev/null
+++ b/src/libMars-ecregrid/Makefile.in
@@ -0,0 +1,1991 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+ at METVIEW_MARS_ODB_TRUE@am__append_1 = odb.cc odb.h
+subdir = src/libMars-ecregrid
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in langy.c
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/metview_config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)"
+LIBRARIES = $(lib_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_$(V))
+am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
+am__v_AR_0 = @echo "  AR    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+lib_libMars_ecregrid_a_AR = $(AR) $(ARFLAGS)
+lib_libMars_ecregrid_a_LIBADD =
+am__lib_libMars_ecregrid_a_SOURCES_DIST = langy.y tcp.c server.c \
+	request.c expand.c hash.c memory.c logfile.c options.c base.c \
+	netbase.c nullbase.c gribbase.c nfdbbase.c dhsbase.c odbbase.c \
+	multibase.c archive.c retrieve.c ibmblk.c lock.c files.c \
+	sh2ll.c guess.c hypercube.c check.c environ.c handler.c \
+	target.c grib.c calc.c field.c list.c tools.c hidden.c index.c \
+	bufr.c externf.c service.c xservice.c udp.c queue.c variable.c \
+	filebase.c account.c cos.c llmatrix.c pproc.c restricted.c \
+	wind.c control.c stream.c remove.c authenticate.c \
+	flatfilebase.c time.c timer.c version.c statistics.c \
+	metadata.c webbase.c ecaccess.c free.c schedule.c base.h \
+	bufr.h control.h cos.h ecaccess.h field.h globals.h grib.h \
+	hypercube.h ibmblk.h index.h lang.h mars.h mcs.h netbase.h \
+	proto.h queue.h restricted.h tools.h variable.h odb.cc odb.h
+am__objects_1 = lib_libMars_ecregrid_a-langy.$(OBJEXT)
+ at METVIEW_MARS_ODB_TRUE@am__objects_2 =  \
+ at METVIEW_MARS_ODB_TRUE@	lib_libMars_ecregrid_a-odb.$(OBJEXT)
+am_lib_libMars_ecregrid_a_OBJECTS = $(am__objects_1) \
+	lib_libMars_ecregrid_a-tcp.$(OBJEXT) \
+	lib_libMars_ecregrid_a-server.$(OBJEXT) \
+	lib_libMars_ecregrid_a-request.$(OBJEXT) \
+	lib_libMars_ecregrid_a-expand.$(OBJEXT) \
+	lib_libMars_ecregrid_a-hash.$(OBJEXT) \
+	lib_libMars_ecregrid_a-memory.$(OBJEXT) \
+	lib_libMars_ecregrid_a-logfile.$(OBJEXT) \
+	lib_libMars_ecregrid_a-options.$(OBJEXT) \
+	lib_libMars_ecregrid_a-base.$(OBJEXT) \
+	lib_libMars_ecregrid_a-netbase.$(OBJEXT) \
+	lib_libMars_ecregrid_a-nullbase.$(OBJEXT) \
+	lib_libMars_ecregrid_a-gribbase.$(OBJEXT) \
+	lib_libMars_ecregrid_a-nfdbbase.$(OBJEXT) \
+	lib_libMars_ecregrid_a-dhsbase.$(OBJEXT) \
+	lib_libMars_ecregrid_a-odbbase.$(OBJEXT) \
+	lib_libMars_ecregrid_a-multibase.$(OBJEXT) \
+	lib_libMars_ecregrid_a-archive.$(OBJEXT) \
+	lib_libMars_ecregrid_a-retrieve.$(OBJEXT) \
+	lib_libMars_ecregrid_a-ibmblk.$(OBJEXT) \
+	lib_libMars_ecregrid_a-lock.$(OBJEXT) \
+	lib_libMars_ecregrid_a-files.$(OBJEXT) \
+	lib_libMars_ecregrid_a-sh2ll.$(OBJEXT) \
+	lib_libMars_ecregrid_a-guess.$(OBJEXT) \
+	lib_libMars_ecregrid_a-hypercube.$(OBJEXT) \
+	lib_libMars_ecregrid_a-check.$(OBJEXT) \
+	lib_libMars_ecregrid_a-environ.$(OBJEXT) \
+	lib_libMars_ecregrid_a-handler.$(OBJEXT) \
+	lib_libMars_ecregrid_a-target.$(OBJEXT) \
+	lib_libMars_ecregrid_a-grib.$(OBJEXT) \
+	lib_libMars_ecregrid_a-calc.$(OBJEXT) \
+	lib_libMars_ecregrid_a-field.$(OBJEXT) \
+	lib_libMars_ecregrid_a-list.$(OBJEXT) \
+	lib_libMars_ecregrid_a-tools.$(OBJEXT) \
+	lib_libMars_ecregrid_a-hidden.$(OBJEXT) \
+	lib_libMars_ecregrid_a-index.$(OBJEXT) \
+	lib_libMars_ecregrid_a-bufr.$(OBJEXT) \
+	lib_libMars_ecregrid_a-externf.$(OBJEXT) \
+	lib_libMars_ecregrid_a-service.$(OBJEXT) \
+	lib_libMars_ecregrid_a-xservice.$(OBJEXT) \
+	lib_libMars_ecregrid_a-udp.$(OBJEXT) \
+	lib_libMars_ecregrid_a-queue.$(OBJEXT) \
+	lib_libMars_ecregrid_a-variable.$(OBJEXT) \
+	lib_libMars_ecregrid_a-filebase.$(OBJEXT) \
+	lib_libMars_ecregrid_a-account.$(OBJEXT) \
+	lib_libMars_ecregrid_a-cos.$(OBJEXT) \
+	lib_libMars_ecregrid_a-llmatrix.$(OBJEXT) \
+	lib_libMars_ecregrid_a-pproc.$(OBJEXT) \
+	lib_libMars_ecregrid_a-restricted.$(OBJEXT) \
+	lib_libMars_ecregrid_a-wind.$(OBJEXT) \
+	lib_libMars_ecregrid_a-control.$(OBJEXT) \
+	lib_libMars_ecregrid_a-stream.$(OBJEXT) \
+	lib_libMars_ecregrid_a-remove.$(OBJEXT) \
+	lib_libMars_ecregrid_a-authenticate.$(OBJEXT) \
+	lib_libMars_ecregrid_a-flatfilebase.$(OBJEXT) \
+	lib_libMars_ecregrid_a-time.$(OBJEXT) \
+	lib_libMars_ecregrid_a-timer.$(OBJEXT) \
+	lib_libMars_ecregrid_a-version.$(OBJEXT) \
+	lib_libMars_ecregrid_a-statistics.$(OBJEXT) \
+	lib_libMars_ecregrid_a-metadata.$(OBJEXT) \
+	lib_libMars_ecregrid_a-webbase.$(OBJEXT) \
+	lib_libMars_ecregrid_a-ecaccess.$(OBJEXT) \
+	lib_libMars_ecregrid_a-free.$(OBJEXT) \
+	lib_libMars_ecregrid_a-schedule.$(OBJEXT) $(am__objects_2)
+nodist_lib_libMars_ecregrid_a_OBJECTS =  \
+	lib_libMars_ecregrid_a-rpcmars.$(OBJEXT)
+lib_libMars_ecregrid_a_OBJECTS = $(am_lib_libMars_ecregrid_a_OBJECTS) \
+	$(nodist_lib_libMars_ecregrid_a_OBJECTS)
+am__dirstamp = $(am__leading_dot)dirstamp
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_$(V))
+am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
+am__v_CXX_0 = @echo "  CXX   " $@;
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_$(V))
+am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CXXLD_0 = @echo "  CXXLD " $@;
+YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
+LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS)
+AM_V_YACC = $(am__v_YACC_$(V))
+am__v_YACC_ = $(am__v_YACC_$(AM_DEFAULT_VERBOSITY))
+am__v_YACC_0 = @echo "  YACC  " $@;
+YLWRAP = $(top_srcdir)/config/ylwrap
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(lib_libMars_ecregrid_a_SOURCES) \
+	$(nodist_lib_libMars_ecregrid_a_SOURCES)
+DIST_SOURCES = $(am__lib_libMars_ecregrid_a_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = ar
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AXX = @AXX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPLIBS = @CPPLIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DBMLIB = @DBMLIB@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
+EGREP = @EGREP@
+EMOS_LIB_NAME = @EMOS_LIB_NAME@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FDBLIB = @FDBLIB@
+FFIXED_FLAGS = @FFIXED_FLAGS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FLIBS = @FLIBS@
+GREP = @GREP@
+GRIBAPI_LIBS = @GRIBAPI_LIBS@
+GRIB_API_INC = @GRIB_API_INC@
+GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LDFLAGS_INLINE = @LDFLAGS_INLINE@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBNAME = @LIBNAME@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAGICS_CFLAGS = @MAGICS_CFLAGS@
+MAGICS_LIBS = @MAGICS_LIBS@
+MAGPLUS_CPPFLAGS = @MAGPLUS_CPPFLAGS@
+MAGPLUS_HOME = @MAGPLUS_HOME@
+MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
+MAGPLUS_LIB = @MAGPLUS_LIB@
+MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
+MAKEINFO = @MAKEINFO@
+MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
+MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
+METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
+METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
+METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
+METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
+METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
+METVIEW_NETCDF_FLAGS = @METVIEW_NETCDF_FLAGS@
+METVIEW_NETCDF_LIB = @METVIEW_NETCDF_LIB@
+METVIEW_PACKAGE_NAME = @METVIEW_PACKAGE_NAME@
+METVIEW_PACKAGE_RELEASE_DATE = @METVIEW_PACKAGE_RELEASE_DATE@
+METVIEW_PACKAGE_VERSION = @METVIEW_PACKAGE_VERSION@
+METVIEW_UTIL_LIB = @METVIEW_UTIL_LIB@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MVINCLUDE = @MVINCLUDE@
+MVSTARTDIR = @MVSTARTDIR@
+MV_EMOSLIB = @MV_EMOSLIB@
+MV_ENVIRON = @MV_ENVIRON@
+MV_MOTIF_FLAGS = @MV_MOTIF_FLAGS@
+MV_MOTIF_UTIL_LIB = @MV_MOTIF_UTIL_LIB@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+ODB1_BIN = @ODB1_BIN@
+ODB1_USE_SCRIPT = @ODB1_USE_SCRIPT@
+ODB1_VERSION = @ODB1_VERSION@
+ODB_CPPFLAGS = @ODB_CPPFLAGS@
+ODB_LDFLAGS = @ODB_LDFLAGS@
+ODB_LIBDIR = @ODB_LIBDIR@
+ODB_LIBS = @ODB_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@
+PKG_CONFIG = @PKG_CONFIG@
+PROJ4_LIBS = @PROJ4_LIBS@
+QMAKE = @QMAKE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_CPPFLAGS = @QT_CPPFLAGS@
+QT_CXXFLAGS = @QT_CXXFLAGS@
+QT_DEFINES = @QT_DEFINES@
+QT_INCPATH = @QT_INCPATH@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LFLAGS = @QT_LFLAGS@
+QT_LIBS = @QT_LIBS@
+QT_PATH = @QT_PATH@
+QT_VERSION = @QT_VERSION@
+QT_VERSION_MAJOR = @QT_VERSION_MAJOR@
+RANLIB = @RANLIB@
+RCC = @RCC@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SITE_NAME = @SITE_NAME@
+SITE_WMO_CODE = @SITE_WMO_CODE@
+STANDARD_METVIEW_LIBS = @STANDARD_METVIEW_LIBS@
+STANDARD_METVIEW_LIBS_NO_UTIL = @STANDARD_METVIEW_LIBS_NO_UTIL@
+STARTUP_SCRIPT = @STARTUP_SCRIPT@
+STRIP = @STRIP@
+UIC = @UIC@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = lib/libMars-ecregrid.a
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+#target2=lib/libmacro_api_f90.a
+#target3=lib/libMacroApiF77.a
+lib_LIBRARIES = $(target) $(target2)
+RPCGEN = rpcgen
+CP = cp -p
+SOURCES_lex = langy.y
+include_dir = ../../include
+BUILT_SOURCES = lib $(include_dir) rpcmars.h
+lib_libMars_ecregrid_a_SOURCES = $(SOURCES_lex) tcp.c server.c \
+	request.c expand.c hash.c memory.c logfile.c options.c base.c \
+	netbase.c nullbase.c gribbase.c nfdbbase.c dhsbase.c odbbase.c \
+	multibase.c archive.c retrieve.c ibmblk.c lock.c files.c \
+	sh2ll.c guess.c hypercube.c check.c environ.c handler.c \
+	target.c grib.c calc.c field.c list.c tools.c hidden.c index.c \
+	bufr.c externf.c service.c xservice.c udp.c queue.c variable.c \
+	filebase.c account.c cos.c llmatrix.c pproc.c restricted.c \
+	wind.c control.c stream.c remove.c authenticate.c \
+	flatfilebase.c time.c timer.c version.c statistics.c \
+	metadata.c webbase.c ecaccess.c free.c schedule.c base.h \
+	bufr.h control.h cos.h ecaccess.h field.h globals.h grib.h \
+	hypercube.h ibmblk.h index.h lang.h mars.h mcs.h netbase.h \
+	proto.h queue.h restricted.h tools.h variable.h \
+	$(am__append_1)
+ at METVIEW_MARS_ODB_TRUE@lib_libMars_ecregrid_a_CPPFLAGS = $(ODB_CPPFLAGS)
+nodist_lib_libMars_ecregrid_a_SOURCES = rpcmars.h rpcmars.c
+
+# ensure we clean up all the lexical files
+CLEANFILES = rpcmars.h rpcmars.c lex.yy.c y.tab.c y.output y.tab.h
+EXTRA_DIST = rpcmars.x langl.l langy.y langl.c
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .cc .lo .o .obj .y
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libMars-ecregrid/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/libMars-ecregrid/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLIBRARIES: $(lib_LIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; }
+	@$(POST_INSTALL)
+	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  if test -f $$p; then \
+	    $(am__strip_dir) \
+	    echo " ( cd '$(DESTDIR)$(libdir)' && $(RANLIB) $$f )"; \
+	    ( cd "$(DESTDIR)$(libdir)" && $(RANLIB) $$f ) || exit $$?; \
+	  else :; fi; \
+	done
+
+uninstall-libLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libdir)' && rm -f "$$files" )"; \
+	cd "$(DESTDIR)$(libdir)" && rm -f $$files
+
+clean-libLIBRARIES:
+	-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
+lib/$(am__dirstamp):
+	@$(MKDIR_P) lib
+	@: > lib/$(am__dirstamp)
+lib/libMars-ecregrid.a: $(lib_libMars_ecregrid_a_OBJECTS) $(lib_libMars_ecregrid_a_DEPENDENCIES) lib/$(am__dirstamp)
+	$(AM_V_at)-rm -f lib/libMars-ecregrid.a
+	$(AM_V_AR)$(lib_libMars_ecregrid_a_AR) lib/libMars-ecregrid.a $(lib_libMars_ecregrid_a_OBJECTS) $(lib_libMars_ecregrid_a_LIBADD)
+	$(AM_V_at)$(RANLIB) lib/libMars-ecregrid.a
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-account.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-archive.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-authenticate.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-base.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-bufr.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-calc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-check.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-control.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-cos.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-dhsbase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-ecaccess.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-environ.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-expand.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-externf.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-field.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-filebase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-files.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-flatfilebase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-free.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-grib.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-gribbase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-guess.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-handler.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-hash.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-hidden.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-hypercube.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-ibmblk.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-index.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-langy.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-list.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-llmatrix.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-lock.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-logfile.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-memory.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-metadata.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-multibase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-netbase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-nfdbbase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-nullbase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-odb.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-odbbase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-options.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-pproc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-queue.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-remove.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-request.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-restricted.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-retrieve.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-rpcmars.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-schedule.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-server.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-service.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-sh2ll.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-statistics.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-stream.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-target.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-tcp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-time.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-timer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-tools.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-udp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-variable.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-version.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-webbase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-wind.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMars_ecregrid_a-xservice.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+lib_libMars_ecregrid_a-langy.o: langy.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-langy.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-langy.Tpo -c -o lib_libMars_ecregrid_a-langy.o `test -f 'langy.c' || echo '$(srcdir)/'`langy.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-langy.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-langy.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='langy.c' object='lib_libMars_ecregrid_a-langy.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-langy.o `test -f 'langy.c' || echo '$(srcdir)/'`langy.c
+
+lib_libMars_ecregrid_a-langy.obj: langy.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-langy.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-langy.Tpo -c -o lib_libMars_ecregrid_a-langy.obj `if test -f 'langy.c'; then $(CYGPATH_W) 'langy.c'; else $(CYGPATH_W) '$(srcdir)/langy.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-langy.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-langy.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='langy.c' object='lib_libMars_ecregrid_a-langy.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-langy.obj `if test -f 'langy.c'; then $(CYGPATH_W) 'langy.c'; else $(CYGPATH_W) '$(srcdir)/langy.c'; fi`
+
+lib_libMars_ecregrid_a-tcp.o: tcp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-tcp.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-tcp.Tpo -c -o lib_libMars_ecregrid_a-tcp.o `test -f 'tcp.c' || echo '$(srcdir)/'`tcp.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-tcp.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-tcp.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcp.c' object='lib_libMars_ecregrid_a-tcp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-tcp.o `test -f 'tcp.c' || echo '$(srcdir)/'`tcp.c
+
+lib_libMars_ecregrid_a-tcp.obj: tcp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-tcp.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-tcp.Tpo -c -o lib_libMars_ecregrid_a-tcp.obj `if test -f 'tcp.c'; then $(CYGPATH_W) 'tcp.c'; else $(CYGPATH_W) '$(srcdir)/tcp.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-tcp.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-tcp.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcp.c' object='lib_libMars_ecregrid_a-tcp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-tcp.obj `if test -f 'tcp.c'; then $(CYGPATH_W) 'tcp.c'; else $(CYGPATH_W) '$(srcdir)/tcp.c'; fi`
+
+lib_libMars_ecregrid_a-server.o: server.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-server.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-server.Tpo -c -o lib_libMars_ecregrid_a-server.o `test -f 'server.c' || echo '$(srcdir)/'`server.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-server.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-server.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='server.c' object='lib_libMars_ecregrid_a-server.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-server.o `test -f 'server.c' || echo '$(srcdir)/'`server.c
+
+lib_libMars_ecregrid_a-server.obj: server.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-server.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-server.Tpo -c -o lib_libMars_ecregrid_a-server.obj `if test -f 'server.c'; then $(CYGPATH_W) 'server.c'; else $(CYGPATH_W) '$(srcdir)/server.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-server.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-server.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='server.c' object='lib_libMars_ecregrid_a-server.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-server.obj `if test -f 'server.c'; then $(CYGPATH_W) 'server.c'; else $(CYGPATH_W) '$(srcdir)/server.c'; fi`
+
+lib_libMars_ecregrid_a-request.o: request.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-request.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-request.Tpo -c -o lib_libMars_ecregrid_a-request.o `test -f 'request.c' || echo '$(srcdir)/'`request.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-request.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-request.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='request.c' object='lib_libMars_ecregrid_a-request.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-request.o `test -f 'request.c' || echo '$(srcdir)/'`request.c
+
+lib_libMars_ecregrid_a-request.obj: request.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-request.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-request.Tpo -c -o lib_libMars_ecregrid_a-request.obj `if test -f 'request.c'; then $(CYGPATH_W) 'request.c'; else $(CYGPATH_W) '$(srcdir)/request.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-request.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-request.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='request.c' object='lib_libMars_ecregrid_a-request.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-request.obj `if test -f 'request.c'; then $(CYGPATH_W) 'request.c'; else $(CYGPATH_W) '$(srcdir)/request.c'; fi`
+
+lib_libMars_ecregrid_a-expand.o: expand.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-expand.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-expand.Tpo -c -o lib_libMars_ecregrid_a-expand.o `test -f 'expand.c' || echo '$(srcdir)/'`expand.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-expand.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-expand.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='expand.c' object='lib_libMars_ecregrid_a-expand.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-expand.o `test -f 'expand.c' || echo '$(srcdir)/'`expand.c
+
+lib_libMars_ecregrid_a-expand.obj: expand.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-expand.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-expand.Tpo -c -o lib_libMars_ecregrid_a-expand.obj `if test -f 'expand.c'; then $(CYGPATH_W) 'expand.c'; else $(CYGPATH_W) '$(srcdir)/expand.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-expand.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-expand.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='expand.c' object='lib_libMars_ecregrid_a-expand.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-expand.obj `if test -f 'expand.c'; then $(CYGPATH_W) 'expand.c'; else $(CYGPATH_W) '$(srcdir)/expand.c'; fi`
+
+lib_libMars_ecregrid_a-hash.o: hash.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-hash.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-hash.Tpo -c -o lib_libMars_ecregrid_a-hash.o `test -f 'hash.c' || echo '$(srcdir)/'`hash.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-hash.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-hash.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='hash.c' object='lib_libMars_ecregrid_a-hash.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-hash.o `test -f 'hash.c' || echo '$(srcdir)/'`hash.c
+
+lib_libMars_ecregrid_a-hash.obj: hash.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-hash.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-hash.Tpo -c -o lib_libMars_ecregrid_a-hash.obj `if test -f 'hash.c'; then $(CYGPATH_W) 'hash.c'; else $(CYGPATH_W) '$(srcdir)/hash.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-hash.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-hash.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='hash.c' object='lib_libMars_ecregrid_a-hash.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-hash.obj `if test -f 'hash.c'; then $(CYGPATH_W) 'hash.c'; else $(CYGPATH_W) '$(srcdir)/hash.c'; fi`
+
+lib_libMars_ecregrid_a-memory.o: memory.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-memory.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-memory.Tpo -c -o lib_libMars_ecregrid_a-memory.o `test -f 'memory.c' || echo '$(srcdir)/'`memory.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-memory.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-memory.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='memory.c' object='lib_libMars_ecregrid_a-memory.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-memory.o `test -f 'memory.c' || echo '$(srcdir)/'`memory.c
+
+lib_libMars_ecregrid_a-memory.obj: memory.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-memory.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-memory.Tpo -c -o lib_libMars_ecregrid_a-memory.obj `if test -f 'memory.c'; then $(CYGPATH_W) 'memory.c'; else $(CYGPATH_W) '$(srcdir)/memory.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-memory.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-memory.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='memory.c' object='lib_libMars_ecregrid_a-memory.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-memory.obj `if test -f 'memory.c'; then $(CYGPATH_W) 'memory.c'; else $(CYGPATH_W) '$(srcdir)/memory.c'; fi`
+
+lib_libMars_ecregrid_a-logfile.o: logfile.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-logfile.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-logfile.Tpo -c -o lib_libMars_ecregrid_a-logfile.o `test -f 'logfile.c' || echo '$(srcdir)/'`logfile.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-logfile.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-logfile.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='logfile.c' object='lib_libMars_ecregrid_a-logfile.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-logfile.o `test -f 'logfile.c' || echo '$(srcdir)/'`logfile.c
+
+lib_libMars_ecregrid_a-logfile.obj: logfile.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-logfile.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-logfile.Tpo -c -o lib_libMars_ecregrid_a-logfile.obj `if test -f 'logfile.c'; then $(CYGPATH_W) 'logfile.c'; else $(CYGPATH_W) '$(srcdir)/logfile.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-logfile.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-logfile.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='logfile.c' object='lib_libMars_ecregrid_a-logfile.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-logfile.obj `if test -f 'logfile.c'; then $(CYGPATH_W) 'logfile.c'; else $(CYGPATH_W) '$(srcdir)/logfile.c'; fi`
+
+lib_libMars_ecregrid_a-options.o: options.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-options.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-options.Tpo -c -o lib_libMars_ecregrid_a-options.o `test -f 'options.c' || echo '$(srcdir)/'`options.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-options.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-options.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='options.c' object='lib_libMars_ecregrid_a-options.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-options.o `test -f 'options.c' || echo '$(srcdir)/'`options.c
+
+lib_libMars_ecregrid_a-options.obj: options.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-options.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-options.Tpo -c -o lib_libMars_ecregrid_a-options.obj `if test -f 'options.c'; then $(CYGPATH_W) 'options.c'; else $(CYGPATH_W) '$(srcdir)/options.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-options.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-options.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='options.c' object='lib_libMars_ecregrid_a-options.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-options.obj `if test -f 'options.c'; then $(CYGPATH_W) 'options.c'; else $(CYGPATH_W) '$(srcdir)/options.c'; fi`
+
+lib_libMars_ecregrid_a-base.o: base.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-base.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-base.Tpo -c -o lib_libMars_ecregrid_a-base.o `test -f 'base.c' || echo '$(srcdir)/'`base.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-base.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-base.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='base.c' object='lib_libMars_ecregrid_a-base.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-base.o `test -f 'base.c' || echo '$(srcdir)/'`base.c
+
+lib_libMars_ecregrid_a-base.obj: base.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-base.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-base.Tpo -c -o lib_libMars_ecregrid_a-base.obj `if test -f 'base.c'; then $(CYGPATH_W) 'base.c'; else $(CYGPATH_W) '$(srcdir)/base.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-base.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-base.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='base.c' object='lib_libMars_ecregrid_a-base.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-base.obj `if test -f 'base.c'; then $(CYGPATH_W) 'base.c'; else $(CYGPATH_W) '$(srcdir)/base.c'; fi`
+
+lib_libMars_ecregrid_a-netbase.o: netbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-netbase.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-netbase.Tpo -c -o lib_libMars_ecregrid_a-netbase.o `test -f 'netbase.c' || echo '$(srcdir)/'`netbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-netbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-netbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='netbase.c' object='lib_libMars_ecregrid_a-netbase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-netbase.o `test -f 'netbase.c' || echo '$(srcdir)/'`netbase.c
+
+lib_libMars_ecregrid_a-netbase.obj: netbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-netbase.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-netbase.Tpo -c -o lib_libMars_ecregrid_a-netbase.obj `if test -f 'netbase.c'; then $(CYGPATH_W) 'netbase.c'; else $(CYGPATH_W) '$(srcdir)/netbase.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-netbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-netbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='netbase.c' object='lib_libMars_ecregrid_a-netbase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-netbase.obj `if test -f 'netbase.c'; then $(CYGPATH_W) 'netbase.c'; else $(CYGPATH_W) '$(srcdir)/netbase.c'; fi`
+
+lib_libMars_ecregrid_a-nullbase.o: nullbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-nullbase.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-nullbase.Tpo -c -o lib_libMars_ecregrid_a-nullbase.o `test -f 'nullbase.c' || echo '$(srcdir)/'`nullbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-nullbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-nullbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nullbase.c' object='lib_libMars_ecregrid_a-nullbase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-nullbase.o `test -f 'nullbase.c' || echo '$(srcdir)/'`nullbase.c
+
+lib_libMars_ecregrid_a-nullbase.obj: nullbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-nullbase.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-nullbase.Tpo -c -o lib_libMars_ecregrid_a-nullbase.obj `if test -f 'nullbase.c'; then $(CYGPATH_W) 'nullbase.c'; else $(CYGPATH_W) '$(srcdir)/nullbase.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-nullbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-nullbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nullbase.c' object='lib_libMars_ecregrid_a-nullbase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-nullbase.obj `if test -f 'nullbase.c'; then $(CYGPATH_W) 'nullbase.c'; else $(CYGPATH_W) '$(srcdir)/nullbase.c'; fi`
+
+lib_libMars_ecregrid_a-gribbase.o: gribbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-gribbase.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-gribbase.Tpo -c -o lib_libMars_ecregrid_a-gribbase.o `test -f 'gribbase.c' || echo '$(srcdir)/'`gribbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-gribbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-gribbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gribbase.c' object='lib_libMars_ecregrid_a-gribbase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-gribbase.o `test -f 'gribbase.c' || echo '$(srcdir)/'`gribbase.c
+
+lib_libMars_ecregrid_a-gribbase.obj: gribbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-gribbase.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-gribbase.Tpo -c -o lib_libMars_ecregrid_a-gribbase.obj `if test -f 'gribbase.c'; then $(CYGPATH_W) 'gribbase.c'; else $(CYGPATH_W) '$(srcdir)/gribbase.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-gribbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-gribbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gribbase.c' object='lib_libMars_ecregrid_a-gribbase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-gribbase.obj `if test -f 'gribbase.c'; then $(CYGPATH_W) 'gribbase.c'; else $(CYGPATH_W) '$(srcdir)/gribbase.c'; fi`
+
+lib_libMars_ecregrid_a-nfdbbase.o: nfdbbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-nfdbbase.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-nfdbbase.Tpo -c -o lib_libMars_ecregrid_a-nfdbbase.o `test -f 'nfdbbase.c' || echo '$(srcdir)/'`nfdbbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-nfdbbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-nfdbbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfdbbase.c' object='lib_libMars_ecregrid_a-nfdbbase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-nfdbbase.o `test -f 'nfdbbase.c' || echo '$(srcdir)/'`nfdbbase.c
+
+lib_libMars_ecregrid_a-nfdbbase.obj: nfdbbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-nfdbbase.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-nfdbbase.Tpo -c -o lib_libMars_ecregrid_a-nfdbbase.obj `if test -f 'nfdbbase.c'; then $(CYGPATH_W) 'nfdbbase.c'; else $(CYGPATH_W) '$(srcdir)/nfdbbase.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-nfdbbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-nfdbbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfdbbase.c' object='lib_libMars_ecregrid_a-nfdbbase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-nfdbbase.obj `if test -f 'nfdbbase.c'; then $(CYGPATH_W) 'nfdbbase.c'; else $(CYGPATH_W) '$(srcdir)/nfdbbase.c'; fi`
+
+lib_libMars_ecregrid_a-dhsbase.o: dhsbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-dhsbase.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-dhsbase.Tpo -c -o lib_libMars_ecregrid_a-dhsbase.o `test -f 'dhsbase.c' || echo '$(srcdir)/'`dhsbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-dhsbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-dhsbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dhsbase.c' object='lib_libMars_ecregrid_a-dhsbase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-dhsbase.o `test -f 'dhsbase.c' || echo '$(srcdir)/'`dhsbase.c
+
+lib_libMars_ecregrid_a-dhsbase.obj: dhsbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-dhsbase.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-dhsbase.Tpo -c -o lib_libMars_ecregrid_a-dhsbase.obj `if test -f 'dhsbase.c'; then $(CYGPATH_W) 'dhsbase.c'; else $(CYGPATH_W) '$(srcdir)/dhsbase.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-dhsbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-dhsbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dhsbase.c' object='lib_libMars_ecregrid_a-dhsbase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-dhsbase.obj `if test -f 'dhsbase.c'; then $(CYGPATH_W) 'dhsbase.c'; else $(CYGPATH_W) '$(srcdir)/dhsbase.c'; fi`
+
+lib_libMars_ecregrid_a-odbbase.o: odbbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-odbbase.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-odbbase.Tpo -c -o lib_libMars_ecregrid_a-odbbase.o `test -f 'odbbase.c' || echo '$(srcdir)/'`odbbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-odbbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-odbbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='odbbase.c' object='lib_libMars_ecregrid_a-odbbase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-odbbase.o `test -f 'odbbase.c' || echo '$(srcdir)/'`odbbase.c
+
+lib_libMars_ecregrid_a-odbbase.obj: odbbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-odbbase.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-odbbase.Tpo -c -o lib_libMars_ecregrid_a-odbbase.obj `if test -f 'odbbase.c'; then $(CYGPATH_W) 'odbbase.c'; else $(CYGPATH_W) '$(srcdir)/odbbase.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-odbbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-odbbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='odbbase.c' object='lib_libMars_ecregrid_a-odbbase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-odbbase.obj `if test -f 'odbbase.c'; then $(CYGPATH_W) 'odbbase.c'; else $(CYGPATH_W) '$(srcdir)/odbbase.c'; fi`
+
+lib_libMars_ecregrid_a-multibase.o: multibase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-multibase.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-multibase.Tpo -c -o lib_libMars_ecregrid_a-multibase.o `test -f 'multibase.c' || echo '$(srcdir)/'`multibase.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-multibase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-multibase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='multibase.c' object='lib_libMars_ecregrid_a-multibase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-multibase.o `test -f 'multibase.c' || echo '$(srcdir)/'`multibase.c
+
+lib_libMars_ecregrid_a-multibase.obj: multibase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-multibase.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-multibase.Tpo -c -o lib_libMars_ecregrid_a-multibase.obj `if test -f 'multibase.c'; then $(CYGPATH_W) 'multibase.c'; else $(CYGPATH_W) '$(srcdir)/multibase.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-multibase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-multibase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='multibase.c' object='lib_libMars_ecregrid_a-multibase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-multibase.obj `if test -f 'multibase.c'; then $(CYGPATH_W) 'multibase.c'; else $(CYGPATH_W) '$(srcdir)/multibase.c'; fi`
+
+lib_libMars_ecregrid_a-archive.o: archive.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-archive.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-archive.Tpo -c -o lib_libMars_ecregrid_a-archive.o `test -f 'archive.c' || echo '$(srcdir)/'`archive.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-archive.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-archive.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='archive.c' object='lib_libMars_ecregrid_a-archive.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-archive.o `test -f 'archive.c' || echo '$(srcdir)/'`archive.c
+
+lib_libMars_ecregrid_a-archive.obj: archive.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-archive.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-archive.Tpo -c -o lib_libMars_ecregrid_a-archive.obj `if test -f 'archive.c'; then $(CYGPATH_W) 'archive.c'; else $(CYGPATH_W) '$(srcdir)/archive.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-archive.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-archive.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='archive.c' object='lib_libMars_ecregrid_a-archive.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-archive.obj `if test -f 'archive.c'; then $(CYGPATH_W) 'archive.c'; else $(CYGPATH_W) '$(srcdir)/archive.c'; fi`
+
+lib_libMars_ecregrid_a-retrieve.o: retrieve.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-retrieve.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-retrieve.Tpo -c -o lib_libMars_ecregrid_a-retrieve.o `test -f 'retrieve.c' || echo '$(srcdir)/'`retrieve.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-retrieve.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-retrieve.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='retrieve.c' object='lib_libMars_ecregrid_a-retrieve.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-retrieve.o `test -f 'retrieve.c' || echo '$(srcdir)/'`retrieve.c
+
+lib_libMars_ecregrid_a-retrieve.obj: retrieve.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-retrieve.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-retrieve.Tpo -c -o lib_libMars_ecregrid_a-retrieve.obj `if test -f 'retrieve.c'; then $(CYGPATH_W) 'retrieve.c'; else $(CYGPATH_W) '$(srcdir)/retrieve.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-retrieve.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-retrieve.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='retrieve.c' object='lib_libMars_ecregrid_a-retrieve.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-retrieve.obj `if test -f 'retrieve.c'; then $(CYGPATH_W) 'retrieve.c'; else $(CYGPATH_W) '$(srcdir)/retrieve.c'; fi`
+
+lib_libMars_ecregrid_a-ibmblk.o: ibmblk.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-ibmblk.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-ibmblk.Tpo -c -o lib_libMars_ecregrid_a-ibmblk.o `test -f 'ibmblk.c' || echo '$(srcdir)/'`ibmblk.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-ibmblk.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-ibmblk.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ibmblk.c' object='lib_libMars_ecregrid_a-ibmblk.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-ibmblk.o `test -f 'ibmblk.c' || echo '$(srcdir)/'`ibmblk.c
+
+lib_libMars_ecregrid_a-ibmblk.obj: ibmblk.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-ibmblk.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-ibmblk.Tpo -c -o lib_libMars_ecregrid_a-ibmblk.obj `if test -f 'ibmblk.c'; then $(CYGPATH_W) 'ibmblk.c'; else $(CYGPATH_W) '$(srcdir)/ibmblk.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-ibmblk.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-ibmblk.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ibmblk.c' object='lib_libMars_ecregrid_a-ibmblk.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-ibmblk.obj `if test -f 'ibmblk.c'; then $(CYGPATH_W) 'ibmblk.c'; else $(CYGPATH_W) '$(srcdir)/ibmblk.c'; fi`
+
+lib_libMars_ecregrid_a-lock.o: lock.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-lock.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-lock.Tpo -c -o lib_libMars_ecregrid_a-lock.o `test -f 'lock.c' || echo '$(srcdir)/'`lock.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-lock.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-lock.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='lock.c' object='lib_libMars_ecregrid_a-lock.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-lock.o `test -f 'lock.c' || echo '$(srcdir)/'`lock.c
+
+lib_libMars_ecregrid_a-lock.obj: lock.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-lock.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-lock.Tpo -c -o lib_libMars_ecregrid_a-lock.obj `if test -f 'lock.c'; then $(CYGPATH_W) 'lock.c'; else $(CYGPATH_W) '$(srcdir)/lock.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-lock.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-lock.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='lock.c' object='lib_libMars_ecregrid_a-lock.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-lock.obj `if test -f 'lock.c'; then $(CYGPATH_W) 'lock.c'; else $(CYGPATH_W) '$(srcdir)/lock.c'; fi`
+
+lib_libMars_ecregrid_a-files.o: files.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-files.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-files.Tpo -c -o lib_libMars_ecregrid_a-files.o `test -f 'files.c' || echo '$(srcdir)/'`files.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-files.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-files.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='files.c' object='lib_libMars_ecregrid_a-files.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-files.o `test -f 'files.c' || echo '$(srcdir)/'`files.c
+
+lib_libMars_ecregrid_a-files.obj: files.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-files.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-files.Tpo -c -o lib_libMars_ecregrid_a-files.obj `if test -f 'files.c'; then $(CYGPATH_W) 'files.c'; else $(CYGPATH_W) '$(srcdir)/files.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-files.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-files.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='files.c' object='lib_libMars_ecregrid_a-files.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-files.obj `if test -f 'files.c'; then $(CYGPATH_W) 'files.c'; else $(CYGPATH_W) '$(srcdir)/files.c'; fi`
+
+lib_libMars_ecregrid_a-sh2ll.o: sh2ll.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-sh2ll.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-sh2ll.Tpo -c -o lib_libMars_ecregrid_a-sh2ll.o `test -f 'sh2ll.c' || echo '$(srcdir)/'`sh2ll.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-sh2ll.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-sh2ll.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sh2ll.c' object='lib_libMars_ecregrid_a-sh2ll.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-sh2ll.o `test -f 'sh2ll.c' || echo '$(srcdir)/'`sh2ll.c
+
+lib_libMars_ecregrid_a-sh2ll.obj: sh2ll.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-sh2ll.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-sh2ll.Tpo -c -o lib_libMars_ecregrid_a-sh2ll.obj `if test -f 'sh2ll.c'; then $(CYGPATH_W) 'sh2ll.c'; else $(CYGPATH_W) '$(srcdir)/sh2ll.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-sh2ll.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-sh2ll.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sh2ll.c' object='lib_libMars_ecregrid_a-sh2ll.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-sh2ll.obj `if test -f 'sh2ll.c'; then $(CYGPATH_W) 'sh2ll.c'; else $(CYGPATH_W) '$(srcdir)/sh2ll.c'; fi`
+
+lib_libMars_ecregrid_a-guess.o: guess.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-guess.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-guess.Tpo -c -o lib_libMars_ecregrid_a-guess.o `test -f 'guess.c' || echo '$(srcdir)/'`guess.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-guess.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-guess.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='guess.c' object='lib_libMars_ecregrid_a-guess.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-guess.o `test -f 'guess.c' || echo '$(srcdir)/'`guess.c
+
+lib_libMars_ecregrid_a-guess.obj: guess.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-guess.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-guess.Tpo -c -o lib_libMars_ecregrid_a-guess.obj `if test -f 'guess.c'; then $(CYGPATH_W) 'guess.c'; else $(CYGPATH_W) '$(srcdir)/guess.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-guess.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-guess.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='guess.c' object='lib_libMars_ecregrid_a-guess.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-guess.obj `if test -f 'guess.c'; then $(CYGPATH_W) 'guess.c'; else $(CYGPATH_W) '$(srcdir)/guess.c'; fi`
+
+lib_libMars_ecregrid_a-hypercube.o: hypercube.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-hypercube.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-hypercube.Tpo -c -o lib_libMars_ecregrid_a-hypercube.o `test -f 'hypercube.c' || echo '$(srcdir)/'`hypercube.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-hypercube.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-hypercube.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='hypercube.c' object='lib_libMars_ecregrid_a-hypercube.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-hypercube.o `test -f 'hypercube.c' || echo '$(srcdir)/'`hypercube.c
+
+lib_libMars_ecregrid_a-hypercube.obj: hypercube.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-hypercube.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-hypercube.Tpo -c -o lib_libMars_ecregrid_a-hypercube.obj `if test -f 'hypercube.c'; then $(CYGPATH_W) 'hypercube.c'; else $(CYGPATH_W) '$(srcdir)/hypercube.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-hypercube.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-hypercube.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='hypercube.c' object='lib_libMars_ecregrid_a-hypercube.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-hypercube.obj `if test -f 'hypercube.c'; then $(CYGPATH_W) 'hypercube.c'; else $(CYGPATH_W) '$(srcdir)/hypercube.c'; fi`
+
+lib_libMars_ecregrid_a-check.o: check.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-check.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-check.Tpo -c -o lib_libMars_ecregrid_a-check.o `test -f 'check.c' || echo '$(srcdir)/'`check.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-check.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-check.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='check.c' object='lib_libMars_ecregrid_a-check.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-check.o `test -f 'check.c' || echo '$(srcdir)/'`check.c
+
+lib_libMars_ecregrid_a-check.obj: check.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-check.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-check.Tpo -c -o lib_libMars_ecregrid_a-check.obj `if test -f 'check.c'; then $(CYGPATH_W) 'check.c'; else $(CYGPATH_W) '$(srcdir)/check.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-check.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-check.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='check.c' object='lib_libMars_ecregrid_a-check.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-check.obj `if test -f 'check.c'; then $(CYGPATH_W) 'check.c'; else $(CYGPATH_W) '$(srcdir)/check.c'; fi`
+
+lib_libMars_ecregrid_a-environ.o: environ.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-environ.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-environ.Tpo -c -o lib_libMars_ecregrid_a-environ.o `test -f 'environ.c' || echo '$(srcdir)/'`environ.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-environ.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-environ.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='environ.c' object='lib_libMars_ecregrid_a-environ.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-environ.o `test -f 'environ.c' || echo '$(srcdir)/'`environ.c
+
+lib_libMars_ecregrid_a-environ.obj: environ.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-environ.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-environ.Tpo -c -o lib_libMars_ecregrid_a-environ.obj `if test -f 'environ.c'; then $(CYGPATH_W) 'environ.c'; else $(CYGPATH_W) '$(srcdir)/environ.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-environ.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-environ.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='environ.c' object='lib_libMars_ecregrid_a-environ.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-environ.obj `if test -f 'environ.c'; then $(CYGPATH_W) 'environ.c'; else $(CYGPATH_W) '$(srcdir)/environ.c'; fi`
+
+lib_libMars_ecregrid_a-handler.o: handler.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-handler.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-handler.Tpo -c -o lib_libMars_ecregrid_a-handler.o `test -f 'handler.c' || echo '$(srcdir)/'`handler.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-handler.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-handler.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='handler.c' object='lib_libMars_ecregrid_a-handler.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-handler.o `test -f 'handler.c' || echo '$(srcdir)/'`handler.c
+
+lib_libMars_ecregrid_a-handler.obj: handler.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-handler.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-handler.Tpo -c -o lib_libMars_ecregrid_a-handler.obj `if test -f 'handler.c'; then $(CYGPATH_W) 'handler.c'; else $(CYGPATH_W) '$(srcdir)/handler.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-handler.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-handler.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='handler.c' object='lib_libMars_ecregrid_a-handler.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-handler.obj `if test -f 'handler.c'; then $(CYGPATH_W) 'handler.c'; else $(CYGPATH_W) '$(srcdir)/handler.c'; fi`
+
+lib_libMars_ecregrid_a-target.o: target.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-target.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-target.Tpo -c -o lib_libMars_ecregrid_a-target.o `test -f 'target.c' || echo '$(srcdir)/'`target.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-target.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-target.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='target.c' object='lib_libMars_ecregrid_a-target.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-target.o `test -f 'target.c' || echo '$(srcdir)/'`target.c
+
+lib_libMars_ecregrid_a-target.obj: target.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-target.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-target.Tpo -c -o lib_libMars_ecregrid_a-target.obj `if test -f 'target.c'; then $(CYGPATH_W) 'target.c'; else $(CYGPATH_W) '$(srcdir)/target.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-target.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-target.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='target.c' object='lib_libMars_ecregrid_a-target.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-target.obj `if test -f 'target.c'; then $(CYGPATH_W) 'target.c'; else $(CYGPATH_W) '$(srcdir)/target.c'; fi`
+
+lib_libMars_ecregrid_a-grib.o: grib.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-grib.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-grib.Tpo -c -o lib_libMars_ecregrid_a-grib.o `test -f 'grib.c' || echo '$(srcdir)/'`grib.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-grib.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-grib.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='grib.c' object='lib_libMars_ecregrid_a-grib.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-grib.o `test -f 'grib.c' || echo '$(srcdir)/'`grib.c
+
+lib_libMars_ecregrid_a-grib.obj: grib.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-grib.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-grib.Tpo -c -o lib_libMars_ecregrid_a-grib.obj `if test -f 'grib.c'; then $(CYGPATH_W) 'grib.c'; else $(CYGPATH_W) '$(srcdir)/grib.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-grib.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-grib.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='grib.c' object='lib_libMars_ecregrid_a-grib.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-grib.obj `if test -f 'grib.c'; then $(CYGPATH_W) 'grib.c'; else $(CYGPATH_W) '$(srcdir)/grib.c'; fi`
+
+lib_libMars_ecregrid_a-calc.o: calc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-calc.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-calc.Tpo -c -o lib_libMars_ecregrid_a-calc.o `test -f 'calc.c' || echo '$(srcdir)/'`calc.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-calc.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-calc.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='calc.c' object='lib_libMars_ecregrid_a-calc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-calc.o `test -f 'calc.c' || echo '$(srcdir)/'`calc.c
+
+lib_libMars_ecregrid_a-calc.obj: calc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-calc.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-calc.Tpo -c -o lib_libMars_ecregrid_a-calc.obj `if test -f 'calc.c'; then $(CYGPATH_W) 'calc.c'; else $(CYGPATH_W) '$(srcdir)/calc.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-calc.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-calc.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='calc.c' object='lib_libMars_ecregrid_a-calc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-calc.obj `if test -f 'calc.c'; then $(CYGPATH_W) 'calc.c'; else $(CYGPATH_W) '$(srcdir)/calc.c'; fi`
+
+lib_libMars_ecregrid_a-field.o: field.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-field.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-field.Tpo -c -o lib_libMars_ecregrid_a-field.o `test -f 'field.c' || echo '$(srcdir)/'`field.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-field.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-field.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='field.c' object='lib_libMars_ecregrid_a-field.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-field.o `test -f 'field.c' || echo '$(srcdir)/'`field.c
+
+lib_libMars_ecregrid_a-field.obj: field.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-field.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-field.Tpo -c -o lib_libMars_ecregrid_a-field.obj `if test -f 'field.c'; then $(CYGPATH_W) 'field.c'; else $(CYGPATH_W) '$(srcdir)/field.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-field.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-field.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='field.c' object='lib_libMars_ecregrid_a-field.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-field.obj `if test -f 'field.c'; then $(CYGPATH_W) 'field.c'; else $(CYGPATH_W) '$(srcdir)/field.c'; fi`
+
+lib_libMars_ecregrid_a-list.o: list.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-list.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-list.Tpo -c -o lib_libMars_ecregrid_a-list.o `test -f 'list.c' || echo '$(srcdir)/'`list.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-list.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-list.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='list.c' object='lib_libMars_ecregrid_a-list.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-list.o `test -f 'list.c' || echo '$(srcdir)/'`list.c
+
+lib_libMars_ecregrid_a-list.obj: list.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-list.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-list.Tpo -c -o lib_libMars_ecregrid_a-list.obj `if test -f 'list.c'; then $(CYGPATH_W) 'list.c'; else $(CYGPATH_W) '$(srcdir)/list.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-list.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-list.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='list.c' object='lib_libMars_ecregrid_a-list.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-list.obj `if test -f 'list.c'; then $(CYGPATH_W) 'list.c'; else $(CYGPATH_W) '$(srcdir)/list.c'; fi`
+
+lib_libMars_ecregrid_a-tools.o: tools.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-tools.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-tools.Tpo -c -o lib_libMars_ecregrid_a-tools.o `test -f 'tools.c' || echo '$(srcdir)/'`tools.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-tools.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-tools.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tools.c' object='lib_libMars_ecregrid_a-tools.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-tools.o `test -f 'tools.c' || echo '$(srcdir)/'`tools.c
+
+lib_libMars_ecregrid_a-tools.obj: tools.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-tools.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-tools.Tpo -c -o lib_libMars_ecregrid_a-tools.obj `if test -f 'tools.c'; then $(CYGPATH_W) 'tools.c'; else $(CYGPATH_W) '$(srcdir)/tools.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-tools.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-tools.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tools.c' object='lib_libMars_ecregrid_a-tools.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-tools.obj `if test -f 'tools.c'; then $(CYGPATH_W) 'tools.c'; else $(CYGPATH_W) '$(srcdir)/tools.c'; fi`
+
+lib_libMars_ecregrid_a-hidden.o: hidden.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-hidden.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-hidden.Tpo -c -o lib_libMars_ecregrid_a-hidden.o `test -f 'hidden.c' || echo '$(srcdir)/'`hidden.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-hidden.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-hidden.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='hidden.c' object='lib_libMars_ecregrid_a-hidden.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-hidden.o `test -f 'hidden.c' || echo '$(srcdir)/'`hidden.c
+
+lib_libMars_ecregrid_a-hidden.obj: hidden.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-hidden.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-hidden.Tpo -c -o lib_libMars_ecregrid_a-hidden.obj `if test -f 'hidden.c'; then $(CYGPATH_W) 'hidden.c'; else $(CYGPATH_W) '$(srcdir)/hidden.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-hidden.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-hidden.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='hidden.c' object='lib_libMars_ecregrid_a-hidden.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-hidden.obj `if test -f 'hidden.c'; then $(CYGPATH_W) 'hidden.c'; else $(CYGPATH_W) '$(srcdir)/hidden.c'; fi`
+
+lib_libMars_ecregrid_a-index.o: index.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-index.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-index.Tpo -c -o lib_libMars_ecregrid_a-index.o `test -f 'index.c' || echo '$(srcdir)/'`index.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-index.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-index.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='index.c' object='lib_libMars_ecregrid_a-index.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-index.o `test -f 'index.c' || echo '$(srcdir)/'`index.c
+
+lib_libMars_ecregrid_a-index.obj: index.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-index.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-index.Tpo -c -o lib_libMars_ecregrid_a-index.obj `if test -f 'index.c'; then $(CYGPATH_W) 'index.c'; else $(CYGPATH_W) '$(srcdir)/index.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-index.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-index.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='index.c' object='lib_libMars_ecregrid_a-index.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-index.obj `if test -f 'index.c'; then $(CYGPATH_W) 'index.c'; else $(CYGPATH_W) '$(srcdir)/index.c'; fi`
+
+lib_libMars_ecregrid_a-bufr.o: bufr.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-bufr.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-bufr.Tpo -c -o lib_libMars_ecregrid_a-bufr.o `test -f 'bufr.c' || echo '$(srcdir)/'`bufr.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-bufr.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-bufr.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='bufr.c' object='lib_libMars_ecregrid_a-bufr.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-bufr.o `test -f 'bufr.c' || echo '$(srcdir)/'`bufr.c
+
+lib_libMars_ecregrid_a-bufr.obj: bufr.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-bufr.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-bufr.Tpo -c -o lib_libMars_ecregrid_a-bufr.obj `if test -f 'bufr.c'; then $(CYGPATH_W) 'bufr.c'; else $(CYGPATH_W) '$(srcdir)/bufr.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-bufr.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-bufr.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='bufr.c' object='lib_libMars_ecregrid_a-bufr.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-bufr.obj `if test -f 'bufr.c'; then $(CYGPATH_W) 'bufr.c'; else $(CYGPATH_W) '$(srcdir)/bufr.c'; fi`
+
+lib_libMars_ecregrid_a-externf.o: externf.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-externf.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-externf.Tpo -c -o lib_libMars_ecregrid_a-externf.o `test -f 'externf.c' || echo '$(srcdir)/'`externf.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-externf.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-externf.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='externf.c' object='lib_libMars_ecregrid_a-externf.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-externf.o `test -f 'externf.c' || echo '$(srcdir)/'`externf.c
+
+lib_libMars_ecregrid_a-externf.obj: externf.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-externf.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-externf.Tpo -c -o lib_libMars_ecregrid_a-externf.obj `if test -f 'externf.c'; then $(CYGPATH_W) 'externf.c'; else $(CYGPATH_W) '$(srcdir)/externf.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-externf.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-externf.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='externf.c' object='lib_libMars_ecregrid_a-externf.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-externf.obj `if test -f 'externf.c'; then $(CYGPATH_W) 'externf.c'; else $(CYGPATH_W) '$(srcdir)/externf.c'; fi`
+
+lib_libMars_ecregrid_a-service.o: service.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-service.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-service.Tpo -c -o lib_libMars_ecregrid_a-service.o `test -f 'service.c' || echo '$(srcdir)/'`service.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-service.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-service.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='service.c' object='lib_libMars_ecregrid_a-service.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-service.o `test -f 'service.c' || echo '$(srcdir)/'`service.c
+
+lib_libMars_ecregrid_a-service.obj: service.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-service.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-service.Tpo -c -o lib_libMars_ecregrid_a-service.obj `if test -f 'service.c'; then $(CYGPATH_W) 'service.c'; else $(CYGPATH_W) '$(srcdir)/service.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-service.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-service.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='service.c' object='lib_libMars_ecregrid_a-service.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-service.obj `if test -f 'service.c'; then $(CYGPATH_W) 'service.c'; else $(CYGPATH_W) '$(srcdir)/service.c'; fi`
+
+lib_libMars_ecregrid_a-xservice.o: xservice.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-xservice.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-xservice.Tpo -c -o lib_libMars_ecregrid_a-xservice.o `test -f 'xservice.c' || echo '$(srcdir)/'`xservice.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-xservice.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-xservice.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xservice.c' object='lib_libMars_ecregrid_a-xservice.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-xservice.o `test -f 'xservice.c' || echo '$(srcdir)/'`xservice.c
+
+lib_libMars_ecregrid_a-xservice.obj: xservice.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-xservice.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-xservice.Tpo -c -o lib_libMars_ecregrid_a-xservice.obj `if test -f 'xservice.c'; then $(CYGPATH_W) 'xservice.c'; else $(CYGPATH_W) '$(srcdir)/xservice.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-xservice.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-xservice.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xservice.c' object='lib_libMars_ecregrid_a-xservice.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-xservice.obj `if test -f 'xservice.c'; then $(CYGPATH_W) 'xservice.c'; else $(CYGPATH_W) '$(srcdir)/xservice.c'; fi`
+
+lib_libMars_ecregrid_a-udp.o: udp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-udp.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-udp.Tpo -c -o lib_libMars_ecregrid_a-udp.o `test -f 'udp.c' || echo '$(srcdir)/'`udp.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-udp.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-udp.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='udp.c' object='lib_libMars_ecregrid_a-udp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-udp.o `test -f 'udp.c' || echo '$(srcdir)/'`udp.c
+
+lib_libMars_ecregrid_a-udp.obj: udp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-udp.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-udp.Tpo -c -o lib_libMars_ecregrid_a-udp.obj `if test -f 'udp.c'; then $(CYGPATH_W) 'udp.c'; else $(CYGPATH_W) '$(srcdir)/udp.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-udp.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-udp.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='udp.c' object='lib_libMars_ecregrid_a-udp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-udp.obj `if test -f 'udp.c'; then $(CYGPATH_W) 'udp.c'; else $(CYGPATH_W) '$(srcdir)/udp.c'; fi`
+
+lib_libMars_ecregrid_a-queue.o: queue.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-queue.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-queue.Tpo -c -o lib_libMars_ecregrid_a-queue.o `test -f 'queue.c' || echo '$(srcdir)/'`queue.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-queue.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-queue.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='queue.c' object='lib_libMars_ecregrid_a-queue.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-queue.o `test -f 'queue.c' || echo '$(srcdir)/'`queue.c
+
+lib_libMars_ecregrid_a-queue.obj: queue.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-queue.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-queue.Tpo -c -o lib_libMars_ecregrid_a-queue.obj `if test -f 'queue.c'; then $(CYGPATH_W) 'queue.c'; else $(CYGPATH_W) '$(srcdir)/queue.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-queue.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-queue.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='queue.c' object='lib_libMars_ecregrid_a-queue.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-queue.obj `if test -f 'queue.c'; then $(CYGPATH_W) 'queue.c'; else $(CYGPATH_W) '$(srcdir)/queue.c'; fi`
+
+lib_libMars_ecregrid_a-variable.o: variable.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-variable.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-variable.Tpo -c -o lib_libMars_ecregrid_a-variable.o `test -f 'variable.c' || echo '$(srcdir)/'`variable.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-variable.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-variable.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='variable.c' object='lib_libMars_ecregrid_a-variable.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-variable.o `test -f 'variable.c' || echo '$(srcdir)/'`variable.c
+
+lib_libMars_ecregrid_a-variable.obj: variable.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-variable.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-variable.Tpo -c -o lib_libMars_ecregrid_a-variable.obj `if test -f 'variable.c'; then $(CYGPATH_W) 'variable.c'; else $(CYGPATH_W) '$(srcdir)/variable.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-variable.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-variable.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='variable.c' object='lib_libMars_ecregrid_a-variable.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-variable.obj `if test -f 'variable.c'; then $(CYGPATH_W) 'variable.c'; else $(CYGPATH_W) '$(srcdir)/variable.c'; fi`
+
+lib_libMars_ecregrid_a-filebase.o: filebase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-filebase.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-filebase.Tpo -c -o lib_libMars_ecregrid_a-filebase.o `test -f 'filebase.c' || echo '$(srcdir)/'`filebase.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-filebase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-filebase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='filebase.c' object='lib_libMars_ecregrid_a-filebase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-filebase.o `test -f 'filebase.c' || echo '$(srcdir)/'`filebase.c
+
+lib_libMars_ecregrid_a-filebase.obj: filebase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-filebase.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-filebase.Tpo -c -o lib_libMars_ecregrid_a-filebase.obj `if test -f 'filebase.c'; then $(CYGPATH_W) 'filebase.c'; else $(CYGPATH_W) '$(srcdir)/filebase.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-filebase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-filebase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='filebase.c' object='lib_libMars_ecregrid_a-filebase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-filebase.obj `if test -f 'filebase.c'; then $(CYGPATH_W) 'filebase.c'; else $(CYGPATH_W) '$(srcdir)/filebase.c'; fi`
+
+lib_libMars_ecregrid_a-account.o: account.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-account.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-account.Tpo -c -o lib_libMars_ecregrid_a-account.o `test -f 'account.c' || echo '$(srcdir)/'`account.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-account.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-account.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='account.c' object='lib_libMars_ecregrid_a-account.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-account.o `test -f 'account.c' || echo '$(srcdir)/'`account.c
+
+lib_libMars_ecregrid_a-account.obj: account.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-account.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-account.Tpo -c -o lib_libMars_ecregrid_a-account.obj `if test -f 'account.c'; then $(CYGPATH_W) 'account.c'; else $(CYGPATH_W) '$(srcdir)/account.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-account.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-account.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='account.c' object='lib_libMars_ecregrid_a-account.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-account.obj `if test -f 'account.c'; then $(CYGPATH_W) 'account.c'; else $(CYGPATH_W) '$(srcdir)/account.c'; fi`
+
+lib_libMars_ecregrid_a-cos.o: cos.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-cos.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-cos.Tpo -c -o lib_libMars_ecregrid_a-cos.o `test -f 'cos.c' || echo '$(srcdir)/'`cos.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-cos.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-cos.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='cos.c' object='lib_libMars_ecregrid_a-cos.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-cos.o `test -f 'cos.c' || echo '$(srcdir)/'`cos.c
+
+lib_libMars_ecregrid_a-cos.obj: cos.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-cos.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-cos.Tpo -c -o lib_libMars_ecregrid_a-cos.obj `if test -f 'cos.c'; then $(CYGPATH_W) 'cos.c'; else $(CYGPATH_W) '$(srcdir)/cos.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-cos.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-cos.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='cos.c' object='lib_libMars_ecregrid_a-cos.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-cos.obj `if test -f 'cos.c'; then $(CYGPATH_W) 'cos.c'; else $(CYGPATH_W) '$(srcdir)/cos.c'; fi`
+
+lib_libMars_ecregrid_a-llmatrix.o: llmatrix.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-llmatrix.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-llmatrix.Tpo -c -o lib_libMars_ecregrid_a-llmatrix.o `test -f 'llmatrix.c' || echo '$(srcdir)/'`llmatrix.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-llmatrix.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-llmatrix.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='llmatrix.c' object='lib_libMars_ecregrid_a-llmatrix.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-llmatrix.o `test -f 'llmatrix.c' || echo '$(srcdir)/'`llmatrix.c
+
+lib_libMars_ecregrid_a-llmatrix.obj: llmatrix.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-llmatrix.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-llmatrix.Tpo -c -o lib_libMars_ecregrid_a-llmatrix.obj `if test -f 'llmatrix.c'; then $(CYGPATH_W) 'llmatrix.c'; else $(CYGPATH_W) '$(srcdir)/llmatrix.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-llmatrix.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-llmatrix.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='llmatrix.c' object='lib_libMars_ecregrid_a-llmatrix.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-llmatrix.obj `if test -f 'llmatrix.c'; then $(CYGPATH_W) 'llmatrix.c'; else $(CYGPATH_W) '$(srcdir)/llmatrix.c'; fi`
+
+lib_libMars_ecregrid_a-pproc.o: pproc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-pproc.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-pproc.Tpo -c -o lib_libMars_ecregrid_a-pproc.o `test -f 'pproc.c' || echo '$(srcdir)/'`pproc.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-pproc.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-pproc.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pproc.c' object='lib_libMars_ecregrid_a-pproc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-pproc.o `test -f 'pproc.c' || echo '$(srcdir)/'`pproc.c
+
+lib_libMars_ecregrid_a-pproc.obj: pproc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-pproc.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-pproc.Tpo -c -o lib_libMars_ecregrid_a-pproc.obj `if test -f 'pproc.c'; then $(CYGPATH_W) 'pproc.c'; else $(CYGPATH_W) '$(srcdir)/pproc.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-pproc.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-pproc.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pproc.c' object='lib_libMars_ecregrid_a-pproc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-pproc.obj `if test -f 'pproc.c'; then $(CYGPATH_W) 'pproc.c'; else $(CYGPATH_W) '$(srcdir)/pproc.c'; fi`
+
+lib_libMars_ecregrid_a-restricted.o: restricted.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-restricted.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-restricted.Tpo -c -o lib_libMars_ecregrid_a-restricted.o `test -f 'restricted.c' || echo '$(srcdir)/'`restricted.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-restricted.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-restricted.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='restricted.c' object='lib_libMars_ecregrid_a-restricted.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-restricted.o `test -f 'restricted.c' || echo '$(srcdir)/'`restricted.c
+
+lib_libMars_ecregrid_a-restricted.obj: restricted.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-restricted.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-restricted.Tpo -c -o lib_libMars_ecregrid_a-restricted.obj `if test -f 'restricted.c'; then $(CYGPATH_W) 'restricted.c'; else $(CYGPATH_W) '$(srcdir)/restricted.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-restricted.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-restricted.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='restricted.c' object='lib_libMars_ecregrid_a-restricted.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-restricted.obj `if test -f 'restricted.c'; then $(CYGPATH_W) 'restricted.c'; else $(CYGPATH_W) '$(srcdir)/restricted.c'; fi`
+
+lib_libMars_ecregrid_a-wind.o: wind.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-wind.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-wind.Tpo -c -o lib_libMars_ecregrid_a-wind.o `test -f 'wind.c' || echo '$(srcdir)/'`wind.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-wind.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-wind.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wind.c' object='lib_libMars_ecregrid_a-wind.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-wind.o `test -f 'wind.c' || echo '$(srcdir)/'`wind.c
+
+lib_libMars_ecregrid_a-wind.obj: wind.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-wind.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-wind.Tpo -c -o lib_libMars_ecregrid_a-wind.obj `if test -f 'wind.c'; then $(CYGPATH_W) 'wind.c'; else $(CYGPATH_W) '$(srcdir)/wind.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-wind.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-wind.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wind.c' object='lib_libMars_ecregrid_a-wind.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-wind.obj `if test -f 'wind.c'; then $(CYGPATH_W) 'wind.c'; else $(CYGPATH_W) '$(srcdir)/wind.c'; fi`
+
+lib_libMars_ecregrid_a-control.o: control.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-control.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-control.Tpo -c -o lib_libMars_ecregrid_a-control.o `test -f 'control.c' || echo '$(srcdir)/'`control.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-control.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-control.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='control.c' object='lib_libMars_ecregrid_a-control.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-control.o `test -f 'control.c' || echo '$(srcdir)/'`control.c
+
+lib_libMars_ecregrid_a-control.obj: control.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-control.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-control.Tpo -c -o lib_libMars_ecregrid_a-control.obj `if test -f 'control.c'; then $(CYGPATH_W) 'control.c'; else $(CYGPATH_W) '$(srcdir)/control.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-control.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-control.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='control.c' object='lib_libMars_ecregrid_a-control.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-control.obj `if test -f 'control.c'; then $(CYGPATH_W) 'control.c'; else $(CYGPATH_W) '$(srcdir)/control.c'; fi`
+
+lib_libMars_ecregrid_a-stream.o: stream.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-stream.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-stream.Tpo -c -o lib_libMars_ecregrid_a-stream.o `test -f 'stream.c' || echo '$(srcdir)/'`stream.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-stream.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-stream.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stream.c' object='lib_libMars_ecregrid_a-stream.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-stream.o `test -f 'stream.c' || echo '$(srcdir)/'`stream.c
+
+lib_libMars_ecregrid_a-stream.obj: stream.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-stream.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-stream.Tpo -c -o lib_libMars_ecregrid_a-stream.obj `if test -f 'stream.c'; then $(CYGPATH_W) 'stream.c'; else $(CYGPATH_W) '$(srcdir)/stream.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-stream.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-stream.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stream.c' object='lib_libMars_ecregrid_a-stream.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-stream.obj `if test -f 'stream.c'; then $(CYGPATH_W) 'stream.c'; else $(CYGPATH_W) '$(srcdir)/stream.c'; fi`
+
+lib_libMars_ecregrid_a-remove.o: remove.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-remove.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-remove.Tpo -c -o lib_libMars_ecregrid_a-remove.o `test -f 'remove.c' || echo '$(srcdir)/'`remove.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-remove.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-remove.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='remove.c' object='lib_libMars_ecregrid_a-remove.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-remove.o `test -f 'remove.c' || echo '$(srcdir)/'`remove.c
+
+lib_libMars_ecregrid_a-remove.obj: remove.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-remove.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-remove.Tpo -c -o lib_libMars_ecregrid_a-remove.obj `if test -f 'remove.c'; then $(CYGPATH_W) 'remove.c'; else $(CYGPATH_W) '$(srcdir)/remove.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-remove.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-remove.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='remove.c' object='lib_libMars_ecregrid_a-remove.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-remove.obj `if test -f 'remove.c'; then $(CYGPATH_W) 'remove.c'; else $(CYGPATH_W) '$(srcdir)/remove.c'; fi`
+
+lib_libMars_ecregrid_a-authenticate.o: authenticate.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-authenticate.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-authenticate.Tpo -c -o lib_libMars_ecregrid_a-authenticate.o `test -f 'authenticate.c' || echo '$(srcdir)/'`authenticate.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-authenticate.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-authenticate.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='authenticate.c' object='lib_libMars_ecregrid_a-authenticate.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-authenticate.o `test -f 'authenticate.c' || echo '$(srcdir)/'`authenticate.c
+
+lib_libMars_ecregrid_a-authenticate.obj: authenticate.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-authenticate.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-authenticate.Tpo -c -o lib_libMars_ecregrid_a-authenticate.obj `if test -f 'authenticate.c'; then $(CYGPATH_W) 'authenticate.c'; else $(CYGPATH_W) '$(srcdir)/authenticate.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-authenticate.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-authenticate.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='authenticate.c' object='lib_libMars_ecregrid_a-authenticate.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-authenticate.obj `if test -f 'authenticate.c'; then $(CYGPATH_W) 'authenticate.c'; else $(CYGPATH_W) '$(srcdir)/authenticate.c'; fi`
+
+lib_libMars_ecregrid_a-flatfilebase.o: flatfilebase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-flatfilebase.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-flatfilebase.Tpo -c -o lib_libMars_ecregrid_a-flatfilebase.o `test -f 'flatfilebase.c' || echo '$(srcdir)/'`flatfilebase.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-flatfilebase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-flatfilebase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='flatfilebase.c' object='lib_libMars_ecregrid_a-flatfilebase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-flatfilebase.o `test -f 'flatfilebase.c' || echo '$(srcdir)/'`flatfilebase.c
+
+lib_libMars_ecregrid_a-flatfilebase.obj: flatfilebase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-flatfilebase.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-flatfilebase.Tpo -c -o lib_libMars_ecregrid_a-flatfilebase.obj `if test -f 'flatfilebase.c'; then $(CYGPATH_W) 'flatfilebase.c'; else $(CYGPATH_W) '$(srcdir)/flatfilebase.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-flatfilebase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-flatfilebase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='flatfilebase.c' object='lib_libMars_ecregrid_a-flatfilebase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-flatfilebase.obj `if test -f 'flatfilebase.c'; then $(CYGPATH_W) 'flatfilebase.c'; else $(CYGPATH_W) '$(srcdir)/flatfilebase.c'; fi`
+
+lib_libMars_ecregrid_a-time.o: time.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-time.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-time.Tpo -c -o lib_libMars_ecregrid_a-time.o `test -f 'time.c' || echo '$(srcdir)/'`time.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-time.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-time.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='time.c' object='lib_libMars_ecregrid_a-time.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-time.o `test -f 'time.c' || echo '$(srcdir)/'`time.c
+
+lib_libMars_ecregrid_a-time.obj: time.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-time.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-time.Tpo -c -o lib_libMars_ecregrid_a-time.obj `if test -f 'time.c'; then $(CYGPATH_W) 'time.c'; else $(CYGPATH_W) '$(srcdir)/time.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-time.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-time.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='time.c' object='lib_libMars_ecregrid_a-time.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-time.obj `if test -f 'time.c'; then $(CYGPATH_W) 'time.c'; else $(CYGPATH_W) '$(srcdir)/time.c'; fi`
+
+lib_libMars_ecregrid_a-timer.o: timer.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-timer.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-timer.Tpo -c -o lib_libMars_ecregrid_a-timer.o `test -f 'timer.c' || echo '$(srcdir)/'`timer.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-timer.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-timer.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='timer.c' object='lib_libMars_ecregrid_a-timer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-timer.o `test -f 'timer.c' || echo '$(srcdir)/'`timer.c
+
+lib_libMars_ecregrid_a-timer.obj: timer.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-timer.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-timer.Tpo -c -o lib_libMars_ecregrid_a-timer.obj `if test -f 'timer.c'; then $(CYGPATH_W) 'timer.c'; else $(CYGPATH_W) '$(srcdir)/timer.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-timer.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-timer.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='timer.c' object='lib_libMars_ecregrid_a-timer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-timer.obj `if test -f 'timer.c'; then $(CYGPATH_W) 'timer.c'; else $(CYGPATH_W) '$(srcdir)/timer.c'; fi`
+
+lib_libMars_ecregrid_a-version.o: version.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-version.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-version.Tpo -c -o lib_libMars_ecregrid_a-version.o `test -f 'version.c' || echo '$(srcdir)/'`version.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-version.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-version.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='version.c' object='lib_libMars_ecregrid_a-version.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-version.o `test -f 'version.c' || echo '$(srcdir)/'`version.c
+
+lib_libMars_ecregrid_a-version.obj: version.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-version.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-version.Tpo -c -o lib_libMars_ecregrid_a-version.obj `if test -f 'version.c'; then $(CYGPATH_W) 'version.c'; else $(CYGPATH_W) '$(srcdir)/version.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-version.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-version.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='version.c' object='lib_libMars_ecregrid_a-version.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-version.obj `if test -f 'version.c'; then $(CYGPATH_W) 'version.c'; else $(CYGPATH_W) '$(srcdir)/version.c'; fi`
+
+lib_libMars_ecregrid_a-statistics.o: statistics.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-statistics.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-statistics.Tpo -c -o lib_libMars_ecregrid_a-statistics.o `test -f 'statistics.c' || echo '$(srcdir)/'`statistics.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-statistics.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-statistics.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='statistics.c' object='lib_libMars_ecregrid_a-statistics.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-statistics.o `test -f 'statistics.c' || echo '$(srcdir)/'`statistics.c
+
+lib_libMars_ecregrid_a-statistics.obj: statistics.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-statistics.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-statistics.Tpo -c -o lib_libMars_ecregrid_a-statistics.obj `if test -f 'statistics.c'; then $(CYGPATH_W) 'statistics.c'; else $(CYGPATH_W) '$(srcdir)/statistics.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-statistics.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-statistics.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='statistics.c' object='lib_libMars_ecregrid_a-statistics.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-statistics.obj `if test -f 'statistics.c'; then $(CYGPATH_W) 'statistics.c'; else $(CYGPATH_W) '$(srcdir)/statistics.c'; fi`
+
+lib_libMars_ecregrid_a-metadata.o: metadata.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-metadata.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-metadata.Tpo -c -o lib_libMars_ecregrid_a-metadata.o `test -f 'metadata.c' || echo '$(srcdir)/'`metadata.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-metadata.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-metadata.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='metadata.c' object='lib_libMars_ecregrid_a-metadata.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-metadata.o `test -f 'metadata.c' || echo '$(srcdir)/'`metadata.c
+
+lib_libMars_ecregrid_a-metadata.obj: metadata.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-metadata.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-metadata.Tpo -c -o lib_libMars_ecregrid_a-metadata.obj `if test -f 'metadata.c'; then $(CYGPATH_W) 'metadata.c'; else $(CYGPATH_W) '$(srcdir)/metadata.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-metadata.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-metadata.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='metadata.c' object='lib_libMars_ecregrid_a-metadata.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-metadata.obj `if test -f 'metadata.c'; then $(CYGPATH_W) 'metadata.c'; else $(CYGPATH_W) '$(srcdir)/metadata.c'; fi`
+
+lib_libMars_ecregrid_a-webbase.o: webbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-webbase.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-webbase.Tpo -c -o lib_libMars_ecregrid_a-webbase.o `test -f 'webbase.c' || echo '$(srcdir)/'`webbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-webbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-webbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='webbase.c' object='lib_libMars_ecregrid_a-webbase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-webbase.o `test -f 'webbase.c' || echo '$(srcdir)/'`webbase.c
+
+lib_libMars_ecregrid_a-webbase.obj: webbase.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-webbase.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-webbase.Tpo -c -o lib_libMars_ecregrid_a-webbase.obj `if test -f 'webbase.c'; then $(CYGPATH_W) 'webbase.c'; else $(CYGPATH_W) '$(srcdir)/webbase.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-webbase.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-webbase.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='webbase.c' object='lib_libMars_ecregrid_a-webbase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-webbase.obj `if test -f 'webbase.c'; then $(CYGPATH_W) 'webbase.c'; else $(CYGPATH_W) '$(srcdir)/webbase.c'; fi`
+
+lib_libMars_ecregrid_a-ecaccess.o: ecaccess.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-ecaccess.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-ecaccess.Tpo -c -o lib_libMars_ecregrid_a-ecaccess.o `test -f 'ecaccess.c' || echo '$(srcdir)/'`ecaccess.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-ecaccess.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-ecaccess.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ecaccess.c' object='lib_libMars_ecregrid_a-ecaccess.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-ecaccess.o `test -f 'ecaccess.c' || echo '$(srcdir)/'`ecaccess.c
+
+lib_libMars_ecregrid_a-ecaccess.obj: ecaccess.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-ecaccess.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-ecaccess.Tpo -c -o lib_libMars_ecregrid_a-ecaccess.obj `if test -f 'ecaccess.c'; then $(CYGPATH_W) 'ecaccess.c'; else $(CYGPATH_W) '$(srcdir)/ecaccess.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-ecaccess.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-ecaccess.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ecaccess.c' object='lib_libMars_ecregrid_a-ecaccess.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-ecaccess.obj `if test -f 'ecaccess.c'; then $(CYGPATH_W) 'ecaccess.c'; else $(CYGPATH_W) '$(srcdir)/ecaccess.c'; fi`
+
+lib_libMars_ecregrid_a-free.o: free.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-free.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-free.Tpo -c -o lib_libMars_ecregrid_a-free.o `test -f 'free.c' || echo '$(srcdir)/'`free.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-free.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-free.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='free.c' object='lib_libMars_ecregrid_a-free.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-free.o `test -f 'free.c' || echo '$(srcdir)/'`free.c
+
+lib_libMars_ecregrid_a-free.obj: free.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-free.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-free.Tpo -c -o lib_libMars_ecregrid_a-free.obj `if test -f 'free.c'; then $(CYGPATH_W) 'free.c'; else $(CYGPATH_W) '$(srcdir)/free.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-free.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-free.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='free.c' object='lib_libMars_ecregrid_a-free.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-free.obj `if test -f 'free.c'; then $(CYGPATH_W) 'free.c'; else $(CYGPATH_W) '$(srcdir)/free.c'; fi`
+
+lib_libMars_ecregrid_a-schedule.o: schedule.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-schedule.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-schedule.Tpo -c -o lib_libMars_ecregrid_a-schedule.o `test -f 'schedule.c' || echo '$(srcdir)/'`schedule.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-schedule.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-schedule.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='schedule.c' object='lib_libMars_ecregrid_a-schedule.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-schedule.o `test -f 'schedule.c' || echo '$(srcdir)/'`schedule.c
+
+lib_libMars_ecregrid_a-schedule.obj: schedule.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-schedule.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-schedule.Tpo -c -o lib_libMars_ecregrid_a-schedule.obj `if test -f 'schedule.c'; then $(CYGPATH_W) 'schedule.c'; else $(CYGPATH_W) '$(srcdir)/schedule.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-schedule.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-schedule.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='schedule.c' object='lib_libMars_ecregrid_a-schedule.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-schedule.obj `if test -f 'schedule.c'; then $(CYGPATH_W) 'schedule.c'; else $(CYGPATH_W) '$(srcdir)/schedule.c'; fi`
+
+lib_libMars_ecregrid_a-rpcmars.o: rpcmars.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-rpcmars.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-rpcmars.Tpo -c -o lib_libMars_ecregrid_a-rpcmars.o `test -f 'rpcmars.c' || echo '$(srcdir)/'`rpcmars.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-rpcmars.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-rpcmars.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='rpcmars.c' object='lib_libMars_ecregrid_a-rpcmars.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-rpcmars.o `test -f 'rpcmars.c' || echo '$(srcdir)/'`rpcmars.c
+
+lib_libMars_ecregrid_a-rpcmars.obj: rpcmars.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_libMars_ecregrid_a-rpcmars.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-rpcmars.Tpo -c -o lib_libMars_ecregrid_a-rpcmars.obj `if test -f 'rpcmars.c'; then $(CYGPATH_W) 'rpcmars.c'; else $(CYGPATH_W) '$(srcdir)/rpcmars.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-rpcmars.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-rpcmars.Po
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='rpcmars.c' object='lib_libMars_ecregrid_a-rpcmars.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_libMars_ecregrid_a-rpcmars.obj `if test -f 'rpcmars.c'; then $(CYGPATH_W) 'rpcmars.c'; else $(CYGPATH_W) '$(srcdir)/rpcmars.c'; fi`
+
+.cc.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+lib_libMars_ecregrid_a-odb.o: odb.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib_libMars_ecregrid_a-odb.o -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-odb.Tpo -c -o lib_libMars_ecregrid_a-odb.o `test -f 'odb.cc' || echo '$(srcdir)/'`odb.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-odb.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-odb.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='odb.cc' object='lib_libMars_ecregrid_a-odb.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMars_ecregrid_a-odb.o `test -f 'odb.cc' || echo '$(srcdir)/'`odb.cc
+
+lib_libMars_ecregrid_a-odb.obj: odb.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib_libMars_ecregrid_a-odb.obj -MD -MP -MF $(DEPDIR)/lib_libMars_ecregrid_a-odb.Tpo -c -o lib_libMars_ecregrid_a-odb.obj `if test -f 'odb.cc'; then $(CYGPATH_W) 'odb.cc'; else $(CYGPATH_W) '$(srcdir)/odb.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMars_ecregrid_a-odb.Tpo $(DEPDIR)/lib_libMars_ecregrid_a-odb.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='odb.cc' object='lib_libMars_ecregrid_a-odb.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMars_ecregrid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMars_ecregrid_a-odb.obj `if test -f 'odb.cc'; then $(CYGPATH_W) 'odb.cc'; else $(CYGPATH_W) '$(srcdir)/odb.cc'; fi`
+
+.y.c:
+	$(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-rm -f lib/$(am__dirstamp)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-rm -f langy.c
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am \
+	install-libLIBRARIES install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-libLIBRARIES
+
+
+#lib_libmacro_api_f90_a_SOURCES = macro_api_f90.f90
+
+#include_HEADERS = macro_api.h
+
+# for the fortran macro_api library
+# note that we need to put FCFLAGS first in case the user's flags
+# need to overide the autotools flags
+# lib_libmacro_api_f90_a_FCFLAGS = ${FCFLAGS} @METVIEW_FC_FLAGS@
+
+#noinst_lib_libMars_a_HEADERS  = base.h bufr.h control.h \
+#	field.h globals.h grib.h \
+#	ibmblk.h lang.h mars.h mcs.h \
+#	netbase.h proto.h rpcmars.h tools.h \
+#	cos.h
+
+#all: lib
+#	$(UPDATE_TITLE)
+
+lib:
+	ln -s ../../lib lib
+
+$(include_dir):
+	mkdir $(include_dir)
+
+#macro_header: $(include_dir)/macro_api.h
+
+#$(include_dir)/macro_api.h: macro_api.h
+#	${INSTALL} macro_api.h $(include_dir)
+
+langy.c : langl.c
+langl.c : langl.l
+	$(LEX) $(LFLAGS) langl.l
+	sed -e s/yy/yy_mars/g < lex.yy.c > $@
+	$(RM) lex.yy.c
+langy.c : langy.y
+	$(YACC) $(YFLAGS) langy.y
+	sed -e s/yy/yy_mars/g < y.tab.c > $@
+	$(RM) y.tab.c
+
+rpcmars.h : rpcmars.x
+	$(RPCGEN) -h -o rpcmars.h rpcmars.x
+	- chmod a+rw rpcmars.h
+
+rpcmars.c : rpcmars.x
+	$(RPCGEN) -c -o rpcmars.c rpcmars.x
+	- chmod a+rw rpcmars.c
+
+# a note about cleaning: in order that the end user does not need to
+# install lex and yacc, we distribute the generated source files. We also
+# don't want these to be cleaned during a normal clean, because the end user
+# would then need to have lex and yacc installed... so we don't clean
+# these by default, but instead have a separate target, 'cleanall' which
+# remove the lex/yacc generated source.
+
+clean-all: clean
+	-rm -f langy.c langl.c
+
+# do not distribute certain files in the tarball...
+#dist-hook:
+#	rm -f $(distdir)/langy.c $(distdir)/langl.c
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/libMars-ecregrid/account.c b/src/libMars-ecregrid/account.c
new file mode 100644
index 0000000..b5d316e
--- /dev/null
+++ b/src/libMars-ecregrid/account.c
@@ -0,0 +1,207 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include <setjmp.h>
+#include <signal.h>
+#include <stdarg.h>
+
+#include "mars.h"
+
+/*
+
+	This file implements different authetication methods:
+	ecmwf: is the method used at ECMWF. Each MARS request is
+		   verified once against a list of MARS restrictions
+		   for the user requesting the data.
+	eccert: is the method used for the MARS client installed
+			in Member States or Co-operating States to
+			access ECMWF MARS. 
+
+	The method can be defined per request (see options.c) or
+	per database (see netbase.c).
+
+	MARS administrators wanting to add new validation methods
+	should give it a name and create a validate proc (see below).
+*/
+
+typedef err (*validateproc) (request *,request *);
+
+typedef struct validation_handler {
+	const char   *name;
+	validateproc proc;
+} validation_handler;
+
+err eccert_validate(request *r,request *e);
+err ecmwf_validate(request *r,request *e);
+err ams_validate(request *r,request *e);
+err null_validate(request *r,request *e);
+
+static validation_handler handlers[] = {
+	{"eccert",  eccert_validate},
+	{"ecmwf",   ecmwf_validate},
+	{"null",    null_validate},
+	{"ams",     ams_validate},
+};
+
+
+err ams_validate(request *r,request *e)
+{
+	mars.request_id = 42;
+	return 0;
+}
+
+err ecmwf_validate(request *r,request *e)
+{
+	err ret = 0;
+	char buf[80];
+
+	marslog(LOG_DBUG,"Validation using ECMWF restrictions");
+
+	mars.request_id = -1;
+	start_timer();
+	ret = local_validate_request(r,e);
+	if(mars.debug)
+	{
+		marslog(LOG_DBUG,"Request after authentication:");
+		print_all_requests(r);
+	}
+	stop_timer(buf);
+	if(*buf) marslog(LOG_DBUG,"Authentication time: %s",buf);
+	return ret;
+}
+
+int eccert_validate(request *r,request *e)
+{
+	char *buf;
+	XDR x;
+	netblk blk;
+	char *tmp;
+	FILE *f;
+	err ret = 0;
+	int len;
+	int ok = 0;
+	int buflen;
+
+	marslog(LOG_DBUG,"Validation using ECCERT");
+
+	memset(&blk,0,sizeof(blk));
+	blk.req = clone_one_request(r);
+	blk.env = clone_one_request(e);
+
+	buflen = 4096;
+	buf    = MALLOC(buflen);
+
+	do{
+		xdrmem_create(&x,buf,buflen,XDR_ENCODE);
+		if(!xdr_netblk(&x,&blk))
+		{
+			xdr_destroy(&x);
+			FREE(buf);
+			buflen += buflen / 2 + 1;
+			buf = MALLOC(buflen);
+		} else ok = 1;
+	} while(!ok);
+
+	free_all_requests(blk.req);
+	free_all_requests(blk.env);
+
+	len = xdr_getpos(&x);
+	xdr_destroy(&x);
+
+	tmp = marstmp();
+	f = fopen(tmp,"w");
+
+	if(!f)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot open %s",tmp);
+		return -2;
+	}
+
+	if(fwrite(buf,1,len,f) != len)
+	{
+		marslog(LOG_EROR|LOG_PERR,"fwrite(%s)",tmp);
+		fclose(f);
+		FREE(buf);
+		return -2;
+	}
+
+	if(fclose(f))
+	{
+		marslog(LOG_EROR|LOG_PERR,"fclose(%s)",tmp);
+		FREE(buf);
+		return -2;
+	}
+
+	sprintf(buf,"eccmd ecmars -q %s",tmp);
+	marslog(LOG_DBUG,"%s",buf);
+
+	f = popen(buf,"r");
+	if(!f)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot execute %s",buf);
+		return -2;
+	}
+
+	len = fread(buf,1,buflen,f);
+	marslog(LOG_DBUG,"token len %d",len);
+	if(len<=0)
+	{
+		marslog(LOG_EROR|LOG_PERR,"fread");
+		ret = -2;
+	}
+
+	if(len == buflen )
+	{
+		marslog(LOG_EROR,"Certificate to long");
+		ret = -2;
+	}
+
+	if(pclose(f) != 0)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Got non zero code from eccert");
+		ret =  -2;
+	}
+	unlink(tmp);
+
+	if(ret == 0)
+	{
+		FREE(mars.certstr);
+		mars.certstr = 0;
+		mars.certstr = MALLOC(len);
+		memcpy(mars.certstr,buf,len);
+		mars.certlen = len;
+	}
+
+	FREE(buf);
+
+	return ret;
+}
+
+err null_validate(request *r,request *e)
+{
+	mars.request_id = -1;
+	marslog(LOG_DBUG,"NO Validation performed");
+	return NOERR;
+}
+
+err validate_request(request *r,request *e, const char *method)
+{
+	err ret = NOERR;
+	int i = 0;
+
+	for(i=0;i<NUMBER(handlers);i++)
+		if(method && EQ(handlers[i].name,method))
+		{
+			ret |= handlers[i].proc(r,e);
+		}
+	
+	return ret;
+}
+
diff --git a/src/libMars-ecregrid/archive.c b/src/libMars-ecregrid/archive.c
new file mode 100755
index 0000000..4d16145
--- /dev/null
+++ b/src/libMars-ecregrid/archive.c
@@ -0,0 +1,229 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+/*
+
+   B.Raoult
+   ECMWF Oct-93
+
+ */
+
+#include <errno.h>
+#include "mars.h"
+
+err feed(database *bout,request *r)
+{
+	extern base_class *netbase;
+	extern base_class *gribbase;
+	static long  buflen = 1024*800;
+	static char *buffer = NULL;
+	database   *bin;
+	int i;
+	int cnt = 0;
+	err ret;
+
+	bin  = database_open(gribbase,NULL,r,get_environ(),READ_MODE);
+	if(!bin) return -2;
+
+	if(!buffer) buffer = reserve_mem(buflen);
+
+	if(observation(r)) r = 0;
+
+	do
+	{
+		request *s = clone_all_requests(r);
+		long length = buflen;
+
+		ret = database_read(bin,s,buffer,&length);
+
+		if(ret == BUF_TO_SMALL)
+		{
+			release_mem(buffer);
+			buflen = length;
+			buffer = reserve_mem(buflen);
+
+			ret = 0;
+			database_close(bin);
+			bin  = database_open(gribbase,NULL,r,get_environ(),	
+					READ_MODE);
+
+			for(i=0;i<(cnt+1);i++)
+				ret = database_read(bin,s,buffer,&length);
+		}
+
+		if(ret == 0) {
+			ret = database_write(bout,s,buffer,&length);
+			cnt++;
+		}
+
+		free_all_requests(s);
+
+		if(ret == EOF)
+		{
+			ret = 0;
+			break;
+		}
+
+	}while(ret == 0);
+
+	database_close(bin);
+
+	marslog(LOG_INFO,"%d records fed to database '%s'",cnt,bout->name);
+
+	return ret;
+
+}
+
+static request* make_arc_request(const char *path)
+{
+	const char *x;
+	long buflen = 0;
+	long length = 0;
+	char *buffer;
+	request *a = empty_request("ARCHIVE");
+	err e;
+	int cnt = 0;
+
+	buflen = mars.readany_buffer_size;
+	length = buflen;
+
+	FILE *f = fopen(path,"r");
+	if(f == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"ARCHIVE : '%s'",path);
+		marsexit(1);
+	}
+
+	buffer = reserve_mem(length);
+	length = buflen;
+	while((e = _readany(f,buffer,&length)) == NOERR || (e == BUF_TO_SMALL))
+	{
+		request *g = empty_request(0);
+		grib_to_request(g,buffer,length);
+		reqmerge(a,g);
+		free_all_requests(g);
+		length = buflen;
+		cnt++;
+	}
+
+#if 0
+	x = get_value(a,"_RESOL",0);    if(x) add_value(a,"RESOL",x);
+	x = get_value(a,"_GAUSSIAN",0); if(x) add_value(a,"RESOL",x);
+	x = get_value(a,"_GRID_EW",0);  if(x) add_value(a,"RESOL","%d",
+			(int)(360.0/atof(x)));
+	x = get_value(a,"_GRID_NS",0);  if(x) add_value(a,"RESOL","%d",
+			(int)(360.0/atof(x)));
+#endif
+
+	set_value(a,"EXPECT","%d",cnt);
+
+	return a;
+}
+
+err handle_archive(request *r,void *data)
+{
+	int i    = 0;		
+	err e = 0;
+	const char *s  = 0;
+
+	mars.fields_are_ok = true;
+	mars.fields_in_order = true;
+	mars.fields_have_same_size = true;
+
+	if(mars.autoarch)
+	{
+		const char *s = no_quotes(get_value(r,"SOURCE",0));
+		request *a = make_arc_request(s);
+
+		if(mars.autoarch != 2)
+		{
+			unset_value(r,"CLASS");
+			unset_value(r,"TYPE");
+			unset_value(r,"STREAM");
+			unset_value(r,"EXPVER");
+			unset_value(r,"LEVTYPE");
+			unset_value(r,"LEVELIST");
+			unset_value(r,"REPRES");
+			unset_value(r,"DOMAIN");
+			unset_value(r,"PARAM");
+			unset_value(r,"DATE");
+			unset_value(r,"TIME");
+			unset_value(r,"STEP");
+			unset_value(r,"DISP");
+			unset_value(r,"RESOL");
+			unset_value(r,"NUMBER");
+			unset_value(r,"METHOD");
+			unset_value(r,"SYSTEM");
+		}
+
+		reqcpy(r,a);
+		free_all_requests(a);
+
+		marslog(LOG_INFO,"Archive request changed to: ");
+		print_one_request(r);
+	}
+
+	while( s = get_value(r,"DATABASE",i++) )
+	{
+		database   *base;
+		const char *name = 0;
+		request    *cache = 0;
+		int retry = 0;
+		int slp = 1;
+
+		request *b = findbase(s);
+		if(!b) return -2;
+
+		for(;;)
+		{
+
+			base = openbase(b,r,&name,&cache,WRITE_MODE);
+			if(base) {
+				e = database_archive(base,r);
+				marslog(LOG_INFO,"database_archive return %d", e);
+				database_close(base);
+			} else e = -2;
+
+			if(e != RETRY_FOREVER_ERR && e != RETRY_ERR)
+				break;
+
+			if(e == RETRY_ERR)
+			{
+				if(retry<mars.maxretries)
+				{
+					retry++;
+					marslog(LOG_WARN,"Sleeping %d minutes",slp);
+					sleep(slp*60);
+				}
+				else
+				{
+					e = -2;
+					marslog(LOG_WARN,"Giving up after %d retries",retry);
+					break;
+				}
+			}
+
+			if(e == RETRY_FOREVER_ERR)
+			{
+				if(slp<5) 
+					slp += 1;
+				marslog(LOG_WARN,"Sleeping %d minutes",slp);
+				sleep(slp*60);
+			}
+
+		}
+
+		if(e != 0)
+			break;
+
+	}
+
+	return e;
+}
diff --git a/src/libMars-ecregrid/authenticate.c b/src/libMars-ecregrid/authenticate.c
new file mode 100644
index 0000000..f00421d
--- /dev/null
+++ b/src/libMars-ecregrid/authenticate.c
@@ -0,0 +1,985 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include <time.h>
+#include <sys/time.h>
+#include <grp.h>
+
+/* All possible categories in a restriction */
+const char *names[] = {
+	"user",
+	"group",
+	"host",
+	"domain",
+};
+
+/* For validation date/time computation */
+typedef struct marsdate {
+	int date;
+	int time;
+} marsdate;
+
+/* Restriction handler */
+typedef int  (*restrictproc) (request*,request*,request*,void*);
+
+typedef struct restriction_handler {
+	const char  *name;
+	restrictproc proc;
+} restriction_handler;
+
+static const char* alias2group(const char* alias)
+{
+	static request *aliases = 0;
+
+	if(!aliases)
+		aliases = empty_request("alias");
+
+	if(count_values(aliases,alias) == 0)
+	{
+		struct group *grmain = 0;
+		gid_t gid;
+		char grname[1024];
+
+		if( (grmain = getgrnam(alias)) != NULL)
+		{
+			gid = grmain->gr_gid;
+			strcpy(grname,grmain->gr_name);
+
+			setgrent();
+			while (grmain = getgrent())
+				if(gid == grmain->gr_gid)
+					if(strlen(grname) > strlen(grmain->gr_name))
+					{
+						gid = grmain->gr_gid;
+						strcpy(grname,grmain->gr_name);
+					}
+
+			endgrent();
+			set_value(aliases,alias,grname);
+			marslog(LOG_DBUG,"unalias: %s to %s",alias,grname);
+		}
+		else
+		{
+			marslog(LOG_WARN,"unknown group '%s'. Setting to 'unknown'",alias);
+			set_value(aliases,alias,"unknown");
+		}
+	}
+
+	return get_value(aliases,alias,0);
+}
+
+/* SIMPLE restriction */
+static int handle_simple(request *req, request *restriction, request* reply, void *data)
+{
+    const char *par = get_value(restriction,"param",0);
+    const char *val = get_value(restriction,"value",0);
+	boolean    match = false;
+
+    int i   = 0;
+    const char *v = 0;
+
+	marslog(LOG_DBUG,"Handle simple par=%s, val=%s",par,val);
+	if(is_number(val))
+	{
+		while((v = get_value(req,par,i++)) != 0)
+			if(atoi(v) == atoi(val))
+				match = true;
+	}
+	else
+		while((v = get_value(req,par,i++)) != 0)
+			if(strcmp(val,upcase(v)) == 0)
+				match = true;
+
+    return match;
+}
+/* end of SIMPLE restriction */
+
+/* NOT restriction */
+static int handle_not(request *req, request *restriction, request* reply, void *data)
+{
+    const char *par = get_value(restriction,"param",0);
+    const char *val = get_value(restriction,"value",0);
+	boolean    match = false;
+
+    int i   = 0;
+    const char *v = 0;
+
+	marslog(LOG_DBUG,"Handle not par=%s, val=%s",par,val);
+	if(is_number(val))
+	{
+		while((v = get_value(req,par,i++)) != 0)
+			if(atoi(v) != atoi(val))
+				match = true;
+	}
+	else
+		while((v = get_value(req,par,i++)) != 0)
+			if(strcmp(val,upcase(v)) != 0)
+				match = true;
+
+	/* The parameter is not found in the request */
+	if(v == 0 && i == 1)
+		match = true;
+
+    return match;
+}
+/* end of NOT restriction */
+
+/* DATE restriction */
+static void marsdates(request *r, marsdate* max, marsdate *min, marsdate* today, boolean include_step)
+{
+	int i;
+	int v;
+	int maxstep = 0;
+	int minstep = INT_MAX;
+	int steps   = count_values(r,"STEP");
+	int fcmonth_days = 0;
+
+	time_t now;
+	struct tm *t;
+
+	if(!steps || !include_step)
+	{
+		/* the case of observations */
+		maxstep = 0;
+		minstep = 0;
+	}
+	else
+		for(i=0;i<count_values(r,"STEP");i++)
+		{
+			int n = atoi(get_value(r,"STEP",i));
+			if(n>maxstep) maxstep = n;
+			if(n<minstep) minstep = n;
+		}
+
+	for(i=0;i<count_values(r,"DATE");i++)
+	{
+		const char* p = get_value(r,"DATE",i);
+		int n;
+		if(is_number(p))
+			n = atoi(p);
+		else
+		{
+			long julian = 0,second = 0; boolean isjul;
+			parsedate(p,&julian,&second,&isjul);
+			n = julian_to_date(julian,mars.y2k);
+		}
+		if(n>max->date) max->date = n;
+		if(n<min->date) min->date = n;
+	}
+
+	/* Consider 30 day months */
+	for(i=0;i<count_values(r,"FCMONTH");i++)
+	{
+		const char* p = get_value(r,"FCMONTH",i);
+		int n = atoi(p) * 30;
+		if(n>fcmonth_days) fcmonth_days = n;
+	}
+
+	for(i=0;i<count_values(r,"TIME");i++)
+	{
+		const char *time = get_value(r,"TIME",i);
+		/* when a range of times is not expanded */
+		if(is_number(time))
+		{
+			int n = atoi(get_value(r,"TIME",i));
+			if(n>max->time) max->time = n;
+			if(n<min->time) min->time = n;
+		}
+	}
+
+	v = date_to_julian(max->date) + (max->time/100 + maxstep)/24;
+	if(mars.valid_data_includes_fcmonth)
+		v += fcmonth_days;
+	max->date=julian_to_date(v,mars.y2k);
+	max->time=(max->time/100 + maxstep)%24;
+
+	v = date_to_julian(min->date) + (min->time/100 + minstep)/24;
+	min->date=julian_to_date(v,mars.y2k);
+	min->time=(min->time/100 + minstep)%24;
+
+	time(&now);
+	t = gmtime(&now);
+
+	today->date = (t->tm_year+1900) * 10000 + (t->tm_mon+1)* 100 + t->tm_mday;
+	today->time = t->tm_hour;
+}
+
+static int handle_date(request *req, request *restriction, request *reply, void *data)
+{
+	int      hours = atoi(get_value(restriction,"value",0));
+	const char *param = get_value(restriction,"param",0);
+	boolean reverse = (param != 0) && (strcmp(param,"ETAD")==0);
+	marsdate max   = { 0,0,};
+	marsdate min   = {INT_MAX, INT_MAX,};
+	marsdate today = { 0,0,};
+	const char *type = get_value(req,"TYPE",0);
+	boolean include_step = true;
+
+	marslog(LOG_DBUG,"Handle date par=%s, val=%d",param,hours);
+	/* Climatology does not have a date, and no restrictions */
+	if(type && EQ(type,"CL"))
+		return false;
+
+	marsdates(req,&max,&min,&today,include_step);
+
+	if(mars.debug)
+	{
+		marslog(LOG_DBUG,"Maximum date %d, time %d",max.date,max.time);
+		marslog(LOG_DBUG,"Minimum date %d, time %d",min.date,min.time);
+		marslog(LOG_DBUG,"Now date %d, time %d",today.date,today.time);
+	}
+
+	if(reverse)
+	{
+		/* long requestdate   = (min.date + (min.time+hours)/24)*100 + (min.time + hours)%24; */
+		int reqjulian      = date_to_julian(min.date)+ (min.time + hours)/24;
+		long requestdate   =  julian_to_date(reqjulian,mars.y2k)*100 + (min.time + hours)%24;
+		long todaydate     = today.date*100 +today.time; 
+		if((requestdate) <= (todaydate))
+		{
+			marslog(LOG_DBUG,"requestdate (%ld) <= todaydate (%ld)",requestdate,todaydate);
+			return true;
+		}
+	}
+	else
+	{
+		int reqjulian      = date_to_julian(max.date)+ (max.time + hours)/24;
+		long requestdate   =  julian_to_date(reqjulian,mars.y2k)*100 + (max.time + hours)%24;
+
+		/* long requestdate   = (max.date + (max.time + hours)/24)*100 + (max.time + hours)%24; */
+		long todaydate     = today.date*100 +today.time;
+
+		if(requestdate >= todaydate)
+		{
+			marslog(LOG_DBUG,"requestdate (%ld) >= todaydate (%ld)",requestdate,todaydate);
+			return true;
+		}
+	}
+
+	return false;
+}
+/* end of DATE restriction */
+
+static int handle_basetime(request *req, request *restriction, request *reply, void *data)
+{
+	int      hours = atoi(get_value(restriction,"value",0));
+	marsdate max   = { 0,0,};
+	marsdate min   = {INT_MAX, INT_MAX,};
+	marsdate today = { 0,0,};
+	const char *type = get_value(req,"TYPE",0);
+	boolean  include_step = false;
+
+	marslog(LOG_DBUG,"Handle basetime val=%d",hours);
+	/* Climatology does not have a date, and no restrictions */
+	if(type && EQ(type,"CL"))
+		return false;
+
+	marsdates(req,&max,&min,&today,include_step);
+
+	if(mars.debug)
+	{
+		marslog(LOG_DBUG,"Maximum date %d, time %d",max.date,max.time);
+		marslog(LOG_DBUG,"Minimum date %d, time %d",min.date,min.time);
+		marslog(LOG_DBUG,"Now date %d, time %d",today.date,today.time);
+	}
+
+	{
+		int reqjulian      = date_to_julian(max.date)+ (max.time + hours)/24;
+		long requestdate   =  julian_to_date(reqjulian,mars.y2k)*100 + (max.time + hours)%24;
+
+		/* long requestdate   = (max.date + (max.time + hours)/24)*100 + (max.time + hours)%24; */
+		long todaydate     = today.date*100 +today.time;
+
+		if(requestdate >= todaydate)
+		{
+			marslog(LOG_DBUG,"requestdate (%ld) >= todaydate (%ld)",requestdate,todaydate);
+			return true;
+		}
+	}
+
+	return false;
+}
+/* end of DATE restriction */
+
+
+typedef struct seasonaldate_ {
+	long  date;
+	long  yyyymm;
+	long  dd;
+	float dayofmonth;
+	long  time;
+} seasonaldate ;
+
+/* DAYOFMONTH restriction */
+static int handle_dayofmonth(request *r, request *restriction, request *reply, void *d)
+{
+	float  dayofmonth = atof(get_value(restriction,"value",0));
+	time_t now;
+	struct tm *t;
+	seasonaldate today;
+	seasonaldate data;
+	int i = 0;
+
+	marslog(LOG_DBUG,"Handle dayofmonth %f",dayofmonth);
+
+	/* Get GMT date/time, not localtime (to avoid users manipulate TZ env. variable) */
+	time(&now);
+	t = gmtime(&now);
+
+	today.yyyymm = (t->tm_year+1900) * 100 + (t->tm_mon+1);
+	today.dd     = t->tm_mday;
+	today.time   = t->tm_hour;
+	today.dayofmonth = (float)t->tm_mday + (float)today.time/24.0; 
+
+	/* Get data's date */
+	data.date = -1;
+	for(i=0;i<count_values(r,"DATE");i++)
+	{
+		const char* p = get_value(r,"DATE",i);
+		int n;
+		if(is_number(p))
+			n = atoi(p);
+		else
+		{
+			long julian = 0,second = 0; boolean isjul;
+			parsedate(p,&julian,&second,&isjul);
+			n = julian_to_date(julian,mars.y2k);
+		}
+		if(n>data.date) data.date = n;
+	}
+
+	/* Get data's time */
+	data.time=-1;
+	for(i=0;i<count_values(r,"TIME");i++)
+	{
+		const char *time = get_value(r,"TIME",i);
+		if(is_number(time))
+		{
+			int n = atoi(get_value(r,"TIME",i));
+			if(n>data.time) data.time = n;
+		}
+	}
+
+	data.yyyymm = (int)(data.date/100);
+	data.dd     = (int)(data.date%100);
+
+
+	marslog(LOG_DBUG,"Today's month %ld",today.yyyymm);
+	marslog(LOG_DBUG,"Data's month %ld",data.yyyymm);
+	marslog(LOG_DBUG,"Today's dayofmonth %lf",today.dayofmonth);
+	marslog(LOG_DBUG,"Restriction's dayofmonth %lf",dayofmonth);
+	/* The logic: 
+	   Note that data in the future, ie (today.yyyymm < data.yyyymm), is always restricted */
+	if( (today.yyyymm > data.yyyymm) ||
+		((today.yyyymm == data.yyyymm) && (today.dayofmonth >= dayofmonth)))
+	{
+		marslog(LOG_DBUG,"Data is not restricted");
+		return false;
+	}
+
+	marslog(LOG_DBUG,"Data is RESTRICTED");
+	return true;
+}
+/* end of DAYOFMONTH restriction */
+
+
+/* AND restriction */
+static int handle_and(request *req, request *restriction, request *reply, void *data)
+{
+	request *left  = get_subrequest(restriction,"left",0);
+	request *right = get_subrequest(restriction,"right",0);
+
+	boolean ll = handle_restriction(req,left,reply,data);
+	boolean rr = handle_restriction(req,right,reply,data);
+
+	free_all_requests(left);
+	free_all_requests(right);
+
+	if(ll && rr)
+		return true;
+
+	return false;
+}
+/* end of AND restriction */
+
+/* FILTER restriction */
+static int handle_filter(request *req, request *restriction, request *reply, void *data)
+{
+    const char *par = get_value(restriction,"param",0);
+    const char *val = get_value(restriction,"value",0);
+	boolean found = false;
+
+    int i   = 0;
+    const char *v = 0;
+
+	marslog(LOG_DBUG,"Handle filter par=%s, val=%s",par,val);
+	if(is_number(val))
+	{
+		while((v = get_value(req,par,i++)) != 0 && !found)
+			if(atoi(v) == atoi(val))
+				found = true;
+	}
+	else
+		while((v = get_value(req,par,i++)) != 0 && !found)
+			if(strcmp(val,upcase(v)) == 0)
+				found = true;
+
+	if(found)
+	{
+		set_value(reply,"filter",par);
+		add_value(reply,"filter",val);
+	}
+    return false;
+}
+/* end of FILTER restriction */
+
+
+/* FILTEROUT restriction */
+static int handle_filterout(request *req, request *restriction, request *reply, void *data)
+{
+    const char *par = get_value(restriction,"param",0);
+    const char *val = 0;
+	int i = 0;
+	request *filter = 0;
+
+	marslog(LOG_DBUG,"Handle filterout par=%s",par);
+	/* If the request does not contain the parameter, stop here */
+	if(count_values(req,par) == 0)
+		return false;
+
+	filter = empty_request(par);
+
+	/* For each value in the request, check whether it is restricted */
+	while((val = get_value(req,par,i++)) != NULL)
+	{
+		int j = 0;
+		const char *vrestr = 0;
+		boolean found = false;
+
+		if(is_number(val))
+		{
+			int v = atoi(val);
+			while(!found && (vrestr = get_value(restriction,"value",j++)) != NULL)
+				found = (v == atoi(vrestr));
+		}
+		else
+			while(!found && (vrestr = get_value(restriction,"value",j++)) != NULL)
+				found = (strcmp(upcase(val),vrestr)==0);
+			
+
+		if(found)
+			add_value(filter,"remove","%s",val);
+		else
+			add_value(filter,"keep","%s",val);
+
+	}
+
+	if(mars.debug)
+	{
+		marslog(LOG_DBUG,"Filter out the following request:");
+		print_all_requests(filter);
+	}
+
+	/* Set the values not found in the restriction */
+	if(count_values(filter,"keep") != 0)
+	{
+		valcpy(req,filter,(char *)par,"keep");
+	}	
+	else
+	{
+		marslog(LOG_WARN,"Values provided for %s are restricted",(char *)par);
+		/* marslog(LOG_EXIT,"Please, contact User Support for any queries"); */
+		set_value(filter,"accept","no");
+		return true;
+	}
+
+	free_all_requests(filter);
+
+    return false;
+}
+/* end of FILTEROUT restriction */
+
+static restriction_handler handlers[] = {
+	{ "simple",    handle_simple},
+	{ "not",       handle_not},
+	{ "date",      handle_date},
+	{ "and",       handle_and,},
+	{ "filter",    handle_filter,},
+	{ "filterout", handle_filterout,},
+	{ "dayofmonth",handle_dayofmonth,},
+	{ "hoursfrombasetime",  handle_basetime,},
+};
+
+boolean handle_restriction(request *req, request *r, request *reply, void *data)
+{
+	int i = 0;
+	request *restriction = r;
+
+	while(restriction)
+	{
+		restrictproc handler = 0;
+		for(i=0;i<NUMBER(handlers) && !handler;i++)
+			if(strcmp(handlers[i].name,restriction->name)==0)
+				handler = handlers[i].proc;
+
+		if(handler)
+		{
+			if(handler(req,restriction,reply,data))
+			{
+				const char *info = no_quotes(get_value(restriction,"info",0));
+				const char *url = get_value(restriction,"url",0);
+				set_value(reply,"accept","no");
+				if(info)
+					set_value(reply,"info","restricted access to %s data.",info);
+				if(url)
+				{
+					set_value(reply,"url","For more information, look at ");
+					add_value(reply,"url","%s.",url);
+				}
+				return true;
+			}
+		}
+		else
+		{
+			FILE *f  = mail_open("mar","Mars account internal error");
+			mail_msg(f,"Internal error. No handler for restriction '%s'",restriction->name);
+			mail_request(f,"Restriction rule:",restriction);
+			mail_close(f);
+		}
+		restriction = restriction->next;
+	}
+
+	set_value(reply,"accept","yes");
+	set_value(reply,"reqid","-1");
+	return false;
+}
+
+static request* mars_environment(request *environ, request *r)
+{
+	request *defaults  = 0;
+	int     nameidx   = 0;
+	request *nenviron = 0;
+
+	defaults = r;
+	while(defaults)
+	{
+		const char *category = names[nameidx];
+
+		if(strcmp(defaults->name,"default") == 0)
+		{
+			const char *restricted = 0;
+			int i = 0;
+
+			/* Scan all categories */
+			while((restricted = get_value(defaults,category,i++)) != 0)
+			{
+				const char *user = 0;
+				int j = 0;
+				if(strcmp(restricted,"*") == 0)
+				{
+					nenviron = clone_one_request(environ);
+					return nenviron;
+				}
+
+				while((user = get_value(environ,category,j++)) != 0)
+				{
+					if(category == names[1])
+						user = alias2group(user);
+						
+					if(strcmp(restricted,user) == 0)
+					{
+						const char *marsrest = 0;
+						int k = 0;
+
+						/* Create MARS environment with MARS restrictions */
+						/* except those to which the user belong          */
+						nenviron = empty_request("environ");
+						while((marsrest = get_value(defaults,"restriction",k++)) != 0)
+						{
+							const char *marsgroup = 0;
+							int l = 0;
+							boolean belong = false;
+
+							/* Check if user belongs to the restriction group */
+							while((marsgroup = get_value(environ,"group",l++)) != 0 && !belong)
+								if(strcmp(alias2group(marsgroup),marsrest) == 0)
+									belong = true;
+
+							/* If not in this group, the restriction applies */
+							if(!belong)
+								add_value(nenviron,"group",marsrest);
+						}
+						return nenviron;
+					}
+				}
+			}
+		}
+
+		defaults = defaults->next;
+		if(!defaults && (++nameidx < NUMBER(names)))
+			defaults = r;
+	}
+
+	return nenviron;
+}
+
+static request* mars_ems_categories(request *environ, request *r)
+{
+	request *rule  = 0;
+	request *nenviron = empty_request("environ");
+
+
+	rule = r;
+	while(rule)
+	{
+		if(strcmp(rule->name,"rule") == 0)
+		{
+			const char *rulcat = 0;
+			int i = 0;
+			int match = 0;
+
+
+			/* Scan all categories */
+			while((rulcat = get_value(rule,"category",i++)) != 0 && !match)
+			{
+				const char *usercat = 0;
+				int j = 0;
+
+				while((usercat = get_value(environ,"category",j++)) != 0 && !match)
+				{
+					if(strcmp(rulcat,usercat) == 0)
+					{
+						if(mars.debug)
+						{
+							marslog(LOG_DBUG,"Got match on '%s'",rulcat);
+							print_one_request(environ);
+							print_one_request(rule);
+						}
+						match++;
+					}
+				}
+			}
+
+			if(match)
+			{
+				const char *p = 0;
+				int k = 0;
+				while((p = get_value(rule,"restrict",k++)) != 0)
+					add_unique_value(nenviron,"group",p);
+			}
+		}
+		rule = rule->next;
+	}
+
+	rule = r;
+	while(rule)
+	{
+		if(strcmp(rule->name,"rule") == 0)
+		{
+			const char *rulcat = 0;
+			int i = 0;
+			int match = 0;
+
+
+			/* Scan all categories */
+			while((rulcat = get_value(rule,"category",i++)) != 0 && !match)
+			{
+				const char *usercat = 0;
+				int j = 0;
+
+				while((usercat = get_value(environ,"category",j++)) != 0 && !match)
+				{
+					if(strcmp(rulcat,usercat) == 0)
+					{
+						if(mars.debug)
+						{
+							marslog(LOG_DBUG,"Got match on '%s'",rulcat);
+							print_one_request(environ);
+							print_one_request(rule);
+						}
+						match++;
+					}
+				}
+			}
+
+			if(match)
+			{
+				const char *p = 0;
+				int k = 0;
+				while((p = get_value(rule,"grant",k++)) != 0)
+				{
+					if(strcmp(p,"all") == 0)
+					{
+						unset_value(nenviron,"group");
+						return nenviron;
+					}
+					unset_param_value(nenviron,"group",p);
+				}
+
+			}
+		}
+		rule = rule->next;
+	}
+
+	return nenviron;
+}
+
+static void validate_user(request *req, request *env, request *reply)
+{
+	static request *r = 0;
+	request *restriction = 0;
+	request *access      = 0;
+	int     nameidx = 0;
+	int     i       = 0;
+	int     j       = 0;
+	request *environ = 0;
+	
+	if(!r) r = read_request_file(mars.authfile);
+
+	if(get_value(env,"category",0) != NULL)
+	{
+		environ = mars_ems_categories(env,r);
+	}
+	else
+	{
+		/* Get 'default' mars restrictions */
+		environ = mars_environment(env,r);
+	}
+
+	if(mars.debug)
+	{
+		marslog(LOG_DBUG,"Default mars environment");
+		if(environ)
+			print_all_requests(environ);
+		else
+			marslog(LOG_DBUG,"(empty)");
+	}
+
+	if(!environ)
+	{
+		set_value(reply,"accept","no");
+		set_value(reply,"info","User is not registered");
+
+		return;
+	}
+
+	/* Scan restriction requests, following 'names' order */
+	access = r;
+	while(access)
+	{
+		const char *category = names[nameidx];
+		const char *restricted = 0;
+
+		if(strcmp(access->name,"access") == 0)
+		{
+
+			i = 0;
+			/* Scan a given category */
+			while((restricted = get_value(access,category,i++)) != 0)
+			{
+				const char *user = 0;
+				j = 0;
+				while((user = get_value(environ,category,j++)) != 0)
+				{
+					if(strcmp(restricted,user) == 0)
+					{
+						request *more = get_subrequest(access,"restriction",0);
+						if(!restriction)
+							restriction = more;
+						else
+						{
+							request *s = restriction;
+							while(s->next) s = s->next;
+							s->next = more;
+						}
+					}
+				}
+			}
+		}
+
+		access = access->next;
+		if(!access && (++nameidx < NUMBER(names)))
+			access = r;
+	}
+	
+	handle_restriction(req,restriction,reply,NULL);
+
+	if(restriction)
+		free_all_requests(restriction);
+
+	if(environ)
+		free_all_requests(environ);
+}
+
+static request *change_environment(request *real)
+{
+	const char *useTest    = getenv("MARS_ENV");
+	const char *who        = get_value(real,"user",0);
+
+	if(!who || !EQ(who,"max"))
+		return 0;
+
+	if(useTest)
+	{
+		request *s = read_request_file(useTest);
+		marslog(LOG_WARN,"User %s has changed the environment",who);
+		print_all_requests(s);
+		return s;
+	}
+	return 0;
+}
+
+err local_validate_request(request *req, request *env)
+{
+	request *reply   = empty_request("reply");
+	err     ret      = 0;
+	const char *p    = 0;
+
+	validate_user(req,env,reply);
+
+	if(mars.debug)
+	{
+		marslog(LOG_DBUG,"Environment:");
+		print_all_requests(env);
+		marslog(LOG_DBUG,"Authentication:");
+		print_all_requests(reply);
+	}
+
+	p = get_value(reply,"accept",0);
+	if(p && (*p == 'n'))
+	{
+		int i = 0;
+
+		marslog(LOG_EROR,"Request validation failed:");
+		while(p = get_value(reply,"info",i++))
+			marslog(LOG_EROR,"%s",p);
+
+		i=0;
+		while(p = get_value(reply,"url",i++))
+			marslog(LOG_EROR,"%s",p);
+
+		marslog(LOG_EROR,"For any queries, please, contact User Support");
+		ret = -2;
+	}
+
+	p = get_value(reply,"filter",0);
+	if(p) mars.restriction = true;
+
+	p = get_value(reply,"reqid",0);
+	if(p) mars.request_id = atol(p);
+	set_value(req,"_REQID","%ld",mars.request_id);
+
+	if(ret)
+	{
+		FILE *f = mail_open(mars.authmail,"Mars account failure");
+		const char *inf = 0;
+		int k = 0;
+		while((inf = get_value(reply,"info",k++)) != 0)
+			mail_msg(f,"%s",inf);
+		mail_request(f,"MARS Environment:",env);
+		mail_request(f,"MARS Request:",req);
+		mail_close(f);
+	}
+
+	free_all_requests(reply);
+
+	return ret;
+}
+
+void print_user_restrictions(request *env, request *auth)
+{
+	request *environ     = 0;
+	request *access      = 0;
+	request *restriction = 0;
+	int      nameidx     = 0;
+
+	if(!env)
+	{
+		marslog(LOG_EROR,"Empty environment");
+		return;
+	}
+	
+	if(!auth)
+	{
+		marslog(LOG_EROR,"Empty authentication file");
+		return;
+	}
+	
+	environ = mars_environment(env,auth);
+	if(!environ)
+	{
+		const char *user = get_value(env,"user",0);
+		if(user)
+			printf("User '%s' is not registered\n",user);
+		return;
+	}
+
+	access = auth;
+	while(access)
+	{
+		const char *category = names[nameidx];
+		const char *restricted = 0;
+
+		if(strcmp(access->name,"access") == 0)
+		{
+			int i = 0;
+			/* Scan a given category */
+			while((restricted = get_value(access,category,i++)) != 0)
+			{
+				const char *user = 0;
+				int j = 0;
+				while((user = get_value(environ,category,j++)) != 0)
+				{
+					if(strcmp(restricted,user) == 0)
+					{
+						static boolean z00 = false;
+						if(strcmp(restricted,"mars0z")==0)
+							z00 = true;
+						if(! (strcmp(restricted,"mars0a") == 0 && z00))
+						{
+							request *more = get_subrequest(access,"restriction",0);
+							if(!restriction)
+								restriction = more;
+							else
+							{
+								request *s = restriction;
+								while(s->next) s = s->next;
+								s->next = more;
+							}
+						}
+					}
+				}
+			}
+		}
+
+		access = access->next;
+		if(!access && (++nameidx < NUMBER(names)))
+			access = auth;
+	}
+
+	if(restriction)
+	{
+		request *r = restriction;
+		printf("User '%s' has restricted/filtered access to the following MARS data :\n",get_value(env,"user",0));
+		while(r)
+		{
+			const char *msg = get_value(r,"info",0);
+			if(msg)
+				printf("  - %s\n",msg);
+			r = r->next;
+		}
+	}
+	else
+	{
+		printf("User '%s' has unrestricted access to MARS data\n",get_value(env,"user",0));
+	}
+}
+
diff --git a/src/libMars-ecregrid/base.c b/src/libMars-ecregrid/base.c
new file mode 100755
index 0000000..48be500
--- /dev/null
+++ b/src/libMars-ecregrid/base.c
@@ -0,0 +1,266 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+/*
+
+B.Raoult
+ECMWF Oct-93
+
+*/
+
+#include "mars.h"
+#include "base.h"
+#ifdef sgi
+#include <bstring.h>
+#endif
+
+/* extern base_class *cachebase; */
+extern base_class *netbase;
+extern base_class *nfdbbase;
+extern base_class *filebase;
+extern base_class *targetbase;
+extern base_class *nullbase;
+extern base_class *dhsbase;
+extern base_class *flatfilebase;
+extern base_class *multibase;
+extern base_class *apibase;
+extern base_class *odbbase;
+
+static base_class **bases[] = {
+	&nullbase,
+	&targetbase,
+	&filebase,
+#ifdef ECMWF
+#ifndef NOFDB
+	&nfdbbase,
+#endif
+#endif
+	&odbbase,
+	&netbase,
+	/* &cachebase, */
+	&dhsbase,
+	&flatfilebase,
+	&multibase,
+    &apibase,
+};
+
+static database* open_db = 0;
+
+base_class *base_class_by_name(const char *name)
+{
+	int i;
+
+	for(i=0;i<NUMBER(bases);i++)
+		if(strcasecmp(name,(*bases[i])->name)==0)
+			return *bases[i];
+
+	marslog(LOG_EROR,"Cannot find base class named '%s'",name);
+	/* return NULL; */
+	return nullbase; /* return nullbase, so request can progress */
+}
+
+static database* new_database(base_class *driver,const char *name)
+{
+	database   *b;
+
+	if(driver == NULL) return NULL;
+
+	b = NEW_CLEAR(database);
+
+	if(!driver->inited)
+	{
+		if(driver->init) driver->init();
+		driver->inited = true;
+	}
+
+	b->next   = open_db;
+	b->driver = driver;
+	b->name   = strcache(name);
+
+	if(driver->private_size)
+	{
+		b->data   = MALLOC(driver->private_size);
+		bzero(b->data,(driver->private_size));
+
+		get_options(driver->name,name,
+		    b->data,driver->options_count,driver->options);
+	}
+
+	open_db = b;
+
+	return b;
+}
+
+static void free_database(database *b)
+{
+	database *p = open_db;
+	database *q = 0;
+	while(p)
+	{
+		if(p == b)
+		{
+			if(q) q->next = b->next;
+			else  open_db = b->next;
+			break;
+		}
+		q = p;
+		p = p->next;
+	}
+
+	if(b->data) FREE(b->data);
+	strfree(b->name);
+	FREE(b);
+}
+
+database *database_of(void *data)
+{
+	database* d = open_db;
+	while(d)
+	{
+		if(d->data == data)
+			return d;
+		d = d->next;
+	}
+	return 0;
+}
+
+const char* database_name(void *data)
+{
+	database* d = database_of(data);
+	return d?d->name:"<unknown>";
+}
+
+
+err database_validate(base_class *driver,const char *name,
+	request *r,request *e,int mode)
+{
+	int ret = 0;
+
+
+	if(ret == 0)
+	{
+		database  *b = new_database(driver,name);
+		if(!b) return -1;
+		if(driver->validate != NULL && 
+				driver->validate(b->data,r,e,mode) != NOERR)
+					ret = -1;
+		 free_database(b);
+	}
+	 return ret;
+}
+
+typedef struct validate_data {
+    char* file;
+    char* only;
+} validate_data;
+
+static option validate_opts[] = {
+	{"rules",NULL,NULL,NULL, t_str,sizeof(char*),OFFSET(validate_data,file),},
+	{"only",    NULL,NULL,NULL, t_str,sizeof(char*),OFFSET(validate_data,only),},
+};
+
+database *database_open(base_class *driver,const char *name,
+request *r,request *e,int mode)
+{
+	database  *b;
+	validate_data data;	
+
+	if(name)
+	{
+		get_options(driver->name,name,&data,NUMBER(validate_opts),
+			validate_opts);
+
+		if(data.only)
+		{
+			char h[80];
+			gethostname(h,sizeof(h));
+			if(strncmp(data.only,h,strlen(data.only)) != 0)
+				return NULL;
+		}
+
+		if(data.file)
+		{
+			rule *rules = read_check_file(config_file(data.file));
+			int e = check_one_request(rules,r)?NOERR:-1;
+			free_rule(rules);
+			if(e) return NULL;
+		}
+	}
+
+	b = new_database(driver,name);
+	if(!b) return NULL;
+
+	if(driver->validate != NULL && driver->validate(b->data,r,e,mode) != NOERR)
+	{
+		free_database(b);
+		return NULL;
+	}
+
+	if(driver->open(b->data,r,e,mode) != NOERR)
+	{
+		database_close(b);
+		return NULL;
+	}
+
+	return b;
+}
+
+err database_read(database *b,request *r,void *buffer,long *length)
+{
+	return b->driver->read(b->data,r,buffer,length);
+}
+
+err database_write(database *b,request *r,void *buffer,long *length)
+{
+	return b->driver->write(b->data,r,buffer,length);
+}
+
+err database_control(database *b,int code,void *param,int size)
+{
+	if( b->driver->control)
+		return b->driver->control(b->data,code,param,size);
+	else
+		return -1;
+}
+
+err database_archive(database *b,request* r)
+{
+	if( b->driver->archive)
+		return b->driver->archive(b->data,r);
+	else
+		return feed(b,r);
+}
+
+
+boolean database_check(database *b,request *r)
+{
+	if(b->driver->check == NULL) return true;
+	return b->driver->check(b->data,r);
+}
+
+err database_close(database *b)
+{
+	err ret =  b->driver->close(b->data);
+	free_database(b);
+	return ret;
+}
+
+void database_admin(base_class *driver)
+{
+	if(driver->admin != NULL)
+	{
+		database *b = database_open(driver,NULL,NULL,NULL,ADMIN_MODE);
+		if(b != 0)
+		{
+			driver->admin(b->data);
+			database_close(b);
+		}
+	}
+}
diff --git a/src/libMars-ecregrid/base.h b/src/libMars-ecregrid/base.h
new file mode 100755
index 0000000..c976308
--- /dev/null
+++ b/src/libMars-ecregrid/base.h
@@ -0,0 +1,70 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#ifndef _H_BASE_
+#define _H_BASE_
+
+#define READ_MODE	0
+#define WRITE_MODE	1
+#define ADMIN_MODE  2
+
+typedef void   (*initproc)    (void);
+typedef err    (*openproc)    (void *data,request *r,request *e,int mode);
+typedef err    (*validproc)   (void *data,request *r,request *e,int mode);
+typedef err    (*closeproc)   (void *data);
+typedef err    (*readproc)    (void *data,request *r,void *buffer,long *length);
+typedef err    (*writeproc)   (void *data,request *r,void *buffer,long *length);
+typedef err    (*cntlproc)    (void *data,int code,void *param,int size);
+typedef err    (*archproc)    (void *data,request *r);
+typedef void   (*adminproc)   (void*);
+
+
+typedef boolean  (*checkproc)   (void *data,request *r);
+typedef err      (*queryproc)   (void *data,request *r,long *length);
+
+typedef struct base_class {
+
+	struct base_class *parent;
+	char              *name;
+
+	boolean           inited;
+
+	int               private_size;
+	int               options_count;
+	option            *options;
+	
+
+	initproc          init;
+	openproc          open;
+	closeproc         close;
+	readproc          read;
+	writeproc         write;
+	cntlproc          control;
+
+	checkproc         check;
+	queryproc         query;
+
+	archproc          archive;
+	adminproc         admin;
+
+	validproc         validate;
+
+} base_class;
+
+typedef struct database {
+	base_class        *driver;
+	void              *data;
+	char              *name;
+	struct database   *next;
+} database;
+
+extern  base_class _nullbase;
+
+#endif
diff --git a/src/libMars-ecregrid/bufr.c b/src/libMars-ecregrid/bufr.c
new file mode 100755
index 0000000..bbbdc8c
--- /dev/null
+++ b/src/libMars-ecregrid/bufr.c
@@ -0,0 +1,765 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+/*
+
+B.Raoult
+ECMWF Oct-93
+
+*/
+
+#include "mars.h"
+#include <ctype.h>
+
+#ifdef FORTRAN_UPPERCASE
+#define bufrex_ BUFREX
+#endif
+#ifdef FORTRAN_NO_UNDERSCORE
+#define bufrex_ bufrex
+#endif
+
+
+#ifdef FORTRAN_UPPERCASE
+#define busel_ BUSEL
+#endif
+#ifdef FORTRAN_NO_UNDERSCORE
+#define busel_ busel
+#endif
+
+#define MASK(n) ((unsigned char)(~(0xff<<(n))))
+
+unsigned long getbits(unsigned char *p,int skip,int len)
+{
+	int             s = skip%8;
+	int             n = 8-s;
+	unsigned long   ret=0;
+
+	p += (skip >> 3); /* skip the bytes */
+
+	if(s) {
+		ret = (MASK(n) & *p++);
+		len -= n;
+	}
+
+	while(len >= 8)
+	{
+		ret = (ret<<8) + *p++;
+		len -= 8;
+	}
+
+	ret = (ret << len) + (*p >> (8-len));
+
+	return ret;
+}
+
+
+/* Use these macros only here...
+Some BUFR messages have a wrong length (65535) in the key 
+on purpose. This indicates the length has to be read from
+section 0 instead of from the key. Ask Milan for more 
+details */
+
+#define WRONG_KEY_LENGTH 65535
+#ifdef LITTLE_END
+#define KEY_LENGTH(k)       ((unsigned int)getbits( (unsigned char*)k->length, 0, 16))
+#else
+#define KEY_LENGTH(k)       (k->length)
+#endif
+
+unsigned long key_length(const char *buffer, const packed_key *k)
+{
+	unsigned long length = KEY_LENGTH(k);
+	if((length == WRONG_KEY_LENGTH) || ( length == 0))
+	{
+		length = (unsigned long)getbits((unsigned char *)(buffer+4),0,24);
+	}
+	return length;
+}
+
+void set_key_length(packed_key *key, unsigned long keylength)
+{
+	if(keylength >= WRONG_KEY_LENGTH)
+		return;
+	SET_KEY_LENGTH(*key,keylength);
+}
+
+boolean get_packed_key(char *buffer,packed_key *k)
+{
+	/* skip section 0 , check for BUFR version */
+	if((unsigned char)buffer[7]>1)
+		buffer += 8;
+	else
+		buffer += 4;
+
+	/* check if the key is present */
+
+	if(SEC1_FLAGS(buffer))
+	{
+		buffer += SEC1_LENGTH(buffer);  /* skip section 1 */
+		buffer += 4;                    /* skip header of section 2 */
+		/* now copy the packed key minus the size of two_byte_n_of_subset */
+		memcpy((void*)k, (void*)buffer, sizeof(packed_key));
+		return true;
+	}
+
+	return false;
+
+}
+
+boolean get_packed_section_1(char *buffer,packed_section_1* section)
+{
+	/* skip section 0 , check for BUFR version */
+	if((unsigned char)buffer[7]>1)
+		buffer += 8;
+	else
+		buffer += 4;
+
+	memcpy((void*) section,buffer,sizeof(packed_section_1));
+
+	return true;
+}
+
+int subset_count(char *buffer)
+{
+	/* skip section 0 , check for BUFR version */
+	if((unsigned char)buffer[7]>1)
+		buffer += 8;
+	else
+		buffer += 4;
+
+	/* check if the key is present */
+
+	if(SEC1_FLAGS(buffer))
+	{
+		char *p;
+		unsigned long sec2len;
+
+		buffer += SEC1_LENGTH(buffer);  /* skip section 1 */
+		p = buffer;						/* p pointing to section 2 */
+		/*--------------------------------------------------------*/
+		/* There is a number of subsets field in the packed key   */
+		/* which is either 8 bits or 16 bits long depending on	  */
+		/* subtypes. It is also present at the beginning of 	  */
+		/* section 3 where it is coded using 16 bits.             */
+		/*--------------------------------------------------------*/
+		sec2len = getbits((unsigned char*) p,0,24);  /* get len of section 2 */
+		p += sec2len;							  /* p pointing to section 3 */
+		/*------------------------------------------------------------*/
+		/* get the number of subsets skipping the length of section 3 */
+		/* ( 3 bytes) and a byte set to 0 							  */
+		/*------------------------------------------------------------*/
+		return getbits((unsigned char*) p,32,16);
+	}
+	 
+	return 0;
+}
+
+int bufr_sat_id(char *buffer,packed_key* k)
+{
+	unsigned char *p = (unsigned char*) k;
+	int id;
+	int offset = 192;
+
+	int n = subset_count(buffer);
+	if (n > 255 || (k->header.subtype >= 121 && k->header.subtype <= 130) 
+					|| k->header.subtype==31)
+	{
+		offset = 200;
+	}		
+
+	id = p[offset/8];
+	id = id << 8;
+	id += p[(offset/8)+1];
+
+	return id;
+}
+
+void set_bufr_sat_id(char* buffer,int id,packed_key* k)
+{
+	char *p = (char*) k;
+	int offset = 192;
+
+	int n = subset_count(buffer);
+	if (n > 255 || (k->header.subtype >= 121 && k->header.subtype <= 130) 
+					|| k->header.subtype==31)
+	{
+		offset = 200;
+	}		
+
+#ifdef LITTLE_END
+	p[offset/8 + 1] = id >> 8;
+	p[offset/8] = id;
+#else
+	p[offset/8] = id >> 8;
+	p[offset/8 + 1] = id;
+#endif
+}
+
+static packed_key* get_packed_key_addr(char *buffer)
+{
+	/* skip section 0 , check for BUFR version */
+	if((unsigned char)buffer[7]>1)
+		buffer += 8;
+	else
+		buffer += 4;
+
+	/* check if the key is present */
+
+	if(SEC1_FLAGS(buffer))
+	{
+		buffer += SEC1_LENGTH(buffer);  /* skip section 1 */
+		buffer += 4;                    /* skip header of section 2 */
+		return (packed_key*) buffer;
+	}
+
+	return NULL;
+}
+
+boolean replace_key(char* buffer,packed_key* key)
+{
+	packed_key* k = get_packed_key_addr(buffer);
+	if (k)
+	{
+		memcpy(k,key,sizeof(packed_key));
+		return true;
+	}
+	return false;
+}
+
+boolean patch_key_date(char* buffer,int y,int m,int d,int H, int M,
+	int S)
+{
+	packed_key* k = get_packed_key_addr(buffer);
+	if (k)
+	{
+
+		packed_key p;
+		memcpy(&p,k,sizeof(packed_key));
+
+		if (H == 24 && M == 0 && S == 0)
+		{
+			H = 23;
+			M = 59;
+			S = 59;
+		}
+
+#ifdef LITTLE_END
+		marslog( LOG_WARN, "Set date & time not implemented on little-endian architecture");
+		marslog( LOG_EXIT, "If needed, bufr.c needs modifications. Exiting...");
+#else
+		p.header.year   = y;		
+		p.header.month  = m;		
+		p.header.day    = d;		
+		p.header.hour   = H;		
+		p.header.minute = M;		
+		p.header.second = S;		
+#endif
+		memcpy(k,&p,sizeof(packed_key));
+		marslog(LOG_INFO,"New date %d-%d-%d %d:%d:%d (%d)",
+			y,m,d,H,M,S,sizeof(packed_key));
+
+		return true;
+	}
+
+	return false;
+}
+
+boolean patch_key_ident(char* buffer,int ident)
+{
+#if 0
+	packed_key* k = get_packed_key_addr(buffer);
+	if (k)
+	{
+		char s[10];
+		char p[10];
+
+		packed_key p;
+		memcpy(&p,k,sizeof(packed_key));
+
+		/* put the ident value followed by spaces in 9 chars.  */
+		sprintf(p,"%d",ident);
+		memset(s,' ',9);
+		s[9] = 0;
+		memcpy(s,p,strlen(p));
+
+/*  NOT FINISHED */
+
+		memcpy(k,&p,sizeof(packed_key));
+
+		return true;
+	}
+#endif
+
+	return false;
+}
+
+boolean patch_key_length(char* buffer,unsigned int new_value)
+{
+	packed_key* k = get_packed_key_addr(buffer);
+
+	if(new_value == WRONG_KEY_LENGTH)
+	{
+		marslog(LOG_WARN,"Cannot set rdbkey length to %d",new_value);
+		return false;
+	}
+
+	if (k)
+	{
+		packed_key p;
+		memcpy(&p,k,sizeof(packed_key));
+		SET_KEY_LENGTH( p, new_value );
+		memcpy(k,&p,sizeof(packed_key));
+		return true;
+	}
+
+	return false;
+}
+
+boolean shift_packed_key_ident(char* buffer)
+{
+	packed_key* k = get_packed_key_addr(buffer);
+	if (k)
+	{
+		char *ident = KEY_IDENT(k);
+		int i = 0;
+		int j;
+		while (i < 9 && ident[i] == ' ') /* ident len = 9 */
+			i++;
+		if (i < 9)
+			memcpy(ident,&ident[i],9-i);
+		for (j = 8; j > 9-i; j--)
+			ident[j] = ' ';
+		return true;
+	}
+
+	return false;
+}
+
+void set_bufr_mars_type(request *r, const packed_key* key)
+{
+	set_value(r,"TYPE","OB");
+
+	if(KEY_TYPE(key) == BUFR_TYPE_TRACK)
+	{
+		set_value(r,"TYPE","TF");
+	}
+}
+
+err bufr_to_request(request *r,char *buffer,long length)
+{
+	packed_key  ky;
+	packed_key *k = &ky;
+	char buf[10];
+	int  i;
+	char *p;
+
+	if(!get_packed_key(buffer,k))
+	{
+		marslog(LOG_WARN,"BUFR message without key found");
+		return -1;
+	}
+
+	if(mars.debug)
+		print_packed_key(buffer,k); 
+
+	set_bufr_mars_type(r,k);
+
+	set_value(r,"_BUFR_TYPE","%d",KEY_TYPE(k));
+	set_value(r,"_BUFR_SUBTYPE","%d",KEY_SUBTYPE(k));
+	set_value(r,"OBSTYPE","%d",KEY_SUBTYPE(k));
+
+	set_value(r,"DATE","%04d%02d%02d",KEY_YEAR(k),KEY_MONTH(k),KEY_DAY(k));
+	set_value(r,"TIME","%02d%02d",KEY_HOUR(k),KEY_MINUTE(k));
+
+
+	if(IS_SATTELITE(k))
+	{
+		/* set_value(r,"_IS_SATTELITE","true"); */
+
+		set_value(r,"_LATITUDE1","%.4f",UNLAT(KEY_LATITUDE1(k)));
+		set_value(r,"_LATITUDE2","%.4f",UNLAT(KEY_LATITUDE2(k)));
+		set_value(r,"_LONGITUDE1","%.4f",UNLON(KEY_LONGITUDE1(k)));
+		set_value(r,"_LONGITUDE2","%.4f",UNLON(KEY_LONGITUDE2(k)));
+		/* set_value(r,"IDENT","%d",KEY_IDSAT(k)); */
+	}
+	else
+	{
+		/* set_value(r,"_IS_SATTELITE","false"); */
+
+		set_value(r,"_LATITUDE1","%.4f",UNLAT(KEY_LATITUDE(k)));
+		set_value(r,"_LATITUDE2","%.4f",UNLAT(KEY_LATITUDE(k)));
+		set_value(r,"_LONGITUDE1","%.4f",UNLON(KEY_LONGITUDE(k)));
+		set_value(r,"_LONGITUDE2","%.4f",UNLON(KEY_LONGITUDE(k)));
+
+		memcpy(buf,KEY_IDENT(k),9);
+		i = 0;
+		p = buf;
+		buf[9] = 0;
+
+		while(*p) {
+			if(isalnum(*p)) buf[i++] = *p;
+			p++;
+		}
+		buf[i] = 0;
+		set_value(r,"IDENT",buf);
+	}
+
+	set_value(r,"_NOBS","%d",KEY_NOBS(k));
+	set_value(r,"_RDBDAY","%d",KEY_RDBDAY(k));
+	set_value(r,"_RDBHOUR","%d",KEY_RDBHOUR(k));
+	set_value(r,"_RDBMINUTE","%d",KEY_RDBMINUTE(k));
+	set_value(r,"_RDBSECOND","%d",KEY_RDBSECOND(k));
+
+	set_value(r,"_RECDAY","%d",KEY_RECDAY(k));
+	set_value(r,"_RECHOUR","%d",KEY_RECHOUR(k));
+	set_value(r,"_RECMINUTE","%d",KEY_RECMINUTE(k));
+	set_value(r,"_RECSECOND","%d",KEY_RECSECOND(k));
+
+	set_value(r,"_CORR1","%d",KEY_CORR1(k));
+	set_value(r,"_CORR2","%d",KEY_CORR2(k));
+	set_value(r,"_CORR3","%d",KEY_CORR3(k));
+	set_value(r,"_CORR4","%d",KEY_CORR4(k));
+
+	set_value(r,"_PART1","%d",KEY_PART1(k));
+	set_value(r,"_PART2","%d",KEY_PART2(k));
+	set_value(r,"_PART3","%d",KEY_PART3(k));
+	set_value(r,"_PART4","%d",KEY_PART4(k));
+
+	set_value(r,"_QC","%d",KEY_QC(k));
+
+
+	if(mars.debug)
+		print_one_request(r);
+
+	return 0;
+}
+
+boolean verify_bufr_key(const char* buffer, long length, const packed_key* key)
+{
+	boolean ok = true;
+	unsigned long klength = key_length(buffer,key);
+
+	if (klength != length)
+	{
+		marslog(LOG_EROR,"Wrong key length in bufr message %d != %d",klength
+			,length);
+		return false;
+	}
+		
+	{
+		char *p = (char*) buffer + length -4;
+		ok = (p[0] == '7' && p[1] == '7' && p[2] == '7' 
+				&& p[3] == '7');
+		if (!ok)
+		{
+			marslog(LOG_EROR,"7777 not found at offset+key length");
+			return false;
+			
+		}
+	}
+	{
+		char s[100];
+		long date = KEY_YEAR(key) * 10000 + 
+			    KEY_MONTH(key) * 100 + 
+			    KEY_DAY(key);
+		if (julian_to_date(date_to_julian(date),true) != date)
+		{
+			marslog(LOG_EROR,"date is weird %d",date);
+			return false;
+		}
+
+		if ( KEY_HOUR(key) >= 24)
+		{
+			print_key_time(key,s);
+			marslog(LOG_EROR,"time is weird %s",s);
+			return false;
+		}
+
+		if ( KEY_MINUTE(key) >= 60)
+		{
+			print_key_time(key,s);
+			marslog(LOG_EROR,"time is weird %s",s);
+			return false;
+		}
+
+		if ( KEY_SECOND(key) >= 60)
+		{
+			print_key_time(key,s);
+			marslog(LOG_EROR,"time is weird %s",s);
+			return false;
+		}
+	}
+
+	return ok;
+}
+
+static void zero_spaces(char* p)
+{
+	while (*p)
+	{
+		if (*p == ' ')
+			*p = '0';
+		p++;
+	}
+}
+
+void print_key_date(const packed_key* keyptr,char* s)
+{
+	sprintf(s,"%2d/%2d/%4d",KEY_DAY(keyptr),KEY_MONTH(keyptr),KEY_YEAR(keyptr));
+	zero_spaces(s);
+}
+
+void print_key_time(const packed_key* keyptr,char* s)
+{
+	sprintf(s,"%2d:%2d:%2d",KEY_HOUR(keyptr),
+						  KEY_MINUTE(keyptr),
+						  KEY_SECOND(keyptr));
+	zero_spaces(s);
+}
+
+static void set_subset_count(char* buffer,packed_key* k)
+{
+	char* p = (char*) k;
+	p[23] = subset_count(buffer);
+}
+
+int build_packed_key(char* buffer, fortint length, packed_key* k)
+{
+	fortint kerr = 0;
+
+#if 0
+
+#define KVALS 			80000
+
+	fortint ksup[9];
+	fortint ksec0[3];
+	fortint ksec1[100];
+	fortint ksec2[64];
+	fortint ksec3[4];
+	fortint ksec4[2];
+
+	fortfloat values[KVALS];
+	char cnames[20000*64];
+	char cunits[20000*24];
+	char cvals[KVALS*80];
+
+	int i;
+	char name[65];
+	fortint kvals = KVALS;
+	fortint kelem = KVALS / subset_count(buffer);
+	fortint ktdexl;
+
+
+	/* for busel */
+	fortint ktdlst[2000];
+	fortint ktdexp[2000];
+
+	int	year	= -1;
+	int month	= -1;
+	int day		= -1;
+	int hour	= -1;
+	int	minute	= -1;
+	int	second	= -1;
+	int	block	= -1;
+	int station	= -1;
+	int	id		= -1;
+	int	id_type	= 0;
+	int lat		= -1;
+	int	lon		= -1;
+
+	memset((void*) k,0,sizeof(*k));
+
+	bufrex_(&length,
+	    buffer,
+	    ksup,
+	    ksec0, ksec1, ksec2, ksec3, ksec4,
+
+	    &kelem,
+
+	    cnames,
+	    cunits,
+
+	    &kvals,
+
+	    values,
+	    cvals,
+	    &kerr,
+
+	    64,
+	    24,
+	    80);
+	if (kerr)
+		return kerr;
+
+		
+	busel_(&kelem,ktdlst,&ktdexl,ktdexp,&kerr);
+	if (kerr)
+		return kerr;
+
+	for (i = 0; i < 13; i++)
+	{
+		switch (ktdexp[i])
+		{
+			case 1006:
+			case 1007:
+			case 1005:
+			case 1008:
+			case 1011:
+				id = i;
+				id_type = ktdexp[i];
+				break;
+			case 1001:
+				block = i;
+				id_type++;
+				break;
+			case 1002:
+				id_type++;
+				station = i;
+				break;
+			case 4001:
+				year = i;
+				break;
+			case 4002:
+				month = i;
+				break;
+			case 4003:
+				day = i;
+				break;
+			case 4004:
+				hour = i;
+				break;
+			case 4005:
+				minute = i;
+				break;
+			case 4006:
+				second = i;
+				break;
+			case 5001:
+				lat = i;
+				break;
+			case 6001:
+				lon = i;
+				break;
+			case 5002:
+				lat = i;
+				break;
+			case 6002:
+				lon = i;
+				break;
+		}
+	}
+
+	if (year == -1 || month == -1 || day == -1 || hour == -1 || minute == -1 ||
+		  lat == -1 || lon == -1)
+		return -10;
+
+	KEY_YEAR(k) 	= values[year];
+	KEY_MONTH(k)	= values[month];
+	KEY_DAY(k)		= values[day];
+	KEY_HOUR(k)		= values[hour];
+	KEY_MINUTE(k)	= values[minute];
+	KEY_SECOND(k)	= second == -1 ? 0 : values[second];
+
+	/* id */
+	switch (id_type)
+	{
+		char ident[10];
+		int i;
+		int indx;
+		int l;
+
+		case 1007: /* SATELLITE IDENTIFIER INDEX */
+			set_bufr_sat_id(buffer,values[id],k);
+			break;
+
+		case 1005: /* BUOY/PLATFORM IDENTIFIER INDEX */
+			i = values[id];
+			set_bufr_sat_id(buffer,i,k);
+			sprintf(ident,"%5d",i);
+			zero_spaces(ident);
+			memcpy(KEY_IDENT(k),ident,5);
+			break;
+
+		case 1006: /* AIRCRAFT FLIGHT NUMBER INDEX */
+		case 1008: /* AIRCRAFT REGISTRATION NUMBER INDEX */
+		case 1011: /* SHIPS' CALL SIGN INDEX */
+			indx = (int) values[id] / 1000; /* index in cvals where data is */
+			l = (int) values[id] % 1000; 	/* length of data in cvals */
+			for (i = 0; i < l; i++)
+				KEY_IDENT(k)[i] = cvals[indx++];
+			break;
+
+		case 2:    /* WMO BLOCK AND STATION NUMBER */
+			i = values[block]*1000+values[station];
+			set_bufr_sat_id(buffer,i,k);
+			sprintf(ident,"%5d",i);
+			zero_spaces(ident);
+			memcpy(KEY_IDENT(k),ident,5);
+			break;
+
+		default:
+			kerr = -9;
+			break;
+	}
+	if (kerr)
+		return kerr;
+
+	if (abs(values[lon] - 1.7E38) < 10.E-11 ||
+		abs(values[lat] - 1.7E38) < 10.E-11)
+		return -8;
+
+#if 0
+	printf("LAT: %d\n",(int) (values[lat]) * 100000.0+9000000.0));
+	printf("LON: %d\n",(int) ((values[lon]+180) * 100000.0+18000000.0));
+#endif
+
+	k->length = length;
+	set_subset_count(buffer,k);
+	
+#endif
+	return kerr;
+}
+
+
+void print_packed_key(char* buffer,packed_key* k)
+{
+	printf("------------------------------------------------\n");
+	printf("------------------------------------------------\n");
+	printf("type                  %d\n",KEY_TYPE(k));
+	printf("subtype               %d\n",KEY_SUBTYPE(k));
+	printf("year                  %d\n",KEY_YEAR(k));
+	printf("month                 %d\n",KEY_MONTH(k));
+	printf("day                   %d\n",KEY_DAY(k));
+	printf("hour                  %d\n",KEY_HOUR(k));
+	printf("minute                %d\n",KEY_MINUTE(k));
+	printf("second                %d\n",KEY_SECOND(k));
+	printf("--------------------------------------------\n");
+	printf("latitude1             %d\n",KEY_LATITUDE1(k));
+	printf("longitude1            %d\n",KEY_LONGITUDE1(k));
+	if (IS_SATTELITE(k))
+	{
+		printf("latitude2             %d\n",KEY_LATITUDE2(k));
+		printf("longitude2            %d\n",KEY_LONGITUDE2(k));
+	}
+	printf("------------------------------------------------\n");
+	printf("length                %d\n",key_length(buffer,k));
+	printf("number of subsets     %d\n",KEY_NOBS(k));
+	printf("------------------------------------------------\n");
+	if (IS_SATTELITE(k))
+		printf("ident                 %d\n", bufr_sat_id(buffer,k));
+	else
+	{
+		char id[6];
+		memcpy(id,KEY_IDENT(k),5);
+		id[5] = 0;
+		printf("ident                 %s\n", id);
+	}
+	printf("\n");
+}
diff --git a/src/libMars-ecregrid/bufr.h b/src/libMars-ecregrid/bufr.h
new file mode 100644
index 0000000..6d2a4dd
--- /dev/null
+++ b/src/libMars-ecregrid/bufr.h
@@ -0,0 +1,231 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+/************************************************************
+
+ RDB package
+
+ B.Raoult Wed Apr 17 16:07:11 BST 1991
+
+ Definition of the BUFR format.
+
+*************************************************************/
+
+
+#define BUFR_TYPE_TRACK     40
+
+#ifdef LITTLE_END
+#define KEY_TYPE(k)         ((unsigned int)k->header.type)
+#define KEY_SUBTYPE(k)      ((unsigned int)k->header.subtype)
+#define KEY_YEAR(k)         ((unsigned int)getbits( (unsigned char*)k->header.date_time,  0, 12 ))
+#define KEY_MONTH(k)        ((unsigned int)getbits( (unsigned char*)k->header.date_time, 12,  4 ))
+#define KEY_DAY(k)          ((unsigned int)getbits( (unsigned char*)k->header.date_time, 16,  6 ))
+#define KEY_HOUR(k)         ((unsigned int)getbits( (unsigned char*)k->header.date_time, 22,  5 ))
+#define KEY_MINUTE(k)       ((unsigned int)getbits( (unsigned char*)k->header.date_time, 27,  6 ))
+#define KEY_SECOND(k)       ((unsigned int)getbits( (unsigned char*)k->header.date_time, 33,  6 ))
+#else
+#define KEY_TYPE(k)         (k->header.type)
+#define KEY_SUBTYPE(k)      (k->header.subtype)
+#define KEY_YEAR(k)         (k->header.year)
+#define KEY_MONTH(k)        (k->header.month)
+#define KEY_DAY(k)          (k->header.day)
+#define KEY_HOUR(k)         (k->header.hour)
+#define KEY_MINUTE(k)       (k->header.minute)
+#define KEY_SECOND(k)       (k->header.second)
+#endif
+
+#define KEY_CORR1(k)        CORR_CORR(k->corr1)
+#define KEY_CORR2(k)        CORR_CORR(k->corr2)
+#define KEY_CORR3(k)        CORR_CORR(k->corr3)
+#define KEY_CORR4(k)        CORR_CORR(k->corr4)
+#define KEY_IDENT(k)        ((char*)k+15)
+#define KEY_LATITUDE(k)     ((unsigned long)getbits((unsigned char*)k,88,25))
+#define KEY_LATITUDE1(k)    ((unsigned long)getbits((unsigned char*)k,88,25))
+#define KEY_LATITUDE2(k)    ((unsigned long)getbits((unsigned char*)k,152,25))
+
+#ifdef LITTLE_END
+#define SET_KEY_LENGTH(k,v) (k).length[0]=(unsigned char)((v)/256);(k).length[1]=(unsigned char)((v)%256);
+#else
+#define SET_KEY_LENGTH(k,v) (k).length = (v)
+#endif
+
+#define KEY_LONGITUDE(k)    ((unsigned long)getbits((unsigned char*)k,56,26))
+#define KEY_LONGITUDE1(k)   ((unsigned long)getbits((unsigned char*)k,56,26))
+#define KEY_LONGITUDE2(k)   ((unsigned long)getbits((unsigned char*)k,120,26))
+#define KEY_NOBS(k)         ((unsigned long)getbits((unsigned char*)k,184,8))
+#define KEY_PART1(k)        CORR_PART(k->corr1) 
+#define KEY_PART2(k)        CORR_PART(k->corr2) 
+#define KEY_PART3(k)        CORR_PART(k->corr3) 
+#define KEY_PART4(k)        CORR_PART(k->corr4) 
+#define KEY_QC(k)           (k->qc) 
+#define KEY_RDBDAY(k)       TIME_DAY(k->rdbtime)    
+#define KEY_RDBHOUR(k)      TIME_HOUR(k->rdbtime)
+#define KEY_RDBMINUTE(k)    TIME_MINUTE(k->rdbtime)
+#define KEY_RDBSECOND(k)    TIME_SECOND(k->rdbtime)
+#define KEY_RECDAY(k)       TIME_DAY(k->rectime)
+#define KEY_RECHOUR(k)      TIME_HOUR(k->rectime)
+#define KEY_RECMINUTE(k)    TIME_MINUTE(k->rectime)
+#define KEY_RECSECOND(k)    TIME_SECOND(k->rectime)
+
+/* day 6 bits,hour 5 bits, min 6 sec 6  1 spare*/
+
+#define TIME_DAY(a)     (unsigned long)((a[0] & 0xFC)>>2)
+#define TIME_HOUR(a)    (unsigned long)(((a[0]&0x3)<<3)+((a[1]&0xE0)>>5))
+#define TIME_MINUTE(a)  (unsigned long)(((a[1]&0x1F)<<1)+((a[2]&0x8)>>3))
+#define TIME_SECOND(a)  (unsigned long)((a[2] & 0x7E)>>1)
+
+#define CORR_CORR(a)        (unsigned long)((unsigned char)((unsigned char)a & (unsigned char)0xFC) >>  (unsigned char)2)
+#define CORR_PART(a)        (unsigned long)((unsigned char)((unsigned char)a & (unsigned char)0x02) >>  (unsigned char)1)
+
+#define IS_SATTELITE(k)     (KEY_TYPE(k)==2||KEY_TYPE(k)==3||KEY_TYPE(k)==12)
+
+#define UNLAT(l) ((double)(l)/100000.  -90.)
+#define UNLON(l) ((double)(l)/100000. -180.)
+
+/* Definition of rdb key */
+
+typedef struct
+{
+#ifdef LITTLE_END
+    unsigned char     type;
+    unsigned char     subtype;
+    unsigned char     date_time[ 5 ];
+    unsigned char     spare02[ 25 ];
+#else
+    unsigned int      type       :8;     /* 8   bits =  1  bytes   */
+    unsigned int      subtype    :8;     /* 16  bits =  2  bytes   */
+    unsigned int      year       :12;    /* 28                     */
+    unsigned int      month      :4;     /* 32  bits =  4  bytes   */
+    unsigned int      day        :6;     /* 38                     */
+    unsigned int      hour       :5;     /* 43                     */
+    unsigned int      minute     :6;     /* 49                     */
+    unsigned int      second     :6;     /* 55                     */
+    unsigned int      spare01    :1;     /* 56  bits =  7   bytes  */
+    char              spare02    [25];   /* 256 bits = 32   bytes  */
+#endif
+} keyheader;
+
+typedef unsigned char timec[3];
+typedef unsigned char correction;
+
+
+typedef struct
+{
+#ifdef LITTLE_END
+    keyheader        header;
+    unsigned char    length[ 2 ];
+    timec            rdbtime;
+    timec            rectime;
+    correction       corr1;
+    correction       corr2;
+    correction       corr3;
+    correction       corr4;
+    unsigned char    qc;
+    unsigned char    spare09[ 3 ];
+#else
+    keyheader        header;
+    unsigned int     length:16;
+    timec            rdbtime;
+    timec            rectime;
+    correction       corr1;
+    correction       corr2;
+    correction       corr3;
+    correction       corr4;
+    unsigned int     qc          :8;
+    unsigned int     spare09     :24;   /* 48 bytes */
+#endif
+} packed_key; 
+
+#define SEC1_LENGTH(a)  (getbits((unsigned char*)a,0,24))
+#define SEC1_FLAGS(a)   (getbits((unsigned char*)a,56,8))
+
+#ifdef LITTLE_END
+#define SEC1_TYPE(s1)         ((unsigned int)s1.packed_section_1_data[8])
+#define SEC1_SUBTYPE(s1)      ((unsigned int)s1.packed_section_1_data[9])
+#define SEC1_YEAR(s1)         ((unsigned int)s1.packed_section_1_data[12])
+#define SEC1_MONTH(s1)        ((unsigned int)s1.packed_section_1_data[13])
+#define SEC1_DAY(s1)          ((unsigned int)s1.packed_section_1_data[14])
+#define SEC1_HOUR(s1)         ((unsigned int)s1.packed_section_1_data[15])
+#define SEC1_MINUTE(s1)       ((unsigned int)s1.packed_section_1_data[16])
+#else
+#define SEC1_TYPE(s1)         (s1.type)
+#define SEC1_SUBTYPE(s1)      (s1.subtype)
+#define SEC1_YEAR(s1)         (s1.year)
+#define SEC1_MONTH(s1)        (s1.month)
+#define SEC1_DAY(s1)          (s1.day)
+#define SEC1_HOUR(s1)         (s1.hour)
+#define SEC1_MINUTE(s1)       (s1.minute)
+#endif
+
+typedef struct
+{
+#ifdef LITTLE_END
+        unsigned char    packed_section_1_data[32];
+#else
+	unsigned int	 length:24;			  /* length                 */  /* 3 -> 0-2   */
+	unsigned int	 editon:8;			  /* edition number         */  /* 1 -> 3     */
+	unsigned int     centre:16;           /* originating centre     */  /* 2 -> 4-5   */
+	unsigned int	 seq:8;				  /* sequence number        */  /* 1 -> 6     */
+	unsigned int	 key:8;				  /* presence of section 2  */  /* 1 -> 7     */
+	unsigned int	 type:8;		  	  /* type of message        */  /* 1 -> 8     */
+	unsigned int     subtype:8;			  /* subtype of message	    */  /* 1 -> 9     */
+	unsigned int     table:16;            /* used WMO 94 table      */  /* 2 -> 10-11 */
+	unsigned int     year:8;              /* year of century	    */  /* 1 -> 12    */
+	unsigned int     month:8;			  /* month                  */  /* 1 -> 13    */
+	unsigned int     day:8;               /* day                    */  /* 1 -> 14    */
+	unsigned int     hour:8;              /* hour                   */  /* 1 -> 15    */
+	unsigned int     minute:8;            /* minute                 */  /* 1 -> 16    */
+	/* more after this .................. */
+#endif
+} packed_section_1;
+
+/*=================================================================*/
+/* Structure returned by bufrdc                                    */
+/*=================================================================*/
+
+typedef struct {
+    fortint length;       /* 1 */
+    fortint edition;      /* 2 */
+    fortint center;       /* 3 */
+    fortint update;       /* 4 */
+    fortint flag;         /* 5 */
+    fortint type;         /* 6 */
+    fortint subtype;      /* 7 */
+    fortint version;      /* 8 */
+    fortint century;      /* 9 */
+    fortint month;        /* 10 */
+    fortint day;
+    fortint hour;
+    fortint minute;
+    fortint table;
+    fortint table_version;
+    fortint junk[40];
+} obssec1;
+
+typedef struct {
+    fortint sec2len;          /* 1 */
+    fortint type;             /* 2 */
+    fortint subtype;          /* 3 */
+    fortint year;             /* 4 */
+    fortint month;            /* 5 */
+    fortint day;              /* 6 */
+    fortint hour;             /* 7 */
+    fortint minute;           /* 8 */
+    fortint second;           /* 9 */
+    fortint longitude1;       /* 10 */
+    fortint latitude1;        /* 11 */
+    fortint longitude2;       /* 12 */
+    fortint latitude2;        /* 13 */
+    fortint no_subsets;       /* 14 */
+    fortint satellite_id;     /* 15 */
+    fortint ident[9];         /* 16-24 */
+    fortint length;           /* 25 */
+    fortint junk[40];            
+} obskey;
diff --git a/src/libMars-ecregrid/calc.c b/src/libMars-ecregrid/calc.c
new file mode 100644
index 0000000..d7952c8
--- /dev/null
+++ b/src/libMars-ecregrid/calc.c
@@ -0,0 +1,2266 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+/*
+
+   B.Raoult
+   ECMWF Oct-93
+
+ */
+
+
+#include "mars.h"
+#include <math.h>
+#include <errno.h>
+#include <signal.h>
+#include <ctype.h>
+#include <stdlib.h>
+
+
+static boolean comperr;
+static char* form = NULL;
+
+static math *readpower(void);
+static math *readatom(void);
+static math *readfactor(void);
+static math *readterm(void);
+static math *readtest(void);
+static math *readlist(int*);
+static void advance(void);
+
+typedef real (*fop1)(real);
+typedef real (*fop2)(real,real);
+
+
+#ifdef notCRAY
+
+#define BI_FUNC(a,b)	(a)+(b)
+#define BI_NAME         v_add
+#include "calc.h"
+
+#define BI_FUNC(a,b)	(a)-(b)
+#define BI_NAME         v_sub
+#include "calc.h"
+
+#define BI_FUNC(a,b)	(a)+(b)
+#define BI_NAME         v_mul
+#include "calc.h"
+
+#define BI_FUNC(a,b)	(a)/(b)
+#define BI_NAME         v_div
+#include "calc.h"
+
+
+#endif
+
+/* save every 10 fields */
+#define SAVE_CNT 10
+
+static int merr = 0;
+
+
+static real b_max(real a,real b) {
+	return a>b?a:b;
+}
+
+static real b_min(real a,real b) {
+	return a<b?a:b;
+}
+
+static real b_add(real a,real b) {
+	return a+b;
+}
+static real b_sub(real a,real b) {
+	return a-b;
+}
+static real b_div(real a,real b) {
+	return a/b;
+}
+static real b_mul(real a,real b) {
+	return a*b;
+}
+
+static real b_pow(real a,real b) {
+	return pow(a,b);
+}
+
+static real b_mod(real a,real b) {
+	return (long)a % (long)b;
+}
+
+static real b_idiv(real a,real b) {
+	return (long)a / (long)b;
+}
+
+static real b_eq(real a,real b) {
+	return (real)(a == b);
+}
+
+static real b_ne(real a,real b) {
+	return (real)(a != b);
+}
+
+static real b_ge(real a,real b) {
+	return (real)(a >= b);
+}
+
+static real b_gt(real a,real b) {
+	return (real)(a > b);
+}
+
+
+static real b_le(real a,real b) {
+	return (real)(a <= b);
+}
+
+static real b_lt(real a,real b) {
+	return (real)(a < b);
+}
+
+static real b_and(real a,real b) {
+	return (real)((a != 0)  &&  (b != 0));
+}
+
+static real b_or(real a,real b) {
+	return (real)((a != 0)  ||  (b != 0));
+}
+
+static real m_sgn(real a)
+{
+	if(a>0.0) return  1.0;
+	if(a<0.0) return -1.0;
+	return 0;
+}
+
+static real m_int(real a)
+{
+	return (long)a;
+}
+
+static real m_neg(real a)
+{
+	return -a;
+}
+
+static real m_not(real a)
+{
+	/* return 1.0-(a != 0.0) ; */
+	if(a != 0.0)
+		return 0.0;
+	else
+		return 1.0;
+}
+
+static err f_count(math *p,void *data)
+{
+	variable *v = pop();
+	if(!v) return -1;
+	marslog(LOG_DBUG,"f_count");
+	if(v->scalar) return push_scalar(0.0);
+	return push_scalar(v->fs->count);
+}
+
+static err f_v_minmax(math *p,fop2 f)
+{
+	int i,j;
+	variable *v = pop();
+	real m;
+	field *g;
+	char formula[10240];
+
+	if(!v) return -1;
+
+	marslog(LOG_DBUG,"f_v_minmax: %s",p->name);
+
+	sprintf(formula,"%s(%s)",p->name,v->name);
+
+	if(v->scalar) return push_named_scalar(strcache(formula),v->val);
+
+	g = get_nonmissing_field(v->fs,expand_mem);
+	if(MISSING_FIELD(g))
+	{
+		inform_missing_fieldset(v->name);
+		marslog(LOG_EROR,"Cannot continue COMPUTE of '%s'",formula);
+		return -1;
+	}
+	else
+	{
+		m = g->values[0];
+		if(FIELD_HAS_BITMAP(g)) {
+			int i = 0;
+			while(MISSING_VALUE(m) && i != g->value_count)
+				m = g->values[i++];
+		}
+
+		release_field(g);
+
+		for(i=0;i<v->fs->count;i++)
+		{
+			field *g = get_field(v->fs,i,expand_mem);
+
+			if(! MISSING_FIELD(g))
+			{
+				if(FIELD_HAS_BITMAP(g))
+				{
+					for(j=0;j<g->value_count;j++)
+						if( ! MISSING_VALUE(g->values[j]))
+							m = f(m,g->values[j]);
+				}
+				else
+					for(j=0;j<g->value_count;j++)
+						m = f(m,g->values[j]);
+			}
+
+
+			release_field(g);
+		}
+	}
+	return push_named_scalar(strcache(formula),m);
+}
+
+static err unop(math *p,fop1 f)
+{
+	variable *va;
+	fieldset *vc;
+	int i,j;
+	char formula[10240];
+	err e = NOERR;
+
+	marslog(LOG_DBUG,"unop : %s ",p->name);
+
+	if(!(va = pop()))
+		return -1;
+
+	sprintf(formula,"%s(%s)",p->name,va->name);
+
+	if(va->scalar)
+		return push_named_scalar(strcache(formula),f(va->val));
+
+	vc     = new_fieldset(va->fs->count);
+
+	for(i=0;i<va->fs->count;i++)
+	{
+		field *ga = get_field(va->fs,i,expand_mem);
+		field *gc;
+
+		if(MISSING_FIELD(ga))
+		{
+			gc = copy_field(ga,true);
+		}
+		else
+		{
+			gc = copy_field(ga,false);
+			for(j=0;j<ga->value_count;j++)
+				gc->values[j] = f(ga->values[j]);
+			copy_bitmap(gc,ga,0);
+		}
+
+		set_field(vc,gc,i);
+		if( ((i+1) % SAVE_CNT) == 0) 
+			e = e | save_fieldset(vc);
+
+		release_field(ga);
+
+	}
+
+	e = e | push_named_fieldset(strcache(formula),vc);
+	return e;
+
+}
+
+static err binop(math *p,fop2 f)
+{
+	variable *va,*vb;
+	fieldset *vc;
+	int i,j;
+	char formula[10240];
+	int missing = 0;
+	err e = NOERR;
+
+	marslog(LOG_DBUG,"binop : %s ",p->name);
+
+	if(!(vb = pop()))
+		return -1;
+
+	if(!(va = pop()))
+		return -1;
+
+	sprintf(formula,"%s %s %s",va->name,p->name,vb->name);
+
+	if(va->scalar && vb->scalar)
+		return push_named_scalar(strcache(formula),f(va->val,vb->val));
+
+	if(va->scalar)
+	{
+		real x = va->val;
+		vc     = new_fieldset(vb->fs->count);
+
+		for(i=0;i<vb->fs->count;i++)
+		{
+			field *gb = get_field(vb->fs,i,expand_mem);
+			field *gc ;
+
+
+			if(MISSING_FIELD(gb))
+			{
+				gc = copy_field(gb,true);
+				missing++;
+			}
+			else
+			{
+				gc = copy_field(gb,false);
+				for(j=0;j<gb->value_count;j++)
+					gc->values[j] = f(x,gb->values[j]);
+				copy_bitmap(gc,0,gb);
+			}
+
+			set_field(vc,gc,i);
+
+			if( ((i+1) % SAVE_CNT) == 0) 
+				e = e | save_fieldset(vc);
+
+			release_field(gb);
+		}
+		if(missing == vb->fs->count)
+		{
+			inform_missing_fieldset(vb->name);
+			marslog(LOG_WARN,"COMPUTE of '%s' not done",formula);
+		}
+		e = e | push_named_fieldset(strcache(formula),vc);
+		return e;
+	}
+
+	if(vb->scalar)
+	{
+		real x = vb->val;
+		vc     = new_fieldset(va->fs->count);
+
+		for(i=0;i<va->fs->count;i++)
+		{
+			field *ga = get_field(va->fs,i,expand_mem);
+			field *gc;
+
+			if(MISSING_FIELD(ga))
+			{
+				gc = copy_field(ga,true);
+				missing++;
+			}
+			else
+			{
+				gc = copy_field(ga,false);
+				for(j=0;j<ga->value_count;j++)
+					gc->values[j] = f(ga->values[j],x);
+				copy_bitmap(gc,ga,0);
+			}
+
+			set_field(vc,gc,i);
+			if( ((i+1) % SAVE_CNT) == 0) 
+				e = e | save_fieldset(vc);
+
+			release_field(ga);
+		}
+		if(missing == va->fs->count)
+		{
+			inform_missing_fieldset(va->name);
+			marslog(LOG_WARN,"COMPUTE of '%s' not done",formula);
+		}
+		e = e | push_named_fieldset(strcache(formula),vc);
+		return e;
+	}
+
+	if(va->fs->count != vb->fs->count)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' need the same number of fields",
+				p->name);
+		return -1;
+	}
+
+	vc  = new_fieldset(va->fs->count);
+	for(i=0;i<va->fs->count;i++)
+	{
+		field *ga = get_field(va->fs,i,expand_mem);
+		field *gb = get_field(vb->fs,i,expand_mem);
+		field *gc;
+
+		if(ga->value_count != gb->value_count)
+		{
+			marslog(LOG_EROR,
+					"compute: function '%s' need the same number of grid points",
+					p->name);
+			return -1;
+		}
+
+		if(MISSING_FIELD(ga))
+		{
+			gc = copy_field(ga,true);
+			missing++;
+		}
+		else if(MISSING_FIELD(gb))
+		{
+			gc = copy_field(gb,true);
+			missing++;
+		}
+		else
+		{
+			gc = copy_field(ga,false);
+
+			for(j=0;j<ga->value_count;j++)
+				gc->values[j] = f(ga->values[j],gb->values[j]);
+
+			copy_bitmap(gc,ga,gb);
+		}
+
+		set_field(vc,gc,i);
+		if( ((i+1) % SAVE_CNT) == 0) 
+			e = e | save_fieldset(vc);
+
+		release_field(ga);
+		release_field(gb);
+
+	}
+	if(missing == va->fs->count)
+	{
+		inform_missing_fieldset(formula);
+	}
+	e = e | push_named_fieldset(strcache(formula),vc);
+	return e;
+
+}
+
+static err f_sum(math *p,void *data)
+{
+	variable *vin;
+	fieldset *vout;
+	int i,j;
+	field *gin,*gout;
+	char formula[10240];
+
+	marslog(LOG_DBUG,"f_sum");
+
+	if(!(vin = pop()))
+		return -1;
+
+	if(vin->scalar)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' works only on fields",p->name);
+		return -1;
+	}
+
+	sprintf(formula,"%s(%s)",p->name,vin->name);
+
+	vout = new_fieldset(1);
+
+	gin  = get_nonmissing_field(vin->fs,expand_mem);
+	if(MISSING_FIELD(gin))
+	{
+		gout = copy_field(gin,true);
+		release_field(gin);
+		inform_missing_fieldset(vin->name);
+		marslog(LOG_WARN,"COMPUTE of '%s' not done",formula);
+	}
+	else
+	{
+		gout = copy_field(gin,false);
+		for(j=0;j<gin->value_count;j++)
+			gout->values[j] = 0;
+		release_field(gin);
+
+		for(i=0;i<vin->fs->count;i++)
+		{
+			gin  = get_field(vin->fs,i,expand_mem);
+
+			if(! MISSING_FIELD(gin))
+				for(j=0;j<gin->value_count;j++)
+					gout->values[j] += gin->values[j];
+
+			copy_bitmap(gout,gin,0);
+			release_field(gin);
+
+		}
+	}
+
+	set_field(vout,gout,0);
+	return push_named_fieldset(strcache(formula),vout);
+
+}
+
+static err f_mean(math *p,void *data)
+{
+	variable *vin;
+	fieldset *vout;
+	int i,j;
+	field *gin,*gout;
+	int missing = 0;
+	char formula[10240];
+	err e = 0;
+
+	marslog(LOG_DBUG,"f_mean");
+
+	if(!(vin = pop()))
+		return -1;
+
+	if(vin->scalar)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' works only on fields",p->name);
+		return -1;
+	}
+
+	sprintf(formula,"%s(%s)",p->name,vin->name);
+	vout = new_fieldset(1);
+
+	gin  = get_nonmissing_field(vin->fs,expand_mem);
+	if(MISSING_FIELD(gin))
+	{
+		gout = copy_field(gin,true);
+		release_field(gin);
+		inform_missing_fieldset(vin->name);
+		marslog(LOG_WARN,"COMPUTE of '%s' not done",formula);
+	}
+	else
+	{
+		gout = copy_field(gin,false);
+		for(j=0;j<gin->value_count;j++)
+			gout->values[j] = 0;
+		release_field(gin);
+
+		for(i=0;i<vin->fs->count && e == 0;i++)
+		{
+			gin  = get_field(vin->fs,i,expand_mem);
+
+			if(! MISSING_FIELD(gin))
+			{
+				if(gin->value_count != gout->value_count)
+				{
+					marslog(LOG_EROR,
+							"compute: function '%s', not all fields have the same number of values ",
+							p->name);
+					e = -1;
+				}
+				else
+					for(j=0;j<gin->value_count;j++)
+						gout->values[j] += gin->values[j];
+			}
+			else
+				missing++;
+
+			if(e == 0)
+				copy_bitmap(gout,gin,0);
+			release_field(gin);
+
+		}
+
+		for(j=0;j<gout->value_count;j++)
+			if( ! MISSING_VALUE(gout->values[j]))
+				gout->values[j] /= (vin->fs->count - missing);
+	}
+
+	set_field(vout,gout,0);
+	return e ? e : push_named_fieldset(strcache(formula),vout);
+
+}
+
+static err f_rms(math *p,void *data)
+{
+	variable *vin;
+	fieldset *vout;
+	int i,j;
+	field *gin,*gout;
+	int missing = 0;
+	char formula[10240];
+
+	marslog(LOG_DBUG,"f_rms");
+
+	if(!(vin = pop()))
+		return -1;
+
+	if(vin->scalar)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' works only on fields",p->name);
+		return -1;
+	}
+	sprintf(formula,"%s(%s)",p->name,vin->name);
+	vout = new_fieldset(1);
+
+	gin  = get_nonmissing_field(vin->fs,expand_mem);
+	if(MISSING_FIELD(gin))
+	{
+		gout = copy_field(gin,true);
+		release_field(gin);
+		inform_missing_fieldset(vin->name);
+		marslog(LOG_WARN,"COMPUTE of '%s' not done",formula);
+	}
+	else
+	{
+		gout = copy_field(gin,false);
+
+		for(j=0;j<gin->value_count;j++)
+			gout->values[j] = 0;
+
+		release_field(gin);
+
+
+		for(i=0;i<vin->fs->count;i++)
+		{
+			gin  = get_field(vin->fs,i,expand_mem);
+
+			if(! MISSING_FIELD(gin))
+				for(j=0;j<gin->value_count;j++)
+					gout->values[j] += (gin->values[j]*gin->values[j]);
+			else
+				missing++;
+
+			copy_bitmap(gout,gin,0);
+			release_field(gin);
+
+		}
+
+		for(j=0;j<gout->value_count;j++)
+			if( ! MISSING_VALUE(gout->values[j]))
+			{
+				gout->values[j] /= (vin->fs->count - missing);
+				gout->values[j]  = sqrt(gout->values[j]);
+			}
+	}
+
+	set_field(vout,gout,0);
+	return push_named_fieldset(strcache(formula),vout);
+
+}
+
+static err f_minmax(math *p,fop2 f)
+{
+	variable *vin;
+	fieldset *vout;
+	int i,j;
+	field *gin,*gout;
+	char formula[10240];
+
+	marslog(LOG_DBUG,"f_minmax");
+
+	if(p->arity == 1)
+	{
+		if(!(vin = pop()))
+			return -1;
+
+		if(vin->scalar)
+		{
+			marslog(LOG_EROR,
+					"compute: function '%s' works only on fields",p->name);
+			return -1;
+		}
+		sprintf(formula,"%s(%s)",p->name,vin->name);
+		vout = new_fieldset(1);
+
+		gin  = get_nonmissing_field(vin->fs,expand_mem);
+		gout = copy_field(gin,true);
+		release_field(gin);
+
+		if(MISSING_FIELD(gout))
+		{
+			inform_missing_fieldset(vin->name);
+			marslog(LOG_WARN,"COMPUTE of '%s' not done",formula);
+		}
+		else
+			for(i=0;i<vin->fs->count;i++)
+			{
+				gin  = get_field(vin->fs,i,expand_mem);
+
+				if(! MISSING_FIELD(gin))
+				{
+					if(FIELD_HAS_BITMAP(gin) || FIELD_HAS_BITMAP(gout))
+					{
+						for(j=0;j<gin->value_count;j++)
+							if( ! (MISSING_VALUE(gin->values[j]) || MISSING_VALUE(gout->values[j])) )
+								gout->values[j] = f(gin->values[j],gout->values[j]);
+						copy_bitmap(gout,gin,0);
+
+					}
+					for(j=0;j<gin->value_count;j++)
+						gout->values[j] = f(gin->values[j],gout->values[j]);
+				}
+
+				release_field(gin);
+
+			}
+
+		set_field(vout,gout,0);
+		return push_named_fieldset(strcache(formula),vout);
+	}
+	else {
+		int n = p->arity-1;
+		int m = 0;
+		fieldset *fs = 0;
+		err e;
+		while(n--) {
+
+			variable *v = stack_top();
+			fs = v->scalar?0:v->fs;
+
+			if(e = binop(p,f)) 
+				return e;
+
+			if(m && n && fs)
+				free_fieldset(fs);
+
+			m++;
+
+		}
+		if(p->arity>2 && fs) free_fieldset(fs);
+		return NOERR;
+	}
+
+}
+
+/* #define QSORT */
+#ifdef QSORT
+
+static int cmp_double(const void *a, const void *b)
+{
+	double x =  *(double*)a;
+	double y =  *(double*)b;
+
+	if(x == y)
+		return 0;
+
+	if(x < y)
+		return -1;
+
+	return 1;
+}
+
+#else
+
+static void swap(double *a, double *b) { double t=*a; *a=*b; *b=t; }
+
+static void sort(double arr[], int beg, int end) {
+	if (end > beg + 1) {
+		double piv = arr[beg];
+		int l = beg + 1, r = end;
+		while (l < r) {
+			if (arr[l] <= piv) 
+				l++;
+			else 
+				swap(&arr[l], &arr[--r]);
+		}
+		swap(&arr[--l], &arr[beg]);
+		sort(arr, beg, l);
+		sort(arr, r, end);
+	}
+}
+
+#endif
+
+
+static err f_distribution(math *p,void *data)
+{
+	variable *v;
+	int cnt = p->arity;
+	int i,j,k;
+	int size = 0;
+	int n;
+	field **g;
+	err e = 0;
+	fieldset *w;
+	double *tmp;
+
+
+	marslog(LOG_DBUG,"f_distribution");
+
+	if(cnt != 1 && cnt != 2)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' needs one or two arguments",p->name);
+		return -1;
+	}
+
+	if(!(v = pop())) 
+		return -1;
+
+	if(cnt == 2)
+	{
+		if(!v->scalar)
+		{
+			marslog(LOG_EROR,
+					"compute: function '%s' second argument must be a scalar",p->name);
+			return -1;
+		}
+
+		size = v->val;
+		if(!(v = pop())) 
+			return -1;
+
+	}
+
+	if(v->scalar)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' first argument must be a field",p->name);
+		return -1;
+	}
+
+	if(cnt == 1)
+		size = v->fs->count;
+
+	if(size < 1)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s', invalid size %d",p->name,size);
+		return -1;
+	}
+
+	if((v->fs->count/size)*size != v->fs->count)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s', invalid size %d, fieldset is %d long",
+				p->name,size,v->fs->count);
+		return -1;
+	}
+
+	w = new_fieldset(v->fs->count);
+	g = NEW_ARRAY_CLEAR(field*,size);
+	tmp = NEW_ARRAY_CLEAR(double,size);
+	n = 0;
+
+	for(i = 0,n = 0; i < v->fs->count/size ; i++, n+=size)
+	{
+		int count = 0;
+		int bitmap = 0;
+		for(j = 0; j < size ; j++)
+		{
+			field *f = get_field(v->fs,n+j,expand_mem);
+
+			if(MISSING_FIELD(f))
+			{
+				marslog(LOG_EROR,
+						"compute: function '%s', field %d is missing",p->name,n+j+1);
+				e = -1;
+			}
+
+			if(FIELD_HAS_BITMAP(f)) 
+				bitmap++;
+
+			if(count && count != f->value_count)
+			{
+				marslog(LOG_EROR,
+						"compute: function '%s', not all fields have the same number of values ",
+						p->name);
+			}
+			count = f->value_count;
+
+			g[j] = copy_field(f,true);
+			set_field(w,g[j],n+j);
+			release_field(f);
+		}
+
+		if(bitmap)
+			for(j = 0; j < size ; j++)
+				g[j]->bitmap = true;
+
+
+
+		for(k = 0; k < count ; k++)
+		{
+			for(j = 0; j < size ; j++)
+				tmp[j] = g[j]->values[k];
+
+#ifdef QSORT
+			qsort(tmp,size,sizeof(double),cmp_double);
+#else
+			sort(tmp,0,size);
+#endif
+
+			for(j = 0; j < size ; j++)
+				g[j]->values[k] = tmp[j];
+
+			if(bitmap) {
+				int ok = 0;
+				for(j = 0; j < size ; j++)
+					if(MISSING_VALUE(tmp[j]))
+						ok++;
+
+				if(ok)
+					for(j = 0; j < size ; j++)
+						g[j]->values[k]  = mars.grib_missing_value;
+
+
+			}
+
+		}
+
+
+		save_fieldset(w);
+
+
+	}
+	FREE(g);
+	FREE(tmp);
+
+	return e ? e : push_fieldset(w);
+
+}
+
+static err f_merge(math *p,void *data)
+{
+	variable *v;
+	fieldset *z;
+	fieldset *w = NULL;
+	int cnt = p->arity;
+
+
+	marslog(LOG_DBUG,"f_merge");
+
+	if(cnt < 2)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' needs at least two arguments",p->name);
+		return -1;
+	}
+
+	while(cnt--)
+	{
+
+		if(!(v = pop())) return -1;
+
+		if(v->scalar) { 
+			marslog(LOG_EROR, 
+					"compute: function '%s' works only on fields",p->name);
+			return -1;
+		}
+
+		z = w;
+		w = merge_fieldsets(v->fs,w);
+		if(z) free_fieldset(z);
+	}
+
+	return push_fieldset(w);
+
+}
+
+static err f_stdev(math *p,void *data)
+{
+	variable *vin;
+	fieldset *vout;
+	int i,j;
+	field *gin,*gout;
+	double *x;
+	double *y;
+	double d;
+	int missing = 0;
+	char formula[10240];
+
+
+	marslog(LOG_DBUG,"f_stdev");
+
+	if(!(vin = pop()))
+		return -1;
+
+	if(vin->scalar)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' works only on fields",p->name);
+		return -1;
+	}
+
+	sprintf(formula,"%s(%s)",p->name,vin->name);
+
+	vout = new_fieldset(1);
+
+	gin  = get_nonmissing_field(vin->fs,expand_mem);
+	if(MISSING_FIELD(gin))
+	{
+		gout = copy_field(gin,true);
+		release_field(gin);
+		inform_missing_fieldset(vin->name);
+		marslog(LOG_WARN,"COMPUTE of '%s' not done",formula);
+	}
+	else
+	{
+		gout = copy_field(gin,false);
+
+		x = NEW_ARRAY_CLEAR(double,gin->value_count);
+		y = NEW_ARRAY_CLEAR(double,gin->value_count);
+
+		for(j=0;j<gin->value_count;j++)
+			gout->values[j] = 0;
+
+		release_field(gin);
+
+
+		for(i=0;i<vin->fs->count;i++)
+		{
+			gin  = get_field(vin->fs,i,expand_mem);
+
+
+			if( ! MISSING_FIELD(gin))
+				for(j=0;j<gin->value_count;j++)
+				{
+					x[j] += gin->values[j];
+					y[j] += (gin->values[j]*gin->values[j]);
+				}
+			else
+				missing++;
+
+			copy_bitmap(gout,gin,0);
+			release_field(gin);
+
+		}
+
+		for(j=0;j<gout->value_count;j++)
+			if( ! MISSING_VALUE(gout->values[j]))
+			{
+				x[j]     /= (vin->fs->count - missing);
+				y[j]     /= (vin->fs->count - missing);
+				d         = y[j] - x[j]*x[j];
+				if(d<0) d = 0;
+
+				gout->values[j] = sqrt(d);
+			}
+
+		FREE(x);
+		FREE(y);
+	}
+
+	set_field(vout,gout,0);
+	return push_named_fieldset(strcache(formula),vout);
+
+}
+
+static err f_var(math *p,void *data)
+{
+	variable *vin;
+	fieldset *vout;
+	int i,j;
+	field *gin,*gout;
+	double *x;
+	int missing = 0;
+	char formula[10240];
+
+	marslog(LOG_DBUG,"f_var");
+
+	if(!(vin = pop()))
+		return -1;
+
+	if(vin->scalar)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' works only on fields",p->name);
+		return -1;
+	}
+
+	sprintf(formula,"%s(%s)",p->name,vin->name);
+	vout = new_fieldset(1);
+
+	gin  = get_nonmissing_field(vin->fs,expand_mem);
+	if(MISSING_FIELD(gin))
+	{
+		gout = copy_field(gin,true);
+		release_field(gin);
+		inform_missing_fieldset(vin->name);
+		marslog(LOG_WARN,"COMPUTE of '%s' not done",formula);
+	}
+	else
+	{
+		gout = copy_field(gin,false);
+
+		x = NEW_ARRAY_CLEAR(double,gin->value_count);
+
+		for(j=0;j<gin->value_count;j++)
+			gout->values[j] = 0;
+
+		release_field(gin);
+
+
+		for(i=0;i<vin->fs->count;i++)
+		{
+			gin  = get_field(vin->fs,i,expand_mem);
+
+			if(!gin->missing)
+				for(j=0;j<gin->value_count;j++)
+				{
+					x[j]           += gin->values[j];
+					gout->values[j] += (gin->values[j]*gin->values[j]);
+				}
+			else
+				missing++;
+
+			copy_bitmap(gout,gin,0);
+
+			release_field(gin);
+
+		}
+
+		for(j=0;j<gout->value_count;j++)
+			if( ! MISSING_VALUE(gout->values[j]))
+			{
+				x[j]           /= (vin->fs->count-missing);
+				gout->values[j] /= (vin->fs->count-missing);
+
+				gout->values[j] = gout->values[j] - x[j]*x[j];
+			}
+
+		FREE(x);
+
+	}
+	set_field(vout,gout,0);
+	return push_named_fieldset(strcache(formula),vout);
+
+}
+
+/*****************************************************************************
+
+  Co-Variance
+
+ *****************************************************************************/
+
+static err f_covar(math *p,void *data)
+{
+	variable *vx,*vy;
+	fieldset *vout;
+	int i,j;
+	field *gx,*gy,*gout;
+	double *x;
+	double *y;
+	int missing = 0;
+	char formula[10240];
+
+	marslog(LOG_DBUG,"f_covar");
+
+	if(!(vx = pop()))
+		return -1;
+
+	if(!(vy = pop()))
+		return -1;
+
+	if(vx->scalar || vy->scalar)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' works only on fields",p->name);
+		return -1;
+	}
+
+	if(vx->fs->count != vy->fs->count)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' need the same number of fields",
+				p->name);
+		return -1;
+	}
+
+	sprintf(formula,"%s %s %s",vx->name,p->name,vy->name);
+	vout = new_fieldset(1);
+
+	gx  = get_nonmissing_field(vx->fs,expand_mem);
+	gy  = get_nonmissing_field(vy->fs,expand_mem);
+
+	if(gx->value_count != gy->value_count)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' need the same number of grid points",
+				p->name);
+		return -1;
+	}
+
+	if(MISSING_FIELD(gx) || MISSING_FIELD(gy))
+	{
+		copy_field(gx,true);
+
+		if(MISSING_FIELD(gx))
+			inform_missing_fieldset(vx->name);
+		if(MISSING_FIELD(gy))
+			inform_missing_fieldset(vy->name);
+		marslog(LOG_WARN,"COMPUTE of '%s' not done",formula);
+		release_field(gx);
+		release_field(gy);
+	}
+	else
+	{
+		gout = copy_field(gx,false);
+
+		x  = NEW_ARRAY_CLEAR(double,gx->value_count);
+		y  = NEW_ARRAY_CLEAR(double,gy->value_count);
+
+		for(j=0;j<gx->value_count;j++)
+			gout->values[j] = 0;
+		copy_bitmap(gout,gx,gy);
+
+		release_field(gx);
+		release_field(gy);
+
+
+		for(i=0;i<vx->fs->count;i++)
+		{
+			gx  = get_field(vx->fs,i,expand_mem);
+			gy  = get_field(vy->fs,i,expand_mem);
+
+			if(gx->value_count != gy->value_count)
+			{
+				marslog(LOG_EROR,
+						"compute: function '%s' need the same number of grid points",
+						p->name);
+				FREE(x);
+				FREE(y);
+				return -1;
+			}
+
+			if(gx->missing || gy->missing)
+				missing++;
+			else
+				for(j=0;j<gx->value_count;j++)
+				{
+					x[j]           += gx->values[j];
+					y[j]           += gy->values[j];
+					gout->values[j] += (gx->values[j] * gy->values[j]);
+				}
+
+			copy_bitmap(gout,gx,gy);
+
+			release_field(gx);
+			release_field(gy);
+
+		}
+
+		for(j=0;j<gout->value_count;j++)
+			if( ! MISSING_VALUE(gout->values[j]))
+			{
+				x[j]           /= (vx->fs->count - missing);
+				y[j]           /= (vx->fs->count - missing);
+				gout->values[j] /= (vx->fs->count - missing);
+
+				gout->values[j] = gout->values[j] - x[j]*y[j];
+			}
+
+	}
+
+	FREE(x);
+	FREE(y);
+
+	set_field(vout,gout,0);
+	return push_named_fieldset(strcache(formula),vout);
+}
+
+static err f_rms2(math *p,void *data)
+{
+	variable *vx,*vy;
+	int i,j;
+	field *gx,*gy;
+	int missing = 0;
+	char formula[10240];
+	double result = 0;
+	int count = 0;
+
+	marslog(LOG_DBUG,"f_rms2");
+
+	if(!(vx = pop()))
+		return -1;
+
+	if(!(vy = pop()))
+		return -1;
+
+	if(vx->scalar || vy->scalar)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' works only on fields",p->name);
+		return -1;
+	}
+
+	if(vx->fs->count != vy->fs->count)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' need the same number of fields",
+				p->name);
+		return -1;
+	}
+
+	if(vx->fs->count != 1)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' takes only one field per fieldset",
+				p->name);
+		return -1;
+	}
+
+	sprintf(formula,"%s %s %s",vx->name,p->name,vy->name);
+
+	gx  = get_nonmissing_field(vx->fs,expand_mem);
+	gy  = get_nonmissing_field(vy->fs,expand_mem);
+
+	if(gx->value_count != gy->value_count)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' need the same number of grid points",
+				p->name);
+		return -1;
+	}
+
+	if(MISSING_FIELD(gx) || MISSING_FIELD(gy))
+	{
+		copy_field(gx,true);
+
+		if(MISSING_FIELD(gx))
+			inform_missing_fieldset(vx->name);
+		if(MISSING_FIELD(gy))
+			inform_missing_fieldset(vy->name);
+		marslog(LOG_WARN,"COMPUTE of '%s' not done",formula);
+		release_field(gx);
+		release_field(gy);
+	}
+	else
+	{
+		gx  = get_field(vx->fs,0,expand_mem);
+		gy  = get_field(vy->fs,0,expand_mem);
+
+		if(gx->value_count != gy->value_count)
+		{
+			marslog(LOG_EROR,
+					"compute: function '%s' need the same number of grid points",
+					p->name);
+			return -1;
+		}
+
+		if(!gx->missing && !gy->missing)
+			for(j=0;j<gx->value_count;j++)
+				if(!MISSING_VALUE(gx->values[j]))
+					if(!MISSING_VALUE(gy->values[j]))
+					{
+						double d = gx->values[j] - gy->values[j];
+						count++;
+						result  += d*d;
+					}
+
+		release_field(gx);
+		release_field(gy);
+
+	}
+
+	if(count == 0)
+	{
+		marslog(LOG_EROR, "compute: function '%s' no grid points", p->name);
+		return -1;
+	}
+
+	return push_scalar(sqrt(result/count));
+
+}
+
+/******************************************************
+
+  x = bitmap(y,n), creates a fieldset 'x' with the same
+  number of fields than 'y', setting grib_missing_value 
+  for those points on 'y' with value n (depending on
+  parameter).
+
+  x = bitmap(y,z) [count(y) == count(z)], creates a fieldset 'x', where 
+  x[i] = bitmap of z[i] applied to y[i].
+
+  x = bitmap(y,z) [count(z) == 1], creates a fieldset 'x', where 
+  x[i] = bitmap of z applied to y[i].
+
+ *******************************************************/
+
+static err f_bitmap(math *p,void *data)
+{
+	variable *vx,*vy;
+	fieldset *vout;
+	field *gx;
+	int i,j;
+	char formula[10240];
+	err e = NOERR;
+
+	marslog(LOG_DBUG,"f_bitmap");
+
+	if(!(vy = pop()))
+		return -1;
+
+	if(!(vx = pop()))
+		return -1;
+
+	if(vx->scalar)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' needs a fieldset as 1st parameter",p->name);
+		return -1;
+	}
+
+	if(!vy->scalar && (vx->fs->count != vy->fs->count) && (vy->fs->count != 1))
+	{
+		marslog(LOG_EROR,
+				"fieldset %s has %d fields and fieldset %s has %d",
+				vx->name,vx->fs->count,vy->name,vy->fs->count);
+		return -1;
+	}
+
+
+	sprintf(formula,"%s(%s,%s)",p->name,vx->name,vy->name);
+	vout = new_fieldset(1);
+
+	gx = get_nonmissing_field(vx->fs,expand_mem);
+	if(MISSING_FIELD(gx))
+	{
+		field *gout = copy_field(gx,true);
+		release_field(gx);
+		inform_missing_fieldset(vx->name);
+		marslog(LOG_WARN,"COMPUTE of '%s' not done",formula);
+		set_field(vout,gout,0);
+	}
+	else 		/* Start function */
+	{
+		if(vy->scalar)
+		{
+			/* Second parameter is a scalar */
+			for(i=0;i<vx->fs->count;i++)
+			{
+				field *ga = get_field(vx->fs,i,expand_mem);
+				field *gc;
+				if(MISSING_FIELD(ga))
+					gc = copy_field(ga,true);
+				else
+				{
+					gc = copy_field(ga,true);
+					for(j=0;j<ga->value_count;j++)
+						if(ga->values[j] == vy->val)
+						{
+							gc->values[j] = mars.grib_missing_value;
+							gc->bitmap = true;
+						}
+				}
+				set_field(vout,gc,i);
+				if( ((i+1) % SAVE_CNT) == 0)
+					e = e | save_fieldset(vout);
+
+				release_field(ga);
+			}
+		}
+		else if(vx->fs->count == vy->fs->count)
+		{
+			/* Both fieldsets have the same number of fields */
+			for(i=0;i<vx->fs->count;i++)
+			{
+				field *ga = get_field(vx->fs,i,expand_mem);
+				field *gb = get_field(vy->fs,i,expand_mem);
+				field *gc;
+
+				if(ga->value_count != gb->value_count)
+				{
+					marslog(LOG_EROR,
+							"compute: function '%s' need the same number of grid points",
+							p->name);
+					return -1;
+				}
+
+				if(MISSING_FIELD(ga))
+					gc = copy_field(ga,true);
+				else if(MISSING_FIELD(gb))
+					gc = copy_field(gb,true);
+				else
+				{
+					gc = copy_field(ga,true);
+					if(FIELD_HAS_BITMAP(gb)) 
+						copy_bitmap(gc,gb,0);
+				}
+
+				set_field(vout,gc,i);
+				if( ((i+1) % SAVE_CNT) == 0) 
+					e = e | save_fieldset(vout);
+
+				release_field(ga);
+				release_field(gb);
+			}
+		}
+		else 
+		{
+			/* second parameter has 1 field */
+			field *gb = get_field(vy->fs,0,expand_mem);
+			if(MISSING_FIELD(gb))
+			{
+				for(i=0;i<vx->fs->count;i++)
+				{
+					set_field(vout,copy_field(gb,true),i);
+					if( ((i+1) % SAVE_CNT) == 0) 
+						e = e | save_fieldset(vout);
+				}
+			}
+			for(i=0;i<vx->fs->count;i++)
+			{
+				field *ga = get_field(vx->fs,i,expand_mem);
+				field *gc;
+
+				if(MISSING_FIELD(ga))
+					gc = copy_field(ga,true);
+				else
+				{
+					if(ga->value_count != gb->value_count)
+					{
+						marslog(LOG_EROR,
+								"compute: function '%s' need the same number of grid points",
+								p->name);
+						return -1;
+					}
+					gc = copy_field(ga,true);
+					if(FIELD_HAS_BITMAP(gb)) 
+						copy_bitmap(gc,gb,0);
+				}
+				set_field(vout,gc,i);
+				if( ((i+1) % SAVE_CNT) == 0) 
+					e = e | save_fieldset(vout);
+
+				release_field(ga);
+			}
+			release_field(gb);
+		}
+	}
+
+	e = e | push_named_fieldset(strcache(formula),vout);
+	return e;
+}
+
+/******************************************************
+
+  x = nobitmap(y,n), creates a fieldset 'x' with the same
+  number of fields than 'y', setting n as value 
+  for those points on 'y' with grib_missing_value
+  (i.e., for those points of the bitmap).
+
+ *******************************************************/
+
+static err f_nobitmap(math *p,void *data)
+{
+	variable *vx,*vy;
+	fieldset *vout;
+	field *gx;
+	int i,j;
+	char formula[10240];
+	err e = NOERR;
+
+	marslog(LOG_DBUG,"f_bitmap");
+
+	if(!(vy = pop()))
+		return -1;
+
+	if(!(vx = pop()))
+		return -1;
+
+	if(vx->scalar)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' needs a fieldset as 1st parameter",p->name);
+		return -1;
+	}
+
+	if(!vy->scalar)
+	{
+		marslog(LOG_EROR,
+				"compute: function '%s' needs a scalar as 2nd parameter",p->name);
+		return -1;
+	}
+
+	sprintf(formula,"%s(%s,%s)",p->name,vx->name,vy->name);
+	vout = new_fieldset(1);
+
+	gx = get_nonmissing_field(vx->fs,expand_mem);
+	if(MISSING_FIELD(gx))
+	{
+		field *gout = copy_field(gx,true);
+		release_field(gx);
+		inform_missing_fieldset(vx->name);
+		marslog(LOG_WARN,"COMPUTE of '%s' not done",formula);
+		set_field(vout,gout,0);
+	}
+	else 		/* Start function */
+	{
+		/* Second parameter is a scalar */
+		for(i=0;i<vx->fs->count;i++)
+		{
+			field *ga = get_field(vx->fs,i,expand_mem);
+			field *gc = copy_field(ga,true);
+			if(FIELD_HAS_BITMAP(ga))
+			{
+				for(j=0;j<ga->value_count;j++)
+					if(MISSING_VALUE(ga->values[j]))
+						gc->values[j] = vy->val;
+				remove_bitmap(gc);
+			}
+
+			set_field(vout,gc,i);
+			if( ((i+1) % SAVE_CNT) == 0)
+				e = e | save_fieldset(vout);
+
+			release_field(ga);
+		}
+	}
+
+	e = e | push_named_fieldset(strcache(formula),vout);
+	return e;
+}
+
+static err f_duplicate(math *p,void* data)
+{
+	variable *va,*vb;
+	fieldset *vc;
+	int i;
+	char formula[10240];
+	err e = NOERR;
+	field *f;
+
+
+	if(!(vb = pop()))
+		return -1;
+
+	if(!(va = pop()))
+		return -1;
+
+	sprintf(formula,"%s(%s,%s)",p->name,va->name,vb->name);
+
+	if(!vb->scalar)
+	{
+		marslog(LOG_EROR, "duplicate: parameter 2 should be a scalar");
+		return -1;
+	}
+
+	if(va->scalar)
+	{
+		marslog(LOG_EROR, "duplicate: parameter 1 should be a fieldset");
+		return -1;
+	}
+
+	if(va->fs->count != 1)
+	{
+		marslog(LOG_EROR, "duplicate: parameter 1 should be a fieldset with 1 field");
+		return -1;
+	}
+
+	vc  = new_fieldset(vb->val);
+	f   = get_field(va->fs,0,packed_file);
+
+	for(i=0;i<vb->val;i++)
+		set_field(vc,f,i);
+
+	release_field(f);
+	e = e | push_named_fieldset(strcache(formula),vc);
+	return e;
+
+}
+
+
+static err notimp(math *p)
+{
+	marslog(LOG_EROR,"Function '%s' not yet implemented",p->name);
+	return -1;
+}
+
+static func builtins[] = {
+
+#ifdef notCRAY
+	{"+",   (funcproc)v_add,(mathproc)NULL,2,},
+	{"-",   (funcproc)v_sub,(mathproc)NULL,2,},
+	{"*",   (funcproc)v_mul,(mathproc)NULL,2,},
+	{"/",   (funcproc)v_div,(mathproc)NULL,2,},
+#else
+	{"+",   (funcproc)binop,(mathproc)b_add,2,},
+	{"-",   (funcproc)binop,(mathproc)b_sub,2,},
+	{"*",   (funcproc)binop,(mathproc)b_mul,2,},
+	{"/",   (funcproc)binop,(mathproc)b_div,2,},
+#endif
+
+
+	{"^",   (funcproc)binop,(mathproc)b_pow,2,},
+	{"=",   (funcproc)binop,(mathproc)b_eq,2,},
+	{"<",   (funcproc)binop,(mathproc)b_lt,2,},
+	{">",   (funcproc)binop,(mathproc)b_gt,2,},
+	{"<=",  (funcproc)binop,(mathproc)b_le,2,},
+	{">=",  (funcproc)binop,(mathproc)b_ge,2,},
+	{"<>",  (funcproc)binop,(mathproc)b_ne,2,},
+	{"and",  (funcproc)binop,(mathproc)b_and,2,},
+	{"or",  (funcproc)binop,(mathproc)b_or,2,},
+	{"mod",  (funcproc)binop,(mathproc)b_mod,2,},
+	{"div",  (funcproc)binop,(mathproc)b_idiv,2,},
+	{"max", (funcproc)f_minmax,(mathproc)b_max,-1,"Maximum"},
+	{"min", (funcproc)f_minmax,(mathproc)b_min,-1,"Minimum"},
+	{"maxvalue", (funcproc)f_v_minmax,(mathproc)b_max,-1,"Maximum value of a variable"},
+	{"minvalue", (funcproc)f_v_minmax,(mathproc)b_min,-1,"Minimum value of a variable"},
+	/* {"meanvalue", (funcproc)f_v_mean,(mathproc)NULL,-1,"Mean value of a variable"}, */
+	{"neg", (funcproc)unop,(mathproc)m_neg,1,},
+	{"sgn", (funcproc)unop,(mathproc)m_sgn,1, "Signe"},
+	{"not", (funcproc)unop,(mathproc)m_not,1,},
+	{"int",  (funcproc)unop, (mathproc)m_int,1,"Integer part" },
+	{"exp",  (funcproc)unop, (mathproc)exp,1, "Exponatial"},
+	{"log",  (funcproc)unop, (mathproc)log,1, "Natural logarythme"},
+	{"log10",(funcproc)unop, (mathproc)log10,1, "Base 10 logarythme"},
+	{"sin",  (funcproc)unop, (mathproc)sin,1, "Sine"},
+	{"cos",  (funcproc)unop, (mathproc)cos,1, "Cosine"},
+	{"tan",  (funcproc)unop, (mathproc)tan,1, "Tangent" },
+	{"asin", (funcproc)unop, (mathproc)asin,1, "Arc sine"},
+	{"acos", (funcproc)unop, (mathproc)acos,1, "Arc cosine"},
+	{"atan", (funcproc)unop, (mathproc)atan,1, "Arc tangent"},
+	{"atan2", (funcproc)binop, (mathproc)atan2,2, "Arc tangent of 2 variables"},
+	{"abs",  (funcproc)unop, (mathproc)fabs,1, "Absolute value"},
+	{"sqrt", (funcproc)unop, (mathproc)sqrt,1,"Square root" },
+	{"count",(funcproc)f_count, (mathproc)NULL,1,
+		"Returns the number of fields in a variable"},
+		{"sum",  (funcproc)f_sum, (mathproc)NULL,1, 
+			"Returns a field sum of all the fields of a variable"},
+			{"mean",  (funcproc)f_mean, (mathproc)NULL,1,
+				"Returns the mean of all the fields"},
+
+				{"rms",  (funcproc)f_rms2, (mathproc)NULL,2,
+					"Returns the rms of two fieldsets"},
+
+					{"rms",  (funcproc)f_rms, (mathproc)NULL,1,
+						"Returns the root mean square of all the fields of a variable"},
+						{"stdev",  (funcproc)f_stdev, (mathproc)NULL,1,
+							"Returns the standard deviation of all the fields of a variable"},
+							{"var",  (funcproc)f_var, (mathproc)NULL,1,
+								"Returns the variance of all the fields of a variable"},
+
+								{"covar",  (funcproc)f_covar, (mathproc)NULL,2,
+									"Returns the covariance of all two fieldsets"},
+
+									{"distribution",  (funcproc)f_distribution, (mathproc)NULL,2,
+										"Returns the distribution of fields"},
+
+										{"duplicate",  (funcproc)f_duplicate, (mathproc)NULL,2,
+											"Duplicates a field N times"},
+											{"repeat",  (funcproc)f_duplicate, (mathproc)NULL,2,
+												"Repeats a field N times"},
+
+												{"merge", (funcproc)f_merge, (mathproc)NULL,-1, "Merge several fieldsets"},
+												{"&",     (funcproc)f_merge, (mathproc)NULL,-1, "Merge several fieldsets"},
+												{"bitmap",(funcproc)f_bitmap, (mathproc)NULL,2, 
+													"Apply bitmap of 2nd fieldset to 1st fieldset"}, 
+													{"nobitmap",(funcproc)f_nobitmap, (mathproc)NULL,2, 
+														"Clear bitmap of 1st fieldset assigning value instead"}, 
+
+														{ NULL,},
+};
+
+func *mars_functions(void)
+{
+	return builtins;
+}
+/* to do : ceil an friends erf dran48 lgamma */
+
+static void list_funcs()
+{
+	int i;
+	marslog(LOG_INFO,"These functions are now implented:");
+	for(i=0;builtins[i].name;i++)
+		if(builtins[i].arity<0)
+			printf("%-8s any number of arguments : %s\n",builtins[i].name,
+					builtins[i].info?builtins[i].info:"No information available");
+		else
+			printf("%-8s %d argument(s)          : %s\n",builtins[i].name,
+					builtins[i].arity,builtins[i].info?builtins[i].info:
+					"No information available");
+
+}
+
+static err call_math_func(math *p,void *data)
+{
+	int i;
+	funcproc  f =  (funcproc)extern_func;
+	mathproc  d = NULL;
+
+	for(i=0;builtins[i].name;i++)
+		if(strcasecmp(builtins[i].name,p->name)==0)
+			if((builtins[i].arity < 0) || (builtins[i].arity == p->arity))
+		{
+			f = builtins[i].addr;
+			d = builtins[i].proc;
+			return f(p,d);
+		}
+
+	for(i=0;builtins[i].name;i++)
+		if(strcasecmp(builtins[i].name,p->name)==0)
+		{
+			f = builtins[i].addr;
+			d = builtins[i].proc;
+			if(builtins[i].arity >= 0)
+				if(builtins[i].arity != p->arity)
+				{
+					marslog(LOG_EROR,"Function '%s' is expecting %d argument(s)"
+							,builtins[i].name,builtins[i].arity);
+					return -1;
+				}
+			break;
+		}
+	return f(p,d);
+}
+
+static err call_load(math *p,void *data)
+{
+	variable *v;
+
+	marslog(LOG_DBUG,"Loading '%s'",p->name);
+	if(is_number(p->name))
+		return push_named_scalar(p->name,atof(p->name));
+	else 
+	{
+		int	args[3];
+		int i;
+		int arity = -p->arity;
+
+		if(arity > 3)
+		{
+			marslog(LOG_EROR,"Wrong number of indices for field name '%s'",
+					p->name);
+			return -1;
+		}
+
+		args[0] = args[1] = args[2] = 0;
+
+		for(i=0;i<arity;i++)
+		{
+			if(!(v = pop())) return -1;
+			if(!v->scalar)
+			{
+				marslog(LOG_EROR,"Bad index for field name '%s': not a scalar",
+						p->name);
+				return -1;
+			}
+
+			args[arity - i - 1] = (int)v->val;
+		}
+
+		v = find_variable(p->name);
+		if(v == NULL)
+		{
+			marslog(LOG_EROR,"Cannot find variable %s",p->name);
+			return -2;
+		}
+		if(v->name)
+			return push_named_fieldset(v->name,sub_fieldset(v->fs,args[0],args[1],args[2]));
+		return push_fieldset(sub_fieldset(v->fs,args[0],args[1],args[2]));
+	}
+}
+
+
+static void advance(void)
+{
+	form++;
+	while(isspace(*form)) form++;
+}
+
+static math *readatom()
+{
+	math *p;
+	int i;
+	char buf[1024];
+
+	switch(*form)
+	{
+		case '(':
+			advance();
+			p = readtest();
+			if(*form != ')')
+			{
+				marslog(LOG_EROR,"Formula: missing )");
+				comperr = 1;
+			}
+			advance();
+			break;
+
+		case '-':
+			p        = NEW_CLEAR(math);
+			p->arity = 1;
+			p->name  = strcache("neg");
+			advance();
+			p->left  = readatom();
+			break;
+
+		case '\0':
+			marslog(LOG_EROR,"Formula: syntax error");
+			comperr = 1;
+			return NULL;
+			/*NOTREACHED*/
+			break;
+
+		default:
+			i = 0;
+
+			if(*form == '\'' || *form == '"')
+			{
+				char c = *form++;
+				while(*form && *form != c) 
+					buf[i++] = *form++;
+				if(*form) form++;
+			}
+			else while(isalpha(*form)||isdigit(*form)||*form =='.'
+					||*form == '_')
+				buf[i++] = *form++;
+
+			buf[i] = 0;
+			if(isspace(*form)) advance();
+
+			p = NEW_CLEAR(math);
+			p->name  = strcache(buf);
+
+			switch(*form)
+			{
+				case '(':
+					advance();
+					p->arity = 0;
+					p->left = readlist(&p->arity);
+					if(*form != ')')
+					{
+						marslog(LOG_EROR,"Formula: missing )");
+						comperr = 1;
+					}
+					advance();
+					break;
+
+				case '[':
+					advance();
+					p->arity = 0;
+					p->left = readlist(&p->arity);
+					if(*form != ']')
+					{
+						marslog(LOG_EROR,"Formula: missing ]");
+						comperr = 1;
+					}
+					p->arity = -p->arity;
+					advance();
+					break;
+
+				default:
+					p->arity = 0;
+					break;
+			}
+
+			break;
+	}
+
+	return p;
+}
+
+static char *opname(char *p,int n)
+{
+	char buf[5];
+	strncpy(buf,p,n);
+	buf[n] = 0;
+	return strcache(buf);
+}
+
+void print_math(math *m)
+{
+	if(m)
+	{
+		putchar('(');
+		print_math(m->left);
+		printf("%s",m->name);
+		print_math(m->right);
+		putchar(')');
+	}
+}
+
+static math *readpower()
+{
+	math *p = readatom();
+
+	while(*form == '^' || (*form == '*' && *(form + 1) == '*') )
+	{
+		math *q  = NEW_CLEAR(math);
+		q->left  = p;
+		q->arity = 2;
+
+		if(*form == '*') { advance(); *form = '^'; }
+
+		q->name     = opname(form,1);
+		advance();
+		q->right    = readatom();
+		p = q;
+	}
+	return p;
+}
+
+static math *readlist(int *n)
+{
+	math *p;
+
+	if(*form == ')') return NULL;
+
+	p  = readtest();
+	*n = 1;
+
+	while(*form == ',')
+	{
+		math *q = NEW_CLEAR(math);
+
+
+		(*n)++;
+
+		q->left  = p;
+
+		advance();
+
+		q->right    = readtest();
+
+		p = q;
+	}
+	return p;
+}
+
+
+static math *readfactor()
+{
+	math *p = readpower();
+	while(*form == '*' || *form == '/')
+	{
+		math *q = NEW_CLEAR(math);
+
+
+		q->arity    = 2;
+		q->left     = p;
+		q->name     = opname(form,1);
+
+		advance();
+
+		q->right    = readpower();
+
+		p = q;
+	}
+	return p;
+}
+
+static math *readterm()
+{
+	math *p = readfactor();
+	while(*form == '+' || *form == '-')
+	{
+		math *q = NEW_CLEAR(math);
+
+
+		q->arity    = 2;
+		q->left     = p;
+		q->name     = opname(form,1);
+
+		advance();
+
+		q->right    = readfactor();
+
+		p = q;
+
+	}
+	return p;
+}
+
+static math *readtest()
+{
+	math *p = readterm();
+	while(*form == '<' || *form == '>' || *form == '=')
+	{
+		math *q = NEW_CLEAR(math);
+		char *x = form;
+		int   n = 1;
+
+
+		q->arity    = 2;
+		q->left     = p;
+
+		advance();
+		if(*form == '=' || *form == '>')
+		{
+			n = 2;
+			advance();
+		}
+
+		q->name = opname(x,n);
+
+		q->right    = readterm();
+
+		p = q;
+
+	}
+	return p;
+}
+
+math *clone_math(math *m)
+{
+	math *n = NULL;
+	if(m)
+	{
+		n = NEW_CLEAR(math);
+		n->arity = m->arity;
+		n->name  = strcache(m->name);
+		n->left  = clone_math(m->left);
+		n->right = clone_math(m->right);
+	}
+	return n;
+}
+
+math *compmath(const char*formula)
+{
+	math *x;
+	char buf[1024];
+
+	strcpy(buf,formula);
+	form = buf;
+
+	comperr = 0;
+	x = readtest();
+	if(comperr)
+		return NULL;
+
+	if(*form)
+	{
+		marslog(LOG_EROR,"Part of the formula was not processed: '%s'",form);
+		return NULL;
+	}
+
+
+	return x;
+}
+
+static err compute(math *p,void *data)
+{
+	err e = NOERR;
+	if(p)
+	{
+		if(e = compute(p->left,data))
+			return e;
+
+		if(e= compute(p->right,data))
+			return e;
+
+		if(p->name)
+			if(p->arity <= 0)
+				return call_load(p,data);
+			else
+				return call_math_func(p,data);
+
+	}
+	return NOERR;
+}
+
+static void fpe(int sig)
+{
+	merr++;
+	signal(SIGFPE,fpe);
+}
+
+void free_math(math *m)
+{
+	if(m)
+	{
+		free_math(m->left);
+		free_math(m->right);
+		strfree(m->name);
+		FREE(m);
+	}
+}
+
+
+err calculate(math *c,const char *f,void *data)
+{
+	int saveerrno = errno;
+	int savemerr  = merr ;
+	err e = 0;
+	variable *v ;
+
+	if(mars.debug)
+	{
+		marslog(LOG_DBUG|LOG_NOCR,"Formula is : ");
+		print_math(c);
+		putchar('\n');
+	}
+
+	/* signal(SIGFPE,fpe); */
+	merr = 0;
+	errno = 0;
+	e = compute(c,data);
+
+	if(merr)  marslog(LOG_WARN,"%d math error(s) where reported",merr);
+
+	if(e == NOERR)
+	{
+		v = pop();
+		if(v) if(v->scalar)
+			marslog(LOG_INFO,"The result of compute is a scalar: %g",v->val); 
+		else
+			marslog(LOG_INFO,"%d resulting field(s) put in fieldset '%s'",
+					v->fs->count,f);
+		new_variable(f,v->fs,v->val);
+	}
+
+	errno = saveerrno;
+	merr  = savemerr;
+	return e;
+}
+
+err handle_compute(request *r,void *data)
+{
+	const char *s = get_value(r,"FORMULA",0);
+	const char *f = get_value(r,"FIELDSET",0);
+	const char *tgt = get_value(r,"TARGET",0); 
+	math *c = compmath(no_quotes(s));
+	err  e;
+
+
+
+#ifndef METVIEW
+	timer *t;
+	char buf[1024];
+	sprintf(buf,"Computing %s",s);
+	t=get_timer(buf,NULL,false);
+	timer_start(t);
+#endif
+
+    if(mars.webmars_target && tgt) {
+        tgt = mars.webmars_target;
+    }
+
+	marslog(LOG_DBUG,"Formula is: %s",s);
+	if(!c) { free_math(c); return -1; }
+
+	e = calculate(c,f,data);
+	free_math(c);
+
+#ifndef METVIEW
+	timer_stop(t,0);
+
+	if((e == NOERR) && tgt)
+	{
+		extern base_class *targetbase;
+		variable *v = find_variable(f);
+		database *target;
+
+		if(!v) {
+			marslog(LOG_EROR,"Fieldset not found: '%s'",f);
+			return -1;
+		}
+
+		if(v->scalar)
+		{
+			marslog(LOG_EROR,"WRITE failed. Field '%s' is a scalar (%g)",
+					s,v->val);
+			return -1;
+		}
+
+		target = database_open(targetbase,NULL,r,NULL,WRITE_MODE);
+
+		if(target == NULL)
+			return -1;
+
+		e = write_fieldset(v->fs,target);
+
+		database_close(target);
+
+		if(e) return e;
+
+		marslog(LOG_INFO,"WRITE %d field(s) from fieldset %s to file '%s'", v->fs->count,f,tgt);
+		return NOERR;
+	}
+
+#endif
+
+	return e;
+}
diff --git a/src/libMars-ecregrid/check.c b/src/libMars-ecregrid/check.c
new file mode 100644
index 0000000..694d17e
--- /dev/null
+++ b/src/libMars-ecregrid/check.c
@@ -0,0 +1,479 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+/*
+
+B.Raoult
+ECMWF Oct-93
+
+*/
+
+#include "mars.h"
+#include "lang.h"
+
+void print_conditions(condition *c)
+{
+	static char *opnames[] = {
+		"val","%or","%and",
+		"%not","=","<",">","<>",">=","<=","%in",
+	};
+	value *v;
+
+	if(c)
+	{
+		putchar('[');
+
+		switch(c->op)
+		{
+
+		case t_val:
+			v = (value*)c->left;
+			printf("%s\n",v->name);
+			break;
+
+		case t_func:
+			printf("%s(%s)\n",(char*)c->left, (char*)c->right);
+			break;
+
+		case t_not:
+			printf("%%not ");
+			print_conditions(c->left);
+			break;
+
+		default:
+			print_conditions(c->left);
+			printf(" %s ",opnames[c->op]);
+			print_conditions(c->right);
+			break;
+		}
+
+		putchar(']');
+	}
+}
+
+static boolean bad_param;
+
+static int compvalues(request  *r,condition *t)
+{
+	condition *t1 = t->left;
+	condition *t2 = t->right;
+	char      *name;
+	const char      *par;
+	char      *val;
+
+	if(t1->op != t_val || t2->op != t_val)
+		marslog(LOG_EXIT,"Bad test");
+
+	name = ((value*)(t1->left))->name;
+
+
+	par = get_value(r,name,0);
+
+	if(par == NULL) {
+		bad_param=true;
+		return -1;
+	}
+
+	val = ((value*)(t2->left))->name;
+
+
+	if(is_number(par) && is_number(val))
+		if(EQ(name,"DATE"))
+			return date_to_julian(atol(par)) - date_to_julian(atol(val));
+		else
+			return atof(par) - atof(val);
+
+	return strcmp(par,val);
+
+}
+
+
+static int complist(request  *r,condition *t)
+{
+	marslog(LOG_WARN,"IN TEST NOT IMP.");
+	return 0;
+}
+
+boolean old_expver_func(request* r,char *n, char *a) {
+
+	/* TODO: Create a global option... */
+	const char* c = get_value(r,"CLASS",0);
+	const char* e = no_quotes(get_value(r,"EXPVER",0));
+	char path[1024];
+	char line[1024];
+	FILE* f;
+
+	if(a) c = a;
+
+	if(!c) { marslog(LOG_WARN,"old_expver_func: CLASS is not defined"); return false; }
+	if(!e) { marslog(LOG_WARN,"old_expver_func: EXPVER is not defined"); return false; }
+
+	sprintf(path,"%s/etc/old_expver.%s", getenv("MARS_HOME") ? getenv("MARS_HOME") : ".", lowcase(c));
+
+	f = fopen(path,"r");
+	if(!f) {
+		marslog(LOG_EXIT|LOG_PERR,"old_expver_func: cannot open %s",path);
+		return false; 
+	}
+
+	while(fgets(line, sizeof(line), f))
+	{
+		if(strncmp(e,line,4) == 0)
+			return true;
+	}
+
+	fclose(f);
+
+	return false;
+}
+
+
+boolean call_func(request* c,char *f, char *a) {
+/* For now, hardcoded ... */
+	if(strcmp(f,"old_expver") == 0) return old_expver_func(c,f,a);
+	marslog(LOG_EXIT,"Invalid function in chk [%s](%s)", f, a?a:"null");
+}
+
+boolean condition_check(request *c,condition *t)
+{
+	boolean b;
+	char *p,*q;
+
+	switch (t->op)
+	{
+	case t_or :
+		b =  condition_check(c,t->left) || condition_check(c,t->right);
+		break;
+
+	case t_and  :
+		b =  condition_check(c,t->left) && condition_check(c,t->right);
+		break;
+
+	case t_not :
+		b =  !condition_check(c,t->left);
+		break;
+
+	case t_val :
+		b =  count_values(c,((value*)(t->left))->name) != 0;
+		break;
+
+	case t_func :
+		p = (char*)t->left;
+		q = (char*)t->right;
+		return call_func(c, p,q);
+		break;
+
+	case t_eq :
+		b =  compvalues(c,t) == 0;
+		break;
+
+	case t_lt :
+		b =  compvalues(c,t) < 0;
+		break;
+
+	case t_gt :
+		b =  compvalues(c,t) > 0;
+		break;
+
+	case t_ne :
+		b =  compvalues(c,t) != 0;
+		break;
+
+	case t_ge :
+		b =  compvalues(c,t) >= 0;
+		break;
+
+	case t_le :
+		b =  compvalues(c,t) <= 0;
+		break;
+
+	case t_in :
+		b = complist(c,t);
+		break;
+
+
+	}
+
+	/*
+	if(mars.debug)
+	{
+		print_conditions(t);
+		putchar('\n');
+		marslog(LOG_DBUG," -> %s",b?"true":"false");
+	}
+	*/
+
+	return b;
+}
+
+rule *read_check_file(const char *fname)
+{
+	extern rule *parser_ruls;
+	rule  *r;
+	if(parser(fname,false) != NOERR)
+	{
+		free_rule(parser_ruls);
+		parser_ruls = NULL;
+		return NULL;
+	}
+	r    = parser_ruls;
+	parser_ruls = NULL;
+	return r;
+}
+
+
+void print_actions(action *a)
+{
+
+}
+
+void print_rules(rule *r)
+{
+	while(r)
+	{
+		printf("%%if ");
+		print_conditions(r->test);
+		printf(" %%then\n");
+		print_actions(r->doit);
+		putchar('\n');
+		r = r->next;
+	}
+}
+
+boolean doaction(rule *c,request *r,action *a)
+{
+	FILE    *f   = 0;
+	request *env = 0;
+	char *s;
+	parameter *p;
+	value     *v;
+	boolean   b;
+	boolean   x = true;
+
+	while(a)
+	{
+		switch(a->op)
+		{
+		case a_set:
+			p = (parameter*)a->param;
+			marslog(LOG_DBUG,"Setting param %s to:",
+			    p->name);
+
+			if(mars.debug)
+			{
+				printf("%s\n",p->values->name);
+				putchar('\n');
+			}
+
+			v = p->values;
+			b = false;
+			while(v)
+			{
+				if(b) add_value(r,p->name,v->name);
+				else set_value(r,p->name,v->name);
+				b = true;
+				v = v->next;
+			}
+			break;
+
+		case a_unset:
+			s = (char*)a->param;
+			marslog(LOG_DBUG,"Unsetting param %s",s);
+			unset_value(r,s);
+			add_value(r,"_UNSET","%s",s);
+			break;
+
+		case a_warning:
+			s = (char*)a->param;
+			marslog(LOG_WARN,"%s",no_quotes(s));
+			break;
+
+		case a_info:
+			s = (char*)a->param;
+			marslog(LOG_INFO,"%s",no_quotes(s));
+			break;
+
+		case a_mail:
+			env = get_environ();
+			s = (char*)a->param;
+			f = mail_open(mars.dhsmail,"%s",no_quotes(s));
+			mail_request(f,"MARS Request:",r);
+			mail_request(f,"MARS Environment:",env);
+			mail_close(f);
+			break;
+
+		case a_mailuser:
+			notify_user(s,r);
+			break;
+
+		case a_error:
+			s = (char*)a->param;
+			marslog(LOG_EROR,"%s",no_quotes(s));
+			x = false;
+			break;
+
+		case a_exit:
+			s = (char*)a->param;
+			marslog(LOG_EXIT,"%s",no_quotes(s));
+			break;
+
+		case a_fail:
+			x = false;
+			marslog(LOG_DBUG,"Fail");
+			if(mars.debug)
+			{
+				print_one_request(r);
+				putchar('\n');
+				print_conditions(c->test);
+				putchar('\n');
+			}
+			break;
+		}
+		a = a->next;
+	}
+
+	return x;
+}
+
+boolean check_one_request(rule *c,request *r)
+{
+	boolean b = true;
+
+	if(r == NULL) return true;
+
+	set_value(r,"_VERB",r->name);
+	if(mars.appl)
+		set_value(r,"_APPL",mars.appl);
+
+	while(c)
+	{
+		bad_param = false;
+
+		if(condition_check(r,c->test) && !bad_param)
+			b = doaction(c,r,c->doit) && b;
+		c = c->next;
+	}
+
+
+	return b;
+}
+
+rule *new_rule(condition *c,action *a)
+{
+	rule *r = NEW_CLEAR(rule);
+	r->test = c;
+	r->doit = a;
+	return r;
+}
+
+condition *new_condition(testop op,condition *l,condition *r)
+{
+	condition *c = NEW_CLEAR(condition);
+	c->op    = op;
+	c->left  = l;
+	c->right = r;
+	return c;
+}
+
+action *new_action(actop op,void *parm)
+{
+	action *a = NEW_CLEAR(action);
+	a->op    = op;
+	a->param = parm;
+	return a;
+}
+
+condition *clone_condition(condition *c)
+{
+	if(!c) return NULL;
+
+	if(c->op == t_func)
+		return new_condition(t_func,
+			(condition*)strcache((char*)c->left),
+			(condition*)strcache((char*)c->right));
+	else if(c->op == t_val)
+		return new_condition(t_val,
+			(condition*)clone_all_values((value*)(c->left)),
+		    NULL);
+	else
+		return new_condition(c->op,
+		    clone_condition(c->left),
+		    clone_condition(c->right)
+		    );
+}
+
+void free_action(action *a)
+{
+	while(a)
+	{
+		action *b = a->next;
+
+		switch(a->op)
+		{
+
+		case a_set:
+			free_all_parameters((parameter*)a->param);
+			break;
+
+		case a_unset:
+		case a_warning:
+		case a_info:
+		case a_mail:
+		case a_mailuser:
+		case a_error:
+		case a_exit:
+			strfree((char*)a->param);
+			break;
+
+		case a_fail:
+			break;
+
+		default:
+			marslog(LOG_EXIT,"free_action : unknown action");
+			break;
+
+		}
+		FREE(a);
+		a = b;
+	}
+
+}
+
+void free_condition(condition *c)
+{
+	if(c)
+	{
+		if(c->op == t_func)
+		{
+			strfree((char*)c->left);
+			strfree((char*)c->right);
+		}
+		else if(c->op == t_val)
+			free_all_values((value*)(c->left));
+		else
+		{
+			free_condition(c->left);
+			free_condition(c->right);
+		}
+		FREE(c);
+	}
+}
+
+void free_rule(rule *r)
+{
+	while(r)
+	{
+		rule *n = r->next;
+		free_condition(r->test);
+		free_action(r->doit);
+		FREE(r);
+		r = n;
+	}
+}
diff --git a/src/libMars-ecregrid/control.c b/src/libMars-ecregrid/control.c
new file mode 100644
index 0000000..8a3b9f6
--- /dev/null
+++ b/src/libMars-ecregrid/control.c
@@ -0,0 +1,109 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+/*
+
+M.Fuentes
+ECMWF Mar-97
+
+(Groups auxiliary verbs as: FLUSH, LIST, REMOVE, ...
+*/
+
+#include <errno.h>
+#include "mars.h"
+
+struct cntl { 
+	char* verb;
+	int   code;
+} controls[] =
+{
+	{"FLUSH",  CNTL_FLUSH, },
+	{"LIST",   CNTL_LIST, },
+	{"BROWSE",   CNTL_LIST, },
+	{"REMOVE", CNTL_REMOVE, },
+	{"ATTACH", CNTL_ATTACH, },
+	{"STAGE",  CNTL_STAGE, },
+	{"STORE",  CNTL_STORE, },
+	{"GET",   CNTL_LIST, },
+	{ NULL,    0, },
+};
+
+static err control(request *b,request *r, int code)
+{
+	database   *bout;
+	err ret;
+	const char *name = 0;
+	request    *cache = 00;
+
+	bout = openbase(b,r,&name,&cache,READ_MODE);
+	if(!bout) return -2;
+
+	ret = database_control(bout,code,r,0);
+	database_close(bout);
+
+	marslog(LOG_INFO,"Request performed on database '%s'",name);
+
+	return ret;
+}
+
+err handle_control(request *r,void *data)
+{
+	const char    *s = get_value(r,"DATABASE",0);
+	const char    *v = request_verb(r);
+	int visit = 0;
+
+	if(s == 0)
+	{
+		marslog(LOG_EROR,"%s needs DATABASE set",v);
+		return -5;
+	}
+	else
+	{
+		int i    = 0;		
+		int code = 0;		
+		err last = 0;
+
+
+		/* Lookup control code */
+
+		while(controls[i].verb)
+			if(EQ(v,controls[i].verb))
+				break;
+			else
+				i++;
+
+		if( ! controls[i].verb)
+		{
+			marslog(LOG_EROR,"%s confused MARS",v);
+			return -5;
+		}
+		else
+			code = controls[i].code;
+
+		i=0;
+		while( s = get_value(r,"DATABASE",i++) )
+		{
+			request *b = findbase(s);
+			if(!b) return -2;
+
+			last = control(b,r,code);
+			if(last == NOERR)
+				visit++;
+
+			if(visit>0)
+				last=NOERR;
+		}
+
+		return last;
+	}
+
+	/*NOTREACHED*/
+	return 0;
+}
diff --git a/src/libMars-ecregrid/control.h b/src/libMars-ecregrid/control.h
new file mode 100755
index 0000000..d76430f
--- /dev/null
+++ b/src/libMars-ecregrid/control.h
@@ -0,0 +1,25 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+/* common control code for all databases */
+
+#define CNTL_REWIND		1
+#define CNTL_HASDATA	2 /* arg is boolean true is data ready */
+
+#define CNTL_FLUSH      3
+#define CNTL_LIST       4
+#define CNTL_REMOVE     5
+#define CNTL_ATTACH     6
+#define CNTL_STAGE      7
+#define CNTL_ERROR      8
+
+#define CNTL_REGISTER   9
+#define CNTL_STORE      10
+#define CNTL_FETCH      11
diff --git a/src/libMars-ecregrid/cos.c b/src/libMars-ecregrid/cos.c
new file mode 100644
index 0000000..fd3dbb2
--- /dev/null
+++ b/src/libMars-ecregrid/cos.c
@@ -0,0 +1,259 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+/*****************************************************************************
+
+  These routines implemente a C access to COS blocked files
+
+  B.Raoult
+
+  Thu May  9 09:36:24 BST 1991
+
+*****************************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <errno.h>
+#include "cos.h"
+
+#define CRAYBLK		4096
+
+/*****************************************************************************
+
+  This routine checks if the current control word is a valid BCW
+  It needs to be improved.
+
+*****************************************************************************/
+
+static validate_bcw(cf)
+COSFILE *cf;
+{
+	if(M(cf->cw)==0) /* is it a BCW ? */
+	{
+		if(BN(cf->cw) != cf->block) return FALSE;
+		cf->block++;
+		return TRUE;
+	}
+	else return FALSE;
+}
+
+/*****************************************************************************
+
+  This routine checks if the current control word is a valid RCW
+  It needs to be improved.
+
+*****************************************************************************/
+
+static validate_rcw(cf)
+COSFILE *cf;
+{
+	if(M(cf->cw)!=0) /* is it a RCW ? */
+	{
+		return TRUE;
+	}
+	else return FALSE;
+}
+
+/*****************************************************************************
+
+  Reads a control word. Checks if is it a valid block.
+
+*****************************************************************************/
+
+static void read_control_word(cf,blocktype)
+COSFILE *cf;
+int     blocktype;
+{
+
+	int validflag = FALSE;
+
+	if(!fread(&(cf->cw),sizeof(crayword),1,cf->f))
+		cf->err = errno?errno:-1;
+	else {
+
+		if(blocktype & BCW) validflag = validate_bcw(cf);
+		if(blocktype & RCW) validflag = validflag | validate_rcw(cf);
+
+		if(!validflag)
+		{
+			cf->err = -1;
+			fprintf(stderr,"Bad control word file %s\n",cf->fname);
+			/* exit(1); it is a fatal error  */
+		}
+	}
+
+}
+
+/*****************************************************************************
+
+   opening a cos blocked file.
+
+*****************************************************************************/
+
+COSFILE *cos_open(const char *fname)
+{
+	COSFILE 	*cf = (COSFILE*)malloc(sizeof(COSFILE));
+
+	if(cf==NULL)
+	{
+		/* perror("Opening file"); */
+		return NULL;
+	}
+
+	cf->f = fopen(fname,"r");
+
+	cf->buffer = NULL;
+	cf->cnt    = CRAYBLK;
+
+	if(cf->f==NULL)
+	{
+		free(cf);
+		perror("Opening file");
+		return NULL;
+	}
+
+	cf->err   = 0;
+	cf->block = 0;
+	cf->fname = (char*)strdup(fname);
+
+	read_control_word(cf,BCW);
+	if(cf->err) 
+	{
+		cos_close(cf);
+		return NULL;
+	}
+
+	return cf;
+}
+
+/*****************************************************************************
+
+   reading a cos blocked file. On exit buf contains the data,
+   len the number of bytes read. The return code is 0 if all Ok,
+   -1 if  end of file, anything else otherwise.
+
+
+   Note: buf must be big enough to hold the data.
+
+*****************************************************************************/
+
+int cos_read(cf,buf,len)
+COSFILE *cf;
+char *buf;
+long *len;
+{
+	long		offset;
+
+	*len = 0;
+
+	do
+	{
+		offset = FWI(cf->cw);
+		if(offset)
+		{
+			if(!fread(buf,offset,1,cf->f))
+			{
+				/* perror("Reading data"); */
+				cf->err = errno?errno:-1;
+				return cf->err;
+			}
+			*len += offset;
+			buf  += offset;
+		}
+		read_control_word(cf,BCW | RCW);
+
+	}while(M(cf->cw)==0);
+
+	if(M(cf->cw) == COSEOF) return EOF;
+	return 0;
+
+}
+
+/*****************************************************************************
+******************************************************************************/
+
+int cos_write(cf,buf,len)
+COSFILE *cf;
+char *buf;
+long len;
+{
+
+	if(len==0)return 0;
+	if(!cf->buffer) 
+	{ 
+		cf->cnt    = CRAYBLK;
+		cf->buffer = (char*) malloc(CRAYBLK);
+		if(!cf->buffer) return -1;
+	}
+
+
+	
+	
+	return 0;
+}
+
+
+/*****************************************************************************
+
+   Close a cos blocked file.
+
+*****************************************************************************/
+
+cos_close(cf)
+COSFILE *cf;
+{
+	fclose(cf->f);
+	if(cf->buffer) free(cf->buffer);
+	free(cf->fname);
+	free(cf);
+	return errno;
+}
+
+
+/****************************************************************************
+
+
+  FORTRAN interface : 
+
+  CALL COSOPEN(ICF,'MYFILE',IERR)
+  CALL COSREAD(ICF,IARRAY,ILEN,IERR)
+  CALL COSCLOSE(ICF,IERR)
+
+*****************************************************************************/
+
+void COSOPEN(filedesc,fname,e)
+char	*fname;
+long	*e;
+COSFILE **filedesc;
+{
+	COSFILE *cf ;
+
+	cf = *filedesc = cos_open(fname);
+	if (cf == NULL) *e = errno?errno:1;
+	else *e = cf->err;
+}
+
+void COSCLOSE(filedesc,e)
+long	*e;
+COSFILE **filedesc;
+{
+	*e = cos_close(*filedesc);
+}
+
+void COSREAD(filedesc,buffer,len,e)
+char	*buffer;
+long	*e;
+long	*len;
+COSFILE **filedesc;
+{
+	*e=cos_read(*filedesc,buffer,len);
+
+}
diff --git a/src/libMars-ecregrid/cos.h b/src/libMars-ecregrid/cos.h
new file mode 100644
index 0000000..0a0159c
--- /dev/null
+++ b/src/libMars-ecregrid/cos.h
@@ -0,0 +1,82 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+
+/*
+
+0123456789012345678901234567890123456789012345678901234567890123
+0         1         2         3         4         5         6
+
+Block control word (BCW)
+
+XXXXX...........................................................  -> M
+...........X....................................................  -> BDF
+...............................XXXXXXXXXXXXXXXXXXXXXXXX.........  -> BDN
+.......................................................XXXXXXXXX  -> FWI
+
+Record control word (RCW)
+
+XXXXX...........................................................  -> M
+.....XXXXXX.....................................................  -> UBC
+....................XXXXXXXXXXXXXXXXXXXXX.......................  -> PFI
+.........................................XXXXXXXXXXXXXX.........  -> PRI
+.......................................................XXXXXXXXX  -> FWI
+
+*/
+
+#define FWI(x)   (((x.loword) & 0x000001FF) <<  3) /* forward index         */
+#define PRI(x)   (((x.loword) & 0x00FFFE00) >>  6) /* previous record index */
+#define PFI(x)   (((x.loword) & 0x00FFFE00) >>  6) /* previous record index */
+#define UBC(x)   (((x.loword) & 0x0FC00000) >> 20) /* unused bit count      */
+#define M(x)     (((x.hiword) & 0xF0000000) >> 28) /* type of block         */
+#define BDF(x)   (((x.hiword) & 0x00100000) >> 28) /* bad data flag         */
+#define BN(x)    (((x.loword) & 0xFFFFFE00) >>  9) /* block number          */
+
+#define COSEOF     0xE		/* COS end of file */
+
+#define BCW		 1			/* block control word  */
+#define RCW      2          /* record control word */
+
+#define COSFILE  cosfile	
+#ifndef TRUE
+#define TRUE	 1
+#endif
+#ifndef FALSE
+#define FALSE	 0
+#endif
+
+/* a cray word is 64 bits = 2x32 bits = 2x1 sun word */
+
+typedef struct {
+	unsigned int	hiword:32;
+	unsigned int	loword:32;
+} crayword;
+
+/* definition of a cosfile */
+
+typedef struct {
+	FILE 	 		*f;     /* current file              */
+	crayword 		cw;     /* current control word      */
+	unsigned int	block;  /* current BCW number        */
+	int				err;    /* last error                */
+	char			*buffer;/* used for cos_write        */
+	long			cnt;    /* number of bytes in buffer */
+	char			*fname; /* file name                 */
+} cosfile;
+
+/* prototypes */
+/* C interface */
+
+COSFILE *cos_open (const char *fname);
+int cos_read (COSFILE *cf, char *buf, long *len);
+int cos_close(COSFILE *cf);
+
+
+#undef _Z
diff --git a/src/libMars/dhsbase.c b/src/libMars-ecregrid/dhsbase.c
similarity index 100%
copy from src/libMars/dhsbase.c
copy to src/libMars-ecregrid/dhsbase.c
diff --git a/src/libMars-ecregrid/ecaccess.c b/src/libMars-ecregrid/ecaccess.c
new file mode 100644
index 0000000..c082310
--- /dev/null
+++ b/src/libMars-ecregrid/ecaccess.c
@@ -0,0 +1,113 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include <string.h>
+#include "mars.h"
+#include "ecaccess.h"
+
+typedef struct ecaccessdata 
+{
+	char    *echost;
+	char    *eccommand;
+	char    *ecaccesshome;
+	int     eccertport;
+	char    *ecservice;
+
+} ecaccessdata;
+
+static option ecaccessopts[] = {
+	{"echost","ECHOST",NULL,"ecaccess.ecmwf.int",t_str,
+	sizeof(char*),OFFSET(ecaccessdata,echost)},
+	{"eccertport","ECCERTPORT",NULL,"443",t_int,
+	sizeof(int),OFFSET(ecaccessdata,eccertport)},
+	{"ecaccesshome","ECACCESS_HOME",NULL,".",t_str,
+	sizeof(char*),OFFSET(ecaccessdata,ecaccesshome)},
+	{"ectool","ECCOMMAND",NULL,"client/tools/eccert",t_str,
+	sizeof(char*),OFFSET(ecaccessdata,eccommand)},
+	{"ecservice","EC_MARS_SERVICE",NULL,"ecmars",t_str,
+	sizeof(char*),OFFSET(ecaccessdata,ecservice)},
+};
+
+static ecaccessdata setup;
+
+err ecaccess_connect(char* host, int* port, char* uid)
+{
+	int perr = 0;
+    char buf[BUFSIZ];
+	char cmd[10240];
+    FILE *file;
+	char *p,*q;
+
+	/* call get_options */
+	get_options("mars","ecaccess",&setup,NUMBER(ecaccessopts),ecaccessopts);
+
+	marslog(LOG_DBUG,"ecaccess_connect new version"); 
+
+    sprintf(cmd,"%s/%s -echost %s -ecport %d -tunnel %s",
+			setup.ecaccesshome,
+			setup.eccommand,
+			setup.echost,
+			setup.eccertport,
+			setup.ecservice
+			);
+
+	/* printf("%s\n",cmd); */
+
+	if ((file = popen(cmd, "r")) == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot run %s",cmd);
+		return -1;
+	}
+
+	memset(buf,0,sizeof(buf));
+	fgets(buf, BUFSIZ - 1, file); 
+	if(strlen(buf)) buf[strlen(buf)-1] = 0;
+
+	if( (perr = pclose(file)) != 0)
+	{
+		marslog(LOG_EROR,"pclose(%s) returns %d.",cmd,perr);
+		return -1;
+	}
+
+	/* parse the received string */
+	p = buf;
+	q = p;
+
+	host[0] = uid[0] = 0; *port = 0;
+
+	while(*p)
+	{
+		switch(*p)
+		{
+			case '@':
+				*p = 0;
+				strcpy(uid,q);
+				q = p+1;
+				*p = '@';
+				break;
+
+			case ':':
+				*p  = 0;
+				strcpy(host,q);
+				*port = atoi(p+1);
+				*p = ':';
+				break;
+		}
+		p++;
+	}
+
+	if(!host[0] || !uid[0] || !*port)
+	{
+		marslog(LOG_EROR,"Cannot parse [%s] output of %s",buf,cmd);
+		return -1;
+	}
+
+    return 0;	
+}
diff --git a/src/libMars-ecregrid/ecaccess.h b/src/libMars-ecregrid/ecaccess.h
new file mode 100644
index 0000000..53212fa
--- /dev/null
+++ b/src/libMars-ecregrid/ecaccess.h
@@ -0,0 +1,20 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+typedef struct ecaccess_info 
+{
+   /* char  *echost; */
+   /* char  *ecaccesshome; */
+   /* char  *ectool; */
+   /* int   eccertport; */
+   char  connect_host[80];
+   int   connect_port;
+   char  uid[80];
+} ecaccess_info;
diff --git a/src/libMars/environ.c b/src/libMars-ecregrid/environ.c
similarity index 100%
copy from src/libMars/environ.c
copy to src/libMars-ecregrid/environ.c
diff --git a/src/libMars-ecregrid/expand.c b/src/libMars-ecregrid/expand.c
new file mode 100755
index 0000000..0918c1e
--- /dev/null
+++ b/src/libMars-ecregrid/expand.c
@@ -0,0 +1,1387 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include "lang.h"
+#include <ctype.h>
+#include <assert.h>
+
+#define PERFECT_MATCH 10000
+
+static err  langerr = 0;
+
+void free_one_value(value *p)
+{
+	strfree(p->name);
+	FREE(p);
+}
+
+void  free_all_values(value *p)
+{
+	while(p)
+	{
+		value *q = p->next;
+		free_one_value(p);
+		p = q;
+	}
+}
+
+void free_one_parameter(parameter *p)
+{
+	strfree(p->name);
+	free_all_values(p->values);
+	free_all_values(p->current_values);
+	free_all_values(p->default_values);
+	free_all_values(p->ibm_values);
+	free_all_requests(p->subrequest);
+	free_all_requests(p->interface);
+	FREE(p);
+}
+
+void free_all_parameters(parameter *p)
+{
+	while(p)
+	{
+		parameter *q = p->next;
+		free_one_parameter(p);
+		p = q;
+	}
+}
+
+void free_one_request(request *r)
+{
+	strfree(r->name);
+	strfree(r->kind);
+	strfree(r->info);
+	free_all_parameters(r->params);
+	FREE(r);
+}
+
+void free_all_requests(request *p)
+{
+	while(p)
+	{
+		request *q = p->next;
+		free_one_request(p);
+		p = q;
+	}
+}
+
+/*==================================================================*/
+
+
+value *clone_one_value(const value *p)
+{
+	value *q  = NEW_CLEAR(value);
+	q->next   = NULL;
+	q->name   = strcache(p->name);
+	return q;
+}
+
+value *clone_all_values(const value *p)
+{
+	if(p)
+	{
+		value *q = clone_one_value(p);
+		q->next  = clone_all_values(p->next);
+		/* q->alias = cone_value(p->alias); */
+		return q;
+	}
+	return NULL;
+}
+
+parameter *clone_one_parameter(const parameter *p)
+{
+	parameter *q = NEW_CLEAR(parameter);
+	q->next   = NULL;
+	q->name   = strcache(p->name);
+	q->values = clone_all_values(p->values);
+	q->current_values   = clone_all_values(p->current_values);
+	q->default_values   = clone_all_values(p->default_values);
+	q->ibm_values   = clone_all_values(p->ibm_values);
+	q->subrequest       = clone_all_requests(p->subrequest);
+	q->interface        = clone_all_requests(p->interface);
+	return q;
+}
+
+parameter *clone_all_parameters(const parameter *p)
+{
+	if(p)
+	{
+		parameter *q = clone_one_parameter(p);
+		q->next = clone_all_parameters(p->next);
+		return q;
+	}
+	return NULL;
+}
+
+request *clone_one_request(const request *r)
+{
+	if(r)
+	{
+		request *p = NEW_CLEAR(request);
+		p->name   = strcache(r->name);
+		p->info   = strcache(r->info);
+		p->kind   = strcache(r->kind);
+		p->params = clone_all_parameters(r->params);
+		p->next   = NULL;
+		return p;
+	}
+	return NULL;
+}
+
+request *clone_all_requests(const request *p)
+{
+	if(p)
+	{
+		request *q = clone_one_request(p);
+		q->next = clone_all_requests(p->next);
+		return q;
+	}
+	return NULL;
+}
+/*==================================================================*/
+static unsigned char charmap[] = {
+
+#if 0
+	'\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
+	'\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
+	'\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
+	'\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
+	'\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
+	'\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
+	'\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
+	'\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
+	'\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
+	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
+	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
+	'\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
+	'\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
+	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
+	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
+	'\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
+	'\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
+	'\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
+	'\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
+	'\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
+	'\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
+	'\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
+	'\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
+	'\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
+	'\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
+	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
+	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
+	'\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337',
+	'\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
+	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
+	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
+	'\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
+#else
+0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 
+0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 
+0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 
+0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 
+0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 
+0x1e, 0x1f, ' ' /*   */,'!' /* ! */,'"' /* " */,'#' /* # */,
+'$' /* $ */,'%' /* % */,'&' /* & */,0x27, '(' /* ( */,')' /* ) */,
+'*' /* * */,'+' /* + */,',' /* , */,'-' /* - */,'.' /* . */,'/' /* / */,
+'0' /* 0 */,'1' /* 1 */,'2' /* 2 */,'3' /* 3 */,'4' /* 4 */,'5' /* 5 */,
+'6' /* 6 */,'7' /* 7 */,'8' /* 8 */,'9' /* 9 */,':' /* : */,';' /* ; */,
+'<' /* < */,'=' /* = */,'>' /* > */,'?' /* ? */,'@' /* @ */,'A' /* A */,
+'B' /* B */,'C' /* C */,'D' /* D */,'E' /* E */,'F' /* F */,'G' /* G */,
+'H' /* H */,'I' /* I */,'J' /* J */,'K' /* K */,'L' /* L */,'M' /* M */,
+'N' /* N */,'O' /* O */,'P' /* P */,'Q' /* Q */,'R' /* R */,'S' /* S */,
+'T' /* T */,'U' /* U */,'V' /* V */,'W' /* W */,'X' /* X */,'Y' /* Y */,
+'Z' /* Z */,'[' /* [ */,0x5c, ']' /* ] */,'^' /* ^ */,' ' /* _ */,
+'`' /* ` */,'A' /* a */,'B' /* b */,'C' /* c */,'D' /* d */,'E' /* e */,
+'F' /* f */,'G' /* g */,'H' /* h */,'I' /* i */,'J' /* j */,'K' /* k */,
+'L' /* l */,'M' /* m */,'N' /* n */,'O' /* o */,'P' /* p */,'Q' /* q */,
+'R' /* r */,'S' /* s */,'T' /* t */,'U' /* u */,'V' /* v */,'W' /* w */,
+'X' /* x */,'Y' /* y */,'Z' /* z */,'{' /* { */,'|' /* | */,'}' /* } */,
+'~' /* ~ */,0x7f, 0x80, 0x81, 0x82, 0x83, 
+0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 
+0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 
+0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 
+0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 
+0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 
+0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 
+0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 
+0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 
+0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 
+0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
+0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 
+0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 
+0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 
+0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 
+0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 
+0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 
+0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 
+0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 
+0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 
+0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 
+0xfc, 0xfd, 0xfe, 0xff, 
+#endif
+};
+
+
+static int count_matches(const char *a,const char *b)
+{
+	int match = 0;
+	register char *cm = (char*)charmap;
+
+	if(b[1] == 0) /* Allow words starting with a @, *, ... */
+		switch(b[0])
+		{
+
+		case '@':
+			return PERFECT_MATCH;
+
+		case '*':
+			if(is_number(a))
+				return PERFECT_MATCH;
+			else if(isrange(a)) /* <------------ come back here !!! */
+				return PERFECT_MATCH;
+			else if(isdate(a)) /* <------------ come back here !!! */
+				return PERFECT_MATCH;
+			else if(istime(a)) /* <------------ come back here !!! */
+				return PERFECT_MATCH;
+			else
+				return 0;
+			/*NOTREACHED*/
+			break;
+
+		case '"':
+		case '\'':
+			if(*a == '"' || *a == '\'')
+				return PERFECT_MATCH;
+			else
+				return 0;
+
+			/*NOTREACHED*/
+			break;
+
+		case '/':
+			/* obsolete ... */
+			break;
+		}
+
+	/* match for DAY 1, WEEK 6, ... */
+	if(b[0] == '*' && b[1] != 0)
+	{
+		char buf[80];
+		int  value;
+		if(sscanf(a,"%s %d",buf,&value) == 2)
+		{
+			if(count_matches(buf,b+1)) {
+				return PERFECT_MATCH;
+			}
+		}
+	}
+
+	while(*a && *b && cm[*a] == cm[*b])
+	{
+		match++;
+		a++;
+		b++;
+	}
+
+	/*
+	if(*a != 0) return 0;
+	if(*b == 0) return PERFECT_MATCH;
+	*/
+
+	if(*a == 0 && *b == 0) return PERFECT_MATCH;
+
+	return match;
+}
+
+
+void update_step_list(int p, int n, int by, value *v)
+{
+	value *nv;
+	parameter *np;
+	value *save;
+	value *first = 0;
+	value *last = 0;
+	char buf[80];
+
+	sprintf(buf,"%d",p*24);  
+	first = nv = new_value(strcache(buf));
+
+	nv->next = new_value(strcache("TO"));
+	nv = nv->next ;
+
+	sprintf(buf,"%d",(int)((p+n-by/24.0)*24)); 
+	nv->next = new_value(strcache(buf));
+	nv = nv->next ;
+		
+	nv->next = new_value(strcache("BY"));
+	nv = nv->next;
+
+	sprintf(buf,"%d",by); 
+	nv->next = new_value(strcache(buf));
+	nv = nv->next ;
+
+
+	np = new_parameter(strcache("STEP"),first);
+	np->count = 5;
+	/* print_all_requests(new_request(strcache("STEP"),np)); */
+
+	check_for_to_by_list(np);
+
+	/* print_all_requests(new_request(strcache("STEP"),np)); */
+
+	nv = first = np->values;
+	while(nv) { last = nv; nv = nv->next; }
+
+	last->next  = v->next;
+	v->next     = first->next;
+	first->next = 0;
+
+	strfree(v->name);
+	v->name = strcache(first->name);
+
+	free_all_parameters(np);
+
+}
+
+static err replace_value(value* v,long val)
+{
+	char buf[80];
+	sprintf(buf,"%d",val);
+	strfree(v->name);
+	v->name = strcache(buf);
+	return 0;
+}
+
+static err expand_steps_day(value* v,int val,request *r)
+{
+	return replace_value(v,val*24);
+}
+
+static err expand_steps_week(value* v,int val,request *r)
+{
+	return replace_value(v,val*7*24);
+}
+
+static err expand_steps_verify(value* v,int val,request *r)
+{
+	const char *date = get_value(r,"DATE",0);
+	const char *time = get_value(r,"TIME",0);
+	long d1,d2;
+
+	if(count_values(r,"DATE") != 1)
+	{
+		marslog(LOG_EROR,"Only one DATE can be given when STEPs are be specified as VERIFY");
+		return -2;
+	}
+
+	if(count_values(r,"TIME") != 1)
+	{
+		marslog(LOG_EROR,"Only one TIME can be given when STEPs are be specified as VERIFY");
+		return -2;
+	}
+
+	d1 = date_to_julian(atol(date));
+	d2 = date_to_julian(val);
+	/* t = atol(time); if(t>100) t /= 100; */
+
+	return replace_value(v,(d2-d1)*24);
+
+
+}
+
+static err expand_steps_month(value* v,int val,request *r)
+{
+	const char *date = get_value(r,"DATE",0);
+	long d1,d2,d0;
+	int i;
+	int n = 0;
+	int p = 0;
+	const char *time = get_value(r,"TIME",0);
+
+	if(count_values(r,"DATE") != 1)
+	{
+		marslog(LOG_EROR,"Only one DATE can be given when STEPs are be specified in MONTH");
+		return -2;
+	}
+
+	d2 = d1 = date_to_julian(atol(date) / 100 * 100 + 01);
+	for(i = 0; i < val; i++)
+	{
+		d2 = julian_to_date(d2 + 32,mars.y2k);
+		d2 = date_to_julian(d2 / 100 * 100 + 1);
+	}
+
+	p = d2-d1;
+
+	printf("validate %d",julian_to_date(date_to_julian(atol(date)) + p,mars.y2k));
+
+	return replace_value(v,p*24);
+
+}
+
+static err expand_steps(request *r)
+{
+	const char *step;
+	parameter* p = find_parameter(r,"STEP");
+	value *v;
+
+	if(!p) return 0;
+
+	v = p->values;
+	while(v)
+	{
+		char buf[80]; int val;
+		if(sscanf(v->name,"%s %d", buf,&val) == 2)
+		{
+			if(EQ(buf,"DAY"))        { if(expand_steps_day(v,val,r) != 0) return -2; }
+			else if(EQ(buf,"WEEK"))  { if(expand_steps_week(v,val,r) != 0) return -2; }
+			else if(EQ(buf,"VERIFY"))  { if(expand_steps_verify(v,val,r) != 0) return -2; }
+			else if(EQ(buf,"MONTH")) { if(expand_steps_month(v,val,r) != 0) return -2; }
+			else {
+				marslog(LOG_EROR,"Unknow value for STEP: %s",buf);
+				return -2;
+			}
+		}
+		v = v->next;
+	}
+	return 0;
+}
+
+
+
+void check_for_date(parameter *p,value *r)
+{
+	char buf[80];
+
+	if(EQ(p->name,"DATE"))
+	{
+
+		if(is_number(r->name))
+		{
+			int n = atoi(r->name);
+			int m;
+
+
+			/* special case for monthly means */
+
+			if( n > 0 && (n % 100) == 0 && n>=100000)
+				m = julian_to_date(date_to_julian(n+1),mars.y2k) - 1;
+			else if(n > 0 && n<100000)
+			/* special case for 'by' value */
+				m = n;
+			else {
+				m = julian_to_date(date_to_julian(n),mars.y2k);
+			}
+
+			if(n != m)
+			{
+				sprintf(buf,"%d",m);
+				strfree(r->name);
+				r->name = strcache(buf);
+			}
+		}
+		else if(isdate(r->name))
+		{
+			int m;
+			long julian,second;boolean isjul;
+			parsedate(r->name,&julian,&second,&isjul);
+			if(second)
+				marslog(LOG_WARN,"HH:MM:SS lost in %s",r->name);
+			if(!isjul) 
+			{
+				m = julian_to_date(julian,mars.y2k);
+				sprintf(buf,"%d",m);
+				strfree(r->name);
+				r->name = strcache(buf);
+			}
+		}
+		
+	}
+}
+
+void check_for_time(parameter *p,value *r)
+{
+	char buf[80];
+
+	if(EQ(p->name,"TIME"))
+	{
+
+		if(is_number(r->name))
+		{
+			if(strlen(r->name) <= 2)
+			{
+				int n = atoi(r->name);
+				sprintf(buf,"%04d",100*n);
+				strfree(r->name);
+				r->name = strcache(buf);
+			}
+		}
+		else if(istime(r->name))
+		{
+			int h,m,s;
+			parsetime(r->name,&h,&m,&s);
+			if(s)
+				marslog(LOG_WARN,"seconds ignored in %s",r->name);
+			 sprintf(buf,"%02d%02d",h,m);
+			 strfree(r->name);
+			 r->name = strcache(buf);
+		}
+	}
+}
+
+static void match_values(value *l,value *r,value **match1,value **match2,int *best_match)
+{
+	while(l)
+	{
+		value *o = l;
+
+		if(l->ref) match_values(l->ref,r,match1,match2,best_match);
+		else 
+			while(o)
+			{
+				int match = count_matches(r->name,o->name);
+
+				if(match == *best_match)
+				{
+					/* only if it is not already this value */
+					if(*match2 != l)
+					{
+						*match1 = *match2;
+						*match2 = l;
+					}
+				}
+
+				if(match > *best_match)
+				{
+					*best_match = match;
+					*match2 = l;
+					*match1 = NULL;
+				}
+				o = o->other_names;
+			}
+		l = l->next;
+	}
+}
+
+static boolean expand_value(parameter *p,value *r,value *lang)
+{
+	value  *match1     = NULL;
+	value  *match2     = NULL;
+	int     best_match = 0;
+	value   *a,*b;
+
+	match_values(lang,r,&match1,&match2,&best_match);
+
+	if(!best_match)
+	{
+		value *v = lang;
+
+		marslog(LOG_EROR,"undefined value : %s for parameter %s",
+		    r->name,p->name);
+
+		if(mars.verbose)
+		{
+			marslog(LOG_EROR,"Values are : ");
+
+
+			while(v)
+			{
+				value *o = v;
+				while(o)
+				{
+					const char* n = o->name;
+					switch(n[0])
+					{
+					case '*':
+						if(n[1])
+						{
+							printf("%s N",n+1);
+						}
+						else
+							printf("any number");
+						break;
+
+					case '"':
+					case '\'':
+						printf("any string");
+						break;
+
+					case '/':
+						printf("a list");
+						break;
+
+					default:
+						printf("%s",n);
+						break;
+
+					}
+					if(o->other_names) printf(" or ");
+					o = o->other_names;
+				}
+				putchar('\n');
+				v = v->next;
+			}
+		}
+
+
+		/* if don't fail use default values */
+		if(mars.expflags & EXPAND_DONT_FAIL)
+		{
+			langerr = 0;
+			marslog(LOG_WARN,"Ignoring parameter %s, using defaults",p->name);
+			if ( EQ(lang->name,"*") ) /* avoid crashing */
+			{
+				strfree(r->name);
+				r->name = strcache("1");
+			}
+			else
+			{
+				free_all_values(r);
+				r = clone_one_value(lang);
+			}
+
+			return false;
+		}
+		langerr = -1;
+		return false;
+	}
+
+	if(match1 && match2 && (match1 != match2) && best_match != PERFECT_MATCH)
+	{
+		marslog(LOG_EROR,"Ambiguous : %s could be %s or %s",
+		    r->name,
+		    match1->name,
+		    match2->name);
+		langerr = -1;
+		return false;
+	}
+
+	if(match2->name[0] == '*' && 
+	   match2->name[1] != 0 && 
+	   strlen(match2->name)>2 )  /* Metview simple formula uses '* ' */
+	{
+		/* case of DAY 1, WEEK 2, ... */
+		char buf[80];
+		long value;
+
+		sscanf(r->name,"%s %d",buf,&value);
+		sprintf(buf,"%s %d",match2->name+1,value);
+		strfree(r->name);
+		r->name = strcache(buf);
+
+	}
+	else if(match2->name[0] == '*' && match2->name[1] == 0)
+	{
+		/* remove ending . in numbers */
+
+		int len = strlen(r->name) - 1;
+		if(len >0 && (r->name[len]  == '.'))
+		{
+			char buf[80];
+			strcpy(buf,r->name);
+			strfree(r->name);
+			buf[len] = 0;
+		    r->name = strcache(buf);
+		}
+	}
+	else if( /* match2->name[1] != 0 || */
+			(match2->name[0] != '"'  && 
+			 match2->name[0] != '\'' && 
+			 match2->name[0] != '@') )
+	{
+
+		/* find last alias */
+
+		a = match2;
+		b = match2;
+
+		if(mars.expflags & EXPAND_LAST_NAME)
+			while(a) {
+				b = a;
+				a = a->other_names;
+			}
+		else if(mars.expflags & EXPAND_2ND_NAME)
+			if(a->other_names) b = a->other_names;
+
+		strfree(r->name);
+		r->name = strcache(b->name);
+
+		if(b->expand != NULL && ((mars.expflags & EXPAND_SUB_LISTS) != 0)) 
+		{
+			value *x = p->values;		
+			value *y = 0;
+			value *z = clone_all_values(b->expand);
+
+			if(p->ibm_values == 0)
+				p->ibm_values = clone_all_values(p->values);
+
+			while(x != r)
+			{
+				y = x;
+				x = x->next;
+			}
+
+			if(y) y->next  = z;
+			else  p->values = z;
+
+			y = 0;
+			while(z != NULL)
+			{
+				y = z;
+				z = z->next;
+			}
+
+			y->next = r->next;
+			r->next = 0;
+			free_one_value(r);
+
+			return true;
+			
+		}
+	}
+
+	if(mars.expflags & EXPAND_DATE) check_for_date(p,r);
+	if(mars.expflags & EXPAND_TIME) check_for_time(p,r);
+
+	return false;
+}
+
+static parameter* match_parameter(parameter *r,parameter *lang,boolean verbose)
+{
+	parameter *l         = lang;
+	parameter *match1    = NULL;
+	parameter *match2    = NULL;
+	int       best_match = 0;
+
+	while(l)
+	{
+		int match = count_matches(r->name,l->name);
+
+		if(match == best_match)
+		{
+			match1 = match2;
+			match2 = l;
+		}
+
+		if(match > best_match)
+		{
+			best_match = match;
+			match2 = l;
+			match1 = NULL;
+		}
+
+		l = l->next;
+	}
+
+
+	if(!best_match)
+	{
+		if(verbose)
+			marslog(LOG_EROR,"Undefined parameter: %s",r->name);
+		return NULL;
+	}
+
+	if(match1 && match2)
+	{
+
+		const char *prio1 = get_value(match1->interface,"priority",0);
+		const char *prio2 = get_value(match2->interface,"priority",0);
+
+		boolean prio = prio1 && prio2 && atol(prio1) != atol(prio2);
+
+		if(verbose)
+			marslog(prio?LOG_WARN:LOG_EROR,
+				"Ambiguous parameter: %s could be %s or %s",
+				r->name,
+				match1->name,
+				match2->name);
+
+		if(prio)
+		{
+			if(atol(prio1) > atol(prio2))
+				match2 = match1;
+			if(verbose)
+				marslog(LOG_WARN,"Assuming that '%s' means '%s'",r->name,match2->name);
+		}
+		else {
+			return NULL;
+		}
+	}
+
+	return match2;
+}
+
+
+static void expand_parameter(parameter *r,parameter *lang)
+{
+	parameter *match     = match_parameter(r,lang,true);
+	value     *p;
+
+	if(match == NULL)
+	{
+		langerr = -1;
+		return;
+	}
+
+	strfree(r->name);
+	r->name = strcache(match->name);
+
+	p = r->values;
+	while(p)
+	{
+		if(expand_value(r,p,match->values))
+			p = r->values;
+		else
+			p = p->next;
+	}
+
+	free_all_values(match->current_values);
+	free_all_values(match->ibm_values);
+
+	match->current_values = clone_all_values(r->values);
+	match->ibm_values     = clone_all_values(r->ibm_values);
+
+	match->subrequest = clone_all_requests(r->subrequest);
+}
+
+
+static request *strip_off_values(request *lang,request *r)
+{
+	parameter *p = r->params;
+	parameter *l = lang->params;
+	parameter *q = NULL;
+
+	while(p)
+	{
+		value *v     = p->current_values;
+		int flg      = 0;
+		int count    = 0;
+		parameter *s = p->next;
+
+		free_all_values(p->values);
+		p->values = p->current_values;
+		p->current_values   = NULL;
+
+		free_all_values(p->default_values);
+		p->default_values = clone_all_values(p->ibm_values);
+
+		if(v == NULL) { count = 1; flg = 1; }
+		while(v)
+		{
+			if(v->name == NULL)
+				{ count = 1; flg = 1; break; }
+			else if(mars.expflags & EXPAND_NO_OFF)
+			{
+				if(EQ(v->name,"O")    ) flg++;
+				else
+				if(EQ(v->name,"OFF")  ) flg++;
+				else
+				if(EQ(v->name,"\"\"") ) flg++;
+				else
+				if(EQ(v->name,"") ) flg++;
+			}
+
+			count++;
+
+			v = v->next;
+		}
+
+		if(mars.expflags & EXPAND_NO_DEFAULT)
+		{
+			value *d = l->default_values;
+			value *v = p->values;
+
+			while(d && v)
+			{
+				if(d->name != v->name) break;
+				d = d->next;
+				v = v->next;
+			}
+
+			if(v == NULL && d == NULL)
+				{ count = 1; flg = 1; }
+
+		}
+
+		/* if(p->values == NULL) { count = 1; flg = 1; } */
+
+		if((mars.expflags & (EXPAND_NO_OFF|EXPAND_NO_DEFAULT)) && 
+			(count == 1) && flg)
+		{
+			if(q) q->next = p->next;
+			else r->params = p->next;
+			free_one_parameter(p);
+		}
+		else
+			q = p;
+
+		p = s;
+		l = l->next;
+	}
+
+	if(mars.expflags & EXPAND_STEP)
+	{
+		if(expand_steps(r) != 0)
+			return 0;
+	}
+
+	if(mars.expflags & EXPAND_LISTS)
+	{
+		parameter *p = r->params;
+		while(p)
+		{
+			count_values(r,p->name);
+			p = p->next;
+		}
+	}
+
+	return r;
+}
+
+static boolean probe_parameters(parameter* p,parameter* lang)
+{
+	while(p)
+	{
+		if(*p->name != '_') 
+		{
+			parameter* match;
+			if(match = match_parameter(p,lang,mars.debug))
+			{
+				value* v = p->values;
+				while(v)
+				{
+					value  *match1     = NULL;
+					value  *match2     = NULL;
+					int     best_match = 0;
+
+					match_values(match->values,v,&match1,&match2,&best_match);
+					/* Undefined value */
+
+					if(!best_match) 
+					{
+						marslog(LOG_DBUG,"No best match for %s",p->name);
+						return false;
+					}
+
+					/* ambiguous */
+					if(match1 && match2 && (match1 != match2) && 
+						best_match != PERFECT_MATCH)
+					{
+						marslog(LOG_DBUG,"Two best match for %s %s %s", p->name,match1->name,match2->name);
+						return false;
+					}
+
+					v = v->next;
+				}
+			}
+			else
+			{
+				marslog(LOG_DBUG,"No match for %s",p->name);
+				return false;
+			}
+		}
+		p = p->next;
+	}
+	return true;
+}
+
+static request *match_verb(const request* r,request *lang)
+{
+	request *l         = lang;
+	request *matches[1024];
+	int     best_match = 0;
+	int top = 0;
+	int use = -1;
+	boolean tell = false;
+
+	while(l)
+	{
+		int match = count_matches(r->name,l->name);
+
+		if(match == best_match)
+		{
+			if(top == NUMBER(matches)-1)
+				marslog(LOG_EXIT,"Match stack too small");
+			matches[top++] = l;
+		}
+
+		if(match > best_match)
+		{
+			top = 0;
+			matches[top++] = l;
+			best_match = match;
+		}
+
+		l = l->next;
+	}
+
+	if(!best_match)
+	{
+		marslog(LOG_EROR,"Undefined verb: %s",r->name);
+		return NULL;
+	}
+
+	if(top > 1)
+	{
+		int i;
+		/* Try to resolve ambiguity */
+		boolean ok[1024];
+		int n = 0;
+		use = -1;
+		for(i = 0 ; i < top ; i++)
+		{
+			marslog(LOG_DBUG,"Probing %s (%s)",matches[i]->name,matches[i]->kind);
+			if(ok[i] =  probe_parameters(r->params,matches[i]->params))
+			{
+				if(use < 0) use = i;
+				n++;
+				marslog(LOG_DBUG,"ok");
+			}
+			else
+			{
+				marslog(LOG_DBUG,"fail");
+			}
+		}
+
+		if(n > 1)
+		{
+			marslog(LOG_WARN,"Ambiguous verb: '%s' could be:",r->name);
+			for(i = 0; i < top; i++)
+				if(ok[i])
+					marslog(LOG_WARN,"  %s (%s)",matches[i]->name,matches[i]->kind);
+			tell = true;
+		}
+	}
+
+	if(use < 0) 
+		use = 0;
+
+	if(tell)
+		marslog(LOG_INFO,"Choosing %s (%s)", matches[use]->name, matches[use]->kind);
+	return matches[use];
+}
+
+static request *expand_one_request(const request *r,request *lang)
+{
+	request   *match  = match_verb(r,lang);
+	parameter *p  = r->params;
+
+	if(!match) 
+	{
+		langerr = -1;
+		return NULL;
+	}
+
+	while(p)
+	{
+		if(*p->name != '_') expand_parameter(p,match->params);
+		p = p->next;
+	}
+
+	return strip_off_values(match,clone_one_request(match));
+}
+
+static void chk_defaults(request *r)
+{
+	while(r)
+	{
+		parameter *p = r->params;
+		while(p)
+		{
+			value *v = p->default_values;
+			while(v)
+			{
+				if(expand_value(p,v,p->values))
+					v = p->default_values;
+				else
+					v = v->next;
+			}
+			p = p->next;
+		}
+		r = r->next;
+	}
+}
+
+
+static value *resolve(request *lang,char *ref,char *name)
+{
+	request *r = lang;
+
+	while(r)
+	{
+		if(r->name == ref)
+		{
+			parameter *p = r->params;
+			while(p)
+			{
+				if(p->name == name)
+					return p->values;
+				p = p->next;
+			}
+		}
+		r = r->next;
+	}
+
+	marslog(LOG_EXIT,"Reference not found parameter %s of verb %s",name,ref);
+	return 0;
+}
+
+
+static void resolve_references(request *lang,request *r)
+{
+	while(r)
+	{
+		parameter *p = r->params;
+		while(p)
+		{
+			value *v = p->values;
+			while(v)
+			{
+				if(v->ref)
+					v->ref = resolve(lang,(char*)v->ref,v->name);
+				v = v->next;
+			}
+			p = p->next;
+		}
+		r = r->next;
+	}
+}
+
+request *read_language_file(const char *name)
+{
+	extern request *parser_lang;
+	request *r;
+
+	if(parser(name,false) != NOERR)
+	{
+		free_all_requests(parser_lang);
+		parser_lang = NULL;
+		return NULL;
+	}
+	r = parser_lang;
+	parser_lang = NULL;
+	resolve_references(r,r);
+	chk_defaults(r);
+	reset_language(r);
+
+	return r;
+}
+
+static request *expand0(request *lang,rule *test,const request *r)
+{
+	if(r)
+	{
+		request *q = expand_one_request(r,lang);
+
+		if(!check_one_request(test,q))
+			langerr = -1;
+
+		if(q) q->next = expand0(lang,test,r->next);
+		return q;
+	}
+	return NULL;
+}
+
+long expand_flags(long flags)
+{
+	long old = mars.expflags;
+	mars.expflags = flags;
+	return old;
+}
+
+request *expand_all_requests(request *lang,rule *test,const request *r)
+{
+	request* s;
+	langerr  = 0;
+	s = expand0(lang,test,r);
+	if(langerr) free_all_requests(s);
+	return langerr?NULL:s;
+}
+
+void reset_language(request *lang)
+{
+	request *r = lang;
+	while(r)
+	{
+		parameter *p = r->params;
+		while(p)
+		{
+			free_all_values(p->current_values);
+			free_all_requests(p->subrequest);
+			p->subrequest = 0;
+			p->current_values = clone_all_values(p->default_values);
+			p = p->next;
+		}
+		r = r->next;
+	}
+}
+
+static void loopuk_loop(value *v,lookupproc c,void *d)
+{
+	while(v)
+	{
+		if(v->ref) loopuk_loop(v->ref,c,d);
+		else c(v->name,d);
+		v = v->next;
+	}
+}
+
+request *closest_verb(request *lang,const char *name)
+{
+	request *l = lang;
+	int best = 1;
+	request *r = NULL;
+
+	while(l)
+	{
+		int match = count_matches(name,l->name);
+		if(match > best) { r = l; best = match; };
+		l = l->next;
+	}
+
+	return r;
+}
+
+parameter *closest_parameter(request *lang,const char *name)
+{
+	parameter *l =  lang?lang->params:NULL;
+	parameter *w = NULL;
+	int	best = 1;
+
+	while(l)
+	{
+		int match = count_matches(name,l->name);
+		if(match > best) { w = l; best = match; };
+		l = l->next;
+	}
+
+	return w;
+}
+
+void loopuk_language(request *lang,const char *v,const char *p,lookupproc c,void *d)
+{
+	request *r = closest_verb(lang,v);
+
+	if(r == NULL) return;
+
+	/* just params */
+
+	if(p == NULL)
+	{
+		parameter *w = r->params;
+		while(w)
+		{
+			c(w->name,d);
+			w = w->next;
+		}
+	}
+	else
+	{
+		parameter *w = closest_parameter(r,p);
+		if(w) loopuk_loop(w->values,c,d);
+	}
+}
+
+static request *trim(request *lang,request *r)
+{
+	while(lang)
+	{
+		if(lang->name == r->name)
+		{
+			parameter *p = r->params;
+			request   *s = empty_request(r->name);
+			parameter *t = NULL;
+
+			while(p)
+			{
+				parameter *q = lang->params;
+				while(q)
+				{
+					if(q->name == p->name)
+					{
+						parameter *u = clone_one_parameter(p);
+						if(t) t->next   = u;
+						else s->params = u;
+						t = u;
+						break;
+					}
+
+					q = q->next;
+				}
+
+				p = p->next;
+			}
+			return s;
+		}
+		lang = lang->next;
+	}
+	return NULL;
+}
+
+request *trim_all_requests(request *lang,request *r)
+{
+	request *s = NULL;
+	request *t = NULL;
+	request *u = NULL;
+
+	while(r)
+	{
+		u = trim(lang,r);
+		if(u)
+		{
+			if(t) t->next = u;
+			else s       = u;
+			t             = u;
+		}
+
+		r = r->next;
+	}
+	return s;
+}
+
+request *expand_mars_request(const request* r)
+{
+	return expand_all_requests(mars_language(),mars_rules(),r);
+}
+
+request* mars_language_from_request(const request* r)
+{
+	request *lang = mars_language();
+	while(lang)
+	{
+		if(lang->name == r->name && lang->kind == r->kind)
+			return lang;
+		lang = lang->next;
+	}
+	return NULL;
+}
+
+void copy_to_ibm_values(request* r,const char* name)
+{
+	parameter* p = find_parameter(r,name);
+	if (p)
+	{
+		free_all_values(p->default_values);
+		p->default_values = clone_all_values(p->values);
+	}
+}
+
+void move_to_ibm_values(request* source,request* dest,const char* name)
+{
+	parameter* p = find_parameter(source,name);
+	parameter* q = find_parameter(dest,name);
+	if (p && q)
+	{
+		free_all_values(q->default_values);
+		q->default_values = clone_all_values(p->values);
+	}
+}
diff --git a/src/libMars-ecregrid/externf.c b/src/libMars-ecregrid/externf.c
new file mode 100644
index 0000000..a4b0def
--- /dev/null
+++ b/src/libMars-ecregrid/externf.c
@@ -0,0 +1,71 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include <errno.h>
+
+
+
+
+static err setargs(FILE *f,int n)
+{
+	if(n == 0)                return 0;
+	if(!(pop()))              return -1;
+	if(setargs(f,n-1))        return -1;
+	abort();
+
+	return 0;
+}
+
+
+err extern_func(math *p)
+{
+	marslog(LOG_EROR,"Undefined function '%s' with %d arguments",p->name,p->arity);
+	return -1;
+
+#if 0
+	char buf[1024];
+	request *r;
+	int saveerr = errno;
+	char *tmp = marstmp();
+	FILE *f = fopen(tmp,"w");
+	err e;
+
+	if(!f)
+	{
+		marslog(LOG_EROR|LOG_PERR,"%s",tmp);
+		return -2;
+	}
+	e = setargs(f,p->arity);
+	fclose(f);
+
+	if(e == NOERR)
+	{
+		sprintf(buf,"env MNAME=%s MREQUEST=%s %s",p->name,tmp,p->name);
+		if(system(buf) != 0) e = -2;
+		else
+		{
+			r = read_request_file(tmp);
+			abort();
+			/*
+			if(r && (v = request_to_fieldset(NULL,r)))
+				push_fieldset(v,p);
+			else e = -2;
+			*/
+			free_all_requests(r);
+		}
+	}
+
+
+
+	errno = saveerr;
+	return e;
+#endif
+}
diff --git a/src/libMars-ecregrid/field.c b/src/libMars-ecregrid/field.c
new file mode 100644
index 0000000..96c215f
--- /dev/null
+++ b/src/libMars-ecregrid/field.c
@@ -0,0 +1,1150 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+/*
+
+B.Raoult
+ECMWF Oct-93
+
+ */
+
+#include "mars.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifndef CRAY
+#include <sys/mman.h>
+#endif
+#include <fcntl.h>
+#include <errno.h>
+#ifndef SYSV
+#include <strings.h>
+#endif
+#if defined(CRAY)
+extern int strcasecmp(const char*,const char*);
+#endif
+#include <math.h>
+
+#define PAD(l,n)     ( ( ( (l)+(n)-1 ) / (n) * (n) ) - (l) )
+
+#define INIT_SIZE	50 /* Allocate 50 fields at a time */
+
+#define GRIB		0x47524942
+
+#define STACK_SIZE 50
+
+#ifndef SEEK_SET
+#define SEEK_SET 0 /* stupid CodeCenter */
+#endif
+
+
+static mempool varmem = {
+	10, /* 10 pages = 40k */
+	1,  /* clear */
+};
+
+#define FASTNEW(type)  	     (type*)fast_new(sizeof(type),&varmem)
+#define FASTDEL(x)           fast_delete(x,&varmem)
+
+
+gribfile* new_gribfile(const char *name)
+{
+	gribfile* g = FASTNEW(gribfile);
+	g->fname = strcache(name?name:marstmp());
+	g->temp  = name == NULL;
+	g->file  = NULL;
+	marslog(LOG_DBUG,"create %s",g->fname);
+	return g;
+}
+
+FILE *open_gribfile(gribfile *g, const char *mode)
+{
+	if(g->file)
+		return g->file;
+
+	g->file = fopen(g->fname,mode);
+	if(g->file == NULL)
+		marslog(LOG_WARN|LOG_PERR,"fopen(%s)",g->fname);
+
+	return g->file;
+}
+
+void close_gribfile(gribfile *g)
+{
+	if(g->file)
+	{
+		if(fclose(g->file))
+			marslog(LOG_WARN|LOG_PERR,"fclose(%s)",g->fname);
+		g->file = NULL;
+	}
+}
+
+void free_gribfile(gribfile *g)
+{
+	if(!g) return;
+	g->refcnt--;
+	if(g->refcnt <= 0)
+	{
+		close_gribfile(g);
+		if(g->temp)
+		{
+			marslog(LOG_DBUG,"unlink %s",g->fname);
+			unlink(g->fname);
+		}
+
+		strfree(g->fname);
+		FASTDEL(g);
+	}
+}
+
+field_request* new_field_request(request *r)
+{
+	field_request* g = FASTNEW(field_request);
+	g->r = clone_one_request(r);
+	return g;
+}
+
+void free_field_request(field_request* g)
+{
+	if(!g) return;
+	g->refcnt--;
+	if(g->refcnt <= 0)
+	{
+		free_all_requests(g->r);
+		FASTDEL(g);
+	}
+}
+
+static void *alloc_empty(long size)
+{
+	void *p = reserve_mem(size);
+	memset(p,0,size);
+	return p;
+}
+
+
+
+void free_field(field *g)
+{
+	if(!g) return;
+	g->refcnt--;
+	if(g->refcnt <= 0)
+	{
+		free_gribfile(g->file);
+		free_field_request(g->r);
+		if(g->values)  release_mem(g->values);
+		grib_handle_delete(g->handle);
+		FASTDEL(g);
+	}
+}
+
+void free_fieldset(fieldset *v)
+{
+	int i;
+	if(!v) return;
+	v->refcnt--;
+	if(v->refcnt <= 0)
+	{
+		marslog(LOG_DBUG,"free_fieldset (%d fields) : ",v->count);
+
+		for(i=0;i<v->count;i++)
+			free_field(v->fields[i]);
+
+		release_mem(v->fields);
+		FASTDEL(v);
+	}
+}
+
+field *new_field()
+{
+	return FASTNEW(field);
+}
+
+
+static void grow_fieldset(fieldset *v,int n)
+{
+	int i;
+	int m = v->count;
+	int x = v->max;
+
+	if(n < v->count) return;
+
+	v->count = n;
+
+	while(v->count >= v->max)
+		if(v->max< INIT_SIZE)
+			v->max = INIT_SIZE;
+		else
+			v->max += v->max/2 +1;
+
+	if(v->max != x)
+	{
+		if( v->fields == NULL)
+			v->fields = (field**)reserve_mem(sizeof(field*)*v->max);
+		else
+		{
+			field** f = (field**)reserve_mem(sizeof(field*)*v->max);
+			for(i=0;i<m;i++)
+				f[i] = v->fields[i];
+			release_mem(v->fields);
+			v->fields = f;
+		}
+
+		for(i=m;i<v->max;i++)
+			v->fields[i] = NULL;
+	}
+}
+
+fieldset *new_fieldset(int n)
+{
+	fieldset *f = FASTNEW(fieldset);
+	grow_fieldset(f,n);
+	return f;
+}
+
+field* read_field(gribfile *file,file_offset pos,long length)
+{
+	field *g = new_field();
+
+	g->file   = file;
+	file->refcnt++;
+	g->offset = pos;
+
+	if(length == 0)
+	{
+		FILE *f = open_gribfile(file,"r");
+		if(f)
+		{
+			fseek(f,pos,SEEK_SET);
+			_readgrib(f,NULL,&length);
+			close_gribfile(file);
+		}
+	}
+	g->length = length;
+	g->shape  = packed_file;
+
+	return g;
+}
+
+err add_field(fieldset *v,field *g)
+{
+	int m = v->count;
+	grow_fieldset(v, v->count + 1);
+	v->fields[m] = g;
+	g->refcnt++;
+	return NOERR;
+}
+
+err set_field(fieldset *v,field *g,int pos)
+{
+	field *h;
+	if(pos >= 0)
+	{
+		grow_fieldset(v,pos+1);
+		h = v->fields[pos];
+		v->fields[pos] = g;
+		g->refcnt++;
+		if(h) free_field(h);
+	}
+	return NOERR;
+}
+
+err check_fieldset(fieldset *v, int expect)
+{
+	int i;
+	int hole = 0;
+	for(i=0;i<v->count;i++)
+		if(v->fields[i] == 0)
+			hole++;
+
+	if((v->count - hole) != expect)
+	{
+		marslog(LOG_EROR,"Inconsistency in field ordering, expected %d, recognised %d",expect,v->count - hole);
+		return -2;
+	}
+
+	return NOERR;
+}
+
+field *copy_field(field *gx,boolean copydata)
+{
+	field *gv   = new_field();
+
+	gv->value_count = gx->value_count;
+	gv->shape   = gx->shape;
+	gv->missing = gx->missing;
+	gv->bitmap  = gx->bitmap;
+
+	if(gx->r) {
+		gv->r = gx->r;
+		gv->r->refcnt++;
+	}
+
+	if(gx->handle)
+		gv->handle = grib_handle_clone(gx->handle);
+
+	if(gx->shape == expand_mem)
+	{
+		gv->values   = (double*)reserve_mem(sizeof(double)*gx->value_count);
+		if(copydata)
+			memcpy((void*)gv->values,(void*)gx->values,
+					gv->value_count*sizeof(double));
+	}
+
+
+	return gv;
+}
+
+void copy_bitmap(field *gc, field *ga, field *gb)
+{
+	boolean doit = ( ga && ga->bitmap) || (gb && gb->bitmap);
+
+	if(doit)
+	{
+		field *f = (ga)?ga:gb;
+		field *g = (gb)?gb:ga;
+		int j = 0;
+		if(f == g)
+		{
+			for(j=0;j<f->value_count;j++)
+				if(MISSING_VALUE(f->values[j]))
+					gc->values[j] = mars.grib_missing_value;
+		}
+		else
+		{
+			for(j=0;j<f->value_count;j++)
+				if(MISSING_VALUE(f->values[j]) ||  MISSING_VALUE(g->values[j]))
+					gc->values[j] = mars.grib_missing_value;
+		}
+
+		gc->bitmap = true;
+	}
+}
+
+void remove_bitmap(field *gc)
+{
+	int err;
+#ifdef COMEBACK
+	gc->bitmap = false;
+	gc->ksec1[4] &= ~0x40; /* ~0x40 == 0xAF */
+#endif
+	gc->bitmap = false;
+	err = grib_set_long(gc->handle,"bitmapPresent",0);
+	if(err) {
+		marslog(LOG_EXIT,"grib_set_long(bitmapPresent) failed: %s", grib_get_error_message(err));
+	}
+}
+
+fieldset *copy_fieldset(fieldset *x,int count,boolean copydata)
+{
+	fieldset *v = new_fieldset(count);
+
+	if( count != 0 )
+	{
+		int i;
+		for(i=0;i<count;i++)
+		{
+			field *gx = get_field(x,i,expand_mem);
+			v->fields[i] = copy_field(gx,copydata);
+			v->fields[i]->refcnt++;
+			release_field(gx);
+		}
+	}
+	return v;
+
+}
+
+fieldset *merge_fieldsets(fieldset *x,fieldset *y)
+{
+	int i;
+	int xcnt    = x ? x->count : 0;
+	int ycnt    = y ? y->count : 0;
+	fieldset *v = new_fieldset(xcnt + ycnt);
+
+	if( (v->count = xcnt + ycnt) != 0 )
+	{
+		for(i=0;i<xcnt;i++)
+		{
+			field *g = x->fields[i];
+			v->fields[i] = g;
+			g->refcnt++;
+		}
+
+		for(i=0;i<ycnt;i++)
+		{
+			field *g = y->fields[i];
+			v->fields[i + xcnt] = g;
+			g->refcnt++;
+		}
+	}
+
+	return v;
+
+}
+
+static void check(int *v,int a,int b)
+{
+	if(*v < a)
+	{
+		marslog(LOG_WARN,"Bad index : %d < %d",*v,a);
+		marslog(LOG_WARN,"The value is changed to %d",a);
+		*v = a;
+	}
+
+	if(*v > b)
+	{
+		marslog(LOG_WARN,"Bad index : %d > %d",*v,b);
+		marslog(LOG_WARN,"The value is changed to %d",b);
+		*v = b;
+	}
+
+}
+
+fieldset *sub_fieldset(fieldset *v,int from,int to,int step)
+{
+	fieldset *w;
+	int count,i,n;
+
+	if(from == 0 && to == 0 && step == 0)
+		return v;
+
+	if(to   == 0) to   = from;
+	if(step == 0) step = 1;
+
+	check(&from,1,v->count);
+	check(&to  ,1,v->count);
+
+	count = (to - from) / step + 1;
+
+	if ( count <= 0)
+	{
+		marslog(LOG_EROR,"Cannot range from %d to %d by %d",from,to,step);
+		return NULL;
+	}
+
+	w = new_fieldset(count);
+
+	for(i=0,n=from-1;i<count;i++,n+=step)
+	{
+		field *g = v->fields[n];
+		w->fields[i] = g;
+		g->refcnt++;
+	}
+
+	return w;
+
+}
+
+int best_packing(fortint current)
+{
+	if(mars.accuracy > 0)
+	{
+		marslog(LOG_DBUG,"best_packing: Using %d bits for packing",mars.accuracy);
+		return mars.accuracy;
+	}
+
+	if(mars.accuracy == -1)
+		return current;
+
+	return 24;
+}
+
+static err to_packed_mem(field *g)
+{
+
+	err e = NOERR;
+	int i;
+
+	if(g->shape == packed_mem) return NOERR;
+
+	if(g->shape == expand_mem)
+	{
+		/* Accuracy */
+		long accuracy = -1;
+		if((e = grib_get_long(g->handle,"numberOfBitsContainingEachPackedValue",&accuracy)))
+		{
+			marslog(LOG_EROR,"grib_api: cannot get accuracy %s",grib_get_error_message(e));
+			return e;
+		}
+
+		accuracy = best_packing(accuracy);
+		if(e = grib_set_long(g->handle,"numberOfBitsContainingEachPackedValue",accuracy))
+		{
+			marslog(LOG_EROR,"grib_api: cannot set accuracy to %ld (%s)",accuracy,grib_get_error_message(e));
+			return e;
+
+		}
+
+		/* Bitmap */
+		if((e = grib_set_double(g->handle,"missingValue",mars.grib_missing_value)))
+		{
+			marslog(LOG_EROR,"grib_api: cannot set missingValue %s",grib_get_error_message(e));
+			return e;
+		}
+		if(g->bitmap)
+		{
+			if((e = grib_set_long(g->handle,"bitmapPresent",1)))
+			{
+				marslog(LOG_EROR,"grib_api: cannot set bitmapPresent %s",grib_get_error_message(e));
+				return e;
+			}
+		}
+
+
+		/* Compute flag */
+		if(mars.computeflg)
+		{
+			if(e = grib_set_long(g->handle,"generatingProcessIdentifier",mars.computeflg))
+			{
+				marslog(LOG_EROR,"grib_api: cannot set generating process to %ld (%s)",mars.computeflg,grib_get_error_message(e));
+				return e;
+			}
+		}
+
+		/* Avoid computing Laplacian Operator, so results are bit comparable with MARS/gribex */
+		{
+			char grid_type[80];
+			size_t size;
+			size = sizeof(grid_type);
+			if(e = grib_get_string(g->handle,"typeOfGrid",grid_type,&size))
+			{
+				marslog(LOG_EROR,"grib_api: cannot get typeOfGrid %s",grib_get_error_message(e));
+				return e;
+			}
+
+			if(strcmp(grid_type,"sh") == 0)
+				grib_set_long(g->handle,"computeLaplacianOperator",0);
+
+		}
+
+
+		if((e = grib_set_double_array(g->handle,"values",g->values,g->value_count)))
+		{
+			marslog(LOG_EROR,"grib_api: cannot encode values %s",grib_get_error_message(e));
+			return e;
+		}
+		release_mem(g->values);
+		g->values      = NULL;
+		g->value_count = 0;
+		g->shape  = packed_mem;
+		return NOERR;
+	}
+
+	if(g->shape == packed_file)
+	{
+		const void* dummy = NULL;
+
+		FILE *f = open_gribfile(g->file,"r");
+		if(!f)
+		{
+			marslog(LOG_EROR|LOG_PERR,"%s",g->file->fname);
+			return -1;
+		}
+		marslog(LOG_DBUG,"loading file %s",g->file->fname);
+
+		if( g->offset )
+		   fseek(f,g->offset,SEEK_SET);
+
+		g->handle = grib_handle_new_from_file(0,f,&e);
+
+		if( g->handle )
+			grib_get_message(g->handle,&dummy,&g->length);
+
+		close_gribfile(g->file);
+		g->shape = packed_mem;
+		if(e) return e;
+	}
+	return NOERR;
+}
+
+
+
+
+static err to_expand_mem(field *g)
+{
+	err e;
+	int i;
+
+	if(g->shape == expand_mem)  return NOERR;
+
+	if(g->shape == packed_file)
+	{
+		const void* dummy = NULL;
+
+		FILE *f = open_gribfile(g->file,"r");
+		if(!f)
+		{
+			marslog(LOG_EROR|LOG_PERR,"%s",g->file->fname);
+			return -1;
+		}
+		marslog(LOG_DBUG,"loading file %s",g->file->fname);
+
+		if( g->offset )
+		   fseek(f,g->offset,SEEK_SET);
+
+		g->handle = grib_handle_new_from_file(0,f,&e);
+
+		if( g->handle )
+			grib_get_message(g->handle,&dummy,&g->length);
+
+		close_gribfile(g->file);
+		if(!g->handle)
+			return -1;
+
+		if(g->values) release_mem(g->values);
+		g->values = NULL;
+	}
+
+	if(g->values == NULL)
+	{
+		size_t count = 0;
+		long bitmap = 0;
+
+		if((e = grib_get_size(g->handle,"values",&g->value_count)))
+		{
+			marslog(LOG_EROR,"grib_api: cannot get number of values %s",grib_get_error_message(e));
+			return e;
+		}
+
+		count = g->value_count;
+
+		if((e = grib_set_double(g->handle,"missingValue",mars.grib_missing_value)))
+		{
+			marslog(LOG_EROR,"grib_api: cannot set missingValue %s",grib_get_error_message(e));
+			return e;
+		}
+
+		g->values = (double*)reserve_mem(sizeof(double)*g->value_count);
+		if((e = grib_get_double_array(g->handle,"values",g->values,&count)))
+		{
+			marslog(LOG_EROR,"grib_api: cannot get decode values %s",grib_get_error_message(e));
+			return e;
+		}
+
+		if(count != g->value_count)
+			marslog(LOG_EXIT,"grib_api: value count mismatch %d %d",count,g->value_count);
+
+		if((e = grib_get_long(g->handle,"bitmapPresent",&bitmap)))
+		{
+			marslog(LOG_EROR,"grib_api: cannot get bitmapPresent %s",grib_get_error_message(e));
+			return e;
+		}
+
+		g->bitmap = (bitmap != 0);
+
+#ifdef COMEBACK
+		set g->missing
+#endif
+	}
+
+
+	g->shape =  expand_mem;
+
+	return e;
+}
+
+void set_field_state(field *g,field_state shape)
+{
+	switch(shape)
+	{
+		case expand_mem:
+			to_expand_mem(g);
+			break;
+
+		case packed_mem:
+			to_packed_mem(g);
+			break;
+
+		case packed_file:
+			release_field(g);
+			break;
+
+		default:
+			marslog(LOG_EXIT,"Internal error %s %d",__FILE__,__LINE__);
+			break;
+
+	}
+}
+
+field *get_field(fieldset *v,int n,field_state shape)
+{
+	field *g = v->fields[n];
+	set_field_state(g,shape);
+	return g;
+}
+
+field *get_nonmissing_field(fieldset *v,field_state shape)
+{
+	int n = 0;
+	field *g = v->fields[n];
+
+	/* Try to get a non missing field */
+	while(g->missing && ++n<v->count)
+	{
+		g = v->fields[n];
+	}
+
+	if(n==v->count) /* If all missing, take the first */
+		g = v->fields[0];
+
+	set_field_state(g,shape);
+	return g;
+}
+
+void inform_missing_fieldset(const char *name)
+{
+	if(name)
+		marslog(LOG_WARN,"All fields in '%s' are missing",name);
+	else
+		marslog(LOG_WARN,"All fields in fieldset are missing");
+}
+
+void release_field(field *g)
+{
+	if(g->file) {
+		if(g->values)  release_mem(g->values);
+		g->values  = NULL;
+		g->shape  = packed_file;
+		grib_handle_delete(g->handle);
+		g->handle = NULL;
+	}
+}
+
+const void *field_message(field *g,long* s)
+{
+	const void *p;
+	size_t size;
+	err e;
+
+	if( (e=grib_get_message(g->handle,&p,&size)) )
+	{
+		marslog(LOG_EROR,"grib_api: cannot set message %s",grib_get_error_message(e));
+		return NULL;
+	}
+
+	*s = size;
+	return p;
+}
+
+err write_field(FILE *f,field *g)
+{
+	int pad;
+	err e = 0;
+	static int first = true;
+	static char c[10240];      /* 10Kb of padding should be enough */
+	long size;
+	const void *p = field_message(g,&size);
+
+	if(!p) return -1;
+
+
+	if(fwrite(p,1,size,f) != size)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Error while writing to disk");
+		e = -2;
+	}
+
+	pad = PAD(size,120);
+
+	if(first)
+	{
+		memset(c,0,sizeof(c));
+		first=false;
+	}
+
+	if(fwrite(c,1,pad,f) != pad)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Error while writing to disk");
+		return -2;
+	}
+
+	return e;
+}
+
+err save_fieldset(fieldset *v)
+{
+	int i;
+	err e = NOERR;
+	gribfile *file = NULL;
+	gribfile *last = NULL;
+	FILE *f = 0;
+
+	for(i=0;i<v->count;i++)
+	{
+		field *g = v->fields[i];
+
+		/* find last file used */
+		if(g != NULL && g->file != NULL && g->file->temp)
+			last = g->file;
+
+		if(g != NULL && g->file == NULL)
+		{
+			if(file == NULL)
+			{
+				file = last?last:new_gribfile(NULL);
+
+				f = fopen(file->fname,"a");
+				if(!f)
+				{
+					marslog(LOG_EROR|LOG_PERR,"Cannot open %s",file->fname);
+					return -2;
+				}
+			}
+			set_field_state(g,packed_mem);
+			g->file = file;
+			file->refcnt++;
+			g->offset = ftell(f);
+			e = write_field(f,g);
+			release_field(g);
+		}
+	}
+
+	if(f)
+	{
+		if(fclose(f))
+		{
+			marslog(LOG_EROR|LOG_PERR,"Error while writing to disk");
+			e = -2;
+		}
+	}
+
+	return e;
+}
+
+fieldset *read_fieldset(const char *fname,request *filter)
+{
+	fieldset *v;
+	FILE *f;
+	long i;
+	file_offset offset;
+	err e = 0;
+	long  buflen = 0;
+	long length = 0;
+	char *buffer = NULL;
+	request *r = NULL;
+	gribfile *file;
+	hypercube *h = NULL;
+	timer *t;
+	char buf[1024];
+
+#ifndef METVIEW
+	sprintf(buf,"Reading file %s",fname);
+	t=get_timer(buf,NULL,true);
+#endif
+
+	if(filter)
+		h = new_hypercube_from_mars_request(filter);
+
+
+	f = fopen(fname,"r");
+	if(f == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot open %s",fname);
+		return NULL;
+	}
+
+	v = new_fieldset(0);
+
+	if(filter) r = empty_request(NULL);
+
+
+	/* count fields */
+
+	i = offset = length = 0;
+	buflen = mars.readany_buffer_size;
+	length = buflen;
+	buffer = reserve_mem(length);
+	file = new_gribfile(fname);
+#ifndef METVIEW
+	timer_start(t);
+#endif
+
+	if(mars.readdisk_buffer > 0)
+	{
+		if(mars.readdisk_buffer > buflen)
+			marslog(LOG_WARN,"Cannot use %d bytes for setvbuf, maximum size is %ld",mars.readdisk_buffer,buflen);
+		else
+		{
+			marslog(LOG_DBUG,"Setting I/O read buffer to %d bytes",mars.readdisk_buffer);
+			if(setvbuf(f,buffer,_IOFBF,mars.readdisk_buffer))
+				marslog(LOG_WARN|LOG_PERR,"setvbuf failed");
+		}
+	}
+
+	while((e = _readany(f,buffer,&length)) == NOERR || (e == BUF_TO_SMALL))
+	{
+		boolean ok = true;
+
+		if(filter)
+		{
+			grib_to_request(r,buffer,length);
+			ok = cube_order(h,r) != -1;
+		}
+
+		if(ok) set_field(v,read_field(file,offset,length),i++);
+
+		if(mars.progress)
+		{
+			mars.done += length;
+			mars.progress();
+		}
+
+		offset = ftell(f);
+		length = buflen;
+	}
+
+	fclose(f);
+#ifndef METVIEW
+	timer_stop(t,0);
+#endif
+
+	if(buffer) release_mem(buffer);
+	free_all_requests(r);
+	if(h)
+		free_hypercube(h);
+
+
+	if(e != EOF)
+	{
+		marslog(LOG_EROR,"Error %d while reading %s",e,fname);
+		return NULL;
+	}
+
+	return v;
+}
+
+static fieldset *_request_to_fieldset(request *r)
+{
+	const char *path = get_value(r,"PATH",0);
+	fieldset *v = NULL;
+	int n = count_values(r,"OFFSET");
+	int m = count_values(r,"LENGTH");
+	int p = count_values(r,"INDEX");
+	/* 	char *temp = get_value(r,"TEMPORARY",0); */
+	/*  int tmp = temp?atoi(temp):0; */
+
+	int i;
+
+	if(n == 0 && m == 0)
+	{
+		v = read_fieldset(path,NULL);
+		if(!v) return NULL;
+		/* 		if(v->count) */
+		/* 			v->fields[0]->file->temp = tmp; */
+	}
+	else if(n != m)          /*-- [vk] fails here when LENGTH has not been set! --*/
+		marslog(LOG_EROR,
+				"Bad data request: offsets != lengths (%d and %d)",n,m);
+	else
+	{
+		gribfile *file = new_gribfile(path);
+
+		/* file->temp = tmp; */
+
+		v = new_fieldset(n);
+
+		for(i=0;i<n;i++)
+		{
+			long length = atol(get_value(r,"LENGTH",i));
+			file_offset offset;
+#ifdef LARGE_FILES_SUPPORT
+			offset = atoll(get_value(r,"OFFSET",i));
+#else
+			offset = atol(get_value(r,"OFFSET",i));
+#endif 
+			set_field(v,read_field(file,offset,length),i);
+			if(mars.progress) {
+				mars.done += length;
+				mars.progress();
+			}
+		}
+	}
+	return v;
+}
+
+
+fieldset *request_to_fieldset(request *r)
+{
+	fieldset *v = NULL;
+
+	if(mars.progress) {
+		/* Count size */
+		request *u = r;
+		mars.todo = 0;
+		mars.done = 0;
+		while(r && EQ(r->name,"GRIB"))
+		{
+			int m = count_values(r,"LENGTH");
+			if(m)  {
+				int i;
+				for(i=0;i<m;i++)
+					mars.todo += atol(get_value(r,"LENGTH",i));
+			}
+			else {
+				const char* p = get_value(r,"PATH",0);
+				struct stat s;
+				if(p && stat(p,&s) == 0)
+					mars.todo += s.st_size;
+			}
+			r = r->next;
+		}
+		mars.progress();
+		r = u;
+	}
+
+	if(r && (r->next == NULL || !EQ(r->next->name,"GRIB")) )
+		return _request_to_fieldset(r);
+	while(r)
+	{
+		fieldset *w = _request_to_fieldset(r);
+		fieldset *x = merge_fieldsets(v,w);
+		free_fieldset(w);
+		free_fieldset(v);
+		v = x;
+		r = r->next;
+	}
+	return v;
+}
+
+static request *_make_one_request(fieldset *v)
+{
+	char *tmp = marstmp();
+	FILE *f = fopen(tmp,"w");
+	err e = 0;
+	int i;
+	request *r;
+
+	if(!f)
+	{
+		marslog(LOG_EROR|LOG_PERR,"%s",tmp);
+		return NULL;
+	}
+
+	for(i=0;i<v->count;i++)
+	{
+		field *g = v->fields[i];
+		set_field_state(g,packed_mem);
+		e = e?e:write_field(f,g);
+		release_field(g);
+	}
+
+	if(fclose(f))
+	{
+		marslog(LOG_EROR|LOG_PERR,"Error while writing to disk");
+		return NULL;
+	}
+	if(e) return NULL;
+
+	r = empty_request("GRIB");
+	set_value(r,"PATH","%s",tmp);
+	set_value(r,"TEMPORARY","1");
+	return r;
+}
+
+request *fieldset_to_request(fieldset *v)
+{
+	request *r = NULL;
+	request *first = NULL;
+	request *last = NULL;
+	char *path = NULL;
+	int i;
+	int n = 0;
+
+	if(save_fieldset(v))
+		return NULL;
+
+	/* no multi  grib yet... */
+#if 1
+	for(i=0;i<v->count;i++)
+	{
+		field *g = v->fields[i];
+		if(g->file->fname != path)
+		{
+			path = g->file->fname;
+			n++;
+		}
+	}
+	path = NULL;
+
+	if(n > 1)
+		return _make_one_request(v);
+
+#endif
+
+	for(i=0;i<v->count;i++)
+	{
+		field *g = v->fields[i];
+		if(g->file->fname != path)
+		{
+			path = g->file->fname;
+			r = empty_request("GRIB");
+			set_value(r,"PATH","%s",path);
+			set_value(r,"TEMPORARY","%d",g->file->temp);
+
+			/* If a requests is made, some other modules
+			   needs the data, so make it non-temporary*/
+
+			g->file->temp = false;
+
+			if(first == NULL) first = r;
+			if(last) last->next = r;
+			last = r;
+		}
+#ifdef LARGE_FILES_SUPPORT
+		add_value(r,"OFFSET","%lld",g->offset);
+#else
+		add_value(r,"OFFSET","%d",g->offset);
+#endif
+
+		add_value(r,"LENGTH","%d",g->length);
+	}
+
+
+	return first;
+
+}
+
+request *fieldset_to_mars_request(fieldset *fs)
+{
+	int i;
+	request* r = empty_request("GRIB");
+
+	if(!fs)
+		return 0;
+
+	for(i = 0; i < fs->count; i++)
+	{
+		request *s = field_to_request(fs->fields[i]);
+		reqmerge(r,s);
+	}
+
+	return r;
+}
+
+request* field_to_request(field* f)
+{
+	if(f->r == 0)
+	{
+		field_state state = f->shape;
+		request *r = empty_request(
+#ifdef COMEBACK
+				((f->ksec1 == NULL) || (f->ksec1[2] != mars.computeflg)) ? "GRIB" : "COMPUTED");
+#else
+		"GRIB");
+#endif
+
+		set_field_state(f,packed_mem);
+		handle_to_request(r,f->handle,NULL);
+		set_field_state(f,state);
+
+		f->r = new_field_request(r);
+		free_all_requests(r);
+	}
+	return f->r->r;
+}
diff --git a/src/libMars-ecregrid/field.h b/src/libMars-ecregrid/field.h
new file mode 100755
index 0000000..d1fea69
--- /dev/null
+++ b/src/libMars-ecregrid/field.h
@@ -0,0 +1,76 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include <grib_api.h>
+
+/* This should be c++ ... */
+
+typedef  enum field_state {
+	unknown,packed_mem,packed_file,expand_mem}
+field_state;
+
+typedef struct gribfile {
+	struct gribfile *next;
+	char   *fname;
+	int    refcnt;
+	boolean temp;
+	FILE    *file;
+} gribfile;
+
+typedef struct {
+	int      refcnt;
+	request* r;
+} field_request;
+
+/* One field .. */
+
+typedef struct field {
+
+	int     refcnt;
+
+	field_state shape;
+
+	grib_handle* handle;
+	double*      values;
+	size_t         value_count;
+
+
+	/* if on file */
+
+	file_offset   offset;
+	size_t        length;
+	gribfile      *file;
+
+	/* missing fields/values */
+
+	boolean   missing;         /* field is missing */
+	boolean   bitmap;          /* field has missing values (= bitmap) */
+
+	field_request *r;
+
+} field;
+
+typedef struct fieldset {
+
+	int     refcnt;
+
+	/* if fields */
+
+	int   max;
+	int   count;
+
+	field **fields;
+
+}fieldset;
+
+
+#define MISSING_VALUE(n)      ((n) == mars.grib_missing_value)
+#define MISSING_FIELD(f)      ((f)->missing)
+#define FIELD_HAS_BITMAP(f)   ((f)->bitmap)
diff --git a/src/libMars-ecregrid/filebase.c b/src/libMars-ecregrid/filebase.c
new file mode 100644
index 0000000..a42b362
--- /dev/null
+++ b/src/libMars-ecregrid/filebase.c
@@ -0,0 +1,297 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include <ctype.h>
+
+
+static void     file_init(void);
+static err      file_open(void *data,request*,request*,int);
+static err      file_close(void *data);
+static err      file_read(void *data,request *r,void *buffer,long *length);
+static err      file_write(void *data,request *r,void *buffer,long *length);
+static boolean  file_check(void *data,request *r);
+
+typedef struct filedata {
+	char    *root;
+	char    *tmplate;
+	char    *order;
+	request *w;
+	request *u;
+} filedata;
+
+static option opts[] = {
+	{"fileroot","FILE_ROOT",NULL,"/tmp/",
+	t_str,sizeof(char*),
+	OFFSET(filedata,root)},
+
+	{"template","TEMPLATE",NULL,
+
+	"(TYPE,%s).(STREAM,%s).(LEVTYPE,%s).(DOMAIN,%s)"
+	".(NUMBER,%04d).(_EXPVER,%04X).(_REPRES,%02s)"
+	"/(_AREA_N,%.6f).(_AREA_W,%.6f).(_AREA_S,%.6f).(_AREA_E,%.6f)."
+	"(_ROTATION_LAT,%.6f).(_ROTATION_LON,%.6f)."
+	"(_GRID_NS,%.6f).(_GRID_EW,%.6f).(_GAUSSIAN,%4d).(_TRUNCATION,%4d)/"
+	"(PARAM,%03d).(LEVELIST,%04d).(DATE,%06d).(TIME,%04d).(STEP,%04d)"
+
+	,
+
+	t_str,sizeof(char*),
+	OFFSET(filedata,tmplate)},
+
+	{"fileorder","FILE_ORDER",NULL,NULL, /* default : mars order */
+	t_str,sizeof(char*),
+	OFFSET(filedata,order)},
+};
+
+
+base_class _filebase = {
+
+	NULL,                      /* parent class */
+	"filebase",                /* name         */
+
+	false,                     /* inited       */
+
+	sizeof(filedata),           /* private size */
+	NUMBER(opts),              /* option count */
+	opts,                      /* options      */
+
+	file_init,                  /* init         */
+
+	file_open,                  /* open         */
+	file_close,                 /* close        */
+
+	file_read,                  /* read         */
+	file_write,                 /* write        */
+
+	NULL,                      /* control      */
+
+	file_check,                 /* check        */
+
+};
+
+
+base_class *filebase = &_filebase;
+
+static void file_init(void)
+{
+}
+
+static err  file_open(void *data,request *r,request *e,int mode)
+{
+	filedata *file = (filedata*)data;
+
+	if(file->order == NULL)
+		file->u     = unwind_one_request(r);
+	else
+	{
+		char **names;
+		int cnt = 1;
+		int i = 0;
+		char *p = file->order;
+		char *q;
+
+		while(*p) { if(*p == ',') cnt++; p++; }
+
+		names = NEW_ARRAY(char*,cnt);
+
+		p = file->order;
+		while(q = strtok(p,","))
+		{
+			names[i++] = q;
+			p = NULL;
+		}
+
+
+		file->u = custom_unwind_one_request(r,cnt,names);
+
+		for(i=1;i<cnt;i++)
+		{
+			p     = names[i];
+			p[-1] = 0;
+		}
+
+		FREE(names);
+
+	}
+	file->w     = file->u;
+	return NOERR;
+}
+
+static err  file_close(void *data)
+{
+	filedata *file = (filedata*)data;
+	free_all_requests(file->u);
+	return 0;
+}
+
+static err findpath(filedata *file,request *r,char *path)
+{
+	char *p = file->tmplate;	
+	int i = 0;
+	int state = 0;
+
+	char word[64];
+	char ident[64];
+	char buf[64];
+	const char *s,*q;
+	char c;
+
+	strcpy(path,file->root);
+
+	while(*p)
+	{
+		switch(*p)
+		{
+			case '(':
+				word[i]  = 0;
+				strcat(path,word);
+				state = 1;
+				i     = 0;
+				break;
+
+			case ',':
+				if(state != 1) return -9;
+				word[i]  = 0;
+				strcpy(ident,word);
+				state = 2;	
+				i = 0;
+				break;
+
+			case ')':
+				if(state != 2) return -9;
+				word[i] = 0;
+				state   = 0;	
+				i       = 0;
+
+				s = get_value(r,ident,0);
+				q = word;
+				c = 0;
+				while(*q) { if(isalpha(*q)) c = *q; q++; };
+
+				if(s)
+				{
+					if(strchr("diouxX",c))
+						sprintf(buf,word,atol(s));
+					else if(strchr("feEgG",c))
+						sprintf(buf,word,atof(s));
+					else if(strchr("s",c))
+						sprintf(buf,word,s);
+					else return -9;
+
+					strcat(path,buf);
+
+				} else {
+					/* ???? */
+					strcat(path,"x");
+				}
+
+				break;
+
+			default:
+				if(i>=sizeof(word)) return -9;
+				word[i++] = *p;
+				break;
+		}
+		p++;
+	}
+	word[i]  = 0;
+	strcat(path,word);
+	return 0;
+}
+
+static err  file_read(void *data,request *r,void *buffer,long *length)
+{
+	filedata *file = (filedata*)data;
+	char path[1024];
+	FILE *f;
+	err  ret = 0;
+
+	if(file->w == NULL)
+		return EOF;
+
+
+	if(r) reqcpy(r,file->w);
+
+	if(ret = findpath(file,file->w,path))
+	{
+		marslog(LOG_EROR,"Cannot parse %s",file->tmplate);
+		return ret;
+	}
+		
+	file->w = file->w->next;
+
+
+	f = fopen(path,"r");
+	if(f == NULL)
+	{
+		marslog(LOG_DBUG|LOG_PERR,"Cannot open %s",path);
+		return -2;
+	}
+
+
+	marslog(LOG_DBUG,"Open: %s",path);
+
+	ret = _readany(f,buffer,length);
+
+	fclose(f);
+	if(ret == EOF)
+	{
+		marslog(LOG_EROR|LOG_PERR,"EOF in file %s",path);
+		ret = -2;
+	}
+
+	return ret;
+}
+
+static err  file_write(void *data,request *r,void *buffer,long *length)
+{
+	filedata *file = (filedata*)data;
+	err ret = 0;
+	char path[1024];
+	const char *dir;
+	long len;
+	FILE *f;
+
+	if(ret = findpath(file,r,path))
+	{
+		marslog(LOG_EROR,"Cannot parse %s",file->tmplate);
+		return ret;
+	}
+
+
+	dir = dirname(path);
+	if(access(dir,F_OK)!=0)
+		mkdirp(dir,0777);
+
+	f = fopen(path,"w");
+	if(f == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot open %s",path);
+		return -2;
+	}
+
+
+	len = *length;
+	if((*length = fwrite(buffer,1,len,f)) != len)
+	{
+		ret = -2;
+		marslog(LOG_EROR|LOG_PERR,"Error writing to %s",path);
+	}
+
+	fclose(f);
+	return ret;
+
+}
+
+static boolean  file_check(void *data,request *r)
+{
+	return true;
+}
diff --git a/src/libMars-ecregrid/files.c b/src/libMars-ecregrid/files.c
new file mode 100644
index 0000000..f0f8606
--- /dev/null
+++ b/src/libMars-ecregrid/files.c
@@ -0,0 +1,27 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+char *marstmp(void)
+{
+	static char name[1024];
+	char *p;
+
+	p = tempnam(getenv("TMPDIR"),"mars");
+	strcpy(name,p);
+	free(p);
+
+	close(creat(name,0777));
+	return name;
+}
diff --git a/src/libMars-ecregrid/flatfilebase.c b/src/libMars-ecregrid/flatfilebase.c
new file mode 100755
index 0000000..64ab205
--- /dev/null
+++ b/src/libMars-ecregrid/flatfilebase.c
@@ -0,0 +1,215 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+typedef struct flatfiledata {
+
+	char	*source;
+	boolean	obs;
+	wind    *u_v;
+	hypercube *h;
+
+	FILE	*s;
+	void    *buffer;
+
+}flatfiledata;
+
+static void flatfile_init(void);
+static err  flatfile_open(void *data,request*,request*,int);
+static err  flatfile_close(void *data);
+static err  flatfile_read(void *data,request *r,void *buffer,long *length);
+static err  flatfile_write(void *data,request *r,void *buffer,long *length);
+
+
+static base_class _flatfilebase = {
+
+	NULL,                       /* parent class */
+	"flatfilebase",             /* name         */
+
+	false,                      /* inited       */
+
+	sizeof(flatfiledata),       /* private size */
+	0,                          /* option count */
+	NULL,                       /* options      */
+
+
+
+	flatfile_init,              /* init         */
+
+	flatfile_open,              /* open         */
+	flatfile_close,             /* close        */
+
+	flatfile_read,              /* read         */
+	flatfile_write,             /* write        */
+
+};
+
+/* the only 'public' variable ... */
+
+base_class *flatfilebase = &_flatfilebase;
+
+
+static void flatfile_init(void)
+{
+}
+
+static err flatfile_open(void *data,request *r,request *e,int mode)
+{
+	flatfiledata *g = (flatfiledata*)data;
+
+	g->obs = observation(r) || track(r);
+
+	if(g->source == NULL && r != NULL )
+		g->source = strcache(no_quotes(get_value(r,"SOURCE",0)));
+
+	g->h = new_hypercube_from_mars_request(r);
+
+	if(g->source != NULL)
+	{
+		marslog(LOG_DBUG,"Trying to open flatfile %s",g->source);
+
+		if(g->s = fopen(g->source,"r"))
+		{
+			marslog(LOG_INFO,"Opening file '%s'",g->source);
+			/* Modify disk I/O buffer, if application buffer allows for that */
+			if(mars.readdisk_buffer > 0)
+			{
+				if(g->buffer == NULL)
+					g->buffer = reserve_mem(mars.readdisk_buffer);
+				marslog(LOG_DBUG,"Setting I/O read buffer to %d bytes",mars.readdisk_buffer);
+				if(setvbuf(g->s,g->buffer,_IOFBF,mars.readdisk_buffer))
+					marslog(LOG_WARN|LOG_PERR,"setvbuf failed");
+			}
+		}
+		else
+			marslog(LOG_EROR|LOG_PERR,"Error opening file '%s'",g->source);
+	}
+
+	if(!g->obs)
+		g->u_v = wind_new(r,0);
+
+	return g->s == NULL ? -1 : 0;
+}
+
+static err  flatfile_close(void *data)
+{
+	flatfiledata *g = (flatfiledata*)data;
+	if(g->s) fclose(g->s);
+	strfree(g->source);
+
+	if(g->u_v) 
+		wind_free(g->u_v);
+	if(g->h)
+		free_hypercube(g->h);	
+
+	if(mars.readdisk_buffer)
+		if(g->buffer != NULL)
+		{
+			release_mem(g->buffer);
+			g->buffer = NULL;
+		}
+
+	return 0;
+}
+
+static err readmany(struct flatfiledata *data,char* buff,long* len)
+{
+	int  count = 0;
+	long a = *len;
+	long b = *len;
+	long n;
+	int pad = sizeof(long);		
+	int rnd;
+	file_offset pos = ftell(data->s);
+
+	err e = 0;
+	*len = 0;
+
+	n = a - pad;
+	while(a > 10240 && (e = _readbufr(data->s,buff,&n)) == 0)
+	{
+		a = n;	
+		rnd = ((a + pad - 1)/pad)*pad - a;
+		while(rnd-->0) buff[a++] = 0;
+
+		buff += a; /* should round to 8 ... */
+		b    -= a;
+		*len += a;
+		a     = b;
+		count++;
+		n     = a - pad;
+		pos   = ftell(data->s);
+	}
+
+	if(count == 0 && (e == -3 || e == -4)) *len = a;
+
+	if(count && (e == -1 || e == -3 || e == -4)) {
+		fseek(data->s,pos,SEEK_SET);
+		return 0;
+	}
+
+	return e;
+}
+
+/* Reads next field contained in request 'r' */
+static err next_field(flatfiledata *g, request *r,void *buffer,long *length)
+{
+	err  ret   = 0;
+	boolean match = false;
+	long len   = *length;
+	timer *fileread_time  = get_timer("Read from file","readfiletime",true);
+	
+	while((ret == 0) && !match)
+	{
+		*length = len;
+		ret = wind_next(g->u_v,g->s,buffer,length,fileread_time);
+		if(ret == NOERR)
+		{
+			request *u = empty_request(0);
+
+			grib_to_request(u,buffer,*length);
+
+			if(cube_order(g->h,u) != -1)
+				match = true;
+			free_all_requests(u);
+		}
+	}
+
+	return ret;
+}
+
+
+static err  flatfile_read(void *data,request *r,void *buffer,long *length)
+{
+	flatfiledata *g = (flatfiledata*)data;
+	err ret;
+
+	if(g->obs)
+		ret = _readany(g->s,buffer,(fortint *)length);
+	else
+		ret = next_field(g,r,buffer,length);
+
+	if(ret != 0 && ret != -3)
+		*length = 0;
+
+	if(ret == 0 && r)
+		if(g->obs)
+			bufr_to_request(r,buffer,*length);
+		else
+			grib_to_request(r,buffer,*length);
+
+	return ret;
+}
+
+static err  flatfile_write(void *data,request *r,void *buffer,long *length)
+{
+	return -1;
+}
diff --git a/src/libMars-ecregrid/free.c b/src/libMars-ecregrid/free.c
new file mode 100644
index 0000000..11bfe76
--- /dev/null
+++ b/src/libMars-ecregrid/free.c
@@ -0,0 +1,441 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+typedef struct _buffer {
+	char* ptr;
+	int  size;
+	int  pos;
+} _buffer;
+
+static int put_bytes(void *data, void* p, unsigned int len)
+{
+	_buffer *b = (_buffer*)data;
+	if(b->pos + len > b->size)
+	{
+		marslog(LOG_EROR,"free format buffer too small %d %d %d",b->size,b->pos,len);
+		return -1;
+	}
+	memcpy(b->ptr + b->pos,p, len);
+	b->pos += len;
+	return len;
+}
+
+int n = 0;
+
+static int get_bytes(void *data, void* p, unsigned int len)
+{
+	_buffer *b = (_buffer*)data;
+	if(b->pos + len > b->size)
+	{
+		marslog(LOG_EXIT,"free format buffer too small %d %d %d",b->size,b->pos,len);
+		return -1;
+	}
+	memcpy(p,b->ptr + b->pos, len);
+	 /* printf("read %d %02x\n",len,(int)*(char*)p);  */
+	b->pos += len;
+	return len;
+}
+
+static err put_request(mstream* s,const request *r)
+{
+	int n = 0;
+	parameter *p = r->params;
+
+	/* stream_write_start(s,"Request"); */
+	stream_write_string(s,r->name);
+
+	/* count */
+	
+	while(p) { n++; p = p->next; }
+	stream_write_int(s,n);
+
+	p = r->params;
+	while(p)
+	{
+		value *v = p->values;
+
+		if( p->values == NULL) 
+			marslog(LOG_EXIT,"Internal error: missing value for %s",p->name);
+
+		stream_write_string(s,p->name);
+
+		n = 0;
+		while(v) { n++; v = v->next; }
+		stream_write_int(s,n);
+
+		v = p->values;
+		while(v) 
+		{
+			stream_write_string(s,v->name);
+			v = v->next;
+		}
+		
+		p = p->next;
+	}
+
+	/* stream_write_end(s); */
+
+	return s->error;
+}
+
+static request* get_request(mstream* s)
+{
+    request* r = empty_request(stream_read_string(s));
+    int      n = stream_read_int(s);
+    int      i;
+	/* printf("getrequest %d %s\n",n,r->name); */
+
+    for(i = 0; i < n; i++)
+    {
+        const char* p = stream_read_string(s);
+        int m         = stream_read_int(s);
+        int j;
+        char *q = strcache(p);
+	/* printf("getrequest %s %d\n",p,m); */
+
+        for(j = 0; j < m; j++)
+            add_value(r,q,"%s",stream_read_string(s));
+
+        strfree(q);
+    }
+
+    return r;
+}
+
+err encode_free_format(void *buffer, long* length,
+	const request* r,const void* blob,long bloblen)
+{
+	mstream s = {0,};
+	_buffer b;
+
+	b.ptr  = (char*)buffer;
+	b.size = *length;
+	b.pos  = 0;
+
+	s.data  = &b;
+	s.write = put_bytes;
+
+	stream_write_int(&s,1);  /* number of requests */
+	put_request(&s,r);
+
+	stream_write_blob(&s,blob,bloblen); 
+
+	*length = b.pos;
+
+	return s.error;
+
+
+}
+
+request* decode_free_format_request(void *buffer, long length)
+{
+	mstream s = {0,};
+	_buffer b;
+
+	b.ptr  = (char*)buffer;
+	b.size = length;
+	b.pos  = 0;
+
+	s.data  = &b;
+	s.read = get_bytes;
+
+	n = stream_read_int(&s);  /* number of requests */
+	/* printf("n = %d\n",n); */
+	return get_request(&s);
+}
+
+long decode_free_format_blob(void *buffer, long length,void* blob,long max)
+{
+	int n;
+	mstream s = {0,};
+	_buffer b;
+	const void *data;
+	long len = 0;
+
+	b.ptr  = (char*)buffer;
+	b.size = length;
+	b.pos  = 0;
+
+	s.data  = &b;
+	s.read = get_bytes;
+
+	n = stream_read_int(&s);  /* number of requests */
+	while(n-- > 0)
+		free_all_requests(get_request(&s));
+
+	data = stream_read_blob(&s,&len);
+	if(len < 0)
+	{
+		marslog(LOG_EROR,"Read blob failed\n");
+		return -1;
+	}
+
+	if(len > max)
+	{
+		marslog(LOG_EROR,"Blob too large: %d > %d",len,max);
+		return -1;
+	}
+
+	memcpy(blob,data,len);
+	return len;
+
+}
+
+err encode_free_format_grib(
+	unsigned char* bin, unsigned char* bout,
+	fortint* length,fortint maxlen,
+	request *r, 
+	int marsclass, int type, int stream, char* expver)
+{
+	unsigned char *in  = bin;
+	unsigned char *out = bout;
+	long len;
+	fortint outlen;
+	unsigned char local[10240];
+	unsigned char newlocal[10240];
+	unsigned char ff[10240];
+	int locallen;
+	int newlocallen;
+	int n;
+	int i = 0;
+	boolean localdef = false;
+	int fixedlensec1 = 40;
+
+	unsigned char subcenter;
+
+	if(in[7] != 1) {
+		marslog(LOG_EROR,"encode_free_format_grib only supported for grib edition 1 (edition is %ld)", (long)in[7]);
+		return -2;
+	}
+
+	/* copy sec0 */
+	memcpy(out,in,8);
+	marslog(LOG_DBUG,"memcpy in -> out 8 bytes");
+	out += 8;
+	marslog(LOG_DBUG,"advance 'out' of 8 bytes");
+	in  += 8;
+	marslog(LOG_DBUG,"advance 'in' of 8 bytes");
+
+	/* sec 1 */
+	len = (in[0] << 16) | (in[1] << 8) | (in[2] << 0);
+	subcenter = in[25];
+	localdef = (len>40);
+	fixedlensec1 = localdef ? 40:len;
+
+	marslog(LOG_DBUG,"sec1 len: %d, fixedlensec1 %d",len,fixedlensec1);
+
+	memcpy(out,in,fixedlensec1);
+	out[25] = 98; /* sub-center ecmwf */
+	if(localdef)
+	{
+		locallen = len - 40;
+		if(locallen > sizeof(local))
+		{
+			marslog(LOG_EROR,"Original local definition too large %d, sec1 len: %d",locallen,len);
+			return -2;
+		}
+
+		marslog(LOG_DBUG,"Save original local extension");
+
+		/* save original local extension */
+		memcpy(local,in+40,locallen);
+	}
+	else
+	{
+		marslog(LOG_DBUG,"GRIB doesn't have local extension");
+		locallen = 0;
+	}
+	in  += locallen + fixedlensec1;
+	marslog(LOG_DBUG,"advance 'in' of %d bytes (%d + %d)",locallen + fixedlensec1,locallen,fixedlensec1);
+
+	/* put ours */
+	memset(newlocal,0,sizeof(newlocal));
+	n = 0;
+
+	newlocal[n++] = 191;
+	newlocal[n++] = marsclass; /* class */
+	newlocal[n++] = type; /* type */
+
+	newlocal[n++] = (stream >> 8) & 0xff; /* stream */
+	newlocal[n++] = (stream >> 0) & 0xff; /* stream */
+
+	newlocal[n++] = expver[0]; /* expver */
+	newlocal[n++] = expver[1]; /* expver */
+	newlocal[n++] = expver[2]; /* expver */
+	newlocal[n++] = expver[3]; /* expver */
+
+	newlocal[n++] = 0; /* spare */
+	newlocal[n++] = 0; /* spare */
+
+	newlocal[n++] = 1; /* version */
+	newlocal[n++] = 0; /* sub-version */
+
+	newlocal[n++] = subcenter; /* origial sub-center */
+	newlocal[n++] = 0; /* origial local def */
+
+	newlocal[n++] = 0; /* spare */
+	newlocal[n++] = 0; /* spare */
+	newlocal[n++] = 0; /* spare */
+
+
+	/* encode original local extension */
+	len = sizeof(newlocal) - n - 80;
+	if(encode_free_format(ff,&len,r,local,locallen))
+		marslog(LOG_EXIT,"Encode error");
+
+	newlocal[n++] = (len >> 8) & 0xff; /* len */
+	newlocal[n++] = (len >> 0) & 0xff; /* len */
+
+	marslog(LOG_DBUG,"copy original local def encoded, len = %d, pos = %d",len, out-bout + 40 + n); 
+
+	i = 0;
+	while(len-- > 0) newlocal[n++] = ff[i++];
+
+	/* add padding */
+
+	/* The section is padded with zeroes to make the overall */
+	/* length of the section = 60 + 80*M for some M > 0      */
+	while( ((40+n)<60+80) || (((n + 40) - 60) % 80) ) newlocal[n++] = 0;
+	marslog(LOG_DBUG,"pad newlocal extension with %d bytes", n - 40);
+
+	if(n > sizeof(newlocal))
+		marslog(LOG_EXIT,"Local extension buffer too small");
+
+	newlocallen = n;
+	marslog(LOG_DBUG,"newlocal extension length %d bytes",newlocallen);
+
+	memcpy(out+40,newlocal,newlocallen);
+	marslog(LOG_DBUG,"copy newlocal extension into 'out+40', %d bytes",newlocallen);
+
+	/* set length */
+	len = 40 + newlocallen;
+	out[0] = (len >> 16) & 0xff;
+	out[1] = (len >> 8) & 0xff;
+	out[2] = (len) & 0xff;
+	marslog(LOG_DBUG,"set grib section 1 length to %d bytes",len);
+
+	out += 40 + newlocallen;
+	marslog(LOG_DBUG,"advance 'out' of %d bytes",40 + newlocallen);
+
+	/* copy rest */
+
+	outlen = (*length) - locallen + newlocallen + (40 - fixedlensec1);;
+	if(outlen > maxlen)
+		marslog(LOG_EXIT,"Output buffer too small %d > %d",outlen,maxlen);
+	marslog(LOG_DBUG,"copy rest, outlen %d, input length %d",outlen,*length);
+
+	marslog(LOG_DBUG,"memcpy in -> out, %d bytes",*length - (in -bin));
+	memcpy(out,in,*length - (in -bin));
+	*length = outlen;
+
+	/* update length */
+	bout[4] = ( (*length) >> 16 ) & 0xff;
+	bout[5] = ( (*length) >>  8 ) & 0xff;
+	bout[6] = ( (*length) >>  0 ) & 0xff;
+	marslog(LOG_DBUG,"update full GRIB length to %d bytes",*length);
+
+	return 0;
+}
+
+err decode_free_format_grib(unsigned char* bin, unsigned char* bout,fortint* length,fortint maxlen,request *r)
+{
+	unsigned char *in  = bin;
+	unsigned char *out = bout;
+	long len = 0;
+	fortint outlen;
+	unsigned char local[10240];
+	int sec1len;
+
+	if(in[7] != 1) {
+		marslog(LOG_EROR,"decode_free_format_grib only supported for grib edition 1 (edition is %ld)", (long)in[7]);
+		return -2;
+	}
+
+	/* copy sec0 */
+	memcpy(out,in,8);
+	out += 8;
+	in  += 8;
+
+	/* sec 1 */
+	sec1len = (in[0] << 16) | (in[1] << 8) | (in[2] << 0);
+
+	if(in[25] != 98 && in[40] != 191)
+		marslog(LOG_EXIT,"Grib not local");
+
+	memcpy(out,in,40);
+
+	/* put sub-center back */
+	out[25] = in[53];
+
+	len = decode_free_format_blob(in+60,len-60,local,sizeof(local));
+	if(len < 0)
+		marslog(LOG_EXIT,"Cannot get local extension");
+
+	memcpy(out+40,local,len);
+
+	/* set length */
+	len = 40 + len;
+	out[0] = (len >> 16) & 0xff;
+	out[1] = (len >> 8) & 0xff;
+	out[2] = (len) & 0xff;
+
+	out += len;
+	in  += sec1len;
+
+	/* copy rest */
+
+	outlen = (*length) - sec1len + len;
+	if(outlen > maxlen)
+		marslog(LOG_EXIT,"Output buffer too small %d > %d",outlen,maxlen);
+
+	memcpy(out,in,*length - (in -bin));
+	*length = outlen;
+
+	/* update length */
+	bout[4] = ( (*length) >> 16 ) & 0xff;
+	bout[5] = ( (*length) >>  8 ) & 0xff;
+	bout[6] = ( (*length) >>  0 ) & 0xff;
+
+	return 0;
+}
+
+err original_grib(char* bin, fortint* length)
+{
+	unsigned char* in = (unsigned char*)bin;
+	static char *out = 0;
+	static int outlen = 0;
+	err e = 0;
+
+	in  += 8;
+
+	if(in[25] != 98 && in[40] != 191)	
+		return 0;
+
+	if(out == 0 || outlen < *length)
+	{
+		if(out) release_mem(out);
+		out = reserve_mem(*length);
+		outlen = *length;
+	}
+
+
+	e = decode_free_format_grib(
+		(unsigned char*) bin, 
+		(unsigned char*) out,
+		length,outlen,0);
+
+	if(e == 0)
+		memcpy(bin,out,*length);
+	
+	return e;
+
+}
diff --git a/src/libMars/globals.h b/src/libMars-ecregrid/globals.h
similarity index 100%
copy from src/libMars/globals.h
copy to src/libMars-ecregrid/globals.h
diff --git a/src/libMars-ecregrid/grib.c b/src/libMars-ecregrid/grib.c
new file mode 100755
index 0000000..467e638
--- /dev/null
+++ b/src/libMars-ecregrid/grib.c
@@ -0,0 +1,184 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include <stdio.h>
+#include <grib_api.h>
+#include <ctype.h>
+
+#include "mars.h"
+
+
+static void upper_case(char *p)
+{
+	while(*p)
+	{
+		if(islower(*p)) *p = toupper(*p);
+		p++;
+	}
+
+}
+
+err handle_to_request (request *r, grib_handle* g, mars_grib_index* idx )
+{
+	grib_keys_iterator* ks;
+	char name[80];
+	char value[80];
+	size_t len = sizeof(value);
+	long local;
+	int e;
+	const char *p;
+	const char *stream = get_value(r,"STREAM",0);
+	const char *number = get_value(r,"NUMBER",0);
+
+	if(!g) return -1;
+
+
+	/* printf("------------\n"); */
+	ks  = grib_keys_iterator_new(g,GRIB_KEYS_ITERATOR_ALL_KEYS,"mars");
+
+	while(grib_keys_iterator_next(ks))
+	{
+
+		strcpy(name,grib_keys_iterator_get_name(ks));
+
+		if(e = grib_keys_iterator_get_string(ks,value,&len))
+			marslog(LOG_EROR,"Cannot get %s as string %d (%s)",name,e,
+					grib_get_error_message(e));
+
+		/* printf("MARS -> %s ... %s\n",name,c); */
+
+		if(idx)
+		{
+			double d;
+			long l;
+			boolean d_ok, l_ok;
+			
+        	len = 1;
+        	d_ok = (grib_keys_iterator_get_double(ks,&d,&len) == 0);
+
+	        len = 1;
+    	    l_ok = (grib_keys_iterator_get_long(ks,&l,&len) == 0);
+
+			mars_grib_index_add(idx, name, 1, value, l_ok, l, d_ok, d);
+		}
+
+		upper_case(name);
+
+		if(!EQ(name,"EXPVER"))
+			upper_case(value);
+
+
+		set_value(r,name,"%s",value);
+		len = sizeof(value);
+	}
+
+	strcpy(name,"identifier");
+	len = sizeof(value);
+	if(e = grib_get_string(g,name,value,&len))
+	{
+		marslog(LOG_EXIT,"Cannot get %s as string %d (%s)",name,e,
+				grib_get_error_message(e));
+		mars.pseudogrib =  0;
+	}
+	else
+	{
+		mars.pseudogrib = (strcmp(value,"BUDG") == 0) || (strcmp(value,"TIDE") == 0);
+		if(mars.pseudogrib)
+		{
+			marslog(LOG_WARN,"Pseudo GRIB encountered (%s)",value);
+			if(stream == NULL)
+				stream = getenv("MARS_PSEUDOGRIB_STREAM");
+
+			if(stream != NULL)
+			{
+				marslog(LOG_DBUG,"Setting STREAM to '%s'",stream);
+				set_value(r,"STREAM","%s",stream);
+			}
+
+			if(number != NULL)
+			{
+				marslog(LOG_DBUG,"Setting NUMBER to '%s'",number);
+				set_value(r,"NUMBER","%s",number);
+			}
+		}
+		else {
+			if(strcmp(value,"GRIB") != 0)
+				marslog(LOG_EXIT,"Unexpected message type (%s)",value);
+			else
+			{
+				/* Get the edition */
+				long edition = 0;
+				if(e = grib_get_long(g,"edition",&edition))
+				{
+					marslog(LOG_EXIT,"Cannot get edition as long: %d (%s)",e,
+							grib_get_error_message(e));
+				}
+				set_value(r,"_EDITION","%ld",edition);
+			}
+		}
+	}
+
+	if(grib_get_long(g,"localDefinitionNumber",&local) ==  0 && local == 191) /* TODO: Not grib2 compatible, but speed-up process */
+	if(grib_get_size(g,"freeFormData",&len) ==  0 && len != 0)
+	{
+		char buffer[10240];
+		len = sizeof(buffer);
+		if(e = grib_get_bytes(g,"freeFormData",buffer,&len))
+			marslog(LOG_EROR,"Cannot get freeFormData %d (%s)",name,e,
+					grib_get_error_message(e));
+		else {
+			request* s = decode_free_format_request(buffer,len);
+
+			if(mars.debug)
+			{
+				marslog(LOG_DBUG,"Free format request:");
+				print_all_requests(s);
+			}
+			/* set_value(r,"PARAM","%d.%d",s1->parameter,s1->version); */
+
+			reset_language(mars_language());
+			mars.expflags = EXPAND_MARS | EXPAND_NO_DEFAULT;
+			s = expand_mars_request(s);
+			if( s == NULL)
+			{
+				/* if(mars.exit_on_failed_expand) */
+				{
+					e = -2;
+					marslog(LOG_EROR,"Failed to expand request");
+				}
+			}
+			mars.expflags = EXPAND_MARS;
+			reqcpy(r,s);
+			free_all_requests(s);
+
+		}
+
+	}
+
+	grib_keys_iterator_delete(ks);
+	return e;
+}
+
+err grib_to_request_index (request *r, char *buffer, long length, mars_grib_index* idx )
+{
+	err e;
+	grib_handle *g = grib_handle_new_from_message(0,buffer,length);
+	e = handle_to_request(r,g,idx);
+	grib_handle_delete(g);
+	return e;
+}
+
+err grib_to_request (request *r, char *buffer, long length)
+{
+	return grib_to_request_index(r,buffer,length,NULL);
+}
+
+
+
diff --git a/src/libMars-ecregrid/grib.h b/src/libMars-ecregrid/grib.h
new file mode 100755
index 0000000..6b54718
--- /dev/null
+++ b/src/libMars-ecregrid/grib.h
@@ -0,0 +1,872 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+/*
+ *
+ * These are array offsets associated with arrays generated from
+ * the MARS routine GRIBEX
+ *
+ * These are the limits required for return arrays of GRIBEX call
+ */
+
+#define     ISECTION_0  2
+#define     ISECTION_1  1024     /* beware of  for ocean data */
+#define		ISECTION_2	3000
+#define		ISECTION_3	3
+#define		ISECTION_4	512
+
+#define		RSECTION_2	512	
+#define		RSECTION_3	2
+#define		RSECTION_4	1
+
+/*
+ * This is the GRIBEX return code for Pseudo-grib data
+ */
+#define		PSEUDO_GRIB	-6
+
+/*
+#ifdef AIX
+#pragma options align=twobyte
+#endif
+*/
+
+typedef struct griboffset {
+	fortint section0;
+	fortint section1;
+	fortint section2;
+	fortint section3;
+	fortint section4;
+	fortint edition;
+} griboffset;
+
+#define MAX_LOCALDEF 20
+typedef struct multilocaldef_190 {
+	fortint     number;
+	fortint     length;
+} multilocaldef_190;
+
+typedef struct gribsec0 {
+	fortint		size;
+	fortint		edition;
+} gribsec0;
+
+typedef struct extra_spectra {
+	fortint     system;
+	fortint     method;
+	fortint     reference_date;
+	fortint     climate_from;
+	fortint     climate_to;
+	fortint     leg_base_date;
+	fortint     leg_base_time;
+	fortint     leg_number;
+} extra_spectra;
+
+typedef struct griblocsec1 {
+
+/*  37 */ 	fortint		ecmwf_local_id; 
+/*  38 */ 	fortint		mars_class;
+/*  39 */ 	fortint		mars_type;
+/*  40 */ 	fortint		mars_stream;
+/*  41 */ 	fortint		mars_expver;
+
+
+	union extrasec1 {
+
+	struct {
+
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		reference_date;
+
+	} hindcast;
+
+	struct {
+
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		clustering_method;
+/*  45 */ 	fortint		clustering_start_step;
+/*  46 */ 	fortint		clustering_end_step;
+/*  47 */ 	fortint		mars_north;
+/*  48 */ 	fortint		mars_west;
+/*  49 */ 	fortint		mars_south;
+/*  50 */ 	fortint		mars_east;
+/*  51 */ 	fortint		clustering_operational_forecast_number;
+/*  52 */ 	fortint		clustering_control_forecast_number;
+/*  53 */ 	fortint		clustering_total_forecast_number;
+/*  54 */ 	fortint		tube_reference;
+
+	} enfo;
+
+	struct {
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		ocean_coupling;
+/*  45 */ 	fortint		spare;
+/*  46 */ 	fortint		leg_base_date;
+/*  47 */ 	fortint		leg_base_time;
+/*  48 */ 	fortint		leg_number;
+/*  49 */ 	fortint		date_of_forecast_run; /* same as coupled_atmospheric_ocean.reference_date */
+/*  50 */ 	fortint		climate_date_from;
+/*  51 */ 	fortint		climate_date_to;
+	} variable_resolution;
+
+	struct {
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		threshold_decimal_scale_factor;
+/*  45 */ 	fortint		threshold_indicator;
+/*  46 */ 	fortint		lower_threshold;
+/*  47 */ 	fortint		upper_threshold;
+
+	} probability;
+
+	struct {
+/*  42 */ 	fortint		iteration; 
+/*  43 */ 	fortint		dummy1;
+/*  44 */ 	fortint		dummy2;
+/*  45 */ 	fortint		diagnostic;
+	} sens;
+
+	struct {
+/*  42 */ 	fortint		analysis_class; 
+/*  43 */ 	fortint		analysis_type;
+/*  44 */ 	fortint		analysis_stream;
+/*  45 */ 	fortint		analysis_version;
+/*  46 */ 	fortint		analysis_year;
+/*  47 */ 	fortint		analysis_month;
+/*  48 */ 	fortint		analysis_day;
+/*  49 */ 	fortint		analysis_hour;
+/*  50 */ 	fortint		analysis_minute;
+/*  51 */ 	fortint		analysis_century;
+/*  52 */ 	fortint		analysis_center;
+/*  53 */ 	fortint		analysis_subcenter;
+	} sst;
+
+	struct {
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		direction;
+/*  45 */ 	fortint		frequency;
+/*  46 */ 	fortint		n_directions;
+/*  47 */ 	fortint		n_frequencies;
+/*  48 */ 	fortint		d_scale_factor;
+/*  49 */ 	fortint		f_scale_factor;
+/*  .. */   fortint     extra[1];
+	} spectra;
+
+	struct {
+/*  42 */ 	fortint		type; 
+/*  43 */ 	fortint		function_code; 
+/*  44 */ 	fortint		spare; 
+	} image;
+
+	struct {
+/*  42 */ 	fortint		satellite_id;
+/*  43 */ 	fortint		instrument; 
+/*  44 */ 	fortint		channel; 
+/*  45 */   fortint     function_code;
+	} satellite_image; /* including pseudo-images */
+
+	struct {
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		channel;
+/*  45 */ 	fortint		frequency_factor;
+/*  46 */ 	fortint		nb_frequency;
+/*  47...   list of scaled frequencies */
+	} brigthness_temperature;
+
+	struct {
+
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		iterations; 
+/*  44 */ 	fortint		sv_computed; 
+/*  45 */ 	fortint		norm_initial_time; 
+/*  46 */ 	fortint		norm_final_time; 
+/*  47 */ 	fortint		ll_factor; 
+/*  48 */ 	fortint		mars_north; 
+/*  49 */ 	fortint		mars_west; 
+/*  50 */ 	fortint		mars_south; 
+/*  51 */ 	fortint		mars_east; 
+/*  52 */ 	fortint		accuracy; 
+/*  53 */ 	fortint		sv_evolved; 
+/*  54 */ 	fortint		ritz_1; 
+/*  55 */ 	fortint		ritz_2; 
+
+	} singular_vector;
+
+	struct {
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		system;
+/*  45 */ 	fortint		method;
+/*  46 */ 	fortint		space_unit;
+/*  47 */ 	fortint		vertical_coordinate;
+/*  48 */ 	fortint		horizontal_coordinates;
+/*  49 */ 	fortint		time_unit;
+/*  50 */ 	fortint		time_coordinate;
+/*  51 */ 	fortint		mixed_coordinate;
+/*  52 */ 	fortint		coordinate_1_locating;
+/*  53 */ 	fortint		coordinate_1_averaging;
+/*  54 */ 	fortint		coordinate_1_start_position;
+/*  55 */ 	fortint		coordinate_1_end_position;
+/*  56 */ 	fortint		coordinate_2_locating;
+/*  57 */ 	fortint		coordinate_2_averaging;
+/*  58 */ 	fortint		coordinate_2_start_position;
+/*  59 */ 	fortint		coordinate_2_end_position;
+/*  60 */ 	fortint		coordinate_3_axis;
+/*  61 */ 	fortint		coordinate_4_axis;
+/*  62 */ 	fortint		coordinate_4_start_grid_point;
+/*  63 */ 	fortint		coordinate_3_start_grid_point;
+/*  64 */ 	fortint		coordinate_4_end_grid_point;
+/*  65 */ 	fortint		coordinate_3_end_grid_point;
+/*  66 */ 	fortint		i_increment;
+/*  67 */ 	fortint		j_increment;
+/*  68 */ 	fortint		irregular_grid_coordinates;
+/*  69 */ 	fortint		staggered_grid;
+/*  70 */ 	fortint		further_information;
+/*  71 */ 	fortint		dimension_horizontal_coordinates;
+/*  72 */ 	fortint		dimension_mixed_coordinates;
+/*  73 */ 	fortint		dimension_grid_coordinates;
+/*  74 */ 	fortint		dimension_auxiliary_array;
+	} ocean;
+
+	struct {
+
+/*  42 */ 	fortint		mars_number;   /* 2 bytes */
+/*  43 */ 	fortint		extra;         /* 0 */
+/*  44 */ 	fortint		system;   
+/*  45 */ 	fortint		method;   
+
+	} seasonal;
+
+	struct {
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		system;
+/*  45 */ 	fortint		method;
+/*  46 */ 	fortint		verifying_month; /* yyyymm */
+/*  47 */ 	fortint		averaging_period;
+/*  48 */ 	fortint		forecast_month;
+	} seasonal_means;
+
+	struct {
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		system;
+/*  45 */ 	fortint		method;
+/*  46 */ 	fortint		forecast_period; /* dddddd day1-day2*/
+/*  47 */ 	fortint		averaging_period;
+	} monthly_forecast_means;
+
+	struct {
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		system;
+/*  45 */ 	fortint		method;
+/*  46 */ 	fortint		verifying_month; /* Seasonal Forecast: yyyymm or Monthly Forecast: day1-day2 */ 
+/*  47 */ 	fortint		averaging_period;
+/*  48 */ 	fortint		forecast_month;
+/*  49 */ 	fortint		reference_date; /* same as variable_resolution.date_of_forecast_run */
+/*  50 */ 	fortint		climateDateFrom;
+/*  51 */ 	fortint		climateDateTo;
+/*  52 */ 	fortint		spareProbabilities[10];
+	} coupled_atmospheric_ocean;
+
+	struct {
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		origin;
+/*  45 */ 	fortint		model;
+/*  46 */ 	fortint		count;
+	} multi_analysis;
+
+	struct {
+/*  42 */ 	fortint		component_index; 
+/*  43 */ 	fortint		number_of_components;
+/*  44 */ 	fortint		model_error_type;
+	} model_error;
+
+	struct {
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		version_major_number;
+/*  45 */ 	fortint		version_minor_number;
+/*  46 */ 	fortint		original_subcenter;
+/*  47 */ 	fortint		spare1;
+/*  48 */ 	fortint		spare2;
+/*  49 */ 	fortint		spare3;
+/*  50 */ 	fortint		spare4;
+/*  51 */ 	fortint		length;
+/*  -- */ 	char  		data[4096];
+	} free_format;
+
+	struct {
+/*  42 */ 	fortint		    mars_number; 
+/*  43 */ 	fortint		    mars_total;
+/*  44 */ 	fortint		    number;
+/*  45 */ 	multilocaldef_190 def[MAX_LOCALDEF];
+/*  .. */
+	} multi_definition_190;
+
+	struct {
+/*  42 */ 	fortint		    mars_number; 
+/*  43 */ 	fortint		    mars_total;
+/*  44 */ 	fortint		    number;
+/*  45 */ 	fortint		    localdef[2]; /* This is used as a pointer to memory */
+
+	} multi_definition;
+
+    struct {
+
+	/*  42 */   fortint     iteration;
+	/*  43 */   fortint     total_iterations;
+
+	} increments;
+
+	struct {
+
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		iterations; 
+/*  44 */ 	fortint		sv_computed; 
+/*  45 */ 	fortint		norm_initial_time; 
+/*  46 */ 	fortint		norm_final_time; 
+/*  47 */ 	fortint		ll_factor; 
+/*  48 */ 	fortint		mars_north; 
+/*  49 */ 	fortint		mars_west; 
+/*  50 */ 	fortint		mars_south; 
+/*  51 */ 	fortint		mars_east; 
+/*  52 */ 	fortint		accuracy; 
+/*  53 */ 	fortint		sv_evolved; 
+/*  54 */ 	fortint		ritz_1; 
+/*  55 */ 	fortint		ritz_2; 
+/*  56 */ 	fortint		optimisation_time;
+/*  57 */ 	fortint		lead_time;
+/*  58 */ 	fortint		domain;
+/*  59 */ 	fortint		method;
+/*  60 */ 	fortint		mars_total;
+/*  61 */ 	fortint		shape;
+/*  .. */
+	} sensitive_area_prediction ;
+
+    struct {
+
+/*  42 */ 	fortint		mars_number;  /* Zero */
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		scale_climate_weight;
+/*  45 */ 	fortint		weight;
+/*  46 */ 	fortint		first_month_climate_1;
+/*  47 */ 	fortint		last_month_climate_1;
+/*  48 */ 	fortint		first_month_climate_2;
+/*  49 */ 	fortint		last_month_climate_2;
+/*  50 */ 	fortint		order;
+/*  .. */ 	
+
+	} extreme_forecast_index;
+
+	struct {
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		forecast_month;
+/*  45 */ 	fortint		date_of_forecast_run; 
+/*  46 */ 	fortint		number_of_models;
+	} eurosip;
+
+	struct {
+/*  42 */ 	fortint		mars_number; 
+/*  43 */ 	fortint		mars_total;
+/*  44 */ 	fortint		EPS_base_date;
+/*  45 */ 	fortint		EPS_base_time;
+/*  46 */ 	fortint		representative_member_number;
+/*  47 */ 	fortint		members_in_cluster;
+/*  48 */ 	fortint		total_EPS_members;
+/*  52 */ 	fortint		spare[10];
+	} cosmo;
+
+	} u;
+
+} griblocsec1;
+
+
+typedef struct gribsec1 {
+/*   1 */ 	fortint		version;  
+/*   2 */ 	fortint		center;
+/*   3 */ 	fortint		generation;
+/*   4 */ 	fortint		grid_definition;
+/*   5 */ 	fortint		flags;
+/*   6 */ 	fortint		parameter;
+/*   7 */ 	fortint		level_type;
+/*   8 */ 	fortint		top_level;
+/*   9 */ 	fortint		bottom_level;
+/*  10 */ 	fortint		year;
+/*  11 */ 	fortint		month;
+/*  12 */ 	fortint		day;
+/*  13 */ 	fortint		hour;
+/*  14 */ 	fortint		minute;
+/*  15 */ 	fortint		time_unit;
+/*  16 */ 	fortint		p1;
+/*  17 */ 	fortint		p2;
+/*  18 */ 	fortint		range;
+/*  19 */ 	fortint		range_include;
+/*  20 */ 	fortint		range_missing;
+/*  21 */ 	fortint		century;
+/*  22 */ 	fortint		sub_centre;
+/*  23 */ 	fortint		scale_factor;
+/*  24 */ 	fortint		local_use;
+/*  25 */ 	fortint		reserved_25;
+/*  26 */ 	fortint		reserved_26;
+/*  27 */ 	fortint		reserved_27;
+/*  28 */ 	fortint		reserved_28;
+/*  29 */ 	fortint		reserved_29;
+/*  30 */ 	fortint		reserved_30;
+/*  31 */ 	fortint		reserved_31;
+/*  32 */ 	fortint		reserved_32;
+/*  33 */ 	fortint		reserved_33;
+/*  34 */ 	fortint		reserved_34;
+/*  35 */ 	fortint		reserved_35;
+/*  36 */ 	fortint		reserved_36;
+
+/*  37...*/ griblocsec1 local;
+
+	fortint		stuff[ISECTION_1];
+
+} gribsec1;
+
+/* To point to any group of atributes which are not
+   at fixed offset on section 1 */
+typedef struct gribsec1_extra {
+
+union {
+
+	struct {
+/* n   */   fortint     count;		
+/* n+1 */   fortint     base_date;		
+/* n+2 */   fortint     base_time;		
+/* n+3 */   fortint     step;		
+	} ocean;
+
+} u ;
+
+} gribsec1_extra;
+
+typedef struct stepRange {
+	long from;
+	long to;
+} stepRange;
+
+#define   	GRIB_ENSEMBLE_FORECAST       1
+#define   	GRIB_CLUSTER_MEANS           2
+#define    	GRIB_SATELLITE_IMAGE         3
+#define    	GRIB_OCEAN_MODEL_DATA        4
+#define    	GRIB_FORECAST_PROBABILITY    5
+#define    	GRIB_SURFACE_TEMPERATURE     6
+#define    	GRIB_SENSITIVITY             7
+#define    	GRIB_REANALYSIS              8
+#define    	GRIB_SINGULAR_VECTOR         9
+#define    	GRIB_TUBE   			    10
+#define    	GRIB_SST   			        11
+#define    	GRIB_WAVE2D   			    13
+#define    	GRIB_BRIGHTNESS_TEMPERATURE 14
+#define    	GRIB_SEASONAL_FORECAST      15
+#define    	GRIB_SEASONAL_FORECAST_MEAN 16
+#define    	GRIB_SEA_ICE_TEMPERATURE    17
+#define    	GRIB_MULTI_ANALYSIS         18
+#define    	GRIB_EFI                    19
+#define    	GRIB_4V_INCREMENTS          20
+#define    	GRIB_SENSITIVE_AREA_PREDICTION          21
+#define    	GRIB_MULTI_DEFINITION_190   190
+#define    	GRIB_FREE_FORMAT            191
+#define    	GRIB_MULTI_DEFINITION       192
+
+#define     GRIB_COUPLED_ATMOSPHERIC_OCEAN        23
+#define     GRIB_NEW_SATELLITE_IMAGE              24
+#define     GRIB_MODEL_ERROR                      25
+
+#define   	GRIB_HINDCAST                26
+#define     	GRIB_VARIABLE_RESOLUTION_OBSOLETE     27
+#define   	GRIB_COSMO                      28
+#define   	GRIB_COSMO_CLUSTER_INFORMATION  29
+#define     	GRIB_VARIABLE_RESOLUTION     30
+#define    	GRIB_EUROSIP                31
+#define    	GRIB_EXTERNAL_DATA           50
+#define   	GRIB_SREPS 				244
+
+#define		GRIB_CLASS_OD			1
+#define		GRIB_CLASS_RD			2
+#define		GRIB_CLASS_ER			3
+#define		GRIB_CLASS_CS			4
+#define		GRIB_CLASS_ERA_40		5
+#define		GRIB_CLASS_DEMETER		6
+#define		GRIB_CLASS_PROVOST		7
+#define		GRIB_CLASS_ELDAS  		8
+#define		GRIB_CLASS_TOST   		9
+#define		GRIB_CLASS_COSMO   		10
+#define		GRIB_CLASS_ENSEMBLES 	11
+#define		GRIB_CLASS_TIGGE     	12
+#define		GRIB_CLASS_MERSEA 	    13
+#define		GRIB_CLASS_ERA_INTERIM  14
+#define		GRIB_CLASS_SREPS   		15
+#define		GRIB_CLASS_DTS   		16
+#define		GRIB_CLASS_LACE   		17
+#define		GRIB_CLASS_YOTC   		18
+#define		GRIB_CLASS_MS			121
+
+#define		GRIB_CLASS_TEST		    99
+#define		GRIB_CLASS_METAPS		199
+
+#define     GRIB_STREAM_OPER     1025
+#define 	GRIB_STREAM_SHORT_CUT_OFF        1026
+#define 	GRIB_STREAM_SHORT_CUT_OFF_WAVE   1027
+#define 	GRIB_STREAM_DELAYED_CUT_OFF      1028
+#define 	GRIB_STREAM_DELAYED_CUT_OFF_WAVE 1029
+#define     GRIB_STREAM_ENFO     1035
+#define     GRIB_STREAM_ENFO_OVERLAP     1034
+#define     GRIB_STREAM_TOGA     1041
+#define     GRIB_STREAM_SUPD     1044
+#define     GRIB_STREAM_WAVE     1045
+#define     GRIB_STREAM_OCEA     1046
+#define     GRIB_STREAM_FGGE     1047
+#define     GRIB_STREAM_SENS     1036
+#define     GRIB_STREAM_MNTH     1043
+#define     GRIB_STREAM_WAMO     1080
+#define     GRIB_STREAM_WAEF     1081
+#define     GRIB_STREAM_WASF     1082
+#define     GRIB_STREAM_WAEF_OVERLAP     1086
+#define     GRIB_STREAM_WAVE_STANDALONE_MODEL     1087
+#define     GRIB_STREAM_EGRR     1050  /* Bracknell */
+#define     GRIB_STREAM_KWBC     1051  /* Washington */
+#define     GRIB_STREAM_EDZW     1052  /* Offenbach */
+#define     GRIB_STREAM_LFPW     1053  /* Paris or Toulouse */
+#define     GRIB_STREAM_RJTD     1054  /* Tokyo */
+#define     GRIB_STREAM_CWAO     1055  /* Montreal */
+#define     GRIB_STREAM_AMMC     1056  /* Melbourne */
+#define     GRIB_STREAM_CNRM     2231
+#define     GRIB_STREAM_MPIC     2232
+#define     GRIB_STREAM_UKMO     2233
+#define     GRIB_STREAM_CHER     1042
+
+
+/* Hindcasts */
+#define     GRIB_STREAM_OPER_HINDCAST   1024
+#define     GRIB_STREAM_ENFO_HINDCAST_OBSOLETE   1039
+#define     GRIB_STREAM_WAEF_HINDCAST_OBSOLETE   1084
+#define     GRIB_STREAM_WAVE_HINDCAST   1085
+
+#define GRIB_STREAM_ENFH_HINDCAST 1033 
+#define GRIB_STREAM_ENWH_HINDCAST 1079 
+#define GRIB_STREAM_EFHO_HINDCAST 1032 
+#define GRIB_STREAM_EWHO_HINDCAST 1078 
+#define GRIB_STREAM_ENSEMBLE_HINDCAST_STATISTICS 1040 
+#define GRIB_STREAM_WAVE_ENSEMBLE_HINDCAST_STATISTICS 1077 
+
+
+#define     GRIB_STREAM_MV       1070
+#define     GRIB_STREAM_MODA     1071
+#define     GRIB_STREAM_MOR      1072
+#define     GRIB_STREAM_MVR      1073
+#define     GRIB_STREAM_MSDA     1074
+#define     GRIB_STREAM_MDFA     1075
+#define     GRIB_STREAM_DACL     1076
+#define     GRIB_STREAM_DACW     1089
+
+#define     GRIB_STREAM_SEAS             1090
+#define     GRIB_STREAM_SEAS_MM          1091
+#define     GRIB_STREAM_SEAS_MMA         1097
+#define     GRIB_STREAM_WAVE_SEAS_MM     1092
+
+#define     GRIB_STREAM_MONTHLY_FC          1093
+#define     GRIB_STREAM_MONTHLY_FC_MEANS    1094
+#define     GRIB_STREAM_WV_MONTHLY_FC       1095
+#define     GRIB_STREAM_WV_MONTHLY_FC_MEANS 1096
+
+#define     GRIB_STREAM_MAED 1037
+#define     GRIB_STREAM_AMAP 1038
+#define     GRIB_STREAM_MAWV 1083
+
+#define     GRIB_STREAM_SENS_AREA_PREDICTION 1110
+
+/* Definition of new Monthly Forecasts */
+#define     GRIB_STREAM_NEW_MONTHLY_FORECAST                       1200
+#define     GRIB_STREAM_NEW_MONTHLY_FORECAST_HINDCAST              1201
+#define     GRIB_STREAM_NEW_MONTHLY_FORECAST_ANOMALY               1202
+
+#define     GRIB_STREAM_NEW_MONTHLY_FORECAST_WAVE                  1203
+#define     GRIB_STREAM_NEW_MONTHLY_FORECAST_HINDCAST_WAVE         1204
+#define     GRIB_STREAM_NEW_MONTHLY_FORECAST_ANOMALY_WAVE          1205
+
+#define     GRIB_STREAM_NEW_MONTHLY_FORECAST_MEANS                 1206
+#define     GRIB_STREAM_NEW_MONTHLY_FORECAST_HINDCAST_MEANS        1207
+#define     GRIB_STREAM_NEW_MONTHLY_FORECAST_ANOMALY_MEANS         1208
+
+#define     GRIB_STREAM_NEW_MONTHLY_FORECAST_WAVE_MEANS            1209
+#define     GRIB_STREAM_NEW_MONTHLY_FORECAST_HINDCAST_WAVE_MEANS   1210
+#define     GRIB_STREAM_NEW_MONTHLY_FORECAST_ANOMALY_WAVE_MEANS    1211
+
+/* Definition of Multi-model Seasonal Forecasts */
+#define     GRIB_STREAM_MULTIMODEL_SEASONAL_FORECAST                 1220
+#define     GRIB_STREAM_MULTIMODEL_SEASONAL_FORECAST_MEANS           1221
+#define     GRIB_STREAM_MULTIMODEL_SEASONAL_FORECAST_WAVE            1222
+#define     GRIB_STREAM_MULTIMODEL_SEASONAL_FORECAST_WAVE_MEANS      1223
+#define     GRIB_STREAM_MULTIMODEL_SEASONAL_FORECAST_MEAN_ANOMALIES  1224
+
+/* Definition of EUROSIP */
+#define     GRIB_STREAM_EUROSIP_MONTHLY_MEANS                        1240
+#define     GRIB_STREAM_EUROSIP_HINDCAST_MONTHLY_MEANS               1241
+
+/* Definition of Multi-model Multi-Annual Forecasts */
+#define     GRIB_STREAM_MULTIMODEL_MULTIANNUAL_FORECAST              1230
+#define     GRIB_STREAM_MULTIMODEL_MULTIANNUAL_FORECAST_MEANS        1231
+#define     GRIB_STREAM_MULTIMODEL_MULTIANNUAL_FORECAST_WAVE         1232
+#define     GRIB_STREAM_MULTIMODEL_MULTIANNUAL_FORECAST_WAVE_MEANS   1233
+
+/* Definition of Ensemble Data Assimilation */
+#define     GRIB_STREAM_ENSEMBLE_DATA_ASSIMILATION                   1030
+#define     GRIB_STREAM_ENSEMBLE_WAVE_DATA_ASSIMILATION              1088
+
+
+typedef struct gribsec2_ll {
+/*   1 */ 	fortint	data_rep;
+/*   2 */ 	fortint	points_parallel;
+/*   3 */ 	fortint	points_meridian;
+/*   4 */ 	fortint	limit_north;
+/*   5 */ 	fortint	limit_west;
+/*   6 */ 	fortint	resolution;
+/*   7 */ 	fortint	limit_south;
+/*   8 */ 	fortint	limit_east;
+/*   9 */ 	fortint	grid_ew;
+/*  10 */ 	fortint	grid_ns;
+/*  11 */ 	fortint	scan_mode;
+/*  12 */ 	fortint	vertical;
+/*  13 */ 	fortint	rotation_lat;
+/*  14 */ 	fortint	rotation_lon;
+/*  15 */ 	fortint	stretch_lat;
+/*  16 */ 	fortint	stretch_lon;
+/*  17 */ 	fortint	quasi_regular;
+/*  18 */ 	fortint	stuff[ISECTION_2];
+}gribsec2_ll;
+
+typedef struct gribsec2_og {
+/*   1 */ 	fortint	data_rep;
+/*   2 */ 	fortint	points_parallel;
+/*   3 */ 	fortint	points_meridian;
+/*   4 */ 	fortint	reserved_1;
+/*   5 */ 	fortint	reserved_2;
+/*   6 */ 	fortint	reserved_3;
+/*   7 */ 	fortint	reserved_4;
+/*   8 */ 	fortint	reserved_5;
+/*   9 */ 	fortint	reserved_6;
+/*  10 */ 	fortint	reserved_7;
+/*  11 */ 	fortint	scan_mode;
+/*  12 */ 	fortint	reserved_8;
+/*  13 */ 	fortint	reserved_9;
+/*  14 */ 	fortint	reserved_10;
+/*  15 */ 	fortint	reserved_11;
+/*  16 */ 	fortint	reserved_12;
+/*  17 */ 	fortint	reserved_13;
+/*  18 */ 	fortint	stuff[ISECTION_2];
+}gribsec2_og;
+
+typedef struct gribsec2_gg {
+/*   1 */ 	fortint	data_rep;
+/*   2 */ 	fortint	points_parallel;
+/*   3 */ 	fortint	points_meridian;
+/*   4 */ 	fortint	limit_north;
+/*   5 */ 	fortint	limit_west;
+/*   6 */ 	fortint	resolution;
+/*   7 */ 	fortint	limit_south;
+/*   8 */ 	fortint	limit_east;
+/*   9 */ 	fortint	grid_ew;
+/*  10 */ 	fortint	gauss_trunc;
+/*  11 */ 	fortint	scan_mode;
+/*  12 */ 	fortint	vertical;
+/*  13 */ 	fortint	rotation_lat;
+/*  14 */ 	fortint	rotation_lon;
+/*  15 */ 	fortint	stretch_lat;
+/*  16 */ 	fortint	stretch_lon;
+/*  17 */ 	fortint	quasi_regular;
+/*  18 */ 	fortint	earth_flag;
+/*  19 */ 	fortint	components_flags;
+/*  20 */ 	fortint	reserved_20;
+/*  21 */ 	fortint	reserved_21;
+/*  22 */ 	fortint	reserved_22;
+/*  23 */ 	fortint	stuff[ISECTION_2];
+}gribsec2_gg;
+
+typedef struct gribsec2_sh {
+/*   1 */ 	fortint	data_rep;
+/*   2 */ 	fortint	j_resolution;
+/*   3 */ 	fortint	k_resolution;
+/*   4 */ 	fortint	m_resolution;
+/*   5 */ 	fortint	rep_type;
+/*   6 */ 	fortint	rep_mode;
+/*   7 */ 	fortint	reserved_1;
+/*   8 */ 	fortint	reserved_2;
+/*   9 */ 	fortint	reserved_3;
+/*  10 */ 	fortint	reserved_4;
+/*  11 */ 	fortint	reserved_5;
+/*  12 */ 	fortint	reserved_6;
+/*  13 */ 	fortint	reserved_7;
+/*  14 */ 	fortint	rotation_lat;
+/*  15 */ 	fortint	rotation_lon;
+/*  16 */ 	fortint	stuff[ISECTION_2];
+}gribsec2_sh;
+
+typedef struct gribsec2_sv {
+/*   1 */ 	fortint	data_rep;
+/*   2 */ 	fortint	nx;
+/*   3 */ 	fortint	ny;
+/*   4 */ 	fortint	latitude_point;
+/*   5 */ 	fortint	longitude_point;
+/*   6 */ 	fortint	resolution;
+/*   7 */ 	fortint	x_diameter;
+/*   8 */ 	fortint	y_diameter;
+/*   9 */ 	fortint	x_coordinate;
+/*  10 */ 	fortint	y_coordinate;
+/*  11 */ 	fortint	scan_mode;
+/*  12 */ 	fortint	vertical_coordinates;
+/*  13 */ 	fortint	orientation;
+/*  14 */ 	fortint	altitude;
+/*  15 */ 	fortint	x_origin;
+/*  16 */ 	fortint	y_origin;
+/*  17 */ 	fortint	stuff[ISECTION_2];
+}gribsec2_sv;
+
+typedef union gribsec2 {
+	gribsec2_ll	ll;
+	gribsec2_og	og;
+	gribsec2_gg	gg;
+	gribsec2_sh	sh;
+	gribsec2_sv	sv;
+} gribsec2;
+
+/*
+ * These are the offset of the data representation type in GRIB sections 2
+ * plus the values used for further analysis
+ */
+
+
+#define     GRIB_LAT_LONG			0
+#define     GRIB_ROTATED_LAT_LONG	10
+#define     GRIB_OCEAN_GRID         192
+#define     GRIB_GAUSSIAN			4
+#define     GRIB_ROTATED_GAUSSIAN	14
+#define     GRIB_STRETCHED_GAUSSIAN	24
+#define     GRIB_SPHERICAL_HARMONIC	50
+#define     GRIB_ROTATED_SPHERICAL_HARMONIC	60
+#define     GRIB_STRETCHED_SPHERICAL_HARMONIC 70
+#define     GRIB_SPACE_VIEW         90
+
+/*
+ *	The first value is the scale factor for the degree values stored in grib
+ *
+ *	GRIB_DEGREE = int (REAL_DEGREE * GRIB_FACTOR)
+ *
+ *	The second factor is the additional factor used for calculating the
+ *	correct degree values. This has to be used for 640 by 320 grids
+ */
+
+#define		GRIB_FACTOR				1000
+#define		GRIB_EXTRA_FACTOR		10
+#define		WORK_FACTOR				(GRIB_FACTOR*GRIB_EXTRA_FACTOR)
+#define		GLOBE360				(360*WORK_FACTOR)
+#define		POLE90					(90*GRIB_FACTOR)
+
+/*
+ * Definitions for Gaussian grids
+ *
+ * Values 1 through 8 are identical to latitude/longitude grids
+ */
+
+#define     GRIB_QUASI_REGULAR		16
+
+/*
+ * These are the GRIB_LEVEL_TYPE_1 values in use at ECMWF
+ */
+
+#define	  GRIB_SURFACE                       1
+#define	  GRIB_CLOUD_BASE                    2
+#define	  GRIB_CLOUD_TOP                     3
+#define	  GRIB_ISO_0                         4
+
+#define   GRIB_TOP_OF_ATMOSPHERE             8
+#define	  GRIB_PRESSURE_LEVEL                100
+#define	  GRIB_ABOVE_1HPA                    210
+#define	  GRIB_MEAN_SEA_LEVEL                102
+#define	  GRIB_HEIGHT_ABOVE_GROUND           105
+#define	  GRIB_SIGMA_LEVEL                   108
+#define	  GRIB_MODEL_LEVEL                   109
+#define	  GRIB_MODEL_LEVEL_LAYER             110
+#define	  GRIB_DEPTH_BELOW_LAND              111
+#define	  GRIB_SUB_SURFACE                   112
+#define	  GRIB_POTENTIAL_TEMPERATURE         113
+#define	  GRIB_POTENTIAL_VORTICITY           117
+#define	  GRIB_DEPTH_BELOW_SEA_LEVEL         160
+#define	  GRIB_ATMOSPHERE_AS_SINGLE_LAYER    200
+
+#define	  GRIB_OCEAN_WAVE_LEVEL              211
+
+#define	  GRIB_WMO_TABLE_1                     1
+#define	  GRIB_WMO_TABLE_2                     2
+#define	  GRIB_WMO_TABLE_3                     3
+#define	  GRIB_ATMOSPHERE_TABLE              128
+#define	  GRIB_ATMOSPHERE_TABLE_GRADIENTS    129
+#define	  GRIB_ASTEX_TABLE                   130
+#define	  GRIB_PROBABILITY_TABLE             131
+#define	  GRIB_EFI_TABLE                     132
+#define	  GRIB_WAVE_TABLE                    140
+#define	  GRIB_PRELIMINARY_OCEAN_TABLE       150
+#define	  GRIB_OPERATIONAL_OCEAN_TABLE       151
+#define	  GRIB_REANALYSIS_STATISTICS_TABLE   160
+#define	  GRIB_VERTICAL_INTEGRALS_TABLE      162
+#define	  GRIB_SEASONAL_FORECAST_TABLE       170
+#define	  GRIB_CLIMATE_SIMULATION_TABLE      180
+#define	  GRIB_DEMETER_TABLE                 190
+#define	  GRIB_INCREMENTS_TABLE              200
+
+/* Tables for DWD and Italy */
+#define	  GRIB_TABLE_201                     201
+#define	  GRIB_TABLE_202                     202
+
+#define	  GRIB_MODEL_OD                      40
+#define	  GRIB_MODEL_WAVE_G                  104
+#define	  GRIB_MODEL_WAVE_M                  204
+
+#define	  GRIB_DEPTH                         2 
+#define	  GRIB_LONGITUDE                     3  
+#define	  GRIB_LATITUDE                      4
+
+
+/* WMO Centre identifier */
+
+#define WMO_CENTRE_ID_ECMF   98 /* ecmwf */
+#define WMO_CENTRE_ID_AMMC    1 /* melbourne */
+#define WMO_CENTRE_ID_KWBC    7 /* washington */
+#define WMO_CENTRE_ID_CWAO   54 /* montreal */
+#define WMO_CENTRE_ID_PARIS  84 /* toulouse */
+#define WMO_CENTRE_ID_LFPW   85 /* toulouse */
+#define WMO_CENTRE_ID_EGRR   74 /* bracknell */
+#define WMO_CENTRE_ID_EDZW   78 /* offenbach */
+#define WMO_CENTRE_ID_RJTD   34 /* tokyo */
+#define WMO_CENTRE_ID_FNMO   58 /* Fleet Numerical Meteorology and Oceanography Centre */
+#define WMO_CENTRE_ID_RSMC   80 /* roma */
+#define WMO_CENTRE_ID_EHDB   99   /* De Bilt */
+#define WMO_CENTRE_ID_LEMM   214  /* Spanish INM */ 
+#define WMO_CENTRE_ID_LACE   224  /* LACE or Vienna? */ 
+#define WMO_CENTRE_ID_INGV   235  /* INGV-Bologna */
+#define WMO_CENTRE_ID_CRFC   239  /* CERFACS */
+#define WMO_CENTRE_ID_VUWIEN 244  /* University of Veterinary Medicine Vienna */
+#define WMO_CENTRE_ID_KNMI   245  /* KNMI */   /* THIS IS WRONG. SHOULD BE 99, De Bilt, CCCC=EHDB */
+#define WMO_CENTRE_ID_IFMK   246  /* Institut fuer Meererskunde-Kiel */
+
+#ifdef AIX
+#pragma options align=reset
+#endif
+
diff --git a/src/libMars-ecregrid/gribbase.c b/src/libMars-ecregrid/gribbase.c
new file mode 100755
index 0000000..243ae78
--- /dev/null
+++ b/src/libMars-ecregrid/gribbase.c
@@ -0,0 +1,132 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+#ifndef CRAY
+#define PBGRIB	pbgrib_
+#endif
+
+typedef struct gribdata {
+
+	boolean    obs;
+	char       *gname;
+	char       *bname;
+	FILE       *f;
+
+}gribdata;
+
+static void grib_init(void);
+static err  grib_open(void *data,request*,request*,int);
+static err  grib_close(void *data);
+static err  grib_read(void *data,request *r,void *buffer,long *length);
+static err  grib_write(void *data,request *r,void *buffer,long *length);
+
+
+static option opts[] = {
+	{"grib",NULL,"-grib",NULL,t_str,sizeof(char*),OFFSET(gribdata,gname)},
+	{"bufr",NULL,"-bufr",NULL,t_str,sizeof(char*),OFFSET(gribdata,bname)},
+};
+
+static base_class _gribbase = {
+
+	NULL,                       /* parent class */
+	"gribbase",                 /* name         */
+
+	false,                      /* inited       */
+
+	sizeof(gribdata),           /* private size */
+	NUMBER(opts),               /* option count */
+	opts,                       /* options      */
+
+
+	grib_init,                  /* init         */
+
+	grib_open,                  /* open         */
+	grib_close,                 /* close        */
+
+	grib_read,                  /* read         */
+	grib_write,                 /* write        */
+
+};
+
+/* the only 'public' variable ... */
+
+base_class *gribbase = &_gribbase;
+
+
+static void grib_init(void)
+{
+}
+
+static err  grib_open(void *data,request *r,request *e,int mode)
+{
+	gribdata *g = (gribdata*)data;
+
+
+	if(g->gname == NULL && r != NULL )
+		g->gname = strcache(no_quotes(get_value(r,"SOURCE",0)));
+
+	if(g->gname != NULL)
+	{
+		marslog(LOG_DBUG,"Trying to open GRIB %s",g->gname);
+
+		g->f    = fopen(g->gname,mode == WRITE_MODE ? "w" : "r");
+		g->obs = false;
+		marslog(LOG_DBUG|LOG_PERR,"File is %x",g->f);
+	}
+	if(!g->f && g->bname)
+	{
+		marslog(LOG_DBUG,"Trying to open BUFR %s",g->bname);
+		g->f    = fopen(g->bname,mode == WRITE_MODE ? "w" : "r");
+		g->obs = true;
+	}
+
+	if(g->f == NULL)
+		marslog(LOG_EROR|LOG_PERR,"cannot open %s",g->gname?g->gname:g->bname);
+
+	return g->f == NULL ? -1 : 0;
+}
+
+static err  grib_close(void *data)
+{
+	gribdata *g = (gribdata*)data;
+	if(g->f) fclose(g->f);
+	strfree(g->gname);
+	return 0;
+}
+
+static err  grib_read(void *data,request *r,void *buffer,long *length)
+{
+	gribdata *g = (gribdata*)data;
+	err ret;
+
+	if(g->obs)
+		ret = _readbufr(g->f,buffer,length);
+	else
+		ret = _readany(g->f,buffer,length);
+
+	if(ret != 0 && ret != -3)
+		*length = 0;
+
+	if(ret == 0 && r)
+		if(g->obs)
+			bufr_to_request(r,buffer,*length);
+		else
+			grib_to_request(r,buffer,*length);
+
+	return ret;
+}
+
+static err  grib_write(void *data,request *r,void *buffer,long *length)
+{
+	marslog(LOG_WARN,"now in grib_write. Sorry not implemeted");
+	return EOF;
+}
diff --git a/src/libMars-ecregrid/guess.c b/src/libMars-ecregrid/guess.c
new file mode 100644
index 0000000..dc08f4d
--- /dev/null
+++ b/src/libMars-ecregrid/guess.c
@@ -0,0 +1,163 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include <ctype.h>
+#include <sys/types.h>
+
+static char *scan_file(const char *file)
+{
+	FILE *f = fopen(file,"r");
+	int len;
+	int max;
+	unsigned char c = ' ';
+
+	union {
+		char  c;
+		short s;
+		long  l;
+		char  ch[8];
+	} buf;
+
+	if(f == NULL)
+		return "BAD";
+
+	memset(&buf,0,sizeof(buf));
+
+
+	if((len = fread((char*)&buf,1,sizeof(buf),f)) < 0)
+	{
+		fclose(f);
+		marslog(LOG_DBUG,"Bad len '%d' while reading '%s'",len,file);
+		return "BAD";
+	}
+
+	if(strncmp(buf.ch,"%!",2) == 0)
+	{
+		fclose(f);
+		return "PSFILE";
+	}
+
+	if(strncmp(buf.ch,"#!",2) == 0)
+	{
+		fclose(f);
+		return "SHELL";
+	}
+
+	if(strncmp(buf.ch,"GRIB",4) == 0)
+	{
+		fclose(f);
+		return "GRIB";
+	}
+
+	if(strncmp(buf.ch,"TIDE",4) == 0)
+	{
+		fclose(f);
+		return "GRIB";
+	}
+
+	if(strncmp(buf.ch,"BUDG",4) == 0)
+	{
+		fclose(f);
+		return "GRIB";
+	}
+
+	if(strncmp(buf.ch,"BUFR",4) == 0)
+	{
+		fclose(f);
+		return "BUFR";
+	}
+
+	if(strncmp(buf.ch,"%!",2) == 0)
+	{
+		fclose(f);
+		return "POSTSCRIPT";
+	}
+
+	if(strncmp(buf.ch,"#GEO",4) == 0)
+	{
+		fclose(f);
+		return "GEOPOINTS";
+	}
+
+	if(strncmp(buf.ch,"#LLM",4) == 0)
+	{
+		fclose(f);
+		return "LLMATRIX";
+	}
+
+	if(strncmp(buf.ch+2,"GRIB",4) == 0)
+	{
+		fclose(f);
+		return "GRIB";
+	}
+
+	if(strncmp(buf.ch+4,"GRIB",4) == 0)
+	{
+		fclose(f);
+		return "GRIB";
+	}
+
+	if(strncmp(buf.ch+2,"BUFR",4) == 0)
+	{
+		fclose(f);
+		return "BUFR";
+	}
+
+	if(strncmp(buf.ch+4,"BUFR",4) == 0)
+	{
+		fclose(f);
+		return "BUFR";
+	}
+
+	if(strncmp(buf.ch,"CDF",3) == 0)
+	{
+		fclose(f);
+		return "NETCDF";
+	}
+
+	rewind(f);
+
+	max = 4096; /* 4 K */
+	while(max-->0 && !feof(f))
+	{
+		fread((char*)&c,1,1,f);
+		if(!isprint(c) && !isspace(c))
+		{
+			fclose(f);
+			return "BINARY";
+		}
+	}
+
+	fclose(f);
+	return "NOTE";
+}
+
+char *guess_class(const char *file)
+{
+
+	struct stat buf;
+
+	if(stat(file,&buf) <0)
+		return "BAD";
+
+	switch(buf.st_mode & S_IFMT)
+	{
+	case S_IFDIR:
+		return "FOLDER";
+
+	case S_IFREG:
+		return scan_file(file);
+
+	default:
+		return "SPECIAL";
+	}
+
+}
diff --git a/src/libMars-ecregrid/handler.c b/src/libMars-ecregrid/handler.c
new file mode 100644
index 0000000..2f15357
--- /dev/null
+++ b/src/libMars-ecregrid/handler.c
@@ -0,0 +1,184 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+#define VALIDATE   0x01
+#define STATISTICS 0x02
+#define SCHEDULE   0x04
+/* MARSLITE defines those verbs which can be executed when the client is running on behalf of a marslite client */
+#define MARSLITE   0x08
+
+
+static handler handlers[] = {
+	{"RETRIEVE",handle_retrieve, VALIDATE | STATISTICS | SCHEDULE | MARSLITE, },
+	{"WRITE",   handle_write,    0,},
+	{"READ",    handle_read,     0,},
+	{"COMPUTE", handle_compute,  0,},
+	{"ARCHIVE", handle_archive,  VALIDATE | STATISTICS,},
+#ifdef ECMWF
+	{"REMOVE",  handle_remove, VALIDATE | STATISTICS,},
+#endif
+
+	{"DEFAULT", handle_default,  0,},
+
+    /* On new DHS */
+
+	{"ERASE",   handle_retrieve,   VALIDATE | STATISTICS,},
+	{"FLUSH",   handle_control, VALIDATE | STATISTICS,},
+	{"ATTACH",  handle_control, VALIDATE | STATISTICS,},
+	{"LIST",    handle_control, MARSLITE,},
+	{"BROWSE",  handle_control, VALIDATE,},
+	{"STAGE",   handle_control, VALIDATE | STATISTICS | MARSLITE,},
+
+	{"GET",     handle_control, 0,},
+
+	{"STORE",   handle_control, VALIDATE | STATISTICS,},
+	{"FETCH",   handle_retrieve, VALIDATE | STATISTICS,},
+
+	{"END",     handle_end,     0,},
+};
+
+
+err handle_request(request *r,void *data)
+{
+	int i;
+	char buf[80];
+
+	if(!r)
+	{
+		marslog(LOG_EROR,"Cannot handle null requests");
+		return -2;
+	}
+
+	if(mars.verbose)
+	{
+		static int n = 0;
+
+		putchar('\n');
+		marslog(LOG_INFO,"Processing request %d",++n);
+	}
+
+	add_hidden_parameters(r);
+
+	
+	if(mars.marslite_mode)
+	{
+		unset_value(r,"DATABASE");
+		unset_value(r,"TARGET");
+	}
+
+	if(mars.verbose)
+	{
+		putchar('\n');
+		print_one_request(r);
+	}
+
+
+	for(i=0;i<NUMBER(handlers);i++)
+		if(EQ(handlers[i].name,r->name))
+		{
+			err e;
+			err ret;
+			request *env    = get_environ();
+			clock_t cpu     = 0;
+			double  elapsed = 0;
+			boolean    logstat = handlers[i].flags & STATISTICS;
+
+			if(logstat) 
+				init_statistics(r,env);
+
+			if( (handlers[i].flags & VALIDATE) == 0)
+				mars.request_id = -1;
+			else
+				if((e = validate_request(r,env,mars.validate)) != 0)
+				{
+					if(logstat)
+					{
+						log_statistics("status","restricted");
+						log_errors();
+						flush_statistics(r,env);
+					}
+					return e;
+				}
+
+#ifdef ECMWF
+			if((handlers[i].flags & SCHEDULE))
+			{
+				if((e = check_dissemination_schedule(r,env,logstat)) != 0)
+				{
+					/* Fail if dissemination schedule */
+					if(mars.dissemination_schedule & SCHEDULE_FAIL)
+					{
+						if(logstat)
+						{
+							log_statistics("status","before_schedule");
+							flush_statistics(r,env);
+							log_errors();
+						}
+						return e;
+					}
+				}
+			}
+#endif
+
+			if(!(handlers[i].flags & MARSLITE) && mars.marslite_mode)
+			{
+				int j = 0;
+				marslog(LOG_WARN,"MARS running on behalf of marslite client");
+				marslog(LOG_EROR,"Verb: %s disabled",handlers[i].name);
+				marslog(LOG_WARN,"Allowed verbs in this mode:");
+				for(j=0; j<NUMBER(handlers);j++)
+				{
+					if(handlers[j].flags & MARSLITE)
+						marslog(LOG_WARN,"   %s",handlers[j].name);
+				}
+				log_statistics("status","marslite");
+				return -1;
+			}
+
+
+			qenter(r);
+			start_timer(); 
+			e = handlers[i].proc(r,data);
+			elapsed = stop_timer(buf);
+			cpu     = timer_cpu();
+			if(*buf) marslog(LOG_INFO,"Request time: %s",buf);
+			qleave();
+
+			print_all_timers();
+			reset_all_timers();
+
+			if((ret = fflush(stdout)) != 0)
+				marslog(LOG_WARN,"Error while flushing output (%d)",ret);
+
+			if(logstat)
+			{
+				log_statistics("cpu","%ld",(long)cpu);
+				log_statistics("elapsed","%ld",(long)elapsed);
+				log_statistics("status","%s",e==NOERR?"ok":"fail");
+				if(e) log_errors();
+				flush_statistics(r,env);
+			}
+
+
+			return e;
+		}
+
+	marslog(LOG_EROR,"No handler for verb '%s' found",r->name);
+	return -1;
+}
+
+err handle_end(request *r,void *data)
+{
+	marslog(LOG_INFO,"Note: in this version of MARS, END is not compulsary");
+	marslog(LOG_INFO,"Any remaining requests ignored");
+	return END_REQUEST;
+}
diff --git a/src/libMars-ecregrid/hash.c b/src/libMars-ecregrid/hash.c
new file mode 100755
index 0000000..09cafe2
--- /dev/null
+++ b/src/libMars-ecregrid/hash.c
@@ -0,0 +1,137 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include <stdio.h>
+#include "mars.h"
+
+#define SIZE 	((int)4097)
+
+typedef struct hashrec {
+	struct hashrec  *next;
+	char   *name;
+	int    cnt;
+} hashrec;
+
+static hashrec *table[SIZE] = { 
+	NULL, };
+
+
+static int hash(const char *name)
+{
+	int n = 0;
+
+	while(*name)
+		n +=  (*name++ - 'A') + (n << 5);
+
+#ifdef CRAY
+	if(n<0) n = -n;
+#else
+	if(n<0)  {
+		int m = -n/SIZE;
+		n += (m+1)*SIZE;
+	}
+#endif
+	return n % SIZE;
+}
+
+void hash_stat()
+{
+	int i;
+	int a=0,b=0,c=0;
+	hashrec *h;
+
+	printf("Table size is %d. ",SIZE);
+
+	for(i=0;i<SIZE;i++)
+		if(h = table[i])
+		{
+			a++;
+			while(h) { b++; c += h->cnt; h = h->next; };
+		}
+
+	printf("Used: %d, Total: %d, Strings: %d\n",a,b,c);
+}
+
+char *strcache(const char *name)
+{
+	hashrec *h;
+	int      n;
+
+	if(name == NULL) return NULL;
+
+	n = hash(name);
+	h = table[n];
+
+	while(h)
+	{
+		if(EQ(h->name,name))
+		{
+			h->cnt++;
+			return h->name;
+		}
+		h = h->next;
+	}
+
+	h        = NEW(hashrec);
+	h->name  = NEW_STRING(name);
+	h->next  = table[n];
+	h->cnt   = 1;
+	table[n] = h;
+
+	return h->name;
+}
+
+void strfree(char *name)
+{
+
+	hashrec *h;
+	hashrec *p = NULL;
+	int      n;
+
+	if(name == NULL) return;
+
+	n = hash(name);
+	h = table[n];
+
+	while(h)
+	{
+		if(h->name == name)
+		{
+			h->cnt--;
+			break;
+		}
+		p = h;
+		h = h->next;
+	}
+
+	if(h == NULL)
+	{
+		marslog(LOG_WARN,"%s was not in hash table",name);
+		abort();
+		printf("n=%d\n",n);
+		h = table[n];
+		while(h)
+		{
+			printf("%s %d\n",h->name,h->cnt);
+			h = h->next;
+		}
+		return;
+	}
+
+	if(h->cnt == 0)
+	{
+		if(p) p->next = h->next;
+		else table[n] = h->next;
+		FREE(h->name);
+		FREE(h);
+	}
+}
+
+
diff --git a/src/libMars-ecregrid/hidden.c b/src/libMars-ecregrid/hidden.c
new file mode 100644
index 0000000..356e86e
--- /dev/null
+++ b/src/libMars-ecregrid/hidden.c
@@ -0,0 +1,567 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include <ctype.h>
+
+
+typedef int (*sortproc) (int,int);
+
+static int sort_up  (int a,int b) {
+	return a-b;
+}
+static int sort_152 (int a,int b) {
+	if(a==152 && b != 127 ) a = -1;
+	if(b==152 && a != 127)  b = -1; 
+	return a-b;
+}
+static int sort_down(int a,int b) {
+	return b-a;
+}
+
+static void sort_params(request *r,parameter *p,sortproc proc)
+{
+
+}
+
+static void hidden_sort_request(request *r)
+{
+	sortproc proc;
+	const char *s;
+	parameter *p = r->params;
+
+	while(p)
+	{
+		if(count_values(r,p->name)>1)
+		{
+			proc = sort_up;
+
+			if(EQ(p->name,"PARAM"))
+				proc = sort_152;
+
+			if((EQ(p->name,"LEVELIST")) &&
+					(s = get_value(r,"LEVTYPE",0) )  &&
+					(EQ(s,"PL")))
+				proc = sort_down;
+
+			sort_params(r,p,proc);
+		}
+		p = p->next;
+	}
+}
+
+static char *names[] = {
+	"DATE",
+	"TIME",
+	"STEP",
+	"STREAM",
+};
+
+
+static void unfg(const request *r,int count,char *names[],
+		char *vals[],void *data)
+{
+	request *z = (request *)data;
+	int d = date_to_julian(atol(vals[0]));
+	int t = atoi(vals[1])/100;
+	int s = atoi(vals[2]);
+	const char *stream = vals[3];
+	int monthly = (stream[0]=='M' && stream[1]=='O' && stream[2]==0);
+
+	if(s == 0) s = 6;
+
+	if(monthly)
+	{
+		d = julian_to_date(d,mars.y2k);
+		d += 2;
+		d = date_to_julian(d);
+	}
+	marslog(LOG_DBUG,"Un first-guessing:  time %d date %d",t,
+			julian_to_date(d,mars.y2k));
+
+	t -= s;
+
+	while(t <0)
+	{
+		t += 24;
+		d -= 1;
+	}
+
+	marslog(LOG_DBUG,"Un first-guessing:  time %d date %d",t,
+			julian_to_date(d,mars.y2k));
+
+	if(monthly)
+	{
+		if(mars.mm_firstofmonth)
+			add_unique_value(z,"DATE","%d",(julian_to_date(d,mars.y2k)/100*100)+1);
+		else
+			add_unique_value(z,"DATE","%d",julian_to_date(d,mars.y2k)/100*100);
+	}
+	else
+		add_unique_value(z,"DATE","%d",julian_to_date(d,mars.y2k));
+	add_unique_value(z,"TIME","%04d",t*100);
+	add_unique_value(z,"STEP","%d",s);
+
+}
+
+request *un_first_guess(const request *r)
+{
+	if(r)
+	{
+		const char *s;
+		request *z = clone_one_request(r);
+
+#ifndef FG_IS_REAL_FG
+		int m;
+
+		int n = count_values(z,"DATE") * 
+			count_values(z,"TIME") * 
+			count_values(z,"STEP");
+
+		if(s = get_value(r,"TYPE",0))
+			if(EQ(s,"FG"))
+			{
+
+				if(s =  get_value(r,"STREAM",0))
+					if(EQ(s,"WAVE"))
+						return z;
+
+				marslog(LOG_DBUG,"Un first-guessing...");
+				if(mars.debug)
+					print_one_request(z);
+
+				set_value(z,"TYPE","FC");
+				unset_value(z,"DATE");
+				unset_value(z,"TIME");
+				unset_value(z,"STEP");
+
+				values_loop(r,NUMBER(names),names,unfg,z);
+				if(mars.debug)
+					print_one_request(z);
+
+				m = count_values(z,"DATE") * 
+					count_values(z,"TIME") * 
+					count_values(z,"STEP");
+
+				if(m != n)
+				{
+					free_all_requests(z);
+					z = clone_one_request(r);
+					marslog(LOG_WARN,
+							"Multi date/time first-guess requests cannot be cached");
+				}
+			}
+#endif
+
+		return z;
+	}
+	return NULL;
+}
+
+request *un_first_guess_all(const request *r)
+{
+	request *first = NULL;
+	request *last = NULL;
+
+	while(r)
+	{
+		request *s = un_first_guess(r);
+		s->order = r->order;
+		if(first == NULL) 
+			first = s;
+		else 
+			last->next = s;
+		last = s;
+		r = r->next;
+	}
+
+	return first;
+}
+
+static void check_one(const request *r,const char *p)
+{
+	if(count_values(r,p) != 1)
+	{
+		marslog(LOG_WARN,"'VERIFY' needs 1 %s",p);
+
+		if(count_values(r,p)>1)
+		{
+			marslog(LOG_EROR,"Cannot make 1 request with multiple '%s's",p);
+			marslog(LOG_EROR,"for the same 'VERIFY'");
+
+			marsexit(1);
+		}
+	}
+
+}
+
+static void verifydate_to_basedate(request *r)
+{
+	long bjulian = 0;
+	const char* pdate = NULL;
+	long second = 0; boolean isjul;
+	long bdate = 0;
+	long btime = 0;
+	int i     = 0;
+	int bstep = 0;
+
+	check_one(r,"DATE");
+	check_one(r,"TIME");
+	check_one(r,"STEP");
+
+	pdate = get_value(r,"DATE",0);
+	if(is_number(pdate))
+	{
+		bdate   = atoi(pdate);
+		bjulian = date_to_julian(bdate);
+	}
+	else
+	{
+		parsedate(pdate,&bjulian,&second,&isjul);
+		bdate = julian_to_date(bjulian,mars.y2k);
+	}
+
+	btime = atoi(get_value(r,"TIME",0));
+	bstep = atoi(get_value(r,"STEP",0));
+	unset_value(r,"STEP");
+
+	for(i=0;i<count_values(r,"VERIFY");i++)
+	{
+		const char* p = get_value(r,"VERIFY",i);
+		long vjulian = 0;
+		long vdate = 0;
+
+		if(is_number(p))
+		{
+			vdate   = atoi(p);
+			vjulian = date_to_julian(vdate);
+		}
+		else
+		{
+			parsedate(p,&vjulian,&second,&isjul);
+			vdate = julian_to_date(vjulian,mars.y2k);
+		}
+
+		if(vdate<bdate)
+		{
+			marslog(LOG_EROR,"'VERIFY' (%s) cannot preceed 'DATE' (%s)",p,pdate);
+			marsexit(1);
+		}
+		else
+		{
+			int n = (vjulian - bjulian) * 24 + bstep; /* - 23; */
+			add_value(r,"STEP","%d",n);
+
+			marslog(LOG_DBUG,"Converting vdate (%ld) to STEP (%d) from DATE (%ld), TIME (%d), STEP (%d)",
+					vdate,n,bdate,btime,bstep);
+
+		}
+	}
+
+	unset_value(r,"VERIFY");
+}
+
+static void validation_date(request *r)
+{
+	int i;
+	int date = 0;
+	int time = 0;
+	int step = 0;
+	int v;
+
+	for(i=0;i<count_values(r,"STEP");i++)
+	{
+		int n = atoi(get_value(r,"STEP",i));
+		if(n>step) step = n;
+	}
+
+	for(i=0;i<count_values(r,"DATE");i++)
+	{
+		const char* p = get_value(r,"DATE",i);
+		int n;
+		if(is_number(p))
+			n = atoi(p);
+		else
+		{
+			long julian = 0,second = 0; boolean isjul;
+			parsedate(p,&julian,&second,&isjul);
+			n = julian_to_date(julian,mars.y2k);
+		}
+		if(n>date) date = n;
+	}
+
+	for(i=0;i<count_values(r,"TIME");i++)
+	{
+		int n = atoi(get_value(r,"TIME",i));
+		if(n>time) time = n;
+	}
+
+	v = date_to_julian(date) + (time/100 + step + 23)/24;
+	set_value(r,"_VERIF_DATE","%d",julian_to_date(v,mars.y2k));
+	v -= date_to_julian(0) ;
+	set_value(r,"_DELTA_DATE","%d",v);
+	set_value(r,"_CURRENT_DATA","%s",v>=1?"YES":"NO");
+}
+
+void ensemble_to_number(request *r)
+{
+	static request *done = 0;
+
+	if(done != r)
+	{
+		valcpy(r,r,"NUMBER","ENSEMBLE");    
+		valcpy(r,r,"NUMBER","CLUSTER");     
+		valcpy(r,r,"NUMBER","PROBABILITY"); 
+		unset_value(r,"ENSEMBLE");
+		unset_value(r,"CLUSTER");
+		unset_value(r,"PROBABILITY");
+		done = r;
+	}
+}
+
+err add_hidden_parameters(request *r)
+{
+	const char *s;
+	int  i,n;
+	int j = 0;
+
+	while(s = no_quotes(get_value(r,"EXPVER",j++)))
+	{
+		if(is_number(s))
+		{
+			n = atoi(s);
+			add_value(r,"TMPEXPVER","%04d",n);
+		}
+		else if(strlen(s) == 4)
+		{
+			add_value(r,"TMPEXPVER","%s",lowcase(s));
+			n = 0;
+			while(*s) 
+				n = (n <<8) + (unsigned char)*s++; 
+		}
+		else n = -1;
+		add_value(r,"_EXPVER","%d",n);
+	}
+
+	valcpy(r,r,"EXPVER","TMPEXPVER"); 
+	unset_value(r,"TMPEXPVER");
+
+	if(s = get_value(r,"RESOL",0))
+	{
+		if(!EQ(s,"AV") && !EQ(s,"AUTO") && s[0] != 'N')
+			set_value(r,"_TRUNCATION",s);
+	}
+
+	/* Changes in accuracy:                   mars.accuracy
+AV : output same as input             -1 
+N  : output same as input             -1
+nn : output with nn bits per value    nn
+L or R : output 8 bits per value       8
+<nothing> :                            0
+
+interpolation    in compute
+=============    ==========
+mars.accuracy == 0  => same as input    24
+mars.accuracy == n  => n                n
+mars.accuracy == -1 => same as input    same as input
+
+	 */
+	if((s = get_value(r,"ACCURACY",0)))
+	{
+		if(isdigit(*s))
+		{
+			int n = atoi(s);
+			if(n)
+				mars.accuracy = n;
+			marslog(LOG_DBUG,"hidden: Using %d bits for accuracy",mars.accuracy);
+		}
+		else
+		{
+			if((strcmp(s,"N")==0) || (strcmp(s,"AV")==0))
+			{
+				mars.accuracy = -1;
+				marslog(LOG_INFO,"Accuracy %s selected. Using input field accuracy",s);
+				marslog(LOG_DBUG,"hidden: Same bits as input for accuracy (%d)",mars.accuracy);
+			}
+			else
+				mars.accuracy = 0;
+		}
+	}
+	else
+		mars.accuracy = 0;
+
+	if(i = count_values(r,"AREA"))
+	{
+		int n,s;
+
+		if(i != 4)
+		{
+			marslog(LOG_EROR,"AREA must have 4 values");
+			return -2;
+		}
+
+		n = 0;
+		s = 2;
+
+		if(atof(get_value(r,"AREA",2)) > atof(get_value(r,"AREA",0)))
+		{
+			const char *level = get_value(r,"LEVTYPE",0);
+			boolean     ocean = level && (strcmp(level,"DP") == 0);            /* Level depth means ocean data */
+
+			/* Don't check if ocean */
+			if(!ocean)
+			{
+				n = 2;
+				s = 0;
+				marslog(LOG_WARN,"SOUTH and NORTH parts of AREA were swapped");
+			}
+		}
+
+		set_value(r,"_AREA_N",get_value(r,"AREA",n));
+		set_value(r,"_AREA_W",get_value(r,"AREA",1));
+		set_value(r,"_AREA_S",get_value(r,"AREA",s));
+		set_value(r,"_AREA_E",get_value(r,"AREA",3));
+
+		if(s == 0)
+		{
+			set_value(r,"AREA","%s",get_value(r,"_AREA_N",0));
+			add_value(r,"AREA","%s",get_value(r,"_AREA_W",0));
+			add_value(r,"AREA","%s",get_value(r,"_AREA_S",0));
+			add_value(r,"AREA","%s",get_value(r,"_AREA_E",0));
+		}
+	}
+
+	set_value(r,"_MARS_VERSION","%ld",marsversion());
+
+	ensemble_to_number(r);
+
+	switch(count_values(r,"GRID"))
+	{
+		case 0:
+			break;
+
+		case 1:
+
+			/* It's Gaussian !! */
+
+			set_value(r,"_GAUSSIAN",get_value(r,"GRID",0));
+			break;
+
+		case 2:
+
+			/* It's lat/lon */
+
+			set_value(r,"_GRID_EW",get_value(r,"GRID",0));
+			set_value(r,"_GRID_NS",get_value(r,"GRID",1));
+
+			break;
+	}
+
+
+	switch(count_values(r,"ROTATION"))
+	{
+		case 0:
+			break;
+
+		case 1:
+			marslog(LOG_EROR,"ROTATION must have 2 values");
+			return -2;
+
+		case 2:
+			set_value(r,"_ROTATION_LAT",get_value(r,"ROTATION",0));	
+			set_value(r,"_ROTATION_LON",get_value(r,"ROTATION",1));	
+			break;
+	}
+
+#if 0
+	if(count_values(r,"VERIFY"))
+		verifydate_to_basedate(r);
+#endif
+
+	validation_date(r);
+
+#if 0
+	/* Not needed for ECREGRID */
+	pprotation(r);
+
+	ppstyle(r);
+#endif
+
+	pparea(r);
+
+	patch_ranges(r);
+
+	patch_steprange(r);
+
+	return NOERR;
+}
+
+void patch_ranges(request* r)
+{
+	if (observation(r))
+	{
+		if (count_values(r,"TIME") == 3 && EQ(get_value(r,"TIME",1),"TO"))
+		{
+			long from = atol(get_value(r,"TIME",0));
+			long to = atol(get_value(r,"TIME",2));
+
+			long start = from / 100 * 60 + from % 100;	
+			long end = to / 100 * 60 + to % 100;	
+			long range = end - start;
+			while (range < 0)
+				range += 24 * 60;
+			marslog(LOG_WARN,"Changing time %04d/to/%04d to range %d",
+					from,to,range);
+
+			copy_to_ibm_values(r,"TIME");
+
+			set_value(r,"RANGE","%d",range);
+			set_value(r,"TIME","%04d",from);
+
+		}
+		else if (count_values(r,"TIME") == 1 && count_values(r,"RANGE") != 0)
+		{
+			request *clone = clone_one_request(r);
+			char	tmp[32];
+			char	*p;
+
+			long from=atol(get_value(r,"TIME",0));
+			long range=atol(get_value(r,"RANGE",0));
+			long to;
+
+			to=from / 100 * 60 + from % 100+range;
+			to = to / 60 * 100 + to % 60;
+
+			/* printf("%4ld %4ld\n",from,to); */
+
+			sprintf(tmp,"%4ld",from);
+			p = tmp;
+			while (*p) { if (*p == ' ') *p = '0'; p++; }
+			set_value(clone,"TIME",tmp);
+			add_value(clone,"TIME","TO");
+			sprintf(tmp,"%4ld",to);
+			p = tmp;
+			while (*p) { if (*p == ' ') *p = '0'; p++; }
+			add_value(clone,"TIME",tmp);
+
+			move_to_ibm_values(clone,r,"TIME");
+			free_all_requests(clone);
+		}
+	}
+	else 
+	{
+		/* Fields */
+		const char *levtype = get_value(r,"LEVTYPE",0);
+		boolean ocean = levtype && EQ(levtype,"DP");
+
+		if(!ocean)
+			unset_value(r,"RANGE");
+	}
+}
diff --git a/src/libMars-ecregrid/hypercube.c b/src/libMars-ecregrid/hypercube.c
new file mode 100755
index 0000000..197ed2a
--- /dev/null
+++ b/src/libMars-ecregrid/hypercube.c
@@ -0,0 +1,942 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#ifndef mars_H
+#include "mars.h"
+#endif
+
+int static eq_pseudo_ok(const char* l,const char* r)
+{
+	if(mars.pseudogrib && mars.dont_check_pseudogrib) {
+		if(!eq_string(l,r))
+			marslog(LOG_WARN,"PSEUDO GRIB mismatch ignored: %s %s",l,r);
+		return 1;
+	}
+	return eq_string(l,r);
+}
+
+
+static axis_t axis[] = {
+
+	/* From dhsbase.c 'check_grib' */
+	{"CLASS",       eq_pseudo_ok, },
+	{"TYPE",        eq_pseudo_ok, },
+	{"STREAM",      eq_pseudo_ok, },
+	{"LEVTYPE",     eq_string, },
+
+	{"ORIGIN",      eq_string, },
+	{"PRODUCT",     eq_string, },
+	{"SECTION",     eq_string, },
+	{"METHOD",      eq_integer, },
+	{"SYSTEM",      eq_integer, },
+
+	/* testing */
+	/* {"REPRES",      eq_null, }, */
+
+	/* From field order */
+	{"DATE",        eq_date, },
+	{"REFDATE",     eq_date, },
+	{"HDATE",       eq_date, },
+	{"TIME",        eq_time, },
+	{"ANOFFSET",   eq_range, },
+
+	{"REFERENCE",   eq_range, },
+	{"STEP",        eq_range, },
+	{"FCMONTH",     eq_integer, },
+	{"FCPERIOD",    eq_range, },
+
+	{"LEADTIME",    eq_range, },
+	{"OPTTIME",     eq_range, },
+
+	{"EXPVER",      eq_pseudo_ok, },
+	{"DOMAIN",      eq_string, },
+
+	{"DIAGNOSTIC",  eq_integer, },
+	{"ITERATION",   eq_integer, },
+
+	{"QUANTILE",    eq_range, },
+	{"NUMBER",      eq_integer, },
+
+	{"LEVELIST",    eq_coord, },
+	{"LATITUDE",    eq_coord, },
+	{"LONGITUDE",   eq_coord, },
+	{"RANGE",       eq_range, },
+
+	{"PARAM",       eq_param, },
+
+	{"IDENT",       eq_integer, },
+	{"OBSTYPE",     eq_integer, },
+	{"INSTRUMENT",  eq_integer, },
+
+	{"FREQUENCY",   eq_integer, },
+	{"DIRECTION",   eq_integer, },
+
+	{"CHANNEL",     eq_integer, },
+};
+
+static axis_t axisnew[1024]; /* May be enough language attributes for the time being... */
+static int init_axis(const request *r)
+{
+	parameter *p = r->params;
+	static int count = 0;
+
+	if(count)
+		return count;
+
+	while(p)
+	{
+		const request *i = p->interface;
+		boolean take = true;
+		const char *check = NULL;
+
+		if(i && (((check = get_value(i,"check",0)) != NULL) && EQ(check,"false")))
+			take = false;
+
+		if(take)
+		{
+			const char *type = get_value(i,"type",0);
+			namecmp cmp = eq_default;
+
+			axisnew[count].name    = p->name;
+			if(type)
+			{
+				if(EQ(type,"string"))
+					cmp = eq_string;
+				else if(EQ(type,"null"))
+					cmp = eq_null;
+				else if(EQ(type,"date"))
+					cmp = eq_date;
+				else if(EQ(type,"time"))
+					cmp = eq_time;
+				else if(EQ(type,"step"))
+					cmp = eq_range;
+				else if(EQ(type,"integer"))
+					cmp = eq_integer;
+				else if(EQ(type,"coord"))
+					cmp = eq_coord;
+				else if(EQ(type,"real"))
+					cmp = eq_real;
+				else if(EQ(type,"default"))
+					cmp = eq_default;
+			}
+			axisnew[count].compare = cmp;
+		}
+		count++;
+		p = p->next;
+	}
+	return count;
+}
+
+int axisindex(const char *name)
+{
+	int i = 0;
+	for(i = 0 ; i < NUMBER(axis) ; i++)
+	{
+		if(EQ(name,axis[i].name))
+			return i;
+	}
+	return -1;
+}
+
+namecmp comparator(const char *name)
+{
+	static char *dontcompare = NULL;
+	static boolean first = true;
+	int i = 0;
+
+	if(first)
+	{
+		dontcompare = getenv("MARS_DONT_CHECK");
+		first = false;
+	}
+
+	if(dontcompare != NULL)
+	{
+		if(EQ(dontcompare,name))
+			return eq_null;
+	}
+
+	if((i = axisindex(name))!= -1)
+		return axis[i].compare;
+	marslog(LOG_WARN,"No comparator for %s",name);
+	return eq_string;
+}
+
+/********************/
+/* index accessors  */
+/********************/
+
+static int count_index(const hypercube *h)
+{
+	int i = 0, n = 0;
+
+	for(i = 0; i<h->size; ++i)
+		n += h->set[i];
+	return n;
+}
+
+static int count_holes(const hypercube *h, int cnt)
+{
+	int i = 0, n = 0;
+
+	for(i = 0; i<cnt;++i)
+		n += h->set[i];
+
+	return (n==cnt)?0:(cnt - n);
+}
+
+void print_hypercube_index(const hypercube *h)
+{
+	int i = 0;
+
+	for(i = 0; i<h->size; ++i)
+		printf(" %d",h->set[i]);
+	printf("\n");
+}
+
+static void reset_index(hypercube *h, int v)
+{
+	memset(h->set,v,h->size);
+}
+
+
+static int pos_to_index(const hypercube *h, int pos, int *from, int *last)
+{
+	for(; *from < h->size; ++(*from))
+	{
+		*last += h->set[*from];
+		if(*last > pos)
+			return (*from)++;
+	}
+	return -1;
+}
+
+static void set_index(hypercube *h, int index, int value)
+{
+	if(index < 0 || index >= h->count)
+	{
+		marslog(LOG_EXIT,"Internal error, bad hypercube index %d",index);
+	}
+
+	if(index >= h->max)
+	{
+		int old = h->max;
+		while(index>= h->max)
+			h->max += 4096;
+
+		h->set = h->set?REALLOC(h->set,h->max):MALLOC(h->max);
+		memset(h->set+old,0,h->max - old);
+	}
+
+	if(index >= h->size)
+		h->size = index+1;
+
+	h->set[index] = value;
+}
+
+static int get_index(hypercube *h, int index)
+{
+	if(index < 0 || index >= h->count)
+	{
+		marslog(LOG_EXIT,"Internal error, bad hypercube index %d",index);
+	}
+
+	if(index >= h->size)
+		return 0;
+
+	return h->set[index];
+}
+
+static int cmp_index(const hypercube *a, const hypercube *b)
+{
+	if(sizeof(a->set) == sizeof(b->set))
+		return memcmp(a->set,b->set,sizeof(a->set));
+	return -1;
+}
+
+/**************************/
+/* End of index accessors */
+/**************************/
+
+
+/*******************/
+/* axis accessors  */
+/*******************/
+
+static int count_axis(const hypercube *h)
+{
+	if(h && h->cube)
+		return count_values(h->cube,"AXIS");
+
+	return -1;
+}
+
+
+static const char* get_axis(const hypercube *h, int pos)
+{
+	const char *axis = NULL;
+	if(pos<count_axis(h))
+	{
+		axis = get_value(h->cube,"AXIS",pos);
+	}
+	return axis;
+}
+
+static void add_axis(hypercube *h, const char *axis)
+{
+	add_value(h->cube,"AXIS","%s",axis);		
+}
+
+static void reset_axis(hypercube *h)
+{
+	unset_value(h->cube,"AXIS");
+}
+
+static void remove_axis(hypercube *h, const char *axis)
+{
+	unset_param_value(h->cube,"AXIS",axis);
+}
+
+static void cube_values(hypercube *h, const char *p)
+{
+	valcpy(h->cube,h->r,(char *)p,(char *)p);
+}
+
+static int count_dimensions(const hypercube *, const char *);
+
+static int set_axis(hypercube *h)
+{
+	int i     = 0;
+	int count = (h && h->r) ? 1 : -1;
+
+	reset_axis(h);
+	for(i = (NUMBER(axis) -1) ; i>=0; --i)
+	{
+		int n = count_dimensions(h,axis[i].name);
+		if(n > 1)
+		{
+			add_axis(h,axis[i].name);
+			cube_values(h,axis[i].name);
+			count *= n;
+		}
+	}	
+
+	return count;
+}
+
+/*************************/
+/* End of axis accessors */
+/*************************/
+
+/*******************/
+/* Cube dimensions */
+/*******************/
+
+
+static int count_dimensions(const hypercube *h, const char *axis)
+{
+	int dims  = -1;
+	if(h && h->r)
+		dims = count_values(h->r,axis);
+	return dims;
+}
+
+/**************************/
+/* End of cube dimensions */
+/**************************/
+
+/**************************/
+/* Auxiliary functions    */
+/**************************/
+
+
+static int count_hypercube(const request *r)
+{
+	int i = 0, count = 1;
+	for(i = 0 ; i< NUMBER(axis); ++i)
+	{
+		int c = count_values(r,axis[i].name);
+		count *= c?c:1;
+	}
+
+	return count;
+}
+
+int cube_order(const hypercube *h, const request *r)
+{
+	return _cube_position(h,r,true);
+}
+
+static int cube_position(const hypercube *h, const request *r)
+{
+	return _cube_position(h,r,false);
+}
+
+static void reserve_index_cache(hypercube *h, int size)
+{
+	if(size == 0)
+		return;
+
+	if(h->index_cache != 0)
+		FREE(h->index_cache);
+	marslog(LOG_DBUG,"Allocating hypercube index_cache: %d entries",size);
+	h->index_cache = NEW_ARRAY_CLEAR(int,size);
+	h->index_cache_size = size;
+}
+
+int _cube_position(const hypercube *h, const request *r,boolean remove_holes)
+{
+	request *cube = h->cube;
+	int     c     = count_axis(h);
+	int     index = 0;
+	int     i     = 0;
+	int     n     = 1;
+	int     ok    = 0;
+
+	if(h->index_cache == 0 || h->index_cache_size != c)
+		reserve_index_cache((hypercube*)h,c);
+
+	for(i=0; i<c;++i)
+	{
+		const char *axis = get_axis(h,i);
+		const char *v    = get_value(r,axis,0);
+		const char *w    = NULL;
+		int        dims  = count_dimensions(h,axis);
+		int        k     = 0;
+		int        count = count_values(cube,axis);
+		int        last  = h->index_cache[i];
+
+		for(k = 0; k < count; k++)	
+		{
+			int j = (k+last)%count;
+			w = get_value(cube,axis,j);
+			if(h->compare ? h->compare[i](w,v) : (w == v))
+			{
+				index += j*n;
+				n     *= dims;
+				ok++;
+				((hypercube*)h)->index_cache[i]  = j;
+				break;
+			}
+			else
+				marslog(LOG_DBUG,"_cube_position, %s, %s != %s [%scompare function available]",axis,w,v,h->compare ? "" : "no ");
+		}
+	}
+
+	if(remove_holes)
+	{
+		int holes = 0;
+		if(count_index(h) != h->size)
+			holes = count_holes(h,index);
+		index -= holes;
+	}
+
+	return (ok == c) ? index : -1;
+}
+
+static void explain_cube_position(const hypercube *h, const request *r)
+{
+	request *cube = h->cube;
+	int     c     = count_axis(h);
+	int     i = 0;
+
+	if(h->index_cache == 0 || h->index_cache_size != c)
+		reserve_index_cache((hypercube*)h,c);
+
+	for(i=0; i<c;++i)
+	{
+		const char *axis = get_axis(h,i);
+		const char *v    = get_value(r,axis,0);
+		const char *w    = NULL;
+		int        k     = 0;
+		int        count = count_values(cube,axis);
+		int        last  = h->index_cache[i];
+		int        ok    = 0;
+
+
+		for(k = 0; k < count; k++)
+		{
+			int j = (k+last)%count;
+			w = get_value(cube,axis,j);
+			if(h->compare ? h->compare[i](w,v) : (w == v))
+			{
+				ok++;
+				((hypercube*)h)->index_cache[i]  = j;
+				break;
+			}
+		}
+
+		if(!ok)
+			marslog(LOG_EROR,"Could not match %s (%s)",axis,v?v:"(null)");
+	}
+
+}
+
+boolean cube_contains(const hypercube *h, const request *r)
+{
+	request *cube = h->cube;
+	int     c     = count_axis(h);
+	int     i = 0;
+	int     j = 0;
+
+	if(h->index_cache == 0 || h->index_cache_size != c)
+		reserve_index_cache((hypercube*)h,c);
+
+	for(i=0; i<c;++i)
+	{
+		const char *axis = get_axis(h,i);
+
+		const char *w    = NULL;
+		int        k     = 0;
+		int        count = count_values(cube,axis);
+		int        last  = h->index_cache[i];
+
+		int        j     = 0;
+		const char *v    = get_value(r,axis,j++);
+		int        ok    = (v == NULL);
+
+		while(v && !ok)
+		{
+
+			for(k = 0; k < count && !ok; k++)
+			{
+				int j = (k+last)%count;
+				w = get_value(cube,axis,j);
+				/* printf("w: %s, axis: %s, j: %d\n",w,axis,j); */
+				if(h->compare ? h->compare[i](w,v) : (w == v))
+				{
+					ok++;
+					((hypercube*)h)->index_cache[i]  = j;
+					break;
+				}
+			}
+			v = get_value(r,axis,j++);
+		}
+
+		if(!ok)
+		{
+			marslog(LOG_DBUG,"cube_contains: Could not match %s (%s)",axis,v?v:"(null)");
+			return false;
+		}
+	}
+	return true;
+
+}
+void cube_indexes(const hypercube *h, request *r, int *indexes, int size)
+{
+	request *cube = h->cube;
+	int     c     = count_axis(h);
+	int     i     = 0;
+	int     index = 0;
+	int     n     = 1;
+	int     ok    = 0;
+
+	if(size < c)
+	{
+		marslog(LOG_WARN,"MARS internal error in cube_indexes. size=%d < axis=%d",size,c);
+	}
+
+	if(h->index_cache == 0 || h->index_cache_size != c)
+		reserve_index_cache((hypercube*)h,c);
+
+	for(i=0; i<c;++i)
+	{
+		const char *axis = get_axis(h,i);
+		const char *v    = get_value(r,axis,0);
+		const char *w    = NULL;
+		int        dims  = count_dimensions(h,axis);
+		int        j     = 0;
+		int        k     = 0;
+		int        count = count_values(cube,axis);
+		int        last  = h->index_cache[i];
+
+
+		for(k = 0; k < count; k++)
+		{
+			j = (k+last)%count;
+			w = get_value(cube,axis,j);
+			if(h->compare ? h->compare[i](w,v) : (w == v))
+			{
+				index += j*n;
+				n     *= dims;
+				ok++;
+				((hypercube*)h)->index_cache[i]  = j;
+				break;
+
+			}
+		}
+		indexes[i] = j;
+	}
+
+}
+
+/*********************************/
+/* End of Auxiliary functions    */
+/*********************************/
+
+
+hypercube *new_hypercube(const request *r)
+{
+	hypercube *h = NEW_CLEAR(hypercube);
+	int total = 0, count = 0;
+	int n = 0;
+	const char *val = 0;
+
+	h->r    = clone_one_request(r);
+	h->cube = empty_request("CUBE");
+
+	h->count = total = count_hypercube(r);
+	count = set_axis(h);
+
+	h->compare = 0;
+
+	if((total != count) || (count == 0))
+	{
+		marslog(LOG_EROR,"Internal error while computing hypercube fields");
+		marslog(LOG_EROR,"Number of fields in request %d",total);
+		marslog(LOG_EROR,"Number of fields in hypercube %d",count);
+	}
+	set_index(h,count-1,1);
+	memset(h->set,1,count);
+
+	/* This is expensive, but makes the iterator with only
+	   those parameters found as axis */
+	h->iterator = empty_request(0);
+	for(n = 0; n < NUMBER(axis); ++n)
+		if(val = get_value(h->r,axis[n].name,0))
+			set_value(h->iterator,axis[n].name,val);
+
+	return h;	
+}
+
+int add_field_to_hypercube(hypercube *h,request* r)
+{
+	return -1;
+}
+
+int remove_field_from_hypercube(hypercube *h,request* r,int n)
+{
+	parameter *p;
+	int o = cube_position(h,r);
+
+	if(o < 0)
+	{
+		marslog(LOG_EROR,"Field %d is unknown",n);
+		explain_cube_position(h,r);
+		print_one_request(r);
+		return HYPERCUBE_ERROR;
+	}
+
+	if(get_index(h,o) == 0)
+	{
+		marslog(LOG_EROR,"Field %d is duplicated or not described in request",n);
+		print_one_request(r);
+		return HYPERCUBE_ERROR;
+	}
+
+	p = r->params;
+	while(p)
+	{
+		if(*p->name != '_' && !count_values(h->cube,p->name))
+		{
+			if(axisindex(p->name) != -1)
+			{
+				marslog(LOG_EROR,"Field %d has %s = %s, but %s is not in request",n,p->name,get_value(r,p->name,0),p->name);
+				print_one_request(r);
+				return HYPERCUBE_ERROR;
+			}
+		}
+		p = p->next;
+	}
+
+	set_index(h,o,0);
+
+	return NOERR;
+
+}
+
+void remove_name_from_hypercube(hypercube *h,const char *ignore)
+{
+	unset_value(h->r,ignore);
+	unset_value(h->cube,ignore);
+	unset_param_value(h->cube,"AXIS",ignore);
+}
+
+void print_hypercube(const hypercube *h)
+{
+	print_all_requests(h->r);
+	print_all_requests(h->cube);
+	marslog(LOG_INFO,"%d active out of %d fields described\n",count_index(h),h->size);
+}
+
+void free_hypercube(hypercube *h)
+{
+	free_all_requests(h->r);
+	free_all_requests(h->cube);
+	free_all_requests(h->iterator);
+	FREE(h->index_cache);
+	FREE(h->compare);
+	FREE(h->set);
+	FREE(h);
+}
+
+request *_get_cubelet(hypercube *h, int index)
+{
+	int i = 0;
+	int c = count_axis(h);
+
+	for(i=0; i<c;++i)
+	{
+		const char *axis = get_axis(h,i);
+		int        dims  = count_dimensions(h,axis);
+		int        coord = index % dims;
+		const char *val  = get_value(h->r,axis,coord);
+
+		if(!val)
+		{
+			marslog(LOG_EROR,"MARS internal error handling field %d",index);
+			marslog(LOG_EROR,"No value for '%s'[%d] from request",axis,coord);
+			marslog(LOG_EROR,"Contact the MARS group");
+			marsexit(1);
+		}
+		set_value(h->iterator,axis,"%s",val);
+		index    /= dims;
+	}
+	return h->iterator; 
+}
+
+request *get_cubelet(hypercube *h, int index)
+{
+	int from = 0, last = 0;
+	int pos = pos_to_index(h,index, &from, &last);
+
+	return (pos>=0) ? _get_cubelet(h,pos) : NULL;
+}
+
+request *next_cubelet(hypercube *h, int *from, int *last)
+{
+	int pos = pos_to_index(h,*last, from, last);
+	return (pos>=0) ? _get_cubelet(h,pos) : NULL;
+}
+
+static void copy_cube(hypercube *a , const hypercube *b, int v)
+{
+	request *r = NULL;
+	int from = 0, last = 0;
+
+	while(r = next_cubelet((hypercube *)b,&from,&last))
+	{
+		int     new_index = cube_position(a,r);
+		set_index(a,new_index,v);
+	}
+}
+
+
+hypercube *merge_cube(const hypercube *a, const hypercube *b, int init, int va, int vb)
+{
+	hypercube *n = NULL;
+	request *r = clone_one_request(a->r);
+
+	reqmerge(r,b->r);
+
+	n = new_hypercube(r);
+	free_all_requests(r);
+
+	reset_index(n,init);
+
+	copy_cube(n,a,va);
+	copy_cube(n,b,vb);
+
+	return n;
+
+}
+
+struct stuff_1 {
+	hypercube *c;
+	request   *r;
+};
+
+static void reqcb_1(const request *r,int count,char *names[],
+		char *vals[],void *data)
+{
+	struct stuff_1 *s = (struct stuff_1*)data;
+	int i;
+
+	for(i=0;i<count;i++)
+		if(vals[i])
+			set_value(s->r,names[i],vals[i]);
+
+	set_index(s->c,cube_position(s->c,s->r),1);
+}
+
+hypercube *new_hypercube_from_mars_request(const request *r)
+{
+	int i;
+	int n;
+
+	struct stuff_1 s;
+
+#if 0
+	const request *lang = mars_language_from_request(r);
+	int count = 0;
+
+	count = init_axis(lang);
+	marslog(LOG_DBUG,"cube %s",r->kind);
+	/* print_all_requests(mars_language_from_request(r)); */
+	marslog(LOG_INFO,"NUMBER(axis): %d, number axisnew: %d",NUMBER(axis),count);
+#endif
+
+	s.c = new_hypercube(r);
+	s.r = clone_one_request(r);
+
+	reset_index(s.c,0);
+	names_loop(r,reqcb_1,&s);
+
+	free_one_request(s.r);
+
+	/* add single paramters */	
+
+	for(i = 0; i < NUMBER(axis) ; i++)
+	{
+		int m = count_values(r,axis[i].name);
+		if(m == 1)
+		{
+			add_value(s.c->cube,"AXIS",axis[i].name);
+			set_value(s.c->cube,axis[i].name,get_value(r,axis[i].name,0));
+		}
+	}
+
+	n =  count_values(s.c->cube,"AXIS");
+	if(n)
+		s.c->compare = NEW_ARRAY(namecmp,n);
+
+	for(i = 0; i < n; i++)
+		s.c->compare[i] = comparator(get_value(s.c->cube,"AXIS",i));
+
+	return s.c;
+}
+
+/* This one doesn't have single parameters in CUBE */
+hypercube *new_simple_hypercube_from_mars_request(const request *r)
+{
+	int i;
+	int n;
+
+	struct stuff_1 s;
+	s.c = new_hypercube(r);
+	s.r = clone_one_request(r);
+
+	reset_index(s.c,0);
+	names_loop(r,reqcb_1,&s);
+
+	free_one_request(s.r);
+	n =  count_values(s.c->cube,"AXIS");
+	if(n)
+		s.c->compare = NEW_ARRAY(namecmp,n);
+
+	for(i = 0; i < n; i++)
+		s.c->compare[i] = comparator(get_value(s.c->cube,"AXIS",i));
+
+	return s.c;
+}
+
+hypercube *new_hypercube_from_fieldset_cb(fieldset *fs, void (*callback)(request*,void*), void *data)
+{
+	int i;
+	request* r = empty_request(0);
+	hypercube *c;
+
+	if(!fs)
+		return 0;
+
+	for(i = 0; i < fs->count; i++)
+	{
+		request *s = field_to_request(fs->fields[i]);
+		reqmerge(r,s);
+	}
+
+	callback(r,data);
+
+	c = new_hypercube(r);
+	reset_index(c,0);
+	for(i = 0; i < fs->count; i++)
+	{
+		request *s = field_to_request(fs->fields[i]);
+		set_index(c,cube_position(c,s),1);
+	}
+
+	if(fs->count != count_index(c))
+	{
+		marslog(LOG_EROR,"Duplicate fields found in fieldset");
+		marslog(LOG_EROR,"Number of fields in fieldset %d",fs->count);
+		marslog(LOG_EROR,"Number of fields in hypercube %d",count_index(c));
+		free_hypercube(c);
+		return 0;
+	}
+
+	return c;
+}
+
+static void empty_callback(request *r, void *data) 
+{ 
+	/* Empty */
+}
+
+hypercube *new_hypercube_from_fieldset(fieldset *fs)
+{
+	return new_hypercube_from_fieldset_cb(fs,empty_callback,NULL);
+}
+
+
+hypercube *new_hypercube_from_file(const char* path)
+{
+	fieldset *fs = read_fieldset(path,0);
+	hypercube *c = new_hypercube_from_fieldset(fs);
+	free_fieldset(fs);
+
+	return c;
+}
+
+hypercube * add_cube(const hypercube *a, const hypercube *b)
+{
+	return merge_cube(a,b,0,1,1);
+}
+
+hypercube *remove_cube(const hypercube *a, const hypercube *b)
+{
+	return merge_cube(a,b,0,1,0);
+}
+
+int hypercube_field_count(const hypercube *a)
+{
+	return count_index(a);
+}
+
+int hypercube_cube_size(const hypercube *a)
+{
+	return count_hypercube(a->r);
+}
+
+int hypercube_compare(const hypercube *a, const hypercube *b)
+{
+	if(hypercube_field_count(a) != hypercube_field_count(b))
+	{
+		return 1;
+	}
+
+	if(cmp_index(a,b) != 0)
+	{
+		return 1;
+	}
+
+	return 0;
+}
+
+
diff --git a/src/libMars-ecregrid/hypercube.h b/src/libMars-ecregrid/hypercube.h
new file mode 100755
index 0000000..99fc11e
--- /dev/null
+++ b/src/libMars-ecregrid/hypercube.h
@@ -0,0 +1,29 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+typedef struct hypercube {
+	request *cube;
+	request *r;
+	request *iterator;
+	char    *set;
+	int     count;
+	int     size;
+	int     max;
+	int*    index_cache;
+	int     index_cache_size;
+	namecmp *compare;
+} hypercube;
+
+
+typedef struct axis_t {
+	const char *name;
+	namecmp    compare;
+} axis_t;
+
diff --git a/src/libMars-ecregrid/ibmblk.c b/src/libMars-ecregrid/ibmblk.c
new file mode 100755
index 0000000..48fba0c
--- /dev/null
+++ b/src/libMars-ecregrid/ibmblk.c
@@ -0,0 +1,384 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include "ibmblk.h"
+
+#ifdef  CHECK_ALIGN
+#define COPY(a,b,c)   mycopy((char*)(a),(char*)(b),c)
+#else
+#define COPY(a,b,c)	  memcpy(a,b,c)
+#endif
+
+#define FILL_CHR(x,y) fill_chr(x, y, sizeof(x))
+#define FILL_INT(x,y) fill_int (x, y, sizeof(x))
+#define GET_CHR(x)    get_chr ((char*)&x,    sizeof(x))
+#define GET_INT(x)    get_int  ((char*)&x,    sizeof(x))
+
+static void mycopy(char *a,char *b,int c)
+{
+	while(c--) *a++ = *b++;
+}
+
+
+static char block[MAX_NET_BLOCK];
+
+static void upper_case(request *r,char *name)
+{
+	const char *s = get_value(r,name,0);
+	char *p,*q;
+
+	if(!s) return;
+
+	q = p = NEW_STRING(s);
+	while(*p) 
+	{ 
+		if(islower(*p)) 
+		*p = toupper(*p); 
+		p++;
+	}
+	set_value(r,name,q);
+	FREE(q);
+}
+
+static void fill_chr(char *p,const char *q,int n)
+{
+	char buf[256];
+	sprintf(buf,"%*s",-n,q);
+	COPY(p,buf,n);
+}
+
+static void fill_int(char *p,int m,int n)
+{
+	char buf[256];
+	sprintf(buf,"%0*d",n,m);
+	COPY(p,buf,n);
+}
+
+static char *get_chr(char *p,int n)
+{
+	static char buf[256];
+	COPY(buf,p,n);
+	buf[n] = 0;
+	return buf;
+}
+
+static int get_int(char *p,int n)
+{
+	return atoi(get_chr(p,n));
+}
+
+static int add_1_value(value *v,int offset,int shift)
+{
+	_bvalue   bvalue;
+	int       len = strlen(v->name + shift);
+	int		  off = offset + OFFSET(_bvalue,value) + len;
+
+	memset(&bvalue,'*',sizeof(bvalue));
+
+	strncpy(bvalue.value, v->name + shift,len);
+
+	FILL_INT(bvalue.vlen,  len);
+	FILL_INT(bvalue.ptype, 
+		*(v->name + shift) == '"' ? STR_TYPE :
+		(is_number(v->name + shift)?NUM_TYPE:CHR_TYPE)
+		);
+
+	COPY(block+offset,&bvalue,OFFSET(_bvalue,value)+len);
+
+	return off;
+}
+
+static int add_1_parameter(parameter *p,int offset)
+{
+	_bparam	  bparam;
+	value     *v  = p->default_values?p->default_values:p->values;
+	int       cnt = 0;
+	int       len = strlen(p->name);
+	int		  off = offset + OFFSET(_bparam,param) + len;
+
+	memset(&bparam,'*',sizeof(bparam));
+
+	strncpy(bparam.param, p->name,len);
+
+	FILL_INT(bparam.plen,  len);
+
+	while(v)
+	{
+		int shift = 0;
+		if(strcmp(p->name,"DATE") == 0 && strlen(v->name) == 8) shift = 2;
+
+		off = add_1_value(v,off,shift);
+		cnt++;
+		v = v->next;
+	}
+	
+
+	FILL_INT(bparam.nvalues,cnt);
+	COPY(block+offset,&bparam,OFFSET(_bparam,param)+len);
+	return off;
+}
+
+static int add_1_request(request *r,int offset)
+{
+	_subhdr   subhdr;
+	parameter *p  = r->params;
+	int       cnt = 0;
+	int		  off = offset + SUB_SIZE;
+
+
+	memset(&subhdr,'*',sizeof(subhdr));
+
+	FILL_INT(subhdr.shdrlen,OFFSET(_subhdr,nparms));
+	FILL_CHR(subhdr.action,r->name);
+	FILL_INT(subhdr.mode,1);
+	FILL_INT(subhdr.ccode,0);
+	FILL_INT(subhdr.escode,0);
+
+	while(p)
+	{
+		if(*(p->name) != '_' )
+		{
+			off = add_1_parameter(p,off);
+			cnt++;
+		}
+		p = p->next;
+	}
+	
+
+	FILL_INT(subhdr.nparms,cnt);
+	FILL_INT(subhdr.blklen,off-offset);
+	COPY(block+offset,&subhdr,SUB_SIZE);
+	return off;
+}
+
+
+char *buildblock(request *r,int actcls)
+{
+	_prmhdr prmhdr;
+	int       cnt = 0;
+	int		  off = PRM_SIZE;
+	char buf[10]; 
+	const char *s;
+	long t;
+	request *e = (request*)get_environ();
+
+	memset(block,0,sizeof(block));
+
+	memset(&prmhdr,'*',sizeof(prmhdr));
+
+	FILL_INT(prmhdr.hdrlen,PRM_SIZE);
+
+	s = getenv("ARCH");
+	s = s?s:"unk";
+	FILL_CHR(prmhdr.userid,s); 
+	FILL_CHR(prmhdr.compid,s); 
+
+	s = get_value(e,"user",0);
+	FILL_CHR(prmhdr.sendid,s?s:"???");
+
+
+	/* Expever should be uppercase */
+
+	upper_case(r,"EXPVER");
+	upper_case(r,"CFSPATH");
+	upper_case(r,"PASSWORD");
+
+
+	s = get_value(e,"account",0);
+	FILL_CHR(prmhdr.account,s?s:"ECFSUN");
+
+	gethostname(buf,sizeof(buf));
+	FILL_CHR(prmhdr.recid,buf);
+
+	if(s = getenv("QSUB_REQNAME"))
+	{
+		strncpy(buf,s,9);
+		buf[9] = 0;
+	}
+
+	FILL_CHR(prmhdr.userjob,buf);
+	FILL_INT(prmhdr.pswitch,mars.debug?8:0);
+	FILL_INT(prmhdr.hdrvers,2);
+
+	time(&t);
+	strftime(buf,10,"%y%m%d",gmtime(&t));
+	FILL_CHR(prmhdr.subdate,buf);
+	FILL_INT(prmhdr.recdate,getpid()); 
+
+	strftime(buf,10,"%H%M%S",gmtime(&t));
+	FILL_CHR(prmhdr.subtime,buf);
+	FILL_CHR(prmhdr.rectime,buf);
+	FILL_INT(prmhdr.nihdr,  0);
+	FILL_INT(prmhdr.actmod, 1);
+	FILL_INT(prmhdr.suberr, 0);
+	FILL_INT(prmhdr.status, 1);
+	FILL_INT(prmhdr.actcls, actcls);
+
+#ifdef ALL_REQS
+	while(r)
+	{
+		off = add_1_request(r,off);
+		cnt++;
+		r = r->next;
+	}
+#else
+
+	off = add_1_request(r,off);
+	cnt++;
+
+#endif
+
+
+	FILL_INT(prmhdr.noshdr, cnt);
+ 	FILL_INT(prmhdr.msglen, off);
+	COPY(block,&prmhdr,PRM_SIZE);
+
+	if(mars.debug)
+	{
+		request *u = procces_reply(block);
+		print_one_request(u);
+		free_all_requests(u);
+	}
+
+	return block;
+}
+
+static request *procces_subhdr(int *offset)
+{
+	_subhdr subhdr;
+	char    buf[256];
+	int n;
+	int i;
+	int off   = *offset;
+	request   *r1;
+	parameter *p1,*p2;
+	value     *v1,*v2;
+
+	COPY(&subhdr,block+(*offset),sizeof(subhdr));	
+
+	*offset += GET_INT(subhdr.shdrlen);
+
+	strcpy(buf,GET_CHR(subhdr.action));
+	i = strlen(buf);
+	while(i>=0 && (buf[i] == 0 || buf[i] == ' ')) buf[i--] = 0;
+
+	r1 = new_request(strcache(buf),NULL);
+
+	n = GET_INT(subhdr.nparms);
+
+	off += SUB_SIZE;
+
+	for(i=0;i<n;i++)
+	{
+		int len,j,cnt;
+		_bparam bparam;
+
+		COPY(&bparam,block+off,sizeof(bparam));
+
+		len = GET_INT(bparam.plen);
+		cnt = GET_INT(bparam.nvalues);
+
+		strncpy(buf,bparam.param,len); buf[len] = 0;
+
+		off += len + OFFSET(_bparam,param);
+
+
+		p2 = new_parameter(strcache(buf),NULL);
+		if(r1->params == NULL)
+			r1->params = p2;
+		else 
+			p1->next = p2;
+		p1 = p2;
+
+
+		for(j=0;j<cnt;j++)
+		{
+			_bvalue bvalue;
+			COPY(&bvalue,block+off,sizeof(bvalue));
+
+			len = GET_INT(bvalue.vlen);
+
+			strncpy(buf,bvalue.value,len); buf[len] = 0;
+
+			v2 = new_value(strcache(buf));
+			if(p2->values == NULL)
+				p2->values = v2;
+			else
+				v1->next = v2;
+			v1 = v2;
+
+			off += len + OFFSET(_bvalue,value);
+		}
+
+	}
+	return r1;
+
+}
+
+int actcls(char *block)
+{
+	_prmhdr prmhdr;
+	COPY(&prmhdr,block,sizeof(prmhdr));
+	return GET_INT(prmhdr.actcls);
+}
+
+void geterrors(char *block,int req,int *e1,int *e2,int *e3)
+{
+	_prmhdr prmhdr;
+	_subhdr subhdr;
+	int n,i;
+	int	off = PRM_SIZE;
+
+	COPY(&prmhdr,block,sizeof(prmhdr));
+
+	n   = GET_INT(prmhdr.noshdr);
+	*e1 = GET_INT(prmhdr.suberr);
+
+	for(i=0;i<n;i++)
+	{
+		COPY(&subhdr,block+off,sizeof(subhdr));	
+		*e2 = GET_INT(subhdr.ccode);
+		*e3 = GET_INT(subhdr.escode);
+		off += GET_INT(subhdr.shdrlen);
+		if(i == req) break;
+	}
+
+
+}
+
+request *procces_reply(char *block)
+{
+	_prmhdr prmhdr;
+	request *r1 = NULL;
+	request *r2 = NULL;
+	request *r3 = NULL;
+	int     off = PRM_SIZE;
+
+	int i;
+	int n;
+
+	COPY(&prmhdr,block,sizeof(prmhdr));
+
+	n = GET_INT(prmhdr.noshdr);
+
+	for(i=0;i<n;i++)
+	{
+
+		r3 = procces_subhdr(&off);
+
+		if(r1==NULL) r1 = r3; else  r2->next = r3;
+		r2 = r3;
+
+	}
+	return r1;
+
+}
+
diff --git a/src/libMars-ecregrid/ibmblk.h b/src/libMars-ecregrid/ibmblk.h
new file mode 100755
index 0000000..7c0ef09
--- /dev/null
+++ b/src/libMars-ecregrid/ibmblk.h
@@ -0,0 +1,95 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#define CHR_TYPE 1
+#define NUM_TYPE 2
+#define STR_TYPE 3
+
+#define CHECK_ALIGN
+
+#define MAX_NET_BLOCK	32768
+
+typedef struct {
+
+	char hdrlen[2];
+
+	char userid[4];
+	char compid[4];
+	char sendid[7];
+	char recid[7];
+
+	char subdate[6];
+	char subtime[6];
+
+	char recdate[6];
+	char rectime[6];
+
+	char nihdr[2];
+	char noshdr[2];
+
+	char suberr[2];
+	char status[1];
+
+	char actcls[1];
+	char msglen[5];
+
+	char actmod[1];
+	char account[8];
+	char userjob[7];
+	char pswitch[1];
+	char hdrvers[2];
+
+#ifdef CHECK_ALIGN
+	char __dummy[2];
+#endif
+
+} _prmhdr;
+
+
+typedef struct {
+
+	char shdrlen[2];
+	char action[8];
+	char mode[1];
+	char blklen[5];
+	char reser1[4];
+	char ccode[4];
+	char escode[4];
+	char reser2[2];
+	char nparms[3];
+
+#ifdef CHECK_ALIGN
+	char __dummy[2];
+#endif
+
+}_subhdr;
+
+typedef struct {
+	char nvalues[2];
+	char plen[2];
+	char param[256];
+} _bparam;
+
+typedef struct {
+	char ptype[1];
+	char vlen[2];
+	char value[256];
+} _bvalue;
+
+#ifdef CHECK_ALIGN 
+#define PRM_SIZE	OFFSET(_prmhdr,__dummy)
+#define SUB_SIZE	OFFSET(_subhdr,__dummy)
+#else
+#define PRM_SIZE	sizeof(_prmhdr)
+#define SUB_SIZE	sizeof(_subhdr)
+#endif
+
+request *procces_reply(char *block);
+char    *buildblock(request *cmds,int);
diff --git a/src/libMars-ecregrid/index.c b/src/libMars-ecregrid/index.c
new file mode 100644
index 0000000..57119f1
--- /dev/null
+++ b/src/libMars-ecregrid/index.c
@@ -0,0 +1,143 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include  "mars.h"
+
+void mars_grib_index_add(mars_grib_index* idx, const char* name, boolean s_ok, const char* s, boolean l_ok, long l, boolean d_ok, double d)
+{
+	mars_grib_map* m  = NEW_CLEAR(mars_grib_map);
+	m->name = strcache(name);
+	m->s_ok = s_ok;
+	m->s_value = strcache(s);
+	m->l_ok = l_ok;
+	m->l_value = l;
+	m->d_ok = d_ok;
+	m->d_value = d;
+
+	if(idx->head == NULL) 
+		idx->head = m;
+	else
+		idx->tail->next = m;
+
+	idx->tail = m;
+}
+
+mars_grib_index* mars_grib_index_new( file_offset offset, long length )
+{
+	mars_grib_index* idx = NEW_CLEAR( mars_grib_index );
+	idx->offset = offset;
+	idx->length = length;
+	return idx;
+}
+
+static void send_map( mstream* s, mars_grib_map* m )
+{
+	while( m )
+	{
+		stream_write_int(s,1);
+		stream_write_string(s, m->name);
+
+		stream_write_int(s,m->s_ok);
+		if(m->s_ok) stream_write_string(s, m->s_value);
+
+		stream_write_int(s,m->l_ok);
+		if(m->l_ok) stream_write_long(s, m->l_value);
+
+		stream_write_int(s,m->d_ok);
+		if(m->d_ok) stream_write_double(s, m->d_value);
+
+		m = m->next;
+	}
+	stream_write_int(s,0);
+}
+
+err mars_grib_index_send(mars_grib_index* idx, mstream* s)
+{
+	unsigned long count = 0;
+	mars_grib_index* p = idx;
+	while( p )
+	{	
+		count++;
+		p = p->next;
+	}
+	stream_write_ulong(s, count);
+
+	p = idx;
+	while( p )
+	{
+		stream_write_ulonglong(s,p->offset);	
+		stream_write_ulonglong(s,p->length);	
+
+		send_map(s, p->head);
+
+		p = p->next;
+	}
+	
+	if(s->error)
+	{
+		marslog(LOG_EROR,"Error occurred when sending GRIB index to server");
+	}
+
+	return s->error;
+}
+
+static void free_map( mars_grib_map* m )
+{
+	while( m )
+	{
+		mars_grib_map* next = m->next;
+		strfree(m->name);
+		strfree(m->s_value);
+		FREE( m );
+		m = next;
+	}
+}
+
+void mars_grib_index_free( mars_grib_index* idx )
+{
+	while( idx )
+	{
+		mars_grib_index* next = idx->next;
+		free_map( idx->head);
+		FREE( idx );
+		idx = next;
+	}
+}
+
+static void print_map( mars_grib_map* m )
+{
+	while( m )
+	{
+		mars_grib_map* next = m->next;
+		printf(" %s", m->name);
+		if(m->s_ok) printf(" s: %s",m->s_value);
+		if(m->l_ok) printf(" l: %ld",m->l_value);
+		if(m->d_ok) printf(" d: %g",m->d_value);
+		m = next;
+	}
+}
+
+void mars_grib_index_print( mars_grib_index* idx )
+{
+	while( idx )
+	{
+		mars_grib_index* next = idx->next;
+		
+		printf( "offset = %lld length = %lld", idx->offset, idx->length );
+		print_map( idx->head );
+		printf("\n");
+
+		idx = next;
+	}
+}
+
+
+
+
diff --git a/src/libMars-ecregrid/index.h b/src/libMars-ecregrid/index.h
new file mode 100644
index 0000000..0786276
--- /dev/null
+++ b/src/libMars-ecregrid/index.h
@@ -0,0 +1,38 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+typedef struct mars_grib_map {
+	struct mars_grib_map* next;
+
+	char* name;
+
+	boolean     s_ok;
+	char* s_value;
+
+	boolean  d_ok;
+	double   d_value;
+
+	boolean  l_ok;
+	long     l_value ;
+
+} mars_grib_map;
+
+typedef struct mars_grib_index {
+
+	struct mars_grib_index* next;
+
+	file_offset offset;
+	long    length;
+
+	mars_grib_map* head;
+	mars_grib_map* tail;
+
+
+} mars_grib_index;
diff --git a/src/libMars-ecregrid/lang.h b/src/libMars-ecregrid/lang.h
new file mode 100755
index 0000000..2f079ec
--- /dev/null
+++ b/src/libMars-ecregrid/lang.h
@@ -0,0 +1,67 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#ifndef _H_LANG_
+#define _H_LANG_
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+request   *expand(request *);
+
+
+request   *new_request(char *,parameter *);
+parameter *new_parameter(char *,value *);
+value     *new_value(char *);
+#if defined(__cplusplus) || defined(c_plusplus)
+}
+#endif
+
+
+typedef enum { t_val, t_or, t_and, t_not, t_eq,t_lt,t_gt,t_ne,t_ge,t_le,t_in, t_func} testop;
+
+typedef struct condition {
+	testop           op;
+	struct condition *left;
+	struct condition *right;
+}condition;
+
+typedef enum {a_set,a_unset,a_warning,a_error,a_exit,a_fail,a_info,a_mail, a_mailuser} actop;
+
+typedef struct action {
+	struct action *next;
+	actop         op;
+	void          *param;
+} action;
+
+
+typedef struct rule {
+	struct rule  *next;
+	condition    *test;
+	action       *doit;
+} rule;
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+rule      *new_rule(condition*,action*);
+condition *new_condition(testop,condition*,condition*);
+action    *new_action(actop,void*);
+
+rule      *read_chk(char*);
+boolean   chkrequest(rule*,request *);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+}
+#endif
+
+#endif
diff --git a/src/libMars-ecregrid/langl.c b/src/libMars-ecregrid/langl.c
new file mode 100644
index 0000000..c55938b
--- /dev/null
+++ b/src/libMars-ecregrid/langl.c
@@ -0,0 +1,2313 @@
+
+#line 3 "lex.yy_mars.c"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yy_marsconst const
+#else
+#define yy_marsconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_mars_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_mars_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yy_marsrestart(yy_marsin  )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_mars_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_mars_buffer_state *YY_BUFFER_STATE;
+#endif
+
+extern int yy_marsleng;
+
+extern FILE *yy_marsin, *yy_marsout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    /* Note: We specifically omit the test for yy_mars_rule_can_match_eol because it requires
+     *       access to the local variable yy_mars_act. Since yy_marsless() is a macro, it would break
+     *       existing scanners that call yy_marsless() from OUTSIDE yy_marslex. 
+     *       One obvious solution it to make yy_mars_act a global. I tried that, and saw
+     *       a 5% performance hit in a non-yy_marslineno scanner, because yy_mars_act is
+     *       normally declared as a register variable-- so it is not worth it.
+     */
+    #define  YY_LESS_LINENO(n) \
+            do { \
+                int yy_marsl;\
+                for ( yy_marsl = n; yy_marsl < yy_marsleng; ++yy_marsl )\
+                    if ( yy_marstext[yy_marsl] == '\n' )\
+                        --yy_marslineno;\
+            }while(0)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yy_marsless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yy_marstext. */ \
+        int yy_marsless_macro_arg = (n); \
+        YY_LESS_LINENO(yy_marsless_macro_arg);\
+		*yy_mars_cp = (yy_mars_hold_char); \
+		YY_RESTORE_YY_MORE_OFFSET \
+		(yy_mars_c_buf_p) = yy_mars_cp = yy_mars_bp + yy_marsless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up yy_marstext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yy_marsunput( c, (yy_marstext_ptr)  )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_mars_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_mars_buffer_state
+	{
+	FILE *yy_mars_input_file;
+
+	char *yy_mars_ch_buf;		/* input buffer */
+	char *yy_mars_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_mars_size_t yy_mars_buf_size;
+
+	/* Number of characters read into yy_mars_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_mars_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_mars_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_mars_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_mars_at_bol;
+
+    int yy_mars_bs_lineno; /**< The line count. */
+    int yy_mars_bs_column; /**< The column count. */
+    
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_mars_fill_buffer;
+
+	int yy_mars_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via yy_marsrestart()), so that the user can continue scanning by
+	 * just pointing yy_marsin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_mars_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_mars_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_mars_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_mars_buffer_stack) \
+                          ? (yy_mars_buffer_stack)[(yy_mars_buffer_stack_top)] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_mars_buffer_stack)[(yy_mars_buffer_stack_top)]
+
+/* yy_mars_hold_char holds the character lost when yy_marstext is formed. */
+static char yy_mars_hold_char;
+static int yy_mars_n_chars;		/* number of characters read into yy_mars_ch_buf */
+int yy_marsleng;
+
+/* Points to current character in buffer. */
+static char *yy_mars_c_buf_p = (char *) 0;
+static int yy_mars_init = 0;		/* whether we need to initialize */
+static int yy_mars_start = 0;	/* start state number */
+
+/* Flag which is used to allow yy_marswrap()'s to do buffer switches
+ * instead of setting up a fresh yy_marsin.  A bit of a hack ...
+ */
+static int yy_mars_did_buffer_switch_on_eof;
+
+void yy_marsrestart (FILE *input_file  );
+void yy_mars_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE yy_mars_create_buffer (FILE *file,int size  );
+void yy_mars_delete_buffer (YY_BUFFER_STATE b  );
+void yy_mars_flush_buffer (YY_BUFFER_STATE b  );
+void yy_marspush_buffer_state (YY_BUFFER_STATE new_buffer  );
+void yy_marspop_buffer_state (void );
+
+static void yy_marsensure_buffer_stack (void );
+static void yy_mars_load_buffer_state (void );
+static void yy_mars_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+
+#define YY_FLUSH_BUFFER yy_mars_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_mars_scan_buffer (char *base,yy_mars_size_t size  );
+YY_BUFFER_STATE yy_mars_scan_string (yy_marsconst char *yy_mars_str  );
+YY_BUFFER_STATE yy_mars_scan_bytes (yy_marsconst char *bytes,int len  );
+
+void *yy_marsalloc (yy_mars_size_t  );
+void *yy_marsrealloc (void *,yy_mars_size_t  );
+void yy_marsfree (void *  );
+
+#define yy_mars_new_buffer yy_mars_create_buffer
+
+#define yy_mars_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        yy_marsensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            yy_mars_create_buffer(yy_marsin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_mars_is_interactive = is_interactive; \
+	}
+
+#define yy_mars_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        yy_marsensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            yy_mars_create_buffer(yy_marsin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_mars_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_mars_at_bol)
+
+/* Begin user sect3 */
+
+typedef unsigned char YY_CHAR;
+
+FILE *yy_marsin = (FILE *) 0, *yy_marsout = (FILE *) 0;
+
+typedef int yy_mars_state_type;
+
+#define YY_FLEX_LEX_COMPAT
+extern int yy_marslineno;
+
+int yy_marslineno = 1;
+
+extern char yy_marstext[];
+
+static yy_mars_state_type yy_mars_get_previous_state (void );
+static yy_mars_state_type yy_mars_try_NUL_trans (yy_mars_state_type current_state  );
+static int yy_mars_get_next_buffer (void );
+static void yy_mars_fatal_error (yy_marsconst char msg[]  );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yy_marstext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	(yy_marstext_ptr) = yy_mars_bp; \
+	yy_marsleng = (size_t) (yy_mars_cp - yy_mars_bp); \
+	(yy_mars_hold_char) = *yy_mars_cp; \
+	*yy_mars_cp = '\0'; \
+	if ( yy_marsleng + (yy_mars_more_offset) >= YYLMAX ) \
+		YY_FATAL_ERROR( "token too large, exceeds YYLMAX" ); \
+	yy_mars_flex_strncpy( &yy_marstext[(yy_mars_more_offset)], (yy_marstext_ptr), yy_marsleng + 1 ); \
+	yy_marsleng += (yy_mars_more_offset); \
+	(yy_mars_prev_more_offset) = (yy_mars_more_offset); \
+	(yy_mars_more_offset) = 0; \
+	(yy_mars_c_buf_p) = yy_mars_cp;
+
+#define YY_NUM_RULES 25
+#define YY_END_OF_BUFFER 26
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_mars_trans_info
+	{
+	flex_int32_t yy_mars_verify;
+	flex_int32_t yy_mars_nxt;
+	};
+static yy_marsconst flex_int16_t yy_mars_acclist[76] =
+    {   0,
+       26,   24,   25,   22,   24,   25,   22,   25,    2,   24,
+       25,    3,   24,   25,    2,   24,   25,   24,   25,   24,
+       25,   20,   21,   24,   25,   20,   24,   25,    1,   24,
+       25,   22,   23,   21,   20,   20,   21,   20,   21,   20,
+       21,   20,   20,   21,   20,    5,   10,    9,   21,   21,
+       21,   21,   20,   21,   20,   21,   20,   21,   20,   21,
+        7,    8,   11,   21,   21,   18,   19,   14,   15,    6,
+       17,   12,    4,   13,   16
+    } ;
+
+static yy_marsconst flex_int16_t yy_mars_accept[95] =
+    {   0,
+        1,    1,    1,    2,    4,    7,    9,   12,   15,   18,
+       20,   22,   26,   29,   32,   33,   34,   34,   34,   34,
+       34,   34,   34,   34,   34,   34,   34,   34,   34,   35,
+       36,   38,   40,   42,   43,   45,   46,   46,   46,   46,
+       46,   47,   48,   48,   48,   49,   49,   49,   49,   49,
+       50,   51,   52,   53,   55,   57,   59,   61,   62,   62,
+       62,   62,   62,   62,   62,   63,   64,   64,   64,   64,
+       65,   66,   66,   67,   68,   68,   69,   70,   71,   71,
+       71,   72,   72,   72,   73,   73,   73,   73,   73,   74,
+       74,   75,   76,   76
+
+    } ;
+
+static yy_marsconst flex_int32_t yy_mars_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    4,    5,    6,    1,    7,    1,    8,    1,
+        1,    9,   10,    1,   11,   12,    1,   13,   13,   13,
+       13,   13,   13,   13,   13,   13,   13,   14,    1,    1,
+        1,    1,    1,    1,   15,   15,   15,   15,   16,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+        1,    1,    1,    1,   15,    1,   17,   15,   18,   19,
+
+       20,   21,   22,   23,   24,   15,   15,   25,   26,   27,
+       28,   15,   15,   29,   30,   31,   32,   15,   33,   34,
+       15,   15,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yy_marsconst flex_int32_t yy_mars_meta[35] =
+    {   0,
+        1,    2,    1,    1,    1,    1,    1,    1,    1,    2,
+        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+        2,    2,    2,    2
+    } ;
+
+static yy_marsconst flex_int16_t yy_mars_base[96] =
+    {   0,
+        0,  172,  180,  182,   33,   35,  175,  182,  182,   22,
+       45,   57,   64,  182,   38,  182,  151,   31,  160,   24,
+      159,  147,  145,  153,  149,  144,  153,   50,   69,   70,
+       81,   94,  113,   88,   74,   95,  150,  139,  143,  142,
+      182,   26,  141,  133,  182,  132,  142,  131,  131,  106,
+      146,    0,  121,   99,    0,  108,  132,  182,  130,  126,
+      131,  130,  126,  128,  182,  182,  124,  130,  122,  134,
+      133,  111,  182,  182,  107,  182,  106,  182,  105,  111,
+      182,  111,   98,  182,   95,   98,   91,   81,  182,   64,
+      182,  182,  182,   86,   62
+
+    } ;
+
+static yy_marsconst flex_int16_t yy_mars_def[96] =
+    {   0,
+       93,    1,   93,   93,   93,   93,   93,   93,   93,   93,
+       93,   94,   94,   93,   93,   93,   93,   93,   93,   93,
+       93,   93,   93,   93,   93,   93,   93,   93,   93,   95,
+       95,   95,   94,   94,   33,   95,   93,   93,   93,   93,
+       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
+       29,   29,   93,   95,   32,   32,   33,   93,   93,   93,
+       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
+       29,   93,   93,   93,   93,   93,   93,   93,   93,   93,
+       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
+       93,   93,    0,   93,   93
+
+    } ;
+
+static yy_marsconst flex_int16_t yy_mars_nxt[217] =
+    {   0,
+        4,    5,    6,    7,    8,    9,   10,    8,    4,    4,
+       11,   11,   12,    4,   13,   13,   13,   13,   13,   13,
+       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
+       13,   13,   13,   13,   15,   15,   15,   15,   17,   15,
+       15,   18,   19,   62,   41,   20,   63,   21,   22,   23,
+       42,   24,   25,   26,   27,   28,   28,   29,   30,   38,
+       28,   28,   29,   36,   39,   30,   31,   31,   32,   33,
+       30,   30,   35,   36,   36,   36,   35,   30,   50,   50,
+       51,   52,   30,   30,   53,   36,   57,   34,   53,   30,
+       31,   31,   92,   54,   30,   30,   30,   36,   36,   36,
+
+       30,   30,   91,   31,   31,   32,   55,   30,   30,   56,
+       90,   54,   30,   56,   30,   50,   50,   89,   70,   36,
+       54,   88,   31,   31,   32,   33,   30,   87,   35,   86,
+       50,   50,   35,   70,   85,   84,   53,   83,   82,   81,
+       53,   36,   36,   36,   57,   71,   70,   34,   80,   79,
+       78,   34,   77,   76,   75,   74,   73,   72,   71,   69,
+       68,   67,   66,   65,   64,   61,   60,   59,   58,   49,
+       48,   47,   46,   45,   44,   43,   40,   37,   16,   93,
+       14,    3,   93,   93,   93,   93,   93,   93,   93,   93,
+       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
+
+       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
+       93,   93,   93,   93,   93,   93
+    } ;
+
+static yy_marsconst flex_int16_t yy_mars_chk[217] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    5,    5,    6,    6,   10,   15,
+       15,   10,   10,   42,   20,   10,   42,   10,   10,   10,
+       20,   10,   10,   10,   10,   11,   11,   11,   12,   18,
+       28,   28,   28,   95,   18,   13,   12,   12,   12,   12,
+       12,   30,   12,   13,   13,   13,   12,   13,   29,   29,
+       29,   29,   31,   30,   29,   35,   35,   94,   29,   34,
+       31,   31,   90,   31,   31,   32,   36,   34,   34,   34,
+
+       54,   34,   88,   32,   32,   32,   32,   32,   36,   32,
+       87,   54,   54,   32,   33,   50,   50,   86,   50,   56,
+       56,   85,   33,   33,   33,   33,   33,   83,   33,   82,
+       53,   53,   33,   53,   80,   79,   53,   77,   75,   72,
+       53,   57,   57,   57,   57,   71,   70,   57,   69,   68,
+       67,   57,   64,   63,   62,   61,   60,   59,   51,   49,
+       48,   47,   46,   44,   43,   40,   39,   38,   37,   27,
+       26,   25,   24,   23,   22,   21,   19,   17,    7,    3,
+        2,   93,   93,   93,   93,   93,   93,   93,   93,   93,
+       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
+
+       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
+       93,   93,   93,   93,   93,   93
+    } ;
+
+/* Table of booleans, true if rule could match eol. */
+static yy_marsconst flex_int32_t yy_mars_rule_can_match_eol[26] =
+    {   0,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 1, 0, 0, 0,     };
+
+extern int yy_mars_flex_debug;
+int yy_mars_flex_debug = 0;
+
+static yy_mars_state_type *yy_mars_state_buf=0, *yy_mars_state_ptr=0;
+static char *yy_mars_full_match;
+static int yy_mars_lp;
+#define REJECT \
+{ \
+*yy_mars_cp = (yy_mars_hold_char); /* undo effects of setting up yy_marstext */ \
+yy_mars_cp = (yy_mars_full_match); /* restore poss. backed-over text */ \
+++(yy_mars_lp); \
+goto find_rule; \
+}
+
+static int yy_mars_more_offset = 0;
+static int yy_mars_prev_more_offset = 0;
+#define yy_marsmore() ((yy_mars_more_offset) = yy_mars_flex_strlen( yy_marstext ))
+#define YY_NEED_STRLEN
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET \
+	{ \
+	(yy_mars_more_offset) = (yy_mars_prev_more_offset); \
+	yy_marsleng -= (yy_mars_more_offset); \
+	}
+#ifndef YYLMAX
+#define YYLMAX 8192
+#endif
+
+char yy_marstext[YYLMAX];
+char *yy_marstext_ptr;
+#line 1 "langl.l"
+#line 2 "langl.l"
+
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+
+#undef YYLMAX
+#define YYLMAX 1024
+
+#include <setjmp.h>
+#include <stdarg.h>
+static jmp_buf env;
+#define exit(a)    jumpexit(a)
+#define fprintf    jumpprtf
+
+static void include(const char*);
+/* void yy_marserror(char*); */
+
+#define STRIP_SPACES
+static char *clean(char *);
+
+#ifndef METVIEW
+#define SHOW_INPUT
+#endif
+
+
+#ifdef FLEX_SCANNER
+#define YY_INPUT(buf,result,max_size) \
+               { \
+               int c = getc(yy_marsin); \
+               result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \
+               }
+#endif
+
+
+
+#ifdef SHOW_INPUT
+/* These two routines are very inneficient .. */
+
+#define MAXLINE 256
+static int  echomode;
+static char line[MAXLINE];
+static int  charpos = 0;
+
+static void showc(char);
+#ifdef hpux
+static void shows(unsigned char*);
+#else
+static void shows(char*);
+#endif
+
+
+#else
+
+#define showc(x) 
+#define shows(x)
+#define syntax_echo(x)
+
+#endif
+
+
+static void jumpexit(int n)
+{
+	longjmp(env,1);
+}
+
+static void jumpprtf(FILE *f,char *fmt,...)
+{
+	va_list list;
+	char buf[1024];
+	int len;
+	va_start(list,fmt);
+	vsprintf(buf, fmt, list);
+	va_end(list);
+
+	len = strlen(buf);
+	if(len && buf[len-1] == '\n')
+		buf[len-1] = 0;
+
+	marslog(LOG_EROR,"Parser error: %s",buf);
+}
+
+
+#line 671 "lex.yy_mars.c"
+
+#define INITIAL 0
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_mars_init_globals (void );
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int yy_marslex_destroy (void );
+
+int yy_marsget_debug (void );
+
+void yy_marsset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE yy_marsget_extra (void );
+
+void yy_marsset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *yy_marsget_in (void );
+
+void yy_marsset_in  (FILE * in_str  );
+
+FILE *yy_marsget_out (void );
+
+void yy_marsset_out  (FILE * out_str  );
+
+int yy_marsget_leng (void );
+
+char *yy_marsget_text (void );
+
+int yy_marsget_lineno (void );
+
+void yy_marsset_lineno (int line_number  );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yy_marswrap (void );
+#else
+extern int yy_marswrap (void );
+#endif
+#endif
+
+    static void yy_marsunput (int c,char *buf_ptr  );
+    
+#ifndef yy_marstext_ptr
+static void yy_mars_flex_strncpy (char *,yy_marsconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_mars_flex_strlen (yy_marsconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yy_marsinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yy_marstext, yy_marsleng, 1, yy_marsout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_mars_is_interactive ) \
+		{ \
+		int c = '*'; \
+		int n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( yy_marsin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( yy_marsin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, yy_marsin))==0 && ferror(yy_marsin)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(yy_marsin); \
+			} \
+		}\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yy_marsterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yy_marsterminate
+#define yy_marsterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_mars_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yy_marslex (void);
+
+#define YY_DECL int yy_marslex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yy_marstext and yy_marsleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	if ( yy_marsleng > 0 ) \
+		YY_CURRENT_BUFFER_LVALUE->yy_mars_at_bol = \
+				(yy_marstext[yy_marsleng - 1] == '\n'); \
+	YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_mars_state_type yy_mars_current_state;
+	register char *yy_mars_cp, *yy_mars_bp;
+	register int yy_mars_act;
+    
+#line 96 "langl.l"
+
+
+
+#line 860 "lex.yy_mars.c"
+
+	if ( !(yy_mars_init) )
+		{
+		(yy_mars_init) = 1;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+        /* Create the reject buffer large enough to save one state per allowed character. */
+        if ( ! (yy_mars_state_buf) )
+            (yy_mars_state_buf) = (yy_mars_state_type *)yy_marsalloc(YY_STATE_BUF_SIZE  );
+            if ( ! (yy_mars_state_buf) )
+                YY_FATAL_ERROR( "out of dynamic memory in yy_marslex()" );
+
+		if ( ! (yy_mars_start) )
+			(yy_mars_start) = 1;	/* first start state */
+
+		if ( ! yy_marsin )
+			yy_marsin = stdin;
+
+		if ( ! yy_marsout )
+			yy_marsout = stdout;
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			yy_marsensure_buffer_stack ();
+			YY_CURRENT_BUFFER_LVALUE =
+				yy_mars_create_buffer(yy_marsin,YY_BUF_SIZE );
+		}
+
+		yy_mars_load_buffer_state( );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_mars_cp = (yy_mars_c_buf_p);
+
+		/* Support of yy_marstext. */
+		*yy_mars_cp = (yy_mars_hold_char);
+
+		/* yy_mars_bp points to the position in yy_mars_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_mars_bp = yy_mars_cp;
+
+		yy_mars_current_state = (yy_mars_start);
+		yy_mars_current_state += YY_AT_BOL();
+
+		(yy_mars_state_ptr) = (yy_mars_state_buf);
+		*(yy_mars_state_ptr)++ = yy_mars_current_state;
+
+yy_mars_match:
+		do
+			{
+			register YY_CHAR yy_mars_c = yy_mars_ec[YY_SC_TO_UI(*yy_mars_cp)];
+			while ( yy_mars_chk[yy_mars_base[yy_mars_current_state] + yy_mars_c] != yy_mars_current_state )
+				{
+				yy_mars_current_state = (int) yy_mars_def[yy_mars_current_state];
+				if ( yy_mars_current_state >= 94 )
+					yy_mars_c = yy_mars_meta[(unsigned int) yy_mars_c];
+				}
+			yy_mars_current_state = yy_mars_nxt[yy_mars_base[yy_mars_current_state] + (unsigned int) yy_mars_c];
+			*(yy_mars_state_ptr)++ = yy_mars_current_state;
+			++yy_mars_cp;
+			}
+		while ( yy_mars_base[yy_mars_current_state] != 182 );
+
+yy_mars_find_action:
+		yy_mars_current_state = *--(yy_mars_state_ptr);
+		(yy_mars_lp) = yy_mars_accept[yy_mars_current_state];
+find_rule: /* we branch to this label when backing up */
+		for ( ; ; ) /* until we find what rule we matched */
+			{
+			if ( (yy_mars_lp) && (yy_mars_lp) < yy_mars_accept[yy_mars_current_state + 1] )
+				{
+				yy_mars_act = yy_mars_acclist[(yy_mars_lp)];
+					{
+					(yy_mars_full_match) = yy_mars_cp;
+					break;
+					}
+				}
+			--yy_mars_cp;
+			yy_mars_current_state = *--(yy_mars_state_ptr);
+			(yy_mars_lp) = yy_mars_accept[yy_mars_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+		if ( yy_mars_act != YY_END_OF_BUFFER && yy_mars_rule_can_match_eol[yy_mars_act] )
+			{
+			int yy_marsl;
+			for ( yy_marsl = (yy_mars_prev_more_offset); yy_marsl < yy_marsleng; ++yy_marsl )
+				if ( yy_marstext[yy_marsl] == '\n' )
+					   
+    yy_marslineno++;
+;
+			}
+
+do_action:	/* This label is used only to access EOF actions. */
+
+		switch ( yy_mars_act )
+	{ /* beginning of action switch */
+case 1:
+YY_RULE_SETUP
+#line 99 "langl.l"
+{ int c; 
+			 shows(yy_marstext);
+			 while((c = input()) && (c != '\n')) showc(c); showc(c);
+			 if(c == '\n') unput(c);
+		    }
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 105 "langl.l"
+{ int c; shows(yy_marstext);while((c = input()) && (c != '\n')) showc(c); showc(c);}
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 108 "langl.l"
+{ 
+				   int c,q = yy_marstext[0]; 
+
+				   if(q == '\'') yy_marsleng = 0;
+
+				   while((c = input()) && c != q && c != '\n') 
+				   {
+					   if(c == '\\') yy_marstext[yy_marsleng++] = input();
+					   else yy_marstext[yy_marsleng++] =  c;
+				   }
+
+				   if(c == '"') 
+					yy_marstext[yy_marsleng++] = c;
+
+				   yy_marstext[yy_marsleng++] = 0;
+				   shows(yy_marstext);
+				   yy_marslval.str = strcache(yy_marstext); 
+				   return WORD;
+				 }
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 128 "langl.l"
+{ 
+					char word[1024];
+					int  i = 0;
+					int c;
+					while((c = input()) && isspace(c) && c != '\n') ;
+					while(c && !isspace(c) && c != '\n') 
+					{
+						word[i++] = c;
+						c = input();
+					}
+					word[i] = 0;
+					include(no_quotes(word));
+				 }
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 142 "langl.l"
+{ shows(yy_marstext); return IF; }
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 143 "langl.l"
+{ shows(yy_marstext); return THEN; }
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 144 "langl.l"
+{ shows(yy_marstext); return AND; }
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 145 "langl.l"
+{ shows(yy_marstext); return NOT; }
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 146 "langl.l"
+{ shows(yy_marstext); return OR; }
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 147 "langl.l"
+{ shows(yy_marstext); return IN; }
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 148 "langl.l"
+{ shows(yy_marstext); return SET; }
+	YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 149 "langl.l"
+{ shows(yy_marstext); return UNSET; }
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 150 "langl.l"
+{ shows(yy_marstext); return WARNING; }
+	YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 151 "langl.l"
+{ shows(yy_marstext); return INFO; }
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 152 "langl.l"
+{ shows(yy_marstext); return MAIL; }
+	YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 153 "langl.l"
+{ shows(yy_marstext); return MAILUSER; }
+	YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 154 "langl.l"
+{ shows(yy_marstext); return ERROR; }
+	YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 155 "langl.l"
+{ shows(yy_marstext); return EXIT; }
+	YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 156 "langl.l"
+{ shows(yy_marstext); return FAIL; }
+	YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 158 "langl.l"
+{ shows(yy_marstext); yy_marslval.str = clean(yy_marstext); return WORD; }
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 159 "langl.l"
+{ shows(yy_marstext); yy_marslval.str = clean(yy_marstext); return WORD; }
+	YY_BREAK
+case 22:
+/* rule 22 can match eol */
+YY_RULE_SETUP
+#line 160 "langl.l"
+{ shows(yy_marstext); }
+	YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 161 "langl.l"
+{ shows(yy_marstext); } 
+	YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 162 "langl.l"
+{ showc(*yy_marstext); return *yy_marstext; }
+	YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 163 "langl.l"
+ECHO;
+	YY_BREAK
+#line 1123 "lex.yy_mars.c"
+			case YY_STATE_EOF(INITIAL):
+				yy_marsterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_mars_amount_of_matched_text = (int) (yy_mars_cp - (yy_marstext_ptr)) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_mars_cp = (yy_mars_hold_char);
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_mars_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed yy_marsin at a new source and called
+			 * yy_marslex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			(yy_mars_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_mars_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_mars_input_file = yy_marsin;
+			YY_CURRENT_BUFFER_LVALUE->yy_mars_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_mars_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_mars_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( (yy_mars_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf[(yy_mars_n_chars)] )
+			{ /* This was really a NUL. */
+			yy_mars_state_type yy_mars_next_state;
+
+			(yy_mars_c_buf_p) = (yy_marstext_ptr) + yy_mars_amount_of_matched_text;
+
+			yy_mars_current_state = yy_mars_get_previous_state(  );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_mars_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_mars_next_state = yy_mars_try_NUL_trans( yy_mars_current_state );
+
+			yy_mars_bp = (yy_marstext_ptr) + YY_MORE_ADJ;
+
+			if ( yy_mars_next_state )
+				{
+				/* Consume the NUL. */
+				yy_mars_cp = ++(yy_mars_c_buf_p);
+				yy_mars_current_state = yy_mars_next_state;
+				goto yy_mars_match;
+				}
+
+			else
+				{
+				yy_mars_cp = (yy_mars_c_buf_p);
+				goto yy_mars_find_action;
+				}
+			}
+
+		else switch ( yy_mars_get_next_buffer(  ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				(yy_mars_did_buffer_switch_on_eof) = 0;
+
+				if ( yy_marswrap( ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_mars_get_next_buffer() to have set up
+					 * yy_marstext, we can now set up
+					 * yy_mars_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					(yy_mars_c_buf_p) = (yy_marstext_ptr) + YY_MORE_ADJ;
+
+					yy_mars_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! (yy_mars_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				(yy_mars_c_buf_p) =
+					(yy_marstext_ptr) + yy_mars_amount_of_matched_text;
+
+				yy_mars_current_state = yy_mars_get_previous_state(  );
+
+				yy_mars_cp = (yy_mars_c_buf_p);
+				yy_mars_bp = (yy_marstext_ptr) + YY_MORE_ADJ;
+				goto yy_mars_match;
+
+			case EOB_ACT_LAST_MATCH:
+				(yy_mars_c_buf_p) =
+				&YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf[(yy_mars_n_chars)];
+
+				yy_mars_current_state = yy_mars_get_previous_state(  );
+
+				yy_mars_cp = (yy_mars_c_buf_p);
+				yy_mars_bp = (yy_marstext_ptr) + YY_MORE_ADJ;
+				goto yy_mars_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of yy_marslex */
+
+/* yy_mars_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_mars_get_next_buffer (void)
+{
+    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf;
+	register char *source = (yy_marstext_ptr);
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( (yy_mars_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf[(yy_mars_n_chars) + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_mars_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( (yy_mars_c_buf_p) - (yy_marstext_ptr) - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) ((yy_mars_c_buf_p) - (yy_marstext_ptr)) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_mars_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_mars_n_chars = (yy_mars_n_chars) = 0;
+
+	else
+		{
+			int num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_mars_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf[number_to_move]),
+			(yy_mars_n_chars), (size_t) num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_mars_n_chars = (yy_mars_n_chars);
+		}
+
+	if ( (yy_mars_n_chars) == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			yy_marsrestart(yy_marsin  );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_mars_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	if ((yy_mars_size_t) ((yy_mars_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_mars_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_mars_size_t new_size = (yy_mars_n_chars) + number_to_move + ((yy_mars_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf = (char *) yy_marsrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_mars_get_next_buffer()" );
+	}
+
+	(yy_mars_n_chars) += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf[(yy_mars_n_chars)] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf[(yy_mars_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+	(yy_marstext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_mars_get_previous_state - get the state just before the EOB char was reached */
+
+    static yy_mars_state_type yy_mars_get_previous_state (void)
+{
+	register yy_mars_state_type yy_mars_current_state;
+	register char *yy_mars_cp;
+    
+	yy_mars_current_state = (yy_mars_start);
+	yy_mars_current_state += YY_AT_BOL();
+
+	(yy_mars_state_ptr) = (yy_mars_state_buf);
+	*(yy_mars_state_ptr)++ = yy_mars_current_state;
+
+	for ( yy_mars_cp = (yy_marstext_ptr) + YY_MORE_ADJ; yy_mars_cp < (yy_mars_c_buf_p); ++yy_mars_cp )
+		{
+		register YY_CHAR yy_mars_c = (*yy_mars_cp ? yy_mars_ec[YY_SC_TO_UI(*yy_mars_cp)] : 1);
+		while ( yy_mars_chk[yy_mars_base[yy_mars_current_state] + yy_mars_c] != yy_mars_current_state )
+			{
+			yy_mars_current_state = (int) yy_mars_def[yy_mars_current_state];
+			if ( yy_mars_current_state >= 94 )
+				yy_mars_c = yy_mars_meta[(unsigned int) yy_mars_c];
+			}
+		yy_mars_current_state = yy_mars_nxt[yy_mars_base[yy_mars_current_state] + (unsigned int) yy_mars_c];
+		*(yy_mars_state_ptr)++ = yy_mars_current_state;
+		}
+
+	return yy_mars_current_state;
+}
+
+/* yy_mars_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_mars_try_NUL_trans( current_state );
+ */
+    static yy_mars_state_type yy_mars_try_NUL_trans  (yy_mars_state_type yy_mars_current_state )
+{
+	register int yy_mars_is_jam;
+    
+	register YY_CHAR yy_mars_c = 1;
+	while ( yy_mars_chk[yy_mars_base[yy_mars_current_state] + yy_mars_c] != yy_mars_current_state )
+		{
+		yy_mars_current_state = (int) yy_mars_def[yy_mars_current_state];
+		if ( yy_mars_current_state >= 94 )
+			yy_mars_c = yy_mars_meta[(unsigned int) yy_mars_c];
+		}
+	yy_mars_current_state = yy_mars_nxt[yy_mars_base[yy_mars_current_state] + (unsigned int) yy_mars_c];
+	yy_mars_is_jam = (yy_mars_current_state == 93);
+	if ( ! yy_mars_is_jam )
+		*(yy_mars_state_ptr)++ = yy_mars_current_state;
+
+	return yy_mars_is_jam ? 0 : yy_mars_current_state;
+}
+
+    static void yy_marsunput (int c, register char * yy_mars_bp )
+{
+	register char *yy_mars_cp;
+    
+    yy_mars_cp = (yy_mars_c_buf_p);
+
+	/* undo effects of setting up yy_marstext */
+	*yy_mars_cp = (yy_mars_hold_char);
+
+	if ( yy_mars_cp < YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = (yy_mars_n_chars) + 2;
+		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_mars_buf_size + 2];
+		register char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf[number_to_move];
+
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf )
+			*--dest = *--source;
+
+		yy_mars_cp += (int) (dest - source);
+		yy_mars_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_mars_n_chars =
+			(yy_mars_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_mars_buf_size;
+
+		if ( yy_mars_cp < YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_mars_cp = (char) c;
+
+    if ( c == '\n' ){
+        --yy_marslineno;
+    }
+
+	(yy_marstext_ptr) = yy_mars_bp;
+	(yy_mars_hold_char) = *yy_mars_cp;
+	(yy_mars_c_buf_p) = yy_mars_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yy_marsinput (void)
+#else
+    static int input  (void)
+#endif
+
+{
+	int c;
+    
+	*(yy_mars_c_buf_p) = (yy_mars_hold_char);
+
+	if ( *(yy_mars_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_mars_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( (yy_mars_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf[(yy_mars_n_chars)] )
+			/* This was really a NUL. */
+			*(yy_mars_c_buf_p) = '\0';
+
+		else
+			{ /* need more input */
+			int offset = (yy_mars_c_buf_p) - (yy_marstext_ptr);
+			++(yy_mars_c_buf_p);
+
+			switch ( yy_mars_get_next_buffer(  ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_mars_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					yy_marsrestart(yy_marsin );
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( yy_marswrap( ) )
+						return EOF;
+
+					if ( ! (yy_mars_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yy_marsinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					(yy_mars_c_buf_p) = (yy_marstext_ptr) + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) (yy_mars_c_buf_p);	/* cast for 8-bit char's */
+	*(yy_mars_c_buf_p) = '\0';	/* preserve yy_marstext */
+	(yy_mars_hold_char) = *++(yy_mars_c_buf_p);
+
+	YY_CURRENT_BUFFER_LVALUE->yy_mars_at_bol = (c == '\n');
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_mars_at_bol )
+		   
+    yy_marslineno++;
+;
+
+	return c;
+}
+#endif	/* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * 
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+    void yy_marsrestart  (FILE * input_file )
+{
+    
+	if ( ! YY_CURRENT_BUFFER ){
+        yy_marsensure_buffer_stack ();
+		YY_CURRENT_BUFFER_LVALUE =
+            yy_mars_create_buffer(yy_marsin,YY_BUF_SIZE );
+	}
+
+	yy_mars_init_buffer(YY_CURRENT_BUFFER,input_file );
+	yy_mars_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * 
+ */
+    void yy_mars_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+{
+    
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		yy_marspop_buffer_state();
+	 *		yy_marspush_buffer_state(new_buffer);
+     */
+	yy_marsensure_buffer_stack ();
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_mars_c_buf_p) = (yy_mars_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_mars_buf_pos = (yy_mars_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_mars_n_chars = (yy_mars_n_chars);
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	yy_mars_load_buffer_state( );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (yy_marswrap()) processing, but the only time this flag
+	 * is looked at is after yy_marswrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	(yy_mars_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_mars_load_buffer_state  (void)
+{
+    	(yy_mars_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_mars_n_chars;
+	(yy_marstext_ptr) = (yy_mars_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_mars_buf_pos;
+	yy_marsin = YY_CURRENT_BUFFER_LVALUE->yy_mars_input_file;
+	(yy_mars_hold_char) = *(yy_mars_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * 
+ * @return the allocated buffer state.
+ */
+    YY_BUFFER_STATE yy_mars_create_buffer  (FILE * file, int  size )
+{
+	YY_BUFFER_STATE b;
+    
+	b = (YY_BUFFER_STATE) yy_marsalloc(sizeof( struct yy_mars_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_mars_create_buffer()" );
+
+	b->yy_mars_buf_size = size;
+
+	/* yy_mars_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_mars_ch_buf = (char *) yy_marsalloc(b->yy_mars_buf_size + 2  );
+	if ( ! b->yy_mars_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_mars_create_buffer()" );
+
+	b->yy_mars_is_our_buffer = 1;
+
+	yy_mars_init_buffer(b,file );
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_mars_create_buffer()
+ * 
+ */
+    void yy_mars_delete_buffer (YY_BUFFER_STATE  b )
+{
+    
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_mars_is_our_buffer )
+		yy_marsfree((void *) b->yy_mars_ch_buf  );
+
+	yy_marsfree((void *) b  );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+    
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yy_marsrestart() or at EOF.
+ */
+    static void yy_mars_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+
+{
+	int oerrno = errno;
+    
+	yy_mars_flush_buffer(b );
+
+	b->yy_mars_input_file = file;
+	b->yy_mars_fill_buffer = 1;
+
+    /* If b is the current buffer, then yy_mars_init_buffer was _probably_
+     * called from yy_marsrestart() or through yy_mars_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_mars_bs_lineno = 1;
+        b->yy_mars_bs_column = 0;
+    }
+
+        b->yy_mars_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+    
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * 
+ */
+    void yy_mars_flush_buffer (YY_BUFFER_STATE  b )
+{
+    	if ( ! b )
+		return;
+
+	b->yy_mars_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_mars_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_mars_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_mars_buf_pos = &b->yy_mars_ch_buf[0];
+
+	b->yy_mars_at_bol = 1;
+	b->yy_mars_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		yy_mars_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  
+ */
+void yy_marspush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+    	if (new_buffer == NULL)
+		return;
+
+	yy_marsensure_buffer_stack();
+
+	/* This block is copied from yy_mars_switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_mars_c_buf_p) = (yy_mars_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_mars_buf_pos = (yy_mars_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_mars_n_chars = (yy_mars_n_chars);
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		(yy_mars_buffer_stack_top)++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from yy_mars_switch_to_buffer. */
+	yy_mars_load_buffer_state( );
+	(yy_mars_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  
+ */
+void yy_marspop_buffer_state (void)
+{
+    	if (!YY_CURRENT_BUFFER)
+		return;
+
+	yy_mars_delete_buffer(YY_CURRENT_BUFFER );
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if ((yy_mars_buffer_stack_top) > 0)
+		--(yy_mars_buffer_stack_top);
+
+	if (YY_CURRENT_BUFFER) {
+		yy_mars_load_buffer_state( );
+		(yy_mars_did_buffer_switch_on_eof) = 1;
+	}
+}
+
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+static void yy_marsensure_buffer_stack (void)
+{
+	int num_to_alloc;
+    
+	if (!(yy_mars_buffer_stack)) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		(yy_mars_buffer_stack) = (struct yy_mars_buffer_state**)yy_marsalloc
+								(num_to_alloc * sizeof(struct yy_mars_buffer_state*)
+								);
+		if ( ! (yy_mars_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_marsensure_buffer_stack()" );
+								  
+		memset((yy_mars_buffer_stack), 0, num_to_alloc * sizeof(struct yy_mars_buffer_state*));
+				
+		(yy_mars_buffer_stack_max) = num_to_alloc;
+		(yy_mars_buffer_stack_top) = 0;
+		return;
+	}
+
+	if ((yy_mars_buffer_stack_top) >= ((yy_mars_buffer_stack_max)) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = (yy_mars_buffer_stack_max) + grow_size;
+		(yy_mars_buffer_stack) = (struct yy_mars_buffer_state**)yy_marsrealloc
+								((yy_mars_buffer_stack),
+								num_to_alloc * sizeof(struct yy_mars_buffer_state*)
+								);
+		if ( ! (yy_mars_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_marsensure_buffer_stack()" );
+
+		/* zero only the new slots.*/
+		memset((yy_mars_buffer_stack) + (yy_mars_buffer_stack_max), 0, grow_size * sizeof(struct yy_mars_buffer_state*));
+		(yy_mars_buffer_stack_max) = num_to_alloc;
+	}
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * 
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE yy_mars_scan_buffer  (char * base, yy_mars_size_t  size )
+{
+	YY_BUFFER_STATE b;
+    
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) yy_marsalloc(sizeof( struct yy_mars_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_mars_scan_buffer()" );
+
+	b->yy_mars_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_mars_buf_pos = b->yy_mars_ch_buf = base;
+	b->yy_mars_is_our_buffer = 0;
+	b->yy_mars_input_file = 0;
+	b->yy_mars_n_chars = b->yy_mars_buf_size;
+	b->yy_mars_is_interactive = 0;
+	b->yy_mars_at_bol = 1;
+	b->yy_mars_fill_buffer = 0;
+	b->yy_mars_buffer_status = YY_BUFFER_NEW;
+
+	yy_mars_switch_to_buffer(b  );
+
+	return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yy_marslex() will
+ * scan from a @e copy of @a str.
+ * @param yy_marsstr a NUL-terminated string to scan
+ * 
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       yy_mars_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_mars_scan_string (yy_marsconst char * yy_marsstr )
+{
+    
+	return yy_mars_scan_bytes(yy_marsstr,strlen(yy_marsstr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yy_marslex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * 
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_mars_scan_bytes  (yy_marsconst char * yy_marsbytes, int  _yy_marsbytes_len )
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_mars_size_t n;
+	int i;
+    
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yy_marsbytes_len + 2;
+	buf = (char *) yy_marsalloc(n  );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_mars_scan_bytes()" );
+
+	for ( i = 0; i < _yy_marsbytes_len; ++i )
+		buf[i] = yy_marsbytes[i];
+
+	buf[_yy_marsbytes_len] = buf[_yy_marsbytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = yy_mars_scan_buffer(buf,n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in yy_mars_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_mars_is_our_buffer = 1;
+
+	return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_mars_fatal_error (yy_marsconst char* msg )
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yy_marsless() so it works in section 3 code. */
+
+#undef yy_marsless
+#define yy_marsless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yy_marstext. */ \
+        int yy_marsless_macro_arg = (n); \
+        YY_LESS_LINENO(yy_marsless_macro_arg);\
+		yy_marstext[yy_marsleng] = (yy_mars_hold_char); \
+		(yy_mars_c_buf_p) = yy_marstext + yy_marsless_macro_arg; \
+		(yy_mars_hold_char) = *(yy_mars_c_buf_p); \
+		*(yy_mars_c_buf_p) = '\0'; \
+		yy_marsleng = yy_marsless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ * 
+ */
+int yy_marsget_lineno  (void)
+{
+        
+    return yy_marslineno;
+}
+
+/** Get the input stream.
+ * 
+ */
+FILE *yy_marsget_in  (void)
+{
+        return yy_marsin;
+}
+
+/** Get the output stream.
+ * 
+ */
+FILE *yy_marsget_out  (void)
+{
+        return yy_marsout;
+}
+
+/** Get the length of the current token.
+ * 
+ */
+int yy_marsget_leng  (void)
+{
+        return yy_marsleng;
+}
+
+/** Get the current token.
+ * 
+ */
+
+char *yy_marsget_text  (void)
+{
+        return yy_marstext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * 
+ */
+void yy_marsset_lineno (int  line_number )
+{
+    
+    yy_marslineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * 
+ * @see yy_mars_switch_to_buffer
+ */
+void yy_marsset_in (FILE *  in_str )
+{
+        yy_marsin = in_str ;
+}
+
+void yy_marsset_out (FILE *  out_str )
+{
+        yy_marsout = out_str ;
+}
+
+int yy_marsget_debug  (void)
+{
+        return yy_mars_flex_debug;
+}
+
+void yy_marsset_debug (int  bdebug )
+{
+        yy_mars_flex_debug = bdebug ;
+}
+
+static int yy_mars_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from yy_marslex_destroy(), so don't allocate here.
+     */
+
+    /* We do not touch yy_marslineno unless the option is enabled. */
+    yy_marslineno =  1;
+    
+    (yy_mars_buffer_stack) = 0;
+    (yy_mars_buffer_stack_top) = 0;
+    (yy_mars_buffer_stack_max) = 0;
+    (yy_mars_c_buf_p) = (char *) 0;
+    (yy_mars_init) = 0;
+    (yy_mars_start) = 0;
+
+    (yy_mars_state_buf) = 0;
+    (yy_mars_state_ptr) = 0;
+    (yy_mars_full_match) = 0;
+    (yy_mars_lp) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    yy_marsin = stdin;
+    yy_marsout = stdout;
+#else
+    yy_marsin = (FILE *) 0;
+    yy_marsout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * yy_marslex_init()
+     */
+    return 0;
+}
+
+/* yy_marslex_destroy is for both reentrant and non-reentrant scanners. */
+int yy_marslex_destroy  (void)
+{
+    
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		yy_mars_delete_buffer(YY_CURRENT_BUFFER  );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		yy_marspop_buffer_state();
+	}
+
+	/* Destroy the stack itself. */
+	yy_marsfree((yy_mars_buffer_stack) );
+	(yy_mars_buffer_stack) = NULL;
+
+    yy_marsfree ( (yy_mars_state_buf) );
+    (yy_mars_state_buf)  = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * yy_marslex() is called, initialization will occur. */
+    yy_mars_init_globals( );
+
+    return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yy_marstext_ptr
+static void yy_mars_flex_strncpy (char* s1, yy_marsconst char * s2, int n )
+{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_mars_flex_strlen (yy_marsconst char * s )
+{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *yy_marsalloc (yy_mars_size_t  size )
+{
+	return (void *) malloc( size );
+}
+
+void *yy_marsrealloc  (void * ptr, yy_mars_size_t  size )
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void yy_marsfree (void * ptr )
+{
+	free( (char *) ptr );	/* see yy_marsrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yy_marstables"
+
+#line 163 "langl.l"
+
+
+
+#define MAXINCLUDE 10
+
+typedef struct {
+	char *name;
+	FILE *file;
+	int  line;
+} context;
+
+static context stack[MAXINCLUDE];
+static int     top = 0;
+static err    parse_err = NOERR;
+static char *first = 0;
+extern FILE *yy_marsin;
+extern int yy_marslineno;
+
+yy_marswrap()
+{
+
+#ifdef SHOW_INPUT
+	charpos  = 0;
+#endif
+
+	top--;
+	fclose(stack[top].file);
+	yy_marslineno = stack[top].line;
+	strfree(stack[top].name);
+
+	if(top)
+	{
+		yy_marsin = stack[top-1].file;
+		return 0;
+	}
+	return 1;
+}
+
+#ifdef STRIP_SPACES
+static char *clean(char *p)
+{
+	char *q = p;
+	char *r = p;
+	int  space = 0;
+
+	while(*p)
+	{
+		/* if(islower(*p)) *p = toupper(*p); */
+		/* if(isspace(*p)) */
+		if(*p == ' ' || *p == '\t')
+			space++;
+		else 
+		{
+			if(space) *q++ = ' ';
+			space = 0;
+			*q++ = *p;
+		}
+
+		*p++;
+	}
+	*q = 0;
+
+	return  strcache(r);
+}
+#endif
+
+#ifdef SHOW_INPUT
+
+static void showc(char c)
+{
+	if(charpos<MAXLINE)
+		line[charpos++] = c;
+	if(c == '\n') charpos = 0;
+	if(echomode) putchar(c);
+}
+
+#ifdef hpux
+static void shows(unsigned char* q)
+{
+	char *p = (char*)q;
+	while(*p) showc(*p++);
+}
+#else
+static void shows(char *p)
+{
+	while(*p) showc(*p++);
+}
+#endif
+
+
+static void syntax_echo(boolean onoff)
+{
+	echomode = onoff;
+}
+
+static void syntax_error(char *file,char *message,int  c)
+{
+	int i;
+
+	line[charpos] = 0;
+	printf("\n\n%s\n",line);
+
+	for(i=0;i<charpos;i++) putchar(' ');
+	putchar('^');
+	putchar('\n');
+	for(i=0;i<charpos;i++) putchar('-');
+	putchar('-');
+	putchar('\n');
+
+	marslog(LOG_EROR,"file %s line %d : %s",file,yy_marslineno,message);
+	if(isprint(c))
+		marslog(LOG_EROR,"file %s line %d : unexpected character in input '%c'",
+		    file,yy_marslineno,c);
+	else
+		marslog(LOG_EROR,"file %s line %d : error code %d",
+		    file,yy_marslineno,c);
+}
+
+#else
+
+static void syntax_error(char *file,char *message,int  c)
+{
+	marslog(LOG_EROR,"file %s line %d : %s",file,yy_marslineno,message);
+	if(isprint(c))
+		marslog(LOG_EROR,"file %s line %d : unexpected character in input '%c'",
+		    file,yy_marslineno,c);
+	else
+		marslog(LOG_EROR,"file %s line %d : error code %d",
+		    file,yy_marslineno,c);
+}
+#endif
+
+
+err parser(const char *fname,boolean echo)
+{
+	extern FILE *yy_marsin;
+
+	if(fname)
+	{
+		yy_marsin = fopen(fname,"r");
+		if(yy_marsin == NULL)
+		{
+			marslog(LOG_EROR|LOG_PERR,"Cannot open file %s",fname);
+			return -1;
+		}
+	}
+	else
+	{
+		fname = "(standard input)";
+		yy_marsin = stdin;
+	}
+	parse_err = NOERR;
+	syntax_echo(echo);
+
+	top = 1;
+	stack[0].file = yy_marsin;
+	stack[0].name = strcache(fname);
+	stack[0].line = 0;
+
+	first = strcache(fname);
+
+	if(setjmp(env))
+		return 1;
+
+	yy_marsparse();
+
+	strfree(first);
+
+	return parse_err;
+}
+
+static void include(const char *fname)
+{
+	int n   = top-1;
+	const char *q = config_file(fname);
+	const char *p = makepath(dirname(stack[n].name),q);
+	FILE *f = fopen(p,"r");
+
+	if(f == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot open file %s",p);
+		yy_marserror("Cannot include file");
+	}
+	else
+	{
+		yy_marsin            = f;
+		stack[top].file = f;
+		stack[top].name = strcache(p);
+		stack[top].line = yy_marslineno;
+#ifdef FLEX_SCANNER
+		yy_marslineno=0;
+#endif
+		top++;
+	}
+}
+
+yy_marserror(char *msg)
+{
+	if(top)
+		syntax_error(stack[top-1].name,msg,yy_marschar);
+	else
+		syntax_error(first,msg,yy_marschar);
+	parse_err = -1;
+}
+
diff --git a/src/libMars-ecregrid/langl.l b/src/libMars-ecregrid/langl.l
new file mode 100644
index 0000000..048f938
--- /dev/null
+++ b/src/libMars-ecregrid/langl.l
@@ -0,0 +1,365 @@
+%{
+
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+
+#undef YYLMAX
+#define YYLMAX 1024
+
+#include <setjmp.h>
+#include <stdarg.h>
+static jmp_buf env;
+#define exit(a)    jumpexit(a)
+#define fprintf    jumpprtf
+
+static void include(const char*);
+/* void yyerror(char*); */
+
+#define STRIP_SPACES
+static char *clean(char *);
+
+#ifndef METVIEW
+#define SHOW_INPUT
+#endif
+
+
+#ifdef FLEX_SCANNER
+#define YY_INPUT(buf,result,max_size) \
+               { \
+               int c = getc(yyin); \
+               result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \
+               }
+#endif
+
+
+
+#ifdef SHOW_INPUT
+/* These two routines are very inneficient .. */
+
+#define MAXLINE 256
+static int  echomode;
+static char line[MAXLINE];
+static int  charpos = 0;
+
+static void showc(char);
+#ifdef hpux
+static void shows(unsigned char*);
+#else
+static void shows(char*);
+#endif
+
+
+#else
+
+#define showc(x) 
+#define shows(x)
+#define syntax_echo(x)
+
+#endif
+
+
+static void jumpexit(int n)
+{
+	longjmp(env,1);
+}
+
+static void jumpprtf(FILE *f,char *fmt,...)
+{
+	va_list list;
+	char buf[1024];
+	int len;
+	va_start(list,fmt);
+	vsprintf(buf, fmt, list);
+	va_end(list);
+
+	len = strlen(buf);
+	if(len && buf[len-1] == '\n')
+		buf[len-1] = 0;
+
+	marslog(LOG_EROR,"Parser error: %s",buf);
+}
+
+
+%}
+
+BLANK	[ \t\n]+
+IDENT   [_0-9A-Za-z]+[_\.\-\+A-Za-z0-9:\t ]*[_\.\-\+A-Za-z0-9]* 
+NUMB    [\-\.]*[0-9]+[\.0-9]*[Ee]*[\-\+]*[0-9]*
+%%
+
+
+^\*        { int c; 
+			 shows(yytext);
+			 while((c = input()) && (c != '\n')) showc(c); showc(c);
+			 if(c == '\n') unput(c);
+		    }
+
+\!|\# 		 { int c; shows(yytext);while((c = input()) && (c != '\n')) showc(c); showc(c);}
+
+
+\"|\'            { 
+				   int c,q = yytext[0]; 
+
+				   if(q == '\'') yyleng = 0;
+
+				   while((c = input()) && c != q && c != '\n') 
+				   {
+					   if(c == '\\') yytext[yyleng++] = input();
+					   else yytext[yyleng++] =  c;
+				   }
+
+				   if(c == '"') 
+					yytext[yyleng++] = c;
+
+				   yytext[yyleng++] = 0;
+				   shows(yytext);
+				   yylval.str = strcache(yytext); 
+				   return WORD;
+				 }
+
+"%include"       { 
+					char word[1024];
+					int  i = 0;
+					int c;
+					while((c = input()) && isspace(c) && c != '\n') ;
+					while(c && !isspace(c) && c != '\n') 
+					{
+						word[i++] = c;
+						c = input();
+					}
+					word[i] = 0;
+					include(no_quotes(word));
+				 }
+
+"%if"      { shows(yytext); return IF; }
+"%then"    { shows(yytext); return THEN; }
+"%and"     { shows(yytext); return AND; }
+"%not"     { shows(yytext); return NOT; }
+"%or"      { shows(yytext); return OR; }
+"%in"      { shows(yytext); return IN; }
+"%set"     { shows(yytext); return SET; }
+"%unset"   { shows(yytext); return UNSET; }
+"%warning" { shows(yytext); return WARNING; }
+"%info"    { shows(yytext); return INFO; }
+"%mail"    { shows(yytext); return MAIL; }
+"%mailuser" { shows(yytext); return MAILUSER; }
+"%error"   { shows(yytext); return ERROR; }
+"%exit"    { shows(yytext); return EXIT; }
+"%fail"    { shows(yytext); return FAIL; }
+
+{IDENT}          { shows(yytext); yylval.str = clean(yytext); return WORD; }
+{NUMB}           { shows(yytext); yylval.str = clean(yytext); return WORD; }
+{BLANK}          { shows(yytext); }
+\!\!             { shows(yytext); } 
+.                { showc(*yytext); return *yytext; }
+%%
+
+#define MAXINCLUDE 10
+
+typedef struct {
+	char *name;
+	FILE *file;
+	int  line;
+} context;
+
+static context stack[MAXINCLUDE];
+static int     top = 0;
+static err    parse_err = NOERR;
+static char *first = 0;
+extern FILE *yyin;
+extern int yylineno;
+
+yywrap()
+{
+
+#ifdef SHOW_INPUT
+	charpos  = 0;
+#endif
+
+	top--;
+	fclose(stack[top].file);
+	yylineno = stack[top].line;
+	strfree(stack[top].name);
+
+	if(top)
+	{
+		yyin = stack[top-1].file;
+		return 0;
+	}
+	return 1;
+}
+
+#ifdef STRIP_SPACES
+static char *clean(char *p)
+{
+	char *q = p;
+	char *r = p;
+	int  space = 0;
+
+	while(*p)
+	{
+		/* if(islower(*p)) *p = toupper(*p); */
+		/* if(isspace(*p)) */
+		if(*p == ' ' || *p == '\t')
+			space++;
+		else 
+		{
+			if(space) *q++ = ' ';
+			space = 0;
+			*q++ = *p;
+		}
+
+		*p++;
+	}
+	*q = 0;
+
+	return  strcache(r);
+}
+#endif
+
+#ifdef SHOW_INPUT
+
+static void showc(char c)
+{
+	if(charpos<MAXLINE)
+		line[charpos++] = c;
+	if(c == '\n') charpos = 0;
+	if(echomode) putchar(c);
+}
+
+#ifdef hpux
+static void shows(unsigned char* q)
+{
+	char *p = (char*)q;
+	while(*p) showc(*p++);
+}
+#else
+static void shows(char *p)
+{
+	while(*p) showc(*p++);
+}
+#endif
+
+
+static void syntax_echo(boolean onoff)
+{
+	echomode = onoff;
+}
+
+static void syntax_error(char *file,char *message,int  c)
+{
+	int i;
+
+	line[charpos] = 0;
+	printf("\n\n%s\n",line);
+
+	for(i=0;i<charpos;i++) putchar(' ');
+	putchar('^');
+	putchar('\n');
+	for(i=0;i<charpos;i++) putchar('-');
+	putchar('-');
+	putchar('\n');
+
+	marslog(LOG_EROR,"file %s line %d : %s",file,yylineno,message);
+	if(isprint(c))
+		marslog(LOG_EROR,"file %s line %d : unexpected character in input '%c'",
+		    file,yylineno,c);
+	else
+		marslog(LOG_EROR,"file %s line %d : error code %d",
+		    file,yylineno,c);
+}
+
+#else
+
+static void syntax_error(char *file,char *message,int  c)
+{
+	marslog(LOG_EROR,"file %s line %d : %s",file,yylineno,message);
+	if(isprint(c))
+		marslog(LOG_EROR,"file %s line %d : unexpected character in input '%c'",
+		    file,yylineno,c);
+	else
+		marslog(LOG_EROR,"file %s line %d : error code %d",
+		    file,yylineno,c);
+}
+#endif
+
+
+err parser(const char *fname,boolean echo)
+{
+	extern FILE *yyin;
+
+	if(fname)
+	{
+		yyin = fopen(fname,"r");
+		if(yyin == NULL)
+		{
+			marslog(LOG_EROR|LOG_PERR,"Cannot open file %s",fname);
+			return -1;
+		}
+	}
+	else
+	{
+		fname = "(standard input)";
+		yyin = stdin;
+	}
+	parse_err = NOERR;
+	syntax_echo(echo);
+
+	top = 1;
+	stack[0].file = yyin;
+	stack[0].name = strcache(fname);
+	stack[0].line = 0;
+
+	first = strcache(fname);
+
+	if(setjmp(env))
+		return 1;
+
+	yyparse();
+
+	strfree(first);
+
+	return parse_err;
+}
+
+static void include(const char *fname)
+{
+	int n   = top-1;
+	const char *q = config_file(fname);
+	const char *p = makepath(dirname(stack[n].name),q);
+	FILE *f = fopen(p,"r");
+
+	if(f == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot open file %s",p);
+		yyerror("Cannot include file");
+	}
+	else
+	{
+		yyin            = f;
+		stack[top].file = f;
+		stack[top].name = strcache(p);
+		stack[top].line = yylineno;
+#ifdef FLEX_SCANNER
+		yylineno=0;
+#endif
+		top++;
+	}
+}
+
+yyerror(char *msg)
+{
+	if(top)
+		syntax_error(stack[top-1].name,msg,yychar);
+	else
+		syntax_error(first,msg,yychar);
+	parse_err = -1;
+}
diff --git a/src/libMars-ecregrid/langy.c b/src/libMars-ecregrid/langy.c
new file mode 100644
index 0000000..502d49e
--- /dev/null
+++ b/src/libMars-ecregrid/langy.c
@@ -0,0 +1,2244 @@
+
+/* A Bison parser, made by GNU Bison 2.4.1.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy_mars or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.4.1"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+
+
+/* Copy the first part of user declarations.  */
+
+/* Line 189 of yacc.c  */
+#line 1 "langy.y"
+
+
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include "lang.h"
+
+static request *reverse(request*);
+static value *reverse_other(value *r,value *s);
+static value *reverse_value(value *r,value *s);
+request *parser_lang;
+request *parser_reqs;
+rule    *parser_ruls;
+
+
+
+/* Line 189 of yacc.c  */
+#line 98 "y.tab.c"
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yy_marstokentype {
+     IF = 258,
+     AND = 259,
+     NOT = 260,
+     OR = 261,
+     THEN = 262,
+     WARNING = 263,
+     INFO = 264,
+     MAIL = 265,
+     MAILUSER = 266,
+     ERROR = 267,
+     EXIT = 268,
+     SET = 269,
+     UNSET = 270,
+     IN = 271,
+     FAIL = 272,
+     WORD = 273
+   };
+#endif
+/* Tokens.  */
+#define IF 258
+#define AND 259
+#define NOT 260
+#define OR 261
+#define THEN 262
+#define WARNING 263
+#define INFO 264
+#define MAIL 265
+#define MAILUSER 266
+#define ERROR 267
+#define EXIT 268
+#define SET 269
+#define UNSET 270
+#define IN 271
+#define FAIL 272
+#define WORD 273
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 214 of yacc.c  */
+#line 25 "langy.y"
+
+    char       *str;
+	request    *req;
+	parameter  *par;
+	value      *val;
+	rule       *rul;
+	action     *act;
+	condition  *con;
+	testop      top;
+
+
+
+/* Line 214 of yacc.c  */
+#line 183 "y.tab.c"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yy_marsstype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 264 of yacc.c  */
+#line 195 "y.tab.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yy_marstype_uint8;
+#else
+typedef unsigned char yy_marstype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yy_marstype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yy_marstype_int8;
+#else
+typedef short int yy_marstype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yy_marstype_uint16;
+#else
+typedef unsigned short int yy_marstype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yy_marstype_int16;
+#else
+typedef short int yy_marstype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yy_marsi)
+#else
+static int
+YYID (yy_marsi)
+    int yy_marsi;
+#endif
+{
+  return yy_marsi;
+}
+#endif
+
+#if ! defined yy_marsoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+	     && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yy_marsoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yy_marsoverflow \
+     && (! defined __cplusplus \
+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yy_marsalloc
+{
+  yy_marstype_int16 yy_marsss_alloc;
+  YYSTYPE yy_marsvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yy_marsalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yy_marstype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yy_marsi;				\
+	  for (yy_marsi = 0; yy_marsi < (Count); yy_marsi++)	\
+	    (To)[yy_marsi] = (From)[yy_marsi];		\
+	}					\
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
+    do									\
+      {									\
+	YYSIZE_T yy_marsnewbytes;						\
+	YYCOPY (&yy_marsptr->Stack_alloc, Stack, yy_marssize);			\
+	Stack = &yy_marsptr->Stack_alloc;					\
+	yy_marsnewbytes = yy_marsstacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yy_marsptr += yy_marsnewbytes / sizeof (*yy_marsptr);				\
+      }									\
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  34
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   166
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  37
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  30
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  81
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  139
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   273
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yy_marstranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yy_marstype_uint8 yy_marstranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,    27,     2,     2,     2,    34,     2,
+      23,    24,    28,     2,    19,     2,    20,    26,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    21,    31,
+      36,    22,    35,     2,    25,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,    29,     2,    30,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,    32,     2,    33,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yy_marstype_uint8 yy_marsprhs[] =
+{
+       0,     0,     3,     5,     7,     9,    11,    13,    16,    18,
+      22,    25,    30,    34,    36,    40,    45,    52,    58,    60,
+      64,    66,    68,    73,    75,    77,    79,    80,    82,    85,
+      88,    90,    97,   103,   105,   108,   114,   122,   124,   128,
+     130,   133,   135,   139,   141,   143,   147,   149,   155,   160,
+     162,   165,   170,   172,   175,   177,   181,   183,   187,   191,
+     194,   198,   200,   202,   204,   209,   213,   215,   217,   219,
+     222,   225,   228,   230,   233,   236,   239,   242,   245,   248,
+     251,   254
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yy_marstype_int8 yy_marsrhs[] =
+{
+      38,     0,    -1,    45,    -1,    46,    -1,    39,    -1,    57,
+      -1,    40,    -1,    39,    40,    -1,    18,    -1,    18,    19,
+      41,    -1,    18,    20,    -1,    18,    19,    41,    20,    -1,
+      21,    41,    21,    -1,    42,    -1,    41,    19,    42,    -1,
+      18,    51,    22,    43,    -1,    18,    51,    22,    23,    39,
+      24,    -1,    18,    25,    18,    22,    43,    -1,    44,    -1,
+      43,    26,    44,    -1,    18,    -1,    27,    -1,    28,    29,
+      18,    30,    -1,    28,    -1,    26,    -1,    25,    -1,    -1,
+      48,    -1,    46,    48,    -1,    31,    18,    -1,    45,    -1,
+      18,    47,    47,    32,    49,    33,    -1,    18,    47,    47,
+      32,    33,    -1,    50,    -1,    49,    50,    -1,    18,    51,
+      32,    52,    33,    -1,    18,    51,    32,    52,    33,    22,
+      43,    -1,    45,    -1,    29,    41,    30,    -1,    53,    -1,
+      52,    53,    -1,    55,    -1,    55,    31,    54,    -1,    56,
+      -1,    55,    -1,    54,    31,    55,    -1,    44,    -1,    44,
+      22,    23,    43,    24,    -1,    34,    18,    34,    18,    -1,
+      58,    -1,    58,    57,    -1,     3,    60,     7,    59,    -1,
+      66,    -1,    66,    59,    -1,    61,    -1,    61,     6,    60,
+      -1,    62,    -1,    62,     4,    61,    -1,    63,    65,    63,
+      -1,     5,    60,    -1,    23,    60,    24,    -1,    63,    -1,
+      64,    -1,    43,    -1,    18,    23,    18,    24,    -1,    18,
+      23,    24,    -1,    22,    -1,    35,    -1,    36,    -1,    35,
+      22,    -1,    36,    22,    -1,    36,    35,    -1,    16,    -1,
+      14,    42,    -1,    15,    18,    -1,     8,    18,    -1,    10,
+      18,    -1,    11,    18,    -1,     9,    18,    -1,    12,    18,
+      -1,    13,    18,    -1,    17,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yy_marstype_uint16 yy_marsrline[] =
+{
+       0,    94,    94,    95,    96,    97,   100,   101,   105,   106,
+     107,   108,   109,   112,   113,   116,   118,   125,   131,   132,
+     134,   135,   136,   142,   143,   144,   147,   153,   154,   157,
+     158,   161,   167,   174,   175,   177,   179,   187,   188,   191,
+     192,   196,   197,   200,   203,   204,   207,   208,   212,   217,
+     218,   222,   225,   226,   229,   230,   233,   234,   237,   238,
+     239,   240,   241,   244,   247,   248,   252,   253,   254,   255,
+     256,   257,   258,   261,   263,   264,   265,   266,   267,   268,
+     269,   270
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yy_marstname[] =
+{
+  "$end", "error", "$undefined", "IF", "AND", "NOT", "OR", "THEN",
+  "WARNING", "INFO", "MAIL", "MAILUSER", "ERROR", "EXIT", "SET", "UNSET",
+  "IN", "FAIL", "WORD", "','", "'.'", "':'", "'='", "'('", "')'", "'@'",
+  "'/'", "'\"'", "'*'", "'['", "']'", "';'", "'{'", "'}'", "'&'", "'>'",
+  "'<'", "$accept", "all", "requests", "request", "parameters",
+  "parameter", "values", "value", "empty", "verbs", "info", "verb",
+  "parameter_list", "parameter_desc", "intf", "value_list", "value_desc",
+  "aliases", "alias", "reference", "rules", "rule", "actions", "term",
+  "factor", "test", "atom", "func", "op", "action", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yy_marstype_uint16 yy_marstoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,    44,
+      46,    58,    61,    40,    41,    64,    47,    34,    42,    91,
+      93,    59,   123,   125,    38,    62,    60
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yy_marstype_uint8 yy_marsr1[] =
+{
+       0,    37,    38,    38,    38,    38,    39,    39,    40,    40,
+      40,    40,    40,    41,    41,    42,    42,    42,    43,    43,
+      44,    44,    44,    44,    44,    44,    45,    46,    46,    47,
+      47,    48,    48,    49,    49,    50,    50,    51,    51,    52,
+      52,    53,    53,    53,    54,    54,    55,    55,    56,    57,
+      57,    58,    59,    59,    60,    60,    61,    61,    62,    62,
+      62,    62,    62,    63,    64,    64,    65,    65,    65,    65,
+      65,    65,    65,    66,    66,    66,    66,    66,    66,    66,
+      66,    66
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yy_marstype_uint8 yy_marsr2[] =
+{
+       0,     2,     1,     1,     1,     1,     1,     2,     1,     3,
+       2,     4,     3,     1,     3,     4,     6,     5,     1,     3,
+       1,     1,     4,     1,     1,     1,     0,     1,     2,     2,
+       1,     6,     5,     1,     2,     5,     7,     1,     3,     1,
+       2,     1,     3,     1,     1,     3,     1,     5,     4,     1,
+       2,     4,     1,     2,     1,     3,     1,     3,     3,     2,
+       3,     1,     1,     1,     4,     3,     1,     1,     1,     2,
+       2,     2,     1,     2,     2,     2,     2,     2,     2,     2,
+       2,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yy_marstype_uint8 yy_marsdefact[] =
+{
+      26,     0,     8,     0,     0,     4,     6,     2,     3,    27,
+       5,    49,     0,    20,     0,    25,    24,    21,    23,    63,
+      18,     0,    54,    56,    61,    62,     0,    10,     0,    30,
+      26,    26,     0,    13,     1,     8,     7,    26,    28,    50,
+      59,     0,     0,     0,     0,     0,     0,     0,    72,    66,
+      67,    68,     0,     9,    29,     0,     0,     0,    37,     0,
+       0,    12,     0,    65,    60,     0,    20,    19,     0,     0,
+       0,     0,     0,     0,     0,     0,    81,    51,    52,    55,
+      57,    69,    70,    71,    58,    11,     0,     0,     0,     0,
+      14,    64,    22,    75,    78,    76,    77,    79,    80,    73,
+      74,    53,    26,    32,     0,    33,     0,    38,     0,    15,
+       0,    31,    34,    17,     0,     0,    16,     0,    46,     0,
+      39,    41,    43,     0,     0,    35,    40,     0,     0,     0,
+       0,    42,    44,    48,     0,    36,     0,    47,    45
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yy_marstype_int16 yy_marsdefgoto[] =
+{
+      -1,     4,     5,     6,    32,    33,    19,    20,    29,     8,
+      30,     9,   104,   105,    59,   119,   120,   131,   121,   122,
+      10,    11,    77,    21,    22,    23,    24,    25,    52,    78
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -87
+static const yy_marstype_int8 yy_marspact[] =
+{
+       4,     3,    44,     0,    42,    47,   -87,   -87,    63,   -87,
+     -87,    59,     3,    43,     3,   -87,   -87,   -87,    67,    71,
+     -87,    95,   100,   103,    11,   -87,     0,   -87,    90,   -87,
+      79,    10,    51,   -87,   -87,    80,   -87,    79,   -87,   -87,
+     -87,    16,    87,    94,    65,     2,     3,     3,   -87,   -87,
+      91,    36,    65,    85,   -87,    82,    97,     0,   -87,    96,
+       0,   -87,    92,   -87,   -87,    89,   -87,   -87,    99,   102,
+     104,   105,   106,   107,     0,   108,   -87,   -87,     2,   -87,
+     -87,   -87,   -87,   -87,   -87,   -87,    -9,   109,    48,    61,
+     -87,   -87,   -87,   -87,   -87,   -87,   -87,   -87,   -87,   -87,
+     -87,   -87,    98,   -87,    41,   -87,    65,   -87,    47,    71,
+     101,   -87,   -87,    71,    77,    27,   -87,   110,   112,    23,
+     -87,   111,   -87,   113,   114,   116,   -87,    65,   117,    65,
+      65,   115,   -87,   -87,    56,    71,    65,   -87,   -87
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yy_marstype_int16 yy_marspgoto[] =
+{
+     -87,   -87,    13,    -5,   -21,   -37,   -86,   -42,     1,   -87,
+     118,   121,   -87,    26,    30,   -87,    17,   -87,   -67,   -87,
+     128,   -87,    62,    -8,   119,   -87,    93,   -87,   -87,   -87
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -27
+static const yy_marstype_int16 yy_marstable[] =
+{
+      36,     7,    67,   109,    40,    53,    42,     1,    12,   102,
+      68,    69,    70,    71,    72,    73,    74,    75,    31,    76,
+     113,    13,     2,    90,   103,     3,    14,    48,    15,    16,
+      17,    18,    58,    49,    62,    56,    88,    99,    79,    57,
+      63,    66,    34,   134,   135,    66,    50,    51,    15,    16,
+      17,    18,    15,    16,    17,    18,   125,   117,    82,   102,
+     132,   117,     1,    26,    27,    35,    41,    60,     3,   138,
+      60,    83,    61,   118,   111,    28,   -26,   118,   107,    66,
+     137,    37,    44,    66,   108,   118,    15,    16,    17,    18,
+      15,    16,    17,    18,   118,    35,    43,    44,     3,    26,
+      27,   116,    45,    58,    60,    85,    46,    47,    54,    36,
+      28,    64,    65,    81,    86,    87,    91,    93,    89,    92,
+      94,   114,    95,    96,    97,    98,   100,    57,   123,    38,
+     112,   106,   110,   115,   124,   133,   126,   129,   130,    39,
+     101,     0,   127,     0,     0,    84,   136,   128,    55,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    80
+};
+
+static const yy_marstype_int16 yy_marscheck[] =
+{
+       5,     0,    44,    89,    12,    26,    14,     3,     5,    18,
+       8,     9,    10,    11,    12,    13,    14,    15,    18,    17,
+     106,    18,    18,    60,    33,    21,    23,    16,    25,    26,
+      27,    28,    31,    22,    18,    25,    57,    74,    46,    29,
+      24,    18,     0,   129,   130,    18,    35,    36,    25,    26,
+      27,    28,    25,    26,    27,    28,    33,    34,    22,    18,
+     127,    34,     3,    19,    20,    18,    23,    19,    21,   136,
+      19,    35,    21,   115,    33,    31,    32,   119,    30,    18,
+      24,    18,    26,    18,    23,   127,    25,    26,    27,    28,
+      25,    26,    27,    28,   136,    18,    29,    26,    21,    19,
+      20,    24,     7,   102,    19,    20,     6,     4,    18,   114,
+      31,    24,    18,    22,    32,    18,    24,    18,    22,    30,
+      18,   108,    18,    18,    18,    18,    18,    29,    18,     8,
+     104,    22,   102,    32,    22,    18,   119,    23,    22,    11,
+      78,    -1,    31,    -1,    -1,    52,    31,    34,    30,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    47
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yy_marstype_uint8 yy_marsstos[] =
+{
+       0,     3,    18,    21,    38,    39,    40,    45,    46,    48,
+      57,    58,     5,    18,    23,    25,    26,    27,    28,    43,
+      44,    60,    61,    62,    63,    64,    19,    20,    31,    45,
+      47,    18,    41,    42,     0,    18,    40,    18,    48,    57,
+      60,    23,    60,    29,    26,     7,     6,     4,    16,    22,
+      35,    36,    65,    41,    18,    47,    25,    29,    45,    51,
+      19,    21,    18,    24,    24,    18,    18,    44,     8,     9,
+      10,    11,    12,    13,    14,    15,    17,    59,    66,    60,
+      61,    22,    22,    35,    63,    20,    32,    18,    41,    22,
+      42,    24,    30,    18,    18,    18,    18,    18,    18,    42,
+      18,    59,    18,    33,    49,    50,    22,    30,    23,    43,
+      51,    33,    50,    43,    39,    32,    24,    34,    44,    52,
+      53,    55,    56,    18,    22,    33,    53,    31,    34,    23,
+      22,    54,    55,    18,    43,    43,    31,    24,    55
+};
+
+#define yy_marserrok		(yy_marserrstatus = 0)
+#define yy_marsclearin	(yy_marschar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yy_marsacceptlab
+#define YYABORT		goto yy_marsabortlab
+#define YYERROR		goto yy_marserrorlab
+
+
+/* Like YYERROR except do call yy_marserror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL		goto yy_marserrlab
+
+#define YYRECOVERING()  (!!yy_marserrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yy_marschar == YYEMPTY && yy_marslen == 1)				\
+    {								\
+      yy_marschar = (Token);						\
+      yy_marslval = (Value);						\
+      yy_marstoken = YYTRANSLATE (yy_marschar);				\
+      YYPOPSTACK (1);						\
+      goto yy_marsbackup;						\
+    }								\
+  else								\
+    {								\
+      yy_marserror (YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
+while (YYID (0))
+
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (YYID (N))                                                    \
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)			\
+     fprintf (File, "%d.%d-%d.%d",			\
+	      (Loc).first_line, (Loc).first_column,	\
+	      (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yy_marslex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yy_marslex (YYLEX_PARAM)
+#else
+# define YYLEX yy_marslex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yy_marsdebug)					\
+    YYFPRINTF Args;				\
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+do {									  \
+  if (yy_marsdebug)								  \
+    {									  \
+      YYFPRINTF (stderr, "%s ", Title);					  \
+      yy_mars_symbol_print (stderr,						  \
+		  Type, Value); \
+      YYFPRINTF (stderr, "\n");						  \
+    }									  \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_mars_symbol_value_print (FILE *yy_marsoutput, int yy_marstype, YYSTYPE const * const yy_marsvaluep)
+#else
+static void
+yy_mars_symbol_value_print (yy_marsoutput, yy_marstype, yy_marsvaluep)
+    FILE *yy_marsoutput;
+    int yy_marstype;
+    YYSTYPE const * const yy_marsvaluep;
+#endif
+{
+  if (!yy_marsvaluep)
+    return;
+# ifdef YYPRINT
+  if (yy_marstype < YYNTOKENS)
+    YYPRINT (yy_marsoutput, yy_marstoknum[yy_marstype], *yy_marsvaluep);
+# else
+  YYUSE (yy_marsoutput);
+# endif
+  switch (yy_marstype)
+    {
+      default:
+	break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_mars_symbol_print (FILE *yy_marsoutput, int yy_marstype, YYSTYPE const * const yy_marsvaluep)
+#else
+static void
+yy_mars_symbol_print (yy_marsoutput, yy_marstype, yy_marsvaluep)
+    FILE *yy_marsoutput;
+    int yy_marstype;
+    YYSTYPE const * const yy_marsvaluep;
+#endif
+{
+  if (yy_marstype < YYNTOKENS)
+    YYFPRINTF (yy_marsoutput, "token %s (", yy_marstname[yy_marstype]);
+  else
+    YYFPRINTF (yy_marsoutput, "nterm %s (", yy_marstname[yy_marstype]);
+
+  yy_mars_symbol_value_print (yy_marsoutput, yy_marstype, yy_marsvaluep);
+  YYFPRINTF (yy_marsoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_mars_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_mars_stack_print (yy_marstype_int16 *yy_marsbottom, yy_marstype_int16 *yy_marstop)
+#else
+static void
+yy_mars_stack_print (yy_marsbottom, yy_marstop)
+    yy_marstype_int16 *yy_marsbottom;
+    yy_marstype_int16 *yy_marstop;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; yy_marsbottom <= yy_marstop; yy_marsbottom++)
+    {
+      int yy_marsbot = *yy_marsbottom;
+      YYFPRINTF (stderr, " %d", yy_marsbot);
+    }
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yy_marsdebug)							\
+    yy_mars_stack_print ((Bottom), (Top));				\
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_mars_reduce_print (YYSTYPE *yy_marsvsp, int yy_marsrule)
+#else
+static void
+yy_mars_reduce_print (yy_marsvsp, yy_marsrule)
+    YYSTYPE *yy_marsvsp;
+    int yy_marsrule;
+#endif
+{
+  int yy_marsnrhs = yy_marsr2[yy_marsrule];
+  int yy_marsi;
+  unsigned long int yy_marslno = yy_marsrline[yy_marsrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+	     yy_marsrule - 1, yy_marslno);
+  /* The symbols being reduced.  */
+  for (yy_marsi = 0; yy_marsi < yy_marsnrhs; yy_marsi++)
+    {
+      YYFPRINTF (stderr, "   $%d = ", yy_marsi + 1);
+      yy_mars_symbol_print (stderr, yy_marsrhs[yy_marsprhs[yy_marsrule] + yy_marsi],
+		       &(yy_marsvsp[(yy_marsi + 1) - (yy_marsnrhs)])
+		       		       );
+      YYFPRINTF (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yy_marsdebug)				\
+    yy_mars_reduce_print (yy_marsvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yy_marsdebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+

+
+#if YYERROR_VERBOSE
+
+# ifndef yy_marsstrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yy_marsstrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yy_marsstrlen (const char *yy_marsstr)
+#else
+static YYSIZE_T
+yy_marsstrlen (yy_marsstr)
+    const char *yy_marsstr;
+#endif
+{
+  YYSIZE_T yy_marslen;
+  for (yy_marslen = 0; yy_marsstr[yy_marslen]; yy_marslen++)
+    continue;
+  return yy_marslen;
+}
+#  endif
+# endif
+
+# ifndef yy_marsstpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yy_marsstpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yy_marsstpcpy (char *yy_marsdest, const char *yy_marssrc)
+#else
+static char *
+yy_marsstpcpy (yy_marsdest, yy_marssrc)
+    char *yy_marsdest;
+    const char *yy_marssrc;
+#endif
+{
+  char *yy_marsd = yy_marsdest;
+  const char *yy_marss = yy_marssrc;
+
+  while ((*yy_marsd++ = *yy_marss++) != '\0')
+    continue;
+
+  return yy_marsd - 1;
+}
+#  endif
+# endif
+
+# ifndef yy_marstnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yy_marserror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yy_marstname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yy_marstnamerr (char *yy_marsres, const char *yy_marsstr)
+{
+  if (*yy_marsstr == '"')
+    {
+      YYSIZE_T yy_marsn = 0;
+      char const *yy_marsp = yy_marsstr;
+
+      for (;;)
+	switch (*++yy_marsp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yy_marsp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yy_marsres)
+	      yy_marsres[yy_marsn] = *yy_marsp;
+	    yy_marsn++;
+	    break;
+
+	  case '"':
+	    if (yy_marsres)
+	      yy_marsres[yy_marsn] = '\0';
+	    return yy_marsn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yy_marsres)
+    return yy_marsstrlen (yy_marsstr);
+
+  return yy_marsstpcpy (yy_marsres, yy_marsstr) - yy_marsres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yy_marssyntax_error (char *yy_marsresult, int yy_marsstate, int yy_marschar)
+{
+  int yy_marsn = yy_marspact[yy_marsstate];
+
+  if (! (YYPACT_NINF < yy_marsn && yy_marsn <= YYLAST))
+    return 0;
+  else
+    {
+      int yy_marstype = YYTRANSLATE (yy_marschar);
+      YYSIZE_T yy_marssize0 = yy_marstnamerr (0, yy_marstname[yy_marstype]);
+      YYSIZE_T yy_marssize = yy_marssize0;
+      YYSIZE_T yy_marssize1;
+      int yy_marssize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yy_marsarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yy_marsx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+	 constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yy_marsfmt;
+      char const *yy_marsf;
+      static char const yy_marsunexpected[] = "syntax error, unexpected %s";
+      static char const yy_marsexpecting[] = ", expecting %s";
+      static char const yy_marsor[] = " or %s";
+      char yy_marsformat[sizeof yy_marsunexpected
+		    + sizeof yy_marsexpecting - 1
+		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+		       * (sizeof yy_marsor - 1))];
+      char const *yy_marsprefix = yy_marsexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+	 YYCHECK.  */
+      int yy_marsxbegin = yy_marsn < 0 ? -yy_marsn : 0;
+
+      /* Stay within bounds of both yy_marscheck and yy_marstname.  */
+      int yy_marschecklim = YYLAST - yy_marsn + 1;
+      int yy_marsxend = yy_marschecklim < YYNTOKENS ? yy_marschecklim : YYNTOKENS;
+      int yy_marscount = 1;
+
+      yy_marsarg[0] = yy_marstname[yy_marstype];
+      yy_marsfmt = yy_marsstpcpy (yy_marsformat, yy_marsunexpected);
+
+      for (yy_marsx = yy_marsxbegin; yy_marsx < yy_marsxend; ++yy_marsx)
+	if (yy_marscheck[yy_marsx + yy_marsn] == yy_marsx && yy_marsx != YYTERROR)
+	  {
+	    if (yy_marscount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+	      {
+		yy_marscount = 1;
+		yy_marssize = yy_marssize0;
+		yy_marsformat[sizeof yy_marsunexpected - 1] = '\0';
+		break;
+	      }
+	    yy_marsarg[yy_marscount++] = yy_marstname[yy_marsx];
+	    yy_marssize1 = yy_marssize + yy_marstnamerr (0, yy_marstname[yy_marsx]);
+	    yy_marssize_overflow |= (yy_marssize1 < yy_marssize);
+	    yy_marssize = yy_marssize1;
+	    yy_marsfmt = yy_marsstpcpy (yy_marsfmt, yy_marsprefix);
+	    yy_marsprefix = yy_marsor;
+	  }
+
+      yy_marsf = YY_(yy_marsformat);
+      yy_marssize1 = yy_marssize + yy_marsstrlen (yy_marsf);
+      yy_marssize_overflow |= (yy_marssize1 < yy_marssize);
+      yy_marssize = yy_marssize1;
+
+      if (yy_marssize_overflow)
+	return YYSIZE_MAXIMUM;
+
+      if (yy_marsresult)
+	{
+	  /* Avoid sprintf, as that infringes on the user's name space.
+	     Don't have undefined behavior even if the translation
+	     produced a string with the wrong number of "%s"s.  */
+	  char *yy_marsp = yy_marsresult;
+	  int yy_marsi = 0;
+	  while ((*yy_marsp = *yy_marsf) != '\0')
+	    {
+	      if (*yy_marsp == '%' && yy_marsf[1] == 's' && yy_marsi < yy_marscount)
+		{
+		  yy_marsp += yy_marstnamerr (yy_marsp, yy_marsarg[yy_marsi++]);
+		  yy_marsf += 2;
+		}
+	      else
+		{
+		  yy_marsp++;
+		  yy_marsf++;
+		}
+	    }
+	}
+      return yy_marssize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+

+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_marsdestruct (const char *yy_marsmsg, int yy_marstype, YYSTYPE *yy_marsvaluep)
+#else
+static void
+yy_marsdestruct (yy_marsmsg, yy_marstype, yy_marsvaluep)
+    const char *yy_marsmsg;
+    int yy_marstype;
+    YYSTYPE *yy_marsvaluep;
+#endif
+{
+  YYUSE (yy_marsvaluep);
+
+  if (!yy_marsmsg)
+    yy_marsmsg = "Deleting";
+  YY_SYMBOL_PRINT (yy_marsmsg, yy_marstype, yy_marsvaluep, yy_marslocationp);
+
+  switch (yy_marstype)
+    {
+
+      default:
+	break;
+    }
+}
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yy_marsparse (void *YYPARSE_PARAM);
+#else
+int yy_marsparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yy_marsparse (void);
+#else
+int yy_marsparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/* The lookahead symbol.  */
+int yy_marschar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yy_marslval;
+
+/* Number of syntax errors so far.  */
+int yy_marsnerrs;
+
+
+
+/*-------------------------.
+| yy_marsparse or yy_marspush_parse.  |
+`-------------------------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yy_marsparse (void *YYPARSE_PARAM)
+#else
+int
+yy_marsparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yy_marsparse (void)
+#else
+int
+yy_marsparse ()
+
+#endif
+#endif
+{
+
+
+    int yy_marsstate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yy_marserrstatus;
+
+    /* The stacks and their tools:
+       `yy_marsss': related to states.
+       `yy_marsvs': related to semantic values.
+
+       Refer to the stacks thru separate pointers, to allow yy_marsoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yy_marstype_int16 yy_marsssa[YYINITDEPTH];
+    yy_marstype_int16 *yy_marsss;
+    yy_marstype_int16 *yy_marsssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yy_marsvsa[YYINITDEPTH];
+    YYSTYPE *yy_marsvs;
+    YYSTYPE *yy_marsvsp;
+
+    YYSIZE_T yy_marsstacksize;
+
+  int yy_marsn;
+  int yy_marsresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yy_marstoken;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yy_marsval;
+
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yy_marsmsgbuf[128];
+  char *yy_marsmsg = yy_marsmsgbuf;
+  YYSIZE_T yy_marsmsg_alloc = sizeof yy_marsmsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yy_marsvsp -= (N), yy_marsssp -= (N))
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yy_marslen = 0;
+
+  yy_marstoken = 0;
+  yy_marsss = yy_marsssa;
+  yy_marsvs = yy_marsvsa;
+  yy_marsstacksize = YYINITDEPTH;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yy_marsstate = 0;
+  yy_marserrstatus = 0;
+  yy_marsnerrs = 0;
+  yy_marschar = YYEMPTY; /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+  yy_marsssp = yy_marsss;
+  yy_marsvsp = yy_marsvs;
+
+  goto yy_marssetstate;
+
+/*------------------------------------------------------------.
+| yy_marsnewstate -- Push a new state, which is found in yy_marsstate.  |
+`------------------------------------------------------------*/
+ yy_marsnewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yy_marsssp++;
+
+ yy_marssetstate:
+  *yy_marsssp = yy_marsstate;
+
+  if (yy_marsss + yy_marsstacksize - 1 <= yy_marsssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yy_marssize = yy_marsssp - yy_marsss + 1;
+
+#ifdef yy_marsoverflow
+      {
+	/* Give user a chance to reallocate the stack.  Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yy_marsvs1 = yy_marsvs;
+	yy_marstype_int16 *yy_marsss1 = yy_marsss;
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yy_marsoverflow is a macro.  */
+	yy_marsoverflow (YY_("memory exhausted"),
+		    &yy_marsss1, yy_marssize * sizeof (*yy_marsssp),
+		    &yy_marsvs1, yy_marssize * sizeof (*yy_marsvsp),
+		    &yy_marsstacksize);
+
+	yy_marsss = yy_marsss1;
+	yy_marsvs = yy_marsvs1;
+      }
+#else /* no yy_marsoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yy_marsexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yy_marsstacksize)
+	goto yy_marsexhaustedlab;
+      yy_marsstacksize *= 2;
+      if (YYMAXDEPTH < yy_marsstacksize)
+	yy_marsstacksize = YYMAXDEPTH;
+
+      {
+	yy_marstype_int16 *yy_marsss1 = yy_marsss;
+	union yy_marsalloc *yy_marsptr =
+	  (union yy_marsalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yy_marsstacksize));
+	if (! yy_marsptr)
+	  goto yy_marsexhaustedlab;
+	YYSTACK_RELOCATE (yy_marsss_alloc, yy_marsss);
+	YYSTACK_RELOCATE (yy_marsvs_alloc, yy_marsvs);
+#  undef YYSTACK_RELOCATE
+	if (yy_marsss1 != yy_marsssa)
+	  YYSTACK_FREE (yy_marsss1);
+      }
+# endif
+#endif /* no yy_marsoverflow */
+
+      yy_marsssp = yy_marsss + yy_marssize - 1;
+      yy_marsvsp = yy_marsvs + yy_marssize - 1;
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yy_marsstacksize));
+
+      if (yy_marsss + yy_marsstacksize - 1 <= yy_marsssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yy_marsstate));
+
+  if (yy_marsstate == YYFINAL)
+    YYACCEPT;
+
+  goto yy_marsbackup;
+
+/*-----------.
+| yy_marsbackup.  |
+`-----------*/
+yy_marsbackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     lookahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+  yy_marsn = yy_marspact[yy_marsstate];
+  if (yy_marsn == YYPACT_NINF)
+    goto yy_marsdefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yy_marschar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yy_marschar = YYLEX;
+    }
+
+  if (yy_marschar <= YYEOF)
+    {
+      yy_marschar = yy_marstoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yy_marstoken = YYTRANSLATE (yy_marschar);
+      YY_SYMBOL_PRINT ("Next token is", yy_marstoken, &yy_marslval, &yy_marslloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yy_marsn += yy_marstoken;
+  if (yy_marsn < 0 || YYLAST < yy_marsn || yy_marscheck[yy_marsn] != yy_marstoken)
+    goto yy_marsdefault;
+  yy_marsn = yy_marstable[yy_marsn];
+  if (yy_marsn <= 0)
+    {
+      if (yy_marsn == 0 || yy_marsn == YYTABLE_NINF)
+	goto yy_marserrlab;
+      yy_marsn = -yy_marsn;
+      goto yy_marsreduce;
+    }
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yy_marserrstatus)
+    yy_marserrstatus--;
+
+  /* Shift the lookahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yy_marstoken, &yy_marslval, &yy_marslloc);
+
+  /* Discard the shifted token.  */
+  yy_marschar = YYEMPTY;
+
+  yy_marsstate = yy_marsn;
+  *++yy_marsvsp = yy_marslval;
+
+  goto yy_marsnewstate;
+
+
+/*-----------------------------------------------------------.
+| yy_marsdefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yy_marsdefault:
+  yy_marsn = yy_marsdefact[yy_marsstate];
+  if (yy_marsn == 0)
+    goto yy_marserrlab;
+  goto yy_marsreduce;
+
+
+/*-----------------------------.
+| yy_marsreduce -- Do a reduction.  |
+`-----------------------------*/
+yy_marsreduce:
+  /* yy_marsn is the number of a rule to reduce with.  */
+  yy_marslen = yy_marsr2[yy_marsn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yy_marsval = yy_marsvsp[1-yy_marslen];
+
+
+  YY_REDUCE_PRINT (yy_marsn);
+  switch (yy_marsn)
+    {
+        case 3:
+
+/* Line 1455 of yacc.c  */
+#line 95 "langy.y"
+    { parser_lang  = reverse((yy_marsvsp[(1) - (1)].req));  }
+    break;
+
+  case 4:
+
+/* Line 1455 of yacc.c  */
+#line 96 "langy.y"
+    { parser_reqs  = reverse((yy_marsvsp[(1) - (1)].req));  }
+    break;
+
+  case 5:
+
+/* Line 1455 of yacc.c  */
+#line 97 "langy.y"
+    { parser_ruls  = (yy_marsvsp[(1) - (1)].rul);           }
+    break;
+
+  case 7:
+
+/* Line 1455 of yacc.c  */
+#line 101 "langy.y"
+    { (yy_marsval.req) = (yy_marsvsp[(2) - (2)].req); (yy_marsvsp[(2) - (2)].req)->next = (yy_marsvsp[(1) - (2)].req);   }
+    break;
+
+  case 8:
+
+/* Line 1455 of yacc.c  */
+#line 105 "langy.y"
+    { (yy_marsval.req) = new_request((yy_marsvsp[(1) - (1)].str),NULL);     }
+    break;
+
+  case 9:
+
+/* Line 1455 of yacc.c  */
+#line 106 "langy.y"
+    { (yy_marsval.req) = new_request((yy_marsvsp[(1) - (3)].str),(yy_marsvsp[(3) - (3)].par));       }
+    break;
+
+  case 10:
+
+/* Line 1455 of yacc.c  */
+#line 107 "langy.y"
+    { (yy_marsval.req) = new_request((yy_marsvsp[(1) - (2)].str),NULL);     }
+    break;
+
+  case 11:
+
+/* Line 1455 of yacc.c  */
+#line 108 "langy.y"
+    { (yy_marsval.req) = new_request((yy_marsvsp[(1) - (4)].str),(yy_marsvsp[(3) - (4)].par));       }
+    break;
+
+  case 12:
+
+/* Line 1455 of yacc.c  */
+#line 109 "langy.y"
+    { (yy_marsval.req) = new_request(0,(yy_marsvsp[(2) - (3)].par));        }
+    break;
+
+  case 14:
+
+/* Line 1455 of yacc.c  */
+#line 113 "langy.y"
+    { (yy_marsval.par) = (yy_marsvsp[(3) - (3)].par); (yy_marsvsp[(3) - (3)].par)->next = (yy_marsvsp[(1) - (3)].par);   }
+    break;
+
+  case 15:
+
+/* Line 1455 of yacc.c  */
+#line 117 "langy.y"
+    { (yy_marsval.par) = new_parameter((yy_marsvsp[(1) - (4)].str),(yy_marsvsp[(4) - (4)].val)); (yy_marsval.par)->interface = (yy_marsvsp[(2) - (4)].req); }
+    break;
+
+  case 16:
+
+/* Line 1455 of yacc.c  */
+#line 119 "langy.y"
+    {   (yy_marsval.par) = new_parameter((yy_marsvsp[(1) - (6)].str),NULL);
+						(yy_marsval.par)->interface = (yy_marsvsp[(2) - (6)].req);
+						(yy_marsval.par)->subrequest = reverse((yy_marsvsp[(5) - (6)].req));    }
+    break;
+
+  case 17:
+
+/* Line 1455 of yacc.c  */
+#line 125 "langy.y"
+    {
+											(yy_marsval.par) = new_parameter((yy_marsvsp[(3) - (5)].str),(yy_marsvsp[(5) - (5)].val));      
+											(yy_marsval.par)->default_values=new_value((yy_marsvsp[(1) - (5)].str));
+										}
+    break;
+
+  case 19:
+
+/* Line 1455 of yacc.c  */
+#line 132 "langy.y"
+    { (yy_marsval.val) = (yy_marsvsp[(3) - (3)].val); (yy_marsvsp[(3) - (3)].val)->next = (yy_marsvsp[(1) - (3)].val);   }
+    break;
+
+  case 20:
+
+/* Line 1455 of yacc.c  */
+#line 134 "langy.y"
+    { (yy_marsval.val) = new_value((yy_marsvsp[(1) - (1)].str));             }
+    break;
+
+  case 21:
+
+/* Line 1455 of yacc.c  */
+#line 135 "langy.y"
+    { (yy_marsval.val) = new_value(strcache("\"")); }
+    break;
+
+  case 22:
+
+/* Line 1455 of yacc.c  */
+#line 136 "langy.y"
+    { 
+											char buf[1024];
+											sprintf(buf,"*%s",(yy_marsvsp[(3) - (4)].str));
+											(yy_marsval.val) = new_value(strcache(buf));  
+											strfree((yy_marsvsp[(3) - (4)].str));
+										}
+    break;
+
+  case 23:
+
+/* Line 1455 of yacc.c  */
+#line 142 "langy.y"
+    { (yy_marsval.val) = new_value(strcache("*"));  }
+    break;
+
+  case 24:
+
+/* Line 1455 of yacc.c  */
+#line 143 "langy.y"
+    { (yy_marsval.val) = new_value(strcache("/"));  }
+    break;
+
+  case 25:
+
+/* Line 1455 of yacc.c  */
+#line 144 "langy.y"
+    { (yy_marsval.val) = new_value(strcache("@"));  }
+    break;
+
+  case 28:
+
+/* Line 1455 of yacc.c  */
+#line 154 "langy.y"
+    { (yy_marsval.req) = (yy_marsvsp[(2) - (2)].req); (yy_marsvsp[(2) - (2)].req)->next = (yy_marsvsp[(1) - (2)].req);   }
+    break;
+
+  case 29:
+
+/* Line 1455 of yacc.c  */
+#line 157 "langy.y"
+    { (yy_marsval.str) =  (yy_marsvsp[(2) - (2)].str); }
+    break;
+
+  case 30:
+
+/* Line 1455 of yacc.c  */
+#line 158 "langy.y"
+    { (yy_marsval.str) =  NULL; }
+    break;
+
+  case 31:
+
+/* Line 1455 of yacc.c  */
+#line 162 "langy.y"
+    { 
+					  (yy_marsval.req) = new_request((yy_marsvsp[(1) - (6)].str),(yy_marsvsp[(5) - (6)].par)); 
+					  (yy_marsval.req)->info = (yy_marsvsp[(2) - (6)].str);
+					  (yy_marsval.req)->kind = (yy_marsvsp[(3) - (6)].str);
+					}
+    break;
+
+  case 32:
+
+/* Line 1455 of yacc.c  */
+#line 168 "langy.y"
+    { 
+					  (yy_marsval.req) = new_request((yy_marsvsp[(1) - (5)].str),NULL); 
+					  (yy_marsval.req)->info = (yy_marsvsp[(2) - (5)].str);
+					  (yy_marsval.req)->kind = (yy_marsvsp[(3) - (5)].str);
+					}
+    break;
+
+  case 34:
+
+/* Line 1455 of yacc.c  */
+#line 175 "langy.y"
+    { (yy_marsval.par) = (yy_marsvsp[(2) - (2)].par); (yy_marsvsp[(2) - (2)].par)->next = (yy_marsvsp[(1) - (2)].par);   }
+    break;
+
+  case 35:
+
+/* Line 1455 of yacc.c  */
+#line 177 "langy.y"
+    { (yy_marsval.par) = new_parameter((yy_marsvsp[(1) - (5)].str),(yy_marsvsp[(4) - (5)].val)); 
+					   (yy_marsval.par)->interface = (yy_marsvsp[(2) - (5)].req); }
+    break;
+
+  case 36:
+
+/* Line 1455 of yacc.c  */
+#line 180 "langy.y"
+    { 
+						(yy_marsval.par) = new_parameter((yy_marsvsp[(1) - (7)].str),(yy_marsvsp[(4) - (7)].val)); 
+						(yy_marsval.par)->interface = (yy_marsvsp[(2) - (7)].req);
+						(yy_marsval.par)->default_values = (yy_marsvsp[(7) - (7)].val);
+					}
+    break;
+
+  case 37:
+
+/* Line 1455 of yacc.c  */
+#line 187 "langy.y"
+    { (yy_marsval.req) = NULL; }
+    break;
+
+  case 38:
+
+/* Line 1455 of yacc.c  */
+#line 188 "langy.y"
+    { (yy_marsval.req) = new_request(NULL,(yy_marsvsp[(2) - (3)].par)); }
+    break;
+
+  case 40:
+
+/* Line 1455 of yacc.c  */
+#line 192 "langy.y"
+    { (yy_marsval.val) = (yy_marsvsp[(2) - (2)].val); (yy_marsvsp[(2) - (2)].val)->next = (yy_marsvsp[(1) - (2)].val);   }
+    break;
+
+  case 42:
+
+/* Line 1455 of yacc.c  */
+#line 197 "langy.y"
+    { (yy_marsval.val) = (yy_marsvsp[(1) - (3)].val); 
+						  	(yy_marsvsp[(1) - (3)].val)->other_names = reverse_other((yy_marsvsp[(3) - (3)].val),NULL);
+						  }
+    break;
+
+  case 45:
+
+/* Line 1455 of yacc.c  */
+#line 204 "langy.y"
+    { (yy_marsval.val) = (yy_marsvsp[(3) - (3)].val); (yy_marsvsp[(3) - (3)].val)->other_names = (yy_marsvsp[(1) - (3)].val);  }
+    break;
+
+  case 47:
+
+/* Line 1455 of yacc.c  */
+#line 208 "langy.y"
+    { (yy_marsval.val) = (yy_marsvsp[(1) - (5)].val); (yy_marsvsp[(1) - (5)].val)->expand = reverse_value((yy_marsvsp[(4) - (5)].val),0); }
+    break;
+
+  case 48:
+
+/* Line 1455 of yacc.c  */
+#line 212 "langy.y"
+    { (yy_marsval.val) = new_reference((yy_marsvsp[(2) - (4)].str),(yy_marsvsp[(4) - (4)].str)); }
+    break;
+
+  case 50:
+
+/* Line 1455 of yacc.c  */
+#line 218 "langy.y"
+    { (yy_marsval.rul) = (yy_marsvsp[(1) - (2)].rul); (yy_marsvsp[(1) - (2)].rul)->next = (yy_marsvsp[(2) - (2)].rul);}
+    break;
+
+  case 51:
+
+/* Line 1455 of yacc.c  */
+#line 222 "langy.y"
+    { (yy_marsval.rul) = new_rule((yy_marsvsp[(2) - (4)].con),(yy_marsvsp[(4) - (4)].act));}
+    break;
+
+  case 53:
+
+/* Line 1455 of yacc.c  */
+#line 226 "langy.y"
+    { (yy_marsval.act) = (yy_marsvsp[(1) - (2)].act); (yy_marsvsp[(1) - (2)].act)->next = (yy_marsvsp[(2) - (2)].act);}
+    break;
+
+  case 55:
+
+/* Line 1455 of yacc.c  */
+#line 230 "langy.y"
+    { (yy_marsval.con) = new_condition(t_or,(yy_marsvsp[(1) - (3)].con),(yy_marsvsp[(3) - (3)].con));}
+    break;
+
+  case 57:
+
+/* Line 1455 of yacc.c  */
+#line 234 "langy.y"
+    { (yy_marsval.con) = new_condition(t_and,(yy_marsvsp[(1) - (3)].con),(yy_marsvsp[(3) - (3)].con));}
+    break;
+
+  case 58:
+
+/* Line 1455 of yacc.c  */
+#line 237 "langy.y"
+    { (yy_marsval.con) = new_condition((yy_marsvsp[(2) - (3)].top),(yy_marsvsp[(1) - (3)].con),(yy_marsvsp[(3) - (3)].con)); }
+    break;
+
+  case 59:
+
+/* Line 1455 of yacc.c  */
+#line 238 "langy.y"
+    { (yy_marsval.con) = new_condition(t_not,(yy_marsvsp[(2) - (2)].con),NULL); }
+    break;
+
+  case 60:
+
+/* Line 1455 of yacc.c  */
+#line 239 "langy.y"
+    { (yy_marsval.con) = (yy_marsvsp[(2) - (3)].con); }
+    break;
+
+  case 63:
+
+/* Line 1455 of yacc.c  */
+#line 244 "langy.y"
+    { (yy_marsval.con) = new_condition(t_val,(condition*)(yy_marsvsp[(1) - (1)].val),NULL);}
+    break;
+
+  case 64:
+
+/* Line 1455 of yacc.c  */
+#line 247 "langy.y"
+    { (yy_marsval.con) = new_condition(t_func,(condition*)strcache((yy_marsvsp[(1) - (4)].str)),(condition*)strcache((yy_marsvsp[(3) - (4)].str)));}
+    break;
+
+  case 65:
+
+/* Line 1455 of yacc.c  */
+#line 248 "langy.y"
+    { (yy_marsval.con) = new_condition(t_func,(condition*)strcache((yy_marsvsp[(1) - (3)].str)),NULL);}
+    break;
+
+  case 66:
+
+/* Line 1455 of yacc.c  */
+#line 252 "langy.y"
+    { (yy_marsval.top) = t_eq;}
+    break;
+
+  case 67:
+
+/* Line 1455 of yacc.c  */
+#line 253 "langy.y"
+    { (yy_marsval.top) = t_gt;}
+    break;
+
+  case 68:
+
+/* Line 1455 of yacc.c  */
+#line 254 "langy.y"
+    { (yy_marsval.top) = t_lt;}
+    break;
+
+  case 69:
+
+/* Line 1455 of yacc.c  */
+#line 255 "langy.y"
+    { (yy_marsval.top) = t_ge;}
+    break;
+
+  case 70:
+
+/* Line 1455 of yacc.c  */
+#line 256 "langy.y"
+    { (yy_marsval.top) = t_le;}
+    break;
+
+  case 71:
+
+/* Line 1455 of yacc.c  */
+#line 257 "langy.y"
+    { (yy_marsval.top) = t_ne;}
+    break;
+
+  case 72:
+
+/* Line 1455 of yacc.c  */
+#line 258 "langy.y"
+    { (yy_marsval.top) = t_in;}
+    break;
+
+  case 73:
+
+/* Line 1455 of yacc.c  */
+#line 261 "langy.y"
+    { (yy_marsval.act) = new_action(a_set,(yy_marsvsp[(2) - (2)].par)); 
+			           (yy_marsvsp[(2) - (2)].par)->values = reverse_value((yy_marsvsp[(2) - (2)].par)->values,NULL);  }
+    break;
+
+  case 74:
+
+/* Line 1455 of yacc.c  */
+#line 263 "langy.y"
+    { (yy_marsval.act) = new_action(a_unset,(yy_marsvsp[(2) - (2)].str)); }
+    break;
+
+  case 75:
+
+/* Line 1455 of yacc.c  */
+#line 264 "langy.y"
+    { (yy_marsval.act) = new_action(a_warning,(yy_marsvsp[(2) - (2)].str)); }
+    break;
+
+  case 76:
+
+/* Line 1455 of yacc.c  */
+#line 265 "langy.y"
+    { (yy_marsval.act) = new_action(a_mail,(yy_marsvsp[(2) - (2)].str)); }
+    break;
+
+  case 77:
+
+/* Line 1455 of yacc.c  */
+#line 266 "langy.y"
+    { (yy_marsval.act) = new_action(a_mailuser,(yy_marsvsp[(2) - (2)].str)); }
+    break;
+
+  case 78:
+
+/* Line 1455 of yacc.c  */
+#line 267 "langy.y"
+    { (yy_marsval.act) = new_action(a_info,(yy_marsvsp[(2) - (2)].str)); }
+    break;
+
+  case 79:
+
+/* Line 1455 of yacc.c  */
+#line 268 "langy.y"
+    { (yy_marsval.act) = new_action(a_error,(yy_marsvsp[(2) - (2)].str)); }
+    break;
+
+  case 80:
+
+/* Line 1455 of yacc.c  */
+#line 269 "langy.y"
+    { (yy_marsval.act) = new_action(a_exit,(yy_marsvsp[(2) - (2)].str)); }
+    break;
+
+  case 81:
+
+/* Line 1455 of yacc.c  */
+#line 270 "langy.y"
+    { (yy_marsval.act) = new_action(a_fail,NULL); }
+    break;
+
+
+
+/* Line 1455 of yacc.c  */
+#line 1976 "y.tab.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yy_marsr1[yy_marsn], &yy_marsval, &yy_marsloc);
+
+  YYPOPSTACK (yy_marslen);
+  yy_marslen = 0;
+  YY_STACK_PRINT (yy_marsss, yy_marsssp);
+
+  *++yy_marsvsp = yy_marsval;
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yy_marsn = yy_marsr1[yy_marsn];
+
+  yy_marsstate = yy_marspgoto[yy_marsn - YYNTOKENS] + *yy_marsssp;
+  if (0 <= yy_marsstate && yy_marsstate <= YYLAST && yy_marscheck[yy_marsstate] == *yy_marsssp)
+    yy_marsstate = yy_marstable[yy_marsstate];
+  else
+    yy_marsstate = yy_marsdefgoto[yy_marsn - YYNTOKENS];
+
+  goto yy_marsnewstate;
+
+
+/*------------------------------------.
+| yy_marserrlab -- here on detecting error |
+`------------------------------------*/
+yy_marserrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yy_marserrstatus)
+    {
+      ++yy_marsnerrs;
+#if ! YYERROR_VERBOSE
+      yy_marserror (YY_("syntax error"));
+#else
+      {
+	YYSIZE_T yy_marssize = yy_marssyntax_error (0, yy_marsstate, yy_marschar);
+	if (yy_marsmsg_alloc < yy_marssize && yy_marsmsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+	  {
+	    YYSIZE_T yy_marsalloc = 2 * yy_marssize;
+	    if (! (yy_marssize <= yy_marsalloc && yy_marsalloc <= YYSTACK_ALLOC_MAXIMUM))
+	      yy_marsalloc = YYSTACK_ALLOC_MAXIMUM;
+	    if (yy_marsmsg != yy_marsmsgbuf)
+	      YYSTACK_FREE (yy_marsmsg);
+	    yy_marsmsg = (char *) YYSTACK_ALLOC (yy_marsalloc);
+	    if (yy_marsmsg)
+	      yy_marsmsg_alloc = yy_marsalloc;
+	    else
+	      {
+		yy_marsmsg = yy_marsmsgbuf;
+		yy_marsmsg_alloc = sizeof yy_marsmsgbuf;
+	      }
+	  }
+
+	if (0 < yy_marssize && yy_marssize <= yy_marsmsg_alloc)
+	  {
+	    (void) yy_marssyntax_error (yy_marsmsg, yy_marsstate, yy_marschar);
+	    yy_marserror (yy_marsmsg);
+	  }
+	else
+	  {
+	    yy_marserror (YY_("syntax error"));
+	    if (yy_marssize != 0)
+	      goto yy_marsexhaustedlab;
+	  }
+      }
+#endif
+    }
+
+
+
+  if (yy_marserrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+	 error, discard it.  */
+
+      if (yy_marschar <= YYEOF)
+	{
+	  /* Return failure if at end of input.  */
+	  if (yy_marschar == YYEOF)
+	    YYABORT;
+	}
+      else
+	{
+	  yy_marsdestruct ("Error: discarding",
+		      yy_marstoken, &yy_marslval);
+	  yy_marschar = YYEMPTY;
+	}
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yy_marserrlab1;
+
+
+/*---------------------------------------------------.
+| yy_marserrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yy_marserrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yy_marserrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yy_marserrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yy_marslen);
+  yy_marslen = 0;
+  YY_STACK_PRINT (yy_marsss, yy_marsssp);
+  yy_marsstate = *yy_marsssp;
+  goto yy_marserrlab1;
+
+
+/*-------------------------------------------------------------.
+| yy_marserrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yy_marserrlab1:
+  yy_marserrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yy_marsn = yy_marspact[yy_marsstate];
+      if (yy_marsn != YYPACT_NINF)
+	{
+	  yy_marsn += YYTERROR;
+	  if (0 <= yy_marsn && yy_marsn <= YYLAST && yy_marscheck[yy_marsn] == YYTERROR)
+	    {
+	      yy_marsn = yy_marstable[yy_marsn];
+	      if (0 < yy_marsn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yy_marsssp == yy_marsss)
+	YYABORT;
+
+
+      yy_marsdestruct ("Error: popping",
+		  yy_marsstos[yy_marsstate], yy_marsvsp);
+      YYPOPSTACK (1);
+      yy_marsstate = *yy_marsssp;
+      YY_STACK_PRINT (yy_marsss, yy_marsssp);
+    }
+
+  *++yy_marsvsp = yy_marslval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yy_marsstos[yy_marsn], yy_marsvsp, yy_marslsp);
+
+  yy_marsstate = yy_marsn;
+  goto yy_marsnewstate;
+
+
+/*-------------------------------------.
+| yy_marsacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yy_marsacceptlab:
+  yy_marsresult = 0;
+  goto yy_marsreturn;
+
+/*-----------------------------------.
+| yy_marsabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yy_marsabortlab:
+  yy_marsresult = 1;
+  goto yy_marsreturn;
+
+#if !defined(yy_marsoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yy_marsexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yy_marsexhaustedlab:
+  yy_marserror (YY_("memory exhausted"));
+  yy_marsresult = 2;
+  /* Fall through.  */
+#endif
+
+yy_marsreturn:
+  if (yy_marschar != YYEMPTY)
+     yy_marsdestruct ("Cleanup: discarding lookahead",
+		 yy_marstoken, &yy_marslval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yy_marslen);
+  YY_STACK_PRINT (yy_marsss, yy_marsssp);
+  while (yy_marsssp != yy_marsss)
+    {
+      yy_marsdestruct ("Cleanup: popping",
+		  yy_marsstos[*yy_marsssp], yy_marsvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yy_marsoverflow
+  if (yy_marsss != yy_marsssa)
+    YYSTACK_FREE (yy_marsss);
+#endif
+#if YYERROR_VERBOSE
+  if (yy_marsmsg != yy_marsmsgbuf)
+    YYSTACK_FREE (yy_marsmsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yy_marsresult);
+}
+
+
+
+/* Line 1675 of yacc.c  */
+#line 273 "langy.y"
+
+
+#include "langl.c"
+
+static value *reverse_other(value *r,value *s)
+{
+	value *v;
+
+	if(r == NULL) return s;
+
+	v              = r->other_names;
+	r->other_names = s;
+	return reverse_other(v,r); 
+}
+
+static value *reverse_value(value *r,value *s)
+{
+	value *v;
+
+	if(r == NULL) return s;
+
+	v              = r->next;
+	r->next        = s;
+	return reverse_value(v,r); 
+}
+
+static parameter *reverse_parameter(parameter *r,parameter *s)
+{
+	parameter *v;
+
+	if(r == NULL) return s;
+
+	r->values         = reverse_value(r->values,NULL);
+	r->default_values = reverse_value(r->default_values,NULL);
+	v                 = r->next;
+	r->next           = s;
+
+	return reverse_parameter(v,r); 
+}
+
+static request *reverse_request(request *r,request *s)
+{
+	request *v;
+
+	if(r == NULL) return s;
+
+	r->params = reverse_parameter(r->params,NULL);
+	v         = r->next;
+	r->next   = s;
+	return reverse_request(v,r); 
+}
+
+static request *reverse(request *r)
+{
+	return reverse_request(r,NULL);
+}
+
diff --git a/src/libMars-ecregrid/langy.y b/src/libMars-ecregrid/langy.y
new file mode 100644
index 0000000..83aae06
--- /dev/null
+++ b/src/libMars-ecregrid/langy.y
@@ -0,0 +1,328 @@
+%{
+
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include "lang.h"
+
+static request *reverse(request*);
+static value *reverse_other(value *r,value *s);
+static value *reverse_value(value *r,value *s);
+request *parser_lang;
+request *parser_reqs;
+rule    *parser_ruls;
+
+%}
+
+%union {
+    char       *str;
+	request    *req;
+	parameter  *par;
+	value      *val;
+	rule       *rul;
+	action     *act;
+	condition  *con;
+	testop      top;
+}
+
+%start all
+
+%token IF
+%token AND
+%token NOT
+%token OR
+%token THEN
+%token WARNING
+%token INFO
+%token MAIL
+%token MAILUSER
+%token ERROR
+%token EXIT
+%token SET
+%token UNSET
+%token IN
+%token FAIL
+
+%token <str>WORD
+
+%type  <req>verb
+%type  <req>verbs
+%type  <req>requests
+%type  <req>request
+%type  <req>intf
+
+%type  <rul>rule;
+%type  <rul>rules;
+
+%type  <act>action;
+%type  <act>actions;
+
+%type  <top>op;
+%type  <con>term;
+%type  <con>factor;
+%type  <con>atom;
+%type  <con>func;
+%type  <con>test;
+
+%type  <par>parameter_list
+%type  <par>parameter_desc
+%type  <par>parameters
+%type  <par>parameter
+
+%type  <str>info
+
+%type  <val>value_list
+%type  <val>value_desc
+%type  <val>reference
+
+%type  <val>aliases
+%type  <val>alias
+
+%type  <val>values
+%type  <val>value
+
+%%
+
+all        : empty
+           | verbs                      { parser_lang  = reverse($1);  }
+           | requests                   { parser_reqs  = reverse($1);  }
+		   | rules                      { parser_ruls  = $1;           }
+		   ;
+
+requests   : request 
+           | requests request           { $$ = $2; $2->next = $1;   }
+           ;
+
+
+request    : WORD                       { $$ = new_request($1,NULL);     }
+           | WORD ',' parameters        { $$ = new_request($1,$3);       }
+           | WORD '.'                   { $$ = new_request($1,NULL);     }
+           | WORD ',' parameters '.'    { $$ = new_request($1,$3);       }
+           | ':' parameters ':'         { $$ = new_request(0,$2);        }
+           ;
+
+parameters : parameter
+           | parameters ',' parameter   { $$ = $3; $3->next = $1;   }
+           ;
+
+parameter  : WORD intf '=' values            
+					{ $$ = new_parameter($1,$4); $$->interface = $2; }
+           | WORD intf '=' '(' requests ')'  
+					{   $$ = new_parameter($1,NULL);
+						$$->interface = $2;
+						$$->subrequest = reverse($5);    }
+
+			/* used for marsgen ... */
+
+           | WORD '@' WORD '=' values   {
+											$$ = new_parameter($3,$5);      
+											$$->default_values=new_value($1);
+										}
+		   ;
+
+values     : value
+           | values '/' value           { $$ = $3; $3->next = $1;   }
+
+value      : WORD                       { $$ = new_value($1);             }     
+           | '\"'                       { $$ = new_value(strcache("\"")); }
+		   | '*'  '[' WORD ']'          { 
+											char buf[1024];
+											sprintf(buf,"*%s",$3);
+											$$ = new_value(strcache(buf));  
+											strfree($3);
+										}
+		   | '*'                        { $$ = new_value(strcache("*"));  }
+		   | '/'                        { $$ = new_value(strcache("/"));  }
+		   | '@'                        { $$ = new_value(strcache("@"));  }
+		   ;
+
+empty      :
+           ;
+
+/*-------------------------------------------------------------------*/
+
+
+verbs            : verb 
+                 | verbs verb            { $$ = $2; $2->next = $1;   }
+                 ;
+
+info             : ';' WORD { $$ =  $2; }
+				 | empty    { $$ =  NULL; }
+				 ;
+
+verb             : WORD info info '{' parameter_list '}' 
+					{ 
+					  $$ = new_request($1,$5); 
+					  $$->info = $2;
+					  $$->kind = $3;
+					}
+                 | WORD info info  '{' '}'                
+					{ 
+					  $$ = new_request($1,NULL); 
+					  $$->info = $2;
+					  $$->kind = $3;
+					}
+
+parameter_list   : parameter_desc
+                 | parameter_list parameter_desc { $$ = $2; $2->next = $1;   }
+
+parameter_desc   : WORD intf '{' value_list '}' { $$ = new_parameter($1,$4); 
+					   $$->interface = $2; }
+			     | WORD intf '{' value_list '}' '=' values 
+				 	{ 
+						$$ = new_parameter($1,$4); 
+						$$->interface = $2;
+						$$->default_values = $7;
+					}
+				 ;
+
+intf             : empty { $$ = NULL; }
+				 | '[' parameters ']' { $$ = new_request(NULL,$2); }
+				 ;
+
+value_list       : value_desc
+			     | value_list value_desc { $$ = $2; $2->next = $1;   }
+				 ;
+
+
+value_desc       : alias
+				 | alias ';' aliases { $$ = $1; 
+						  	$1->other_names = reverse_other($3,NULL);
+						  }
+				 | reference 
+				 ;
+
+aliases          : alias
+				 | aliases ';' alias { $$ = $3; $3->other_names = $1;  }
+				 ;
+
+alias            : value
+				 | value '=' '(' values ')' { $$ = $1; $1->expand = reverse_value($4,0); }
+				 ;
+
+
+reference        : '&' WORD '&' WORD { $$ = new_reference($2,$4); }
+				 ;
+
+/*-------------------------------------------------------------------*/
+
+rules  : rule
+	   | rule rules { $$ = $1; $1->next = $2;}
+	   ;
+
+
+rule   : IF term THEN actions { $$ = new_rule($2,$4);}
+	   ;
+
+actions : action 
+		| action actions { $$ = $1; $1->next = $2;}
+		;
+
+term   : factor 
+	   | factor OR  term   { $$ = new_condition(t_or,$1,$3);}
+	   ;
+
+factor : test   
+	   | test   AND factor { $$ = new_condition(t_and,$1,$3);}
+	   ; 
+
+test   : atom op atom     { $$ = new_condition($2,$1,$3); }
+	   | NOT term         { $$ = new_condition(t_not,$2,NULL); }
+	   | '(' term ')'     { $$ = $2; }
+	   | atom             
+	   | func
+	   ;
+
+atom   : values           { $$ = new_condition(t_val,(condition*)$1,NULL);} 
+	   ;
+
+func:    WORD '(' WORD ')' { $$ = new_condition(t_func,(condition*)strcache($1),(condition*)strcache($3));}
+	| WORD '(' ')' { $$ = new_condition(t_func,(condition*)strcache($1),NULL);}
+    ;
+
+
+op     : '='      { $$ = t_eq;}
+	   | '>'      { $$ = t_gt;}
+	   | '<'      { $$ = t_lt;}
+	   | '>' '='  { $$ = t_ge;}
+	   | '<' '='  { $$ = t_le;}
+	   | '<' '>'  { $$ = t_ne;}
+	   | IN       { $$ = t_in;}
+	   ;
+
+action : SET parameter { $$ = new_action(a_set,$2); 
+			           $2->values = reverse_value($2->values,NULL);  }
+	   | UNSET WORD    { $$ = new_action(a_unset,$2); }
+	   | WARNING WORD  { $$ = new_action(a_warning,$2); }
+	   | MAIL    WORD  { $$ = new_action(a_mail,$2); }
+	   | MAILUSER WORD { $$ = new_action(a_mailuser,$2); }
+	   | INFO    WORD  { $$ = new_action(a_info,$2); }
+	   | ERROR   WORD  { $$ = new_action(a_error,$2); }
+	   | EXIT    WORD  { $$ = new_action(a_exit,$2); }
+	   | FAIL          { $$ = new_action(a_fail,NULL); }
+	   ;
+
+%%
+
+#include "langl.c"
+
+static value *reverse_other(value *r,value *s)
+{
+	value *v;
+
+	if(r == NULL) return s;
+
+	v              = r->other_names;
+	r->other_names = s;
+	return reverse_other(v,r); 
+}
+
+static value *reverse_value(value *r,value *s)
+{
+	value *v;
+
+	if(r == NULL) return s;
+
+	v              = r->next;
+	r->next        = s;
+	return reverse_value(v,r); 
+}
+
+static parameter *reverse_parameter(parameter *r,parameter *s)
+{
+	parameter *v;
+
+	if(r == NULL) return s;
+
+	r->values         = reverse_value(r->values,NULL);
+	r->default_values = reverse_value(r->default_values,NULL);
+	v                 = r->next;
+	r->next           = s;
+
+	return reverse_parameter(v,r); 
+}
+
+static request *reverse_request(request *r,request *s)
+{
+	request *v;
+
+	if(r == NULL) return s;
+
+	r->params = reverse_parameter(r->params,NULL);
+	v         = r->next;
+	r->next   = s;
+	return reverse_request(v,r); 
+}
+
+static request *reverse(request *r)
+{
+	return reverse_request(r,NULL);
+}
diff --git a/src/libMars-ecregrid/list.c b/src/libMars-ecregrid/list.c
new file mode 100755
index 0000000..fffdba7
--- /dev/null
+++ b/src/libMars-ecregrid/list.c
@@ -0,0 +1,34 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+boolean in_list(marslist *l,const char *name,void *data)
+{
+	while(l)
+	{
+		if(EQ(l->name,name)) 
+			return true;
+		l = l->next;
+	}
+	return false;
+
+}
+
+
+void add_to_list(marslist **l,const char *name,void *data)
+{
+	marslist *f = NEW(marslist);
+	f->name = strcache(name);
+	f->next = *l;
+	f->data = data;
+	*l = f;
+}
+
diff --git a/src/libMars-ecregrid/llmatrix.c b/src/libMars-ecregrid/llmatrix.c
new file mode 100644
index 0000000..761b908
--- /dev/null
+++ b/src/libMars-ecregrid/llmatrix.c
@@ -0,0 +1,274 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include <math.h>
+#include <limits.h>
+#include "mars.h"
+
+/*
+ LLMATRIX
+ AREA
+ GRID
+ NORTH
+ WEST
+ EAST
+ SOUTH
+ NLAT
+ NLON
+ DATA
+*/
+
+
+err llmatrix_to_grib(const char *in,const char *out)
+{
+	fortint     ksec0[ISECTION_0];
+	gribsec1    ksec1;
+	gribsec2_ll ksec2;
+	fortint     ksec3[ISECTION_3];
+	fortint     ksec4[ISECTION_4];
+
+	fortfloat   psec2[RSECTION_2];
+	fortfloat   psec3[RSECTION_3];
+	fortfloat   missing = FLT_MAX;
+
+
+	err e = 0;
+	int miss = 0;
+	fortint nlat,nlon,nbits;
+	fortfloat north,west,south,east,ew,ns;
+	char *buffer =NULL;
+	fortint buflen;
+	fortfloat *psec4 =NULL;
+	fortint i,npoints;
+	int n = 0;
+	char line[1024];
+	char *tmp = marstmp();
+	FILE *f,*g;
+	request *r;
+	const char *p;
+
+	CLEAR(ksec0);
+	CLEAR(ksec1);
+	CLEAR(ksec2);
+	CLEAR(ksec3);
+	CLEAR(ksec4);
+	CLEAR(psec2);
+	CLEAR(psec3);
+
+	f = fopen(in,"r");
+	if(!f)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot open %s",in);
+		return -1;
+	}
+
+	g = fopen(tmp,"w");
+	if(!g)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot open %s",tmp);
+		fclose(f);
+		return -1;
+	}
+
+
+	while(fgets(line,sizeof(line),f))
+	{
+		if(*line != '#')
+		{
+			int l = strlen(line)-1;
+
+			while(l >= 0 && (
+					line[l] == ' '  || 
+					line[l] == '\n' || 
+					line[l] == ','  || 
+					line[l] == '\t')
+					)
+				line[l--] = 0;
+
+
+			if(n == 0) {
+				/* Look for a = */
+				char *p  = line;
+				int flg  = 0;
+				while(*p) if(*p++ == '=') flg++;
+				/* If a =, add a verb */
+				if(flg) {
+					fprintf(g,"LLMATRIX");
+					fprintf(g,",%s",line);
+				}
+				else fprintf(g,"%s",line);
+			}
+			else fprintf(g,",%s",line);
+			n++;
+		}
+		if(strncmp(line,"#DATA",5)==0) 
+			break;
+	}
+
+	fclose(g);
+
+	r = read_request_file(tmp);
+	unlink(tmp);
+	print_all_requests(r);
+
+	north   = atof((p=get_value(r,"NORTH",0))?p:"0");
+	west    = atof((p=get_value(r,"WEST", 0))?p:"0");
+	ew      = atof((p=get_value(r,"GRID", 0))?p:"0");
+	ns      = atof((p=get_value(r,"GRID", 1))?p:"0");
+	nlat    = atol((p=get_value(r,"NLAT", 0))?p:"0");
+	nlon    = atol((p=get_value(r,"NLON", 0))?p:"0");
+	missing = (p=get_value(r,"MISSING", 0))?atof(p):missing;
+
+	if(ew == 0 || ns == 0 || nlat == 0 || nlon == 0)
+	{
+		marslog(LOG_EROR,"Invalid ll-matrix");
+		fclose(f);
+		return -1;
+	}
+
+	npoints = nlat * nlon;
+
+	south   = north - (nlat-1) * ns;
+	east    = west  + (nlon-1) * ew;
+
+	/* ============================================================ */
+
+	psec4 = NEW_ARRAY(fortfloat,npoints);
+
+	n = 0;
+	for(i=0;i<npoints;i++)
+	{
+#ifndef R64
+		if(fscanf(f,"%f",&psec4[i])>0)
+#else
+		if(fscanf(f,"%lf",&psec4[i])>0)
+#endif
+		{
+			n++;
+			if(psec4[i] == missing)
+				miss++;
+		}
+	}
+	fclose(f);
+
+	if(n != npoints)
+	{
+		marslog(LOG_EROR,"File %s, read %d values out of %d expected",
+			in,n,npoints);
+		e = -1;
+		goto error;
+	}
+
+	 /* 1 k header + 32 bit packing */
+
+	buflen = (npoints + 1024)*4;
+	buffer = (char*)MALLOC(buflen);
+
+	/* ============================================================ */
+
+	ksec1.version         = 128;
+	ksec1.center          =  98;
+	ksec1.generation      = mars.computeflg;
+	ksec1.grid_definition = 255;
+	ksec1.flags           = miss?192:128;
+
+
+	ksec1.parameter       = 255;
+	ksec1.level_type      = GRIB_SURFACE;
+
+	ksec1.year            = 94;
+	ksec1.month           = 1;
+	ksec1.day             = 1;
+	ksec1.century         = 20;
+
+
+	ksec1.time_unit       = 1;
+	ksec1.local_use       = 1;
+	ksec1.local.ecmwf_local_id  = GRIB_ENSEMBLE_FORECAST;
+	ksec1.local.mars_class      = GRIB_CLASS_OD;
+	ksec1.local.mars_type       = 3;    /* IA */
+	ksec1.local.mars_stream     = 1025; /* DA */
+	ksec1.local.mars_expver     = 0x30303031; /* 01 */
+
+	ksec2.data_rep        = GRIB_LAT_LONG;
+	ksec2.points_parallel = nlon;
+	ksec2.points_meridian = nlat;
+
+	ksec2.limit_north = (fortint)(north * GRIB_FACTOR);
+	ksec2.limit_west  = (fortint)(west * GRIB_FACTOR);
+	ksec2.resolution  = 128;
+	ksec2.limit_south = (fortint)(south * GRIB_FACTOR);
+	ksec2.limit_east  = (fortint)(east * GRIB_FACTOR);
+	ksec2.grid_ew     = (fortint)(ew * GRIB_FACTOR);
+	ksec2.grid_ns     = (fortint)(ns * GRIB_FACTOR);
+
+
+	/*  Missing value */
+
+	ksec3[0] = 0;
+	ksec3[1] = INT_MAX;
+	psec3[1] = missing;
+
+	/*  Data */
+
+	ksec4[0] = npoints;
+	ksec4[1] = nbits = best_packing(ksec4[1]);
+
+	printf("nbits   = %d\n",nbits);
+	printf("missing = %g\n",missing);
+
+	if(cgribex( ksec0,(fortint*)&ksec1, (fortint*)&ksec2,psec2,
+		ksec3,psec3, ksec4,psec4,
+		npoints, buffer, &buflen, "C") != 0)
+	{
+		marslog(LOG_EROR,"Error encoding GRIB");
+		e = -1;
+		goto error;
+	}
+
+/*
+	psec3[1] = 9999;
+	e = cgribex( ksec0,(fortint*)&ksec1, (fortint*)&ksec2,psec2,
+		ksec3,psec3, ksec4,psec4,
+		npoints, buffer, &buflen, "D");
+	printf("decode %d\n",e);
+*/
+
+	f = fopen(out,"w");
+	if(!f)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot open %s",out);
+		e = -1;
+		goto error;
+	}
+
+	if(fwrite(buffer,1,buflen,f) != buflen)
+	{
+		marslog(LOG_EROR|LOG_PERR,"fwrite(%s) failed",out);
+		e = -1;
+	}
+		
+	if(fclose(f))
+	{
+		marslog(LOG_EROR|LOG_PERR,"fclose(%s) failed",out);
+		e = -1;
+	}
+
+error:
+	FREE(psec4);
+	FREE(buffer);
+	return e;
+}
+
+
+err grib_to_llmatrix(const char *g,const char *m)
+{
+	return -1;
+}
diff --git a/src/libMars-ecregrid/lock.c b/src/libMars-ecregrid/lock.c
new file mode 100755
index 0000000..63200be
--- /dev/null
+++ b/src/libMars-ecregrid/lock.c
@@ -0,0 +1,20 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+void marslock(char *resource,boolean shared)
+{
+}
+
+void marsunlock(char *resource)
+{
+}
+
diff --git a/src/libMars/logfile.c b/src/libMars-ecregrid/logfile.c
similarity index 100%
copy from src/libMars/logfile.c
copy to src/libMars-ecregrid/logfile.c
diff --git a/src/libMars/mars.h b/src/libMars-ecregrid/mars.h
similarity index 100%
copy from src/libMars/mars.h
copy to src/libMars-ecregrid/mars.h
diff --git a/src/libMars-ecregrid/mcs.h b/src/libMars-ecregrid/mcs.h
new file mode 100644
index 0000000..d66b75c
--- /dev/null
+++ b/src/libMars-ecregrid/mcs.h
@@ -0,0 +1,92 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+/* Title:	MARS CACHING SYSTEM DATABASE */
+/* Part:	Include file */
+/* Author:	a.hofstadler */
+/* Version:	2.0	93-MAY-21 */
+/* Changes:	 */
+
+
+#include <mscc.h>
+
+#define MCS_DBASE     "/mcs/mcs"
+#define MCS_SQL       "/usr/local/lib/metaps/sql"
+#define MCS_CHK       "/usr/local/lib/metaps/chk/mcs.chk"
+#define MCS_DEFAULT_MSPATH "/usr/local/apps/empress/v6.2"
+
+/* pattern searched in sql-script for: if there store data in compressed form */
+#define MCS_COMPRESSED_PATTERN	"(in compressed form)"
+
+#define MCS_TAB_CHAR		15			/* max. # of characters of tablename */
+#define MCS_MAX_LINE_CHAR 100
+
+#define MCS_USE_TRANSACTION_AT_TABLECREATION false
+
+typedef struct attribute{
+
+	struct attribute *next;
+
+	char    *name;				/* mars and empress parameter name */
+	addr    emp_desc;			/* attribute descriptor */
+	boolean qual_flag;			/* flag if used in qualification or not */
+
+}attribute;
+
+
+typedef struct emp_bulk{
+	long	len;
+	long	buf;
+}emp_bulk;
+
+
+typedef struct mcs_private{
+
+	/* filled outside */
+
+	char	*dbname;
+	char	*sql;
+	char	*chk;
+	int		maxtry;
+	int		sleeptime;
+	boolean compress;
+
+	/* filled inside */
+
+	rule    *_rules;            /* checking rules from check file */
+
+	char	*_tab_name;			/* first characters of tablename: eg.: grb_ */
+
+	const char	*_date;
+	int		_date_cnt;
+
+	const char	*_type;
+
+	char	_sql[MCS_MAX_LINE_CHAR];
+
+	addr	_tab;				/* table descriptor */
+
+	addr	_rec;				/* record descriptor */
+	addr	_new_rec;			/* second record descriptor for updates */
+
+	addr	_qual;				/* qualification descriptor */
+	boolean	_qual_is_null;
+
+	addr	_ret;				/* retrieval descriptor */
+
+	attribute *_first;			/* begin of linked list of attributes */
+
+	int		_dim_priv_attr;		/* dimension of private attribute array */
+
+	boolean _compress;			/* flag determined from sql-script */
+
+	request *_r;				/* THE request */
+
+}mcs_private;
diff --git a/src/libMars-ecregrid/memory.c b/src/libMars-ecregrid/memory.c
new file mode 100755
index 0000000..39af95a
--- /dev/null
+++ b/src/libMars-ecregrid/memory.c
@@ -0,0 +1,392 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mars.h"
+
+/* #define CHECK_FOR_LEAKS */
+
+union align {
+	double d;
+	int    n;
+	char * p;
+	long64 l;
+};
+
+#define WORD sizeof(union align)
+
+static int page_size = 0;
+
+static boolean exit_on_failure = true;
+
+typedef struct memblk {
+	struct memblk *next;
+	long     cnt;
+	long     left;
+	long     size;
+	char     buffer[WORD];
+} memblk;
+
+typedef struct memprocs {
+	struct memprocs *next;
+	memproc          proc;
+	void            *data;
+} memprocs;
+
+static memprocs *mprocs = NULL;
+
+#define HEADER_SIZE  (sizeof(memblk) - WORD)
+
+static mempool _transient_mem = {
+	1,
+	0,
+};
+
+mempool *transient_mem = &_transient_mem;
+
+static mempool _permanent_mem = {
+	1,
+	0,
+};
+
+mempool *permanent_mem = &_permanent_mem;
+
+#if defined(CRAY)
+int getpagesize() { return 4096; }
+#endif
+
+void mem_exit_on_failure(boolean n)
+{
+	exit_on_failure = n;
+}
+
+static int recover_some_space(void)
+{
+	memprocs *p = mprocs;
+	marslog(LOG_WARN,"Memory is low, trying to recover some");
+
+	if(mars.debug)
+	{
+		long bytes = proc_mem();
+		marslog(LOG_DBUG,"Current memory used: %sbyte(s)",bytename((double)bytes));
+	}
+
+	memory_info();
+
+	while(p)
+	{
+		if(p->proc(p->data))
+			return 1;
+		p = p->next;
+	}	
+	return 0;
+}
+
+static int fail_nil(void *p,int size)
+{
+	if(p) return 0;
+	if(!exit_on_failure) return 0;
+
+	if(recover_some_space())
+		return 1;
+
+	marslog(LOG_EROR,"%s, out of memory allocating %d bytes",
+	    progname(),
+	    size);
+	marsexit(1);
+	return 0;
+}
+
+void *re_alloc(void *p,int size)
+{
+	void *x = realloc(p,size);
+
+	while(fail_nil(x,size))
+		x = realloc(p,size);
+
+	return x;
+}
+
+char *new_string(const char *p)
+{
+	char *q = (char*)strdup(p);
+	if(!q) {
+		while(fail_nil(q,strlen(p)))
+			q = (char*)strdup(p);
+	}
+	return q;
+}
+
+void *get_mem(int size)
+{
+	void *x = malloc(size);
+
+	while(fail_nil(x,size))
+		x = malloc(size);
+
+	return x;
+}
+
+void *get_mem_clear(int size)
+{
+	void *x = calloc(1,size);
+
+	while(fail_nil(x,size))
+		x = calloc(1,size);
+
+	return x;
+}
+
+void *free_mem(void *x)
+{
+	if(x) free(x);
+	return NULL;
+}
+
+static memblk *reserve = NULL;
+
+#ifdef CHECK_FOR_LEAKS
+
+void *fast_new(int s, mempool *pool) { return calloc(1,s); }
+void *fast_realloc(void *p, int s, mempool *pool) { return realloc(p,s); }
+void fast_delete(void *p, mempool *pool) { free(p); }
+void *reserve_mem(int s) { return malloc(s); }
+void release_mem(void *p) { free(p); }
+
+void memory_info()
+{
+	long bytes = proc_mem();
+	marslog(LOG_INFO,"Memory used: %sbyte(s)",bytename((double)bytes));
+}
+
+#else
+void *fast_new(int s,mempool *pool)
+{
+	char *p;
+	memblk *m = (memblk*)pool->priv;
+
+	/* align */
+
+	s = ((s+WORD-1)/WORD)*WORD;
+
+	while(m && (m->left < s))
+		m = m->next;
+
+	if(m == NULL)
+	{
+		memblk *p;
+		int    size;
+		if(!page_size) page_size = getpagesize();
+
+		size = page_size*pool->pages;
+
+		if(s > size - HEADER_SIZE)
+		{
+			marslog(LOG_WARN,"Object of %d bytes is too big for fast_new",s);
+			marslog(LOG_WARN,"Block size if %d bytes", size - HEADER_SIZE);
+			size = ((s + HEADER_SIZE + (page_size-1)) / page_size) * page_size;
+		}
+
+		p = (memblk*)(pool->clear?calloc(size,1):malloc(size));
+		while(fail_nil(p,size))
+			p = (memblk*)(pool->clear?calloc(size,1):malloc(size));
+		if(!p) return NULL;
+
+		p->next = (memblk*)pool->priv;
+		p->cnt  = 0;
+		p->size = p->left = size-HEADER_SIZE;
+		m       = p;
+		pool->priv = (void*)p;
+	}
+
+	p       = &m->buffer[m->size - m->left];
+	m->left -= s;
+	m->cnt++;
+	return p;
+}
+
+void *fast_realloc(void *p,int s,mempool *pool)
+{
+	void *q;
+
+	/* I'll come back here later... */
+
+	if((q = fast_new(s,pool)) == NULL) return NULL;
+	memcpy(q,p,s);
+
+	fast_delete(p,pool);
+
+	return q;
+}
+
+void fast_delete(void *p,mempool *pool)
+{
+	memblk *m = (memblk*)pool->priv;
+	memblk *n = NULL;
+	while(m)
+	{
+		if( ((char*)p >= (char*)&m->buffer[0]) && 
+		    ((char*)p < (char*)&m->buffer[m->size]))
+		{
+			m->cnt--;
+			if(m->cnt == 0)
+			{
+				if(n) n->next = m->next;
+				else pool->priv = (void*)m->next;
+				free((void*)m);
+			}
+			return;
+		}
+
+		n = m;
+		m = m->next;
+	}
+	marslog(LOG_EROR,"Bad fast_delete!!");
+	abort();
+}
+
+void fast_memory_info(const char *title,mempool *pool)
+{
+	memblk *m = (memblk*)pool->priv;
+	int count = 0;
+	int size = 0;
+	while(m)
+	{
+		count++;
+		size += m->size;
+		m = m->next;
+	}
+	marslog(LOG_INFO,"%s : %sbytes %d blocks",
+		title,
+		bytename(size),count);
+}
+
+void memory_info()
+{
+	memblk *r = reserve;
+	long size = 0;
+	while(r)
+	{
+		marslog(LOG_INFO,"Large buffer: %sbytes %s",
+				bytename(r->size),r->cnt?"in use":"free");
+		size += r->size;
+		r = r->next;
+	}
+
+	marslog(LOG_INFO,"Total large : %sbytes",bytename(size));
+	fast_memory_info("Transient memory",transient_mem);
+	fast_memory_info("Permanent memory",permanent_mem);
+}
+
+void *reserve_mem(int s)
+{
+	static int first = 1;
+	memblk *r;
+
+	if(first)
+	{
+		install_memory_proc((memproc)purge_mem,NULL);
+		first = 0;
+	}
+
+	s = ((s+WORD-1)/WORD)*WORD;
+	r = reserve;
+	while(r)
+	{ 
+		if(r->cnt == 0 && r->size == s)
+			break;
+		r = r->next;
+	}
+
+	if(r)
+	{
+		marslog(LOG_DBUG,"Reusing %ld bytes %d",s,r->size);
+	}
+	else
+	{
+		int size = s + HEADER_SIZE;
+		marslog(LOG_DBUG,"Allocating %d (%d)bytes",s,size);
+		r = (memblk*)malloc(size);
+		while(fail_nil(r,size))
+			r = (memblk*)malloc(size);
+		if(!r) return NULL;
+		r->next = reserve;
+		reserve = r;
+	}
+	r->size = s;
+	r->cnt  = 1;
+	return &r->buffer[0];
+
+}
+
+void release_mem(void *p)
+{
+	memblk *r = (memblk*)(((char*)p) - HEADER_SIZE);
+	memblk *s = reserve;
+	while(s && (s!=r)) s = s->next;
+	if(s == NULL)
+		marslog(LOG_WARN,"release_mem: invalid pointer");
+	else
+	{
+		marslog(LOG_DBUG,"Release %d bytes %d",s->size,r->size);
+		s->cnt = 0;
+	}
+}
+
+#endif
+
+int purge_mem(void)
+{
+	memblk *p = reserve;
+	memblk *q = NULL;
+	while(p)
+	{
+		if(p->cnt == 0)
+		{
+			if(q) q->next = p->next;
+			else reserve = p->next;
+			free(p);
+			return 1;
+		}
+		q = p;
+		p = p->next;
+	}
+	return 0;
+}
+
+void install_memory_proc(memproc proc,void *data)
+{
+	memprocs *p = NEW_CLEAR(memprocs);
+	p->proc = proc;
+	p->data = data;
+	p->next = mprocs;
+	mprocs  = p;
+}
+
+void remove_memory_proc(memproc proc,void *data)
+{
+	memprocs *p = mprocs;
+	memprocs *q = NULL;
+
+	while(p)
+	{
+		if(p->proc == proc && p->data == data)
+		{
+			if(q) q->next = p->next; else mprocs = p->next;
+			FREE(p);
+			return;
+		}
+		q = p;
+		p = p->next;
+	}
+	marslog(LOG_WARN,"remove_memory_proc: cannot find proc");
+}
diff --git a/src/libMars-ecregrid/metadata.c b/src/libMars-ecregrid/metadata.c
new file mode 100644
index 0000000..10e575b
--- /dev/null
+++ b/src/libMars-ecregrid/metadata.c
@@ -0,0 +1,33 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+request* read_request(mstream* s)
+{
+    request* r = empty_request(upcase(stream_read_string(s)));
+    int      n = stream_read_int(s);
+    int      i;
+
+    for(i = 0; i < n; i++)
+    {
+        const char* p = upcase(stream_read_string(s));
+        int m         = stream_read_int(s);
+        int j;
+        char *q = strcache(p);
+
+        for(j = 0; j < m; j++)
+            add_value(r,q,"%s",upcase(stream_read_string(s)));
+
+        strfree(q);
+    }
+
+    return r;
+}
diff --git a/src/libMars-ecregrid/multibase.c b/src/libMars-ecregrid/multibase.c
new file mode 100644
index 0000000..89f27bc
--- /dev/null
+++ b/src/libMars-ecregrid/multibase.c
@@ -0,0 +1,249 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include <ctype.h>
+
+#define DB_COUNT 2
+
+static void     multi_init(void);
+static err      multi_open(void *data,request*,request*,int);
+static err      multi_close(void *data);
+static err      multi_read(void *data,request *r,void *buffer,long *length);
+static err      multi_write(void *data,request *r,void *buffer,long *length);
+static boolean  multi_check(void *data,request *r);
+static err      multi_validate(void *data,request*,request*,int);
+
+
+typedef struct multidata {
+	char     *base[2];
+	database *db[2];
+	request  *r;
+	hypercube  *cube;
+	request  *grib;
+	int      current;
+	int      count;
+	int      got;
+	int      expect;
+	char     *found;
+} multidata;
+
+static option opts[] = {
+    {"base1",NULL,NULL,"mars1",
+    t_str,sizeof(char*), OFFSET(multidata,base[0])},
+
+    {"base2",NULL,NULL,"mars2",
+    t_str,sizeof(char*), OFFSET(multidata,base[1])},
+};
+
+
+base_class _multibase = {
+
+	NULL,                      /* parent class */
+	"multibase",                /* name         */
+
+	false,                     /* inited       */
+
+	sizeof(multidata),           /* private size */
+	NUMBER(opts),              /* option count */
+	opts,                      /* options      */
+
+	multi_init,                  /* init         */
+
+	multi_open,                  /* open         */
+	multi_close,                 /* close        */
+
+	multi_read,                  /* read         */
+	multi_write,                 /* write        */
+
+	NULL,                      /* control      */
+
+	multi_check,                 /* check        */
+    NULL,                      /* query        */
+
+    NULL,                      /* archive      */
+    NULL,                      /* admin        */
+
+    multi_validate,            /* validate */
+
+
+};
+
+
+base_class *multibase = &_multibase;
+
+static void multi_init(void)
+{
+}
+
+
+static err open_next(multidata *multi)
+{
+	const char   *name;
+	request      *cachesetup = 0;
+	request *setup;
+
+	if(multi->current >= 0 && multi->db[multi->current])
+	{
+		err e = database_close(multi->db[multi->current]);
+		multi->db[multi->current] = NULL;
+		if(e) return e;
+	}
+
+	multi->current++;
+	if(multi->current >= DB_COUNT)
+		return EOF;
+
+	setup = findbase(multi->base[multi->current]);
+	if(!setup)
+		return -2;
+	
+	multi->db[multi->current] = openbase(setup,multi->r,&name,&cachesetup,READ_MODE);
+	if(!multi->db[multi->current])
+		return -2;
+
+	return NOERR;
+}
+
+static err  multi_open(void *data,request *r,request *e,int mode)
+{
+	multidata *multi = (multidata*)data;
+	multi->current = -1;
+
+	multi->expect = count_fields(r);
+	multi->r = clone_all_requests(r);
+
+	multi->cube = new_hypercube_from_mars_request(multi->r);
+
+	unset_value(multi->r,"EXPECT");
+	multi->count = count_fields(multi->r);
+
+	if(multi->count)
+		multi->found = NEW_ARRAY_CLEAR(char,multi->count);
+
+	multi->grib = empty_request("GRIB");
+	return open_next(multi);
+}
+
+static err  multi_close(void *data)
+{
+	multidata *multi = (multidata*)data;
+	int ret = 0;
+	int i;
+	int e;
+
+	for(i = 0; i < DB_COUNT; i++)
+		if(multi->db[i] != 0)
+		{
+			e = database_close(multi->db[i]);
+			if(e) ret = e;
+		}
+
+	free_all_requests(multi->grib);
+	free_all_requests(multi->r);
+	free_hypercube(multi->cube);
+	FREE(multi->found);
+
+	return ret;
+}
+
+static boolean not_duplicate(multidata *multi,void *buffer,long length)
+{
+	int i = 0;
+
+	if(multi->expect == 0 || multi->count == 0)
+		return true;
+
+	if( grib_to_request(multi->grib,buffer,length) != NOERR)
+	{
+		marslog(LOG_WARN,"Multi-base: error in grib_to_request");	
+		return true;
+	}
+
+	i = cube_order(multi->cube, multi->grib);
+
+	if( i < 0 || i >= multi->count)
+	{
+		marslog(LOG_WARN,"Multi-base: unexpected grib");	
+		print_all_requests(multi->grib);
+		return true;
+	}
+
+	if(multi->found[i])
+		return false;
+	
+	multi->got++;
+	multi->found[i] = true;
+
+	return true;
+}
+
+static err  multi_read(void *data,request *r,void *buffer,long *length)
+{
+	multidata *multi = (multidata*)data;
+	int ret = 0;
+	long save = *length;
+
+
+	/* To see.... */
+	if(multi->expect > 0 && multi->got == multi->expect)
+		return EOF;
+
+	while(multi->current < DB_COUNT)
+	{
+		*length = save;
+		ret = database_read(multi->db[multi->current],r,buffer,length);
+
+		switch(ret)
+		{
+			case NOERR:
+				if(not_duplicate(multi,buffer,*length))
+					return NOERR;
+				break;
+
+			default:
+				ret = open_next(multi);
+				if(ret) return ret;
+				break;
+		}
+	}
+
+	return EOF;
+}
+
+static err  multi_write(void *data,request *r,void *buffer,long *length)
+{
+	marslog(LOG_EROR,"Cannot write on Multi-database");
+	return -2;
+}
+
+static boolean  multi_check(void *data,request *r)
+{
+	return is_grib(r) || is_bufr(r);
+}
+
+static err      multi_validate(void *data,request *r,request *e,int mode)
+{
+	multidata *multi = (multidata*)data;
+	const char   *name;
+	request     *setup;
+	int i;
+
+	for(i = 0; i < DB_COUNT; i++)
+	{
+		setup = findbase(multi->base[i]);
+		if(!setup) return -1;
+		name  = get_value(setup,"class",0);
+		if(database_validate(base_class_by_name(name),multi->base[i],r,e,mode) != 0)
+			return -1;
+	}
+
+	return 0;
+}
diff --git a/src/libMars-ecregrid/netbase.c b/src/libMars-ecregrid/netbase.c
new file mode 100755
index 0000000..38056c6
--- /dev/null
+++ b/src/libMars-ecregrid/netbase.c
@@ -0,0 +1,1107 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include "ecaccess.h"
+#include "base.h"
+#include "netbase.h"
+#include <signal.h>
+#include <setjmp.h>
+#include <time.h>
+#ifdef sgi
+#include <bstring.h>
+#endif
+
+#ifdef CRAY
+typedef u_long xdr_t;
+#else
+typedef void *xdr_t;
+#endif
+
+static jmp_buf env;
+
+#define NET_BUFFER	20480
+
+typedef struct netdata {
+
+    boolean server;
+	int    port;
+	char   *host;
+	int    soc;
+	int    cb_soc;
+	XDR    x;
+	netblk blk;
+	request *r;
+	request *e;
+	int     retries;
+	boolean compress;
+	boolean validate_grib;
+	boolean callback;
+	int     timeout;
+	int     bufsize;
+	pid_t   pid;
+	time_t  time;
+	char    *validate;
+
+	boolean    ecaccess;
+	char      *echost;
+	char      *ecaccesshome;
+	int        eccertport;
+	char      *eccommand;
+	char      *ecservice;
+} netdata;
+
+
+static void netbase_init(void);
+
+static err     netbase_open(void *data,request*,request*,int);
+static err     netbase_close(void *data);
+static err     netbase_read(void *data,request *r,void *buffer,long *length);
+static err     netbase_write(void *data,request *r,void *buffer,long *length);
+static err     netbase_cntl(void *data,int code,void *param,int size);
+static boolean netbase_check(void *data,request *r);
+static err     netbase_validate(void *data,request*,request*,int);
+
+static option opts[] = {
+	{"port","NETBASE_PORT",NULL,"7000",t_int,
+	sizeof(int),OFFSET(netdata,port)},
+	{"host","NETBASE_HOST",NULL,"munin",t_str,
+	sizeof(char*),OFFSET(netdata,host)},
+	{"retry","NETBASE_RETRY","-retry","5",t_int,
+	sizeof(int),OFFSET(netdata,retries)},
+	{"compress",NULL,NULL,"0",t_boolean,
+	sizeof(boolean),OFFSET(netdata,compress)},
+	{"validate_grib","VALIDATE_GRIB",NULL,"0",t_boolean,
+	sizeof(boolean),OFFSET(netdata,validate_grib)},
+	{"timeout","NETBASE_TIMEOUT","-timeout","0",t_int,
+	sizeof(int),OFFSET(netdata,timeout)},
+	{"callback","NETBASE_CALLBACK",NULL,"0",t_boolean,
+	sizeof(boolean),OFFSET(netdata,callback)},
+	{"bufsize",NULL,NULL,"65536",t_int,
+	sizeof(int),OFFSET(netdata,bufsize)},
+	{"validate","NETBASE_VALIDATE",NULL,NULL,t_str,
+	sizeof(char*),OFFSET(netdata,validate)},
+
+	/* ecaccess stuff */
+	{"ecaccess",NULL,NULL,"0",t_boolean,
+	sizeof(boolean),OFFSET(netdata,ecaccess)},
+	{"echost","ECHOST",NULL,"ecaccess.ecmwf.int",t_str,
+	sizeof(char*),OFFSET(netdata,echost)},
+    {"ecaccesshome","ECACCESS_HOME",NULL,".",t_str,
+    sizeof(char*),OFFSET(netdata,ecaccesshome)},
+    {"eccertport","ECCERTPORT",NULL,"443",t_int,
+    sizeof(int),OFFSET(netdata,eccertport)},
+    {"eccommand","ECCOMMAND",NULL,"client/tools/eccert",t_str,
+    sizeof(char*),OFFSET(netdata,eccommand)},
+    {"ecservice","EC_MARS_SERVICE",NULL,"ecmars",t_str,
+    sizeof(char*),OFFSET(netdata,ecservice)},
+};
+
+static base_class _netbase_base = {
+
+	NULL,                          /* parent class */
+	"netbase",                     /* name         */
+
+	false,                         /* inited       */
+
+	sizeof(netdata),               /* private_size  */
+	NUMBER(opts),                  /* options_count */
+	opts,                          /* options       */
+
+	netbase_init,                  /* init          */
+
+	netbase_open,                  /* open          */
+	netbase_close,                 /* close         */
+
+	netbase_read,                  /* read          */
+	netbase_write,                 /* write         */
+
+	netbase_cntl,                  /* control       */
+
+	netbase_check,                 /* check         */
+
+	NULL,                      	   /* query        */
+
+	NULL,                          /* archive      */
+	NULL,                          /* admin        */
+
+	netbase_validate,              /* validate */
+
+};
+
+static long compression_encode(unsigned char* in, long in_len, unsigned char* out, long out_len)
+{
+    marslog(LOG_EROR,"Compression not supported");
+    return -1;
+}
+
+static long compression_decode(unsigned char* in, long in_len, unsigned char* out, long out_len)
+{
+    marslog(LOG_EROR,"Compression not supported");
+    return -1;
+}
+
+/* the only 'public' variable ... */
+
+base_class *netbase = &_netbase_base;
+
+static void netbase_init(void)
+{
+}
+
+static void catch_alarm(int sig)
+{
+	longjmp(env,1);
+}
+
+static request *messages = NULL;
+
+static void msgout(int lvl,const char *msg)
+{
+
+	lvl &= ~(LOG_ONCE);
+
+	if(messages == NULL)
+		messages = empty_request("MESSAGES");
+
+	add_value(messages,"LVL","%d",lvl);
+	add_value(messages,"MSG","%s",msg);
+}
+
+static void putmsgs(netdata *net)
+{
+	request *r = net->blk.env;
+	if(r)
+	{
+		int n = 0;
+		const char *lvl,*msg;
+		while( (lvl = get_value(r,"LVL",n)) && (msg = get_value(r,"MSG",n)))
+		{
+			marslog(atoi(lvl),"%s [%s]",msg,database_name(net));
+			n++;
+		}
+	}
+}
+
+static void freeblk(netdata *net)
+{
+	err e = net->blk.error;
+
+	xdr_free((xdrproc_t) xdr_netblk, (char*) &net->blk);
+	bzero(&(net->blk),sizeof(netblk));
+	net->blk.error = e;
+}
+
+static err sendblk(netdata *net)
+{
+	if(net->callback && net->server)
+	{
+		static request *r = 0;
+		net->callback = false;
+		net->soc = call_server(net->host,net->port,20);
+		if(net->soc == -1) {
+			marslog(LOG_EROR,"Failed to reconnect to client %s %d",
+				net->host,net->port);
+			return -2;
+		}
+		xdrrec_create(&net->x,net->bufsize,net->bufsize,(mxdrparam)&net->soc,
+			(mxdrproc)readtcp,(mxdrproc)writetcp);
+
+		
+		if(!r) r = empty_request("check");
+		set_value(r,"cb_pid","%ld",(long)net->pid);
+		set_value(r,"cb_time","%ld",(long)net->time);
+		net->blk.env = r;
+	}
+
+	if(setjmp(env) != 0) {
+		marslog(LOG_WARN,"Timeout when sending data to %s",net->host);
+		close(net->soc);net->soc = -1; 
+		return 1;
+	}
+
+	if(net->timeout) {
+		signal(SIGALRM,catch_alarm);
+		alarm(net->timeout*60);
+	}
+
+	net->x.x_op = XDR_ENCODE;
+
+	marslog(LOG_DBUG,"sendblk");
+
+	if(!xdr_netblk(&net->x,&net->blk))
+	{
+		marslog(LOG_WARN,"Failed to send data to %s",net->host);
+		if(net->timeout) alarm(0);
+		return 1;
+	}
+
+	if(!xdrrec_endofrecord(&net->x,true))
+	{
+		marslog(LOG_WARN,"Failed to send data to %s",net->host);
+		if(net->timeout) alarm(0);
+		return 1;
+	}
+
+	if(net->timeout) alarm(0);
+
+
+	if(net->callback && !net->server) 
+	{
+		close(net->soc); 
+		net->soc = -1;
+		xdr_destroy(&net->x);
+	}
+
+	return 0;
+}
+
+static err recvblk(netdata *net)
+{
+	int check;
+
+retry:
+	check = 0;
+
+	if(net->callback && !net->server)
+	{
+		struct sockaddr_in from;
+		marssocklen_t fromlen = sizeof(from);
+
+		net->callback = false;
+		net->soc    = accept(net->cb_soc,(struct sockaddr*)&from, &fromlen);
+		if(net->soc <0)
+		{
+			 marslog(LOG_WARN|LOG_PERR,"accept");
+			 return -2;
+		}
+
+		xdrrec_create(&net->x,net->bufsize,net->bufsize,(mxdrparam)&net->soc,
+			(mxdrproc)readtcp,(mxdrproc)writetcp);
+
+		check = 1;
+	}
+
+	if(setjmp(env) != 0) {
+		marslog(LOG_WARN,"Timeout when receiving data from %s",net->host);
+		close(net->soc);net->soc = -1; 
+		return 1;
+	}
+
+	if(net->timeout) {
+		signal(SIGALRM,catch_alarm);
+	    alarm(net->timeout*60);
+	}
+
+	net->x.x_op = XDR_DECODE;
+
+	marslog(LOG_DBUG,"recvblk");
+
+	if(!xdrrec_skiprecord(&net->x))
+	{
+		marslog(LOG_WARN,"Failed to receive data from %s",net->host);
+		if(net->timeout) alarm(0);
+		return 1;
+	}
+
+	if(!xdr_netblk(&net->x,&net->blk))
+	{
+		marslog(LOG_WARN,"Failed to receive data from %s",net->host);
+		if(net->timeout) alarm(0);
+		return 1;
+	}
+
+	if(net->timeout) alarm(0);
+
+	if(check)
+	{
+		const char *p = get_value(net->blk.env,"cb_pid",0);
+		const char *t = get_value(net->blk.env,"cb_time",0);
+
+		if(p == 0 || t == 0 || atol(p) != net->pid || atol(t) != net->time)
+		{
+			marslog(LOG_WARN,"Wrong callback !!");
+			net->callback = true;
+			close(net->soc);net->soc = -1;
+			xdr_destroy(&net->x);
+			goto retry;
+		}
+	}
+
+	return 0;
+}
+
+
+static err ecaccess_connect(netdata *net, char *host, int *port, char *uid)
+{
+	int perr = 0;
+    char buf[BUFSIZ];
+	char cmd[10240];
+    FILE *file;
+	char *p,*q;
+
+	marslog(LOG_DBUG,"ecaccess_connect new version"); 
+
+    sprintf(cmd,"%s/%s -echost %s -ecport %d -tunnel %s",
+			net->ecaccesshome,
+			net->eccommand,
+			net->echost,
+			net->eccertport,
+			net->ecservice
+			);
+
+	marslog(LOG_DBUG,"Command to execute: '%s'",cmd);
+
+	if ((file = popen(cmd, "r")) == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot run %s",cmd);
+		return -1;
+	}
+
+	memset(buf,0,sizeof(buf));
+	fgets(buf, BUFSIZ - 1, file); 
+	if(strlen(buf)) buf[strlen(buf)-1] = 0;
+
+	if( (perr = pclose(file)) != 0)
+	{
+		marslog(LOG_EROR,"pclose(%s) returns %d.",cmd,perr);
+		return -1;
+	}
+
+	/* parse the received string */
+	p = buf;
+	q = p;
+
+	host[0] = uid[0] = 0; *port = 0;
+
+	while(*p)
+	{
+		switch(*p)
+		{
+			case '@':
+				*p = 0;
+				strcpy(uid,q);
+				q = p+1;
+				*p = '@';
+				break;
+
+			case ':':
+				*p  = 0;
+				strcpy(host,q);
+				*port = atoi(p+1);
+				*p = ':';
+				break;
+		}
+		p++;
+	}
+
+	if(!host[0] || !uid[0] || !*port)
+	{
+		marslog(LOG_EROR,"Cannot parse [%s] output of %s",buf,cmd);
+		return -1;
+	}
+
+    return 0;	
+}
+
+
+static err  netbase_open(void *data,request *r,request *v,int mode)
+{
+	netdata *net = (netdata*)data;
+	err     e = NOERR;
+	int     code;
+	int     wait;
+
+	for(;;)
+	{
+
+		signal(SIGPIPE,SIG_IGN);
+
+		if(net->ecaccess)
+		{
+			char host[1024];
+			char uid[80];
+			int  port;
+
+			/* update the ecaccess host & port */ 
+			if(ecaccess_connect(net,host,&port,uid) != NOERR)
+			{
+				marslog(LOG_EROR,"Received error %d",e);
+				net->soc = -1;
+			}
+			else
+			{
+				marslog(LOG_INFO,"Connecting to ecaccess host %s port %d as user %s",host,port,uid);
+				net->soc    = call_server(host,port,net->retries);
+				marslog(LOG_INFO,"Connected to ecaccess host %s port %d as user %s",host,port,uid);
+				set_value(v,"user","%s",uid);
+			}
+		}
+		else
+		{
+			net->soc    = call_server(net->host,net->port,net->retries);
+		}
+
+		net->cb_soc = -1;
+
+		xdrrec_create(&net->x,net->bufsize,net->bufsize,(mxdrparam)&net->soc,
+			(mxdrproc)readtcp,(mxdrproc)writetcp);
+
+		marslog(LOG_DBUG,"netbase_open");
+
+		if(net->soc<0)
+			return -2;
+
+		bzero(&net->blk,sizeof(netblk));
+		net->blk.code = NET_OPEN;
+		net->blk.req  = r;
+		net->blk.env  = v;
+		net->blk.mode = mode;
+		net->blk.data.data_len = mars.certlen;
+		net->blk.data.data_val = mars.certstr;
+
+		if(mars.infomissing)
+			net->blk.mode |= NET_MISSING;
+
+		if(net->callback)
+		{
+			int port;
+			char host[80];
+
+			net->cb_soc = server_mode(&port,host);
+
+			if(net->cb_soc == -1)
+			{
+				marslog(LOG_EROR,"Callback mode switched off");
+				net->callback = false;
+			}
+			else
+			{
+				net->pid  = getpid();
+				net->time = time(0);
+
+				set_value(v,"cb_port","%d",port);
+				set_value(v,"cb_host","%s",host);
+				set_value(v,"cb_pid","%ld",(long)net->pid);
+				set_value(v,"cb_time","%ld",(long)net->time);
+
+				net->blk.mode |= NET_CALLBACK;
+			}
+		}
+
+		if(sendblk(net)) e = -2;
+
+		net->blk.req  = NULL;
+		net->blk.env  = NULL;
+		net->blk.data.data_len = 0;
+		net->blk.data.data_val = 0;
+
+		if(e == 0)
+			if(recvblk(net))
+				e = -2;
+
+		wait = net->blk.mode;
+		code = net->blk.code;
+
+		putmsgs(net);
+		freeblk(net);
+
+		e = e?e:net->blk.error;
+
+		if(e || (code != NET_WAIT))
+			return e;
+
+		/* for the time being, don't wait */
+
+		return -1;
+		/*NOTREACHED*/
+
+		/* wait a little bit ... */
+
+		close(net->soc);
+		xdr_destroy(&net->x);
+
+		marslog(LOG_INFO,"Server on %s port %d is busy, waiting...",
+		    net->host,net->port);
+
+		if(wait < 1  ) wait = 1;
+		if(wait > 60 ) wait = 60;
+		sleep(wait);
+
+	}
+
+}
+
+static err  netbase_close(void *data)
+{
+	netdata *net = (netdata*)data;
+	err        e = 0;
+	marslog(LOG_DBUG,"netbase_close");
+
+	if(net->soc != -1)
+	{
+		bzero(&net->blk,sizeof(netblk));
+		net->blk.code = NET_CLOSE;
+
+		if(sendblk(net)) e = -2;
+		else
+			if(recvblk(net)) e = -2;
+
+		marslog(LOG_DBUG,"netbase_close");
+		putmsgs(net);
+
+		e =  e?e:net->blk.error;
+		freeblk(net);
+
+		close(net->soc);
+	}
+	xdr_destroy(&net->x);
+
+	return e;
+}
+
+static boolean is_valid(netdata *net,request *r,void *buffer,long length)
+{
+	boolean b;
+	if(!net->validate_grib) return true;
+	if(observation(r)) return true;
+
+#ifdef COMEBACK
+	b = validate_grib(buffer,length);
+#else
+	b = true;
+#endif
+
+	if(!b) print_all_requests(r);
+
+	return b;
+}
+
+static err timed_recvblk(netdata *net, timer *t)
+{
+	int e;
+	long64 total = 0;
+	timer_start(t);
+	if((e = recvblk(net)) == NOERR)
+		total = net->blk.bufsize;
+	timer_stop(t,total);
+
+	return e;
+}
+
+static err  netbase_read(void *data,request *r,void *buffer,long *length)
+{
+	netdata *net = (netdata*)data;
+	char timermsg[1024];
+	timer   *nettimer;
+
+	sprintf(timermsg,"Transfer from %s",net->host);
+	nettimer=get_timer(timermsg,"transfertime",true);
+
+	marslog(LOG_DBUG,"netbase_read");
+
+	bzero(&net->blk,sizeof(netblk));
+
+	net->blk.code = NET_READ;
+	net->blk.mode = net->compress?NET_COMPRESS:0; /* ask for compression */
+
+	net->blk.bufsize = *length;
+
+	if(sendblk(net)) {
+		freeblk(net);
+		return -2;
+	}
+
+	net->blk.data.data_val = buffer;
+
+	if(timed_recvblk(net,nettimer)) {
+		net->blk.data.data_val = NULL;
+		putmsgs(net);
+		freeblk(net);
+		return -2;
+	}
+
+	putmsgs(net);
+	/* was the data compressed ? */
+
+	if(net->blk.error == 0 && net->blk.mode == NET_COMPRESS)
+	{
+		char *temp = malloc(*length);
+		if(temp)
+		{
+			long len   = compression_decode((unsigned char*)buffer,
+			    net->blk.data.data_len,
+			    (unsigned char*)temp,*length);
+
+
+			if(len < 0) {
+				net->blk.error   = -3; /* too small */
+				net->blk.bufsize = -len;
+			} else {
+				memcpy(buffer,temp,len);
+				net->blk.bufsize = len;
+			}
+			FREE(temp);
+		}
+	}
+
+	net->blk.data.data_val = NULL;
+
+	if(r && net->blk.req) {
+		if(mars.debug) {
+			print_all_requests(r);
+			print_all_requests(net->blk.req);
+		}
+		reqcpy(r,net->blk.req);
+	}
+
+	*length  =  net->blk.bufsize;
+
+	freeblk(net);
+
+	if((net->blk.error == 0) && !is_valid(net,r,buffer,*length))
+		return -2;
+
+	return net->blk.error;
+}
+
+static err  netbase_write(void *data,request *r,void *buffer,long *length)
+{
+	netdata *net = (netdata*)data;
+	err e = 0;
+
+	marslog(LOG_DBUG,"netbase_write");
+
+	if(!is_valid(net,r,buffer,*length))
+		return -2;
+
+	bzero(&net->blk,sizeof(netblk));
+	net->blk.code = NET_WRITE;
+
+	net->blk.data.data_len = *length;
+	net->blk.data.data_val = buffer;
+	net->blk.req           = r;
+
+	if(sendblk(net)) e = -2;
+
+	net->blk.req           = NULL;
+	net->blk.data.data_val = NULL;
+	net->blk.data.data_len = 0;
+
+	if(e == 0)
+	{
+		if(recvblk(net)) e = -2;
+		*length  =  net->blk.bufsize;
+	}
+
+	putmsgs(net);
+	freeblk(net);
+
+	return e?e:net->blk.error;
+
+}
+
+static err netbase_list(void *data, request *r)
+{
+	char buffer[1024];
+	long length = sizeof(buffer);
+	int n;
+	FILE *f = stdout;
+	const char *target = no_quotes(get_value(r,"TARGET",0));
+	err e = 0;
+
+	if(target)
+	{
+		f  = fopen(target,target_open_mode(target));
+		if(!f) 
+		{
+			marslog(LOG_EROR|LOG_PERR,"fopen(%s)",target);
+			return -2;
+		}
+	}
+
+	while( (n = netbase_read(data,r,buffer,&length))  == NOERR )
+	{
+		fwrite(buffer,1,length,f);
+		length = sizeof(buffer);
+	}
+
+	if(n != EOF)
+		marslog(LOG_WARN,"Got error %d during list",n);
+
+	if(ferror(f))
+	{
+		marslog(LOG_EROR|LOG_PERR,"Error during list");
+		e = -2;
+	}
+
+	if(target && f) 
+	{
+		if(fclose(f) != 0)
+		{
+			marslog(LOG_EROR|LOG_PERR,"fclose(%s)",target);
+			return -2;
+		}
+	}
+
+	return e;
+}
+
+static err  netbase_cntl(void *data,int code,void *param,int size)
+{
+	switch(code)
+	{
+	case CNTL_LIST:
+		netbase_list(data,(request*)param);
+		return 0;
+		/*NOTREACHED*/
+		break;
+
+	default:
+		return -1;
+		/*NOTREACHED*/
+		break;
+	}
+	return -1;
+}
+
+static boolean  netbase_check(void *data,request *r)
+{
+	netdata *net = (netdata*)data;
+	boolean b;
+	err     e = NOERR;
+
+	marslog(LOG_DBUG,"netbase_check");
+
+	bzero(&net->blk,sizeof(netblk));
+	net->blk.code = NET_CHECK;
+
+	net->blk.req           = r;
+	if(sendblk(net)) e  = -2;
+	net->blk.req           = NULL;
+
+	if(e == 0) recvblk(net);
+	putmsgs(net);
+
+	if(net->blk.error || e)
+		b = false;
+	else
+		b = net->blk.check;
+
+
+	freeblk(net);
+
+	return b;
+
+}
+/*====================================================================*/
+/* Server side.                                                       */
+/*====================================================================*/
+
+
+
+static database *net_open(netdata *net,base_class *driver)
+{
+	database *b;
+
+	if(net->blk.mode & NET_CALLBACK)
+	{
+		net->callback = true;
+		net->pid      = atol(get_value(net->blk.env,"cb_pid",0));
+		net->time     = atol(get_value(net->blk.env,"cb_time",0));
+		net->port     = atoi(get_value(net->blk.env,"cb_port",0));
+		net->port     = atoi(get_value(net->blk.env,"cb_port",0));
+		net->host     = strcache(get_value(net->blk.env,"cb_host",0));
+	}
+
+	if(net->blk.mode & NET_MISSING)
+		mars.infomissing = true;
+
+	net->r = clone_all_requests(net->blk.req);
+	net->e = clone_all_requests(net->blk.env);
+
+
+
+#ifndef METVIEW
+#ifdef ECMWF
+
+	if(mars.certify)
+	{
+		int e;
+
+		set_environ(net->e);
+
+		 e = certify(net->r,net->e,
+			net->blk.data.data_val,
+			net->blk.data.data_len);
+			
+		if(e){
+			net->blk.error = -2;
+			freeblk(net);
+			return NULL;
+		}
+	}
+	else
+	{
+		const char *user = get_value(net->e,"user",0);
+		new_user(user);
+		print_all_requests(get_environ());
+		print_all_requests(net->r);
+	}
+#endif
+#endif
+
+	b = database_open(driver,NULL,net->r,net->e,net->blk.mode&0x7);
+
+	net->blk.req = NULL;
+	net->blk.env = NULL;
+
+	if(b == NULL)
+		net->blk.error = -2;
+
+	freeblk(net);
+
+	return b;
+}
+
+static err net_close(netdata *net,database *b)
+{
+	free_all_requests(net->r);
+	free_all_requests(net->e);
+	freeblk(net);
+	return net->blk.error = database_close(b);
+}
+
+
+static err net_read(netdata *net,database *b)
+{
+	long length  = net->blk.bufsize;
+	char *buffer = MALLOC(length);
+	request   *r = empty_request(NULL);
+	boolean comp = net->blk.mode == NET_COMPRESS;
+
+	freeblk(net);
+
+
+	net->blk.error = database_read(b,r,buffer,&length);
+	net->blk.bufsize = length;
+
+	if((net->blk.error == 0) && !is_valid(net,r,buffer,length))
+		net->blk.error = -2;
+
+	if(comp && net->blk.error == 0) /* compression requested */
+	{
+		char *temp = (char*)MALLOC(length);
+		long len   = compression_encode((unsigned char*)buffer,length,
+		    (unsigned char*)temp,length);
+
+		if(len < 0)
+		{
+			/* compression failed */
+			FREE(temp);
+		}
+		else
+		{
+			/* compression succeded */
+			net->blk.mode = NET_COMPRESS;
+			FREE(buffer);
+			buffer = temp;
+			length = len;
+		}
+	}
+
+	if(net->blk.error == NOERR)
+	{
+		net->blk.data.data_len = length;
+		net->blk.data.data_val = buffer;
+	}
+
+	net->blk.req  = r;
+
+	marslog(LOG_DBUG,"net_read : %d",length);
+
+	return net->blk.error;
+}
+
+static err net_write(netdata *net,database *b)
+{
+	long length  = net->blk.data.data_len;
+	char *buffer = net->blk.data.data_val;
+	request *r   = clone_all_requests(net->blk.req);
+
+	if(is_valid(net,r,buffer,length))
+		net->blk.error = database_write(b,r,buffer,&length);
+	else
+		net->blk.error = -2;
+
+
+	free_all_requests(r);
+	/* net->blk.req = NULL; */
+
+	freeblk(net);
+
+	net->blk.bufsize = length;
+
+	return net->blk.error;
+}
+
+static err net_check(netdata *net,database *b)
+{
+	boolean c =  database_check(b,net->blk.req);
+	freeblk(net);
+	net->blk.check = c;
+	return NOERR;
+}
+
+static err net_raw(netdata *net,database *b)
+{
+	return 0;
+}
+
+void basetask(int soc,int count, void *data)
+{
+
+	base_class *driver = (base_class*)data;
+	netdata  net;
+	database *b = NULL;
+	boolean  stop = false;
+
+	bzero(&net,sizeof(net));
+
+	net.soc    = soc;
+	net.server = true;
+
+	signal(SIGPIPE,SIG_IGN);
+
+#if 0
+	xdrrec_create(&net.x,net.bufsize,net.bufsize,(mxdrparam)&net.soc,
+		(mxdrproc)readtcp,(mxdrproc)writetcp);
+#else
+	/* Improve transfers:
+		- Set socket buffer sizes to MARS_SOCKBUF
+		- Set buffer sizes to the same as socket buffer sizes
+	*/
+	socket_buffers(net.soc);
+	xdrrec_create(&net.x,mars.sockbuf,mars.sockbuf,(mxdrparam)&net.soc,
+		(mxdrproc)readtcp,(mxdrproc)writetcp);
+
+#endif
+
+	marslog(LOG_DBUG,"Starting basetask %d...",count);
+	net.host = strcache(host_of(addr_of(soc)));
+
+	mars.outproc = msgout;
+
+
+	while(!stop)
+	{
+
+		marslog(LOG_DBUG,"Waiting...");
+		/* dumpmem(); */
+
+		if(recvblk(&net))
+			stop = true;
+
+		switch(net.blk.code)
+		{
+
+		case NET_OPEN:
+			/* Tell remote guy to sleep a bit ... */
+			if(mars.maxforks && count >= mars.maxforks)
+			{
+				bzero(&(net.blk),sizeof(netblk));
+				net.blk.code = NET_WAIT;
+				net.blk.mode = 20;      /* 20 sec. */
+				stop = true;
+			}
+			else
+			{
+				marslog(LOG_DBUG,"get NET_OPEN");
+				b = net_open(&net,driver);
+				if(b == NULL)
+					stop = true;
+			}
+			break;
+
+		case NET_CLOSE:
+			marslog(LOG_DBUG,"get NET_CLOSE");
+			net_close(&net,b);
+			stop = true;
+			b = NULL;
+			break;
+
+		case NET_READ:
+			marslog(LOG_DBUG,"get NET_READ");
+			if(net_read(&net,b) != 0)
+				/* stop = true; */
+				;
+			break;
+
+		case NET_WRITE:
+			marslog(LOG_DBUG,"get NET_WRITE");
+			if(net_write(&net,b) != 0)
+				/* stop = true; */
+				;
+			break;
+
+		case NET_CHECK:
+			marslog(LOG_DBUG,"get NET_CHECK");
+			if(net_check(&net,b) != 0)
+				/* stop = true; */
+				;
+			break;
+
+		case NET_ABORT:
+			marslog(LOG_INFO,"Abort cmd received");
+			marsexit(9);
+			break;
+
+		case NET_RAW:
+			net_raw(&net,b);
+			break;
+
+		default:
+			if(b) net_close(&net,b);
+			marslog(LOG_EROR,"Unknown tag received : %d",net.blk.code);
+			stop = true;
+			break;
+
+		}
+
+		net.blk.env = messages;
+
+		if(sendblk(&net))
+			stop = true;
+
+		free_all_requests(messages);
+		net.blk.env = messages = NULL;
+
+		freeblk(&net);
+
+	}
+
+	mars.outproc = NULL;
+
+	database_admin(driver);
+
+	marslog(LOG_DBUG,"Ending basetask...");
+
+}
+
+static err netbase_validate(void *data, request *r, request *e, int mode)
+{
+	netdata *net = (netdata*)data;
+	err ret = NOERR;
+	
+	if(net->validate)
+		ret = validate_request(r,e,net->validate);
+
+	return ret;
+}
diff --git a/src/libMars-ecregrid/netbase.h b/src/libMars-ecregrid/netbase.h
new file mode 100755
index 0000000..9213363
--- /dev/null
+++ b/src/libMars-ecregrid/netbase.h
@@ -0,0 +1,28 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#define NET_ERROR	-1
+#define NET_OK      0
+
+#define NET_OPEN	1
+#define NET_CLOSE	2
+#define NET_READ	3
+#define NET_WRITE	4
+#define NET_CHECK	5
+#define NET_QUERY	6
+#define NET_WAIT 	7
+#define NET_RAW 	8
+
+#define NET_COMPRESS 8
+#define NET_CALLBACK 16
+#define NET_MISSING  32
+
+#define NET_ABORT	255
+
diff --git a/src/libMars-ecregrid/nfdbbase.c b/src/libMars-ecregrid/nfdbbase.c
new file mode 100644
index 0000000..c979b75
--- /dev/null
+++ b/src/libMars-ecregrid/nfdbbase.c
@@ -0,0 +1,1096 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#define HYPERCUBE
+
+#if defined(ECMWF) && !defined(NOFDB)
+
+#define PARAM_U  131
+#define PARAM_V  132
+#define PARAM_VO 138
+#define PARAM_D  155
+
+extern int initfdb(void);
+extern int openfdb(char*,int*,char*);
+extern int openfdb_remote(char*,int*,char*,char*);
+extern int readfdb(int*,void*,int*);
+extern int writefdb(int*,void*,int*);
+extern int closefdb(int*);
+extern int setvalfdb(int*,char*,char*);
+extern int setvalfdb_f(int*,char*,float);
+extern int setvalfdb_i(int*,char*,int);
+extern int isfdb_attribute(int*,char*);
+
+static void     nfdb_init(void);
+static err      nfdb_open(void *data,request*,request*,int);
+static err      nfdb_close(void *data);
+static err      nfdb_read(void *data,request *r,void *buffer,long *length);
+static err      nfdb_write(void *data,request *r,void *buffer,long *length);
+static boolean  nfdb_check(void *data,request *r);
+
+typedef struct fdbdata {
+	int     ref;
+	request *w;
+	request *u;
+	hypercube *h;
+	int        index;
+	boolean u_and_v;
+	boolean retrieve;
+	boolean opened;
+	char    *u_grib;
+	char    *v_grib;
+	long    u_len;
+	long    v_len;
+	char    *host;
+	int     retry;
+	int     timeout;
+	char    *buffer;
+	long    length;
+	long    buflen;
+	long    pos;
+	boolean    more;
+	boolean    y2k;
+	boolean    expect;
+	boolean    expect_any;
+	char    *fdbname;
+	timer   *fdbtimer;
+	int      repres;
+	boolean    nomissing;
+	boolean    uv_from_fdb;
+	boolean  leg_done;
+	boolean  set_table;
+} fdbdata;
+
+static option opts[] = {
+	{"host","FDB_SERVER_HOST",NULL,"vpp700-x08",t_str,sizeof(char*), OFFSET(fdbdata,host)},
+	{"retry",NULL,NULL,"5",t_int,sizeof(int), OFFSET(fdbdata,retry)},
+	{"timeout",NULL,NULL,"120",t_int,sizeof(int), OFFSET(fdbdata,timeout)},
+	{"fdbname",NULL,NULL,"fdb",t_str,sizeof(char*), OFFSET(fdbdata,fdbname)},
+
+	{"buffer","MARS_FDB_BUFFER",NULL,"10485760",t_int,sizeof(int),
+		OFFSET(fdbdata,buflen)},
+	{"retrieve","MARS_FDB_RETRIEVE",NULL,"0",t_boolean,sizeof(boolean),
+		OFFSET(fdbdata,retrieve)},
+	{"y2k","MARS_FDB_Y2K",NULL,"1",t_boolean,sizeof(boolean),
+		OFFSET(fdbdata,y2k)},
+	{"nomissing","MARS_FDB_SUPPRES_MISSING",NULL,"0",t_boolean,sizeof(boolean),
+		OFFSET(fdbdata,nomissing)},
+	{"uv_from_fdb","MARS_UV_FROM_FDB",NULL,"1",t_boolean,sizeof(boolean),
+		OFFSET(fdbdata,uv_from_fdb)},
+	{"set_table","MARS_FDB_SET_TABLE",NULL,"0",t_boolean,sizeof(boolean),
+		OFFSET(fdbdata,set_table)},
+};
+
+
+base_class _nfdbbase = {
+
+	NULL,                      /* parent class */
+	"nfdbbase",                /* name         */
+
+	false,                     /* inited       */
+
+	sizeof(fdbdata),           /* private size */
+	NUMBER(opts),              /* option count */
+	opts,                      /* options      */
+
+	nfdb_init,                  /* init         */
+
+	nfdb_open,                  /* open         */
+	nfdb_close,                 /* close        */
+
+	nfdb_read,                  /* read         */
+	nfdb_write,                 /* write        */
+
+	NULL,                      /* control      */
+
+	nfdb_check,                 /* check        */
+
+};
+
+
+base_class *nfdbbase = &_nfdbbase;
+
+static err timed_readfdb(int *ref, void *buffer, int *length, timer *t)
+{
+	int e;
+	long64 total = 0;
+	timer_start(t);
+	if((e = readfdb(ref,buffer,length)) == NOERR)
+		total = *length;
+	timer_stop(t,total);
+
+	return e;
+}
+
+/* 
+   n=100000 for step range or fcperiod
+   n=1000 for quantile
+*/
+static long range2fdb(const char *r, long n)
+{
+	const char *p = r+strlen(r);
+	stepRange sr;
+
+	sr.from = atol(r);
+	sr.to   = 0;
+
+	while(p>r)
+	{
+		if(*p == '-' || *p == ':')
+		{
+			++p;
+			sr.to   = atol(p);
+			break;	
+		}
+		--p;
+	}
+	return (sr.from * n + sr.to);
+}
+
+
+static void nfdb_init(void)
+{
+	initfdb();
+}
+
+static int opened = false;
+static int first  = true;
+static int ref    = 0;
+
+static err setallvalues(fdbdata*,request*);
+
+static void close_fdb(int code,void *data)
+{
+ 	if(opened) {
+		closefdb(&ref);
+		opened = false;
+	}
+}
+
+static err  nfdb_open(void *data,request *r,request *ev,int mode)
+{
+	err e = 0;
+	fdbdata *fdb   = (fdbdata*)data;
+	const char *p = get_value(r,"EXPECT",0);
+	const char *fdbmode = getenv("FDB_CONFIG_MODE");
+
+	boolean local = fdbmode && (strcmp(fdbmode,"standalone") == 0);
+	char    msg[1024];
+
+#ifndef HYPERCUBE
+	fdb->u      = unwind_one_request(r);
+	fdb->w      = fdb->u;
+
+#else
+	fdb->h      = new_hypercube_from_mars_request(r);
+	fdb->u      = clone_one_request(r);
+#endif
+
+	fdb->expect     = p?atol(p):0;
+	fdb->expect_any = (p && (atol(p) == 0));
+
+	if(fdb->expect)
+		if(count_values(r,"DATABASE") == 1)	
+			marslog(LOG_INFO,"Trying to retrieve %d fields from the fdb",
+				fdb->expect);
+
+	if(local)
+		sprintf(msg,"Transfer from local FDB");
+	else
+		sprintf(msg,"Transfer from %s",fdb->host);
+
+	fdb->fdbtimer=get_timer(msg,"transfertime",true);
+
+	if(mars.debug)
+	{
+		print_all_requests(r);
+		print_all_requests(fdb->u);
+	}
+
+	/* int setclientfdb(int retries, int timeout); */
+	/* setclientfdb(5,60*10); */
+	setclientfdb(fdb->retry,fdb->timeout);
+
+	if(!opened)
+	{
+		char buf[1024];
+		timer *connect_time = 0;
+
+		sprintf(buf,"Connecting to %s",database_name(fdb));
+		connect_time=get_timer(buf,NULL,true);
+
+		timer_start(connect_time);
+		e = openfdb_remote(fdb->fdbname,&fdb->ref,"r",fdb->host);
+		timer_stop(connect_time,0);
+		opened = (e == 0);
+		ref    = fdb->ref;
+	}
+	else fdb->ref = ref;
+
+	if(e == 0 && fdb->retrieve)
+	{
+		if(fdb->expect)
+		{
+			marslog(LOG_WARN,"EXPECT does not work with MARS_FDB_RETRIEVE");
+			marslog(LOG_WARN,"mode MARS_FDB_RETRIEVE disabled");
+			fdb->retrieve = 0;
+		}
+		else
+		{
+			fdb->more     = true;
+			fdb->buffer   = reserve_mem(fdb->buflen);
+			setallvalues(fdb,r);
+			if(first) {
+				install_exit_proc(close_fdb,0);
+				first = false;
+				marslog(LOG_INFO,"Using MARS_FDB_RETRIEVE flag");
+			}
+		}
+
+	}
+
+	return e;
+}
+
+static err  nfdb_close(void *data)
+{
+	fdbdata *fdb = (fdbdata*)data;
+	if(fdb->u_grib) release_mem(fdb->u_grib);
+	if(fdb->v_grib) release_mem(fdb->v_grib);
+	if(fdb->buffer) release_mem(fdb->buffer);
+	free_all_requests(fdb->u);
+
+	if(fdb->repres)
+	{
+		if(fdb->repres>1)
+			marslog(LOG_WARN,"%d fields were retrieved from a different representation", fdb->repres);
+		else
+			marslog(LOG_WARN,"1 field was retrieved from a different representation");
+	}
+
+#ifdef HYPERCUBE
+	free_hypercube(fdb->h);
+#endif
+
+	opened = false;
+	first  = false;
+	return closefdb(&fdb->ref);
+}
+
+static void SETVALFDB(int *f,const char *a, const char *b)
+{
+	if(mars.debug)
+		marslog(LOG_DBUG,"SETVALFDB: %s %s",a,b);
+	setvalfdb(f,(char *)a,(char *)b);
+}
+
+static void SETVALFDBF(int *f,const char *a, float b)
+{
+	int   s  = b/abs(b);
+	float pr = 1000.0;
+	float p  = ((int)((b * pr) + (s*0.499))) / pr;
+
+	if(mars.debug)
+		marslog(LOG_DBUG,"SETVALFDB_F: %s %f",a,p);
+	setvalfdb_f(f,(char *)a,p);
+}
+
+static void SETVALFDB_OCEAN(int *f,const char *a, const char *str)
+{
+	fortfloat b  = atof(str);
+	int       p  = round_decimal(b) * 1000;
+
+	if(mars.debug)
+		marslog(LOG_DBUG,"SETVALFDB_OCEAN: %s %d",a,p);
+	setvalfdb_i(f,(char *)a,p);
+}
+
+static const char * REPRES[] = { "sh", "gg", "ll", };
+
+static err check_repres(fdbdata *fdb,char *buffer,long *length)
+{
+	const char *repres = get_value(fdb->w,"REPRES",0);
+	const char *res = repres?lowcase(repres):NULL;
+	int i;
+	err ret = -1;
+
+	if(!res) return -1;
+
+	for(i = 0; i < NUMBER(REPRES); i++)
+	{
+		int len = *length;
+
+
+		if(EQ(REPRES[i],res)) continue;
+
+		marslog(LOG_DBUG,"TRY %s",REPRES[i]);
+
+		setvalfdb(&fdb->ref,"repres",(char*)REPRES[i]);
+
+		if((ret = timed_readfdb(&fdb->ref,buffer,&len,fdb->fdbtimer)) == 0)
+		{
+			*length = len;
+			fdb->repres++;
+			marslog(LOG_DBUG,"OK %s",REPRES[i]);
+			break;
+		}
+
+	}
+	setvalfdb(&fdb->ref,"repres",(char*)res);
+	return ret;
+}
+
+static err check_uv(fdbdata *fdb,char *buffer,long *length)
+{
+
+	err ret = -1;
+	char *vo_grib = NULL;
+	char *d_grib  = NULL;
+	int vo_len;
+	int d_len;
+
+	int p = get_value(fdb->w,"PARAM",0)?atoi(get_value(fdb->w,"PARAM",0)):0;
+
+	/* u and v requested */
+
+	if(p != PARAM_U && p != PARAM_V) goto fail;
+
+	/* Check if previouly converted */
+
+	if(p == PARAM_U && fdb->u_grib != 0)
+	{
+		if(*length < fdb->u_len) {
+			ret     = -3;
+			*length = fdb->u_len;
+			goto fail;
+		}
+		*length = fdb->u_len;
+		memcpy(buffer,fdb->u_grib,fdb->u_len);
+		release_mem(fdb->u_grib);
+		fdb->u_grib = NULL;
+		marslog(LOG_DBUG,"U ready...");
+		return 0;
+	}
+
+	if(p == PARAM_V && fdb->v_grib != 0)
+	{
+		if(*length < fdb->v_len) {
+			ret     = -3;
+			*length = fdb->v_len;
+			goto fail;
+		}
+		*length = fdb->v_len;
+		memcpy(buffer,fdb->v_grib,fdb->v_len);
+		release_mem(fdb->v_grib);
+		fdb->v_grib = NULL;
+		marslog(LOG_DBUG,"V is ready...");
+		return 0;
+	}
+
+	/* look for vo and d */
+
+	/* Get vorticity */
+
+	setvalfdb(&fdb->ref,"param","138");
+	vo_grib = reserve_mem(vo_len = *length);
+
+	if((ret = timed_readfdb(&fdb->ref,vo_grib,&vo_len,fdb->fdbtimer)) != 0)
+		goto fail;
+
+
+	/* Get divergence */
+	setvalfdb(&fdb->ref,"param","155");
+	d_grib = reserve_mem(d_len = *length);
+	if((ret = timed_readfdb(&fdb->ref,d_grib,&d_len,fdb->fdbtimer)) != 0)
+		goto fail;
+
+#if 1
+	if(fdb->uv_from_fdb)
+	{
+		fdb->uv_from_fdb = false; /* From now, don't try UV anymore */
+		marslog(LOG_INFO,"U and V not found in FDB, using VO and D for this request");
+	}
+#endif
+
+	if(fdb->u_grib) release_mem(fdb->u_grib); fdb->u_grib = NULL;
+	if(fdb->v_grib) release_mem(fdb->v_grib); fdb->v_grib = NULL;
+
+	if(p == PARAM_U)
+	{
+		fdb->v_grib  = reserve_mem(fdb->v_len = *length);
+		ret = makeuv(vo_grib,d_grib,vo_len,buffer,fdb->v_grib,length);
+		fdb->v_len = *length;
+	}
+	else
+	{
+		fdb->u_grib     = reserve_mem(fdb->u_len = *length);
+		ret = makeuv(vo_grib,d_grib,vo_len,fdb->u_grib,buffer,length);
+		fdb->u_len = *length;
+	}
+
+
+fail:
+	if(vo_grib) release_mem(vo_grib);
+	if(d_grib)  release_mem(d_grib);
+
+	setvalfdb(&fdb->ref,"param",(char *)get_value(fdb->w,"PARAM",0));
+
+	return ret;
+}
+
+boolean windgust(request *s)
+{
+	boolean windgust = false;
+	int i = 0;
+	const char *param;
+
+	while( ((param = get_value(s,"PARAM",i++)) != NULL) && !windgust )
+	{
+		long par = 0;
+		long table = -1;
+
+		paramtable(lowcase(no_quotes(param)),&par,&table,false);
+		if((par == 49) || (par == 123))
+		{
+			windgust = true;
+			if(count_values(s,"PARAM")>1)
+			{
+				marslog(LOG_WARN,"Wind gust STEP needs special handling retrieving from FDB");
+				marslog(LOG_WARN,"Please, split your MARS request to retrieve param 49 alone");
+			}
+		}
+	}
+	return windgust;
+}
+
+static err setallvalues(fdbdata *fdb,request *s)
+{
+
+	parameter *p = 0;
+	request   *r = empty_request(0);
+	boolean wave_fg = false;
+	const char *type   = get_value(s,"TYPE",0);
+	const char *stream = get_value(s,"STREAM",0);
+	boolean fp = false;   /* Forecast Probability */
+	boolean stream_enfo = false;
+	const char *ignore_wave_fg = getenv("MARS_IGNORE_WAVE_FG_FDB");
+
+	if(type && stream && EQ(type,"FG") && (EQ(stream,"WAVE") || EQ(stream,"SCWV")))
+		wave_fg = true;
+
+	if(type && EQ(type,"FP") && stream && (EQ(stream,"ENFO") || EQ(stream,"WAEF")))
+	{
+		if(!windgust(s))
+			fp = true;
+	}
+
+	if(stream && EQ(stream,"ENFO"))
+		stream_enfo = true;
+
+	/* Override behaviour via environment variable */
+	/* All this code should go once dissemination can handle step ranges for FP */
+	if(mars.no_special_fp)
+		fp = false;
+
+	names_loop(s,sort_request,&r);
+
+
+	p = s->params;
+	while(p)
+	{
+		if(get_value(r,p->name,0) == 0)
+			valcpy(r,s,p->name,p->name);
+			
+		p = p->next;
+	}
+
+	/* print_all_requests(r); */
+
+	p = r->params;
+
+	if(get_value(r,"LEVTYPE",0) && (strcmp(get_value(r,"LEVTYPE",0),"SFC") == 0))
+		setvalsfdb(&fdb->ref,"levelist","0000");
+
+	while(p)
+	{
+		if(mars.debug)
+		{
+			char buf[10240];
+			value *v = p->values;
+			buf[0] = '\0';
+			while(v)
+			{
+				strcat(buf,v->name);
+				if(v->next) strcat(buf,"/");
+				v = v->next;
+			}
+			marslog(LOG_DBUG,"setvalsfdb: %s %s",p->name,buf);
+		}
+
+		if(strcmp(p->name,"STREAM") == 0)
+		{
+			stream_enfo = (strcmp(p->values->name,"ENFO") == 0) ;
+			setvalsfdb(&fdb->ref,p->name,(char *)lowcase(p->values->name));
+		}
+		else if (strcmp(p->name,"DATE") == 0)
+		{
+			int n = 0;
+			if(strlen(p->values->name) == 8 && !fdb->y2k) n = 2;
+			setvalsfdb(&fdb->ref,p->name,(char *)lowcase(no_quotes(p->values->name+n)));
+		}
+		else if(strcmp(p->name,"LEVTYPE")==0)
+		{
+			char levtype[3];
+			int fdb_len = 1; /* Length of levtype in FDB */
+			levtype[0] = p->values->name[0];
+			if(strcmp(p->values->name,"DP") == 0)
+			{
+				SETVALFDB(&fdb->ref,"levelist","off");
+				SETVALFDB(&fdb->ref,"latitude","off");
+				SETVALFDB(&fdb->ref,"longitude","off");
+			}
+			else
+			{
+				if(strcmp(p->values->name,"PT") == 0)
+					levtype[0] = 't';
+				else
+				if(strcmp(p->values->name,"PV") == 0)
+					levtype[0] = 'v';
+				else
+				if(strcmp(p->values->name,"WV") == 0)
+				{
+					/* Ugly: quick hack to get it working */
+					levtype[1] = p->values->name[1];
+					fdb_len=2;
+				}
+			}
+			levtype[fdb_len] = '\0';
+			setvalsfdb(&fdb->ref,"LEVTYPE",(char *)lowcase(levtype));
+		}
+		else if(strcmp(p->name,"STEP")==0 && wave_fg && (ignore_wave_fg == NULL))
+				setvalsfdb(&fdb->ref,p->name,"6");
+		else if((strcmp(p->name,"STEP")==0) || (strcmp(p->name,"FCPERIOD")==0))
+		{
+			const char *q = 0;
+			int i = 0;
+			while(q = get_value(r,p->name,i++))
+			{
+				if(isrange(q))
+				{
+					char buf[12];
+					/* Once FP in FDB is like EFI (ranges), we can remove 
+					   next test and only set ranges as p1*100000+p2 */
+					if(!fp)
+					{
+						long s = range2fdb(q,100000);
+						sprintf(buf,"%ld",s);
+					}
+					else
+					{
+						stepRange sr;
+						str2range(q,&sr);
+						sprintf(buf,"%02l%02l",sr.from/24,sr.to/24);
+					}
+					setvalsfdb(&fdb->ref,p->name,buf);
+				}
+				else
+					setvalsfdb(&fdb->ref,p->name,q);
+			}
+		}
+		else if(strcmp(p->name,"QUANTILE")==0)
+		{
+			const char *q = 0;
+			int i = 0;
+			while(q = get_value(r,p->name,i++))
+			{
+				if(isrange(q))
+				{
+					char buf[12];
+					long s = range2fdb(q,1000);
+
+					sprintf(buf,"%ld",s);
+					setvalsfdb(&fdb->ref,p->name,buf);
+				}
+				else
+					setvalsfdb(&fdb->ref,p->name,q);
+			}
+		}
+		else if(strcmp(p->name,"PARAM") == 0)
+		{
+			const char *q = 0;
+			int i = 0;
+			while(q = get_value(r,p->name,i++))
+			{
+				long par = 0;
+				long table = -1;
+
+				paramtable(lowcase(no_quotes(q)),&par,&table,false);
+				if(table >= 210 || table == 201 || table == 162 || (fdb->set_table && table != -1) || (stream_enfo && (table == 171 || table == 173)))
+				{
+					char npar[7];
+					sprintf(npar,"%ld%03ld",table,par);
+					setvalsfdb(&fdb->ref,p->name,npar);
+				}
+				else
+					setvalsfdb(&fdb->ref,p->name,(char *)lowcase(no_quotes(q)));
+			}
+		}
+		else if(strcmp(p->name,"LEVELIST")==0)
+		{
+			const char *q = 0;
+			int i = 0;
+			while(q = get_value(r,p->name,i++))
+			{
+				char buf[5];
+
+				if(atof(q) == atol(q))
+					sprintf(buf,"%04ld",atol(q));
+				else
+				{
+					int n = 4-strlen(q);
+					strcpy(buf,q);
+					while(n-->0) strcat(buf,"0");
+				}	
+				setvalsfdb(&fdb->ref,"levelist",buf);
+			}
+		}
+		else
+		{
+			const char *q = 0;
+			int i = 0;
+			while(q = get_value(r,p->name,i++))
+				setvalsfdb(&fdb->ref,p->name,(char *)lowcase(no_quotes(q)));
+		}
+		p = p->next;
+	}
+
+	free_all_requests(r);
+	return 0;
+}
+
+static fortint fdbseek(void* data, fortint offset, fortint whence)
+{
+	marslog(LOG_WARN,"No seek backwards on fdb");
+	return -1;
+}
+
+static fortint fdbtell(void* data)
+{
+	fdbdata *fdb = (fdbdata*)data;
+	return fdb->pos;
+}
+
+static long read1(void *data,void *buf,long len)
+{
+	fdbdata *fdb = (fdbdata*)data;
+
+	if(fdb->pos >= fdb->length)
+	{
+		if(fdb->more)
+		{
+			err ret = 0;
+			fdb->pos    = 0;
+			fdb->length = fdb->buflen;
+			ret = retrievefdb(&fdb->ref,fdb->buffer,&fdb->length);
+			if(ret != 0 && ret != -103)
+				return -1;
+			fdb->more = (ret == -103);
+		}else return -1;
+	}
+
+	if(fdb->length - fdb->pos < len)
+		len = fdb->length - fdb->pos;
+
+	memcpy(buf,fdb->buffer+fdb->pos,len);
+
+	fdb->pos += len;
+
+	return len;
+}
+
+void request_to_fdb(int ref,request *r,int y2k)
+{
+	err  ret = 0;
+	parameter *p = r->params;
+	boolean wave_fg = false;
+	int llen;
+	boolean ocean = false;
+	int parm = 0;
+	boolean fp = false; /* Forecast Probability */
+	const char *type   = 0;
+	boolean has_param  = true;
+	const char *levtype = get_value(r,"LEVTYPE",0);
+	const char *stream  = get_value(r,"STREAM",0);
+	const char *leg     = get_value(r,"_LEG_NUMBER",0);
+	boolean stream_enfo = false;
+	const char *ignore_wave_fg = getenv("MARS_IGNORE_WAVE_FG_FDB");
+
+
+	/* It's part of structure "fdb", but it can't be passed as parameter */
+	const char *mars_fdb_set_table = getenv("MARS_FDB_SET_TABLE");
+	boolean set_table = false;
+	if(mars_fdb_set_table != NULL)
+		set_table = EQ(mars_fdb_set_table,"1");
+
+	if(levtype && (strcmp(levtype,"SFC") == 0))
+		SETVALFDB(&ref,"levelist","0000");
+
+	type   = get_value(r,"TYPE",0);
+	if(type && EQ(type,"FP") && stream && (EQ(stream,"ENFO") || EQ(stream,"WAEF")))
+	{
+		if(!windgust(r))
+			fp = true;
+	}
+
+	if(stream && EQ(stream,"ENFO"))
+		stream_enfo = true;
+
+	/* Override behaviour via environment variable */
+	/* All this code should go once dissemination can handle step ranges for FP */
+	if(mars.no_special_fp)
+		fp = false;
+
+	/* Special case for grib2fdb of hindcast 2d-wave spectra*/
+	if(stream && (EQ(stream,"ENWH") || EQ(stream,"EWHO")))
+	{
+		SETVALFDB(&ref,"frequency","off");
+		SETVALFDB(&ref,"direction","off");
+	}
+
+
+	if(levtype && strcmp(levtype,"DP") == 0)
+	{
+		ocean = true;
+		SETVALFDB(&ref,"levelist","off");
+		SETVALFDB(&ref,"latitude","off");
+		SETVALFDB(&ref,"longitude","off");
+	}
+
+	if(leg != NULL)
+	{
+		SETVALFDB(&ref,"leg",no_quotes(leg));
+	}
+	else
+	{
+#ifdef p690
+#if 0
+		if(isfdb_attribute(&ref,"leg"))
+			SETVALFDB(&ref,"leg","1");
+#endif
+#endif
+	}
+
+	while(p)
+	{
+		if((p->name[0] == '_') || 
+			(strcmp(p->name,"REPRES") == 0))
+		{
+			/* Skip */
+		}
+		else if(strcmp(p->name,"STREAM") == 0)
+		{
+		 	if(strcmp(p->values->name,"DA") == 0) 
+				SETVALFDB(&ref,"stream","oper");
+			else
+		 	if(strcmp(p->values->name,"SD") == 0) 
+				SETVALFDB(&ref,"stream","supd");
+			else
+		 	if(strcmp(p->values->name,"WAVE") == 0) 
+			{
+				if(strcmp(get_value(r,"TYPE",0),"FG") == 0)
+					wave_fg = true;
+				SETVALFDB(&ref,"stream","wave");
+			}
+			else
+		 	if(strcmp(p->values->name,"SCWV") == 0) 
+			{
+				if(strcmp(get_value(r,"TYPE",0),"FG") == 0)
+					wave_fg = true;
+				SETVALFDB(&ref,"stream","scwv");
+			}
+			else
+		 	if(strcmp(p->values->name,"EF") == 0) 
+				SETVALFDB(&ref,"stream","enfo");
+			else
+		 	if(strcmp(p->values->name,"SF") == 0) 
+				SETVALFDB(&ref,"stream","sens");
+			else
+		 	if(strcmp(p->values->name,"MO") == 0) 
+			{
+				SETVALFDB(&ref,"stream","mnth");
+			}
+			else
+				SETVALFDB(&ref,p->name,lowcase(p->values->name));
+		}
+		else if (strcmp(p->name,"DATE") == 0)
+		{
+			int n = 0;
+				if(strlen(p->values->name) == 8 && !y2k) n = 2;
+				SETVALFDB(&ref,p->name,lowcase(no_quotes(p->values->name+n)));
+		}
+		else if(strcmp(p->name,"LEVTYPE")==0)
+		{
+			char levtype[3];
+			int fdb_len = 1; /* Length of levtype in FDB */
+			levtype[0] = p->values->name[0];
+			if(strcmp(p->values->name,"DP") != 0)
+			{
+				if(strcmp(p->values->name,"PT") == 0)
+					levtype[0] = 't';
+				else
+				if(strcmp(p->values->name,"PV") == 0)
+					levtype[0] = 'v';
+				else
+				if(strcmp(p->values->name,"WV") == 0)
+				{
+					/* Ugly: quick hack to get it working */
+					levtype[1] = p->values->name[1];
+					fdb_len=2;
+				}
+			}
+			levtype[fdb_len] = '\0';
+			SETVALFDB(&ref,"LEVTYPE",(char *)lowcase(levtype));
+		}
+		else
+		if(strcmp(p->name,"LEVELIST")==0 && !ocean)
+		{
+			char buf[5];
+
+			if(atof(p->values->name) == atol(p->values->name))
+				sprintf(buf,"%04ld",atol(p->values->name));
+			else
+			{
+				int n = 4-strlen(p->values->name);
+				strcpy(buf,p->values->name);
+				while(n-->0) strcat(buf,"0");
+
+			}	
+			SETVALFDB(&ref,"levelist",buf);
+		}
+		else
+		if(strcmp(p->name,"STEP")==0 && wave_fg && (ignore_wave_fg == NULL))
+				SETVALFDB(&ref,p->name,"6");
+		else if((strcmp(p->name,"STEP")==0) || (strcmp(p->name,"FCPERIOD")==0))
+		{
+			if(isrange(p->values->name))
+			{
+				char buf[12];
+				if(!fp)
+				{
+					long s = range2fdb(p->values->name,100000);
+					sprintf(buf,"%ld",s);
+				}
+				else
+				{
+					stepRange sr;
+					str2range(p->values->name,&sr);
+					sprintf(buf,"%02d%02d",sr.from/24,sr.to/24);
+				}
+				SETVALFDB(&ref,p->name,buf);
+			}
+			else
+			{
+				SETVALFDB(&ref,p->name,lowcase(no_quotes(p->values->name)));
+			}
+		}
+		else if(strcmp(p->name,"QUANTILE")==0)
+		{
+			if(isrange(p->values->name))
+			{
+				char buf[12];
+				long s = range2fdb(p->values->name,1000);
+
+				sprintf(buf,"%ld",s);
+				SETVALFDB(&ref,p->name,buf);
+			}
+			else
+			{
+				SETVALFDB(&ref,p->name,lowcase(no_quotes(p->values->name)));
+			}
+		}
+		else if(strcmp(p->name,"PARAM")==0)
+		{
+			const char *q = lowcase(no_quotes(p->values->name));
+			int i = 0;
+			long par = 0;
+			long table = -1;
+			char npar[7];
+
+			paramtable(q,&par,&table,false);
+			if(table >= 210 || table == 201 || table == 162 || (set_table && table != -1) || (stream_enfo && (table == 171 || table == 173)))
+				sprintf(npar,"%ld%03ld",table,par);
+			else
+				sprintf(npar,"%ld",par);
+			SETVALFDB(&ref,p->name,npar);
+		}
+		else
+		if((strcmp(p->name,"LEVELIST") == 0 && ocean) ||
+		   (strcmp(p->name,"LATITUDE") == 0) ||
+		   (strcmp(p->name,"LONGITUDE") ==0))
+		{
+			SETVALFDB_OCEAN(&ref,p->name,p->values->name);
+		}
+		else
+			SETVALFDB(&ref,p->name,lowcase(no_quotes(p->values->name)));
+		p = p->next;
+	}
+}
+
+static err  _nfdb_read(void *data,request *r,void *buffer,long *length)
+{
+	fdbdata *fdb = (fdbdata*)data;
+	err  ret = 0;
+	parameter *p;
+	long len = *length;
+	boolean wave_fg = false;
+	int llen;
+	boolean ocean = false;
+	int parm = 0;
+	boolean fp = false; /* Forecast Probability */
+	const char *type   = 0;
+	boolean has_param  = true;
+
+
+#ifdef HYPERCUBE
+	request *z = get_cubelet(fdb->h,fdb->index++);
+	fdb->w = z;
+#endif
+	
+	if(fdb->retrieve)
+	{
+		long64 total = 0;
+		size_t tmplen = *length;
+		timer_start(fdb->fdbtimer);
+		ret = wmo_read_any_from_stream(fdb,read1,buffer,&tmplen);
+		*length = tmplen;
+		if(ret == 0)
+			total = *length;
+		timer_stop(fdb->fdbtimer,total);
+
+		if(ret)
+			return ret;
+
+
+		if(ret == 0 && r && !observation(r) && !track(r))
+		{
+			grib_to_request(r,buffer,*length);
+			set_value(r,"_ORIGINAL_FIELD","1");
+		}
+
+		if((ret != BUF_TO_SMALL) && (ret != 0))
+			notify_missing_field(fdb->w,fdb->host);
+
+		return ret;
+	}
+
+	if(fdb->w == NULL)
+		return EOF;
+
+#if 0
+	if(!fdb->leg_done)
+	{
+		if(isfdb_attribute(&ref,"leg")) 
+			SETVALFDB(&ref,"leg","off");
+		fdb->leg_done = true;
+	}
+#endif
+
+	request_to_fdb(fdb->ref,fdb->w,fdb->y2k);
+
+	has_param = (get_value(fdb->w,"PARAM",0) != NULL);
+	/* Fail if parameter is either U or V */
+	/* Don't even read the FDB */
+	parm = has_param?atoi(get_value(fdb->w,"PARAM",0)):0;
+	if(!fdb->uv_from_fdb && (parm == PARAM_U || parm == PARAM_V))
+	{
+		ret = -1;
+	}
+	else
+	{
+		marslog(LOG_DBUG,"before readfdb");
+		llen = *length;
+		ret = timed_readfdb(&fdb->ref,buffer,&llen,fdb->fdbtimer);
+		*length = llen;
+		marslog(LOG_DBUG,"after readfdb, ret %d, len %d",ret,len);
+	}
+
+	if((ret == -1 || ret == -2) && has_param) {
+		*length = len;
+		marslog(LOG_DBUG,"before fdb check_uv");
+		ret = check_uv(fdb,buffer,length);
+		marslog(LOG_DBUG,"after fdb check_uv, ret %d, len %ld",ret,*length);
+		if(ret == -1 || ret == -2)
+		{
+			*length = len;
+			ret = check_repres(fdb,buffer,length);
+		}
+	}
+
+	if((ret == -1  || ret == -2) && (fdb->expect != 0 || fdb->expect_any)) 
+	    return -42;
+
+	if(ret == 0 && r && !observation(r) && !track(r))
+	{
+		*length = grib_length(buffer,*length);
+		grib_to_request(r,buffer,*length);
+		set_value(r,"_ORIGINAL_FIELD","1");
+	}
+
+	if(ret != BUF_TO_SMALL && ret != 0)
+		notify_missing_field(fdb->w,fdb->host);
+
+#ifndef HYPERCUBE
+    fdb->w = fdb->w->next;
+#endif
+
+	marslog(LOG_DBUG,"return _nfdb_read , ret %d",ret);
+	return ret;
+}
+
+static err  nfdb_read(void *data,request *r,void *buffer,long *length)
+{
+	fdbdata *fdb = (fdbdata*)data;
+	err ret = _nfdb_read(data,r,buffer,length);
+
+	while((ret == -42) && (fdb->expect != 0 || fdb->expect_any))
+	{
+		/* If expect is set or expect any, try to get more */
+
+		/* Inform about missing fields */
+		if(! fdb->nomissing)
+			notify_missing_field(fdb->w,fdb->host);
+		ret =  _nfdb_read(data,r,buffer,length);
+	}
+
+	return ret;
+}
+
+static err  nfdb_write(void *data,request *r,void *buffer,long *length)
+{
+	marslog(LOG_EXIT,"FDB write no implemeted");
+	return EOF;
+}
+
+static boolean  nfdb_check(void *data,request *r)
+{
+	if(track(r))
+		return true;
+
+	if(is_bufr(r) || image(r))
+		return false;
+
+	return true;
+}
+
+#else
+extern base_class _nullbase;
+base_class *nfdbbase = &_nullbase;
+#endif
diff --git a/src/libMars-ecregrid/nullbase.c b/src/libMars-ecregrid/nullbase.c
new file mode 100755
index 0000000..7f30395
--- /dev/null
+++ b/src/libMars-ecregrid/nullbase.c
@@ -0,0 +1,75 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+static void null_init(void);
+
+static err  null_open(void *data,request*,request*,int);
+static err  null_close(void *data);
+static err  null_read(void *data,request *r,void *buffer,long *length);
+static err  null_write(void *data,request *r,void *buffer,long *length);
+
+#ifdef VMS
+/* externaldef(base_class)  */
+#endif
+
+base_class _nullbase = {
+
+	NULL,                       /* parent class */
+	"nullbase",                 /* name         */
+
+	false,                      /* inited       */
+
+	0,                          /* private size */
+	0,                          /* option count */ 
+	NULL,                       /* options      */
+
+	null_init,                  /* init         */
+
+	null_open,                  /* open         */
+	null_close,                 /* close        */
+
+	null_read,                  /* read         */
+	null_write,                 /* write        */
+
+};
+
+
+#ifdef VMS
+/* externaldef(base_class)  */
+#endif
+
+base_class *nullbase = &_nullbase;
+
+
+static void null_init(void)
+{
+}
+
+static err  null_open(void *data,request *r,request *e,int mode)
+{
+	return 0;
+}
+
+static err  null_close(void *data)
+{
+	return 0;
+}
+
+static err  null_read(void *data,request *r,void *buffer,long *length)
+{
+	return EOF;
+}
+
+static err  null_write(void *data,request *r,void *buffer,long *length)
+{
+	return 0;
+}
diff --git a/src/libMars-ecregrid/odb.cc b/src/libMars-ecregrid/odb.cc
new file mode 100644
index 0000000..56359fc
--- /dev/null
+++ b/src/libMars-ecregrid/odb.cc
@@ -0,0 +1,304 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+///
+/// \file odb.cc
+///
+/// @author Piotr Kuchta, ECMWF May 2009
+///
+
+#ifdef ODB_SUPPORT
+
+#include "mars.h"
+
+#ifdef OLD_ODB_API
+# include "oda.h"
+# include "FILEHandle.h"
+# include "PathName.h"
+# include "Length.h"
+# include "odbcapi.h"
+# include "FastODA2Request.h"
+# include "StringTool.h"
+typedef FILEHandle StdFileHandle;
+#else
+# include "odblib/odb_api.h"
+# include "eclib_version.h"
+# include "eclib/StdFileHandle.h"
+# include "eclib/PathName.h"
+# include "eclib/Length.h"
+# include "eclib/Exceptions.h"
+# include "odblib/odbcapi.h"
+# include "odblib/FastODA2Request.h"
+# include "odblib/StringTool.h"
+#endif
+
+#include "odb.h"
+#include <set>
+
+
+#if !defined(OLD_ODB_API)
+
+	/* valid for versions of ODB_API > 0.9.20 or so */
+	#define ECLIB_FULL_VERSION  ((ECLIB_MAJOR_VERSION)*10000) + ((ECLIB_MINOR_VERSION)*100)  + (ECLIB_PATCH_VERSION)
+
+	/* From version 7.3.0, eclib is protected by a namespace */
+	#if ECLIB_FULL_VERSION >= 70300
+		using namespace eclib;
+	#endif
+
+	/* The name of the eclib function to check whether a path exists changed. We try to keep compatibility with older versions. */
+	#define ECLIB_PATH_EXIST_FN exists
+
+#else
+    #define ECLIB_PATH_EXIST_FN exist
+#endif
+
+
+
+boolean is_part_of_mars_language(const char *n)
+{
+	static request *archive = NULL;
+	const char *s = NULL;
+
+	if(!archive)
+	{
+		request *r = mars_language();
+		while(r && !EQ(r->name, "ARCHIVE"))
+			r = r->next;
+		if(r == NULL)
+		{
+			marslog(LOG_EROR, const_cast<char *>("ARCHIVE request not found in language. OOOPPPSSS!!!"));
+			marsexit(1);
+		}
+
+		archive = r;
+	}
+
+	if((s = get_value(archive,n,0)) != NULL)
+		return true;
+
+	return false;
+}
+
+// TODO: In //depot/mars/client/dev/oda/etc then to install in: /usr/local/lib/metaps/etc/ 
+// TODO: Tell Cristian if this is deployed in a config file eventually....
+const char* odb2request_config = "/usr/local/lib/metaps/etc/";
+const char * cfg = 
+"CLASS: class\n"
+"DATE: andate\n"
+"TIME: antime\n"
+"TYPE: type\n"
+"OBSGROUP: groupid\n"
+"REPORTYPE: reportype\n"
+"STREAM: stream\n"
+"EXPVER: expver\n"
+;
+
+err odb_to_request_from_file(request *r, const char *fileName, unsigned long long *cnt)
+{
+	err e = NOERR;
+	try { 
+		odb_start();
+		marslog(LOG_DBUG, const_cast<char *>("odb_to_request_from_file: fileName = %s."), fileName); 
+
+		PathName pn(fileName);
+		if (! pn.ECLIB_PATH_EXIST_FN())
+		{
+			marslog(LOG_EROR, (char *)"oda_to_request_from_file: file '%s' does not exist.", (char *) fileName);
+			return e = TOO_SHORT_ERR;
+		}
+		if (! pn.size())
+		{
+			marslog(LOG_EROR, (char *)"oda_to_request_from_file: file '%s' empty.", fileName);
+			return e = TOO_SHORT_ERR;
+		}
+
+		odb::FastODA2Request<odb::ODA2RequestClientTraits> o2r;
+		o2r.parseConfig(cfg);
+
+		eclib::OffsetList offsets;
+		eclib::LengthList lengths;
+		vector<ODAHandle*> handles;
+		bool rc = o2r.scanFile(fileName, offsets, lengths, handles);
+		for (size_t i = 0; i < handles.size(); ++i)
+			delete handles[i];
+		handles.clear();
+		if (! rc) return HYPERCUBE_ERROR;
+
+		ASSERT(lengths.size());
+		ASSERT(lengths.size() == offsets.size());
+		for(size_t i = 1; i < offsets.size(); i++)
+			ASSERT(offsets[i] > offsets[i-1]);
+		size_t last = offsets.size()-1;
+		ASSERT(PathName(fileName).size() == offsets[last] + lengths[last]);
+
+		*cnt = o2r.rowsNumber();
+
+		string filesRequest = "ARCHIVE,\n";
+		filesRequest += o2r.genRequest();
+
+		Log::debug() << "odb_to_request_from_file: " << filesRequest << endl;
+		request *n = string2request(filesRequest.c_str());
+		if (! n)
+		{
+			marslog(LOG_EROR, (char *)"Error creating a MARS request from data");
+			return e = TOO_SHORT_ERR;
+		}
+		//Log::debug() << "odb_to_request_from_file: converted to request:" << endl;
+		//print_all_requests(n);
+		reqmerge(r, n);
+		free_all_requests(n);
+		return e;
+	}
+	catch (Exception& ex)
+	{
+		marslog(LOG_EROR, (char *)"Error making a request from file %s\n",ex.what());
+		marslog(LOG_EROR, (char *)"Exception ignored");
+		e = TOO_SHORT_ERR;
+		return e;
+	}
+	return e;
+}
+
+typedef map<string, set<string> > Parameters ;
+
+Parameters parameters(request* r)
+{
+	Parameters ret;
+
+	for (parameter *p = r->params; p; p = p->next)
+	{
+		string parameterName = p->name;
+		size_t n = count_values(r, p->name);
+		if (n == 0)
+		{
+			marslog(LOG_EROR, (char *)"parameters: no values of param '%s'", p->name);
+			ASSERT(n != 0);
+		}
+		set<string> values;
+		for (size_t i = 0; i < n; ++i)
+			values.insert(get_value(r, p->name, i));
+		ret[parameterName] = values;
+	}
+	return ret;
+}
+
+err odb_compare_attributes_of_first_request(request* first, request* second)
+{
+	typedef Parameters P;
+
+	P firstParams = parameters(first);
+	P secondParams = parameters(second);
+
+	for (P::iterator it = firstParams.begin(); it != firstParams.end(); ++it)
+	{
+		const string& paramName = it->first;
+		const set<string>& values = it->second;
+
+		P::iterator jt = secondParams.find(paramName);
+		if (jt == secondParams.end())
+		{
+			marslog(LOG_EROR, (char *)"odb_compare_attributes_of_first_request: second request has no param '%s'", paramName.c_str());
+			return -1;
+		}
+		const set<string>& otherValues = jt->second;
+		if (values != otherValues)
+		{
+			stringstream ss;
+			if (values.size() == 1 && otherValues.size() == 1)
+			{
+				ss << "Values of '" << paramName << "' differ: " << *values.begin() << " <> " << *otherValues.begin();
+				marslog(LOG_EROR, (char *)"odb_compare_attributes_of_first_request: %s", ss.str().c_str());
+			}
+			else
+			{
+				marslog(LOG_EROR, (char *)"odb_compare_attributes_of_first_request: values for param '%s' differ", paramName.c_str());
+				ostream_iterator<string> out(ss, ", ");
+				set_symmetric_difference(values.begin(), values.end(), otherValues.begin(), otherValues.end(), out);
+				marslog(LOG_EROR,(char *)
+					"odb_compare_attributes_of_first_request: values present in one of the sets, but not in the other: %s",
+					ss.str().c_str());
+			}
+			return -1;
+		}
+	}
+	return NOERR;
+}
+
+long long odb_filter(const char *sql, FILE *fin, FILE *fout, long long total_to_read)
+{
+	try { 
+		odb_start();
+		marslog(LOG_INFO, const_cast<char *>("odb_filter: sql = '%s', total_to_read = %lld"),
+			((sql == 0) ? "NULL" : sql),
+			total_to_read);
+
+		if (total_to_read == 0)
+			return 0;
+
+		// TODO: check sql is a select really and does not have INTO clause (?)
+		StdFileHandle fhin(fin), fhout(fout); 
+		fhin.openForRead();
+
+		if (! sql)
+		{
+			Length n = fhin.saveInto(fhout);
+			ASSERT(total_to_read == n);
+		}
+		else
+		{
+			using namespace odb;
+			string s(sql);
+			StringTool::trimInPlace(s);
+			s = StringTool::isInQuotes(s) ? StringTool::unQuote(s) : s;
+
+			odb::Select odb(s, fhin); 
+			odb::Select::iterator it = odb.begin();
+			odb::Select::iterator end = odb.end();
+
+			odb::Writer<> writer(fhout);
+			odb::Writer<>::iterator outit = writer.begin(); 
+			outit->pass1(it, end);
+		}
+		marslog(LOG_INFO, const_cast<char *>(" => odb_filter"));
+	}
+	catch (Exception &ex)
+	{
+		marslog(LOG_EROR, (char*)"Error in odb_filter %s\n",ex.what());
+		return -1;
+	}
+
+	// TODO: make sure the below is true
+	return total_to_read;
+}
+
+static int test()
+{
+	odb_start();
+	const char *sql = "select lat, lon";
+	FILE *fin = fopen("input.oda", "r");
+	FILE *fout = fopen("output.oda", "w");
+
+	long long total_to_read = 0; // ? Do we really need this? maybe
+	long long total_read = odb_filter(sql, fin, fout, total_to_read);
+
+	//assert(total_to_read == total_read);
+
+	fclose(fin);
+	fclose(fout);
+	
+	return total_to_read;
+}
+
+//int main(int argc, char *argv[]) { return test(); }
+
+#else
+#include "mars.h"
+#endif
diff --git a/src/libMars-ecregrid/odb.h b/src/libMars-ecregrid/odb.h
new file mode 100644
index 0000000..0209f6e
--- /dev/null
+++ b/src/libMars-ecregrid/odb.h
@@ -0,0 +1,35 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#ifndef ODB_H
+#define ODB_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef ODB_SUPPORT
+///
+/// \file odb.h
+///
+/// @author Piotr Kuchta, ECMWF May 2009
+///
+
+err odb_to_request_from_file(request *r, const char *fileName, unsigned long long *cnt);
+err odb_compare_attributes_of_first_request(request*, request*);
+long long odb_filter(const char *, FILE *fin, FILE *fout, long long total_to_read);
+
+#endif
+
+#ifdef __cplusplus
+}  // extern "C" 
+#endif
+
+#endif
diff --git a/src/libMars-ecregrid/odbbase.c b/src/libMars-ecregrid/odbbase.c
new file mode 100644
index 0000000..e4bc2b8
--- /dev/null
+++ b/src/libMars-ecregrid/odbbase.c
@@ -0,0 +1,442 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+#ifdef ODBSERVER
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <signal.h>
+#include <ctype.h>
+
+
+/* db prototypes */
+
+static void    odb_init(void);
+static err     odb_open(void *data, request *r, request *e, int mode);
+static err     odb_close(void *data);
+static err     odb_read(void *data, request *r, void *buffer, long *length);
+static err     odb_write(void *data, request *r, void *buffer, long *length);
+static err     odb_query(void *data, request *r, long *length);
+static boolean odb_check(void *data, request *r);
+
+struct CurrentFile {
+	FILE      *f;
+	long long size;
+	long long offset;
+
+	size_t    currentBlock;
+	size_t    numberOfBlocks;
+	off64_t*  offsets;
+	size_t*   sizes;
+};
+
+typedef struct odbdata {
+	char      *root;
+
+	struct CurrentFile currentFile;
+
+	long 	  nbfiles;     
+	long 	  fileIndex;     
+	char      **files;
+} odbdata;
+
+
+static option opts[] = {
+	{"odb_server_root","ODB_SERVER_ROOT","-odb_server_root",".",
+	t_str,sizeof(char*),OFFSET(odbdata,root) },
+};
+
+
+/* End of ODB interface */
+
+
+base_class _odbbase = {
+
+	NULL,                   /* parent class */
+	"odbbase",             /* name         */
+
+	false,                  /* inited       */
+
+	sizeof(odbdata),         /* private size */
+	NUMBER(opts),            /* option count */
+	opts,                    /* options      */
+
+	odb_init,               /* init         */
+
+	odb_open,               /* open         */
+	odb_close,              /* close        */
+
+	odb_read,               /* read         */
+	odb_write,              /* write        */
+
+	NULL,                   /* control      */
+
+	odb_check,				/* check */
+
+};
+
+
+
+/* the only 'public' variable ... */
+
+base_class *odbbase = &_odbbase;
+
+
+static void odb_init(void)
+{
+	marslog(LOG_DBUG,"odb_init:Initialize odb");
+	odb_start();
+}
+/* ==========================================*/
+typedef char *(*chkproc)(request *r,const char*,const char*,int idx);
+
+static char *extchar(request *r,const char*,const char*,int idx);
+static char *extlong(request *r,const char*,const char*,int idx);
+static char *extreal(request *r,const char*,const char*,int idx);
+
+typedef struct chktype{
+	char    *name;
+	char    *format;
+	int     size;
+	chkproc extract;
+	boolean in_request;
+} chktype;
+
+static chktype checks_odb[] = {
+	{":"            ,"%s",  0,  extchar, false, }, 
+	{"CLASS"        ,"%s",  2, 	extchar, true,  },
+	{":"            ,"%s",  0,  extchar, false, }, 
+	{"STREAM"       ,"%s",  4, 	extchar, true,  },
+	{":"            ,"%s",  0,  extchar, false, }, 
+	{"EXPVER"       ,"%s",  4,  extchar, true,  },
+	{":"            ,"%s",  0,  extchar, false, }, 
+	{"DATE"         ,"%s",  8, 	extchar, true,  },
+	{"/"            ,"%s",  0,  extchar, false, }, 
+	{":"            ,"%s",  0,  extchar, false, }, 
+	{"TIME"         ,"%04d",4,  extlong, true,  },
+	{":"            ,"%s",  0,  extchar, false, }, 
+	{"TYPE"         ,"%s",  3, 	extchar, true,  },
+	{":"            ,"%s",  0,  extchar, false, }, 
+	{"OBSGROUP"     ,"%s",  0, 	extchar, true,  },
+	{"/"            ,"%s",  0,  extchar, false, }, 
+	{"REPORTYPE"    ,"%s",  0,  extchar, true,  },
+	{"."            ,"%s",  0,  extchar, false, }, 
+	{"odb"          ,"%s",  0,  extchar, false, }, 
+};
+
+
+static char *filename(request *r)
+{
+	static char buf[1024];
+	int i;
+
+	chktype *checks = checks_odb;
+	int n = NUMBER(checks_odb);
+
+	marslog(LOG_DBUG,"filename(r) checks: %d",n);
+	
+	buf[0] = 0;
+	for(i=0;i<n;i++)
+	{
+		if(checks[i].in_request)
+			strcat(buf,checks[i].extract(r,checks[i].name,checks[i].format,checks[i].size));
+		else
+			strcat(buf,checks[i].name);
+		marslog(LOG_DBUG,"filename(r) intermediate: '%s'",buf);
+	}
+
+	marslog(LOG_DBUG,"filename(r) returns: '%s'",buf);
+
+	return buf;
+}
+
+static void complete(char *p,int len)
+{
+	len -= strlen(p);
+	while(len--) strcat(p,"x");
+}
+
+static char *extchar(request *r,const char* name,const char* format,int size)
+{
+	static char buf[200];
+	const char *x = get_value(r,name,0);
+	buf[0] = 0;
+	if(x) sprintf(buf,format,lowcase(x));
+	if(size>0)
+		complete(buf,size);
+	return buf;
+}
+
+static char *extlong(request *r,const char* name,const char* format,int size)
+{
+	static char buf[200];
+	const char *x = get_value(r,name,0);
+	buf[0] = 0;
+	if(x) sprintf(buf,format,atol(x));
+	if(size>0)
+		complete(buf,size);
+	return buf;
+}
+
+/* ===== odb file operations ===== */
+
+static err odbfile_open(odbdata *odb, int i)
+{
+	char *s = odb->files[i];
+	FILE *f = fopen(s,"r");
+	if(f == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR, "odbfile_open: '%s'", s);
+		return -2;
+	}
+
+	marslog(LOG_DBUG, "odbfile_open (%s) index %d", s, i);
+
+	odb->currentFile.numberOfBlocks = 0;
+	odb->currentFile.offsets = 0;
+	odb->currentFile.sizes = 0;
+
+	int rc = get_blocks_offsets(s, &odb->currentFile.numberOfBlocks, &odb->currentFile.offsets, &odb->currentFile.sizes);
+
+	/* Position at the end to get size */
+	if(fseek(f,0,SEEK_END) != 0)
+	{
+		marslog(LOG_EROR|LOG_PERR, "fseek(%s)", s);
+		return -2;
+	}
+	odb->currentFile.size = ftell(f);
+
+	/* Re-position at the begining */
+	if(fseek(f,0,SEEK_SET) != 0)
+	{
+		marslog(LOG_EROR|LOG_PERR, "fseek(%s)", s);
+		return -2;
+	}
+
+	odb->fileIndex = i;
+	odb->currentFile.f = f;
+	odb->currentFile.offset = 0;
+	odb->currentFile.currentBlock = 0;
+
+	return NOERR;
+}
+
+static err odbfile_close(odbdata *odb, int i)
+{
+	marslog(LOG_DBUG,"odbfile_close (%s) index %d", odb->files[i], i);
+
+	fclose(odb->currentFile.f);
+	odb->currentFile.f = NULL;
+
+	odb_start();
+	release_blocks_offsets(&odb->currentFile.offsets);
+	release_blocks_sizes(&odb->currentFile.sizes);
+
+	odb->currentFile.offsets = 0;
+	odb->currentFile.sizes = 0;
+
+	return NOERR;
+}
+
+/*
+TODO: set disk buffer sizes
+	if(mars.readdisk_buffer > 0) { if(setvbuf(f,dhs->read_disk_buffer,_IOFBF,mars.readdisk_buffer)) marslog(LOG_WARN|LOG_PERR,"setvbuf failed"); }
+*/
+
+/* TODO: Check different cases
+- buffer smaller than file to read
+- buffer bigger than file to read
+- read from more than one file
+*/
+static err odbfile_read(odbdata *odb, char* buffer, long* length)
+{
+	timer *disk_time = get_timer("Read from disk", NULL, true);
+	long read = 0;
+
+	marslog(LOG_DBUG, "odbfile_read %ld bytes", *length);
+
+	if (odb->currentFile.currentBlock >= odb->currentFile.numberOfBlocks)
+	{
+		if (++odb->fileIndex >= odb->nbfiles)
+			return EOF;
+
+		odbfile_close(odb, odb->fileIndex);
+		odbfile_open(odb, ++odb->fileIndex);
+		return odbfile_read(odb, buffer, length);
+	}
+
+	size_t blockSize = odb->currentFile.sizes[odb->currentFile.currentBlock];
+	if (blockSize > *length)
+	{
+		marslog(LOG_EROR, "Block %d is too large.", odb->currentFile.currentBlock);
+		return -3;
+	}
+
+	long n = timed_fread(buffer, 1, blockSize, odb->currentFile.f, disk_time);
+	if (n != blockSize)
+	{
+		marslog(LOG_EROR, "Error reading block %d.", odb->currentFile.currentBlock);
+		return -2;
+	}
+	*length = blockSize;
+	return NOERR;
+}
+
+/* ==========================================*/
+
+static err odb_open(void *data, request *r, request *e, int mode)
+{
+	odbdata *odb = (odbdata*)data;
+    parameter *p = 0;
+	long      flags  = expand_flags(EXPAND_MARS| EXPAND_SUB_LISTS);
+	request   *s = 0;
+	const char *type = 0;
+	char *fname = NULL;
+	request *u = NULL;
+	request *a = NULL;
+	int i = 0;
+
+	marslog(LOG_DBUG,"odb_open");
+
+	unset_value(r,"TARGET");
+	s = expand_all_requests(mars_language(),mars_rules(),r);
+	type = get_value(s,"TYPE",0);
+
+	expand_flags(flags);
+	reset_language(mars_language());
+
+	marslog(LOG_INFO,"ODB_SERVER_ROOT=%s",odb->root);
+
+	/* Find the file names to open */
+	u = unwind_one_request(r);
+	odb->nbfiles = count_requests(u);
+	marslog(LOG_DBUG,"Files to open: %ld",odb->nbfiles);
+
+	odb->files = (char **)reserve_mem(odb->nbfiles * sizeof(char *));
+	a = u;
+	i = 0;
+	while(a)
+	{
+		char *f = filename(a);
+		char name[1024];
+		sprintf(name,"%s/%s",odb->root,f);
+		/* marslog(LOG_INFO,"Request: "); */
+		print_one_request(a);
+		/* marslog(LOG_INFO,"Filename for request: '%s'",name); */
+		if(faccess(name,0) == 0)
+			odb->files[i++] = strcache(name);
+		else
+		{
+			marslog(LOG_EROR|LOG_PERR,"file %s",name);
+		}
+		a = a->next;
+	}
+	odb->nbfiles = i;
+
+	marslog(LOG_DBUG,"Filenames found: ");
+	for(i = 0; i<odb->nbfiles; ++i)
+		marslog(LOG_INFO,"ODB file: '%s'",odb->files[i]);
+
+	free_all_requests(u);
+	free_all_requests(s);
+
+	/* If no files found, there is no data for this request. Return */
+	if(odb->nbfiles == 0)
+		return -1;
+
+	odbfile_open(odb,0);
+
+	return NOERR;
+}
+
+
+static err odb_close(void *data)
+{
+	odbdata *odb = (odbdata*)data;
+	int i = 0;
+	marslog(LOG_DBUG,"odb_close");
+	
+	for(i = 0; i<odb->nbfiles; ++i)
+		strfree(odb->files[i]);
+
+	release_mem(odb->files);
+	odb->files = NULL;
+	if(odb->currentFile.f != NULL)
+		fclose(odb->currentFile.f);
+	odb->currentFile.f = NULL;
+	odb->currentFile.size = 0;
+	odb->currentFile.offset = 0;
+	odb->nbfiles = 0;
+	odb->fileIndex = 0;
+	return NOERR;
+}
+
+
+
+static err odb_read(void *data,request *r,void *buffer,long *length)
+{
+	odbdata *odb = (odbdata*)data;
+	static int count = 0;
+	long size = *length;
+	err e = NOERR;
+	boolean save = (getenv("SAVE_DATA_READodb") != NULL);
+
+	marslog(LOG_DBUG,"-> odb_read: %ld bytes",*length);
+
+	e = odbfile_read(odb,buffer,length);
+
+	marslog(LOG_DBUG,"<- odb_read: %ld bytes, return code %d",*length,e);
+	if(*length > size)
+		marslog(LOG_EROR,"Read %ld bytes > buffer size (%ld bytes)",*length,size);
+
+	if(save)
+	{
+		FILE   *fd;
+		char fname[50];
+		sprintf(fname,"readodb.buffer.%d",count);
+		if( (fd = fopen(fname,"w")) == NULL)
+			marslog(LOG_EROR|LOG_PERR,"Error saving buffer read from odb. Can't open file %s",fname);
+		else
+		{
+			if(fwrite(buffer,1,*length,fd) != *length)
+				marslog(LOG_EROR|LOG_PERR,"Error writing to file %s",fname);
+		}
+		fclose(fd);
+	}
+	
+	count++;
+	marslog(LOG_DBUG,"odb_read returns %d",e);
+	return e;
+}
+
+
+static err odb_write(void *data, request *r, void *buffer, long *length)
+{
+	marslog(LOG_EROR,"odb_write:Not implemented");
+
+	return NOERR;
+}
+
+
+static boolean odb_check(void  *data, request *r)
+{
+	const char *type = get_value(r,"TYPE",0);
+
+	marslog(LOG_DBUG,"odb_check: ");
+	if(is_odb(r))
+		return true;
+
+	return false;
+}
+#else
+extern base_class _nullbase;
+base_class *odbbase = &_nullbase;
+#endif
diff --git a/src/libMars/options.c b/src/libMars-ecregrid/options.c
similarity index 100%
copy from src/libMars/options.c
copy to src/libMars-ecregrid/options.c
diff --git a/src/libMars-ecregrid/pproc.c b/src/libMars-ecregrid/pproc.c
new file mode 100644
index 0000000..f2e9974
--- /dev/null
+++ b/src/libMars-ecregrid/pproc.c
@@ -0,0 +1,2017 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include "ecregrid_api.h"
+#include "grib_api.h"
+#include <errno.h>
+#include <ctype.h>
+#include <math.h>
+
+
+#define TRACE(a) \
+	do { marslog(LOG_DBUG,"-> %s",#a); a ; marslog(LOG_DBUG,"<- %s",#a); } while(0)
+
+#ifdef OBSOLETE
+/* For duplicates .. */
+#define KEY_SIZE 32
+
+typedef struct node{
+	char key[KEY_SIZE];
+	struct node *left;
+	struct node *right;
+} node;
+#endif
+
+static struct {
+
+	int   busy;
+	int   quiet;
+
+#ifdef OBSOLETE
+	int   no_duplicates;
+	node  *top;
+	int   dup_count;
+#endif
+
+	int   in_count;
+	int   out_count;
+	int   res_count;
+	int   bad_count;
+
+	int   area_cnt;
+	int   north;
+	int   south;
+	int   east;
+	int   west;
+	int   inter_cnt;
+
+	int   type_cnt;
+	int   *types;
+
+	int   block_cnt;
+	int   *blocks;
+
+	int   interval_cnt;
+	time_interval  *intervals;
+
+	boolean is_bufrfile;
+	boolean original_grib;
+
+	int     ident_cnt;
+	int     *idents;
+	int     instrument_cnt;
+	fortint *instruments;
+
+	long   estimate;
+	long   edition;
+	long   derive_uv;
+
+	char *odb_sql;
+	field_description*  field_features;
+	grib_values*        grib_features;
+	int                 grib_features_cnt;
+} ppdata = {
+	0,};
+
+static timer *pptimer = NULL;
+static timer *memcpytimer = NULL;
+
+static err no_scalar_postproc(char *buff,long inlen,long *outlen);
+static err no_postproc(ppbuffer_t *pp, long *nbuffer);
+static err grib_vector_postproc(ppbuffer_t *ppin, long *nbuffer);
+static err grib_scalar_postproc(char *buffer,long inlen,long *outlen);
+static err grib_postproc(ppbuffer_t *pp, long *nbuffer);
+static err track_postproc(ppbuffer_t *pp, long *nbuffer);
+static err track_scalar_postproc(char *buffer,long inlen,long *outlen);
+static err obs_postproc(ppbuffer_t *pp, long *nbuffer);
+static err obs_scalar_postproc(char *buffer,long inlen,long *outlen);
+static err odb_postproc(ppbuffer_t *pp, long *nbuffer);
+static err odb_scalar_postproc(char *buffer,long inlen,long *outlen);
+
+static void ppinfo()
+{
+	int i;
+	if(ppdata.area_cnt == 4)
+		printf("AREA %d-%d-%d-%d\n",
+		    ppdata.north,ppdata.west,ppdata.south,ppdata.east);
+	if(ppdata.type_cnt) {
+		printf("OBSTYPE ");
+		for(i=0;i<ppdata.type_cnt;i++)
+			printf("%d ",ppdata.types[i]);
+		putchar('\n');
+	}
+	if(ppdata.interval_cnt) {
+		printf("INTERVALS ");
+		for(i=0;i<ppdata.interval_cnt;i++)
+			printf("[%lld,%lld] ",ppdata.intervals[i].begin,
+								ppdata.intervals[i].end);
+		putchar('\n');
+	}
+	if(ppdata.block_cnt) {
+		printf("BLOCK ");
+		for(i=0;i<ppdata.block_cnt;i++)
+			printf("%d ",ppdata.blocks[i]);
+		putchar('\n');
+	}
+	if(ppdata.ident_cnt) {
+		printf("IDENT ");
+		for(i=0;i<ppdata.ident_cnt;i++)
+			printf("%d ",ppdata.idents[i]);
+		putchar('\n');
+	}
+	if(ppdata.instrument_cnt) {
+		printf("INSTRUMENT ");
+		for(i=0;i<ppdata.instrument_cnt;i++)
+			printf("%d ",ppdata.instruments[i]);
+		putchar('\n');
+	}
+}
+
+#ifdef OBSOLETE
+/* Binary tree to find duplicates */
+
+static int find_key(node *n,char *key,node **which,int *where)
+{
+	*which = NULL;
+
+	while(n)
+	{
+		*which = n;
+		*where = memcmp(key,n->key,KEY_SIZE);
+
+		if(*where == 0)
+		{
+			
+			return 1;
+		}
+
+		if(*where>0)
+			n = n->right;
+		else
+			n = n->left;
+	}
+	return 0;
+}
+
+static int add_key(node **top,char *k)
+{
+	node *which;
+	node *p;
+	int where;
+
+	if(find_key(*top,k,&which,&where))
+		return 1;
+
+	p  = NEW(node);
+
+	memcpy(p->key,k,KEY_SIZE);
+
+	p->left = p->right = NULL;
+	if(which)
+		if(where>0)
+			which->right = p;
+		else 
+			which->left = p;
+	else *top = p;
+	return 0;
+}
+
+static void delete_node(node *n)
+{
+	if(n) {
+		delete_node(n->left);
+		delete_node(n->right);
+		FREE(n);
+	}
+}
+
+#endif
+
+
+static err no_scalar_postproc(char *buff,long inlen,long *outlen)
+{
+	*outlen = inlen;
+
+	if(ppdata.original_grib)
+	{
+		fortint len = *outlen;
+		err ret = original_grib(buff,&len);
+		*outlen = len;
+		return ret;
+	}
+
+	return NOERR;
+}
+
+static err no_postproc(ppbuffer_t *pp, long *nbuffer)
+{
+	*nbuffer = 1;
+	return no_scalar_postproc(pp[0].buffer,pp[0].inlen,&pp[0].outlen);
+}
+
+#define PPROC_PRECISION "%.15g"
+
+err ppstyle(const request *r)
+{
+	err       ret     = NOERR;
+	fortfloat array[4];
+	fortint   n       = 0; 
+
+	if(get_value(r,"STYLE",0))
+	{
+		const char *style = no_quotes(get_value(r,"STYLE",0));
+		marslog(LOG_DBUG,"Setting post-processing style to: '%s'",style);
+		/* ret  = ppout("style",n,array,lowcase(style)); */
+		ret = 1;
+		marslog(LOG_DBUG,"Setting Style doesn't work at the moment for ECREGRID: '%s'",style);
+		if(ret) return ret;
+		if(EQ(style,"DISSEMINATION"))
+		{
+			marslog(LOG_WARN,"With style=dissemination, avoid intermediate packing");
+			mars.use_intuvp = 1;
+		}
+	}
+	return NOERR;
+}
+
+
+err pprotation(const request *r)
+{
+	err       ret     = NOERR;
+
+	/* rotation */
+	if(get_value(r,"_ROTATION_LAT",0) || get_value(r,"_ROTATION_LON",0))
+	{
+		ret      = ecregrid_set_south_pole(ppdata.field_features, atof(get_value(r,"_ROTATION_LAT",0)), atof(get_value(r,"_ROTATION_LON",0)));
+		if(ret) return ret;
+	}
+	return NOERR;
+}
+/* new one */
+/*
+err pplevtype(request *r, field_features *f)
+{
+	err	ret = ecregrid_set_level_type( f, get_value(r,"LEVTYPE",0));
+
+	return ret;
+}
+*/
+
+err pparea(request *r)
+{
+	const char *p;
+	fortfloat n = 0,s = 0,e = 0,w = 0;
+
+	/* boolean     ocean = level && (strcmp(level,"DP") == 0);   */
+	/* Level depth means ocean data */
+
+	if( p = get_value(r,"_AREA_N",0))  n = atof(p);
+	if( p = get_value(r,"_AREA_S",0))  s = atof(p);
+	if( p = get_value(r,"_AREA_E",0))  e = atof(p);
+	if( p = get_value(r,"_AREA_W",0))  w = atof(p);
+
+	return 0;
+}
+
+static int get_parameter(void *buffer, long length, err *ret);
+
+static err ppintf(char *inbuf,long inlen,char *outbuf,long *outlen,boolean copy)
+{
+	fortint out = *outlen;
+	fortint in  = inlen;
+	int ret = 0;
+	grib_handle *handle_in = NULL;
+	grib_handle *handle_out = NULL;
+	int grib_set_count = 0;
+	grib_values* grib_set = 0;
+	const void* temp;
+	size_t templen;
+
+	timer_start(pptimer);
+
+	/* ret = intf2(inbuf,inlen,outbuf,&out,ppdata.edition); */
+	handle_in  = grib_handle_new_from_message(0,inbuf,inlen);
+	/* handle_out = grib_handle_new_from_template(NULL,"GRIB1"); */
+	marslog(LOG_DBUG,"===============> ECREGRID");
+    handle_out = ecregrid_process_grib_handle_to_grib_handle_grib_set(handle_in,ppdata.field_features,grib_set,grib_set_count,&ret);
+	marslog(LOG_DBUG,"<=============== ECREGRID returns %d, size %ld, handle_in %x, handle_out %x",ret,out,handle_in, handle_out);
+    if(ret != 0){
+        marslog(LOG_EROR,"ecregrid_process_grib_handle \n");
+        return 1;
+    }
+
+	timer_stop(pptimer,0);
+
+	/* No interpolation has been done */
+	if(handle_out == 0)
+		*outlen = 0;
+	
+	if(ret)
+	{
+		marslog(LOG_EROR,"Interpolation failed (%d)",ret);
+		return ret;
+	}
+
+/* COME BACK HERE */
+/* Achieved with grib_get_message_copy below */
+/*
+grib_get_message(handle_out,&temp,&templen);
+memcpy(outbuf,temp,templen);
+*outlen = templen;
+*/
+
+	if(ret == 0 && *outlen == 0)
+	{
+		marslog(LOG_INFO,"No interpolation done");
+		if(copy) {
+			timer_start(memcpytimer);
+			memcpy(outbuf,inbuf,inlen);
+			timer_stop(memcpytimer,inlen);
+			*outlen = inlen;
+		}
+	}
+	else
+	{
+		if(ret == 0)
+			grib_get_message_copy(handle_out,(void *)outbuf,(size_t *)outlen);
+	}
+
+	grib_handle_delete(handle_out);
+
+	return ret;
+}
+
+/**************************/
+/* Vector Post-Processing */
+/**************************/
+
+typedef struct pairs_t {
+	int param;
+	char *buffer;
+	int len;
+} pairs_t;
+
+#define NPARAMS 257000
+pairs_t pair[NPARAMS];
+
+static void set_pair(int p, int q)
+{
+	pair[p].param  = q;
+	pair[p].buffer = NULL;
+	pair[p].len    = 0;
+
+	pair[q].param  = p;
+	pair[q].buffer = NULL;
+	pair[q].len    = 0;
+}
+
+static void init_pairs()
+{
+	int i = 0;
+	static boolean first = true;
+	if(!first)
+		return;
+	first = false;
+
+	for(i = 0; i<NPARAMS; ++i)
+	{
+		pair[i].param  = 0; 
+		pair[i].buffer = NULL; 
+		pair[i].len    = 0;
+	}
+	/* Need to consider table as well: COME BACK HERE */
+	set_pair(131,132);
+	set_pair(129131,129132);
+	set_pair(200131,200132);
+	set_pair(165,166);
+}
+
+
+static boolean is_vector_parameter(int p)
+{
+	init_pairs();
+
+    /* For parameter 3.228, we allow syntax 228003 */
+	if(p>257)
+		p %= 1000;
+
+	if(pair[p].param)
+		return true;
+
+	return false;
+}
+
+static boolean vector_parameter_requested(const request *r)
+{
+	int i = 0;
+	const char *param = NULL;
+
+	init_pairs();
+
+	param = r?get_value(r,"PARAM",i++):NULL;
+	while(param)
+	{
+		int p = atoi(param);
+		if(is_vector_parameter(p))
+		{
+			marslog(LOG_DBUG,"Vector parameter %d requested",p);
+			return true;
+		}
+		else
+		{
+			marslog(LOG_DBUG,"Param %d is not vector",p);
+		}
+		param = get_value(r,"PARAM",i++);
+	}
+	return false;
+}
+
+static int vector_pair(int p)
+{
+	if(is_vector_parameter(p))
+		return pair[p].param;
+
+	return -1;
+}
+
+
+static int get_parameter(void *buffer, long length, err *ret)
+{
+	grib_handle *g = grib_handle_new_from_message(0,buffer,length);
+	long n;
+	*ret = grib_get_long(g,"paramId",&n);
+	grib_handle_delete(g);
+	return n;
+}
+
+
+err vector_postproc(ppbuffer_t *pp, long *nbuffer)
+{
+	int ret = 0;
+	int p = get_parameter(pp[0].buffer,pp[0].inlen,&ret);
+	int q;
+
+	if(ret != 0)
+	{
+		marslog(LOG_WARN,"Error %d in vector_postproc while getting parameter number",ret);
+		marslog(LOG_WARN,"Interpolation not done");
+		nbuffer = 0;
+		return ret;
+	}
+
+	marslog(LOG_DBUG,"vector_postproc called for parameter %d",p);
+	if(!is_vector_parameter(p))
+	{
+		marslog(LOG_DBUG,"Parameter %d is not vector. Calling scalar post-processing",p);
+		*nbuffer = 1;
+		return grib_scalar_postproc(pp[0].buffer,pp[0].inlen,&pp[0].outlen);	
+	}
+
+
+	if((q = vector_pair(p)) == 0)
+	{
+		marslog(LOG_WARN,"Vector pair for parameter %d not found",p);
+		marslog(LOG_WARN,"Perform scalar post-processing");
+		marslog(LOG_WARN,"Please, inform MARS analyst");
+
+		*nbuffer = 1;
+		return grib_scalar_postproc(pp[0].buffer,pp[0].inlen,&pp[0].outlen);
+	}
+
+
+	/* Copy input buffer */
+	pair[p].len    = pp[0].inlen;
+	pair[p].buffer = (char *)reserve_mem(pair[p].len);
+	memcpy(pair[p].buffer, pp[0].buffer, pp[0].inlen);
+
+	if(pair[q].buffer)
+	{
+		err ret = 0;
+		char *pufield = (p<q)?pair[p].buffer:pair[q].buffer;
+		char *pvfield = (p<q)?pair[q].buffer:pair[p].buffer;
+		long ulen = (p<q)?pair[p].len:pair[q].len;
+		long vlen = (p<q)?pair[q].len:pair[p].len;
+		grib_handle *uin = NULL;
+		grib_handle *vin = NULL;
+		vector_grib_handle* out_vector = NULL;
+		int grib_set_count = 0;
+		grib_values* grib_set = 0;
+
+
+		long    out = pp[0].buflen;
+
+		marslog(LOG_DBUG,"Got parameters %d and %d. Calling vector post-processing",p,q);
+
+		if(mars.debug)
+		{
+			request *r = empty_request("WIND");
+
+			marslog(LOG_DBUG,"Buffer for %d at address %x, length %d",p,pair[p].buffer,pair[p].len,pair[p].len);
+			grib_to_request(r,pair[p].buffer,pair[p].len);
+			print_all_requests(r);
+			free_all_requests(r);
+
+			r = empty_request("WIND");
+			marslog(LOG_DBUG,"Buffer for %d at address %x, length %d",q,pair[q].buffer,pair[q].len);
+			grib_to_request(r,pair[q].buffer,pair[q].len);
+			print_all_requests(r);
+			free_all_requests(r);
+
+		}
+
+		/* If derived U/V, don't call vector postprocessing */
+		if(is_wind(p) && (ppdata.derive_uv > 0))
+		{
+			marslog(LOG_DBUG,"Parameters U/V already derived. Avoid calling ECREGRID vect");
+			memcpy(pp[0].buffer,pufield,pp[0].inlen);
+			memcpy(pp[1].buffer,pvfield,pp[0].inlen);
+			out=0;
+			ret=0;
+			ppdata.derive_uv -= 2;
+		}
+		else
+		{
+			/* Call vector interpolation */
+			/* temporary ecregrid */
+			ret = 1;
+			/* TRACE(ret= intvect_(pufield,pvfield,&inwords,pp[0].buffer,pp[1].buffer,&outwords)); */
+			uin  = grib_handle_new_from_message(0,pufield,ulen);
+			vin = grib_handle_new_from_message(0,pvfield,vlen);
+
+			marslog(LOG_DBUG,"===============> ECREGRID vect");
+			timer_start(pptimer);
+			out_vector = ecregrid_process_vector_grib_handle_to_grib_handle_grib_set(uin,vin,ppdata.field_features,grib_set,grib_set_count,&ret);
+			timer_stop(pptimer,0);
+			marslog(LOG_DBUG,"<=============== ECREGRID vect ret %d, out_vector %x",ret, out_vector);
+		}
+
+		if(!out_vector && ret != NOERR){
+			marslog(LOG_EROR,"Error getting vector");
+			return POSTPROC_ERROR;
+		}
+		if(ret == NOERR)
+		{
+			if(!out_vector)
+			{
+				/* No interpolation has been done */
+				marslog(LOG_DBUG,"No interpolation has been done");
+				out = 0;
+			}
+			else
+			{
+				if(out_vector->one){
+					ret = grib_get_message_copy(out_vector->one,(void *)pp[0].buffer,(size_t *)pp[0].buflen);
+					if(ret != NOERR)
+						marslog(LOG_EROR,"Error getting U message");
+						return POSTPROC_ERROR;
+				}
+				else{
+					marslog(LOG_EROR,"Error getting U handle");
+					return POSTPROC_ERROR;
+
+				}
+				if(out_vector->two){
+					ret = grib_get_message_copy(out_vector->two,(void *)pp[1].buffer,(size_t *)pp[1].buflen);
+					if(ret != NOERR)
+						marslog(LOG_EROR,"Error getting V message");
+						return POSTPROC_ERROR;
+				}
+				else{
+					marslog(LOG_EROR,"Error getting V handle");
+					return POSTPROC_ERROR;
+
+				}
+			}
+		}
+		if(out_vector) {
+			if(out_vector->one) grib_handle_delete(out_vector->one);
+			if(out_vector->two) grib_handle_delete(out_vector->two);
+			FREE(out_vector);
+		}
+
+
+		/* If 0, no interpolation as been done.. */
+
+		if((out != 0) && (mars.grib_postproc == 0))
+		{
+			marslog(LOG_EROR,"Env variable MARS_GRIB_POSTPROC has been set to 0");
+			marslog(LOG_EROR,"and some field(s) need interpolation");
+			return POSTPROC_ERROR;
+		}
+
+		if((out != 0) && (mars.gridded_observations_postproc == 0))
+		{
+			marslog(LOG_EROR,"Gridded observations need interpolation. In order to force");
+			marslog(LOG_EROR,"interpolation, please, set MARS_GRIDDED_OBSERVATIONS_INTERP to 1");
+			return POSTPROC_ERROR;
+		}
+
+		if(out == 0)
+		{
+			pp[0].outlen = pp[1].outlen = pp[0].inlen;
+		}
+		else {
+			pp[0].outlen = pp[1].outlen = out;
+			ppdata.inter_cnt++;
+			ppdata.inter_cnt++;
+		}
+
+		if(pp[0].outlen > pp[0].buflen)
+		{
+			marslog(LOG_EROR,"INTVECT2 output is %d bytes",pp[0].outlen);
+			marslog(LOG_EXIT,"Buffer is only %d bytes",pp[0].buflen);
+			return BUF_TO_SMALL;
+		}
+
+		if(ret < 0)
+		{
+			marslog(LOG_EROR,"Vector interpolation failed (%d)",ret);
+			out = 0;
+			nbuffer = 0;
+			return ret;
+		}
+		else
+		{
+
+			if(ret)
+			{
+				marslog(LOG_EROR,"Vector interpolation failed (%d)",ret);
+				return ret;
+			}
+
+			/* Inform 2 buffers are ready */
+			*nbuffer = 2;
+
+			/* Release input buffers */
+			release_mem(pair[p].buffer);
+			pair[p].buffer = NULL;
+			pair[p].len    = 0;
+
+			release_mem(pair[q].buffer);
+			pair[q].buffer = NULL;
+			pair[q].len    = 0;
+		}
+	}
+	else
+	{
+		/* We don't have q. Keep p and wait for q */
+		*nbuffer = 0;
+		marslog(LOG_DBUG,"Vector parameter %d kept. Waiting for parameter %d",p,q);
+		ret = 0;
+	}
+
+	return ret;
+}
+
+
+static err grib_vector_postproc(ppbuffer_t *ppin, long *nbuffer)
+{
+	if(mars.can_do_vector_postproc)
+		return vector_postproc(ppin,nbuffer);
+
+	*nbuffer = 1;
+	return grib_scalar_postproc(ppin[0].buffer,ppin[0].inlen,&ppin[0].outlen);
+}
+
+static err grib_scalar_postproc(char *buffer,long inlen,long *outlen)
+{
+	long      ret   = 0;
+	static    char  *result = NULL;
+	static    long   length = 0;
+	long      size  = MAX(*outlen,ppestimate());
+
+	if(length < size)
+	{
+		if(result) release_mem(result);
+		length = size;
+		result = (char*)reserve_mem(length);
+	}
+
+	ret  = ppintf(buffer,inlen,result,&size,false);
+
+	/* If 0, no interpolation as been done.. */
+
+	if((size != 0) && (mars.grib_postproc == 0))
+	{
+		marslog(LOG_EROR,"Env variable MARS_GRIB_POSTPROC has been set to 0");
+		marslog(LOG_EROR,"and some field(s) need interpolation");
+		return POSTPROC_ERROR;
+	}
+
+	if((size != 0) && (mars.gridded_observations_postproc == 0))
+	{
+		marslog(LOG_EROR,"Gridded observations need interpolation. In order to force");
+		marslog(LOG_EROR,"interpolation, please, set MARS_GRIDDED_OBSERVATIONS_INTERP to 1");
+		return POSTPROC_ERROR;
+	}
+
+	if(size == 0)
+	{
+		size = *outlen = inlen;
+	}
+	else {
+		if(ret == 0)
+		{
+			if(*outlen < size)
+			{
+				*outlen = size;
+				return BUF_TO_SMALL;
+			}
+
+			*outlen = size;
+			ppdata.inter_cnt++;
+			memcpy(buffer,result,size);
+		}
+	}
+
+	if(ppdata.original_grib)
+	{
+		fortint len = size;
+		ret = original_grib(buffer,&len);
+		*outlen = len;
+	}
+
+	return ret;
+}
+
+static err grib_postproc(ppbuffer_t *pp, long *nbuffer)
+{
+	*nbuffer = 1;
+	return grib_scalar_postproc(pp[0].buffer,pp[0].inlen,&pp[0].outlen);
+}
+
+err makeuv(char *vo,char *d,long inlen,char *u,char *v,long *outlen)
+{
+	err e = NOERR;
+	fortint inwords  = inlen / sizeof(fortint);
+	fortint outwords = (*outlen) / sizeof(fortint);
+	size_t out = *outlen;
+
+	grib_handle *vo_h = NULL;
+	grib_handle *d_h = NULL;
+	vector_grib_handle* out_vector = NULL;
+	int grib_set_count = 0;
+	grib_values* grib_set = 0;
+	vo_h  = grib_handle_new_from_message(0,vo,inlen);
+	d_h = grib_handle_new_from_message(0,d,inlen);
+
+	marslog(LOG_DBUG,"-> MARS makeuv");
+	if(mars.grib_postproc == 0)
+	{
+		marslog(LOG_EROR,"Env variable MARS_GRIB_POSTPROC has been set to 0");
+		marslog(LOG_EROR,"and convertion to U/V requested");
+		return POSTPROC_ERROR;
+	}
+
+	if(!ppdata.quiet)
+	{
+		marslog(LOG_INFO,"Deriving U and V from vorticity and divergence");
+		ppdata.quiet = 1;
+	}
+
+
+	marslog(LOG_DBUG,"-> ECREGRID makeuv_grib");
+	out_vector = ecregrid_process_vector_grib_handle_to_grib_handle_grib_set(vo_h,d_h,ppdata.field_features,grib_set,grib_set_count,&e);
+	marslog(LOG_DBUG,"<- ECREGRID makeuv_grib returns %d, out_vector %x", e, out_vector);
+
+	if(e == NOERR)
+	{
+		ppdata.derive_uv += 2;
+		if(mars.debug)
+			grib_write_message(out_vector->one,"mars_outHandleU.grib","w");
+		if(out_vector->one){
+			e = grib_get_message_copy(out_vector->one,(void *)u,&out);
+			if(e != NOERR){
+				marslog(LOG_EROR,"Error getting U message");
+				return POSTPROC_ERROR;
+			}
+		}
+		else{
+			marslog(LOG_EROR,"Error getting U handle");
+			return POSTPROC_ERROR;
+		}
+		if(mars.debug)
+			grib_write_message(out_vector->two,"mars_outHandleV.grib","w");
+		if(out_vector->two){
+			e = grib_get_message_copy(out_vector->two,(void *)v,&out);
+			if(e != NOERR){
+				marslog(LOG_EROR,"Error getting V message");
+				return POSTPROC_ERROR;
+			}
+		}
+		else{
+			marslog(LOG_EROR,"Error getting V handle");
+			return POSTPROC_ERROR;
+		}
+	}
+	if(out_vector->one) grib_handle_delete(out_vector->one);
+	if(out_vector->two) grib_handle_delete(out_vector->two);
+	if(out_vector) FREE(out_vector);
+	
+	if(out >  *outlen)
+	{
+		marslog(LOG_EROR,"INTUV%s output is %d bytes",mars.use_intuvp?"P":"S",out);
+		marslog(LOG_EXIT,"Buffer is only %d bytes",*outlen);
+	}
+
+	*outlen = out;
+
+	/* Check if rounding to a multiple of 4 changes */
+	/* the actual size.                             */
+
+	if( *outlen > (inlen+sizeof(fortint)))
+	{
+		marslog(LOG_DBUG,"INTUV%s returns bigger field %d > %d",mars.use_intuvp?"P":"S",*outlen ,inlen);
+		/* return -3; */
+	}
+
+	marslog(LOG_DBUG,"<- MARS makeuv returns %d",e);
+	return e;
+}
+
+static err odb_postproc(ppbuffer_t *pp, long *nbuffer)
+{
+	*nbuffer = 1;
+	return odb_scalar_postproc(pp[0].buffer,pp[0].inlen,&pp[0].outlen);
+}
+
+static err odb_scalar_postproc(char *buffer,long inlen, long *outlen)
+{
+#if 0
+	/* */
+	marslog(LOG_DBUG,"in odb_scalar_postproc....inlen: %ld, outlen: %ld",inlen,*outlen);
+	marslog(LOG_DBUG,"in odb_scalar_postproc, filter %s",ppdata.odb_sql);
+	*outlen = inlen;
+	if(ppdata.odb_sql != NULL)
+	{
+		//marslog(LOG_INFO|LOG_ONCE, "Apply ODB filter '%s'", ppdata.odb_sql);
+		marslog(LOG_INFO, "Apply ODB filter '%s'", ppdata.odb_sql);
+
+		size_t filteredLength = 0;
+		odb_start();
+		marslog(LOG_INFO, "in odb_scalar_postproc, calling filter_in_place: inlen=%ld", inlen);
+		int rc = filter_in_place(buffer, inlen, &filteredLength, no_quotes(ppdata.odb_sql));
+		if (rc) return rc;
+		*outlen = filteredLength;
+	}
+#endif
+
+	return NOERR;
+}
+
+static err track_postproc(ppbuffer_t *pp, long *nbuffer)
+{
+	*nbuffer = 1;
+	return track_scalar_postproc(pp[0].buffer,pp[0].inlen,&pp[0].outlen);
+}
+
+static err track_scalar_postproc(char *buffer,long inlen,long *outlen)
+{
+	packed_key	key;
+	packed_key*	keyptr = &key;
+
+	char *p = buffer;
+	char *q = buffer;
+
+	unsigned long klength = 0;
+
+	*outlen = 0;
+
+
+	marslog(LOG_DBUG,"=> Enter track_postproc");
+	while(inlen>0)
+	{
+		int i;
+		int ok = 1;
+
+		/* Move to next BUFR */
+		while( (p[0]!='B' || p[1]!='U' || p[2]!='F' || p[3]!='R') && inlen>0)
+		{
+			p++;
+			inlen--;
+		}
+
+		if(inlen <= 0) break;
+
+		if (!get_packed_key(p,keyptr))
+		{
+			ok = 0;
+			set_key_length(&key,1);
+		}
+
+		/* Types */
+		if(ok && ppdata.type_cnt>0)
+		{
+			ok = 0;
+			for(i = 0;i<ppdata.type_cnt;i++)
+				if(ppdata.types[i] == KEY_SUBTYPE(keyptr))
+				{
+					ok = 1;
+					break;
+				}
+			marslog(LOG_DBUG,"=> subtype %d %s match",KEY_SUBTYPE(keyptr),(ok?"":"DONT"));
+		}
+
+		/* Ident ... */
+		if(ok && ppdata.ident_cnt > 0)
+		{
+			unsigned char *buf = (unsigned char *)KEY_IDENT(keyptr);
+			int ident = 0;
+			ok = 0;
+
+			for(i=0;i<3;i++)
+				ident = ident * 10 + (buf[i] - '0');
+
+			for(i = 0;i<ppdata.ident_cnt;i++)
+			{
+				marslog(LOG_DBUG,"=> ident %d: %d, (KEY_IDENT %s => %d)", i,ppdata.idents[i], 
+														  KEY_IDENT(keyptr),ident);
+				if(ppdata.idents[i] == ident)
+				{
+					ok = 1;
+					marslog(LOG_DBUG,"      MATCH");
+					break;
+				}
+				else
+					marslog(LOG_DBUG," DONT MATCH");
+					
+			}
+		}
+
+		/* Time */
+		if(ok && ppdata.interval_cnt > 0)
+		{
+			double obs_date;
+
+			ok = 0;
+			obs_date = key_2_datetime(keyptr);
+			for (i = 0; i < ppdata.interval_cnt; i++)
+			{
+				if (obs_date >= ppdata.intervals[i].begin &&
+					obs_date <= ppdata.intervals[i].end)
+				{
+					ok = 1;
+					break;
+				}
+			}
+			marslog(LOG_DBUG,"=> obs_date_time %lf %s match",obs_date,(ok?"":"DONT"));
+		}
+
+		/* Check for area */
+		if(ok && ppdata.area_cnt == 4)
+		{
+			if(KEY_LATITUDE1(keyptr) > ppdata.north ||
+				KEY_LATITUDE1(keyptr) < ppdata.south)
+				ok = 0;
+			if(ppdata.west <  ppdata.east)
+			{
+				if(KEY_LONGITUDE1(keyptr) < ppdata.west ||
+					KEY_LONGITUDE1(keyptr) > ppdata.east)
+					ok = 0;
+			}
+			else
+			{
+				if(!(KEY_LONGITUDE1(keyptr) > ppdata.west ||
+					KEY_LONGITUDE1(keyptr) < ppdata.east))
+					ok = 0;
+
+			}
+			marslog(LOG_DBUG,"=> lat: %ld, lon: %lf %s match",KEY_LATITUDE1(keyptr),KEY_LONGITUDE1(keyptr),(ok?"":"DONT"));
+		}
+
+		klength = key_length(p,keyptr);
+		if(ok)
+		{
+			if(p != q) memcpy(q,p,klength);
+			q      += klength;
+			(*outlen) += klength;
+			ppdata.out_count++;
+		}
+
+		p     += klength;
+		inlen -= klength;
+		ppdata.in_count++;
+	}
+	return 0;
+
+}
+
+
+static err obs_postproc(ppbuffer_t *pp, long *nbuffer)
+{
+	*nbuffer = 1;
+	return obs_scalar_postproc(pp[0].buffer,pp[0].inlen,&pp[0].outlen);
+}
+
+static err obs_scalar_postproc(char *buffer,long inlen,long *outlen)
+{
+	int    		issat;
+	packed_key	key;
+	packed_key*	keyptr = &key;
+
+	char *p = buffer;
+	char *q = buffer;
+
+	unsigned long klength = 0;
+
+	*outlen = 0;
+
+
+	while(inlen>0)
+	{
+		int i;
+		int ok = 1;
+		unsigned int keylength = 0;
+
+		/* Move to next BUFR */
+		while( (p[0]!='B' || p[1]!='U' || p[2]!='F' || p[3]!='R') && inlen>0)
+		{
+			p++;
+			inlen--;
+		}
+
+		if(inlen <= 0) break;
+
+		if (!get_packed_key(p,keyptr))
+		{
+			ok = 0;
+			set_key_length(&key,1);
+		}
+
+		issat = (KEY_TYPE(keyptr) == 2) || 
+				(KEY_TYPE(keyptr) == 3) || 
+				(KEY_TYPE(keyptr) == 12);
+
+		/* WMO block ... */
+		if(ok && ppdata.block_cnt>0)
+		{
+			int wmo   = (KEY_IDENT(keyptr)[0] - '0')*10 
+						+ (KEY_IDENT(keyptr)[1] - '0');
+			ok = 0;
+			if(!issat)
+			{
+				for(i = 0;i<ppdata.block_cnt;i++)
+					if(ppdata.blocks[i] == wmo)
+					{
+						ok = 1;
+						break;
+					}
+			}
+		}
+
+		/* Types */
+		if(ok && ppdata.type_cnt>0)
+		{
+			ok = 0;
+			for(i = 0;i<ppdata.type_cnt;i++)
+				if(ppdata.types[i] == KEY_SUBTYPE(keyptr))
+				{
+					ok = 1;
+					break;
+				}
+		}
+
+		/* Ident ... */
+		if(ok && ppdata.ident_cnt > 0)
+		{
+			ok = 0;
+			if(issat)
+			{
+				int ident = bufr_sat_id(p,keyptr);
+
+				for(i = 0;i<ppdata.ident_cnt;i++)
+					if(ppdata.idents[i] == ident)
+					{
+						ok = 1;
+						break;
+					}
+			}
+			else
+			{
+				int ident = 0;
+				for(i=0;i<5;i++)
+					ident = 10*ident + (KEY_IDENT(keyptr)[i]-'0');
+
+				for(i = 0;i<ppdata.ident_cnt;i++)
+					if(ppdata.idents[i] == ident)
+					{
+						ok = 1;
+						break;
+					}
+			}
+		}
+
+		/* time . Note that time is irrelevant for SSMI (126) data */
+		if(ok && ppdata.interval_cnt > 0 && 
+		   KEY_SUBTYPE(keyptr)!= 126 &&
+		   !ppdata.is_bufrfile)
+		{
+			double obs_date;
+
+			ok = 0;
+			obs_date = key_2_datetime(keyptr);
+			for (i = 0; i < ppdata.interval_cnt; i++)
+			{
+				if (obs_date >= ppdata.intervals[i].begin &&
+					obs_date <= ppdata.intervals[i].end)
+				{
+					ok = 1;
+					break;
+				}
+			}
+		}
+
+		/* Check for area */
+		if(ok && ppdata.area_cnt == 4)
+		{
+			if(issat)
+			{
+				if(KEY_LATITUDE1(keyptr) > ppdata.north ||
+				    KEY_LATITUDE2(keyptr) < ppdata.south)
+					ok = 0;
+				if((KEY_LONGITUDE1(keyptr) < ppdata.west ||
+				    KEY_LONGITUDE2(keyptr) > ppdata.east) &&
+					!(ppdata.west == ppdata.east))
+					ok = 0;
+			}
+			else {
+				if(KEY_LATITUDE1(keyptr) > ppdata.north ||
+				    KEY_LATITUDE1(keyptr) < ppdata.south)
+					ok = 0;
+				if(ppdata.west <  ppdata.east)
+				{
+					if(KEY_LONGITUDE1(keyptr) < ppdata.west ||
+						KEY_LONGITUDE1(keyptr) > ppdata.east)
+						ok = 0;
+				}
+				else
+				{
+					if(!(KEY_LONGITUDE1(keyptr) > ppdata.west ||
+						KEY_LONGITUDE1(keyptr) < ppdata.east))
+						ok = 0;
+
+				}
+#if 0
+					if(ok)
+					{
+					marslog(LOG_INFO,"longitude: %d, west: %d, east: %d ",
+							KEY_LONGITUDE1(keyptr),
+							ppdata.west,
+							ppdata.east);
+					}
+#endif
+			}
+		}
+
+		if(ok && issat && (ppdata.instrument_cnt > 0))
+		{
+#if defined(BUFR_FILTER)
+			fortint n_instr = ppdata.instrument_cnt;
+			fortint found   = 0;
+			fortint e       = 0;
+			timer *filter_instruments = get_timer("Filter instruments",NULL,true);
+			fortint orig_len  = inlen;
+			char    *orig_buf = p;
+
+			timer_start(filter_instruments);
+			mbufr_mars_filter_(&n_instr,ppdata.instruments,&orig_len,orig_buf,&found,&e);
+			timer_stop(filter_instruments,0);
+			if(e != 0)
+				marslog(LOG_WARN,"Error %d while filtering instruments on message %d",e,ppdata.in_count);
+			else
+				ok = found;
+#else
+			marslog(LOG_WARN,"Filter by instrument not active");
+#endif
+		}
+
+#ifdef OBSOLETE
+		if(ok && ppdata.no_duplicates)
+		{
+			if(add_key(&ppdata.top,(char*)&key))
+			{
+				ppdata.dup_count++;
+				ok = 0;
+			}
+		}
+#endif
+
+
+#ifdef ECMWF
+		if(ok && mars.restriction)
+		{
+			if(restricted(keyptr))
+			{
+				ok = 0;
+				ppdata.res_count++;
+			}
+		}
+#endif
+
+		klength = key_length(p,keyptr);
+
+		if(klength <= 4 || klength > inlen ||
+			p[klength-4] != '7' ||
+			p[klength-3] != '7' ||
+			p[klength-2] != '7' ||
+			p[klength-1] != '7'
+		)
+		{
+			/* Some obs are wrong... june in 1990 */
+			unsigned char *s = (unsigned char*)(p + 4); /* skip BUFR */
+			int len = 8;
+			int nsec = 4;
+
+
+			/* skip section 0 , check for BUFR version */
+			char* sec1_start = p;
+			if((unsigned char)sec1_start[7]>1) sec1_start += 8;
+			else sec1_start += 4;
+			if(SEC1_FLAGS(sec1_start)== 0)
+			{
+				marslog(LOG_WARN,"Report %d has no key but was included",
+					ppdata.in_count+1);
+				ok = 1;
+				nsec = 3;
+			}
+
+			for(i=0;i< nsec && len <= inlen ;i++)
+			{
+				int sec = (s[0] << 16) + (s[1] << 8) + s[2]; 
+				len += sec; 
+				s   += sec;
+			}
+			ppdata.bad_count++;
+
+			set_key_length(&key,len);
+			
+			klength = key_length(p,keyptr);
+			if (SEC1_FLAGS(p)!= 0)
+			{
+				if(len <= 4 || len > inlen ||
+				p[klength-4] != '7' ||
+				p[klength-3] != '7' ||
+				p[klength-2] != '7' ||
+				p[klength-1] != '7')
+				{
+					ok = 0;
+					set_key_length(&key,sizeof(long));
+					marslog(LOG_EROR,"Bad report found at position %d, skipped",
+						ppdata.in_count+1);
+				}
+			}
+
+		}
+
+		keylength  = key_length(p,keyptr);
+
+		set_key_length(&key,((keylength + sizeof(long)-1)/sizeof(long))*sizeof(long));
+
+		if( ok && keylength > inlen)
+		{
+			ok = 0;
+			set_key_length(&key,sizeof(long));
+			marslog(LOG_EROR,"Report to large found at position %d, skipped",
+				ppdata.in_count+1);
+		}
+
+		klength = key_length(p,keyptr);
+		if(ok)
+		{
+			if(p != q) memcpy(q,p,klength);
+			q      += klength;
+			(*outlen) += klength;
+			ppdata.out_count++;
+		}
+
+		p     += klength;
+		inlen -= klength;
+		ppdata.in_count++;
+	}
+	return 0;
+}
+
+/* Initialise post-processing .... */
+
+static void pperror(char *msg)
+{
+	marslog(LOG_WARN|LOG_ONCE,"%s",msg);
+}
+
+long ppestimate()
+{
+	return ppdata.estimate;
+}
+
+err ppinit(const request *r, postproc *proc)
+{
+	fortfloat array[4];
+	fortint   n = 0;
+	err       ret;
+	int      i;
+	const char *p;
+	const char *mars_postproc = getenv("MARS_POSTPROCESSING");
+	int  ecregrid_error = 0;
+
+
+	if(mars_postproc == NULL) 
+		mars_postproc = get_value(r,"_POSTPROCESSING",0);
+
+	*proc = no_postproc;
+
+	if(ppdata.busy)
+	{
+		marslog(LOG_EROR,"Post-processing pacake already opened");
+		return -2;
+	}
+
+	/* intlogs(pperror); */
+
+	/* Reset */
+	n = 1;
+	/* TRACE(ibasini_(&n)); */
+	n = 0;
+
+	ppdata.derive_uv = 0;
+	ppdata.busy = 1;
+	ppdata.inter_cnt = 
+	ppdata.in_count = ppdata.out_count = ppdata.bad_count =
+	    ppdata.res_count = 0;
+
+	pptimer = get_timer("Post-processing","postprocessing",false);
+	memcpytimer = get_timer("Memory copy",NULL,false);
+
+#ifdef OBSOLETE
+	ppdata.dup_count = 0;
+#endif
+
+	if(p = get_value(r,"GRIB",0))
+	{
+		ppdata.original_grib = EQ(p,"ORIGINAL");
+	}
+
+	if(mars_postproc && !(atol(mars_postproc)))
+	{
+		*proc = no_postproc;
+	} 
+	else if(fetch(r))
+	{
+		*proc = no_postproc;
+	}
+	else if (feedback(r) || bias(r))
+	{
+		*proc = no_postproc;
+	}
+	else if (is_netcdf(r))
+	{
+		*proc = no_postproc;
+	}
+	else if (is_odb(r))
+	{
+#ifdef ODB_SUPPORT
+		/* Filter */
+		const char *filter = get_value(r, "FILTER", 0);
+		ppdata.odb_sql = NULL;
+		if(filter)
+			ppdata.odb_sql = strcache(filter);
+
+		marslog(LOG_DBUG,"filter is: %s",ppdata.odb_sql);
+		*proc = odb_postproc;
+#else
+		marslog(LOG_EROR,"This MARS client doesn't support ODB");
+		marslog(LOG_EROR,"Please, contact the MARS team");
+		*proc = no_postproc;
+#endif
+
+	}
+	else if (track(r))
+	{
+		long time_count;
+		long date_count;
+
+		/* Ident */
+
+		if(ppdata.idents) FREE(ppdata.idents);
+
+		if(ppdata.ident_cnt = count_values(r,"IDENT"))
+			ppdata.idents = NEW_ARRAY(int,ppdata.ident_cnt);
+
+		for(i = 0;i<ppdata.ident_cnt;i++)
+		{
+			const char *p = no_quotes(get_value(r,"IDENT",i));
+			int ident;
+			int n = 0;
+
+			if(p) n = strlen(p);
+
+			/* Tropical cyclones have a alph num ident */
+			char buf[8];
+			int j;
+
+			ident = 0;
+			sprintf(buf,"%s",p);
+			for(j=0;j<n;j++)
+			{
+				if(islower(buf[j])) buf[j] = toupper(buf[j]);
+				ident = ident * 10 + (buf[j] - '0');
+			}
+
+			ppdata.idents[i] = ident;
+			marslog(LOG_DBUG,"Requested ident %d: %s [%s]. Internal representation: %d",i,p,buf,ident);
+		}
+
+		/* Types */
+
+		if(ppdata.types) FREE(ppdata.types);
+
+		if(ppdata.type_cnt = count_values(r,"OBSTYPE"))
+		{
+			int zero = 0;
+			ppdata.types = NEW_ARRAY(int,ppdata.type_cnt);
+			for(i = 0;i<ppdata.type_cnt;i++)
+			{
+				ppdata.types[i] = atoi(get_value(r,"OBSTYPE",i));
+				if(ppdata.types[i] == 0) zero++;
+			}
+
+			if(zero > 0 && ppdata.type_cnt != zero)
+			{
+				marslog(LOG_WARN,
+				    "Cannot mix types and subtypes when retrieving tracks");
+				marslog(LOG_WARN, "Only corresponding types will be returned");
+			}
+
+			if(zero) ppdata.type_cnt = 0;
+		}
+
+		/* Time  */
+
+		if(ppdata.intervals) 
+			FREE(ppdata.intervals);
+
+		time_count =  count_values(r,"TIME");
+		date_count =  count_values(r,"DATE");
+		ppdata.interval_cnt = time_count * date_count;	
+
+		ppdata.intervals = NEW_ARRAY(time_interval, ppdata.interval_cnt);
+		for (i = 0; i < date_count; i++)
+		{
+			int j;
+			long date = get_julian_from_request(r,i);
+			for (j = 0; j < time_count; j++)
+			{
+				long time = atol(get_value(r,"TIME",j));
+				double dt = date_time_2_datetime(date,
+											time / 100,
+											time % 100,
+											0);
+				ppdata.intervals[i*time_count+j].begin = dt;
+				ppdata.intervals[i*time_count+j].end   = dt;
+			}
+		}
+
+		/* Area ... */
+		ppdata.area_cnt  = count_values(r,"AREA");
+		if(ppdata.area_cnt == 4)
+		{
+			ppdata.north = atof(get_value(r,"_AREA_N",0))*100000.0+9000000.0;
+			ppdata.south = atof(get_value(r,"_AREA_S",0))*100000.0+9000000.0;
+			ppdata.east  = atof(get_value(r,"_AREA_E",0))*100000.0+18000000.0;
+			ppdata.west  = atof(get_value(r,"_AREA_W",0))*100000.0+18000000.0;
+			ppdata.east %= 36000000;
+			ppdata.west %= 36000000;
+		}
+
+		*proc = track_postproc;
+	}
+	else if(observation(r))
+	{
+		long time_count;
+		long date_count;
+		const char *p;
+
+		ppdata.is_bufrfile = feedback(r) || bias(r);
+
+		/* Ident */
+
+		if(ppdata.idents) FREE(ppdata.idents);
+
+		if(ppdata.ident_cnt = count_values(r,"IDENT"))
+			ppdata.idents = NEW_ARRAY(int,ppdata.ident_cnt);
+
+		for(i = 0;i<ppdata.ident_cnt;i++)
+		{
+			const char *p = get_value(r,"IDENT",i);
+			int ident;
+
+			if(is_number(p))
+				ident = atoi(p);
+			else {
+				/* Ships have a alph num ident */
+				char buf[8];
+				int j;
+
+				ident = 0;
+				sprintf(buf,"%-5s",p);
+				for(j=0;j<5;j++)
+				{
+					if(islower(buf[j])) buf[j] = toupper(buf[j]);
+					ident = ident * 10 + (buf[j] - '0');
+				}
+
+			}
+
+			ppdata.idents[i] = ident;
+		}
+
+		/* Instruments */
+		if(ppdata.instruments) FREE(ppdata.instruments);
+
+		if(ppdata.instrument_cnt = count_values(r,"INSTRUMENT"))
+			ppdata.instruments = NEW_ARRAY(fortint,ppdata.instrument_cnt);
+
+		for(i = 0;i<ppdata.instrument_cnt;i++)
+			ppdata.instruments[i] = atoi(get_value(r,"INSTRUMENT",i));
+
+		/* Types */
+
+		if(ppdata.types) FREE(ppdata.types);
+
+		if(ppdata.type_cnt = count_values(r,"OBSTYPE"))
+		{
+			int zero = 0;
+			ppdata.types = NEW_ARRAY(int,ppdata.type_cnt);
+			for(i = 0;i<ppdata.type_cnt;i++)
+			{
+				ppdata.types[i] = atoi(get_value(r,"OBSTYPE",i));
+				if(ppdata.types[i] == 0) zero++;
+			}
+
+			if(zero > 0 && ppdata.type_cnt != zero)
+			{
+				marslog(LOG_WARN,
+				    "Cannot mix types and subtypes when retrieving observations");
+				marslog(LOG_WARN, "Only corresponding types will be returned");
+			}
+
+			if(zero) ppdata.type_cnt = 0;
+		}
+
+		/* WMO block */
+
+		if(ppdata.blocks) FREE(ppdata.blocks);
+
+		if(ppdata.block_cnt = count_values(r,"BLOCK"))
+			ppdata.blocks = NEW_ARRAY(int,ppdata.block_cnt);
+
+		for(i = 0;i<ppdata.block_cnt;i++)
+			ppdata.blocks[i] = atoi(get_value(r,"BLOCK",i));
+
+
+		/* Time  */
+
+		if(ppdata.intervals) 
+			FREE(ppdata.intervals);
+
+		time_count =  count_values(r,"TIME");
+		date_count =  count_values(r,"DATE");
+		ppdata.interval_cnt = time_count * date_count;	
+
+		/* if the time/to/time is not expanded in this version */
+		if (time_count == 3 && (strcmp(get_value(r,"TIME",1),"TO") == 0))
+		{
+			long time1 = atoi(get_value(r,"TIME",0));
+			long time2 = atoi(get_value(r,"TIME",2));
+			ppdata.intervals = NEW_ARRAY(time_interval,
+									date_count);
+			for (i = 0; i < date_count; i++)
+			{
+				long date = get_julian_from_request(r,i);
+				ppdata.intervals[i].begin = 
+						date_time_2_datetime(date,time1 / 100,
+											time1 % 100,
+											0);
+				ppdata.intervals[i].end = 
+						date_time_2_datetime(date,time2 / 100,
+											time2 % 100,
+											59);
+			}
+			ppdata.interval_cnt = date_count;
+		}
+		else
+		{
+			long range = 0;
+			if (count_values(r,"RANGE") != 0)
+				range = atol(get_value(r,"RANGE",0));
+			ppdata.intervals = NEW_ARRAY(time_interval,
+							ppdata.interval_cnt);
+			for (i = 0; i < date_count; i++)
+			{
+				int j;
+				long date = get_julian_from_request(r,i);
+				for (j = 0; j < time_count; j++)
+				{
+					long time = atol(get_value(r,"TIME",j));
+					double dt = date_time_2_datetime(date,
+											time / 100,
+											time % 100,
+											0);
+					init_time_interval(&ppdata.intervals[i*time_count+j],
+										dt,range * 60 + 59);
+				}
+			}
+		}
+
+		/* Area ... */
+		ppdata.area_cnt  = count_values(r,"AREA");
+		if(ppdata.area_cnt == 4)
+		{
+			ppdata.north = atof(get_value(r,"_AREA_N",0))*100000.0+9000000.0;
+			ppdata.south = atof(get_value(r,"_AREA_S",0))*100000.0+9000000.0;
+			ppdata.east  = atof(get_value(r,"_AREA_E",0))*100000.0+18000000.0;
+			ppdata.west  = atof(get_value(r,"_AREA_W",0))*100000.0+18000000.0;
+			ppdata.east %= 36000000;
+			ppdata.west %= 36000000;
+		}
+
+#ifdef OBSOLETE
+		p = get_value(r,"DUPLICATES",0);
+		ppdata.no_duplicates = p && (*p == 'R');
+#endif
+
+		/* ppinfo(); */
+
+		*proc = obs_postproc;
+	}
+	else if(image(r) || simulated_image(r))
+		*proc = no_postproc;
+	else if(gridded_observations(r) && !mars.gridded_observations_postproc)
+		*proc = no_postproc;
+	else {
+		/* Check for vector parameters */
+		boolean vector = vector_parameter_requested(r);
+		*proc = grib_postproc;
+		ppdata.estimate = 0;
+
+		if(!gridded_observations(r))
+			mars.gridded_observations_postproc = 1;
+
+	   	if(ppdata.grib_features) FREE(ppdata.grib_features);
+ 	   /* 10 is just gess  we have to find
+  	    so far just 3 :  accuracy, packiging method, grib edition 1 or 2  */
+		ppdata.grib_features       = NEW_ARRAY(grib_values,10);
+		ppdata.grib_features_cnt   = 0;
+
+		if(ppdata.field_features) ecregrid_field_description_destroy(ppdata.field_features);
+		ppdata.field_features   = ecregrid_get_field_description_general(&ecregrid_error) ;
+		if(ecregrid_error){
+			marslog(LOG_EROR,"ecRegrid initialisation failed (%d)",ecregrid_error);
+			ppdone();
+			return ecregrid_error;
+		}
+
+		/* set grib edition */
+		ppdata.edition = 0;
+		if(p = get_value(r,"FORMAT",0))
+		{
+			if(EQ(p,"GRIB1")) ppdata.edition = 1;	
+			if(EQ(p,"GRIB2")) ppdata.edition = 2;	
+				ppdata.grib_features[ppdata.grib_features_cnt].name       = "editionNumber";
+				ppdata.grib_features[ppdata.grib_features_cnt].type       = GRIB_TYPE_LONG;
+				ppdata.grib_features[ppdata.grib_features_cnt].long_value = ppdata.edition;
+				ppdata.grib_features_cnt++;
+		}
+
+		/* set grid */
+
+		if(get_value(r,"_GRID_EW",0))
+		{
+			array[0] = atof(get_value(r,"_GRID_EW",0));
+			array[1] = atof(get_value(r,"_GRID_NS",0));
+			/* ret      = ppout("grid",n,array,0); */
+			ret      =  ecregrid_set_increments(ppdata.field_features,array[0],array[1]);
+			if(ret) return ret;
+			ppdata.estimate = (360.0/array[0] + 1) * (180.0 / array[1] + 1);
+		}
+
+		/* set area */
+
+		if(get_value(r,"_AREA_N",0))
+		{
+			array[0] = atof(get_value(r,"_AREA_N",0));
+			array[1] = atof(get_value(r,"_AREA_W",0));
+			array[2] = atof(get_value(r,"_AREA_S",0));
+			array[3] = atof(get_value(r,"_AREA_E",0));
+
+			/* ret = ppout("area",n,array,0); */
+			ret      =  ecregrid_set_area(ppdata.field_features,array[0],array[1],array[2],array[3]);
+			if(ret) return ret;
+		}
+
+		/* set frame */
+		if(get_value(r,"FRAME",0))
+		{
+			n = atoi(get_value(r,"FRAME",0));
+			ret      =  ecregrid_set_frame_number(ppdata.field_features,n);
+			if(ret) return ret;
+		}
+
+		/* set bitmap */
+		if(get_value(r,"BITMAP",0))
+		{
+			const char *bitmap = no_quotes(get_value(r,"BITMAP",0));
+			marslog(LOG_DBUG,"bitmap file is: '%s'",bitmap);
+			/* ret  = ppout("bitmap",n,array,bitmap); */
+			ret      =  ecregrid_set_bitmap_file(ppdata.field_features,bitmap);
+			if(ret) return ret;
+		}
+
+		/* gaussian */
+
+		if(get_value(r,"_GAUSSIAN",0))
+		{
+			long guess;
+			const char *gaussian = "GAUSSIAN";
+			const char *g = get_value(r,"GAUSSIAN",0);
+			const char *oldgauss = getenv("MARS_REGULAR_GRID");
+			int ecregrid_gauss = 0;
+
+			if(g != NULL)
+			{
+				gaussian = g;
+			}
+
+			n    = atoi(get_value(r,"_GAUSSIAN",0));
+
+			if(oldgauss && atoi(oldgauss))
+			{
+				int i = 0;
+				gaussian  = "REGULAR";
+				marslog(LOG_WARN,"Please, specify new keyword ");
+				marslog(LOG_WARN,"GAUSSIAN=REGULAR in your request");
+			}
+
+			marslog(LOG_DBUG,"Setting grid_type '%s'",lowcase(gaussian));
+			ret = ecregrid_set_grid_type(ppdata.field_features,lowcase(gaussian));
+			if(ret) 
+			{
+				marslog(LOG_EROR,"Error setting grid_type '%s'",lowcase(gaussian));
+				return ret;
+			}
+			ret = ecregrid_set_gaussian_number(ppdata.field_features,n);
+			if(ret) return ret;
+			guess = n * n * 8;
+			if( guess > ppdata.estimate ) ppdata.estimate = guess;
+		}
+
+		/* Interpolation */
+		
+		if(get_value(r,"INTERPOLATION",0))
+		{
+			char *method  = lowcase(get_value(r,"INTERPOLATION",0));
+			char *p = method;
+			while(*p)
+			{
+				if(*p == ' ') *p = '-';
+				p++;
+			}
+			marslog(LOG_DBUG,"Setting interpolation method '%s'",method);
+			ret  =  ecregrid_set_interpolation_method(ppdata.field_features,method);
+			if(ret) return ret;
+		}
+
+		/* Auto Resolution */
+
+		if(get_value(r,"RESOL",0))
+		{
+			const char *trunc = get_value(r,"RESOL",0);
+			if(trunc)
+			{
+				if(EQ(trunc,"AUTO"))
+				{
+					marslog(LOG_DBUG,"Using Auto-Resolution");
+					ret = ecregrid_set_auresol(ppdata.field_features,"on");
+					if(ret) 
+						marslog(LOG_EROR,"Automatic Resolution error %d",ret);
+				}
+				if(trunc[0] == 'N')
+				{
+					n    = atoi(trunc+1);
+					marslog(LOG_DBUG,"Using GG double interpolation to %d",n);
+					/* ret = ppout("intermediate_gaussian",n,array,0); */
+					marslog(LOG_EROR,"Intermediate gaussian double interpolation not supported in ECREGRID yet");
+					if(ret) marslog(LOG_EROR,"Double interpolation error %d",ret);
+				}
+			}
+
+		}
+
+		/* truncation */
+
+		if(get_value(r,"_TRUNCATION",0))
+		{
+			long guess;
+			const char *trunc = get_value(r,"_TRUNCATION",0);
+
+			n  = atoi(trunc);
+			ret  =  ecregrid_set_truncation(ppdata.field_features,n);
+			 /* Sinisa why ppin ? */	
+			/* ret     = ppin("truncation",n,array,0);  */
+
+			marslog(LOG_DBUG,"Setting truncation to %d",n);
+			guess = (n+1)*(n+4);
+			if( guess > ppdata.estimate ) ppdata.estimate = guess;
+		}
+
+		/* style */
+		if(get_value(r,"STYLE",0))
+		{
+			ret = ppstyle(r);
+			if(ret) return ret;
+		}
+
+		/* rotation */
+		if(get_value(r,"_ROTATION_LAT",0) || get_value(r,"_ROTATION_LON",0))
+		{
+			ret = ecregrid_set_south_pole(ppdata.field_features, atof(get_value(r,"_ROTATION_LAT",0)), atof(get_value(r,"_ROTATION_LON",0)));
+			/* ret = pprotation(r); */
+			if(ret) return ret;
+
+			if(vector)
+				*proc = grib_vector_postproc;
+
+		}
+
+		/* Call vector always */
+		*proc = grib_vector_postproc;
+
+		/* accuracy */
+
+		if(mars.accuracy > 0)
+		{
+			marslog(LOG_DBUG,"ppout: Using %d bit packing",mars.accuracy);
+			ppdata.grib_features[ppdata.grib_features_cnt].name       = "numberOfBitsContainingEachPackedValue";
+			ppdata.grib_features[ppdata.grib_features_cnt].type       = GRIB_TYPE_LONG;
+			ppdata.grib_features[ppdata.grib_features_cnt].long_value = mars.accuracy;
+			ppdata.grib_features_cnt++;
+		}
+
+#if 0
+		/* land-sea mask */
+		if(get_value(r,"LSM",0))
+		{
+			const char *lsm = no_quotes(get_value(r,"LSM",0));
+			marslog(LOG_DBUG,"Using LSM from '%s'",lsm);
+			ret  = ppin("islscp",n,array,lsm);
+			if(ret) return ret;
+		}
+		else
+		{
+			 marslog(LOG_DBUG,"Setting LSM to 'off'");	
+			 ret  = ppin("islscp",n,array,"off");
+			 if(ret) return ret;
+		}
+#endif
+
+		/* packing */
+		if(get_value(r,"PACKING",0))
+		{
+			const char *packing = no_quotes(get_value(r,"PACKING",0));
+			marslog(LOG_DBUG,"Packing set to '%s'",packing);
+			ppdata.grib_features[ppdata.grib_features_cnt].name         = "typeOfPacking";
+			ppdata.grib_features[ppdata.grib_features_cnt].type         = GRIB_TYPE_STRING;
+			ppdata.grib_features[ppdata.grib_features_cnt].string_value = packing;
+			ppdata.grib_features_cnt++;
+		}
+
+		/* specification */
+		if(get_value(r,"SPECIFICATION",0)) 
+		{
+			const char *spec = get_value(r,"SPECIFICATION",0);
+			marslog(LOG_DBUG,"Specification set to '%s'",spec);
+			n = atoi(spec);
+			/* ret  = ppout("specification",n,array,0); */
+			ret = 1;
+			if(ret) return ret;
+		}
+
+		/* ppdata.estimate contains the number of point, we need 
+		the header and sizeof(fortint) bytes per value */
+
+		if(ppdata.estimate)
+			ppdata.estimate = ppdata.estimate * sizeof(fortint) + 4096;
+
+	}
+	return 0;
+}
+
+err ppdone(void)
+{
+	if(!ppdata.busy) marslog(LOG_EROR,"Post-processing package already closed");
+	ppdata.busy  = 0;
+	ppdata.quiet = 0;
+#ifdef OBSOLETE
+	delete_node(ppdata.top);
+	ppdata.top   = 0;
+	if(ppdata.dup_count)
+		marslog(LOG_INFO,"%d duplicates reports",ppdata.dup_count);
+#endif
+	if(ppdata.res_count)
+		marslog(LOG_DBUG,"%d restricted reports found",ppdata.res_count);
+
+	if(ppdata.inter_cnt)
+	{
+		char host[80];
+		gethostname(host,sizeof(host));
+		marslog(LOG_INFO,"%d field%s ha%s been interpolated on '%s'",
+			ppdata.inter_cnt,
+				ppdata.inter_cnt==1?"":"s",
+				ppdata.inter_cnt==1?"s":"ve",
+				host);
+	}
+	/* ecRegrid  */
+	if(ppdata.grib_features) FREE(ppdata.grib_features);
+	if(ppdata.field_features) ecregrid_field_description_destroy(ppdata.field_features);
+	ppdata.field_features=NULL;
+	log_statistics("interpolated","%d",ppdata.inter_cnt);
+		
+	return 0;
+}
+
+err ppcount(int *in,int *out)
+{
+	if(ppdata.bad_count)
+	{
+		marslog(LOG_WARN,"%d report(s) have a wrong length in their key.",
+			ppdata.bad_count);
+		marslog(LOG_WARN,"Please inform Mars group");
+	}
+	*in  = ppdata.in_count;
+	*out = ppdata.out_count;
+	return 0;
+}
+
+/*========================================================================*/
+/*========================================================================*/
+/*========================================================================*/
+
+fieldset *pp_fieldset(const char *file,request *filter)
+{
+	fieldset *v = read_fieldset(file,filter);
+	fieldset *w = NULL;
+	err e = 0;
+	int i;
+	postproc proc;
+
+
+	if(!v) return NULL;
+	if(e = ppinit(filter,&proc)) {
+		marslog(LOG_EROR,"Interpolation initialisation failed (%d)",e);
+		ppdone();
+		return NULL;
+	}
+
+
+	w = new_fieldset(v->count);
+
+	for(i=0;i<v->count && e == 0;i++)
+	{
+		field *g   = get_field(v,i,packed_mem);
+		/* On Rotation, output header can be bigger than 
+		   the input header. Give a bit of space */
+		long len   = MAX(g->length+5*sizeof(fortint),ppestimate());
+		const void *ibuff = NULL;
+		size_t ibuff_len;
+		char *obuff = (char*)reserve_mem(len);
+		size_t ilen = len;
+		
+		grib_get_message(g->handle,&ibuff,&ibuff_len);
+		e =  ppintf((char *)ibuff,g->length,obuff,&len,true);
+
+		release_field(g);
+
+		if(e == 0)
+		{
+			g = w->fields[i] = new_field();
+			g->handle = grib_handle_new_from_message_copy(0,obuff, len);
+			g->shape  = packed_mem;
+			g->length = len;
+			g->refcnt++;
+			save_fieldset(w);
+		}
+
+		release_mem(obuff);
+	}
+
+	ppdone();
+
+	return e == 0?w:NULL;
+}
diff --git a/src/libMars-ecregrid/proto.h b/src/libMars-ecregrid/proto.h
new file mode 100755
index 0000000..c74e951
--- /dev/null
+++ b/src/libMars-ecregrid/proto.h
@@ -0,0 +1,724 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+
+/* tcp.c */
+void socket_buffers(int s);
+int writetcp(void *p, void *buf, u_int len);
+boolean tcp_read_ready(int soc);
+int readtcp(void *p, void *buf, u_int len);
+boolean is_hostname(const char *host);
+void traceroute(struct sockaddr_in *from);
+int call_server(const char *host, int port, int retries);
+int socket_close(int s);
+int socket_file_close(FILE *f);
+
+/* server.c */
+struct sockaddr_in *addr_of(int soc);
+int tcp_server(int port);
+const char *host_of(struct sockaddr_in *from);
+int port_of(struct sockaddr_in *from);
+void print_address(const char *name, struct sockaddr_in *from);
+void server_run(int port, taskproc task, void *data);
+int server_mode(int *port, char *address);
+
+/* udp.c */
+int readudp(void *p, void *buf, u_int len);
+int writeudp(void *p, void *buf, u_int len);
+int udp_socket(int port);
+udpinfo *udp_server(int port);
+udpinfo *udp_call(const char *host, int port);
+void udp_free(udpinfo *info);
+
+/* service.c */
+err encode_request(const request *r, XDR *x);
+request *decode_request(XDR *x);
+void destroy_service(svc *s);
+err svc_connect(svc *s);
+svc *create_service(const char *name);
+void set_svc_err(svcid *id, err e);
+err get_svc_err(svcid *id);
+void set_svc_ref(svcid *id, long r);
+long get_svc_ref(svcid *id);
+const char *get_svc_target(svcid *id);
+const char *get_svc_source(svcid *id);
+const char *get_svc_msg(svcid *id, int n);
+void set_svc_msg(svcid *id, char *fmt, ...);
+err send_drop_info(svc *s, char *target, request *r, long ref);
+err send_message(svc *s, request *r);
+err send_progress(svcid *id, const char *msg, request *r);
+int fork_service(svcid *id);
+err send_reply(svcid *id, request *r);
+err send_later(svcid *id);
+err send_number_reply(svcid *id, double d);
+err send_string_reply(svcid *id, char *p);
+err call_switchboard(svc *s, request *r);
+err call_service(svc *s, const char *target, const request *r, long ref);
+request *wait_service(svc *s, char *target, request *r, err *e);
+err call_function(svc *s, const char *target, const request *r, long ref);
+void keep_alive(svc *s, int alive);
+void stop_all(svc *s, const char *p, int code);
+void set_maximum(svc *s, int max);
+void exit_timeout(svc *s, int timeout);
+void add_progress_callback(svc *s, const char *name, svcproc p, void *data);
+void add_reply_callback(svc *s, const char *name, svcproc p, void *data);
+void add_drop_callback(svc *s, const char *name, svcproc p, void *data);
+void add_message_callback(svc *s, const char *name, svcproc p, void *data);
+void add_function_callback(svc *s, const char *name, svcproc p, const char *cmt, argdef *args, void *data);
+void add_input_callback(svc *s, FILE *f, inputproc p, void *data);
+void add_service_callback(svc *s, const char *name, svcproc p, void *data);
+boolean service_ready(svc *s);
+err re_dispatch(svcid *id, request *r);
+err process_service(svc *s);
+int service_sync(svc *s);
+void service_run(svc *s);
+request *pool_fetch(svc *s, const char *name, const char *clss);
+void pool_store(svc *s, const char *name, const char *clss, const request *r);
+void pool_link(svc *s, const char *name1, const char *name2);
+void pool_link_objects(svc *s, request *r);
+void recording(svc *s, boolean on);
+void support_recording(svc *s);
+void record_request(svc *s, char *name, request *r);
+void record_function(svc *s, const char *name, argdef *args, va_list list);
+void record_line(svc *s, const char *fmt, ...);
+void show_help_page(svc *s, const char *page, char *topic);
+void show_help_text(svc *s, const char *page, const char *topic, const char *fmt, ...);
+void show_help_file(svc *s, const char *page, const char *topic, const char *file);
+request *get_preferences(svc *s, const char *name);
+void set_preferences(svc *s, request *r, const char *name);
+
+/* queue.c */
+err encode_netblk(XDR *x, netblk *blk);
+err decode_netblk(XDR *x, netblk *blk);
+void free_netblk(netblk *blk);
+err qmonitor(char *fmt, ...);
+err qenter(request *r);
+err qleave(void);
+err qslave(int port);
+err qsync(void);
+err qflush(int code);
+
+/* request.c */
+void str2range(const char *l, stepRange *r);
+void patch_steprange(request *r);
+boolean eq_range(const char *l, const char *r);
+void paramtable(const char *p, long *param, long *table, boolean paramIdMode);
+boolean eq_param(const char *l, const char *r);
+boolean eq_string(const char *l, const char *r);
+boolean eq_integer(const char *l, const char *r);
+boolean eq_real(const char *l, const char *r);
+boolean eq_coord(const char *l, const char *r);
+boolean eq_null(const char *l, const char *r);
+boolean eq_date(const char *l, const char *r);
+boolean eq_time(const char *l, const char *r);
+boolean eq_default(const char *l, const char *r);
+char **mars_order(void);
+int mars_order_count(void);
+namecmp compare_parameters(const char *name);
+boolean parsetime(const char *name, int *h, int *m, int *s);
+boolean parsedate(const char *name, long *julian, long *second, boolean *isjul);
+boolean isdate(const char *name);
+boolean istime(const char *name);
+boolean is_integer(const char *name);
+boolean is_number(const char *name);
+boolean isrange(const char *name);
+long julian_to_date(long jdate, boolean century);
+long today(void);
+long date_to_julian(long ddate);
+void check_for_to_by_list(parameter *p);
+long get_julian_from_request(const request *req, int i);
+boolean fetch(const request *r);
+boolean observation(const request *r);
+boolean image(const request *r);
+boolean simulated_image(const request *r);
+boolean gridded_observations(const request *r);
+boolean feedback(const request *r);
+boolean bias(const request *r);
+boolean track(const request *r);
+boolean is_bufr(const request *r);
+boolean is_netcdf(const request *r);
+boolean is_odb(const request *r);
+boolean is_grib(const request *r);
+boolean wave2d(const request *r);
+parameter *find_parameter(const request *r, const char *parname);
+parameter *find_case_parameter(const request *r, const char *parname);
+boolean value_exist(const request *r, const char *param, const char *val);
+int count_values(const request *r, const char *parname);
+const char *get_value(const request *r, const char *parname, int nth);
+const char *case_get_param(const request *r, const char *parname);
+const char *case_get_value(const request *r, const char *parname, int nth);
+int case_count_values(const request *r, const char *parname, int nth);
+const char *get_operator(const request *r, const char *parname, int nth);
+void unset_value(request *r, const char *parname);
+void set_value(request *r, const char *parname, const char *fmt, ...);
+void set_value_int(request *r, const char *p, long64 v);
+void add_value_int(request *r, const char *p, long64 v);
+void set_list(request *r, const char *parname, const char *plist);
+void add_unique_value(request *r, const char *parname, const char *fmt, ...);
+void add_ordered_value(request *r, const char *parname, const char *fmt, ...);
+void add_unique_ordered_value(request *r, const char *parname, const char *fmt, ...);
+void add_value(request *r, const char *parname, const char *fmt, ...);
+void set_value_long64(request *r, const char *parname, long64 l);
+void add_value_long64(request *r, const char *parname, long64 l);
+const char *request_verb(const request *r);
+void values_loop(const request *r, int count, char *parnames[], loopproc callback, void *data);
+request *new_request(char *name, parameter *p);
+request *empty_request(const char *name);
+parameter *new_parameter(char *name, value *v);
+value *new_value(char *name);
+value *new_expansion(value *val);
+value *new_reference(const char *refname, char *name);
+void save_one_request(FILE *f, const request *r);
+void save_all_requests(FILE *f, const request *r);
+void print_one_request(const request *r);
+void print_all_requests(const request *r);
+request *read_request_file(const char *fname);
+request *unwind_one_request(const request *r);
+request *custom_unwind_one_request(const request *r, int cnt, char *names[]);
+void names_loop(const request *r, loopproc proc, void *data);
+boolean all_is_used(const request *r);
+int count_fields(request *r);
+int count_fields_in_request(request *r);
+int reqcmp(const request *a, const request *b, boolean verbose);
+int field_order(const request *r, const request *u);
+void valcpy(request *a, request *b, char *aname, char *bname);
+void reqcpy(request *a, const request *b);
+void reqmerge(request *a, const request *b);
+void unset_param_value(request *r, const char *param, const char *par_val);
+request *string2request(const char *p);
+void value2string(value *r, char *buf);
+void parameter2string(parameter *r, char *buf);
+char *request2string(const request *r);
+request *mars_language(void);
+rule *mars_rules(void);
+request *build_mars_request(request *r);
+request *read_mars_request(const char *fname);
+err handle_default(request *r, void *data);
+void add_subrequest(request *r, const char *name, const request *s);
+void set_subrequest(request *r, const char *name, const request *s);
+request *get_subrequest(const request *r, const char *name, int n);
+void notify_missing_field(const request *r, const char *name);
+void sort_request(const request *r, int count, char *names[], char *vals[], void *data);
+int count_requests(const request *r);
+
+/* expand.c */
+void free_one_value(value *p);
+void free_all_values(value *p);
+void free_one_parameter(parameter *p);
+void free_all_parameters(parameter *p);
+void free_one_request(request *r);
+void free_all_requests(request *p);
+value *clone_one_value(const value *p);
+value *clone_all_values(const value *p);
+parameter *clone_one_parameter(const parameter *p);
+parameter *clone_all_parameters(const parameter *p);
+request *clone_one_request(const request *r);
+request *clone_all_requests(const request *p);
+void update_step_list(int p, int n, int by, value *v);
+void check_for_date(parameter *p, value *r);
+void check_for_time(parameter *p, value *r);
+request *read_language_file(const char *name);
+long expand_flags(long flags);
+request *expand_all_requests(request *lang, rule *test, const request *r);
+void reset_language(request *lang);
+request *closest_verb(request *lang, const char *name);
+parameter *closest_parameter(request *lang, const char *name);
+void loopuk_language(request *lang, const char *v, const char *p, lookupproc c, void *d);
+request *trim_all_requests(request *lang, request *r);
+request *expand_mars_request(const request *r);
+request *mars_language_from_request(const request *r);
+void copy_to_ibm_values(request *r, const char *name);
+void move_to_ibm_values(request *source, request *dest, const char *name);
+
+/* calc.c */
+func *mars_functions(void);
+void print_math(math *m);
+math *clone_math(math *m);
+math *compmath(const char *formula);
+void free_math(math *m);
+err calculate(math *c, const char *f, void *data);
+err handle_compute(request *r, void *data);
+
+/* hidden.c */
+request *un_first_guess(const request *r);
+request *un_first_guess_all(const request *r);
+void ensemble_to_number(request *r);
+err add_hidden_parameters(request *r);
+void patch_ranges(request *r);
+
+/* environ.c */
+void add_groups(const char *u, request *r);
+boolean user_in_ABC_account(const char *user, const char *account, const request *env);
+request *get_environ(void);
+void set_environ(request *e);
+void new_user(const char *u);
+
+/* check.c */
+void print_conditions(condition *c);
+boolean old_expver_func(request *r, char *n, char *a);
+boolean call_func(request *c, char *f, char *a);
+boolean condition_check(request *c, condition *t);
+rule *read_check_file(const char *fname);
+void print_actions(action *a);
+void print_rules(rule *r);
+boolean doaction(rule *c, request *r, action *a);
+boolean check_one_request(rule *c, request *r);
+rule *new_rule(condition *c, action *a);
+condition *new_condition(testop op, condition *l, condition *r);
+action *new_action(actop op, void *parm);
+condition *clone_condition(condition *c);
+void free_action(action *a);
+void free_condition(condition *c);
+void free_rule(rule *r);
+
+/* hypercube.c */
+int axisindex(const char *name);
+namecmp comparator(const char *name);
+void print_hypercube_index(const hypercube *h);
+int cube_order(const hypercube *h, const request *r);
+int _cube_position(const hypercube *h, const request *r, boolean remove_holes);
+boolean cube_contains(const hypercube *h, const request *r);
+void cube_indexes(const hypercube *h, request *r, int *indexes, int size);
+hypercube *new_hypercube(const request *r);
+int add_field_to_hypercube(hypercube *h, request *r);
+int remove_field_from_hypercube(hypercube *h, request *r, int n);
+void remove_name_from_hypercube(hypercube *h, const char *ignore);
+void print_hypercube(const hypercube *h);
+void free_hypercube(hypercube *h);
+request *_get_cubelet(hypercube *h, int index);
+request *get_cubelet(hypercube *h, int index);
+request *next_cubelet(hypercube *h, int *from, int *last);
+hypercube *merge_cube(const hypercube *a, const hypercube *b, int init, int va, int vb);
+hypercube *new_hypercube_from_mars_request(const request *r);
+hypercube *new_simple_hypercube_from_mars_request(const request *r);
+hypercube *new_hypercube_from_fieldset_cb(fieldset *fs, void (*callback )(request *, void *), void *data);
+hypercube *new_hypercube_from_fieldset(fieldset *fs);
+hypercube *new_hypercube_from_file(const char *path);
+hypercube *add_cube(const hypercube *a, const hypercube *b);
+hypercube *remove_cube(const hypercube *a, const hypercube *b);
+int hypercube_field_count(const hypercube *a);
+int hypercube_cube_size(const hypercube *a);
+int hypercube_compare(const hypercube *a, const hypercube *b);
+
+/* hash.c */
+void hash_stat(void);
+char *strcache(const char *name);
+void strfree(char *name);
+
+/* memory.c */
+int getpagesize(void);
+void mem_exit_on_failure(boolean n);
+void *re_alloc(void *p, int size);
+char *new_string(const char *p);
+void *get_mem(int size);
+void *get_mem_clear(int size);
+void *free_mem(void *x);
+void *fast_new(int s, mempool *pool);
+void *fast_realloc(void *p, int s, mempool *pool);
+void fast_delete(void *p, mempool *pool);
+void *reserve_mem(int s);
+void release_mem(void *p);
+void memory_info(void);
+void *fast_new(int s, mempool *pool);
+void *fast_realloc(void *p, int s, mempool *pool);
+void fast_delete(void *p, mempool *pool);
+void fast_memory_info(const char *title, mempool *pool);
+void memory_info(void);
+void *reserve_mem(int s);
+void release_mem(void *p);
+int purge_mem(void);
+void install_memory_proc(memproc proc, void *data);
+void remove_memory_proc(memproc proc, void *data);
+
+/* tools.c */
+boolean init_process(void);
+long64 proc_mem(void);
+long64 proc_mem(void);
+long64 proc_mem(void);
+double proc_cpu(void);
+const char *user(void);
+err mars_compress(void *in, void *out, long inlen, long *outlen);
+err mars_uncompress(void *in, void *out, long inlen, long *outlen);
+const char *no_quotes(const char *in);
+int casecompare(const char *a, const char *b);
+void start_timer(void);
+char *timename(double t);
+double stop_timer(char *text);
+clock_t timer_cpu(void);
+const char *bytename(double bytes);
+int mkdirp(const char *path, int mode);
+const char *makepath(const char *dname, const char *fname);
+const char *mbasename(const char *fname);
+const char *dirname(const char *fname);
+int deletefile(const char *name);
+int movefile(const char *from, const char *to);
+int copylink(const char *from, const char *to);
+int copydata(const char *from, const char *to);
+int copydir(const char *from, const char *to);
+int copyfile(const char *from, const char *to);
+const char *relpath(const char *from, const char *to);
+void dumpenv(void);
+int faccess(const char *fname, int flags);
+const char *lowcase(const char *p);
+const char *upcase(const char *p);
+void print_environment(FILE *f);
+FILE *mail_open(const char *to, char *fmt, ...);
+void notify_user(const char *what, const request *r);
+FILE *mail_once(const char *mark, const char *to, char *fmt, ...);
+void mail_msg(FILE *f, char *fmt, ...);
+void mail_request(FILE *f, const char *msg, const request *r);
+void mail_close(FILE *f);
+const char *real_name(const char *fname);
+void nfs_lookup(const char *fname, char *host, char *path);
+boolean if_check(const char *host);
+boolean if_check(const char *p);
+void check_nfs_target(const char *path);
+long grib_length(const char *buffer, long length);
+void mars_grib_api_init(void);
+long _readany(FILE *f, char *b, long *l);
+long _readgrib(FILE *f, char *b, long *l);
+long _readbufr(FILE *f, char *b, long *l);
+void touch(const char *path);
+time_t age(const char *path);
+long preferred_IO_blocksize(const char *path, long base);
+double round_decimal(double f);
+long64 atoll(const char *str);
+void print_memory_usage(char *s);
+
+/* list.c */
+boolean in_list(marslist *l, const char *name, void *data);
+void add_to_list(marslist **l, const char *name, void *data);
+
+/* timer.c */
+timer *get_timer(const char *name, const char *statname, boolean elapsed);
+int timer_start(timer *t);
+int timer_stop(timer *t, long64 total);
+double timer_value(timer *t);
+void timer_print_to_file(timer *t, FILE *f);
+void timer_print(timer *t);
+void timer_partial_rate(timer *t, double start, long64 total);
+void print_all_timers(void);
+void reset_all_timers(void);
+int timed_fread(char *buffer, int n, int length, FILE *f, timer *t);
+int timed_wind_next(wind *w, FILE *f, char *buffer, long *length, timer *t);
+int timed_fwrite(char *buffer, int n, int length, FILE *f, timer *t);
+int timed_fclose(FILE *f, timer *t);
+int timed_writetcp(void *data, char *buffer, int n, timer *t);
+int timed_readtcp(void *data, char *buffer, int n, timer *t);
+int timed_readany(FILE *f, char *buffer, long *length, timer *t);
+
+/* logfile.c */
+void marsdebug(boolean on);
+FILE *marslogfile(FILE *f);
+void mars_grib_api_log(const grib_context *c, int level, const char *msg);
+void marslog(int level, char *fmt, ...);
+void log_errors(void);
+void install_exit_proc(exitproc p, void *data);
+void remove_exit_proc(exitproc p, void *data);
+void _marsexit(void);
+void marsexit(int code);
+void dumpmem(void);
+
+/* options.c */
+void get_options(const char *clss, const char *name, void *addr, int count, option opts[]);
+char *progname(void);
+void trap_all_signals(void);
+void marsinit(int *argc, char **argv, void *addr, int count, option opts[]);
+const char *config_file(const char *p);
+
+/* files.c */
+char *marstmp(void);
+
+/* stream.c */
+void stream_write_char(mstream *s, char c);
+void stream_write_uchar(mstream *s, unsigned char c);
+void stream_write_int(mstream *s, int c);
+void stream_write_uint(mstream *s, unsigned int c);
+void stream_write_long(mstream *s, long c);
+void stream_write_ulong(mstream *s, unsigned long c);
+void stream_write_longlong(mstream *s, long64 n);
+void stream_write_ulonglong(mstream *s, ulong64 n);
+void stream_write_double(mstream *s, double x);
+void stream_write_short(mstream *s, short c);
+void stream_write_ushort(mstream *s, unsigned short c);
+void stream_write_string(mstream *s, const char *p);
+void stream_write_blob(mstream *s, const void *d, long len);
+void stream_write_start(mstream *s, const char *p);
+void stream_write_end(mstream *s);
+char stream_read_char(mstream *s);
+unsigned char stream_read_uchar(mstream *s);
+int stream_read_int(mstream *s);
+unsigned int stream_read_uint(mstream *s);
+long stream_read_long(mstream *s);
+unsigned long stream_read_ulong(mstream *s);
+short stream_read_short(mstream *s);
+unsigned short stream_read_ushort(mstream *s);
+const char *stream_read_string(mstream *s);
+const void *stream_read_blob(mstream *s, long *size);
+long64 stream_read_longlong(mstream *s);
+ulong64 stream_read_ulonglong(mstream *s);
+const char *stream_read_start(mstream *s);
+void stream_read_end(mstream *s);
+void make_socket_stream(mstream *s, int *soc);
+void make_file_stream(mstream *s, FILE *f);
+
+/* cos.c */
+COSFILE *cos_open(const char *fname);
+int cos_read(COSFILE *cf, char *buf, long *len);
+int cos_write(COSFILE *cf, char *buf, long len);
+int cos_close(COSFILE *cf);
+void COSOPEN(COSFILE **filedesc, char *fname, long *e);
+void COSCLOSE(COSFILE **filedesc, long *e);
+void COSREAD(COSFILE **filedesc, char *buffer, long *len, long *e);
+
+/* time.c */
+datetime date_time_2_datetime(long julian_date, long hour, long min, long sec);
+datetime key_2_datetime(const packed_key *keyptr);
+void init_time_interval(time_interval *t, datetime begin, long range);
+
+/* guess.c */
+char *guess_class(const char *file);
+
+/* statistics.c */
+err locked_write(const char *fname, char *str, long len);
+void init_statistics(const request *r, const request *e);
+void log_statistics(const char *name, char *fmt, ...);
+void log_statistics_unique(const char *name, char *fmt, ...);
+void flush_statistics(const request *r, const request *env);
+void test_statistics(void);
+
+/* metadata.c */
+request *read_request(mstream *s);
+
+/* free.c */
+err encode_free_format(void *buffer, long *length, const request *r, const void *blob, long bloblen);
+request *decode_free_format_request(void *buffer, long length);
+long decode_free_format_blob(void *buffer, long length, void *blob, long max);
+err encode_free_format_grib(unsigned char *bin, unsigned char *bout, fortint *length, fortint maxlen, request *r, int marsclass, int type, int stream, char *expver);
+err decode_free_format_grib(unsigned char *bin, unsigned char *bout, fortint *length, fortint maxlen, request *r);
+err original_grib(char *bin, fortint *length);
+
+/* index.c */
+void mars_grib_index_add(mars_grib_index *idx, const char *name, boolean s_ok, const char *s, boolean l_ok, long l, boolean d_ok, double d);
+mars_grib_index *mars_grib_index_new(file_offset offset, long length);
+err mars_grib_index_send(mars_grib_index *idx, mstream *s);
+void mars_grib_index_free(mars_grib_index *idx);
+void mars_grib_index_print(mars_grib_index *idx);
+
+/* base.c */
+base_class *base_class_by_name(const char *name);
+database *database_of(void *data);
+const char *database_name(void *data);
+err database_validate(base_class *driver, const char *name, request *r, request *e, int mode);
+database *database_open(base_class *driver, const char *name, request *r, request *e, int mode);
+err database_read(database *b, request *r, void *buffer, long *length);
+err database_write(database *b, request *r, void *buffer, long *length);
+err database_control(database *b, int code, void *param, int size);
+err database_archive(database *b, request *r);
+boolean database_check(database *b, request *r);
+err database_close(database *b);
+void database_admin(base_class *driver);
+
+/* netbase.c */
+void basetask(int soc, int count, void *data);
+
+/* nullbase.c */
+
+/* handler.c */
+err handle_request(request *r, void *data);
+err handle_end(request *r, void *data);
+
+/* nfdbbase.c */
+boolean windgust(request *s);
+void request_to_fdb(int ref, request *r, int y2k);
+
+/* msbase.c */
+
+/* gribbase.c */
+
+/* filebase.c */
+
+/* dhsbase.c */
+int find_long(long *p, int count, long search);
+
+/* flatfilebase.c */
+
+/* target.c */
+char *target_open_mode(const char *target);
+err send_remote_targets(void);
+
+/* feedtask.c */
+void feedtask(int soc, int count, void *data);
+
+/* rdb.c */
+
+/* multibase.c */
+
+/* cachebase.c */
+
+/* webbase.c */
+
+/* odbbase.c */
+
+/* archive.c */
+err feed(database *bout, request *r);
+err handle_archive(request *r, void *data);
+
+/* retrieve.c */
+boolean enough(request *r, int count);
+request *findbase(const char *name);
+database *openbase(request *s, request *r, const char **name, request **cache, int mode);
+void mars_task(void);
+err handle_retrieve(request *r, void *data);
+
+/* control.c */
+err handle_control(request *r, void *data);
+
+/* remove.c */
+err handle_remove(request *r, void *data);
+
+/* grib.c */
+err handle_to_request(request *r, grib_handle *g, mars_grib_index *idx);
+err grib_to_request_index(request *r, char *buffer, long length, mars_grib_index *idx);
+err grib_to_request(request *r, char *buffer, long length);
+
+/* pproc.c */
+err ppstyle(const request *r);
+err pprotation(const request *r);
+err pparea(request *r);
+err vector_postproc(ppbuffer_t *pp, long *nbuffer);
+err makeuv(char *vo, char *d, long inlen, char *u, char *v, long *outlen);
+long ppestimate(void);
+err ppinit(const request *r, postproc *proc);
+err ppdone(void);
+err ppcount(int *in, int *out);
+fieldset *pp_fieldset(const char *file, request *filter);
+
+/* wind.c */
+wind *wind_new(request *r, long64 *total);
+void wind_free(wind *w);
+boolean is_wind(long param);
+err wind_next(wind *w, FILE *f, char *buffer, long *length, timer *t);
+
+/* ocean.c */
+int grib_ocean_fix_section_1(gribsec1 *s1, request *r);
+
+/* multidef.c */
+int decode_multi_local_definition_190(gribsec1 *s1, request *r, char *grib);
+int decode_multi_local_definition(gribsec1 *s1, request *r, char *grib);
+
+/* bufr.c */
+unsigned long getbits(unsigned char *p, int skip, int len);
+unsigned long key_length(const char *buffer, const packed_key *k);
+void set_key_length(packed_key *key, unsigned long keylength);
+boolean get_packed_key(char *buffer, packed_key *k);
+boolean get_packed_section_1(char *buffer, packed_section_1 *section);
+int subset_count(char *buffer);
+int bufr_sat_id(char *buffer, packed_key *k);
+void set_bufr_sat_id(char *buffer, int id, packed_key *k);
+boolean replace_key(char *buffer, packed_key *key);
+boolean patch_key_date(char *buffer, int y, int m, int d, int H, int M, int S);
+boolean patch_key_ident(char *buffer, int ident);
+boolean patch_key_length(char *buffer, unsigned int new_value);
+boolean shift_packed_key_ident(char *buffer);
+void set_bufr_mars_type(request *r, const packed_key *key);
+err bufr_to_request(request *r, char *buffer, long length);
+boolean verify_bufr_key(const char *buffer, long length, const packed_key *key);
+void print_key_date(const packed_key *keyptr, char *s);
+void print_key_time(const packed_key *keyptr, char *s);
+int build_packed_key(char *buffer, fortint length, packed_key *k);
+void print_packed_key(char *buffer, packed_key *k);
+
+/* field.c */
+gribfile *new_gribfile(const char *name);
+FILE *open_gribfile(gribfile *g, const char *mode);
+void close_gribfile(gribfile *g);
+void free_gribfile(gribfile *g);
+field_request *new_field_request(request *r);
+void free_field_request(field_request *g);
+void free_field(field *g);
+void free_fieldset(fieldset *v);
+field *new_field(void);
+fieldset *new_fieldset(int n);
+field *read_field(gribfile *file, file_offset pos, long length);
+err add_field(fieldset *v, field *g);
+err set_field(fieldset *v, field *g, int pos);
+err check_fieldset(fieldset *v, int expect);
+field *copy_field(field *gx, boolean copydata);
+void copy_bitmap(field *gc, field *ga, field *gb);
+void remove_bitmap(field *gc);
+fieldset *copy_fieldset(fieldset *x, int count, boolean copydata);
+fieldset *merge_fieldsets(fieldset *x, fieldset *y);
+fieldset *sub_fieldset(fieldset *v, int from, int to, int step);
+int best_packing(fortint current);
+void set_field_state(field *g, field_state shape);
+field *get_field(fieldset *v, int n, field_state shape);
+field *get_nonmissing_field(fieldset *v, field_state shape);
+void inform_missing_fieldset(const char *name);
+void release_field(field *g);
+const void *field_message(field *g, long *s);
+err write_field(FILE *f, field *g);
+err save_fieldset(fieldset *v);
+fieldset *read_fieldset(const char *fname, request *filter);
+fieldset *request_to_fieldset(request *r);
+request *fieldset_to_request(fieldset *v);
+request *fieldset_to_mars_request(fieldset *fs);
+request *field_to_request(field *f);
+
+/* variable.c */
+err push_scalar(double d);
+err push_named_scalar(char *name, double d);
+err push_fieldset(fieldset *f);
+err push_named_fieldset(char *name, fieldset *f);
+err push(variable *v);
+variable *pop(void);
+variable *stack_top(void);
+variable *find_variable(const char *name);
+err name_variable(variable *v, char *name);
+variable *new_variable(const char *name, fieldset *f, double d);
+void free_variable(variable *v);
+
+/* externf.c */
+err extern_func(math *p);
+
+/* sh2ll.c */
+err write_fieldset(fieldset *v, database *b);
+err handle_read(request *r, void *data);
+err handle_write(request *r, void *data);
+
+/* account.c */
+err ams_validate(request *r, request *e);
+err ecmwf_validate(request *r, request *e);
+int eccert_validate(request *r, request *e);
+err null_validate(request *r, request *e);
+err validate_request(request *r, request *e, const char *method);
+
+/* authenticate.c */
+boolean handle_restriction(request *req, request *r, request *reply, void *data);
+err local_validate_request(request *req, request *env);
+void print_user_restrictions(request *env, request *auth);
+
+/* certify.c */
+err certify(request *r, request *e, char *data, int length);
+
+/* eccert.c */
+char *verify_ecmars_certificate(char *data, int len, char *marsCert, int marsCertLen, eCMarsCertReply *reply);
+
+/* restricted.c */
+int restricted(void *p);
+
+/* version.c */
+long marsversion(void);
+const char *marssourcebranch(void);
+long marsgribapi(void);
+long marsodbapi(void);
+
+/* schedule.c */
+boolean check_dissemination_schedule(request *user, request *env, boolean logstat);
diff --git a/src/libMars-ecregrid/queue.c b/src/libMars-ecregrid/queue.c
new file mode 100644
index 0000000..66711bb
--- /dev/null
+++ b/src/libMars-ecregrid/queue.c
@@ -0,0 +1,304 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include "queue.h"
+#include <setjmp.h>
+#include <signal.h>
+
+
+#ifdef ECMWF
+static XDR xmon;
+static udpinfo *udpmon = 0;
+static netblk blk = { 0,};
+#endif
+
+static jmp_buf env;
+
+static void catch_alarm(int sig)
+{
+	longjmp(env,1);
+}
+
+
+err encode_netblk(XDR *x,netblk* blk)
+{
+	x->x_op = XDR_ENCODE;
+
+	if(!xdr_netblk(x,blk))
+	{
+		/* marslog(LOG_WARN,"encode_request : xdr_netblk"); */
+		return -2;
+	}
+
+	if(!xdrrec_endofrecord(x,true))
+	{
+		/* marslog(LOG_WARN,"encode_request : xdrrec_endofrecord"); */
+		return -2;
+	}
+
+	return 0;
+}
+
+err decode_netblk(XDR *x,netblk *blk)
+{
+
+	bzero(blk,sizeof(netblk));
+	x->x_op = XDR_DECODE;
+
+	if(!xdrrec_skiprecord(x))
+	{
+		/* marslog(LOG_WARN,"decode_request : xdrrec_skiprecord"); */
+		return -2;
+	}
+
+	if(!xdr_netblk(x, blk))
+	{
+		/* marslog(LOG_WARN,"decode_request : xdr_netblk"); */
+		return -2;
+	}
+
+	return 0;
+}
+
+void free_netblk(netblk *blk)
+{
+	xdr_free((xdrproc_t) xdr_netblk, (char *) blk);
+	bzero(blk,sizeof(netblk));
+}
+
+static void flush_queue(int code,void *data)
+{
+	qflush(code);
+}
+
+static err queue(int code,request *r,char *cinfo,long ninfo)
+{
+#ifdef AMS
+	return 0;
+#endif
+#ifndef ECMWF
+	return 0;
+#else
+	static request *q = 0;
+	int more;
+	int maxtry = 10;
+	int try    = 0;
+
+	if(mars.request_id == -1) return -1;
+
+
+	if(setjmp(env) != 0) return -1;
+
+	signal(SIGALRM,catch_alarm);
+	alarm(20);
+
+	if(!q) {
+		q = empty_request("QUEUE");
+#ifdef METVIEW
+		set_value(q,"PROGRAM","metview");
+#else
+		set_value(q,"PROGRAM","%s",progname());
+#endif
+		install_exit_proc(flush_queue,0);
+	}
+
+	if(!udpmon)
+	{
+		udpmon = udp_call(mars.monhost,mars.monport);
+		xdrrec_create(&xmon,0,0,(mxdrparam)udpmon,
+		    (mxdrproc)readudp,(mxdrproc)writeudp);
+	}
+
+	more = 1;
+	while(more && try++ < maxtry )
+	{
+		static int check = 0;
+		int ok = 1;
+		struct timeval start;
+
+		bzero(&blk,sizeof(blk));
+		set_value(q,"REQID","%ld",mars.request_id);
+		set_value(q,"CINFO","%s",cinfo?cinfo:"");
+		set_value(q,"NINFO","%ld",ninfo);
+		blk.code = code;
+		q->next = r;
+		blk.req = q;
+		blk.check = ++check;
+
+		more = 0;
+
+		if(code == Q_ENTER || code == Q_SLAVE)
+			blk.env = get_environ();
+
+		gettimeofday(&start,0);
+
+		ok = 1;
+		if(encode_netblk(&xmon,&blk) != 0)
+			ok = 0;
+	
+		while(ok)
+		{
+			if(decode_netblk(&xmon,&blk) != 0)
+				ok   = 0;
+			else if(blk.check == check) /* we got the right one ... */
+			{
+				const char *p;
+				int i = 0;
+				struct timeval stop;
+				struct timeval diff;
+
+				gettimeofday(&stop,0);
+
+				diff.tv_sec  = stop.tv_sec  - start.tv_sec;
+				diff.tv_usec = stop.tv_usec - start.tv_usec;
+
+				while(diff.tv_usec < 0)
+				{
+					diff.tv_sec--;
+					diff.tv_usec += 1000000;
+				}
+
+				/* update timeout to 100% more */
+				udpmon->timeout.tv_sec  = diff.tv_sec  * 2;
+				udpmon->timeout.tv_usec = diff.tv_usec * 2;
+
+				while (udpmon->timeout.tv_usec >= 1000000)
+				{
+					diff.tv_sec++;
+					diff.tv_usec -= 1000000;
+				}
+
+				i = 0;
+				while(p = get_value(blk.req,"MESSAGE",i++))
+					marslog(LOG_INFO,"%s",p);
+
+				switch(blk.code)
+				{
+
+				case Q_ENTER:
+					more = 1;
+					/* try  = 0; */
+					code = Q_ENTER;
+					break;
+
+				case Q_CONT:
+					break;
+
+				case Q_WAIT:
+					marslog(LOG_EXIT,"Waiting %d minutes...", blk.check);
+					sleep(blk.check*60);
+					more = 1;
+					/* try  = 0; */
+					code = Q_CHECK;
+					break;
+
+				case Q_DIE:
+					marslog(LOG_EXIT,"Request aborted by operators");
+					break;
+
+				default:
+					marslog(LOG_WARN,
+					    "Unexpected code received from queue manager %d",blk.code);
+					break;
+				}
+
+				break;
+			}
+			else if(blk.check < check) /* we receive older replies ....*/
+				;
+			else if(blk.check > check)
+			{
+				marslog(LOG_WARN,"Something is strange in the queue manager!");
+				ok = 0;
+			}
+			free_netblk(&blk);
+		}
+
+		if(!ok) {
+			/* increase timeout */
+			udpmon->timeout.tv_usec += 1000000/2;     /* 1/2 sec */
+			while(udpmon->timeout.tv_usec >= 1000000)
+			{
+				udpmon->timeout.tv_usec -= 1000000;
+				udpmon->timeout.tv_sec++;
+			}
+
+#if 0
+			/* server IP address may have changed */
+			if(try > maxtry/2)
+			{
+				udp_free(udpmon);
+				udpmon = udp_call(mars.monhost,mars.monport);
+			}
+
+#endif
+			/* this is important to do, to get rid of incomplete messages */
+
+			xdr_destroy(&xmon);
+			xdrrec_create(&xmon,0,0,(mxdrparam)udpmon,
+			    (mxdrproc)readudp,(mxdrproc)writeudp);
+
+
+		}
+
+	}
+
+	alarm(0);
+
+	if(try >= maxtry)
+	{
+		marslog(LOG_WARN,"Mars queue manager on %s, port %d is not available",
+		    mars.monhost,mars.monport);
+		return -1;
+	}
+
+	return 0;
+#endif
+}
+
+err qmonitor(char *fmt,...)
+{
+	va_list list;
+
+	char buf[1024];
+
+	va_start(list,fmt);
+	vsprintf(buf, fmt, list);
+	va_end(list);
+
+	/* call queue */
+	return queue(Q_CHECK,0,buf,0);
+}
+
+err qenter(request *r)
+{
+	return queue(Q_ENTER,r,0,0);
+}
+
+err qleave(void)
+{
+	return queue(Q_LEAVE,0,0,0);
+}
+
+err qslave(int port)
+{
+	return queue(Q_SLAVE,0,0,port);
+}
+
+err qsync(void)
+{
+	return queue(Q_SYNC,0,0,0);
+}
+
+err qflush(int code)
+{
+	return queue(Q_FLUSH,0,0,code);
+}
diff --git a/src/libMars-ecregrid/queue.h b/src/libMars-ecregrid/queue.h
new file mode 100644
index 0000000..8d40486
--- /dev/null
+++ b/src/libMars-ecregrid/queue.h
@@ -0,0 +1,21 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#define Q_ENTER 1
+#define Q_LEAVE 2
+#define Q_CHECK 3
+
+#define Q_CONT  5
+#define Q_WAIT  6
+#define Q_DIE   7
+
+#define Q_SLAVE 8
+#define Q_SYNC  9
+#define Q_FLUSH 10
diff --git a/src/libMars-ecregrid/remove.c b/src/libMars-ecregrid/remove.c
new file mode 100644
index 0000000..5ed3e5f
--- /dev/null
+++ b/src/libMars-ecregrid/remove.c
@@ -0,0 +1,70 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+/*
+
+M.Fuentes
+ECMWF Jul-97
+
+Exactly the same as 'handle_control', but it does not
+fail if one of the databases succeded
+
+*/
+
+#include <errno.h>
+#include "mars.h"
+
+err handle_remove(request *r,void *data)
+{
+	const char *s = get_value(r,"DATABASE",0);
+
+	if(s == 0)
+	{
+		marslog(LOG_EROR,"%s needs DATABASE set",request_verb(r));
+		return -5;
+	}
+	else
+	{
+		err e = 0;
+		int i = 0;
+		int success = 0;
+
+		while( s = get_value(r,"DATABASE",i++) )
+		{
+			const char *name  = 0;
+			request    *cache = 0;
+			database   *bout  = 0;
+
+			request    *b    = findbase(s);
+			if(!b) return -2;
+
+			bout = openbase(b,r,&name,&cache,READ_MODE);
+			if(!bout)
+				e = -1;
+			else
+			{
+				e = database_control(bout,CNTL_REMOVE,r,0);
+				database_close(bout);
+				if(e)
+					marslog(LOG_WARN,"REMOVE failed for database '%s'",name);
+				else
+				{
+					marslog(LOG_INFO,"REMOVE performed on database '%s'",name);
+					success++;
+				}
+			}
+		}
+
+		return (success>0)?NOERR:-2;
+	}
+
+	/*NOTREACHED*/
+	return 0;
+}
diff --git a/src/libMars-ecregrid/request.c b/src/libMars-ecregrid/request.c
new file mode 100755
index 0000000..df48c31
--- /dev/null
+++ b/src/libMars-ecregrid/request.c
@@ -0,0 +1,2673 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include <ctype.h>
+#include <time.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include "mars.h"
+#include "lang.h"
+
+/* This function should not exist, only for historical reasons.
+   Once everybody uses ranges, it can dissapear */
+static void days2range(const char *l, stepRange* r, boolean waves, boolean sfc)
+{
+	long step = atol(l);
+	switch(step)
+	{
+		case 507:              /* In grib header 132-168 */
+			/* r->from = 120; */
+			r->from = 132;
+			r->to   = 168;
+			break;
+		case 710:              /* In grib header 180-240 */
+			/* r->from = 168; */
+			r->from = 180;
+			r->to   = 240;
+			break;
+		case 510:              /* In grib header 132-240 */
+			/* r->from = 120; */
+			r->from = 132;
+			r->to   = 240;
+			break;
+		case 607:              /* In grib header 120-168 */
+			if(sfc && mars.no_special_fp)
+				r->from = 120;
+			else
+				r->from =  144;
+			r->to   = 168;
+			break;
+		case 810:              /* In grib header 168-240 */
+			if(sfc && mars.no_special_fp)
+				r->from = 168;
+			else
+				r->from = 192;
+			r->to   = 240;
+			break;
+		case 610:              /* In grib header 120-240 */
+			if(sfc && mars.no_special_fp)
+				r->from = 120;
+			else
+				r->from = 144;
+			r->to   = 240;
+			break;
+		case 1015:
+			if(sfc && mars.no_special_fp)
+				r->from = 240;
+			else
+				r->from = 252;
+			r->to = 360;
+			break;
+		case 1115:
+			r->from = 264;
+			r->to = 360;
+			break;
+		default:
+			marslog(LOG_WARN,"Unknown range of days %ld",step);
+	}
+/*
+	if(waves)
+		r->from += 12;
+*/
+}
+
+/* Converts a string into a range when '-' found */
+void str2range(const char *l, stepRange* r)
+{
+	const char *p = l+strlen(l);
+	r->from  = 0;
+	r->to    = atol(l);
+
+	/* If there's a -, process it as a range */
+	/* COME BACK HERE */
+	while(p>l)
+	{
+		if(*p == '-' || *p == ':')
+		{
+			++p;
+			r->from = atol(l);
+			r->to   = atol(p);
+			break;	
+		}
+		--p;
+	}
+}
+
+void patch_steprange(request *r)
+{
+	const char *type = get_value(r,"TYPE",0);
+
+	if(type && EQ(type,"FA"))
+	{
+		int i = 0;
+		int n = count_values(r,"STEP");
+		request *s = empty_request("EMPTY");
+		for(i = 0; i<n; ++i)
+		{
+			const char *prev = get_value(r,"STEP",i);
+			stepRange range;
+
+			if(EQ(prev,"ALL"))
+			{
+				add_value(s,"STEP","ALL");
+			}
+			else
+			{
+				str2range(prev,&range);
+				add_value(s,"STEP","%ld-%ld",range.from,range.to);
+			}
+		}
+		valcpy(r,s,"STEP","STEP");
+		free_all_requests(s);
+	}
+
+	if(type && EQ(type,"FP"))
+	{
+		int i = 0;
+		int n = count_values(r,"STEP");
+		request *s = empty_request("EMPTY");
+		for(i = 0; i<n; ++i)
+		{
+			const char *prev = get_value(r,"STEP",i);
+
+			/* Change syntax fromdaytoday into fromstep-tostep */
+			if((strlen(prev) == 4) && !isrange(prev))
+			{
+				const char *stream = get_value(r,"STREAM",0);
+				const char *levtype = get_value(r,"LEVTYPE",0);
+				boolean waves = (stream && (strcmp(stream,"WAEF")==0));
+				boolean sfc = (levtype && (strcmp(levtype,"SFC")==0));
+				stepRange range;
+				days2range(prev,&range, waves, sfc);
+				marslog(LOG_DBUG,"patch_steprange: convert step '%s' into '%ld-%ld'",prev,range.from,range.to);
+				add_value(s,"STEP","%ld-%ld",range.from,range.to);
+			}
+			else
+			{
+				marslog(LOG_DBUG,"patch_steprange: keep step '%s'",prev);
+				add_value(s,"STEP","%s",prev);
+			}
+		}
+		valcpy(r,s,"STEP","STEP");
+		free_all_requests(s);
+	}
+}
+
+boolean eq_range(const char *l, const char *r)
+{
+	stepRange lrange, rrange;
+
+	if(l && r)
+	{
+		str2range(l,&lrange);
+		str2range(r,&rrange);
+
+		marslog(LOG_DBUG,"Compared range [%ld,%ld] and [%ld,%ld]",
+				lrange.from,lrange.to,rrange.from,rrange.to);
+
+		return ((lrange.from == rrange.from) && (lrange.to == rrange.to));
+	}
+
+	return false;
+}
+
+#define NO_TABLE -1
+#define NO_PARAM  0
+
+void paramtable(const char *p, long *param, long *table, boolean paramIdMode)
+{
+	const char *q = p;
+	int len = strlen(p);
+
+	*param = atol(p);
+
+	while(p && (*p != '.') && ((p-q)<len))
+		++p;
+
+	if((*p == '.'))
+		*table = atol(++p);
+
+/* This version is grib_api... It should rely on what grib_api returns,
+   either param.table or paramId
+*/
+	if(paramIdMode)
+	{
+		/* Special case for param=228015 => 15.228 */
+		if((*param != NO_PARAM) && (*table == NO_TABLE) && (len==6))
+		{
+			p = q;
+			char tbl[4];
+			char par[4];
+			strncpy(tbl,p,3); tbl[3]='\0';
+			strncpy(par,p+3,3); par[3]='\0';
+			*param = atol(par);
+			*table = atol(tbl);
+			marslog(LOG_DBUG,"Translate %s => param=%ld, table=%ld",p,*param,*table);
+		}
+	}
+}
+
+
+boolean eq_param(const char *l, const char *r)
+{
+	if(l && r)
+	{
+		long lpar = NO_PARAM;
+		long ltable = NO_TABLE;
+		long rpar = NO_PARAM;
+		long rtable = NO_TABLE;
+
+		paramtable(l,&lpar,&ltable,true);
+		paramtable(r,&rpar,&rtable,true);
+		
+		if((ltable != NO_TABLE) && (rtable != NO_TABLE) && (ltable!=rtable))
+			return false;
+
+		return (lpar == rpar);
+	}
+	return false;
+}
+
+boolean eq_string(const char *l, const char *r)
+{
+	if(l && r)
+		return l == r;
+	return false;
+}
+
+boolean eq_integer(const char *l, const char *r)
+{
+	if(l && r)
+		return atol(l) == atol(r);
+	return false;
+}
+
+boolean eq_real(const char *l, const char *r)
+{
+	if(l && r)
+		return atof(l) == atof(r);
+	return false;
+}
+
+boolean eq_coord(const char *l, const char *r)
+{
+	if(l && r)
+	{
+		if(EQ(l,r)) return true;
+
+#ifndef linux
+		return round_decimal(atof(l)) == round_decimal(atof(r));
+#else
+/* 
+   Warning: This code optimized on linux (-O1,2,3) gives rounding errors while
+            calling routine round_decimal. If the code is included here, the 
+			error dissapears.
+
+*/
+		{
+			double ld = atof(l);
+			double rd = atof(r);
+			double x;
+
+			ld = ((long)((1000.0 * ld) + 0.5)) / 1000.0;
+			rd = ((long)((1000.0 * rd) + 0.5)) / 1000.0;
+			x = ld - rd;
+			marslog(LOG_DBUG,"%g, l=%s, r=%s",x,l,r);
+
+			return x == 0;
+		}
+#endif
+	}
+	return false;
+}
+
+boolean eq_null(const char *l, const char *r)
+{
+	return true;
+}
+
+static long name_to_date(const char *, boolean ,boolean* );
+static boolean get_date_parts(const char* name,int *year, int* month, int* day);
+
+boolean eq_date(const char *l, const char *r)
+{
+	if(l && r)
+	{
+		boolean isjul = false;
+		long lndate;
+		long rndate;
+
+		/* marslog(LOG_INFO,"eq_date(%s,%s)",l,r); */
+
+		if(isalpha(l[0]) || isalpha(r[0])) 
+		{
+			int ly = 0,lm = 0,ld = 0;
+			int ry = 0,rm = 0,rd = 0;
+			int lp = get_date_parts(l,&ly,&lm,&ld);
+			int rp = get_date_parts(r,&ry,&rm,&rd);
+
+			/* marslog(LOG_INFO,"eq_date(%d,%d)",lp,rp); */
+
+
+			if(lp && !rp) {
+				rndate = julian_to_date(name_to_date(r,false,&isjul), mars.y2k);
+				if(ld) { rd = rndate % 100; }
+				if(lm) { rm = (rndate/100) % 100; }
+			}
+
+			if(!lp && rp) {
+				lndate = julian_to_date(name_to_date(l,false,&isjul), mars.y2k);
+				if(rd) { ld = lndate % 100; }
+				if(rm) { lm = (lndate/100) % 100; }
+			}
+
+			return (ly == ry) && (lm == rm) && (ld == rd);
+
+		}
+
+		/* What is that ? */
+#if 0
+		if((strlen(l) == 5) || (strlen(r) == 5))
+		{
+			char tmp1[80];
+			char tmp2[80];
+			int i,j;
+
+			const char *t1 = l;
+			const char *t2 = r;
+
+
+			i = 0; while(*t1 && i < 10) { if(isdigit(*t1)) tmp1[i++] = *t1; t1++; }; tmp1[i] = 0;
+			j = 0; while(*t2 && j < 10) { if(isdigit(*t2)) tmp2[j++] = *t2; t2++; }; tmp2[j] = 0;
+			
+			if(mars.debug)
+				marslog(LOG_DBUG,"eq_date: %s(%s) %s %s(%s)",l , tmp1, 
+					(strcmp(tmp1+i-4,tmp2+j-4)==0)?" == ":" != ",r,tmp2);
+
+			return (strcmp(tmp1+i-4,tmp2+j-4) == 0);
+		}
+#endif
+
+		lndate = name_to_date(l,false,&isjul);
+		rndate = name_to_date(r,false,&isjul);
+
+
+		if(mars.debug)
+			marslog(LOG_DBUG,"eq_date: %ld %s %ld",lndate,lndate==rndate?" == ":" != ",rndate);
+
+		return lndate==rndate;
+	}
+	return false;
+}
+
+boolean eq_time(const char *l, const char *r)
+{
+	if(l && r)
+		return atol(l) == atol(r);
+	return false;
+}
+
+boolean eq_default(const char *l, const char *r)
+{
+	boolean ok = false;
+	/* printf("eq_default %s %s\n",l,r); */
+	
+	if(!l || !r)
+		return false;
+
+	if(is_number(r))
+	{
+		if(atof(l) == atof(r))
+			ok = true;
+	}
+	else 
+		if(EQ(l,r))
+			ok = true;
+	return ok;
+}
+
+
+/* Keep in sync with 'names' below ... */
+
+#define DATE_INDIX	0
+#define TIME_INDIX	2
+#define STEP_INDIX	4
+
+/* Used, among other things (??), for field ordering
+   in a fieldset */
+static char *names[] = {
+
+	"DATE",
+	"HDATE",
+	"TIME",
+
+	"REFERENCE",
+	"STEP",
+	"VERIFY",
+	"FCMONTH",
+	"FCPERIOD",
+	"LEADTIME",
+	"OPTTIME",
+
+	"EXPVER",
+	"ORIGIN",
+	"DOMAIN",
+	"METHOD",
+
+	"DIAGNOSTIC",
+	"ITERATION",
+
+	"NUMBER",
+	"QUANTILE",
+
+	"LEVELIST",
+	"LATITUDE",
+	"LONGITUDE",
+	"RANGE",
+
+	"PARAM",
+
+	"IDENT",
+	"OBSTYPE",
+	"REPORTYPE",
+
+	 /* For 2-d wave-spectra products */
+	"FREQUENCY",
+	"DIRECTION",
+
+	/* For EA, EF */
+	"CHANNEL",
+
+};
+
+char** mars_order()
+{
+	return names;
+}
+
+int mars_order_count()
+{
+	return NUMBER(names);
+}
+
+static namecmp cmpnames[] = {
+	eq_default,   /* DATE */
+	eq_default,   /* HDATE */
+	eq_default,   /* TIME */
+	eq_default,   /* REFERENCE */
+
+	eq_range,     /* STEP */
+	eq_default,   /* VERIFY */
+	eq_default,   /* FCMONTH */
+	eq_range,     /* FCPERIOD: It's like step range */
+	eq_range,     /* LEADTIME */
+	eq_range,     /* OPTTIME */
+
+	eq_default,   /* EXPVER */
+
+	eq_string,    /* ORIGIN */
+	eq_string,    /* DOMAIN */
+	eq_integer,   /* METHOD */
+	eq_integer,   /* DIAGNOSTIC */
+	eq_integer,   /* ITERATION */
+
+	eq_integer,   /* NUMBER */
+	eq_range,     /* QUANTILE */
+
+	eq_real,      /* LEVELIST */
+	eq_real,      /* LATITUDE */
+	eq_real,      /* LONGITUDE */
+	eq_default,   /* RANGE */
+
+	eq_param,     /* PARAM */
+
+	eq_integer,   /* IDENT */
+	eq_integer,   /* OBSTYPE */
+	eq_integer,   /* REPORTYPE */
+
+	eq_integer,   /* FREQUENCY */
+	eq_integer,   /* DIRECTION */
+
+	eq_integer,   /* CHANNEL */
+};
+
+static char *names2[] = {
+
+	"CLASS",
+	"STREAM",
+	"TYPE",
+	"LEVTYPE",
+	"PRODUCT",
+	"SECTION",
+};
+
+static namecmp cmpnames2[] = {
+	eq_string, /* CLASS */
+	eq_string, /* STREAM */
+	eq_string, /* TYPE */
+	eq_string, /* LEVTYPE */
+	eq_string, /* PRODUCT */
+	eq_string, /* SECTION */
+};
+
+
+namecmp compare_parameters(const char *name)
+{
+	int i = 0;
+	for(i = 0 ; i < NUMBER(cmpnames) ; i++)
+		if(EQ(name,names[i]))
+			return cmpnames[i];
+
+	for(i = 0 ; i < NUMBER(cmpnames2) ; i++)
+		if(EQ(name,names2[i]))
+			return cmpnames2[i];
+
+	marslog(LOG_WARN,"No comparator for %s",name);
+	return eq_string;
+}
+
+
+#define CASEEQ(a,b) (strcasecmp(a,b)==0)
+
+static const char *parse1(const char *p,int* x,int *n)
+{
+	*x = *n = 0;
+	while(*p && isdigit(*p))
+	{
+		(*x) *= 10;
+		(*x) += *p - '0';
+		(*n)++;
+		*p++;
+	}
+	return p;
+}
+
+
+boolean parsetime(const char *name,int* h,int *m,int* s)
+{
+	const char *p = name;
+	int n;
+	int H=0,M=0,S=0;
+
+	/* hour */
+
+	p = parse1(p,&H,&n);
+	if(n != 0)
+	{
+		if(n != 2) return false;
+
+		/* minute */
+		if(*p++ != ':') return false;
+
+		p = parse1(p,&M,&n);
+		if(n != 2) return false;
+
+		if(*p != 0)
+		{
+			/* second */
+
+			if(*p++ != ':') return false;
+			p = parse1(p,&S,&n);
+			if(n != 2) return false;
+		}
+	}
+
+	*h = H;
+	*m = M;
+	*s = S;
+
+	return *p == 0 ? true : false;
+}
+
+boolean parsedate(const char *name,long* julian,long *second,boolean* isjul)
+{
+	const char *p = name;
+	int n;
+	int y=0,m=0,d=0,H=0,M=0,S=0;
+
+	*julian = *second = 0;
+	*isjul = false;
+
+	if(p == 0 || *p == 0) return false;
+
+	/* year */
+	p = parse1(p,&y,&n);
+	if(n != 2 && n != 4) return false;
+	if(*p++ != '-') return false;
+
+	/* month */
+	p = parse1(p,&m,&n);
+	if(n == 2)
+	{
+		/* day */
+		if(*p++ != '-') return false;
+		p = parse1(p,&d,&n);
+		if(n != 2) return false;
+	}
+	else if(n == 3)
+	{
+	    long j = date_to_julian(y*10000 + 101) + m - 1;
+		j = julian_to_date(j,mars.y2k && !mars.daily_climatology);
+		/* julian day */;
+		d = j % 100;
+		m = (j % 10000)/100;
+		*isjul = true;
+	}
+	else 
+		return false;
+
+	while(*p && isspace(*p)) p++;
+
+	/* hour */
+
+	p = parse1(p,&H,&n);
+	if(n != 0)
+	{
+		if(n != 2) return false;
+
+		/* minute */
+		if(*p++ != ':') return false;
+
+		p = parse1(p,&M,&n);
+		if(n != 2) return false;
+
+		if(*p != 0)
+		{
+			/* second */
+
+			if(*p++ != ':') return false;
+			p = parse1(p,&S,&n);
+			if(n != 2) return false;
+		}
+	}
+
+	*julian = date_to_julian(y*10000 + m*100 + d);
+	*second = H*3600 + M*60 + S;
+
+	return *p == 0 ? true : false;
+
+}
+
+boolean isdate(const char *name)
+{
+	long dummy1,dummy2;
+	boolean dummy3;
+	return parsedate(name,&dummy1,&dummy2,&dummy3);
+}
+
+boolean istime(const char *name)
+{
+	int h,m, s;
+	return parsetime(name,&h,&m,&s);
+}
+
+boolean is_integer(const char *name)
+{
+	const char *p = name;
+	int x,n;
+
+	if(p == 0 || *p == 0) return false;
+
+	if(*p == '-') p++;
+	else if(*p == '+') p++;
+	
+	p = parse1(p,&x,&n); 
+	if(*p) return false;
+
+	return true;
+}
+
+boolean is_number(const char *name)
+{
+	const char *p = name;
+	int x,n;
+
+	if(p == 0 || *p == 0) return false;
+
+	if(*p == '-') p++;
+	else if(*p == '+') p++;
+	
+	p = parse1(p,&x,&n); if(n==0 && *p != '.') return false;
+
+	if(*p == '.') {
+		p++;
+		p = parse1(p,&x,&n);
+	}
+
+	if(*p == 'e' || *p == 'E')
+	{
+		p++;
+		if(*p == '-') p++;
+		else if(*p == '+') p++;
+		p = parse1(p,&x,&n); if(n==0) return false;
+	}
+
+	return *p == 0 ? true : false;
+}
+
+boolean isrange(const char *name)
+{
+	const char *p = name;
+	int x,n;
+
+	if(p == 0 || *p == 0) return false;
+
+	p = parse1(p,&x,&n); if(n==0) return false;
+
+	if(*p != '-' && *p != ':') return false;
+
+	p++;
+	p = parse1(p,&x,&n);
+
+	return *p == 0 ? true : false;
+}
+
+static void count_parval(parameter *p)
+{
+	int n = 0;
+	value *v = p->values;
+
+	while(v)
+	{
+		n++;
+		v = v->next;
+	}
+
+	p->count = n;
+
+}
+
+long julian_to_date(long jdate,boolean century)
+{
+	long x,y,d,m,e;
+	long day,month,year;
+
+	x = 4 * jdate - 6884477;
+	y = (x / 146097) * 100;
+	e = x % 146097;
+	d = e / 4;
+
+	x = 4 * d + 3;
+	y = (x / 1461) + y;
+	e = x % 1461;
+	d = e / 4 + 1;
+
+	x = 5 * d - 3;
+	m = x / 153 + 1;
+	e = x % 153;
+	d = e / 5 + 1;
+
+	if( m < 11 )
+		month = m + 2;
+	else
+		month = m - 10;
+
+
+	day = d;
+	year = y + m / 11;
+
+	if(century)
+		return year * 10000 + month * 100 + day;
+	else
+		return (year % 100) * 10000 + month * 100 + day;
+}
+
+long today(void)
+{
+	static long td = 0;
+	if(td == 0)
+	{
+		time_t now;
+		struct tm *t;
+
+		time(&now);
+
+		t = localtime(&now);
+
+		td = (t->tm_year+1900) * 10000 + (t->tm_mon+1)* 100 + t->tm_mday;
+		td = date_to_julian(td);
+
+	}
+	return td;
+}
+
+long date_to_julian(long ddate)
+{
+	long  m1,y1,a,b,c,d,j1;
+
+	long month,day,year;
+
+	if(ddate <=0)
+	{
+		const char *ref = getenv("MARS_REFERENCE_DATE");
+		if(ref) {
+			long date = atol(ref);
+			date = julian_to_date(date_to_julian(date),mars.y2k);
+			marslog(LOG_WARN,"Using reference date %d",date);
+			return date_to_julian(date) + ddate;
+		}
+		return today() + ddate;
+	}
+
+	year = ddate / 10000;
+	ddate %= 10000;
+	month  = ddate / 100;
+	ddate %= 100;
+	day = ddate;
+
+
+	if (year < 100)
+	{
+		static int first = 1;
+		if(first)
+		{
+			if(mars.y2k)
+			{
+				marslog(LOG_WARN,"** Y2K ALERT ** Dates should be specified with a four digits year");
+				marslog(LOG_WARN,"** Y2K ALERT ** ");
+				marslog(LOG_WARN,"** Y2K ALERT ** Use of two digit year format will be illegal in MARS requests.");
+				marslog(LOG_WARN,"** Y2K ALERT ** For more details see Computer News Sheet Number 359.");
+				marslog(LOG_WARN,"** Y2K ALERT ** ");
+
+				mars.y2k_problem = year;
+				if(!mars.y2k_problem)
+					mars.y2k_problem = -1;
+
+				first = 0;
+			}
+
+		}
+		year = year + 1900;
+	}
+
+	if (month > 2)
+	{
+		m1 = month - 3;
+		y1 = year;
+	}
+	else
+	{
+		m1 = month + 9;
+		y1 = year - 1;
+	}
+	a = 146097*(y1/100)/4;
+	d = y1 % 100;
+	b = 1461*d/4;
+	c = (153*m1+2)/5+day+1721119;
+	j1 = a+b+c;
+
+	return(j1);
+}
+
+static char * months[] = {
+"jan", "feb", "mar", "apr", "may", "jun",
+"jul", "aug", "sep", "oct", "nov", "dec",
+};
+
+static boolean get_date_parts(const char* name,int *year, int* month, int* day)
+{
+	int i;
+	char tmp[80];
+
+	*year = *month = *day;
+
+	int l = strlen(name);
+	switch(l) {
+		case 3:
+			for(i = 0; i < NUMBER(months); i++)
+				if(strcasecmp(name, months[i]) == 0)
+				{
+					*month = i + 1;
+					return true;
+				}
+			break;
+
+		case 6:
+			strncpy(tmp,name,3); tmp[3] = 0;
+			for(i = 0; i < NUMBER(months); i++)
+				if(strcasecmp(tmp, months[i]) == 0)
+				{
+					if(name[3] == '-') {
+						*day   = atol(&name[4]);
+						*month = i + 1;
+						return true;
+					}
+				}
+			break;
+
+		default:
+			break;
+	}
+	return false;
+}
+
+
+static long name_to_date(const char *name, boolean by,boolean* isjul)
+{
+	long julian,second, i, tmp[4];
+	if(by)
+		return atol(name);
+
+
+	if(parsedate(name,&julian,&second,isjul))
+	{
+		if(second)
+			marslog(LOG_WARN,"HH:MM:SS Information lost from %s",name); 
+		return julian;
+	}
+	return date_to_julian(atol(name));
+}
+
+/* this is too specific... I'd like to change it later */
+
+static long name_to_time(const char *name, boolean by)
+{
+	long t = atol(name);
+	return (t/100)*60+(t%100);
+}
+
+static long name_to_int(const char *p,char *name, boolean by,boolean* isjul)
+{
+	if(EQ(p,"DATE"))
+		return name_to_date(name,by,isjul);
+	else if(EQ(p,"TIME"))
+		return name_to_time(name,by);
+	else
+		return atol(name);
+}
+
+static char *int_to_name(const char *p,int n,boolean isjul)
+{
+	static char buf[20];
+	char *fmt = "%d";
+	int k = 0;
+
+	if(EQ(p,"DATE")) {
+		if(isjul)
+		{
+			long year  = julian_to_date(n,mars.y2k) / 10000;
+			long delta = n - date_to_julian(year*10000+101);
+			n = year;
+			k = delta+1;
+			fmt = "%d-%03d";
+			
+		}
+		else n = julian_to_date(n,mars.y2k);
+	}
+	else if(EQ(p,"TIME"))
+	{
+		int h = n/60;
+		int m = n%60;
+		n = h*100+m;
+		fmt = "%04d";
+	}
+	sprintf(buf,fmt,n,k);
+	return buf;
+}
+
+void check_for_to_by_list(parameter *p)
+{
+	value *q[5];
+	int i = 0;
+	value *v = p->values;
+	int from,to,by;
+	int doit;
+	boolean isjul = false;
+
+
+
+	while(v)
+	{
+		q[i++] = v;
+		v = v->next;
+	}
+
+	if(p->count == 5)
+	{
+		doit = EQ(q[1]->name,"TO") &&
+			   EQ(q[3]->name,"BY") &&
+			   (is_number(q[0]->name) || isdate(q[0]->name)) &&
+			   (is_number(q[2]->name) || isdate(q[2]->name)) &&
+			   is_number(q[4]->name);
+
+		if(doit)
+		{
+
+			from = name_to_int(p->name,q[0]->name,false,&isjul);
+			to   = name_to_int(p->name,q[2]->name,false,&isjul);
+			by   = name_to_int(p->name,q[4]->name,true,&isjul);
+		}
+
+	}
+	else
+	{
+		doit = EQ(q[1]->name,"TO") &&
+			(is_number(q[0]->name) || isdate(q[0]->name)) &&
+			(is_number(q[2]->name) || isdate(q[2]->name));
+
+		if(doit)
+		{
+
+			from = name_to_int(p->name,q[0]->name,false,&isjul);
+			to   = name_to_int(p->name,q[2]->name,false,&isjul);
+			by = 1;
+			if(EQ(p->name,"DATE")) by = 1;
+			if(EQ(p->name,"STEP")) by = 12;
+			if(EQ(p->name,"TIME")) by = 6*60;
+		}
+	}
+
+	if( doit )
+	{
+		int n    = 0;
+		value  *f = NULL,*l = NULL;
+		long val;
+		long cnt;
+
+		if(by == 0) by = 1;
+		
+		if( (to - from) / (double)by < 0 )
+		{
+			marslog(LOG_WARN,"Expanding list of %s in reverse order",p->name);
+			by = -by;
+		}
+
+		cnt =  (to - from)/by + 1;
+
+		val = from;
+		for(i=0 ; i < cnt ; i++)
+		{
+			v = new_value(strcache(int_to_name(p->name,val,isjul)));
+			val += by;
+
+
+			if(f) l->next = v;
+			else f = v;
+			l = v;
+			n++;
+		}
+
+		if(n>99)
+		{
+			/* due to a bug on the ibm, save the original stuff here */
+			value *w;
+
+			w = v = new_value(strcache(int_to_name(p->name,from,isjul)));
+			v = (v->next = new_value(strcache("BY")));
+			v = (v->next = new_value(strcache(int_to_name("DUMMY",by,isjul))));
+			v = (v->next = new_value(strcache("TO")));
+			v = (v->next = new_value(strcache(int_to_name(p->name,to,isjul))));
+
+			p->ibm_values = w;
+		}
+
+		free_all_values(p->values);
+		p->values  = f;
+		p->count = n;
+
+	}
+
+}
+
+long get_julian_from_request(const request* req,int i)
+{
+	long req_date;
+	const char* p = get_value(req,"DATE",i);
+	if(is_number(p))
+		req_date = date_to_julian(atol(p));
+	else
+	{
+		long second = 0; boolean isjul;
+		parsedate(p,&req_date,&second,&isjul);
+	}
+
+	return req_date;
+}
+
+boolean fetch(const request *r)
+{
+	const char* p = get_value(r,"TRANSFER",0);
+	if(p && EQ(p,"HANDLE"))
+		return true;
+
+	return EQ(r->name,"FETCH");
+}
+
+boolean observation(const request *r)
+{
+	const char *t = get_value(r,"TYPE",0);
+	const char *s = get_value(r,"STREAM",0);
+	return s && t && (EQ(t,"OB") || EQ(t,"FB") || EQ(s,"SSMI"));
+}
+
+boolean image(const request *r)
+{
+	const char *t = get_value(r,"TYPE",0);
+	const char *s = get_value(r,"STREAM",0);
+	return s && t && (EQ(t,"IM")) && !EQ(s,"SSMI");
+}
+
+boolean simulated_image(const request *r)
+{
+	const char *t = get_value(r,"TYPE",0);
+	return t && (EQ(t,"SIM"));
+}
+
+boolean gridded_observations(const request *r)
+{
+	const char *t = get_value(r,"TYPE",0);
+	return t && (EQ(t,"GO"));
+}
+
+boolean feedback(const request *r)
+{
+	const char *t = get_value(r,"TYPE",0);
+	return t && (EQ(t,"AI") || EQ(t,"AF"));
+}
+
+boolean bias(const request *r)
+{
+	const char *t = get_value(r,"TYPE",0);
+	return t && (EQ(t,"AB"));
+}
+
+boolean track(const request *r)
+{
+	const char *t = get_value(r,"TYPE",0);
+	return t && (EQ(t,"TF"));
+}
+
+boolean is_bufr(const request* r)
+{
+	return feedback(r) || observation(r) || bias(r) || track(r);
+}
+
+boolean is_netcdf(const request* r)
+{
+	const char *t = get_value(r,"CLASS",0);
+	return t && (EQ(t,"NC"));
+}
+
+boolean is_odb(const request* r)
+{
+	const char *t = get_value(r,"TYPE",0);
+	return t && (EQ(t,"OFB") || EQ(t,"MFB"));
+}
+
+boolean is_grib(const request* r)
+{
+	return !is_bufr(r);
+}
+
+boolean wave2d(const request *r)
+{
+	const char *s;
+	const char *t = get_value(r,"STREAM",0);
+	boolean is250 = false;
+	int n = 0;
+
+	if(t && !EQ(t,"WAVE"))
+		return false;
+
+	while((s = get_value(r,"PARAM",n++)) != NULL)
+		if((EQ(s,"250")) || (EQ(s,"250.141")) || (EQ(s,"ALL")))
+			is250 = true;
+
+	return is250;
+}
+
+/* end of specific code
+=====================*/
+
+
+parameter *find_parameter(const request *r,const char *parname)
+{
+	if(!parname) return 0;
+	if(r)
+	{
+		parameter *p = r->params;
+		while(p)
+		{
+			if(EQ(p->name,parname))
+				return p;
+			p = p->next;
+		}
+	}
+	return NULL;
+
+}
+
+parameter *find_case_parameter(const request *r,const char *parname)
+{
+	if(!parname) return 0;
+	if(r)
+	{
+		parameter *p = r->params;
+		while(p)
+		{
+			if(CASEEQ(p->name,parname)==0)
+				return p;
+			p = p->next;
+		}
+	}
+	return NULL;
+
+}
+
+boolean value_exist(const request *r, const char *param, const char *val)
+{
+	boolean found=false;
+	value *v;
+	boolean num = is_number(val);
+	double dval = atof(val);
+
+	char *vcache = strcache(val);
+
+	parameter *p = find_parameter(r,param);
+	if(!p) return false;
+
+	v = p->values;
+
+	while(v && !found)
+	{
+		if(num)
+			found = (dval == atof(v->name));
+		else
+			found = (vcache == v->name);
+		v = v->next;
+	}
+	strfree(vcache);
+
+	return found;
+}
+
+int count_values(const request *r,const char *parname)
+{
+	parameter *p = find_parameter(r,parname);
+
+	if(p == NULL) return 0;
+	if(p->count)  return p->count;
+
+	count_parval(p);
+
+	if(mars.expflags & EXPAND_LISTS)
+	{
+		if(p->count == 5 || p->count == 3)
+			/* small patch */
+			if(!EQ(parname,"TIME")  || !(observation(r)))
+				check_for_to_by_list(p);
+	}
+
+	if((mars.expflags & EXPAND_DATE) && (EQ(parname,"DATE")))
+	{
+		value *v = p->values;
+		while(v)
+		{
+			check_for_date(p,v);
+			v = v->next;
+		}
+	}
+
+	if((mars.expflags & EXPAND_TIME) && (EQ(parname,"TIME")))
+	{
+		value *v = p->values;
+		while(v)
+		{
+			check_for_time(p,v);
+			v = v->next;
+		}
+	}
+
+	return p->count;
+}
+
+
+const char *get_value(const request *r,const char *parname,int nth)
+{
+	parameter *p = find_parameter(r,parname);
+	value *v;
+	int i = 0;
+
+	if(p == NULL) return NULL;
+
+	if(!p->count) count_values(r,parname);
+
+	v = p->values;
+
+	while(v)
+	{
+		if(nth == i++) return v->name;
+		v = v->next;
+	}
+
+	return NULL;
+}
+
+const char *case_get_param(const request *r,const char *parname)
+{
+	parameter *p = find_case_parameter(r,parname);
+	return p?p->name:NULL;
+}
+
+const char *case_get_value(const request *r,const char *parname,int nth)
+{
+	parameter *p = find_case_parameter(r,parname);
+	return p?get_value(r,p->name,nth):NULL;
+}
+
+int case_count_values(const request *r,const char *parname,int nth)
+{
+	parameter *p = find_case_parameter(r,parname);
+	return p?count_values(r,p->name):0;
+}
+
+const char *get_operator(const request *r,const char *parname,int nth)
+{
+
+	return NULL;
+}
+
+static void put_value(request *r,const char *parname,const char *valname,
+boolean append,boolean unique, boolean ascending)
+{
+	parameter *p;
+	value     *v;
+
+	if(!r) return;
+
+
+	if( (p = find_parameter(r,parname)) != NULL )
+	{
+		if(append)
+		{
+			value *a = p->values,*b= NULL,*c=NULL;
+			while(a)
+			{
+				b = a;
+				if(unique)
+				{
+					if(is_number(a->name) && is_number(valname))
+					{
+						if(atof(a->name) == atof(valname))
+							return;
+					}
+					else if(EQ(a->name,valname))
+						return;
+				}
+
+				if(ascending)
+				{
+					if(is_number(a->name))
+					{
+						if(atof(valname)  < atof(a->name))
+							break;
+					}
+					else if(LT(valname,a->name))
+						break;
+				}
+				c = b;	
+				a = a->next;
+			}
+			v = new_value(strcache(valname));
+			if(ascending)
+			{
+				if(c)
+				{
+					if(b && b!=c) v->next = b;
+					c->next = v;
+				}
+				else
+				{
+					if(a) v->next = a;
+					p->values = v;
+				}
+			}
+			else
+			{
+				if(b) b->next = v;
+				else p->values = v;
+			}
+			/* p->count++; */
+			p->count = 0;
+		}
+		else
+		{
+			if(p->values)
+			{
+				free_all_values(p->values->next);
+				p->values->next = NULL;
+				/* p->count = 1; */
+				p->count = 0;
+				if(EQ(p->values->name,valname))
+					return;
+				else
+				{
+					strfree(p->values->name);
+					p->values->name = strcache(valname);
+				}
+			}
+			else
+			{
+				v = new_value(strcache(valname));
+				p->values = v;
+				/* p->count = 1; */
+				p->count = 0;
+			}
+		}
+	}
+	else
+	{
+		parameter *q = NULL;
+		parameter *s = r->params;
+		v = new_value(strcache(valname));
+		p = new_parameter(strcache(parname),v);
+		while(s) {
+			q = s;
+			s=s->next;
+		}
+		if(q) q->next = p;
+		else r->params = p;
+	}
+
+}
+
+void unset_value(request *r,const char *parname)
+{
+	parameter *p,*q=NULL;
+	if(!r) return;
+
+	p = r->params;
+	while(p)
+	{
+		if(EQ(parname,p->name))
+		{
+			if(q) q->next = p->next;
+			else r->params = p->next;
+			free_one_parameter(p);
+			return;
+		}
+		q = p;
+		p = p->next;
+	}
+}
+
+void set_value(request *r,const char *parname,const char *fmt,...)
+{
+	char buffer[10240];
+	va_list list;
+
+	va_start(list,fmt);
+	vsprintf(buffer,fmt,list);
+	va_end(list);
+
+	put_value(r,parname,buffer,false,false,false);
+}
+
+void set_value_int(request *r, const char *p, long64 v)
+{
+	set_value(r,p,"%lld",v);
+}
+
+void add_value_int(request *r, const char *p, long64 v)
+{
+	add_value(r,p,"%lld",v);
+}
+
+void set_list(request *r,const char *parname,const char *plist)
+{
+	const char *p = plist;
+	int i = 0,space = 0;
+	char buf[1024];
+	boolean append = false;
+
+	while(*p)
+	{
+		switch(*p)
+		{
+		case '\t':
+		case ' ':
+			space++;
+			break;
+
+		case '/':
+			if(i)
+			{
+				buf[i] = 0;
+				put_value(r,parname,buf,append,false,false);
+			}
+			space = i = 0;
+			append= true;
+			break;
+
+		default:
+			if(i && space) while(space-->0) buf[i++] = ' ';
+			buf[i++] = *p;
+			space = 0;
+			break;
+		}
+		p++;
+	}
+
+	if(i)
+	{
+		buf[i] = 0;
+		put_value(r,parname,buf,append,false,false);
+	}
+}
+
+void add_unique_value(request *r,const char *parname,const char *fmt,...)
+{
+	char buffer[1024];
+	va_list list;
+
+	va_start(list,fmt);
+	vsprintf(buffer,fmt,list);
+	va_end(list);
+
+	put_value(r,parname,buffer,true,true,false);
+	va_end(list);
+}
+
+void add_ordered_value(request *r,const char *parname,const char *fmt,...)
+{
+	char buffer[1024];
+	va_list list;
+
+	va_start(list,fmt);
+	vsprintf(buffer,fmt,list);
+	va_end(list);
+
+	put_value(r,parname,buffer,true,false,true);
+	va_end(list);
+}
+
+void add_unique_ordered_value(request *r,const char *parname,const char *fmt,...)
+{
+	char buffer[1024];
+	va_list list;
+
+	va_start(list,fmt);
+	vsprintf(buffer,fmt,list);
+	va_end(list);
+
+	put_value(r,parname,buffer,true,true,true);
+	va_end(list);
+}
+
+void add_value(request *r,const char *parname,const char *fmt,...)
+{
+	char buffer[1024];
+	va_list list;
+
+	va_start(list,fmt);
+	vsprintf(buffer,fmt,list);
+	va_end(list);
+
+	put_value(r,parname,buffer,true,false,false);
+	va_end(list);
+}
+
+void set_value_long64(request *r,const char *parname,long64 l)
+{
+	char buffer[1024];
+	long64 i;
+
+	sprintf(buffer,"%lld",l);
+	sscanf(buffer,"%lld",&i);
+
+	/* i = strtoll(buffer,(char **)NULL, 10); */
+	if (i != l)
+	{
+		marslog(LOG_EROR,"Error in converting 64 bit long to ascii");
+		marsexit(-99);
+	}
+
+	put_value(r,parname,buffer,false,false,false);
+}
+
+void add_value_long64(request *r,const char *parname,long64 l)
+{
+	char buffer[1024];
+	long64 i;
+
+	sprintf(buffer,"%lld",l);
+	sscanf(buffer,"%lld",&i);
+
+	/* i = strtoll(buffer,(char **)NULL, 10); */
+	if (i != l)
+	{
+		marslog(LOG_EROR,"Error in converting 64 bit long to ascii");
+		marsexit(-99);
+	}
+
+	put_value(r,parname,buffer,true,false,false);
+
+}
+
+const char *request_verb(const request *r)
+{
+	return r?r->name:NULL;
+}
+
+/* 
+	Parameter 127 && 128 && 152 are only at level 1 !!!!
+	129 is at level 1
+*/
+
+static boolean chk_152(int count,char *names[],char *vals[])
+{
+	int flg = 0;
+	int i,n;
+
+	for(i=0;i<count;i++)
+	{
+		if((EQ(names[i],"PARAM")) && vals[i] && ( n = atoi(vals[i])) )
+		{
+			if(n == 22 || n == 127 || n == 128 || n == 129 || n == 152 || n == 200152 || n == 200129 || n == 129152 || n == 129129)
+			{
+				/* Only for tables < 210 */
+				long par = NO_PARAM;
+				long table = NO_TABLE;
+				paramtable(vals[i],&par,&table,true);
+				if(table <210)
+					flg++;
+			}
+		}
+
+		if(EQ(names[i],"LEVELIST") && vals[i] && !EQ(vals[i],"1"))
+			flg++;
+	}
+
+	return (boolean)(flg != 2);
+}
+
+static void loop(const request *r,boolean ml,int index,int count,char *strings[],
+char *values[],
+loopproc callback,void *data)
+{
+	if(index < count)
+	{
+		parameter  *p = find_parameter(r,strings[index]);
+
+		(void)count_values(r,strings[index]); /* force list expension */
+
+		if(p)
+		{
+			value      *v = p->values;
+
+			while(v)
+			{
+				values[index] = v->name;
+				loop(r,ml,index+1,count,strings,values,callback,data);
+				v = v->next;
+			}
+		}
+		else
+		{
+			values[index] = NULL;
+			loop(r,ml,index+1,count,strings,values,callback,data);
+		}
+
+	}
+	else
+		if( !ml || chk_152(count,strings,values))
+			callback(r,count,strings,values,data);
+}
+
+void values_loop(const request *r,int count,
+char *parnames[],loopproc callback,void *data)
+{
+	char **values = (char**)MALLOC(sizeof(char*)*count);
+	const char * p      = get_value(r,"LEVTYPE",0);
+	boolean ml    = (boolean)(p && (EQ(p,"ML")));
+
+	if(ml) {
+		p = get_value(r,"EXPECT",0);
+		if(p && atol(p) != 0)
+		{
+			marslog(LOG_WARN,"EXPECT provided, special treatment of LNSP");
+			marslog(LOG_WARN,"and other single level parameters disabled");
+			ml = false;
+		}
+	}
+
+	loop(r,ml,0,count,parnames,values,callback,data);
+
+	FREE(values);
+}
+
+
+
+request *new_request(char *name,parameter *p)
+{
+	request *r = NEW_CLEAR(request);
+	r->name    = name;
+	r->params  = p;
+	return r;
+}
+
+request *empty_request(const char *name)
+{
+	return new_request(name?strcache(name):strcache(""),NULL);
+}
+
+parameter *new_parameter(char *name,value *v)
+{
+	parameter *p = NEW_CLEAR(parameter);
+	p->name    = name;
+	p->values  = v;
+	return p;
+}
+
+value *new_value(char *name)
+{
+	value *v = NEW_CLEAR(value);
+	v->name  = name;
+	return v;
+}
+
+
+value *new_expansion(value* val)
+{
+	value *v  = NEW_CLEAR(value);
+	v->expand = val;
+	return v;
+}
+
+value *new_reference(const char *refname,char *name)
+{
+	value *v = NEW_CLEAR(value);
+	v->ref   = (value*)refname;
+	v->name  = name;
+	return v;
+}
+
+
+static boolean need_quotes(const char *p)
+{
+	int n;
+	const char *q;
+
+	switch(*p)
+	{
+		case '-':
+		case '.':
+			return !is_number(p);
+			/*NOTREACHED*/
+			break;
+
+		case '"':
+			n = 0;
+			q = p;
+			while(*q) if(*q++ == '"') n++;
+			if(n != 2) return true;
+			if(p[strlen(p)-1] != '"') return true;
+			break;
+
+		default:
+			if(!isalnum(*p) && *p != '_') 
+				return true;
+
+			while(*p)
+			{
+				if(!isalnum(*p) && 
+				   *p != ' ' && 
+				   *p != '_' &&
+				   *p != '-' &&
+				   *p != '.' &&
+				   *p != '\t') return true;
+
+				 p++;
+			}
+
+			break;
+	}
+
+	return false;
+}
+
+static void save_name(FILE *f,const char* name,int n)
+{
+	const char *p = name;
+	int i = 0,cnt = 0;
+
+	if(name == NULL)
+	{
+		marslog(LOG_WARN,"save_name called with empty name");
+		return;
+	}
+
+	if(need_quotes(p))
+	{
+		cnt = 2;
+		putc('\'',f);
+		while(*p) {
+			if(*p=='\\' || *p == '\n' || *p == '\'') { putc('\\',f);i++; }
+			putc(*p,f);
+			p++;
+			i++;
+		}
+		putc('\'',f);
+	}
+	else cnt = fprintf(f,"%s",name);
+
+	for(i=cnt;i<n;i++)
+		putc(' ',f);
+}
+
+static void save_one_value(FILE *f,value *r)
+{
+	save_name(f,r->name,0);
+}
+
+static void save_all_values(FILE *f,value *r)
+{
+	while(r)
+	{
+		save_one_value(f,r);
+		if(r->next) putc('/',f);
+		r = r->next;
+	}
+
+#if 0
+	value *o = r->other_names;
+	if(o)
+	{
+		fprintf(f," ## Other names: ");
+		while(o)
+		{
+			save_one_value(f,o);
+			if(o->next) putc('/',f);
+			o = o->next;
+		}
+	}
+#endif
+}
+
+
+static void save_all_parameters(FILE *f,parameter *r)
+{
+	while(r)
+	{
+		if(mars.debug || *r->name != '_')
+		{
+			if(r->subrequest)
+			{
+				fprintf(f,",\n    ");
+				save_name(f,r->name,10);
+				fprintf(f," = (");
+				save_all_requests(f,r->subrequest);
+				fprintf(f,")");
+			}
+			else
+				if(r->values)
+				{
+					fprintf(f,",\n    ");
+					save_name(f,r->name,10);
+					fprintf(f," = ");
+					save_all_values(f,r->values);
+				}
+#if 0
+			if(r->default_values)
+			{
+				putc('\n',f);
+				putc('#',f);
+				save_all_values(f,r->default_values);
+				putc('\n',f);
+
+			}
+#endif
+		}
+		r = r->next;
+	}
+	putc('\n',f);
+}
+
+
+void save_one_request(FILE *f,const request *r)
+{
+	if(r)
+	{
+		save_name(f,r->name,0);
+		save_all_parameters(f,r->params);
+		putc('\n',f);
+	}
+}
+
+
+void save_all_requests(FILE *f,const request *r)
+{
+	while(r)
+	{
+		save_one_request(f,r);
+		r = r->next;
+	}
+}
+
+void print_one_request(const request *r)
+{
+	save_one_request(stdout,r);
+}
+
+void print_all_requests(const request *r)
+{
+	save_all_requests(stdout,r);
+}
+
+request *read_request_file(const char *fname)
+{
+	extern request *parser_reqs;
+	request *r;
+
+	if(parser(fname,mars.echo) != NOERR)
+	{
+		free_all_requests(parser_reqs);
+		parser_reqs = NULL;
+		return NULL;
+	}
+	else
+	{
+		r = parser_reqs;
+		parser_reqs = NULL;
+		return r;
+	}
+}
+
+
+static request *first;
+static request *last;
+
+static void reqcb(const request *r,int count,char *names[],
+char *vals[],void *data)
+{
+	request *w = clone_one_request(r);
+	int     i;
+	/*request **d = (request**)data;*/
+
+	int *n = (int*)data;
+
+	w->order = (*n)++;
+	for(i=0;i<count;i++)
+	{
+		/* printf("%s = %s\n",names[i],vals[i]); */
+		if(vals[i])
+			put_value(w,names[i],vals[i],false,false,false);
+	}
+
+	if(first == NULL)
+		first = w;
+	else
+		last->next = w;
+	last = w;
+}
+
+request *unwind_one_request(const request *r)
+{
+
+	int n = 0;
+	first = last = NULL;
+	names_loop(r,reqcb,&n);
+	return first;
+}
+
+request *custom_unwind_one_request(const request *r,int cnt,char *names[])
+{
+	int n = 0;
+	first = last = NULL;
+	values_loop(r,cnt,names,reqcb,&n);
+	return first;
+}
+
+void names_loop(const request *r,loopproc proc,void *data)
+{
+	if(NUMBER(names) != NUMBER(cmpnames))
+	{
+		marslog(LOG_EROR,"MARS internal error in request.c");
+		marslog(LOG_EROR,"NUMBER(names) [%d] != NUMBER(cmpnames) [%d]",NUMBER(names),NUMBER(cmpnames)); 
+		marslog(LOG_EROR,"Exiting...");
+		marsexit(1);
+	}
+	values_loop(r,NUMBER(names),names,proc,data);
+}
+
+static void cntcb(const request *r,int count,char *names[],
+char *vals[],void *data)
+{
+	int *n = (int*)data;
+	(*n)++;
+}
+
+boolean all_is_used(const request *r)
+{
+	static const request *r_keep  = 0;
+	static       boolean     all     = false;
+	       const char    *s       = 0;
+	             int      i       = 0;
+
+	if(r_keep == r)
+		return all;
+	r_keep = r;
+
+	for(i=0;i<NUMBER(names);i++)
+		if((s = get_value(r,names[i],0)) != NULL)
+			if(EQ(s,"ALL"))
+			{
+				all = true;
+				break;
+			}
+
+	return all;
+}
+
+int count_fields(request *r)
+{
+	int  n = 0;
+	const char *s = get_value(r,"EXPECT",0);
+
+	if(s != NULL)
+		return atol(s);
+
+	if(is_bufr(r) || image(r) ) return 0;
+
+	if(fetch(r))
+		return 0;
+
+	if(all_is_used(r))
+		return 0;
+
+	if (is_netcdf(r))
+		return 1;
+
+	if (is_odb(r))
+		return 0; 
+
+	names_loop(r,cntcb,&n);
+
+	return n;
+}
+
+int count_fields_in_request(request *r)
+{
+	int  n = 0;
+
+	if(is_bufr(r) || image(r) ) return 0;
+
+	if(fetch(r))
+		return 0;
+
+	if(all_is_used(r))
+		return 0;
+
+	if (is_netcdf(r))
+		return 1;
+
+	if (is_odb(r))
+		return 0; 
+
+	names_loop(r,cntcb,&n);
+
+	return n;
+}
+
+
+int reqcmp(const request *a,const request *b,boolean verbose)
+{
+	int n;
+	if(a && b)
+	{
+		parameter *p = a->params;
+
+		while(p)
+		{
+			const char *s = get_value(a,p->name,0);
+			const char *t = get_value(b,p->name,0);
+
+			if(s && t)
+			{
+				if(is_number(s))
+					n = atof(s) - atof(t);
+				else
+					n = strcmp(s,t);
+
+				if(n) {
+					if(verbose)
+						marslog(LOG_INFO,
+						    "Compare failed: %s -> %s <> %s",p->name,s,t);
+					return n;
+				}
+			}
+
+			p = p->next;
+		}
+	}
+	return 0;
+}
+
+typedef struct {
+	const   request *r;
+	int     order;
+	int     cnt;
+	int     fguess;
+	int     fcast;
+} s_order;
+
+static void ordercb(const request *r,int count,char *names[],
+char *vals[],void *data)
+{
+	s_order *o = (s_order *)data;
+	char buf[10];
+	char buf2[10];
+	int i;
+	const char *t;
+	char *s;
+	boolean ok = true;
+
+	for(i=0;i<count && ok;i++)
+		if((s = vals[i]) && (t = get_value(o->r,names[i],0)))
+		{
+			if(o->fguess && o->fcast)
+			{
+				boolean isjul = false;
+				int date = name_to_date(vals[DATE_INDIX],false,&isjul);
+				int time = atol(vals[TIME_INDIX])/ 100;
+				int step = atol(vals[STEP_INDIX]);
+
+				if(step == 0) step = 6;
+				time -= step;
+
+				while(time < 0)
+				{
+					time += 24;
+					date -= 1;
+				}
+
+				if(EQ(names[i],"DATE"))
+				{
+
+					long n = name_to_date(t,false,&isjul);
+					sprintf(buf2,"%ld",julian_to_date(n,mars.y2k));
+					t = buf2;
+
+					sprintf(buf,"%ld",julian_to_date(date,mars.y2k));
+					s = buf;
+				}
+
+				if(EQ(names[i],"TIME"))
+				{
+					sprintf(buf,"%d",time*100);
+					s = buf;
+				}
+
+				if(EQ(names[i],"STEP"))
+				{
+					sprintf(buf,"%d",step);
+					s = buf;
+				}
+
+			}
+
+			if(!cmpnames[i](s,t))
+				ok = false;
+
+			if(!ok && mars.debug)
+				marslog(LOG_DBUG,"%s different %s <> %s",names[i],s,t);
+		}
+
+
+	if(ok) o->order = o->cnt;
+
+	o->cnt++;
+
+}
+
+int field_order(const request *r,const request *u)
+{
+	s_order o;
+	const char    *kindr = get_value(r,"TYPE",0);
+	const char    *kindu = get_value(u,"TYPE",0);
+
+	o.r      = u;
+	o.order  = -1;
+	o.cnt    = 0;
+	o.fguess = kindr?strcmp(kindr,"FG")==0:false;
+	o.fcast  = kindu?strcmp(kindu,"FC")==0:false;
+
+	names_loop(r,ordercb,&o);
+
+	if(mars.debug) {
+		marslog(LOG_DBUG,"Order : %d",o.order);
+		print_all_requests(r);
+		print_all_requests(u);
+	}
+
+	return o.order;
+}
+
+void valcpy(request *a,request *b,char *aname,char *bname)
+{
+	parameter *p;
+	if(a && b && (p = find_parameter(b,bname)) )
+	{
+		boolean z = false;
+		value *v = p->values;
+		while(v)
+		{
+			put_value(a,aname,v->name,z,false,false);
+			z = true;
+			v = v->next;
+		}
+	}
+}
+
+void reqcpy(request *a,const request *b)
+{
+	if(a && b)
+	{
+		parameter *p = b->params;
+
+		while(p)
+		{
+			boolean b = false;
+			value *v = p->values;
+
+			while(v)
+			{
+				put_value(a,p->name,v->name,b,false,false);
+				b = true;
+				v = v->next;
+			}
+
+			if(p->subrequest) set_subrequest(a,p->name,p->subrequest);
+
+			/* For marsgen */
+			{
+				parameter* q = find_parameter(a, p->name);
+				if(q) {
+					free_all_values(q->default_values);
+					q->default_values = clone_all_values(p->default_values);
+				}
+			}
+
+			p = p->next;
+		}
+	}
+}
+
+static void _reqmerge(parameter *pa,const parameter *pb,request *a)
+{
+	const value *vb = pb->values;
+
+	if(pa->name != pb->name)
+		return;
+
+	while(vb) {
+		value   *va   = pa->values;
+		value   *last = 0;
+		const char    *nb   = vb->name;
+		boolean add   = true;
+			
+		while(va)
+		{
+			if(va->name == nb)
+			{
+				add = false;
+				break;
+			}
+
+			last = va;
+			va   = va->next;
+		}
+
+		if(add)
+		{
+			value* v = new_value(strcache(nb));
+			if(last) last->next = v; else pa->values = v;
+			pa->count = 0;
+		}
+
+		vb = vb->next;
+	}
+
+	if(pb->subrequest) 
+		set_subrequest(a,pb->name,pb->subrequest);
+}
+
+/* Fast version if a && b same */
+
+static boolean _reqmerge1(request *a,const request *b)
+{
+	parameter *pa = a->params;
+	const parameter *pb = b->params;
+
+	while(pa && pb)
+	{
+		if(pa->name != pb->name)
+			return false;
+
+		_reqmerge(pa,pb,a);
+
+		pa = pa->next;
+		pb = pb->next;
+	}
+
+	return (pa == NULL && pb == NULL);
+}
+
+static void _reqmerge2(request *a,const request *b)
+{
+	const parameter *pb = b->params;
+
+	while(pb)
+	{
+		parameter* pa = find_parameter( a, pb->name);
+
+		if(pa == NULL)
+		{
+			value *v = pb->values;
+			while(v)
+			{
+				put_value(a,pb->name,v->name,true,true,false);
+				v = v->next;
+			}
+			if(pb->subrequest) set_subrequest(a,pb->name,pb->subrequest);
+		}
+		else
+		{
+			_reqmerge(pa,pb,a);
+		}
+
+
+		pb = pb->next;
+	}
+}
+
+void reqmerge(request *a,const request *b)
+{
+	if(a && b)
+	{
+		if(!_reqmerge1(a,b))
+			_reqmerge2(a,b);
+	}
+}
+
+void unset_param_value(request *r, const char *param, const char *par_val)
+/*
+    Removes value from the parameter in the request
+*/
+{
+	parameter * p;
+	value * v, * q = NULL;
+
+	/* First check if the parameter exists in the request */
+
+	p = find_parameter( r, param);
+	if ( p == NULL ) return;
+
+	/* If it does, make sure its values have been counted */
+
+	if ( !p->count ) count_values( r, param);
+
+	/* Run through the values in the parameter */
+
+	v = p->values;
+	while(v)
+	{
+		if ( EQ( v->name, par_val) )          /* if value matchs input */
+		{
+			if (q) q->next = v->next;        /* delete value from param */
+			else p->values = v->next;
+			free_one_value(v);
+
+			p->count--;                      /* Update value counter */
+			return;
+		}
+		q = v;
+		v = v->next;
+	}
+
+	return;
+}
+
+/* Quick and dirty hack */
+request *string2request(const char *p)
+{
+	request *r;
+	char *tmp = marstmp();
+	FILE *f = fopen(tmp,"w");
+
+	if(f == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"%s",tmp);
+		return NULL;
+	}
+
+	fprintf(f,"%s\n",p);
+	fclose(f);
+
+	r = read_request_file(tmp);
+	unlink(tmp);
+	return r;
+}
+
+void value2string(value *r,char *buf)
+{
+	if(r) value2string(r->other_names,buf);
+	while(r)
+	{
+		strcat(buf,r->name);
+		if(r->next) strcat(buf,"/");
+		r = r->next;
+	}
+}
+
+
+void parameter2string(parameter *r,char *buf)
+{
+	char tmp[80];
+
+	while(r)
+	{
+		if(mars.debug || *r->name != '_')
+		{
+			sprintf(tmp," ,\n    %-10s = ",r->name);
+			strcat(buf,tmp);
+			value2string(r->values,buf);
+		}
+		r = r->next;
+	}
+	strcat(buf,"\n");
+}
+
+
+char *request2string(const request *r)
+{
+	static char *buf = NULL;
+	file_offset n;
+
+	char *tmp = marstmp();
+	FILE *f = fopen(tmp,"w");
+
+	if(f == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"%s",tmp);
+		return NULL;
+	}
+	save_all_requests(f,r);
+	fclose(f);
+
+	f = fopen(tmp,"r");
+	if(f == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"%s",tmp);
+		return NULL;
+	}
+
+	if(buf) free(buf);
+
+	fseek(f,0,2);
+	n = ftell(f);
+	rewind(f);
+	buf = (char*)MALLOC(n+2);
+
+	n = fread(buf,1,n,f);
+	buf[n] = 0;
+
+	fclose(f);
+
+	unlink(tmp);
+
+	return buf;
+#if 0
+	buf[0] = 0;
+
+	if(r)
+	{
+		strcat(buf,r->name);
+		parameter2string(r->params,buf);
+		/* strcat('\n'); */
+		return buf;
+	}
+	return "#empty request";
+#endif
+}
+
+
+/*
+	MARS specific language and test files 
+*/
+
+request *mars_language(void)
+{
+	static request *lang = NULL;
+	if(lang == NULL)
+		lang = read_language_file(mars.langfile);
+	return lang;
+}
+
+rule *mars_rules(void)
+{
+	static rule    *test = NULL;
+	if(test == NULL)
+		test = read_check_file(mars.testfile);
+	return test;
+}
+
+
+request *build_mars_request(request *r)
+{
+	request *lang;
+	rule    *test;
+	request *s = r;
+	long    flags;
+
+	flags = expand_flags(EXPAND_MARS);
+
+	if((lang = mars_language()) == NULL)
+		return NULL;
+
+	if((test = mars_rules()) == NULL)
+		return NULL;
+
+	r = expand_all_requests(lang,test,r);
+
+	expand_flags(flags);
+
+	free_all_requests(s);
+
+	mars.number_of_requests = count_requests(r);
+
+	return r;
+}
+
+request *read_mars_request(const char *fname)
+{
+	request *r = read_request_file(fname);
+
+	return build_mars_request(r);
+}
+
+err handle_default(request *r,void *data)
+{
+	reset_language(mars_language());
+	return 0;
+}
+
+void add_subrequest(request *r,const char *name,const request *s)
+{
+	parameter *p = find_parameter(r,name);
+
+	if(p && p->subrequest)
+		set_subrequest(p->subrequest,"next",s);
+	else
+		set_subrequest(r,name,s);
+}
+
+void set_subrequest(request *r,const char *name,const request *s)
+{
+	parameter *p;
+	if(!r || !name) return;
+	if (s == NULL)
+	{
+		unset_value(r, name);
+		return;
+	}
+	put_value(r,name,"#",false,false,false);
+	p = find_parameter(r,name);
+	free_all_requests(p->subrequest);
+
+	/* p = find_parameter(r,name); */
+	p->subrequest = clone_all_requests(s);
+}
+
+request *get_subrequest(const request *r,const char *name,int n)
+{
+	if(!name) return NULL;
+	else 
+	{
+		parameter *p = find_parameter(r,name);
+		int i = 0;
+		request *s;
+
+		r = p?p->subrequest:NULL;
+		while(r && (i < n))
+		{
+			p = find_parameter(r,"next");
+			r = p?p->subrequest:NULL;
+			i++;
+		}
+
+		s = clone_all_requests(r);
+		unset_value(s,"next");
+		return s;
+	}
+}
+
+static struct {
+	char *param;
+	char *title;
+} messages[] =  {
+	{"PARAM",      "parameter", },
+	{"LEVELIST",   "level", },
+	{"DATE",       "date", },
+	{"TIME",       "time", },
+	{"REFERENCE",  "reference", },
+	{"STEP",       "step", },
+	{"DIAGNOSTIC", "diagnostic", },
+	{"ITERATION",  "iteration", },
+	{"NUMBER",     "number", },
+	{"DOMAIN",     "domain", },
+	{"FREQUENCY",  "frequency", },
+	{"DIRECTION",  "direction", },
+};
+
+void notify_missing_field(const request* r, const char *name)
+{
+	if(mars.infomissing)
+	{
+		int i = 0;
+		char tmp[80];
+		char buf[10240];
+		const char *p = 0;
+		char c = ' ';
+
+		strcpy(buf,"Missing");
+		for(i = 0; i < NUMBER(messages); i++)
+			if((p = get_value(r,messages[i].param,0)) != NULL)
+			{
+				sprintf(tmp,"%c%s %s",c,messages[i].title,p);
+				c=',';
+				strcat(buf,tmp);
+			}
+
+		marslog(LOG_INFO,"%s",buf);
+	} 
+}
+
+void sort_request(const request *r,int count,char *names[], char *vals[],void *data)
+{
+	int i;
+	request **x = (request**)data;
+	for(i=0;i<count;i++)
+		 if(vals[i]) add_unique_value(*x,names[i],"%s",vals[i]);
+}
+
+
+int count_requests(const request* r)
+{
+	int n = 0;
+
+	while(r)
+	{
+		n++;
+		r=r->next;
+	}
+	return n;
+
+}
diff --git a/src/libMars-ecregrid/restricted.c b/src/libMars-ecregrid/restricted.c
new file mode 100644
index 0000000..9696816
--- /dev/null
+++ b/src/libMars-ecregrid/restricted.c
@@ -0,0 +1,55 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+#define H(x) (1<<(x))
+
+typedef struct station {
+	int ident;
+	int time_restricted;
+} station;
+
+static station restrictions[] = 
+{
+#include "restricted.h"
+};
+
+
+static int compare(const void *x1,const void *x2)
+{
+	return ((station*)x1)->ident - ((station*)x2)->ident;
+}
+
+int restricted(void *p)
+{
+	packed_key *k = (packed_key*)p;
+	station st;
+	station *s;
+	int i;
+
+	if(KEY_SUBTYPE(k) > 4) return 0;
+
+	st.ident = 0;
+
+	for(i=0;i<5;i++)
+		st.ident = st.ident*10 + (KEY_IDENT(k)[i]-'0');
+		
+	if(s = bsearch(&st,restrictions,NUMBER(restrictions),sizeof(station),compare))
+	{
+		if( (s->time_restricted & (1<<KEY_HOUR(k))) != 0)
+		{
+/* marslog(LOG_INFO,"RESTRICTED ident: %d, rest time: %04x, obs time: %04x, real obs key time: %d",st.ident,s->time_restricted,1<<KEY_HOUR(k),KEY_HOUR(k)); */
+			return 1;
+		}
+/* marslog(LOG_INFO,"INCLUDED ident: %d, rest time: %04x, obs time: %04x, real obs key time: %d",st.ident,s->time_restricted,1<<KEY_HOUR(k),KEY_HOUR(k)); */
+	}
+	return 0;
+}
diff --git a/src/libMars-ecregrid/restricted.h b/src/libMars-ecregrid/restricted.h
new file mode 100644
index 0000000..a8a157e
--- /dev/null
+++ b/src/libMars-ecregrid/restricted.h
@@ -0,0 +1,185 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#define TYPE_1 (H(1)|H(2)|H(4)|H(5)|H(7)|H(8)|H(10)|H(11)|H(13)|H(14)|H(16)|H(17)|H(19)|H(20)|H(22)|H(23))
+#define TYPE_2 (H(0)|H(1)|H(2)|H(3)|H(4)|H(5)|H(6)|H(7)|H(8)|H(9)|H(10)|H(11)|H(12)|H(13)|H(14)|H(15)|H(16)|H(17)|H(18)|H(19)|H(20)|H(21)|H(22)|H(23))
+{ 10004, TYPE_1, }, /* SNDL41 */
+{ 10005, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10007, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10015, TYPE_1, }, /* SNDL41 */
+{ 10020, TYPE_1, }, /* SNDL41 */
+{ 10022, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10026, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10035, TYPE_1, }, /* SNDL41 */
+{ 10042, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10044, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10046, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10055, TYPE_1, }, /* SNDL41 */
+{ 10091, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10093, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10113, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10124, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10129, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10130, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10131, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10139, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10147, TYPE_1, }, /* SNDL41 */
+{ 10152, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10156, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10161, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10162, TYPE_1, }, /* SNDL41 */
+{ 10168, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10170, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10177, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10180, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10184, TYPE_1, }, /* SNDL41 */
+{ 10193, TYPE_2, }, /* SIDL44  SMDL44  SNDL44 */
+{ 10200, TYPE_1, }, /* SNDL41 */
+{ 10215, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10224, TYPE_1, }, /* SNDL41 */
+{ 10235, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10249, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10253, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10261, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10264, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10267, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10268, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10270, TYPE_1, }, /* SNDL41 */
+{ 10277, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10280, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10289, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10291, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10305, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10315, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10317, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10321, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10325, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10338, TYPE_1, }, /* SNDL41 */
+{ 10348, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10356, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10359, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10361, TYPE_1, }, /* SNDL41 */
+{ 10365, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10368, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10376, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10379, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10381, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10382, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10384, TYPE_1, }, /* SNDL41 */
+{ 10385, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10389, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10393, TYPE_1, }, /* SNDL41 */
+{ 10396, TYPE_2, }, /* SIDL45  SMDL45  SNDL45 */
+{ 10400, TYPE_1, }, /* SNDL41 */
+{ 10406, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10410, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10418, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10427, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10430, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10432, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10435, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10438, TYPE_1, }, /* SNDL41 */
+{ 10444, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10449, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10452, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10453, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10454, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10458, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10460, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10466, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10469, TYPE_1, }, /* SNDL41 */
+{ 10471, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10474, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10480, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10488, TYPE_1, }, /* SNDL41 */
+{ 10490, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10496, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10499, TYPE_2, }, /* SIDL42  SMDL42  SNDL42 */
+{ 10501, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10506, TYPE_1, }, /* SNDL41 */
+{ 10513, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10515, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10517, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10526, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10532, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10535, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10542, TYPE_2, }, /* SIDL46  SMDL46  SNDL46 */
+{ 10544, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10546, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10548, TYPE_1, }, /* SNDL41 */
+{ 10552, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10554, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10555, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10557, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10558, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10564, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10565, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10567, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10569, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10574, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10575, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10577, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10578, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10579, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10582, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10591, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10609, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10615, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10616, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10635, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10637, TYPE_1, }, /* SNDL41 */
+{ 10645, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10648, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10655, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10658, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10671, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10675, TYPE_2, }, /* SIDL47  SMDL47  SNDL47 */
+{ 10685, TYPE_1, }, /* SNDL41 */
+{ 10688, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10704, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10706, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10708, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10724, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10727, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10729, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10735, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10736, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10738, TYPE_1, }, /* SNDL41 */
+{ 10739, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10742, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10761, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10763, TYPE_1, }, /* SNDL41 */
+{ 10776, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10777, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10788, TYPE_1, }, /* SNDL41 */
+{ 10791, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10796, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10803, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10805, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10815, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10818, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10836, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10838, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10850, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10852, TYPE_1, }, /* SNDL41 */
+{ 10865, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10870, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10875, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10895, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10908, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10929, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10946, TYPE_1, }, /* SNDL41 */
+{ 10948, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10961, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10962, TYPE_2, }, /* SIDL43  SMDL43  SNDL43 */
+{ 10963, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10980, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+{ 10982, TYPE_2, }, /* SIDL48  SMDL48  SNDL48 */
+
diff --git a/src/libMars-ecregrid/retrieve.c b/src/libMars-ecregrid/retrieve.c
new file mode 100644
index 0000000..1d6c72c
--- /dev/null
+++ b/src/libMars-ecregrid/retrieve.c
@@ -0,0 +1,632 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+extern base_class *targetbase;
+
+static int visited = 0;
+
+boolean enough(request *r, int count)
+{
+	static int  need   = 0;
+	static boolean init   = false;
+	static boolean fields = false;
+	static request *p = NULL;
+
+	if(p != r || !init)
+	{
+		p = r;
+		need = count_fields(r);
+		if(is_bufr(r))
+			fields = false;
+		else if(fetch(r))
+			fields = false;
+		else if(is_netcdf(r))
+			fields = false;
+		else if(is_odb(r))
+			fields = false;
+		else
+			fields = true;
+		init = true;
+
+	}
+
+	if(!fields && count>=need && count > 0)
+		return true;
+
+    if( need != 0 && count == need)
+        return true;
+
+	/* In case of ALL */
+	if( need == 0 && count != 0)
+		return true;
+
+	return false;
+}
+
+request *findbase(const char *name)
+{
+	request *t = 0;
+	request *s = mars.setup;
+
+	if(!name) return 0;
+
+	while(s && !t)
+	{
+		if(EQ(s->name,"database"))
+		{
+			const char *p ; int i = 0;
+					
+			while( (p = get_value(s,"name",i++)) && !t )
+					if(strcasecmp(p,name) == 0) 
+						t = s;
+		}
+		s = s->next;
+	}
+
+	if(t == 0)
+	{
+		request *s = mars.setup;
+
+		marslog(LOG_EROR,"The database '%s' is not known",name);
+		marslog(LOG_EROR,"The valid values are: ");
+
+		while(s)
+		{
+			if(EQ(s->name,"database"))
+			{
+				const char *p ; int i = 0;
+				while( (p = get_value(s,"name",i++)) )
+					marslog(LOG_INFO,"%s",p);
+			}
+			s = s->next;
+		}
+	}
+
+	return t;
+}
+
+database *openbase(request *s,request *r,const char **name,request **cache,int  mode)
+{
+	request *env = get_environ();
+	const char    *c   = get_value(s,"class",0);
+	const char    *n   = get_value(s,"name" ,0);
+	const char    *x   = get_value(s,"cache",0);
+	const char    *a   = get_value(s,"active",0);
+	database *base = 0;
+
+	if(a && EQ(a,"false")) {
+		marslog(LOG_EROR,"Database %s is not active",n);
+		return NULL;
+	}
+
+	*name  = n;
+	*cache = NULL;
+
+	qmonitor("open %s for %s",n,mode == READ_MODE?"read":"write");
+	base  = database_open(base_class_by_name(c),n,r,env,mode);
+
+
+	if(base && !database_check(base,r))
+	{
+		database_close(base);
+		qmonitor("close %s",n);
+		return NULL;
+	}
+
+	*cache = findbase(x);
+
+	return base;
+}
+
+
+static err retrieve(request *r,request* setup,database *target,int *cnt, 
+	postproc pproc)
+{
+	request      *w;
+	int		     ret    = NOERR;
+	long         length;
+	boolean      done = false;
+	const char   *name;
+	database     *base  = NULL;
+	database     *cache = NULL;
+	request      *cachesetup = 0;
+	const char   *cachename = 0;
+	boolean      fields;
+	long64       total        = 0;
+	long64       total_target = 0;
+
+	/* Structure to return 2 or more fields from post-processing.
+	   Most times (ie, scalar post-processing), only 1 field is returned */
+	static ppbuffer_t *pp       = NULL;
+	static int        nbuffers  = 2;
+	static long       buflen    = 0;
+	       int        i         = 0; 
+	static boolean    inform    = true;
+
+	buflen = mars.readany_buffer_size;
+
+	if(ppestimate() > buflen)
+	{
+		buflen = ppestimate() + 1024*1024;
+		if(inform)
+		{
+			marslog(LOG_WARN,"Using large buffer for post-processing (%sbytes)",bytename(buflen));
+			inform = false;
+		}
+	}
+
+	if(pp == NULL)
+	{
+		pp = reserve_mem(sizeof(ppbuffer_t)*nbuffers);	
+		for(i = 0; i<nbuffers; ++i)
+		{
+			pp[i].buffer=NULL;
+			pp[i].buflen=buflen;
+			pp[i].outlen=0;
+		}
+	}
+
+	for(i=0; i<nbuffers; ++i)
+	{
+		if(pp[i].buflen < buflen)
+		{
+			if(pp[i].buffer) release_mem(pp[i].buffer);
+			pp[i].buflen = buflen;
+			pp[i].buffer = NULL;
+		}
+
+		if(pp[i].buffer == NULL)
+		{
+			marslog(LOG_DBUG,"Work buffer is %d",pp[i].buflen);
+			pp[i].buffer = reserve_mem(pp[i].buflen);
+		}
+	}
+
+	base = openbase(setup,r,&name,&cachesetup,READ_MODE);
+	if(!base) return TOO_SHORT_ERR;
+
+	/* rewind target */
+	database_control(target,CNTL_REWIND,NULL,0);
+
+	visited++;
+
+	ret  = NOERR;
+	*cnt = 0;
+
+	if(is_bufr(r))
+	{
+		w      = NULL;
+		cache  = NULL;
+		fields = false;
+
+		/* For AI or AF we receive metadata request from DHS */
+		if(feedback(r))
+			w = clone_one_request(r);
+	}
+	else if(fetch(r))
+	{
+		fields = false;
+		w      = clone_one_request(r);
+		cache  = NULL;
+	}
+	else if(is_netcdf(r))
+	{
+		fields = false;
+		w      = clone_one_request(r);
+		cache  = NULL;
+	}
+	else if(is_odb(r))
+	{
+		fields = false;
+		w      = clone_one_request(r);
+		cache  = NULL;
+	}
+	else
+	{
+		fields = true;
+		w      = clone_one_request(r);
+		cache  = NULL;
+	}
+
+	while(!done)
+	{
+		long   len = pp[0].buflen;
+		char   *buffer = pp[0].buffer;
+		long   n       = 0;
+
+		length = pp[0].buflen;
+
+		ret = database_read(base,w,buffer,&length);
+
+		switch(ret)
+		{
+		case NOERR:
+
+			total += length;
+
+			/* open the cache if needed */
+			if(cachesetup && !cache)
+			{
+
+				if(!is_bufr(r))
+				{
+					request *dummy;
+					cache = openbase(cachesetup,r,&cachename, &dummy,WRITE_MODE);
+				}
+
+				/* don't try to open more than once */
+
+				cachesetup = NULL;
+			}
+
+			/* write to cache before pproc */
+
+			if(cache) {
+				long len = length;
+				if(database_write(cache,w,buffer,&len) != 0)
+				{
+					database_close(cache);
+					cache = NULL;
+				}
+			}
+
+			pp[0].inlen  = length;
+			pp[0].outlen = pp[0].buflen;
+			n = 0;
+			ret = pproc(pp,&n);
+			length = pp[0].outlen;
+			buffer = pp[0].buffer;
+
+			if(ret == 0)
+			{
+				int i = 0;
+				for(i = 0; i<n; ++i)
+				{
+					long written = pp[i].outlen;
+					if(fields)
+						grib_to_request(w,pp[i].buffer,written);
+					ret = database_write(target,w,pp[i].buffer,&written);
+					if(ret == NOERR)
+						(*cnt)++;
+					else 
+						done = true;
+					total_target += written;
+				}
+			}
+			else 
+			{
+				if(ret == BUF_TO_SMALL)
+				{
+					marslog(LOG_WARN,
+						"Buffer is too small (%d bytes, %d needed. Retrying)",
+						buflen,length);
+					release_mem(buffer);
+					buffer = NULL;
+					buflen = length;
+				}
+			
+				done = true;
+			}
+			break;
+
+		case EOF:
+			ret  = 0;
+			done = true;
+			break;
+
+		case BUF_TO_SMALL:
+			marslog(LOG_WARN,
+			    "Buffer is too small (%d bytes, %d needed. Retrying)",
+			    buflen,length);
+			release_mem(buffer);
+			buffer = NULL;
+			buflen = length;
+			done = true;
+			break;
+
+
+		case RETRY_ERR:
+			marslog(LOG_WARN,"Retrying..");
+			(*cnt) = 0;
+			database_control(target,CNTL_REWIND,NULL,0);
+			done = true;
+			break;
+
+		case NOT_FOUND_7777:
+			marslog(LOG_EROR,"Group 7777 not found at the end of GRIB message");
+			database_control(target,CNTL_ERROR,&ret,sizeof(ret));
+			done = true;
+			break;
+
+		case POSTPROC_ERROR:
+			marslog(LOG_EROR,"Error in interpolation. Exit");
+			database_control(target,CNTL_ERROR,&ret,sizeof(ret));
+			done = true;
+			break;
+
+		default:
+			marslog(LOG_DBUG,"Get error %d while reading data",ret);
+			done = true;
+			break;
+		}
+	}
+
+	/* ppdone(); */
+
+	for(i=0; i<nbuffers; ++i)
+	{
+		if(pp[i].buffer) release_mem(pp[i].buffer);
+		pp[i].buffer = NULL;
+	}
+
+	free_all_requests(w);
+
+	if(ret == NOERR)
+	{
+
+		if( enough(r,*cnt) )
+		{
+			if(fetch(r))
+			{
+				/* some message here */
+			}
+			if(observation(r) || track(r))
+			{
+				int in,out;
+				ppcount(&in,&out);
+				marslog(LOG_INFO,"%d reports retrieved from '%s'",in,name);
+				marslog(LOG_INFO,"%d reports left after filtering",out);
+				log_statistics("reports","%d",out);
+			}
+			else if(feedback(r) || bias(r))
+			{
+				marslog(LOG_INFO,"%d reports retrieved from '%s'",*cnt,name);
+				log_statistics("reports","%d",*cnt);
+			}
+			else if(is_odb(r))
+			{
+				marslog(LOG_INFO,"%d ODB message%s retrieved from '%s'",*cnt,*cnt==1?"":"s",name);
+				log_statistics("odbs","%d",*cnt);
+			}
+			else
+			{
+				marslog(LOG_INFO,"%d field%s retrieved from '%s'",*cnt,*cnt==1?"":"s",name);
+				log_statistics("fields","%d",*cnt);
+			}
+
+			log_statistics("database","%s",name);
+			log_statistics("bytes","%lld",total);
+			log_statistics("written","%lld",total_target);
+		}
+		else
+			ret = TOO_SHORT_ERR; /* we don't have enough data */
+
+	}
+
+	if(base)  {
+		database_close(base);
+		qmonitor("close %s",name);
+	}
+	if(cache) {
+		database_close(cache);
+		qmonitor("close %s",cachename);
+	}
+
+	return ret;
+}
+
+void mars_task(void)
+{
+}
+
+
+static err visit_database(request *r,request *s,
+	database *target,int need,int* cnt, postproc pproc)
+{
+	err e = 0;
+	char buf[1024];
+	timer *t;
+	int retry = 0;
+	int slp = 2;
+	const char *dbname = get_value(s,"name",0);
+
+	sprintf(buf,"Visiting %s",dbname);
+	t=get_timer(buf,NULL,true);
+
+	timer_start(t);
+	do { 
+		*cnt = need;
+		marslog(LOG_DBUG,"Visiting database '%s'",dbname);
+		e  = retrieve(r,s,target,cnt, pproc); 
+		if(e == RETRY_ERR)
+		{
+			if(retry<mars.maxretries)
+			{
+				retry++;
+				marslog(LOG_WARN,"Sleeping %d minutes",slp);
+				sleep(slp*60);
+			}
+			else
+			{
+				e = -2;
+				marslog(LOG_WARN,"Giving up after %d retries",retry);
+			}
+		}
+
+		if(e == RETRY_FOREVER_ERR)
+		{
+			if(slp<20) 
+				slp += 2;
+			marslog(LOG_WARN,"Sleeping %d minutes",slp);
+			sleep(slp*60);
+		}
+
+	} while(e == BUF_TO_SMALL || e == RETRY_ERR || e == RETRY_FOREVER_ERR);
+	timer_stop(t,0);
+
+	return e;
+}
+
+err handle_retrieve(request *r,void *data)
+{
+	int need = count_fields(r);
+	int cnt  = 0;
+	database *target;
+	err e,f;
+	request *u   = r->next;
+	request *env = get_environ();
+	request *s   = mars.setup;
+	int bases = count_values(r,"DATABASE");
+	postproc  pproc;
+	boolean isbufr = is_bufr(r);
+	boolean fields = !isbufr && !fetch(r) && !image(r) && !is_odb(r);
+
+	const char *p      = get_value(r,"EXPECT",0);
+	boolean    expect     = p?atol(p):0;
+	boolean  expect_any   = (p && (atol(p) == 0));
+
+	visited = 0;
+
+	if(expect_any)
+	{
+		marslog(LOG_INFO,"Requesting any number of %s (request describes %d)",fields?"fields":"observations",count_fields_in_request(r));
+	}
+	else if(fields)
+	{
+		if(all_is_used(r))
+		{
+			marslog(LOG_WARN,"Cannot compute number of fields from request.");
+			marslog(LOG_WARN,"Try to avoid the use of the value 'ALL'");
+		}
+		else
+		{
+			if(need == 0)
+			{
+				marslog(LOG_WARN,"The request does not represent any field");
+				marslog(LOG_WARN,"Inform the MARS group if you think it is unusual");
+			}
+			else
+			{
+				marslog(LOG_INFO,"Requesting %d field%s",need,need==1?"":"s");
+			}
+		}
+	}
+
+	e = -1;
+	target = database_open(targetbase,NULL,r,env,WRITE_MODE);
+	if(target == NULL)
+		return -1;
+
+
+	if(isbufr && mars.bufr_empty_target)
+	{
+		/* For obs, make sure we have at least an empty file */
+		long length = 0;
+		database_write(target,0,0,&length); 
+	}
+
+	r->next = NULL; /* avoid sending to much on the net */
+
+	if((e = ppinit(r,&pproc)) != NOERR)
+	{
+		marslog(LOG_WARN,"Error initialising post-processing");
+		marslog(LOG_WARN,"Some values provided might not be used");
+	}
+
+	if(bases != 0)
+	{
+		int i;
+		for(i=0;i<bases;i++)	
+		{
+			const char *b = get_value(r,"DATABASE",i);
+			request *t    = findbase(b);
+			if(t)
+			{
+				int last = i==(bases-1);
+				boolean save = mars.infomissing;
+
+				if(last) mars.infomissing=true;
+				e = visit_database(r,t,target,need,&cnt,pproc);
+				mars.infomissing=save;
+				if(e == NOERR) break;
+			}
+		}
+	}
+	else
+	{
+		while(s)
+		{
+			if(EQ(s->name,"database"))
+			{
+				const char *p = get_value(s,"visit",0);
+				if(p == 0 || !EQ(p,"false"))
+				{
+					e = visit_database(r,s,target,need,&cnt,pproc);
+					if(e == NOERR) break;
+				}
+			}
+
+			s = s->next;
+		}
+	}
+
+	r->next = u;
+
+	ppdone();
+
+	if((e == EOF) || (e == TOO_SHORT_ERR) )
+	{
+
+		if(!enough(r,cnt) && (is_bufr(r) || is_odb(r)) && visited > 0)
+		{
+			e = NOERR;
+		} 
+		else if(!enough(r,cnt))
+		{
+			const char* expect = get_value(r,"EXPECT",0);
+			if(expect == NULL || atol(expect) != 0)
+			{
+				if(all_is_used(r))
+					marslog(LOG_EROR,"MARS considers %d fields retrieved are not enough",cnt);
+				else
+					marslog(LOG_EROR,"Expected %d, got %d.", need,cnt);
+				e = -1;
+			}
+			else {
+				if(e == TOO_SHORT_ERR)
+				{
+					long length = 0;
+					marslog(LOG_WARN,"No data, but EXPECT was provided");
+					database_write(target,0,0,&length); 
+					e = 0;
+				}
+			}
+		}
+	}
+
+	if(e)
+		database_control(target,CNTL_ERROR,&e,sizeof(e));
+
+	f = database_close(target);
+	if(f && !e) e = f;
+
+	if(visited == 0)
+	{
+		marslog(LOG_EROR,"Could not find a MARS database to perform request");
+		e = -2;
+	}
+
+	if(e) marslog(LOG_EROR,"Request failed");
+
+	return e;
+
+}
diff --git a/src/libMars-ecregrid/rpcmars.x b/src/libMars-ecregrid/rpcmars.x
new file mode 100644
index 0000000..1b94271
--- /dev/null
+++ b/src/libMars-ecregrid/rpcmars.x
@@ -0,0 +1,134 @@
+%#include <stdio.h>
+%#include <rpc/xdr.h>
+#ifdef RPC_HDR
+%typedef char *cache_t;
+%typedef void *void_t;
+#endif
+
+struct value {
+
+%	/*  request part */
+
+	struct value *next;
+	cache_t         name;
+
+%	/* language part */
+
+	struct value     *other_names;
+	struct value     *ref;
+
+#ifdef RPC_HDR
+	struct value     *expand;
+#endif
+
+};
+
+struct request {
+	struct request   *next;
+	struct parameter *params;
+	cache_t         name;
+	cache_t         info;
+	cache_t         kind;
+
+#ifdef RPC_HDR
+	void_t           data; /* user data */
+	long             order;
+#endif
+
+};
+
+struct parameter {
+
+%	/*  request part */
+
+	struct parameter *next;
+	struct value     *values;
+	cache_t         name;
+	int              count;
+	struct request   *subrequest;
+
+%	/* language part */
+
+	struct value     *default_values;
+	struct value     *current_values;
+#ifdef RPC_HDR
+	struct value     *ibm_values;
+	struct request   *interface;
+#endif
+
+
+};
+
+struct netblk {
+	int            vers;
+	int            code;
+	int            error;
+
+    struct request *req;
+    struct request *env;
+
+	int            mode;
+	int            check;
+
+	long           bufsize;
+	opaque         data<>;
+};
+
+struct netlock {
+	string			resource<>;
+	int				mode;
+};
+
+struct cache_index {
+	struct request *index;
+};
+
+#ifdef RPC_XDR
+
+%/* on hp, xdr don't use malloc.... , so let's
+%override the calls */
+
+#ifdef hpux
+%char *_rpc_malloc(int size)
+%{
+%  return (char*)malloc(size);
+%}
+%
+%void _rpc_free(char *p)
+%{
+%  free(p);
+%}
+#endif
+
+%bool_t xdr_cache_t(XDR *xdrs,char **name)
+%{
+%   extern char* strcache();
+%	char *sp = *name;
+%
+%	switch (xdrs->x_op)
+%	{
+%
+%	case XDR_FREE:
+%		if(sp != NULL) strfree(sp);
+%		*name = NULL;
+%		break;
+%
+%	case XDR_ENCODE:
+%		if(sp == NULL) sp = "";
+%		return xdr_string(xdrs,&sp, ~0);
+%		break;
+%
+%	case XDR_DECODE:
+%
+%		if(!xdr_string(xdrs,&sp, ~0))
+%			return FALSE;
+%
+%		*name = strcache(sp);
+%		free(sp);
+%
+%		break;
+%	}
+%	return TRUE;
+%}
+
+#endif
diff --git a/src/libMars/schedule.c b/src/libMars-ecregrid/schedule.c
similarity index 100%
copy from src/libMars/schedule.c
copy to src/libMars-ecregrid/schedule.c
diff --git a/src/libMars-ecregrid/server.c b/src/libMars-ecregrid/server.c
new file mode 100755
index 0000000..584c0c8
--- /dev/null
+++ b/src/libMars-ecregrid/server.c
@@ -0,0 +1,371 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include <signal.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/param.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include "mars.h"
+#ifdef sgi
+#include <bstring.h>
+#endif
+
+static int cnt = 0;     /* Number of kids */
+static int clients = 0; /* Number of clients processed */
+
+static void no_zombies(int sig
+#if defined(__cplusplus) || defined(c_plusplus)
+	,...
+#endif
+)
+{
+	int status;
+	pid_t pid;
+
+
+#ifdef sun_bsd
+	while((pid = wait3(&status,WNOHANG,NULL)) > 0 ) {
+#else
+	pid = wait(&status);
+#endif
+	cnt--;
+	marslog(LOG_DBUG,"Remaining tasks %d",cnt);
+
+
+	if(WIFEXITED(status) && WEXITSTATUS(status))
+	{
+		marslog(LOG_WARN,"task pid %d terminated with exit %d",
+		    pid,WEXITSTATUS(status));
+		if(WEXITSTATUS(status) == 9)
+			marslog(LOG_EXIT,"Exiting...");
+	}
+
+	if(WIFSIGNALED(status))
+	{
+		marslog(LOG_WARN,"task pid %d terminated by signal %d",
+		    pid,WTERMSIG(status));
+
+		/* due to s sgi bug, exit if child is dead ... */
+
+		if(WTERMSIG(status) == SIGBUS || WTERMSIG(status) == SIGSEGV )
+			marslog(LOG_EXIT,"Exiting...");
+	}
+
+	if(WIFSTOPPED(status))
+		marslog(LOG_WARN,"task pid %d stopped by signal %d",
+		    pid,WSTOPSIG(status));
+
+	/* SysV need signal handler to be reinstalled */
+
+#ifdef sun_bsd
+	} /* end of while loop */
+#endif
+	signal(SIGCHLD,no_zombies);
+}
+
+struct sockaddr_in* addr_of(int soc)
+{
+	static struct sockaddr_in sin;
+	marssocklen_t len = sizeof(sin);
+
+	if(getsockname(soc,(struct sockaddr*)&sin,&len) != 0)
+		marslog(LOG_EROR|LOG_PERR,"getsockname");
+	return &sin;
+}
+
+int tcp_server(int port)
+{
+
+	int flg;
+	int s;
+	struct sockaddr_in sin;
+
+#ifdef SO_LINGER
+	struct  linger ling;
+#endif
+
+	s = socket(AF_INET, SOCK_STREAM, 0);
+
+	if (s < 0)
+	{
+		marslog(LOG_EROR|LOG_PERR,"socket");
+		return -1;
+	}
+
+	if(port != 0)
+	{
+		flg = 1 ;
+		if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (msockopt)&flg, sizeof(flg))<0)
+			marslog(LOG_WARN|LOG_PERR,"setsockopt SO_REUSEADDR");
+	}
+
+	flg = 1 ;
+	if(setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (msockopt)&flg, sizeof(flg))<0)
+		marslog(LOG_WARN|LOG_PERR,"setsockopt SO_KEEPALIVE");
+
+
+#if 0
+#ifdef SO_REUSEPORT
+	flg = 1 ;
+	if(setsockopt(s, SOL_SOCKET, SO_REUSEPORT, (msockopt)&flg, sizeof(flg))<0)
+		marslog(LOG_WARN|LOG_PERR,"setsockopt SO_REUSEPORT");
+#endif
+#endif
+
+#ifdef SO_LINGER
+	ling.l_onoff = 0;
+	ling.l_linger = 0;
+	if(setsockopt(s, SOL_SOCKET, SO_LINGER, (msockopt)&ling, sizeof(ling))<0)
+		marslog(LOG_WARN|LOG_PERR,"setsockopt SO_LINGER");
+#else
+#ifdef SO_DONTLINGER
+	if(setsockopt(s, SOL_SOCKET, SO_DONTLINGER, NULL, 0)<0)
+		marslog(LOG_WARN|LOG_PERR,"setsockopt SO_DONTLINGER");
+#endif
+#endif
+
+
+	bzero(&sin, sizeof(struct sockaddr_in));
+	sin.sin_port        = htons(port);
+	sin.sin_family      = AF_INET;
+	sin.sin_addr.s_addr = INADDR_ANY;
+
+	while (bind(s, (struct sockaddr*)&sin, sizeof(struct sockaddr_in)) == -1 )
+	{
+		marslog(LOG_WARN|LOG_PERR,"bind port = %d",port);
+		if(port == 0) {
+			close(s);
+			return -1;
+		}
+		sleep(5);
+	}
+
+	socket_buffers(s);
+
+	if(listen(s, 5)==-1)
+	{
+		close(s);
+		marslog(LOG_EROR|LOG_PERR,"listen");
+		return -1;
+	}
+
+	signal(SIGPIPE,SIG_IGN);
+
+	return s;
+
+}
+
+const char *host_of(struct sockaddr_in* from)
+{
+	struct hostent  *remote;
+
+	remote = gethostbyaddr((char*)&from->sin_addr,
+	    sizeof(from->sin_addr),
+	    from->sin_family);
+
+	if(remote) 
+		return remote->h_name;
+	else 
+		return inet_ntoa(from->sin_addr);
+
+}
+
+int port_of(struct sockaddr_in *from)
+{
+	return ntohs(from->sin_port);
+}
+
+void print_address(const char* name, struct sockaddr_in *from)
+{
+    if(mars.show_hosts)
+    {
+        if(from->sin_family == AF_INET)
+        {
+            char *net = inet_ntoa(from->sin_addr);
+            struct hostent  *remote;
+
+            remote = gethostbyaddr((char*)&from->sin_addr,
+                sizeof(from->sin_addr),
+                from->sin_family);
+
+            if(remote)
+                marslog(LOG_INFO,"%s %s (%s) %d",name,
+                    remote->h_name,net,ntohs(from->sin_port));
+            else
+                marslog(LOG_INFO,"%s %s %d",name,net,ntohs(from->sin_port));
+
+        }
+        else marslog(LOG_INFO,"%s (connection is not from internet) %d",name,from->sin_family);
+    }
+}
+
+void server_run(int port,taskproc task,void *data)
+{
+
+	struct sockaddr_in from;
+	int s;
+	int snew;
+	marssocklen_t fromlen;
+#ifdef SIG_BLOCK 
+	sigset_t set;
+#endif
+
+	/* Start real server */
+
+	s = tcp_server(port);
+	if(s < 0) marslog(LOG_EXIT,"Exiting server");
+
+	/* Dont't create zombies */
+
+	signal(SIGCHLD,no_zombies);
+
+	/* Dont't get killed by pipes */
+	signal(SIGPIPE,SIG_IGN);
+
+	/* Ignore hang up */
+	signal(SIGHUP,SIG_IGN);
+
+	/* loginit(stdout,stdout); */
+	marslog(LOG_INFO,"Starting Server - port %d",port);
+
+	for(;;)
+	{
+
+		fromlen = sizeof(from);
+		if((snew = accept(s, (struct sockaddr*)&from, &fromlen))<0)
+		{
+			if(errno != EINTR)
+				/* Interrupted system call : got on SIGCHLD signals */
+				marslog(LOG_WARN|LOG_PERR,"accept");
+		}
+		else
+		{
+			pid_t child_pid;
+			marslog(LOG_DBUG,"Got connection");
+
+			if(from.sin_family != AF_INET)
+			{
+				marslog(LOG_INFO,"connection is not from internet");
+				close(snew);
+				continue;
+			}
+			else if(mars.debug)
+				print_address("Got tcp connection",&from);
+
+			fflush(0);
+#ifdef SIG_BLOCK 
+            sigemptyset(&set);
+            sigaddset(&set, SIGCHLD);
+            sigprocmask(SIG_BLOCK, &set, NULL);
+#else
+			sighold(SIGCHLD);
+#endif
+
+			if(mars.nofork)
+			{
+				task(snew,1,data);
+				close(snew);
+			}
+			else switch(child_pid = fork())
+			{
+			case 0:
+				close(s);
+				if(mars.show_pid)
+					mars.show_pid = getpid();
+				task(snew,cnt+1,data);
+				marsexit(0);
+				break;
+
+			case -1:
+				marslog(LOG_EROR|LOG_PERR,"Cannot fork");
+				close(snew);
+				break;
+
+			default:
+				cnt++;
+				clients++;
+				close(snew);
+				break;
+			}
+
+			if(mars.clients && (clients == mars.clients))
+			{
+				int status;
+				marslog(LOG_INFO,"%d connection(s) satisfied",clients);
+				marslog(LOG_INFO,"%d outstanding task(s)",cnt);
+				marslog(LOG_INFO,"Waiting for child process id %d to finish",child_pid);
+				waitpid(child_pid,&status,0);
+				marslog(LOG_INFO,"Exiting...");
+				marsexit(0);
+			}
+
+#ifdef SIG_BLOCK 
+			sigprocmask(SIG_UNBLOCK, &set, NULL);  
+#else
+			sigrelse(SIGCHLD);
+#endif
+
+		}
+	}
+}
+
+int server_mode(int *port,char *address)
+{
+	char    me[MAXHOSTNAMELEN];
+	int     s = tcp_server(0); /* 0 means system chooses port */
+	struct hostent *h;
+	struct  sockaddr_in sin;
+	marssocklen_t len = sizeof(sin);
+	int     max = 10;
+	int     cnt = 0;
+
+	while(s<0) {
+		sleep(10);
+		s = tcp_server(0);
+		if(cnt++ > max)
+			return -1;
+	}
+
+	if(getsockname(s,(struct sockaddr*)&sin,&len)<0)
+	{
+		marslog(LOG_EROR|LOG_PERR,"getsockname");
+		close(s);
+		return -1;
+	}
+
+	*port = ntohs(sin.sin_port);
+
+	if(gethostname(me,sizeof(me))<0)
+	{
+		marslog(LOG_EROR|LOG_PERR,"gethostname");
+		close(s);
+		return -1;
+	}
+
+	if((h = gethostbyname(me)) == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"gethostbyname");
+		close(s);
+		return -1;
+	}
+
+	bcopy(h->h_addr_list[0],&sin.sin_addr,h->h_length);
+
+
+	strcpy(address,inet_ntoa(sin.sin_addr));
+
+	return s;
+
+}
diff --git a/src/libMars/service.c b/src/libMars-ecregrid/service.c
similarity index 100%
copy from src/libMars/service.c
copy to src/libMars-ecregrid/service.c
diff --git a/src/libMars-ecregrid/sh2ll.c b/src/libMars-ecregrid/sh2ll.c
new file mode 100644
index 0000000..904ce9f
--- /dev/null
+++ b/src/libMars-ecregrid/sh2ll.c
@@ -0,0 +1,170 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include <errno.h>
+
+err write_fieldset(fieldset *v,database *b)
+{
+	int i;
+	err e = NOERR;
+
+	for(i=0;i<v->count;i++)
+	{
+
+		long length;
+		
+		if(v->fields[i] != NULL)
+		{
+			field *g = get_field(v,i,packed_mem);
+
+			if(g == NULL)
+				return -1;
+
+			if(g != NULL)
+			{
+				const void *buffer = field_message(g,&length);
+				if(!buffer) return -1;
+	
+				if(e = database_write(b,NULL,(char*)buffer,&length))
+					return e;
+
+				release_field(g);
+			}
+		}
+	}
+	return NOERR;
+
+}
+
+err handle_read(request *r,void *data)
+{
+	const char *s     = get_value(r,"FIELDSET",0);
+	const char *f     = no_quotes(get_value(r,"SOURCE",0));
+	const char *c     = no_quotes(get_value(r,"CFSPATH",0));
+	fieldset    *v;
+	boolean     pp = false;
+
+	if(c && f)
+	{
+		marslog(LOG_WARN,"Cannot have CFSPATH and SOURCE together");
+		marslog(LOG_WARN,"Ignoring CFSPATH");
+		c = NULL;
+	}
+
+	if(f && ((strncmp(f,"ec:",3)==0) || (strncmp(f,"ectmp:",6)==0)))
+	{
+		char buf[1024];
+		const char *tmp = marstmp();
+
+		unlink(tmp);
+		sprintf(buf,"$ECFS_SYS_PATH/ecp.p %s %s",f,tmp);
+
+
+		marslog(LOG_INFO,"getting %s from ECFS",f);
+		errno = 0;
+		if(system(buf))
+		{
+			marslog(LOG_EROR|LOG_PERR,"Fail to execute ",buf);
+			return -2;
+		}
+		else
+			f = tmp;
+	}
+
+	if(c)
+	{
+		char buf[1024];
+		f = marstmp();
+
+		unlink(f);
+		sprintf(buf,"ecfile -p %s get %s",c,f);
+
+
+		marslog(LOG_INFO,"getting %s with ecfile",c);
+		errno = 0;
+		if(system(buf))
+		{
+			marslog(LOG_EROR|LOG_PERR,"Fail to execute ecfile");
+			marslog(LOG_EROR,"Have you used cfslogin ?");
+			return -2;
+		}
+	}
+
+	pp = ( (count_values(r,"GRID")  != 0) || 
+		   (count_values(r,"AREA")  == 4) ||
+		   (count_values(r,"RESOL") != 0) || 
+		   (count_values(r,"ROTATION") == 2) || 
+		   (mars.accuracy > 0));
+
+	if(pp)
+	{
+		marslog(LOG_INFO,"GRIB conversion needed...");
+		v = pp_fieldset(f,r);
+	} else v = read_fieldset(f,r);
+
+	if(!v) return -2;
+
+	new_variable(s,v,0);
+
+	marslog(LOG_INFO,"%d field(s) read from file %s into '%s'",
+	    v->count,c?c:f,s);
+
+	if(count_values(r,"TARGET"))
+	{
+		request *s = empty_request("WRITE");
+		err e;
+
+		reqcpy(s,r);
+		e = handle_write(s,data);
+
+		free_all_requests(s);
+		return e;
+	}
+
+	return NOERR;
+}
+
+err handle_write(request *r,void *data)
+{
+	const char *s = get_value(r,"FIELDSET",0);
+	extern base_class *targetbase;
+	err e;
+	variable *v = find_variable(s);
+	database *target;
+
+	if(!v) {
+		marslog(LOG_EROR,"Fieldset not found: '%s'",s);
+		return -1;
+	}
+
+	if(v->scalar)
+	{
+		marslog(LOG_EROR,"WRITE failed. Field '%s' is a scalar (%g)",
+		    s,v->val);
+		return -1;
+	}
+
+	target = database_open(targetbase,NULL,r,NULL,WRITE_MODE);
+
+	if(target == NULL)
+		return -1;
+
+	e = write_fieldset(v->fs,target);
+
+	database_close(target);
+
+	if(e) return e;
+
+	marslog(LOG_INFO,"WRITE %d field(s) from '%s' to file %s",
+	    v->fs->count,s,get_value(r,"TARGET",0));
+	return NOERR;
+
+}
diff --git a/src/libMars-ecregrid/statistics.c b/src/libMars-ecregrid/statistics.c
new file mode 100644
index 0000000..af3c59f
--- /dev/null
+++ b/src/libMars-ecregrid/statistics.c
@@ -0,0 +1,402 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include <fcntl.h>
+
+/********************************************************/
+/* General Purpose locking funcions on File Descriptors */
+/********************************************************/
+/* Do not use standard I/O library because of internal buffering performed */
+/*                                              */
+/* DO NOT USE IT ON FILES IN AN MVFS FILESYSTEM */
+/*                                              */
+#include <signal.h>
+#include <setjmp.h>
+
+static jmp_buf env;
+
+/* Lock errors (must be negative) */
+#define FCNTL_ERROR   -1
+#define LOCK_TIMEOUT  -2
+
+static void catch_alarm(int sig)
+{
+	longjmp(env,1);
+}
+
+
+static int lock_fd(int fd)
+{
+	int ret = 0;
+	struct flock lock;
+	
+	lock.l_type   = F_WRLCK;
+	lock.l_whence = SEEK_SET;
+	lock.l_start  = 0;
+	lock.l_len    = 0;        /* write lock entire file */
+
+	if(setjmp(env) != 0) {
+		marslog(LOG_WARN,"Timeout while waiting for lock");
+		return LOCK_TIMEOUT;
+	}
+	signal(SIGALRM,catch_alarm);
+	alarm(60);
+
+	ret = fcntl(fd, F_SETLK, &lock);
+	alarm(0);
+
+	return ret;
+
+}
+
+static int unlock_fd(int fd)
+{
+	struct flock lock;
+	
+	lock.l_type   = F_UNLCK;
+	lock.l_whence = SEEK_SET;
+	lock.l_start  = 0;
+	lock.l_len    = 0;        /* write lock entire file */
+
+	return fcntl(fd, F_SETLK, &lock);
+}
+
+/********************************************************/
+
+#define MAX_LOCK_RETRY 40
+err locked_write(const char *fname, char *str, long len)
+{
+	boolean locked = false;
+	int retry      = 0;
+	int fd         = 0;
+	struct flock lock = {F_WRLCK,SEEK_SET,0,0};   /* Write lock entire file */
+	err ret        = NOERR;
+	long pid       = getpid();
+
+	while(!locked && retry<MAX_LOCK_RETRY)
+	{
+		if((fd = open(fname,O_WRONLY | O_APPEND | O_CREAT,0777)) >= 0)
+		{
+			if((ret = fcntl(fd, F_SETLK, &lock) ) == -1)
+			{
+				int e = errno;
+				if(++retry == MAX_LOCK_RETRY)
+				{
+					FILE *f = NULL;
+
+					marslog(LOG_WARN|LOG_PERR,"Error locking '%s'",fname);
+					
+					f = mail_open(mars.dhsmail,"Error while locking statistics");
+					mail_msg(f,"Statistics file: %s",fname);
+					if(e>0)
+						mail_msg(f,"(%s)", strerror(e));
+					mail_close(f);
+
+				}
+				close(fd);
+				/* If you reduce from 100 msec., the sleep() is less effective == useless */
+				usleep(pid*retry%(100000*retry));
+			}
+			else
+			{
+				locked=true;
+			}
+		}
+		else
+		{
+			int e = errno;
+			FILE *f = NULL;
+
+			marslog(LOG_WARN|LOG_PERR,"Error opening '%s'",fname);
+					
+			f = mail_open(mars.dhsmail,"Error while opening statistics");
+			mail_msg(f,"Statistics file: %s",fname);
+			if(e > 0)
+				mail_msg(f,"(%s)", strerror(e));
+			mail_close(f);
+			retry = MAX_LOCK_RETRY;
+		}
+	}
+
+	if(locked)
+	{
+		if(len>0)
+		{
+			fchmod(fd,S_IRWXU|S_IRWXG|S_IRWXO);
+			write(fd,str,len);
+		}
+
+		lock.l_type   = F_UNLCK;
+		if( (ret = fcntl(fd, F_SETLK, &lock)) == -1)
+		{
+			marslog(LOG_WARN|LOG_PERR,"Error unlocking '%s'",fname);
+		}
+		close(fd);
+	}
+
+	return ret;
+}
+
+/********************************************************/
+
+static request *statistics = 0;
+
+void init_statistics(const request *r, const request *e)
+{
+	char sdate[24];
+	char stime[24];
+	time_t now;
+	const char *verb = r&&r->name?r->name:0;
+
+	if(statistics)
+	{
+		/* Free statistics */
+		free_all_requests(statistics);
+		statistics = 0;
+	}
+
+	/* Create a new statistics request */
+	statistics = empty_request("STAT");
+
+	/* Get the time stamp */
+	time(&now);
+	strftime(sdate,sizeof(sdate),"%Y%m%d",gmtime(&now));
+	strftime(stime,sizeof(stime),"%H:%M:%S",gmtime(&now));
+	set_value(statistics,"startdate","%s",sdate);
+	set_value(statistics,"starttime","%s",stime);
+
+	if(verb) set_value(statistics,"verb",verb);
+	set_value(statistics,"version","%ld",marsversion());
+	if(mars.appl)
+		set_value(statistics,"application","%s",mars.appl);
+
+	if(r)
+	{
+		long date = get_julian_from_request(r,0);
+		long td = today();
+		const char *type = get_value(r,"TYPE",0);
+		const char *class = get_value(r,"CLASS",0);
+		const char *stream = get_value(r,"STREAM",0);
+		const char *expver = get_value(r,"EXPVER",0);
+		if(class)
+			set_value(statistics,"class",  "%s", class);
+		if(type)
+			set_value(statistics,"type",   "%s", type);
+		if(stream)
+			set_value(statistics,"stream", "%s", stream);
+		if(expver)
+			set_value(statistics,"expver", "%s", expver);
+		if( type && !EQ(type,"CL") )
+		{
+			set_value(statistics,"retdate","%ld",julian_to_date(date,mars.y2k));
+			set_value(statistics,"age","%ld",td - date);
+		}
+		set_value(statistics,"nbdates","%d",count_values(r,"DATE"));
+	}
+}
+
+void log_statistics(const char *name, char *fmt,...)
+{
+	char buf[1024000];
+	va_list list;
+
+	if(!mars.statfile)
+		return;
+
+	if(!statistics)
+		return;
+
+	va_start(list,fmt);
+	vsprintf(buf, fmt, list);
+	va_end(list);
+
+	add_value(statistics,name,"%s",buf);
+} 
+
+void log_statistics_unique(const char *name, char *fmt,...)
+{
+	char buf[1024000];
+	va_list list;
+
+	if(!mars.statfile)
+		return;
+
+	if(!statistics)
+		return;
+
+	va_start(list,fmt);
+	vsprintf(buf, fmt, list);
+	va_end(list);
+
+	set_value(statistics,name,"%s",buf);
+} 
+
+static char *flush_request(char *buf, const request *r, const char *prefix, size_t l)
+{
+	char      *p   = buf;
+	parameter *par = r->params;
+
+	while(par)
+	{
+		int    n = count_values(r,par->name);
+		value *v = par->values;
+		int    count = 0;
+
+		if(*(par->name) != '_')
+		{
+			p += sprintf(p,"$%s%s=",prefix,lowcase(par->name));
+			switch(n)
+			{
+				case 0:
+					p += sprintf(p,"\"\"");
+					break;
+
+				case 1:
+					if(v) p += sprintf(p,"\"%s\"",lowcase(no_quotes(v->name)));
+					break;
+
+				default:
+					p += sprintf(p,"\"");
+					while(v)
+					{
+						/* Do not print more than 400 values */
+						if(count >= 400)
+						{
+							int remain = n - count - 1;
+							const char *last = get_value(r,par->name,n-1);
+							p += sprintf(p,"(%d)|%s\"",remain,lowcase(no_quotes(last)));
+							break;
+						}
+
+						p += sprintf(p,"%s",lowcase(no_quotes(v->name)));
+						v = v->next;
+						if(v)
+							p += sprintf(p,"|");   /* more values */
+						else
+							p += sprintf(p,"\"");  /* last value */
+						count++;
+					}
+					break;
+			}
+
+			p += sprintf(p,";");
+
+			if(p-buf > l/2)
+			{
+				p += sprintf(p,"# incomplete line");
+				break;
+			}
+		}
+		par = par->next;
+	}
+
+	return p;
+}
+
+void flush_statistics(const request *r, const request *env)
+{
+	char    sdate[24];
+	char    stime[24];
+	char    fname[256];
+	char    buf[1024000];
+	time_t  now = 0;
+	char    *p = buf;
+	size_t  l = sizeof(buf);
+
+	if(!mars.statfile)
+		return;
+
+	if(!statistics)
+	{
+		FILE *f = mail_open(mars.dhsmail,"MARS internal Error with statistics");
+		mail_msg(f,"Trying to flush uninitialesed statistics");
+		mail_close(f);
+		return;
+	}
+
+	/* Get time stamp */
+	time(&now);
+	strftime(sdate,sizeof(sdate),"%Y%m%d",gmtime(&now));
+	strftime(stime,sizeof(stime),"%H:%M:%S",gmtime(&now));
+	set_value(statistics,"stopdate","%s",sdate);
+	set_value(statistics,"stoptime","%s",stime);
+
+	/* Create string for output */
+	p = buf;
+	l = sizeof(buf);
+	p = flush_request(p,statistics,"",l - (p-buf));
+	p = flush_request(p,env,       "",l - (p-buf));
+	p = flush_request(p,r,         "r_",l - (p-buf));
+	sprintf(p,"\n");
+
+	/* Choose statistics file */
+	sprintf(fname,"%s.%s.%ld",mars.statfile,sdate,marsversion());
+
+	/* Perform unbuffered output locking the file */
+	locked_write(fname,buf,strlen(buf));
+
+    /* Write statistics to a user provided file */
+    if(get_value(r,"LOGSTATS",0))
+    {
+        const char *extfile = no_quotes(get_value(r,"LOGSTATS",0));
+        locked_write(extfile,buf,strlen(buf));
+    }
+
+	/* Free statistics */
+	if(statistics)
+		free_all_requests(statistics);
+	statistics = 0;
+}
+
+
+
+void test_statistics()
+{
+	char    sdate[24];
+	char    stime[24];
+	char    fname[256];
+	char    buf[1024000];
+	time_t  now = 0;
+	char    *p = buf;
+	size_t  l = sizeof(buf);
+
+	request *statistics = empty_request("statistics");
+	request *env = get_environ();
+
+
+	const char *path = "/home/ma/mar/marslog/statistics/test";
+
+	marslog(LOG_INFO,"test_statistics()");
+	/* Get time stamp */
+	time(&now);
+	strftime(sdate,sizeof(sdate),"%Y%m%d",gmtime(&now));
+	strftime(stime,sizeof(stime),"%H:%M:%S",gmtime(&now));
+
+	set_value(statistics,"stopdate","%s",sdate);
+	set_value(statistics,"stoptime","%s",stime);
+
+	/* Create string for output */
+	p = buf;
+	l = sizeof(buf);
+	p = flush_request(p,statistics,"",l - (p-buf));
+	p = flush_request(p,env,       "",l - (p-buf));
+	sprintf(p,"\n");
+
+	print_all_requests(statistics);
+
+	/* Choose statistics file */
+	sprintf(fname,"%s.%s.%ld",path,sdate,marsversion());
+
+	/* Perform unbuffered output locking the file */
+	locked_write(fname,buf,strlen(buf));
+
+	free_all_requests(statistics);
+}
diff --git a/src/libMars-ecregrid/stream.c b/src/libMars-ecregrid/stream.c
new file mode 100644
index 0000000..c260bca
--- /dev/null
+++ b/src/libMars-ecregrid/stream.c
@@ -0,0 +1,498 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+/* This should be included from the proper file */
+
+typedef enum tag {
+	tag_zero,
+	tag_start_obj,
+	tag_end_obj,
+	tag_char,
+	tag_unsigned_char,
+	tag_int,
+	tag_unsigned_int,
+	tag_short,
+	tag_unsigned_short,
+	tag_long,
+	tag_unsigned_long, 
+	tag_long_long,
+	tag_unsigned_long_long, 
+	tag_float,
+	tag_double,
+	tag_string,
+	tag_blob,
+	tag_exception,
+	tag_start_rec,
+	tag_end_rec,
+	tag_eof,
+	last_tag
+} 
+tag;
+
+static char *tag_names[] = {
+	"0",
+	"start of object",
+	"end of object",
+	"char",
+	"unsigned char",
+	"int",
+	"unsigned int",
+	"short",
+	"unsigned short",
+	"long",
+	"unsigned long",
+	"long long",
+	"unsigned long long",
+	"float",
+	"double",
+	"string",
+	"blob",
+	"exception",
+	"start of record",
+	"end of record",
+	"end of file",
+};
+
+/* Write --------------------------- */
+
+static void stream_putbytes(mstream* s,void *p,int len)
+{
+	if(s->write(s->data,p,len) != len)
+		s->error = -2;
+	else
+		s->out += len;
+}
+
+static void stream_putchar(mstream* s,unsigned char c)
+{
+	stream_putbytes(s,&c,1);
+}
+
+static void stream_putlong(mstream* s,unsigned long p)
+{
+	if(sizeof(unsigned long) != 4)
+	{
+		if( sizeof(unsigned int) == 4 )
+		{
+			unsigned int x = htonl(p);
+			stream_putbytes(s,&x,sizeof(x));
+		}
+		else if(sizeof(unsigned short) == 4)
+		{
+			unsigned short x = htons(p);
+			stream_putbytes(s,&x,sizeof(x));
+		}
+		else {
+			marslog(LOG_EXIT,"Cannot run on this architecture");
+		}
+	}
+	else
+	{
+		p = htonl(p);
+		stream_putbytes(s,&p,sizeof(p));
+	}
+}
+
+static void stream_write_tag(mstream* s,tag t)
+{
+	stream_putchar(s,(unsigned char)t);
+}
+
+void stream_write_char(mstream* s,char c)
+{
+	stream_write_tag(s,tag_char);
+	stream_putchar(s,c);
+}
+
+void stream_write_uchar(mstream* s,unsigned char c)
+{
+	stream_write_tag(s,tag_unsigned_char);
+	stream_putchar(s,c);
+}
+
+void stream_write_int(mstream* s,int c)
+{
+	stream_write_tag(s,tag_int);
+	stream_putlong(s,c);
+}
+
+void stream_write_uint(mstream* s,unsigned int c)
+{
+	stream_write_tag(s,tag_unsigned_int);
+	stream_putlong(s,c);
+}
+
+void stream_write_long(mstream* s,long c)
+{
+	stream_write_tag(s,tag_long);
+	stream_putlong(s,c);
+}
+
+void stream_write_ulong(mstream* s,unsigned long c)
+{
+	stream_write_tag(s,tag_unsigned_long);
+	stream_putlong(s,c);
+}
+
+void stream_write_longlong(mstream* s,long64 n)
+{
+	unsigned long hi = (n >> 32);
+	unsigned long lo = (n & 0xffffffff);
+
+	stream_write_tag(s,tag_long_long);
+	stream_putlong(s,hi);
+	stream_putlong(s,lo);
+}
+
+void stream_write_ulonglong(mstream* s,ulong64 n)
+{
+	unsigned long hi = (n >> 32);
+	unsigned long lo = (n & 0xffffffff);
+
+	stream_write_tag(s,tag_unsigned_long_long);
+	stream_putlong(s,hi);
+	stream_putlong(s,lo);
+}
+
+union Double {
+	double d;
+#if __SIZEOF_LONG__ == 4
+	struct { unsigned long hi; unsigned long lo; } s;
+#else
+	struct { unsigned int hi; unsigned int lo; } s;
+#endif
+};
+
+void stream_write_double(mstream* s, double x)
+{
+	union Double d;
+	stream_write_tag(s,tag_double);
+	if( sizeof(d.d) != 2*sizeof(d.s.hi))
+	{
+		marslog(LOG_EXIT,"Double is foobar" );
+	}
+	/* ASSERT(sizeof(d.d) == 2*sizeof(d.s.hi)); */
+	d.d = x;
+	stream_putlong(s,d.s.hi);
+	stream_putlong(s,d.s.lo);
+}
+
+void stream_write_short(mstream* s,short c)
+{
+	stream_write_tag(s,tag_short);
+	stream_putlong(s,c);
+}
+
+void stream_write_ushort(mstream* s,unsigned short c)
+{
+	stream_write_tag(s,tag_unsigned_short);
+	stream_putlong(s,c);
+}
+
+void stream_write_string(mstream* s,const char* p)
+{
+	int len = p?strlen(p):0;
+
+	stream_write_tag(s,tag_string);
+	stream_putlong(s,len);
+	while(p && *p) stream_putchar(s,(unsigned char)*p++);
+}
+
+void stream_write_blob(mstream* s,const void* d,long len)
+{
+	const char* p = (const char*)d;
+	stream_write_tag(s,tag_blob);
+	stream_putlong(s,len);
+	while(len-->0) stream_putchar(s,(unsigned char)*p++);
+}
+
+void stream_write_start(mstream* s,const char* p)
+{
+	stream_write_tag(s,tag_start_obj);	
+	stream_write_string(s,p);
+}
+
+void stream_write_end(mstream* s)
+{
+	stream_write_tag(s,tag_end_obj);	
+}
+
+
+/* Read --------------------------- */
+
+static void stream_getbytes(mstream* s,void *p,int len)
+{
+	char *q = (char*)p;
+	while(len > 0 )
+	{
+		int l = s->read(s->data,q,len);
+		if(l <= 0)
+		{
+			marslog(LOG_EROR|LOG_PERR,"Failed to read %d",len);
+			s->error = -32;
+			return;
+		}
+
+		q     += l;
+		len   -= l;	
+		s->in += l;
+	}
+}
+
+static unsigned char stream_getchar(mstream* s)
+{
+	unsigned char c = 0;
+	stream_getbytes(s,&c,1);
+	return c;
+}
+
+static unsigned long stream_getlong(mstream* s)
+{
+	unsigned long l = 0;
+
+	if(sizeof(unsigned long) != 4)
+	{
+		if( sizeof(unsigned int) == 4 )
+		{
+			unsigned int x;
+			stream_getbytes(s,&x,sizeof(x));
+			l = ntohl(x);
+		}
+		else if(sizeof(unsigned short) == 4)
+		{
+			unsigned short x;
+			stream_getbytes(s,&x,sizeof(x));
+			l = ntohs(x);
+		}
+		else {
+			marslog(LOG_EXIT,"Cannot run on this architecture");
+		}
+	}
+	else
+	{
+		long p;
+		stream_getbytes(s,&p,sizeof(p));
+		l = ntohl(p);
+	}
+
+	return l;
+}
+
+static void stream_read_tag(mstream* s,tag t)
+{
+	unsigned char c = stream_getchar(s);
+	if(t != (enum tag)c)
+	{
+		char *name = c < NUMBER(tag_names) ? tag_names[c] : "(invalid)";
+		marslog(LOG_EROR,"Bad tag '%s' (should be '%s')",name,tag_names[t]);
+		s->error = -2;
+	}
+}
+
+char stream_read_char(mstream* s)
+{
+	stream_read_tag(s,tag_char);
+	return stream_getchar(s);
+}
+
+unsigned char stream_read_uchar(mstream* s)
+{
+	stream_read_tag(s,tag_unsigned_char);
+	return stream_getchar(s);
+}
+
+int stream_read_int(mstream* s)
+{
+	stream_read_tag(s,tag_int);
+	return (int)stream_getlong(s);
+}
+
+unsigned int stream_read_uint(mstream* s)
+{
+	stream_read_tag(s,tag_unsigned_int);
+	return  (unsigned int)stream_getlong(s);
+}
+
+long stream_read_long(mstream* s)
+{
+	stream_read_tag(s,tag_long);
+	return (long)stream_getlong(s);
+}
+
+unsigned long stream_read_ulong(mstream* s)
+{
+	stream_read_tag(s,tag_unsigned_long);
+	return (unsigned long)stream_getlong(s);
+}
+
+short stream_read_short(mstream* s)
+{
+	stream_read_tag(s,tag_short);
+	return (short)stream_getlong(s);
+}
+
+unsigned short stream_read_ushort(mstream* s)
+{
+	stream_read_tag(s,tag_unsigned_short);
+	return (unsigned short)stream_getlong(s);
+}
+
+const char* stream_read_string(mstream* s)
+{
+	static char *p   = NULL; 
+	static long plen = -1;
+
+	char *q;
+	long len;
+
+	stream_read_tag(s,tag_string);
+	if(s->error) 
+		return "<invalid-string>";
+
+	len = stream_getlong(s);
+	if(s->error) 
+		return "<invalid-string-length>";
+
+
+	if(p == NULL || len >= plen)
+	{
+		FREE(p);
+		p = MALLOC( plen = len+1 );
+	}
+
+	q = p;
+	while(len-->0) 
+		*q++ = stream_getchar(s);
+	*q = 0;
+
+	return p;
+}
+
+const void* stream_read_blob(mstream* s,long* size)
+{
+	static char *p   = NULL; 
+	static long plen = -1;
+
+	char *q;
+	long len;
+
+	stream_read_tag(s,tag_blob);
+	if(s->error) 
+	{
+		*size = -1;
+		return 0;
+	}
+
+	len = stream_getlong(s);
+	if(s->error) 
+	{
+		*size = -1;
+		return 0;
+	}
+
+
+	if(p == NULL || len > plen)
+	{
+		if(len > 0) /* It seems there can be 0 length blobs (?) */
+		{
+			FREE(p);
+			p = MALLOC( plen = len );
+		}
+	}
+	*size = len;
+
+	q = p;
+	while(len-->0) 
+		*q++ = stream_getchar(s);
+
+	return p;
+}
+
+
+long64 stream_read_longlong(mstream* s)
+{
+	unsigned long hi;
+	unsigned long lo;
+	long64 n;
+
+	stream_read_tag(s,tag_long_long);
+
+	hi = stream_getlong(s);
+	lo = stream_getlong(s);
+
+	n = hi;
+	n <<= 32;
+	n |= lo;
+
+	return n;
+
+}
+
+ulong64 stream_read_ulonglong(mstream* s)
+{
+	unsigned long hi;
+	unsigned long lo;
+	ulong64 n;
+
+	stream_read_tag(s,tag_unsigned_long_long);
+
+	hi = stream_getlong(s);
+	lo = stream_getlong(s);
+
+	n = hi;
+	n <<= 32;
+	n |= lo;
+
+	return n;
+}
+
+
+const char* stream_read_start(mstream* s)
+{
+	stream_read_tag(s,tag_start_obj);	
+	return s->error?0:stream_read_string(s);
+}
+
+void stream_read_end(mstream* s)
+{
+	stream_read_tag(s,tag_end_obj);	
+}
+
+
+void make_socket_stream(mstream* s,int* soc)
+{
+	s->error = 0;
+	s->read  = readtcp;
+	s->write = writetcp;
+	s->data  = soc;
+	s->in    = 0;
+	s->out   = 0;
+}
+
+static int readfile(void *p,void *buf,u_int len)
+{
+	return fread(buf,1,len,(FILE*)p);
+}
+
+static int writefile(void *p,void *buf,u_int len)
+{
+	return fwrite(buf,1,len,(FILE*)p);
+}
+
+void make_file_stream(mstream* s,FILE* f)
+{
+	s->error = 0;
+	s->read  = readfile;
+	s->write = writefile;
+	s->data  = f;
+	s->in    = 0;
+	s->out   = 0;
+}
diff --git a/src/libMars-ecregrid/target.c b/src/libMars-ecregrid/target.c
new file mode 100644
index 0000000..3fb26c4
--- /dev/null
+++ b/src/libMars-ecregrid/target.c
@@ -0,0 +1,850 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+#define PAD(l,n)     ( ( ( (l)+(n)-1 ) / (n) * (n) ) - (l) )
+
+static marslist *targets = NULL;
+
+#define MAXKEY 20
+
+typedef struct remotefile {
+	struct remotefile* next;
+	char* local;
+	char* remote;
+	char* host;
+	boolean  ecfs;
+} remotefile;
+
+static remotefile* remote_files = NULL;
+
+typedef struct targetfile {
+
+	struct targetfile *next;
+	FILE              *file;
+	char              *name;
+	char*             key;
+	file_offset	      start;
+
+	char              *buffer;
+
+	int               pipe;
+
+} targetfile;
+
+static timer *target_timer = NULL;
+
+typedef struct targetdata {
+
+	gribfile  *file;
+	int	   	   padding;
+	int	   	   bufr_padding;
+	int        count;
+	int        expect;    /* initialised with count_fields() */
+	fieldset   *fs;
+	hypercube  *cube;     /* Hypercube to speed up field_order(). Call cube_order */
+	variable   *v;
+	boolean    order;
+	request    *r;
+	boolean    split;
+	boolean       dispnew;
+	char       *target;
+
+	targetfile* current;
+	targetfile* files;
+
+	int    keycount;
+	char*  key[MAXKEY];
+	int    api[MAXKEY];
+
+	boolean    has_error;
+
+	int               bufsize;
+	boolean           multitarget_format;
+
+	boolean inited;
+
+}targetdata;
+
+static void target_init(void);
+static err  target_open(void *data,request*,request*,int);
+static err  target_close(void *data);
+static err  target_read(void *data,request *r,void *buffer,long *length);
+static err  target_write(void *data,request *r,void *buffer,long *length);
+static err  target_cntl(void *data,int code,void *param,int size);
+
+
+static option opts[] = {
+	{"padding","MARS_PADDING","-padding","120",t_int,sizeof(int),
+		OFFSET(targetdata,padding),},
+
+		{"bufr_padding","MARS_BUFR_PADDING","-bufr_padding","8",t_int,sizeof(int),
+			OFFSET(targetdata,bufr_padding),},
+
+			{"bufsize","MARS_WRITE_BUFFER","-bufsize","0",t_int,sizeof(int),
+				OFFSET(targetdata,bufsize),},
+
+				{"multitarget_format","MARS_MULTITARGET_STRICT_FORMAT","-multitarget_format","0",t_boolean,sizeof(boolean),
+					OFFSET(targetdata,multitarget_format),},
+};
+
+static base_class _targetbase = {
+
+	NULL,                       /* parent class */
+	"targetbase",                 /* name         */
+
+	false,                      /* inited       */
+
+	sizeof(targetdata),           /* private size */
+	NUMBER(opts),               /* option count */
+	opts,                       /* options      */
+
+
+	target_init,                  /* init         */
+
+	target_open,                  /* open         */
+	target_close,                 /* close        */
+
+	target_read,                  /* read         */
+	target_write,                 /* write        */
+
+	target_cntl,                  /* cntl        */
+
+};
+
+
+base_class *targetbase = &_targetbase;
+
+
+static void target_init(void)
+{
+	target_timer = get_timer("Writing to target file","writetarget",false);
+}
+
+
+static err close_all(targetdata *g)
+{
+	targetfile *f = g->files;
+	err e = 0;
+	f = g->files;
+	while(f) 
+	{
+		targetfile *n = f->next;
+		if(f->pipe)
+		{
+			if(pclose(f->file))
+			{
+				marslog(LOG_EROR|LOG_PERR,"pclose(%s)",f->name);
+				e = -2;
+			}
+		}
+
+		else
+		{
+			if(timed_fclose(f->file,target_timer))
+			{
+				marslog(LOG_EROR|LOG_PERR,"fclose(%s)",f->name);
+				e = -2;
+			}
+		}
+
+		strfree(f->name);
+		if(f->buffer) free(f->buffer);
+		strfree(f->key);
+
+		FREE(f);
+		f = n;
+	}
+
+	g->files = g->current = NULL;
+
+	return e;
+}
+
+static targetfile* open_file(targetdata *g,const char *name,int* error)
+{
+	targetfile *f = NEW_CLEAR(targetfile);
+	char   *cmode = target_open_mode(name);
+	*error = 0;
+
+	if(*name == '|')
+	{
+		f->file = popen(name+1,cmode);
+		f->pipe = 1;
+	}
+	else
+	{
+		if(g->dispnew) cmode = "w+";
+		f->file  = fopen(name,cmode);
+		*error = errno;
+	}
+	marslog(LOG_DBUG,"target_open, mode: %s",cmode);
+
+	if(f->file == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"cannot open %s",name);
+		FREE(f);
+		return NULL;
+	}
+
+	f->name = strcache(name);
+
+	if(g->bufsize)
+	{
+		f->buffer = valloc(g->bufsize);
+		if(!f->buffer) 
+			marslog(LOG_WARN,"Could not valloc buffer %d", g->bufsize);
+		else
+			if(setvbuf(f->file,f->buffer,_IOFBF,g->bufsize))
+				marslog(LOG_WARN|LOG_PERR,"setvbuf failed");
+	}
+
+
+	if(!f->pipe)
+	{
+		check_nfs_target(name);
+
+		fseek(f->file,(file_offset)0,SEEK_END);
+		f->start = ftell(f->file);
+	}
+
+	f->next  = g->files;
+	g->files = f;
+
+	return f;
+}
+
+#define IS_ECFS(x) ((strcmp(x,"ec") == 0) || (strcmp(x,"ectmp") == 0))
+
+static char *make_target(targetdata* g,request* r,void* message,long length)
+{
+	static char  target[1024];
+	char  word[1024];
+	char  name[1024];
+	char  host[1024];
+	char val[1024];
+	size_t k       = 0;
+	int mode       = 0;
+	boolean remote  = false;
+	const char *value;
+	const char *p = g->target;
+	int api = 0;
+
+	target[0] = 0;
+	host[0]   = 0;
+
+	while(*p)
+	{
+		switch(*p)
+		{
+
+			case ':':
+
+				if(!remote && k != 0 && strncmp(g->target,word,k) == 0)
+				{
+					word[k] = 0;
+
+					/* check if it is a valide host name */
+
+					if(is_hostname(word))
+					{
+						k      = 0;
+						strcpy(host,word);
+						remote = true;
+					} else if(IS_ECFS(word))
+					{
+						k      = 0;
+						strcpy(host,"ectmp");
+						remote = true;
+					} else word[k++] = *p;
+				}
+				else word[k++] = *p;
+
+				break;
+
+			case '{':
+			case '[':
+				if(mode == 0)
+				{
+					word[k] = 0;
+					strcat(target,word);
+					mode = *p;
+					k    = 0;
+					api  = *p == '{';
+				}
+				else
+					word[k++] = *p;
+				break;
+
+			case ']':
+			case '}':
+				if( (*p == ']' && mode != '[') || (*p == '}' && mode != '{') )
+					word[k++] = *p;
+				else
+				{
+					char tmp[1024];
+					size_t size = 0;
+
+					word[k] = 0;
+
+					if(mode != 0)
+					{
+						if(api)
+						{
+							size_t size = sizeof(val);
+							strcpy(name,word);
+							if(message != NULL)
+							{
+								grib_handle *h = grib_handle_new_from_message(0,message,length);
+								if(h) {
+									if(grib_get_string(h,word,val,&size) == 0)
+										value = val;
+									grib_handle_delete(h);
+								}
+							}
+							else
+							{
+								value = NULL;
+								strcat(target,"{");
+								strcat(target,word);
+								strcat(target,"}");
+							}
+						}
+						else
+						{
+							value = get_value(r,upcase(word),0);
+							strcpy(name,upcase(word));
+							if(value == NULL)
+							{
+								strcat(target,"[");
+								strcat(target,word);
+								strcat(target,"]");
+							}
+						}
+						size = 0;
+					}
+					else size = atol(word);
+					if(value)
+					{
+						static boolean already_logged = false;
+						/* New style, more strict to MARS output values, 
+						   eg, time=0000 instead of 0 */
+						if(g->multitarget_format)
+						{
+							sprintf(tmp,"%0*s",size,value);
+							if(!already_logged)
+								log_statistics("multitarget","new");
+
+						}
+						else
+						{
+							if(!already_logged)
+							{
+								marslog(LOG_WARN,"In order to get filenames according to MARS values,");
+								marslog(LOG_WARN,"please, set env. var. MARS_MULTITARGET_STRICT_FORMAT=1");
+								marslog(LOG_WARN,"before executing your MARS request");
+								log_statistics("multitarget","old");
+							}
+							if(is_number(value))
+								sprintf(tmp,"%0*d",size,atol(value));
+							else
+								sprintf(tmp,"%0*s",size,value);
+						}
+						already_logged=true;
+
+						if(!g->inited) {
+							if(g->keycount >= MAXKEY)
+							{
+								marslog(LOG_EROR,"Target name: maximum number of variables is %d",MAXKEY);
+								return 0;
+							}
+							g->api[g->keycount  ] = api;
+							g->key[g->keycount++] = strcache(name);
+						}
+
+						strcat(target,tmp);
+					}
+					mode = 0;
+					k = 0;
+				}
+				break;
+
+			case ',':
+				if(mode == 1)
+				{
+					mode    = 2;
+					word[k] = 0;
+					value   = get_value(r,word,0);
+					strcpy(name,word);
+					if(value == NULL)
+					{
+						strcat(target,"[");
+						strcat(target,word);
+						strcat(target,",");
+						mode = 0;
+					}
+					k = 0;
+				}
+				else word[k++] = *p;
+				break;
+
+			default:
+				word[k++] = *p;
+				break;
+		}
+		p++;
+	}
+
+	word[k] = 0;
+	strcat(target,word);
+
+	if(!g->inited && g->keycount != 0)
+	{
+		int i;
+		marslog(LOG_INFO,"Enabling automatic target name generation using:");
+		for(i = 0 ; i < g->keycount; i++)
+			marslog(LOG_INFO,"%s",g->key[i]);
+		g->split = true;
+		g->inited = true;
+	}
+
+	if(g->keycount) marslog(LOG_INFO,"Creating target name: %s",target);
+
+	if(remote) {
+
+		remotefile* f = remote_files;
+		while(f)
+		{
+			if(strcmp(host,f->host) == 0 && strcmp(target,f->remote) == 0)
+				return f->local;
+			f = f->next;
+		}
+
+		f = NEW_CLEAR(remotefile);
+		f->host   = strcache(host);
+		f->remote = strcache(target);
+		f->next   = remote_files;
+		f->local  = strcache(marstmp());
+		f->ecfs   = IS_ECFS(f->host);
+		remote_files  = f;
+
+		if(f->ecfs)
+			log_statistics("target","ecfs");
+		else
+			log_statistics("target","rcp:%s",f->host);
+
+		strcpy(target,f->local);
+
+	}
+
+	return target;
+}
+
+static err select_file(targetdata *g,request *r,int retry, void* message,long length)
+{
+
+	int error = 0;
+	int i;
+	char buffer[1024];
+	char val[1024];
+	char *k = NULL;
+	char *t = NULL;
+	targetfile *f = 0;
+
+	if(!g->inited)
+	{
+		/* First time in */
+		t = make_target(g,r,message,length);
+		g->inited = true;
+		if(!t) return -1;
+	}
+	else if(!g->split) 
+		return 0;
+
+	buffer[0] = 0;
+
+	for(i = 0; i < g->keycount; i++)
+	{
+		const char* value   = NULL;
+
+		if(g->api[i])
+		{
+			size_t size = sizeof(val);
+			if(message != NULL)
+			{
+				grib_handle *h = grib_handle_new_from_message(0,message,length);
+				if(h) {
+					if(grib_get_string(h,g->key[i],val,&size) == 0)
+						value = val;
+					grib_handle_delete(h);
+				}
+			}
+		}
+		else
+			value = get_value(r,g->key[i],0);
+
+		if(value == NULL)
+		{
+			marslog(LOG_EROR,"Target split: no value for %s",g->key[i]);
+			return -1;
+		}
+
+		strcat(buffer,value);
+		strcat(buffer,"+");
+	}
+
+	k = strcache(buffer);
+
+	if(g->current && g->current->key == k)
+		return 0;
+
+	f = g->files;
+	while(f) 
+	{
+		if(f->key == k)
+		{
+			g->current = f;
+			return 0;
+		}
+		f = f->next;
+	}
+
+
+	t = t?t:make_target(g,r,message,length);
+	if(!t) return -1;
+
+	g->current = open_file(g,t,&error);
+	if(!g->current) {
+
+		if(error == EMFILE && retry)
+		{
+			err e;
+			marslog(LOG_WARN,"Closing all target files");
+			
+			e  = close_all(g);
+			if(e) return e;
+			return select_file(g,r,0,message,length);
+		}
+	
+		return -1;
+	}
+	else
+	{
+		if(!in_list(targets,t,NULL))
+			add_to_list(&targets,t,NULL);
+	}
+
+	g->current->key = k;
+
+	return 0;
+}
+
+static err target_open(void *data,request *r,request *e,int mode)
+{
+	targetdata *g      = (targetdata*)data;
+	const char *fs     = get_value(r,"FIELDSET",0);
+	const char *target = no_quotes(get_value(r,"TARGET",0));
+	boolean isfield    = (!observation(r) && !image(r) && !simulated_image(r) && !fetch(r) && !feedback(r) && !bias(r) && !track(r));
+	const char *disp   = get_value(r,"DISP",0);
+	const char *padding= get_value(r,"PADDING",0);
+
+	const char *type   = get_value(r,"TYPE",0);
+	boolean isfg       = type && EQ(type,"FG");
+
+    if( (target || (!target && !fs))  && mars.webmars_target) {
+        target = mars.webmars_target;
+    }
+
+
+	if(isfg)
+		g->r = un_first_guess(r);
+	else
+		g->r = clone_all_requests(r);
+
+	g->dispnew = (disp && EQ(disp,"NEW"));
+
+	if(mode == WRITE_MODE)
+	{
+		if(observation(r))
+			g->padding = g->bufr_padding;
+
+		if(fetch(r))
+			g->padding = 0;
+
+		if(is_netcdf(r))
+			g->padding = 0;
+
+		if(is_odb(r))
+			g->padding = 0;
+
+		if(target == NULL && fs == NULL)
+		{
+            marslog(LOG_EROR,"TARGET or FIELDSET value is missing");
+            return -1;
+		}
+
+		/* Use provided padding if any */
+		if(padding)
+			if(isdigit(*padding))
+				g->padding = atoi(padding);
+
+		/* No fieldset allowed for image or */
+
+		if(target == NULL && !isfield)
+		{
+			marslog(LOG_EROR,"FIELDSET not valid for non-field requests");
+			return -2;
+		}
+
+		if((target == NULL || fs == NULL) && (EQ(r->name,"WRITE") || EQ(r->name,"COMPUTE")))
+		{
+			marslog(LOG_EROR,"TARGET and FIELDSET value are missing");
+			return -2;
+		}
+
+		if(fs && (!(EQ(r->name,"WRITE") || EQ(r->name,"COMPUTE"))) && isfield)
+		{
+			int count = count_fields(r);
+
+			g->expect = count;
+
+			g->fs = new_fieldset(count);
+			if(g->fs == NULL) return -1;
+			g->v = new_variable(fs,g->fs,0);
+
+			if((count == 0) && EQ(r->name,"RETRIEVE"))
+				g->order = false;
+			else 
+				g->order = true;
+
+			g->file = new_gribfile(NULL);
+			target = g->file->fname;
+
+			g->cube = new_hypercube_from_mars_request(g->r);
+		}
+
+		g->target = strcache(target);
+
+	}
+	else
+	{
+		marslog(LOG_EXIT,"target_open read not imp");
+	}
+
+	return 0;
+}
+
+char* target_open_mode(const char* target)
+{
+	if(*target== '|')
+		return "w";
+
+	if(in_list(targets,target,NULL))
+		return "a+";
+	else
+	{
+		add_to_list(&targets,target,NULL);
+		return "w+";
+	}
+}
+
+static err  target_close(void *data)
+{
+	targetdata *g = (targetdata*)data;
+	targetfile *f = NULL;
+	err e = 0;
+	int i;
+
+	marslog(LOG_DBUG,"target_close");
+
+	free_all_requests(g->r);
+
+	e = close_all(g);
+
+	strfree(g->target);
+
+	for(i = 0; i < MAXKEY; i++)
+		strfree(g->key[i]);
+
+	if(g->fs && !g->has_error)
+	{
+		free_hypercube(g->cube);
+		/* if EXPECT=ANY, g->expect is 0, so don't check */
+		if(g->expect && check_fieldset(g->fs,g->expect))
+		{
+			free_variable(g->v);
+			e =  -2;
+		}
+	}
+
+	return e;
+}
+
+static err  target_read(void *data,request *r,void *buffer,long *length)
+{
+	return -1;
+}
+
+static err  target_write(void *data,request *r,void *buffer,long *length)
+{
+	long len = *length;
+	targetdata *g = (targetdata*)data;
+	file_offset pos;
+
+	if(select_file(g,r,1,buffer,*length) != 0)
+		return -2;
+
+	if(g->fs) pos = ftell(g->current->file);
+
+	/* marslog(LOG_DBUG,"target_write"); */
+
+	if((len = timed_fwrite(buffer,1,*length,g->current->file,target_timer)) != *length)
+	{
+		marslog(LOG_EROR|LOG_PERR,"Error while writing to disk");
+		*length = len;
+		return EOF;
+	}
+
+	if(*length == 0)
+		return 0;
+
+	if(g->padding)
+	{
+		static int first = true;
+		size_t pad = PAD(len,g->padding);
+		static char c[10240];      /* 10Kb of padding should be enough */
+
+		if(first)
+		{
+			memset(c,0,sizeof(c));
+			first=false;
+		}
+
+		timer_start(target_timer);
+		if(fwrite(c,1,pad,g->current->file) != pad)
+		{
+			marslog(LOG_EROR|LOG_PERR,"Error while writing to disk");
+			timer_stop(target_timer,0);
+			*length = len;
+			return EOF;
+		}
+		timer_stop(target_timer,(long64)pad);
+	}
+
+	if(g->fs)
+	{
+		int n = g->order? cube_order(g->cube,r): g->count++;
+		if(n < 0)
+		{
+			if(mars.debug)
+			{
+				request *w = empty_request("GRIB");
+				marslog(LOG_DBUG,"Got order %d for following field",n);
+				grib_to_request(w,buffer,*length);
+				print_one_request(w);
+				free_all_requests(w);
+			}
+		}
+
+		return set_field(g->fs,read_field(g->file,pos,*length),n);
+	}
+
+	return 0;
+}
+
+static err  target_cntl(void *data,int code,void *param,int size)
+{
+	targetdata *g = (targetdata*)data;
+	targetfile *f = 0;
+	switch(code)
+	{
+		case CNTL_REWIND:
+			g->count = 0;
+			f = g->files;
+			while(f) 
+			{
+				if(f->pipe)
+				{
+					marslog(LOG_EROR,"Cannot rewind a pipe");
+					return -2;
+				}
+				fseek(f->file,f->start,SEEK_SET);
+				ftruncate(fileno(f->file),f->start);
+				f = f->next;
+			}
+			marslog(LOG_DBUG,"target_cntl");
+			return NOERR;
+			/*NOTREACHED*/
+			break;
+
+		case CNTL_ERROR:
+			g->has_error = true;
+			marslog(LOG_DBUG,"target_cntl");
+			return NOERR;
+			/*NOTREACHED*/
+			break;
+
+		default:
+			return -1;
+	}
+}
+
+err send_remote_targets()
+{
+
+	remotefile *f = remote_files;
+	char buf[80];
+	char buffer[2048];
+	err e = 0;
+	char *cmd = 0;
+
+	if(remote_files == NULL)
+		return 0;
+
+	start_timer();
+
+	while(f != NULL && e == 0)
+	{
+		marslog(LOG_INFO,"Sending %s:%s",f->host,f->remote);
+
+		if(f->ecfs)
+			cmd = "$ECFS_SYS_PATH/ecp.p -o";
+		else
+			cmd = "scp";
+
+		sprintf(buffer,"%s %s %s:%s 2>&1",cmd,f->local,f->host,f->remote);
+
+		if(system(buffer) != 0)
+		{
+			marslog(LOG_EROR|LOG_PERR,"Command \"%s\" failed",buffer);
+			e = -2;
+		}
+
+		f = f->next;
+	}
+
+
+	f = remote_files;
+	while(f)
+	{
+		remotefile *n = f->next;
+		strfree(f->host);
+		strfree(f->local);
+		strfree(f->remote);
+		FREE(f);
+		f = n;
+	}
+
+	stop_timer(buf);
+	if(*buf) marslog(LOG_INFO,"Sending time %s",buf);
+
+	return e;
+}
diff --git a/src/libMars-ecregrid/tcp.c b/src/libMars-ecregrid/tcp.c
new file mode 100755
index 0000000..c71b23e
--- /dev/null
+++ b/src/libMars-ecregrid/tcp.c
@@ -0,0 +1,383 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include <errno.h>
+#include <ctype.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <sys/ioctl.h>
+#if defined(sgi) || defined(fujitsu) || defined(sun)
+#include <sys/filio.h>  /* For FIONREAD */
+#endif
+#ifdef sgi
+#include <bstring.h>
+#endif
+
+int _tcpdbg = 0;
+
+static void pbuf(char *name,char *buf,int len)
+{
+	if(_tcpdbg)
+	{
+		int col = 0;
+		printf("%s len = %d\n",name,len);
+		while(len--)
+		{
+			if(isprint(*buf)) {
+				putchar(*buf);
+				if((++col % 60) == 0) putchar('\n');
+			}
+			buf++;
+		}
+		putchar('\n');
+	}
+}
+
+void socket_buffers(int s)
+{
+#ifdef ECMWF
+#ifndef hpux
+	int flg = 0;
+	marssocklen_t flgsize = sizeof(flg);
+
+	/* Check Socket buffers */
+	if(getsockopt(s, SOL_SOCKET, SO_SNDBUF, (msockopt)&flg, &flgsize)<0)
+		marslog(LOG_WARN|LOG_PERR,"getsockopt SO_SNDBUF");
+	if(flg != mars.sockbuf && mars.sockbuf)
+	{
+		if(setsockopt(s, SOL_SOCKET, SO_SNDBUF, (msockopt)&mars.sockbuf, sizeof(mars.sockbuf))<0)
+			marslog(LOG_WARN|LOG_PERR,"setsockopt SO_SNDBUF");
+		marslog(LOG_DBUG,"Changing Send socket buffers from %d to %d",flg,mars.sockbuf);
+	}
+
+	if(getsockopt(s, SOL_SOCKET, SO_RCVBUF, (msockopt)&flg, &flgsize)<0)
+		marslog(LOG_WARN|LOG_PERR,"getsockopt SO_RCVBUF");
+	if(flg != mars.sockbuf && mars.sockbuf)
+	{
+		if(setsockopt(s, SOL_SOCKET, SO_RCVBUF, (msockopt)&mars.sockbuf, sizeof(mars.sockbuf))<0)
+			marslog(LOG_WARN|LOG_PERR,"setsockopt SO_RCVBUF");
+		marslog(LOG_DBUG,"Changing Receive socket buffers from %d to %d",flg,mars.sockbuf);
+	}
+#endif
+#endif
+}
+
+int writetcp(void *p,void *buf,u_int len)
+{
+	size_t i;
+	size_t cnt;
+	int   soc = *(int*)p;
+	char  *b = (char*)buf;
+
+	pbuf("writetcp",(char*)buf,len);
+
+	for (cnt = len; cnt > 0; cnt -= i, b += i)
+		switch(i = write(soc, b, cnt))
+		{
+		case 0:
+			/* marslog(LOG_EROR,"tcp write: premature eof"); */
+			return -1;
+			/* break; */
+
+		case -1:
+			/* marslog(LOG_EROR|LOG_PERR,"tcp write failed"); */
+			return -1;
+			/* break; */
+		}
+
+
+	return len;
+}
+
+boolean tcp_read_ready(int soc)
+{
+	struct timeval timeout = { 
+		0, 100, 			}; /* 1 10th sec */
+	fd_set readfds;
+
+	FD_ZERO(&readfds);
+	FD_SET(soc,&readfds);
+
+	for(;;)
+		switch(select(FD_SETSIZE,
+			&readfds,
+			NULL,NULL,&timeout))
+		{
+			/* time out */
+		case 0:
+			return false;
+			/* break; */
+
+		case -1:
+			if(errno != EINTR)
+			{
+				marslog(LOG_EROR|LOG_PERR,"select");
+				return true;
+			}
+			break;
+
+		default:
+			return true;
+			/* break; */
+		}
+}
+
+int readtcp(void *p,void *buf,u_int len)
+{
+	struct timeval timeout = { 20,0}; /* 20 sec. */
+	int   soc = *(int*)p;
+	int   l = len;
+	fd_set readfds;
+
+	if(l == 0) return 0;
+
+    FD_ZERO(&readfds);
+	FD_SET(soc,&readfds);
+
+	
+	if(select(FD_SETSIZE,
+			&readfds, NULL,NULL,&timeout) == 0)
+	{
+		/* after 20 sec. , send 0 bytes */
+		if(write(soc,buf,0) != 0)
+		{
+			marslog(LOG_EROR,"tcp read: write(0) failed");
+			return 0;
+		}
+	}
+	
+
+	switch(l =  read(soc,buf,l))
+	{
+	case 0:
+		/* marslog(LOG_EROR,"tcp read: premature eof"); */
+		return -1;
+		/* break; */
+
+	case -1:
+		/* marslog(LOG_EROR|LOG_PERR,"tcp read failed"); */
+		return -1;
+		/* break; */
+
+	}
+	pbuf("readtcp",(char*)buf,l);
+
+	return l;
+}
+
+boolean is_hostname(const char *host)
+{
+#ifdef INADDR_NONE
+
+	in_addr_t addr;
+	in_addr_t none = INADDR_NONE;
+
+#else
+
+#ifdef __alpha
+    unsigned int  none = (unsigned int)~0;
+#elif defined(fujitsu)
+    u_int none = (u_int)~0;
+#elif defined(__64BIT__)
+	uint32_t none = (uint32_t)-1;
+#else
+    unsigned long none = (unsigned long)-1;
+#endif
+
+#endif
+
+	if(inet_addr(host) != none) 
+		return true;
+
+	return (gethostbyname(host) != NULL);
+}
+
+void traceroute(struct sockaddr_in *from)
+{
+	char *tracecmd = getenv("MARS_TRACEROUTE");
+
+	if(!tracecmd)
+		return;
+	
+	if(from->sin_family == AF_INET)
+	{
+		char *net = inet_ntoa(from->sin_addr);
+		struct hostent  *remote;
+		char cmd[2048];
+
+		remote = gethostbyaddr((char*)&from->sin_addr,
+		    sizeof(from->sin_addr),
+		    from->sin_family);
+
+		if(remote)
+		{
+			sprintf(cmd,"%s %s",tracecmd,remote->h_name);
+			if(system(cmd) != 0)
+			{
+				 marslog(LOG_EROR|LOG_PERR,"Command \"%s\" failed",cmd);
+			}
+		}
+	}
+}
+
+int call_server(const char *host, int port, int retries)
+{
+	struct sockaddr_in s_in;
+	struct hostent *him;
+	int s;
+	int status;
+	int tries = 0;
+	int flg;
+
+#ifdef INADDR_NONE
+
+	in_addr_t addr;
+	in_addr_t none = INADDR_NONE;
+
+#else
+
+#ifdef __alpha
+	unsigned int  addr;
+    unsigned int  none = (unsigned int)~0;
+#elif defined(fujitsu)
+	u_int addr;
+    u_int none = (u_int)~0;
+#elif defined(__64BIT__)
+	unsigned long addr;
+	uint32_t none = (uint32_t)-1;
+#else
+	unsigned long addr;
+    unsigned long none = (unsigned long)-1;
+#endif
+
+#endif
+
+	boolean quiet = (retries <= 0);
+
+	if(retries <= 0) retries = -retries;
+
+	bzero(&s_in,sizeof(s_in));
+
+	s_in.sin_port = htons(port);
+	s_in.sin_family = AF_INET;
+
+	marslog(LOG_DBUG,"Calling \"%s\" port %d",host,port);
+
+	addr = inet_addr(host);
+	s_in.sin_addr.s_addr = addr;
+
+	if(addr == none) {
+		if ((him=gethostbyname(host))==NULL)
+		{
+			marslog(LOG_EROR,"unknown host : %s",host);
+			return -1;
+		}
+
+		s_in.sin_family = him->h_addrtype;
+
+		bcopy(him->h_addr_list[0],&s_in.sin_addr,him->h_length);
+	}
+
+	do
+	{
+
+		s = socket(AF_INET, SOCK_STREAM, 0);
+		if (s < 0)
+		{
+			marslog(LOG_EROR|LOG_PERR,"socket");
+			return(-1);
+		}
+
+		socket_buffers(s);
+
+		if(getenv("MARS_BIND"))
+		{
+			struct sockaddr_in sin;
+			memset(&sin, 0, sizeof(struct sockaddr_in));
+			sin.sin_port        = htons(0);
+			sin.sin_family      = AF_INET;
+
+			marslog(LOG_INFO,"Binding socket to %s",getenv("MARS_BIND"));
+			sin.sin_addr.s_addr = inet_addr(getenv("MARS_BIND"));
+
+			if(bind(s,(struct sockaddr*)&sin,sizeof(sin)) == -1) 
+			{
+				marslog(LOG_EROR|LOG_PERR,"bind");
+				close(s);
+				return -1;
+			}
+
+		}
+
+		status = connect(s,(struct sockaddr*)&s_in,sizeof(s_in));
+
+		if (status < 0)
+		{
+			if(!quiet)
+				marslog(LOG_WARN|LOG_PERR,"connect : %s %d",host,port);
+			socket_close(s);
+
+			if(retries != 0 && ++tries >= retries)
+			{
+				if(!quiet)
+					marslog(LOG_EROR,"To many retries. Giving up.");
+				return -1;
+			}
+
+			sleep(5);
+		}
+		else
+			marslog(LOG_DBUG,"Connected to address %s",
+				inet_ntoa(s_in.sin_addr));
+
+	}while(status<0);
+
+	flg = 1;
+	if(setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (msockopt)&flg, sizeof(flg))<0)
+		marslog(LOG_WARN|LOG_PERR,"setsockopt SO_KEEPALIVE");
+
+ 	/* Dont't get killed by pipes */
+ 	signal(SIGPIPE,SIG_IGN);
+
+	return (s);   /* OK */
+}
+
+static void bytes_left(int s)
+{
+	int nbytes=0;
+
+	if(s == -1) 
+		return;
+
+	if(ioctl(s,FIONREAD,&nbytes) == -1)
+		marslog(LOG_PERR,"Cannot determine socket status");
+	else
+		if(nbytes)
+			marslog(LOG_WARN,"Closing connection with %d byte%s outstanding",
+								nbytes,nbytes>1?"s":"");
+}
+
+int socket_close(int s)
+{
+	bytes_left(s);
+	return close(s);
+}
+
+int socket_file_close(FILE* f)
+{
+	bytes_left(fileno(f));
+	return fclose(f);
+}
diff --git a/src/libMars-ecregrid/time.c b/src/libMars-ecregrid/time.c
new file mode 100644
index 0000000..ef02c50
--- /dev/null
+++ b/src/libMars-ecregrid/time.c
@@ -0,0 +1,40 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+datetime date_time_2_datetime(long julian_date,
+									 long hour,
+									 long min,
+									 long sec)
+{
+	return julian_date * SECS_IN_DAY + hour * 3600 + min * 60 + sec; 
+}
+
+datetime key_2_datetime(const packed_key* keyptr)
+{
+	long date;
+
+	date = KEY_YEAR(keyptr)*10000 + 
+		KEY_MONTH(keyptr) * 100 + 
+		KEY_DAY(keyptr);		
+	date = date_to_julian(date);
+	return date * SECS_IN_DAY + 
+		   KEY_HOUR(keyptr) * 3600 + 
+		   KEY_MINUTE(keyptr) * 60 + 
+		   KEY_SECOND(keyptr); 
+}
+
+/* range is expected in seconds */
+void init_time_interval(time_interval* t,datetime begin,long range)
+{
+	t->begin = begin;	
+	t->end = begin + range;
+}
diff --git a/src/libMars-ecregrid/timer.c b/src/libMars-ecregrid/timer.c
new file mode 100644
index 0000000..ae8d670
--- /dev/null
+++ b/src/libMars-ecregrid/timer.c
@@ -0,0 +1,331 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+static timer *timers = NULL;
+
+timer *get_timer(const char* name, const char *statname, boolean elapsed)
+{
+	timer *t = timers;
+
+	while(t)
+	{
+		if(strcmp(name,t->name_) == 0)
+			return t;
+		t = t->next_;
+	}
+
+	t = NEW_CLEAR(timer);
+	t->name_	= strcache(name);
+	t->active_  = false;
+	t->count_   = 0;
+	t->timer_   = 0;
+	t->total_   = 0;
+
+	t->elapsed_    = elapsed; /* Whether to print CPU usage */
+	t->cpu_        = 0;
+	t->total_cpu_  = 0;
+
+	t->statname_ = 0;
+	if(statname)
+		t->statname_ = strcache(statname);
+
+	t->next_    = timers;
+	timers      = t;
+
+	return t;
+}
+
+int timer_start(timer* t)
+{
+	int e = 0;
+	if(mars.notimers || (t == NULL))
+		return 0;
+
+	e = gettimeofday(&t->start_,NULL);
+	if(e != 0)
+		marslog(LOG_WARN|LOG_PERR,"Error starting timer '%s'",t->name_?t->name_:"unnamed");
+	t->active_ = true;
+	t->cpu_    = proc_cpu();
+	return e;
+}
+
+int timer_stop(timer* t, long64 total)
+{
+	struct timeval stop, diff;
+	int e;
+	double c;
+
+	if(mars.notimers || (t == NULL))
+		return 0;
+
+	e = gettimeofday(&stop,NULL);
+	c = proc_cpu();
+
+	if(e != 0)
+		marslog(LOG_WARN|LOG_PERR,"Error stopping timer '%s'",t->name_?t->name_:"unnamed");
+
+	if(!t->active_)
+	{
+		marslog(LOG_WARN,"Stopping non-started timer '%s'",t->name_?t->name_:"unnamed");
+		return 1;
+	}
+
+	diff.tv_sec  = stop.tv_sec  - t->start_.tv_sec;
+	diff.tv_usec = stop.tv_usec - t->start_.tv_usec;
+	if (diff.tv_usec < 0)
+	{
+		diff.tv_sec--;
+		diff.tv_usec += 1000000;
+	}
+
+	t->timer_ += (double)diff.tv_sec + ((double)diff.tv_usec / 1000000.);
+	t->total_ += total;
+	t->total_cpu_ += (c - t->cpu_);
+
+	t->active_=false;
+	t->count_++;
+
+	return e;
+
+}
+
+double timer_value(timer *t)
+{
+	if(mars.notimers || (t == NULL))
+		return 0.0;
+
+	return t->timer_;
+}
+
+void timer_print_to_file(timer* t, FILE *f)
+{
+	fprintf(f,"%g:%d:%s:%d:%lld:%d:%g:%g\n",
+				t->timer_, 
+				t->active_, 
+				t->name_, 
+				t->count_, 
+				t->total_, 
+				t->elapsed_, 
+				t->cpu_, 
+				t->total_cpu_);
+				/* t->statname_ */ /* Not all stats have a name */
+}
+
+void timer_print(timer* t)
+{
+	char *name;
+	if(mars.notimers)
+	{
+		marslog(LOG_WARN,"Timers are disabled");
+		return;
+	}
+	if(t == NULL)
+	{
+		marslog(LOG_WARN,"Internal error: timer_print() called with NULL timer");
+		return;
+	}
+
+	
+	name = t->name_?t->name_:"";
+	/* Print timers longer than 1 second or those that have a rate */
+	if((t->timer_>=1) || (t->total_ != 0)) 
+	{
+		char cpu[1024] = "";
+
+		if(! t->elapsed_ && t->total_cpu_ >= 1.0)
+			sprintf(cpu,"cpu: %s",timename(t->total_cpu_));
+
+		if(t->total_ != 0)
+		{
+			double rate = (double)t->total_/t->timer_;
+			char bytes[80];
+			sprintf(bytes,"%sbyte(s)",bytename(t->total_));
+			marslog(LOG_INFO,"  %s: %s in %s [%sbyte/sec] %s",
+							 name,bytes,(t->timer_>=1)?timename(t->timer_):"< 1 sec",bytename(rate),cpu);
+		}
+		else
+			marslog(LOG_INFO,"  %s: wall: %s%s",name,timename(t->timer_),cpu);
+
+		if(t->statname_)
+			log_statistics(t->statname_,"%ld",(long)t->timer_);
+	}
+}
+
+void timer_partial_rate(timer *t, double start, long64 total)
+{
+	if(mars.notimers)
+	{
+		marslog(LOG_WARN,"Timers are disabled");
+		return;
+	}
+	if(t == NULL)
+	{
+		marslog(LOG_WARN,"Internal error: timer_partial_rate() called with NULL timer");
+		return;
+	}
+
+	{
+	double ptime = t->timer_ - start;
+	long64 ptotal = total;
+	char *name = t->name_?t->name_:"";
+	if(ptime>=1)
+	{
+		double rate = (double)ptotal/ptime;
+		char bytes[80];
+		sprintf(bytes,"%sbyte(s)",bytename(ptotal));
+		marslog(LOG_INFO,"  %s: %s in %s [%sbyte/sec]",
+						name,bytes,timename(ptime),bytename(rate));
+	}
+	}
+}
+
+void print_all_timers()
+{
+	timer *t = timers;
+	FILE  *f = NULL;
+
+	if(mars.timers_file)
+	{
+		if((f = fopen(mars.timers_file,"a")) == NULL)
+		{
+			marslog(LOG_WARN|LOG_PERR,"Cannot open '%s'",mars.timers_file);
+			marslog(LOG_WARN,"Disable printing timers to file");
+			mars.timers_file = NULL;
+		}
+		else
+			marslog(LOG_INFO,"Printing timers to file '%s'",mars.timers_file);
+	}
+	
+	while(t)
+	{
+		timer_print(t);
+		if(mars.timers_file)
+			timer_print_to_file(t,f);
+		t = t->next_;
+	}
+
+	if(mars.timers_file)
+	{
+		long long bytes = proc_mem();
+		fprintf(f,"%lld:%s\n",bytes,"Memory used");
+	}
+}
+
+void reset_all_timers()
+{
+	timer *t = timers;
+	while(t)
+	{
+		t->count_     = 0;
+		t->timer_     = 0;
+		t->active_    = 0;
+		t->total_     = 0;
+		t->total_cpu_ = 0;
+		t->cpu_       = 0;
+		t->elapsed_   = 0;
+		t = t->next_;
+	}
+}
+
+
+/*************************************************
+* Timed functions
+**************************************************/
+
+int timed_fread(char *buffer, int n, int length, FILE *f, timer *t)
+{
+	int r = 0;
+	long64 total = 0;
+	timer_start(t);
+	if((r = fread(buffer,n,length,f)) > 0)
+		total = r*n;
+
+	timer_stop(t,total);
+
+	return r;
+}
+
+int timed_wind_next(wind* w, FILE *f, char *buffer, long *length, timer *t)
+{
+	int r = 0;
+	long64 total = 0;
+	if((r = wind_next(w,f,buffer,length,t)) == 0)
+		total = *length;
+
+	return r;
+}
+
+int timed_fwrite(char *buffer, int n, int length, FILE *f, timer *t)
+{
+	int r = 0;
+	long64 total = 0;
+	timer_start(t);
+	if((r = fwrite(buffer,n,length,f)) > 0)
+		total = r*n;
+	timer_stop(t,total);
+
+	return r;
+}
+
+int timed_fclose(FILE *f, timer *t)
+{
+	int r = 0;
+	timer_start(t);
+	r = fclose(f);
+	timer_stop(t,0);
+
+	return r;
+}
+
+int timed_writetcp(void *data, char *buffer, int n, timer *t)
+{
+	int r = 0;
+	long64 total = 0;
+	timer_start(t);
+	if((r = writetcp(data,buffer,n)) > 0)
+		total = r;
+	timer_stop(t,total);
+
+	return r;
+}
+
+int timed_readtcp(void *data, char *buffer, int n, timer *t)
+{
+	int r = 0;
+	long64 total = 0;
+	timer_start(t);
+	if((r = readtcp(data,buffer,n)) > 0)
+		total = r;
+	timer_stop(t,total);
+	return r;
+}
+
+int timed_readany(FILE *f, char *buffer, long *length, timer *t)
+{
+	int e;
+	long original = *length;
+	long64 total = 0;
+	timer_start(t);
+	if(((e = _readany(f,buffer,length)) == NOERR) || (e == BUF_TO_SMALL))
+		total = (e == BUF_TO_SMALL)?original:*length;
+	timer_stop(t,total);
+
+	if(e != NOERR && e != BUF_TO_SMALL && e != EOF)
+	{
+		if(e == NOT_FOUND_7777)
+			marslog(LOG_WARN,"Group 7777 not found by readany",e);
+		else
+			marslog(LOG_WARN,"Error %d returned by readany",e);
+	}
+
+	return e;
+}
diff --git a/src/libMars-ecregrid/tools.c b/src/libMars-ecregrid/tools.c
new file mode 100755
index 0000000..eda42e9
--- /dev/null
+++ b/src/libMars-ecregrid/tools.c
@@ -0,0 +1,1705 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include "grib_api.h"
+#include <unistd.h>
+#include <math.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <pwd.h>
+#include <ctype.h>
+#ifdef sgi
+#include <bstring.h>
+#endif
+#include <string.h>
+
+#include <sys/param.h>
+
+#include <dirent.h>
+#include <sys/types.h>
+#include <time.h>
+#include <sys/time.h>
+
+#include <grib_api.h>
+
+#if defined(sgi)
+#define _MNT_ENT_ 
+#endif
+
+
+#ifdef _MNT_ENT_
+#include <mntent.h>
+#endif
+
+/* #include <sys/dir.h> */
+#ifndef S_IAMB
+#define S_IAMB 0777
+#endif
+
+#ifndef S_ISLNK
+#define S_ISLNK(a) ((a)&S_IFLNK != 0)
+#endif
+
+
+#define MAX_TIMER 10
+#ifndef NGROUPS
+#define NGROUPS 20
+#endif
+
+#include <sys/resource.h>
+
+#if !defined(hpux) && !defined(AIX) && !defined(linux) && !defined(CYGWIN)
+
+#include <sys/procfs.h>
+
+typedef struct procfs {
+	int        fd;
+	prpsinfo_t ps;
+	prstatus_t status;
+	char       fname[1024];
+} procfs_t;
+
+static procfs_t process;
+
+boolean init_process()
+{
+	pid_t pid;
+
+	static boolean inited = false;	
+	if(inited)
+		return inited;
+
+	pid = getpid();
+	sprintf(process.fname,"/proc/%d",pid);
+
+	if( (process.fd = open(process.fname,O_RDONLY | O_EXCL)) != -1)
+		inited = true;
+	else
+		marslog(LOG_WARN|LOG_PERR,"Failed to open process information file (%s)",process.fname);
+
+	return inited;
+}
+
+long64 proc_mem()
+{
+	if(init_process())
+	{
+		if(ioctl(process.fd,PIOCPSINFO,&(process.ps)) == -1)
+			marslog(LOG_WARN|LOG_PERR,"ioctl(...,PIOCPSINFO,...) failed on %s [fd=%d]",process.fname,process.fd);
+		else
+			return (process.ps.pr_size * getpagesize());
+	}
+	return 0;
+}
+
+#elif defined(AIX)
+
+#define PROCS_SIZE 1
+#include <procinfo.h>
+long64 proc_mem()
+{
+	pid_t p = getpid();
+	struct procsinfo  pinfos[PROCS_SIZE];
+	int n = getprocs(pinfos,sizeof(struct procsinfo),0,sizeof(struct fdsinfo),&p,PROCS_SIZE);
+	if(n)
+	{
+		/* return (pinfos[0].pi_dvm + pinfos[0].pi_tsize + pinfos[0].pi_sdsize ); */
+		return pinfos[0].pi_size * getpagesize();
+	}
+	return 0;
+}
+
+#else
+
+long64 proc_mem()
+{
+	return 0;
+}
+
+#endif
+
+
+double proc_cpu()
+{
+	struct rusage rup;
+
+	if(getrusage(RUSAGE_SELF,&rup) != -1)
+	{
+		return (rup.ru_utime.tv_sec + rup.ru_utime.tv_usec / 1000000.0 +
+			   rup.ru_stime.tv_sec + rup.ru_stime.tv_usec / 1000000.0);
+	}
+	return clock()/(double)CLOCKS_PER_SEC;
+}
+
+
+const char *user(void)
+{
+	static char *u;
+	struct passwd *pw;
+
+	if(u) return u;
+
+	setpwent();
+	if((pw = getpwuid(getuid())) == NULL)
+		marslog(LOG_EXIT|LOG_PERR,"Cannot get user name");
+
+	endpwent();
+
+	return u = strcache(pw->pw_name);
+}
+
+
+static err z(char *cmd,void *inbuf,void *outbuf,long inlen,long *outlen,long max)
+{
+	int toc[2];
+	int top[2];
+	int toz,frz;
+	fd_set fdr,fdw;
+	int nfd;
+	char *p,*q;
+	int  cnt;
+	boolean eof = false;
+	long sav = inlen;
+
+	if(pipe(top) < 0)
+	{
+		marslog(LOG_EROR | LOG_PERR,"(un)compress pipe (top)");
+		return -2;
+	}
+
+	if(pipe(toc) < 0)
+	{
+		marslog(LOG_EROR | LOG_PERR,"(un)compress pipe (toc)");
+		return -2;
+	}
+
+
+	switch(fork())
+	{
+	case 0:
+		if(dup2(toc[0],0)<0)
+			marslog(LOG_EXIT|LOG_PERR,"(un)compress dup2 (toc)");
+
+		if(dup2(top[1],1)<0)
+			marslog(LOG_EXIT|LOG_PERR,"(un)compress dup2 (top)");
+
+		close(toc[0]);
+		close(toc[1]);
+		close(top[0]);
+		close(top[1]);
+
+		execlp(cmd,cmd,"-c","-v",NULL);
+		marslog(LOG_EXIT|LOG_PERR,"(un)compress execlp");
+
+		break;
+
+	case -1:
+		marslog(LOG_EROR | LOG_PERR,"(un)compress fork");
+		return -2;
+		/*NOTREACHED*/
+		break;
+
+	default:
+
+		toz = toc[1];
+		frz = top[0];
+		close(toc[0]);
+		close(top[1]);
+
+		nfd = toz;
+		if(frz>nfd) nfd = frz;
+		nfd++;
+
+		p = inbuf;
+		q = outbuf;
+		cnt = 0;
+
+		/*
+		if(fcntl(toz,F_GETFL,&flags) < 0)
+		{
+			marslog(LOG_EROR | LOG_PERR,"(un)compress fcntl-F_GETFL(toz)");
+			close(toz);
+			close(frz);
+			return -2;
+		}
+*/
+
+		if( fcntl(toz,F_SETFL,O_NONBLOCK) <0 )
+		{
+			marslog(LOG_EROR | LOG_PERR,"(un)compress fcntl-F_SETFL(toz)");
+			close(toz);
+			close(frz);
+			return -2;
+		}
+
+		/*
+		if(fcntl(frz,F_GETFL,&flags) < 0 )
+		{
+			marslog(LOG_EROR | LOG_PERR,"(un)compress fcntl-F_GETFL(frz)");
+			close(toz);
+			close(frz);
+			return -2;
+		}
+*/
+		if( fcntl(frz,F_SETFL, O_NONBLOCK) <0 )
+		{
+			marslog(LOG_EROR | LOG_PERR,"(un)compress fcntl-F_SETFL(frz)");
+			close(toz);
+			close(frz);
+			return -2;
+		}
+
+		while(!eof)
+		{
+			FD_ZERO(&fdr);
+			FD_ZERO(&fdw);
+			if(toz >= 0) FD_SET(toz,&fdw);
+			if(frz >= 0) FD_SET(frz,&fdr);
+
+#if defined(hpux) && !defined(R64)
+			if(select(nfd,(int *) &fdr,(int *) &fdw,NULL,NULL) < 0)
+#else
+			if(select(nfd,&fdr,&fdw,NULL,NULL) < 0)
+#endif
+			{
+				marslog(LOG_EROR | LOG_PERR,"(un)compress select");
+				close(toz);
+				close(frz);
+				return -2;
+			}
+
+			if(toz >= 0  && FD_ISSET(toz,&fdw))
+			{
+				int len = write(toz,p,inlen);
+
+				if(len == -1 && errno != EAGAIN)
+				{
+					marslog(LOG_EROR | LOG_PERR,"(un)compress write");
+					close(toz);
+					close(frz);
+					return -2;
+				}
+
+				if(len > 0)
+				{
+					inlen -= len;
+					p      += len;
+
+					if(inlen <= 0)
+					{
+						close(toz);
+						toz = -1;
+					}
+				}
+			}
+
+			if(FD_ISSET(frz,&fdr))
+			{
+
+				/* long bytes = MIN(PIPE_BUF,max); */
+				long bytes = MIN(fpathconf(frz,_PC_PIPE_BUF),max);
+				long len;
+
+				len = read(frz,q,bytes);
+
+				if(len == -1 && errno != EAGAIN)
+				{
+					marslog(LOG_EROR | LOG_PERR,"(un)compress read");
+					close(toz);
+					close(frz);
+					return -2;
+				}
+
+
+				if(len == 0)
+					eof = true;
+
+				if(len > 0)
+				{
+					q  += len;
+					cnt+= len;
+					max-=len;
+
+					if(max<=0)
+					{
+						*outlen = sav;
+						close(toz);
+						close(frz);
+						marslog(LOG_DBUG,"Cannot %s",cmd);
+						return -1;
+					}
+				}
+			}
+
+		}
+
+		*outlen = cnt;
+
+		close(toz);
+		close(frz);
+
+		marslog(LOG_DBUG,"%s : %d -> %d (%5.2f%%)",cmd,
+		    sav,cnt,
+		    ABS((double)sav-(double)cnt)/
+		    (double)sav*100.0);
+
+	}
+	return NOERR;
+}
+
+
+err mars_compress(void *in,void *out,long inlen,long *outlen)
+{
+	return z("compress",in,out,inlen,outlen,inlen);
+}
+
+err mars_uncompress(void *in,void *out,long inlen,long *outlen)
+{
+	return z("uncompress",in,out,inlen,outlen,LONG_MAX);
+}
+
+/* s_stop() */
+/* { */
+/* } */
+
+const char *no_quotes(const char *in)
+{
+	static char buf[1024];
+	char *p = buf;
+
+
+	if(!in) return NULL;
+
+	strcpy(buf,in);
+
+	if(*buf == '"') /* || *buf == '\'') */
+	{
+		p = buf+1;
+		buf[strlen(buf)-1] = 0;
+	}
+	return p;
+}
+
+#ifdef VMS
+/* void bzero(void *a,int b) { memset(a,0,b); } */
+/* char *strdup(char *a) { char *p = MALLOC(strlen(a)+1);strcpy(p,a);return p;} */
+#endif
+
+#ifdef AIX
+int casecompare(const char *a,const char *b)
+{
+	char x,y;
+
+	while(*a && *b)
+	{
+		x = islower(*a) ? toupper(*a) : *a;
+		y = islower(*b) ? toupper(*b) : *b;
+
+		if(x != y) return x-y;
+
+		a++;
+		b++;
+	}
+	x = islower(*a) ? toupper(*a) : *a;
+	y = islower(*b) ? toupper(*b) : *b;
+
+	return x-y;
+}
+#endif
+
+
+static struct timeval start[MAX_TIMER];
+static double startcpu[MAX_TIMER];
+static int top = 0;
+
+void start_timer(void)
+{
+	if(mars.notimers)
+		return;
+	gettimeofday(&start[top],NULL);
+	startcpu[top] = proc_cpu();
+	top++;
+}
+
+static char *timetext(char *pfx,double ds,char *text)
+{
+	long s = ROUND(ds);
+	long x = s;
+	long n;
+	char sec[20];
+	char min[20];
+	char hou[20];
+	char day[20];
+
+	*text = *sec = *min = *hou = *day = 0;
+	if(s)
+	{
+
+		if((n = x % 60) != 0) sprintf(sec,"%ld sec ",n);
+		x /= 60;
+		if((n = x % 60) != 0) sprintf(min,"%ld min ",n);
+		x /= 60;
+		if((n = x % 24) != 0) sprintf(hou,"%ld hour ",n);
+		x /= 24;
+		if((n = x) != 0) sprintf(day,"%ld day ",n);
+
+		sprintf(text,"%s%s%s%s%s",pfx,day,hou,min,sec);
+	}
+
+	return text;
+
+}
+
+char *timename(double t)
+{
+	static char buf[80];
+	return timetext("",t,buf);
+}
+
+double stop_timer(char *text)
+{
+	if(mars.notimers)
+	{
+		*text = 0;
+		return 0.0;
+	}
+
+	{
+	struct timeval stop;
+	struct timeval diff;
+	double   s;
+	clock_t cpu =  proc_cpu();
+
+	top--;
+
+
+	gettimeofday(&stop,NULL);
+
+
+	diff.tv_sec  = stop.tv_sec  - start[top].tv_sec;
+	diff.tv_usec = stop.tv_usec - start[top].tv_usec;
+
+	if (diff.tv_usec < 0)
+	{
+		diff.tv_sec--;
+		diff.tv_usec += 1000000;
+	}
+
+	s = (double)diff.tv_sec + ((double)diff.tv_usec / 1000000.);
+
+	if(text)
+	{
+		char t1[80];
+		char t2[80];
+
+		sprintf(text,"%s%s",
+		    timetext(" wall: ",s,t1),
+			timetext(" cpu: ",(cpu-startcpu[top]),t2));
+	}
+
+	return s;
+	}
+}
+
+clock_t timer_cpu()
+{
+	if(mars.notimers)
+		return 0;
+
+	return proc_cpu()-startcpu[top];
+}
+
+const char *bytename(double bytes)
+{
+	static char *names[] = { "","K","M","G","T","P","E","Z","Y" }; 
+    double x = bytes; 
+    int    n = 0;
+	static char buf[20];
+
+	while(x>=1024.0 && n < NUMBER(names))
+	{
+		x /= 1024.0;
+		n++;
+	}
+
+	sprintf(buf,"%.2f %s",x,names[n]);
+
+	return buf;
+}
+
+int mkdirp(const char *path,int mode)
+{
+	const char *p = path + 1;
+
+	while(*p)
+	{
+		if(*p == '/')
+		{
+			char *q = (char*)p;
+			*q = 0;
+			mkdir(path,mode);
+			*q = '/';
+		}
+		p++;
+	}
+	return mkdir(path,mode);
+}
+
+const char *makepath(const char *dname,const char *fname)
+{
+	static char buf[1024];
+	char        tmp[1024];
+	char *p;
+	char *q;
+	char *r = NULL;
+	boolean more = true;
+
+	*buf = 0;
+
+	if(fname && *fname == '/') return fname;
+
+	if(dname[0] == '/' || dname[0] == '.' || dname[0] == '\0')
+		sprintf(tmp,"%s/%s",dname,fname);
+	else
+		sprintf(tmp,"./%s/%s",dname,fname);
+
+	while(more)
+	{
+		more = false;
+		p = tmp;
+		r = NULL;
+		*buf = 0;
+
+
+		while((q = strtok(p,"/")) && !more)
+		{
+			if(strcmp(q,".") == 0)
+			{
+				if(r == NULL) strcat(buf,q);
+			}
+			else if((strcmp(q,"..") == 0)) {
+				if(r == NULL) strcat(buf,q);
+				else
+				{
+					more = true;
+					*r   = 0;
+					strcat(buf,"/");
+					strcat(buf,q+3);
+				}
+			}
+			else {
+				r = buf + strlen(buf);
+				strcat(buf,"/");
+				strcat(buf,q);
+			}
+
+			p = NULL;
+		}
+		strcpy(tmp,buf);
+	}
+
+	return buf;
+}
+
+const char *mbasename(const char *fname)
+{
+	static char buf[1024];
+
+	*buf = 0;
+
+	if(fname)
+	{
+		int n = -1;
+		int i = 0;
+		const char *q = fname;
+
+		while(*q) {
+			if(*q == '/') n = i;
+			q++;
+			i++;
+		}
+		strcat(buf,fname+(n+1));
+	}
+
+
+	return buf;
+}
+
+const char *dirname(const char *fname)
+{
+	static char buf[1024];
+
+	strcpy(buf,".");
+
+	if(fname)
+	{
+		int n = -1;
+		int i = 0;
+		char *q = buf;
+		strcpy(buf,fname);
+		while(*q) {
+			if(*q == '/') n = i;
+			q++;
+			i++;
+		}
+
+		switch(n)
+		{
+		case -1:
+			strcpy(buf,".");
+			break;
+
+		case 0:
+			strcpy(buf,"/");
+			break;
+
+		default:
+			buf[n] = 0;
+		}
+	}
+
+
+	return buf;
+}
+
+int deletefile(const char *name)
+{
+	int e = 0;
+	struct stat st;
+
+	if((e = lstat(name,&st)) != 0) /*  Don't follow link */
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot stat %s",name);
+		return e;
+	}
+
+	if(S_ISDIR(st.st_mode) && !S_ISLNK(st.st_mode))
+	{
+		struct dirent *s;
+		DIR *d;
+
+		d = opendir(name);
+		if(!d) {
+			marslog(LOG_EROR|LOG_PERR,"opendir %s",name);
+			return -1;
+		}
+
+		while((s = readdir(d)) && (e == 0))
+		{
+			if(strcmp(s->d_name,".") != 0 && strcmp(s->d_name,"..") != 0)
+			{
+				char buf[1024];
+				sprintf(buf,"%s/%s",name,s->d_name);
+				e = deletefile(buf);
+			}
+		}
+		closedir(d);
+		if(e == 0)
+		{
+			e = rmdir(name);
+			if(e) marslog(LOG_EROR|LOG_PERR,"Cannot rmdir %s",name);
+		}
+	}
+	else
+	{
+		e = unlink(name);
+		if(e) marslog(LOG_EROR|LOG_PERR,"Cannot unlink %s",name);
+	}
+	return e;
+}
+
+int movefile(const char *from,const char *to)
+{
+	int e = rename(from,to);
+	if(e)
+	{
+		if(errno == EXDEV) /* different file systems */
+		{
+			e = copyfile(from,to);
+			if(e == 0) e = deletefile(from);
+		}
+		else marslog(LOG_EROR|LOG_PERR,"Cannot rename %s to %s",from,to);
+	}
+	return e;
+}
+
+int copylink(const char *from,const char *to)
+{
+	int e = 0;
+	int x;
+	char buf[1024];
+
+	if(access(to,0) == 0)
+	{
+		marslog(LOG_EROR,"copy: %s exists",to);
+		return -1;
+	}
+
+	if((x = readlink(from,buf,sizeof(buf)-1))<0)
+	{
+		marslog(LOG_EROR|LOG_PERR,"readlink(%s)",from);
+		return e;
+	}
+
+	buf[x] = 0;
+
+	if(e = symlink(buf,to))
+	{
+		marslog(LOG_EROR|LOG_PERR,"symlink(%s,%s)",buf,to);
+		return e;
+	}
+	return 0;
+
+}
+
+int copydata(const char *from,const char *to)
+{
+	FILE *f,*g;
+	char buf[10240];
+	int   e = 0;
+	int n;
+
+	if(faccess(to,0) == 0)
+	{
+		marslog(LOG_EROR,"copy: %s exists",to);
+		return -1;
+	}
+
+	f = fopen(from,"r");
+	if(f == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"fopen(%s)",from);
+		return -1;
+	}
+
+	g = fopen(to,"w");
+	if(g == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"fopen(%s)",to);
+		return -1;
+	}
+
+	while( (n = fread(buf,1,sizeof(buf),f)) > 0)
+	{
+		if(ferror(f)) {
+			marslog(LOG_EROR|LOG_PERR,"Read error file %s",from);
+			e=1;
+		}
+		fwrite(buf,1,n,g);
+		if(ferror(g)) {
+			marslog(LOG_EROR|LOG_PERR,"Write error file %s",to);
+			e=1;
+		}
+	}
+
+	if(fflush(g))
+	{
+		marslog(LOG_EROR|LOG_PERR,"Write error file %s",to);
+		e=1;
+	}
+
+	fclose(f);
+	fclose(g);
+
+	return e;
+
+}
+
+int copydir(const char *from,const char *to)
+{
+	struct dirent *s;
+	DIR *d;
+	int e = 0;
+
+	if(faccess(to,0) == 0)
+	{
+		marslog(LOG_EROR,"copy: %s exists",to);
+		return -1;
+	}
+	if(e = mkdir(to,0777))
+	{
+		marslog(LOG_EROR|LOG_PERR,"mkdir %s",to);
+		return e;
+	}
+
+	d = opendir(from);
+	if(!d) {
+		marslog(LOG_EROR|LOG_PERR,"opendir %s",from);
+		return -1;
+	}
+
+	while((s = readdir(d)) && (e == 0))
+	{
+		if(strcmp(s->d_name,".") != 0 && strcmp(s->d_name,"..") != 0)
+		{
+			char buf1[1024];
+			char buf2[1024];
+			sprintf(buf1,"%s/%s",from,s->d_name);
+			sprintf(buf2,"%s/%s",to  ,s->d_name);
+			e = copyfile(buf1,buf2);
+		}
+	}
+	closedir(d);
+	return e;
+}
+
+int copyfile(const char *from,const char *to)
+{
+	int e = 0;
+	struct stat stf,stt;
+	boolean newfile = false;
+	boolean dirt = false,dirf = false;
+
+	mode_t mask = umask(0);
+	umask(mask);
+
+	if(e = lstat(from,&stf)) /*  Don't follow link */
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot stat %s",from);
+		return e;
+	}
+	/* from is a directory */
+	dirf = (S_ISDIR(stf.st_mode) && !S_ISLNK(stf.st_mode));
+
+	if(e = lstat(to,&stt)) /*  Don't follow link */
+	{
+		if(errno != ENOENT) /* File not found */
+		{
+			marslog(LOG_EROR|LOG_PERR,"Cannot stat %s",to);
+			return e;
+		}
+		newfile = true;
+		/* to is a directory */
+	} else dirt = (S_ISDIR(stt.st_mode) && !S_ISLNK(stt.st_mode));
+
+	/* There already is a file */
+	if(!newfile)
+	{
+		if(stt.st_dev == stf.st_dev && stt.st_ino == stf.st_ino)
+		{
+			marslog(LOG_INFO,"Cannot copy file %s and %s are identical",
+			    from,to);
+			return -1;
+		}
+		if(dirf && !dirt)
+		{
+			marslog(LOG_INFO,"Cannot copy directory %s onto file %s",from,to);
+			return -1;
+		}
+
+		/* The target is a directory */
+		if(dirt)
+		{
+			char buf[1024];
+			const char *p = mbasename(from);
+			sprintf(buf,"%s/%s",to,p);
+			return copyfile(from,buf);
+		}
+		/* The target is a file */
+		else
+		{
+			if(e = unlink(to))
+			{
+				marslog(LOG_EROR|LOG_PERR,"Cannot unlink %s",to);
+				return e;
+			}
+			if(S_ISLNK(stf.st_mode)) return copylink(from,to);
+			if(S_ISDIR(stf.st_mode)) return copydir(from,to);
+			e = copydata(from,to);
+
+			if(e == 0)
+			{
+				mode_t mode = 0777 & ~mask;
+				if(e = chmod(to,mode))
+					marslog(LOG_EROR|LOG_PERR,"chmod(%s,%o) failed",to,mode);
+			}
+			return e;
+		}
+
+	}
+	else /* There is no target file */
+	{
+		if(S_ISLNK(stf.st_mode)) return copylink(from,to);
+		if(S_ISDIR(stf.st_mode)) return copydir(from,to);
+		e = copydata(from,to);
+		if(e == 0)
+		{
+			mode_t mode = 0777 & ~mask;
+			if(e = chmod(to,stf.st_mode&S_IAMB))
+				marslog(LOG_EROR|LOG_PERR,"chmod(%s,%o) failed",to,mode);
+		}
+		return e;
+	}
+}
+
+/* find a relative path */
+
+const char *relpath(const char *from,const char *to)
+{
+	static char buf[1024];
+	const char *p1,*p2,*p,*q;
+
+	if(*from != '/' && *to != '/') return to;
+
+	p = p1 = from;
+	q = p2 = to;
+
+	/* If exactly same pathname, stop at the end of string */
+	while((*p1 != '\0') && (*p2  != '\0') && (*p1 == *p2)) {
+		if (*p1 == '/') {
+			p = p1+1;
+			q = p2+1;
+		}
+		p1++;
+		p2++;
+	}
+
+	buf[0] = 0;
+	while(*p)
+	{
+		if(*p == '/') strcat(buf,"../");
+		p++;
+	}
+
+	strcat(buf,q);
+	return buf;
+
+
+}
+
+void dumpenv(void)
+{
+	/*
+	extern char **environ;
+	int n = 0;
+
+	while(environ[n])
+		marslog(LOG_INFO,"Env : '%s'",environ[n++]);
+		*/
+
+}
+
+static int saccess(struct stat *s,int flags)
+{
+	static gid_t groups[NGROUPS];
+	static int first = 1;
+	static uid_t user;
+	static int ngrp;
+	int u,g,o;
+	int i;
+
+	if(first)
+	{
+		first = 0;
+		user  = getuid();
+		ngrp  = getgroups(NGROUPS,groups);
+	}
+
+
+	if(flags & R_OK) 
+	{
+		flags &= ~R_OK;
+		u = s->st_mode & S_IRUSR;
+		g = s->st_mode & S_IRGRP;
+		o = s->st_mode & S_IROTH;
+
+		if(user  == s->st_uid) return u?0:-1;
+		for(i=0;i<ngrp;i++)
+			if(groups[i] == s->st_gid) return g?0:-1;
+		return o?0:-1;
+	}
+
+	if(flags & W_OK) 
+	{
+		flags &= ~W_OK;
+		u = s->st_mode & S_IWUSR;
+		g = s->st_mode & S_IWGRP;
+		o = s->st_mode & S_IWOTH;
+
+		if(user  == s->st_uid) return u?0:-1;
+		for(i=0;i<ngrp;i++)
+			if(groups[i] == s->st_gid) return g?0:-1;
+		return o?0:-1;
+	}
+
+	if(flags & X_OK) 
+	{
+		flags &= ~X_OK;
+		u = s->st_mode & S_IXUSR;
+		g = s->st_mode & S_IXGRP;
+		o = s->st_mode & S_IXOTH;
+
+		if(user  == s->st_uid) return u?0:-1;
+		for(i=0;i<ngrp;i++)
+			if(groups[i] == s->st_gid) return g?0:-1;
+		return o?0:-1;
+	}
+
+	if(flags != 0) 
+		marslog(LOG_WARN,"saccess: bad flags");
+	return 0;
+}
+
+int faccess(const char *fname,int flags)
+{
+	struct stat s;
+	if(stat(fname,&s)) return -1;
+	return saccess(&s,flags);
+}
+
+const char *lowcase(const char *p)
+{
+	static char buf[10240];
+	int i = 0;
+	while(*p)
+	{
+		if(isupper(*p)) 
+			buf[i] = tolower(*p);
+		else 
+			buf[i] = *p;
+		i++;
+		p++;
+	}
+	buf[i] = 0;
+	return buf;
+}
+
+const char *upcase(const char *p)
+{
+	static char buf[1024];
+	int i = 0;
+	while(*p)
+	{
+		if(islower(*p)) 
+			buf[i] = toupper(*p);
+		else 
+			buf[i] = *p;
+		i++;
+		p++;
+	}
+	buf[i] = 0;
+	return buf;
+}
+
+static int cmpstringp(const void *p1, const void *p2)
+{
+	return strcmp(* (char * const *) p1, * (char * const *) p2);
+}
+
+void print_environment(FILE *f)
+{
+#if defined(__STDC__)
+#ifndef __alpha
+#  define environ _environ
+#endif
+#endif
+
+	extern char **environ;
+	int n = 0;
+	int s = 0;
+	while(environ[s]) s++;
+
+	qsort(environ, s, sizeof(char *), cmpstringp);
+
+	while(environ[n])
+		fprintf(f,"%s\n",environ[n++]);
+}
+
+/* Creates an e-mail to 'to' with 'subject' and a timestamp */
+FILE* mail_open(const char* to, char *fmt,...)
+{
+	FILE  *f = 0;
+	char  buf[1024];
+	char subject[512];
+	va_list list;
+
+	va_start(list,fmt);
+	vsprintf(subject, fmt, list);
+	va_end(list);
+
+	if(to)
+		sprintf(buf,"%s -s '%s' %s",mars.mailer,subject,to);
+	else
+		marslog(LOG_EROR|LOG_EXIT,"MARS internal error. Mail recipient not specified");
+
+	marslog(LOG_DBUG,"Seding email with command '%s'",buf);
+	if(f = popen(buf,"w")) {
+		char timestamp[80];
+		time_t now;
+		char host[1024];
+
+		if(gethostname(host,sizeof(host)) != 0)
+			strcpy(host,"unknown");
+
+		/* Timestamp */
+		time(&now);
+		strftime(timestamp,sizeof(timestamp),"%Y-%m-%d %H:%M:%S",gmtime(&now));
+		fprintf(f,"Mail sent on %s from %s\n\n",timestamp,host);
+
+	} else {
+		marslog(LOG_EROR|LOG_PERR,"popen: '%s'",buf);
+		f = stdout;
+	}
+
+	return f;		
+}
+
+void notify_user(const char *what, const request *r)
+{
+#if 0
+	char message[256];
+	FILE* f;
+	char *subject;
+
+	sprintf(message,"%s/chk/%s.mail",mars.mars_home,what);
+
+	f = mail_once(what, user,"%s",subject);
+#endif
+}
+
+FILE* mail_once(const char *mark, const char* to, char *fmt,...)
+{
+	FILE *f = 0;
+	char markfile[256];
+	time_t last = 0;
+	boolean send = true;
+			
+
+	if(!mars.home)
+		return 0;
+
+	sprintf(markfile,"%s/%s",mars.home,mark);
+
+	last = age(markfile);	
+
+	/* Send if mark does not exist or 
+	   the user wants always an e-mail or
+	   is old enough */
+	send = (faccess(markfile,0) != 0) || 
+		   (!mars.mail_frequency) || 
+		   (last > mars.mail_frequency);
+	if(send)
+	{
+		char subject[512];
+		va_list list;
+		
+
+		va_start(list,fmt);
+		vsprintf(subject, fmt, list);
+		va_end(list);
+
+		f = mail_open(to,subject);
+		fprintf(f,"The frequency of this automatic message is controlled\n");
+		fprintf(f,"with the environment variable MARS_MAIL_FREQUENCY.\n");
+		fprintf(f,"Set it to 0 before calling MARS if you want to receive an\n"); 
+		fprintf(f,"e-mail for each occurrence of such situation.\n");
+		fprintf(f,"Otherwise, it is expressed in seconds\n");
+		if(mars.mail_frequency > 0)
+			fprintf(f,"Its current value is: %s \n\n",timename(mars.mail_frequency));
+		else
+			fprintf(f,"Its current value is: %d\n\n",mars.mail_frequency);
+
+		touch(markfile);
+	}
+
+	return f;
+}
+
+void mail_msg(FILE *f, char *fmt,...)
+{
+	if(f) {
+		char buf[1024];
+		va_list list;
+
+		va_start(list,fmt);
+		vsprintf(buf, fmt, list);
+		va_end(list);
+
+		fprintf(f,"%s\n",buf);
+	}
+}
+
+void mail_request(FILE *f, const char *msg, const request *r)
+{
+	if(f) {	
+		if(msg)
+			fprintf(f,"\n%s\n",msg);
+		save_all_requests(f,r);
+	}
+}
+
+void mail_close(FILE *f)
+{
+	if(f) {
+		fprintf(f,"\nUnix Environment:\n");
+		print_environment(f);
+		pclose(f);
+	}
+}
+
+const char *real_name(const char* fname)
+{
+	char buf[1014];
+	static char tmp[1024];
+	char *c = buf;
+	char *p;
+	int last = 0,n;
+	char dir[1024];
+	char lasttmp[1024];
+
+	if(*fname != '/')
+	{
+		getcwd(dir,1024);
+		sprintf(tmp,"%s/%s",dir,fname);
+	}
+	else strcpy(tmp,fname);
+
+	*lasttmp = 0;
+
+	for(;;)
+	{
+		strcpy(buf,tmp);
+
+		*tmp = 0;
+		c = buf;
+		last = 0;
+
+
+		while(p=strtok(c,"/"))
+		{
+
+			c = NULL;
+			if(strcmp(p,".") == 0) continue;
+
+			if(strcmp(p,"..") == 0)
+			{
+				tmp[last] = 0;
+				while(tmp[last] != '/') last--;
+			}
+			else
+			{
+				last = strlen(tmp);
+				strcat(tmp,"/");
+				strcat(tmp,p);
+			}
+
+			/* sun specific */
+
+			while((n=readlink(tmp,dir,1024))>0)
+			{
+				dir[n] = 0;
+
+
+				if(*dir != '/')
+				{
+					tmp[last] = 0;
+					strcat(tmp,"/");
+					strcat(tmp,dir);
+				}
+				else strcpy(tmp,dir);
+
+				last = strlen(tmp);
+
+				while(tmp[last] != '/') last--;
+			}
+			/* end sun specific */
+
+
+		}
+
+		if(strcmp(lasttmp,tmp)==0) break;
+		strcpy(lasttmp,tmp);
+	}
+
+	return tmp;
+
+}
+
+
+void nfs_lookup(const char* fname, char *host, char *path)
+{
+	
+#ifdef _MNT_ENT_
+	FILE *f;
+	char dir[1024];
+	struct mntent *ent;
+#endif
+	char buf[1024];
+	const char *rname;
+	int max = 0;
+	char *q;
+
+	rname = real_name(fname);
+
+#ifndef _MNT_ENT_
+
+	strcpy(host,"");
+
+#else
+	f = setmntent("/etc/mtab","r");
+	while(ent = getmntent(f))
+	{
+
+		int len = strlen(ent->mnt_dir);
+
+		if(strcmp(ent->mnt_type,"ignore") != 0 &&
+		    strncmp(ent->mnt_dir,rname,len)==0)
+		{
+			if(len>=max)
+			{
+				max = len;
+				strcpy(host,ent->mnt_fsname);
+				strcpy(dir,ent->mnt_dir);
+			}
+		}
+	}
+	endmntent(f);
+#endif
+
+	if((strtok(host,":")) && (q = strtok(NULL,":")))
+	{
+		if(*q == '/')
+		{
+			sprintf(buf,"%s%s",q,rname+max);
+			rname = buf;
+		}
+	}
+	else gethostname(host,80);
+
+	strcpy(path,rname);
+}
+
+#ifdef sgi 
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
+
+
+boolean if_check(const char* host)
+{
+	struct hostent *h = gethostbyname(host);  /* Incoming host */
+	struct ifconf i;                          /* Interfaces configuration */
+	int s = socket(AF_INET, SOCK_STREAM, 0);  /* Socket to get interfaces */
+
+	int  buflen     = (sizeof(struct ifreq)*32); /* Maximum of 32 interfaces */
+	char *ptr, *buf = reserve_mem(buflen);       /* Buffer to hold interfaces */
+	boolean found   = false;
+	err     ioctlerr = false;
+
+	/* Initialize buf to avoid 'UMR: Uninitialized memory read'*/
+	bzero(buf,buflen);
+
+	/* Get list of all interfaces */
+	i.ifc_len = buflen;
+	i.ifc_req = (struct ifreq*)buf;
+	if(ioctl(s,SIOCGIFCONF,&i) < 0)
+	{
+		marslog(LOG_WARN|LOG_PERR,"ioctl on ifconf request: ");
+		return found;
+	}
+
+	/* Process inet address of all interfaces */
+	for(ptr = buf; ptr < (buf + i.ifc_len); ptr += sizeof(struct ifreq))
+	{
+		struct ifreq flags;
+		struct ifreq *ireq = (struct ifreq *)ptr;
+		int len = 0;
+
+		/* Check if interface is UP or DOWN */
+		memcpy(flags.ifr_name,ireq->ifr_name,IFNAMSIZ);
+		if(ioctl(s,SIOCGIFFLAGS,&flags) <0)
+		{
+			marslog(LOG_WARN|LOG_PERR,"ioctl on interface flags request: ");
+			continue;
+		}
+
+		if( (flags.ifr_flags & IFF_UP) == 0)
+		{
+			marslog(LOG_DBUG,"Interface '%s' is down",flags.ifr_name);
+			continue;
+		}
+
+
+#ifdef _HAVE_SA_LEN
+		len = max(sizeof(struct sockaddr),ireq->ifr_addr.sa_len);
+#else
+		marslog(LOG_DBUG,"Cheking interface family %d for '%s'", ireq->ifr_addr.sa_family, ireq->ifr_name);
+		switch(ireq->ifr_addr.sa_family)
+		{
+#ifdef IPV6
+			case AF_INET6:
+				len = sizeof(struct sockaddr_in6);
+				break;
+#endif
+			case AF_INET:
+				len = sizeof(struct sockaddr);
+				break;
+
+			default:
+				marslog(LOG_DBUG,"Unknown interface family %d for '%s'", ireq->ifr_addr.sa_family, ireq->ifr_name);
+				len = sizeof(struct sockaddr);
+				break;
+		}
+#endif
+
+		/* Get the flags for the interface to check if it is UP */
+		memcpy(flags.ifr_name,ireq->ifr_name,IFNAMSIZ);
+		memcpy(&flags.ifr_addr,&ireq->ifr_addr,len);
+		if(ioctl(s,SIOCGIFFLAGS,&flags) <0)
+		{
+			marslog(LOG_WARN|LOG_PERR,"ioctl on interface flags request: ");
+			ioctlerr = true;
+		}
+
+		if(!ioctlerr && (flags.ifr_flags & IFF_UP))
+		{
+			struct ifaliasreq alias;
+			alias.cookie = 1;
+
+			/* Process all aliases for this interface */
+			while(alias.cookie != -1 && !found && !ioctlerr)
+			{
+				char **addr;
+				struct in_addr *ain_addr = 0;
+
+				/* Get inet address of alias for this interface */
+				memcpy(alias.ifra_name,ireq->ifr_name,IFNAMSIZ);
+				memcpy(&alias.ifra_addr,&ireq->ifr_addr,len);
+				if(ioctl(s,SIOCLIFADDR,&alias) <0)
+				{
+					marslog(LOG_WARN|LOG_PERR,"ioctl on iterface alias request: ");
+					ioctlerr = true;
+				}
+				else
+				{
+					/* Compare alias inet address with host's address list */
+					ain_addr = &((struct sockaddr_in *)&alias.ifra_addr)->sin_addr;
+					for(addr = h->h_addr_list; *addr; addr++)
+					{
+						if(memcmp(*addr,ain_addr,h->h_length) == 0) 
+							found = true;
+					}
+				}
+			}
+		}
+	}
+
+	release_mem(buf);
+	close(s);
+	return found;
+}
+
+#else
+boolean if_check(const char *p)
+{
+	return false;
+}
+#endif
+
+void check_nfs_target(const char* path)
+{
+	static int done = 0;
+	char remote[80]	;
+	char me[80]	;
+	char file[1024];
+
+	gethostname(me,80);
+
+	nfs_lookup(path,remote,file);
+
+	if(!(EQ(me,remote) || if_check(remote))) 
+	{
+		log_statistics("target","nfs:%s",remote);
+		if(!done && !getenv("MARS_DONT_DISPLAY_NFS"))
+		{
+			marslog(LOG_WARN,"");
+			marslog(LOG_WARN,"The file '%s' is on the NFS server %s and",path,remote);
+			marslog(LOG_WARN,"the data will be transfered twice over the network.");
+			marslog(LOG_WARN,"First from the MARS server to %s, then from %s to %s.",me,me,remote);
+			marslog(LOG_WARN,"NFS trafic is very, very slow, so if you retrieve a lot of data,");
+			marslog(LOG_WARN,"you can either run your request on %s, or have a local target.",remote);
+			marslog(LOG_WARN,"");
+			done = 1;
+		}
+	}
+
+}
+
+/* This should be in the GribAPI. COME BACK HERE! */
+long grib_length(const char *buffer, long length)
+{
+
+	long len;
+	err e = NOERR;
+	grib_handle *h = grib_handle_new_from_message_copy(0,buffer,length);
+	if( e = grib_get_long(h,"totalLength",&len))
+	{
+		marslog(LOG_WARN,"Cannot get totalLength for message");
+	}
+	grib_handle_delete(h);
+	return len;
+
+}
+
+/*
+Trick to avoid re-declaring all long length to fortint in mars source code
+*/
+
+
+#if 0
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+extern fortint readgrib(FILE *,char*,fortint*);
+extern fortint readbufr(FILE *,char*,fortint*);
+extern fortint readany(FILE *,char*,fortint*);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+}
+#endif
+#endif
+
+void mars_grib_api_init()
+{
+	/* Set grib_api debug logging with marslog */
+	grib_context_set_logging_proc(NULL, mars_grib_api_log);
+
+	/* grib_api compatibility mode with GRIBEX on */
+	grib_gribex_mode_on(NULL);
+}
+
+
+long _readany(FILE *f, char *b, long *l)
+{
+	size_t len = *l;
+	long e =  wmo_read_any_from_file(f,(unsigned char*)b,&len);
+	*l = len;
+
+	if(e && e != GRIB_END_OF_FILE) 
+		marslog(LOG_EROR|LOG_PERR,"wmo_read_any_from_file: error %d (%s) l=%ld, len=%ld",e,
+			grib_get_error_message(e),len);
+
+	return e;
+}
+
+long _readgrib(FILE *f, char *b, long *l)
+{
+	size_t len = *l;
+	long e =  wmo_read_grib_from_file(f,(unsigned char*)b,&len);
+	*l = len;
+	return e;
+}
+
+long _readbufr(FILE *f, char *b, long *l)
+{
+	size_t len = *l;
+	long e =  wmo_read_bufr_from_file(f,(unsigned char*)b,&len);
+	*l = len;
+	return e;
+}
+
+void touch(const char* path)
+{
+	FILE *f = fopen(path,"a");
+	if(!f)
+	{
+		marslog(LOG_WARN|LOG_PERR,"Cannot open '%s'",path);
+		return;
+	}
+	if(fclose(f) == -1)
+	{
+		marslog(LOG_WARN|LOG_PERR,"Cannot close '%s'",path);
+		return;
+	}
+}
+
+
+time_t age(const char* path)
+{
+	time_t now;
+	struct stat st;
+	err    e = NOERR;
+
+	if(e = stat(path,&st))
+	{
+		return e;
+	}
+	time(&now);
+
+	return now-st.st_mtime;
+}
+
+/* base: depending on what the buffer is used for, base could
+		 be different: 
+         - For GRIB headers, good size could be 32 Kb. 
+         - For data transfers, good size could be 1 Mb
+		 - Set base=0 in order to accept whatever the filesystem prefers
+*/
+
+
+long preferred_IO_blocksize(const char *path, long base)
+{
+	struct stat buf;
+
+	if(stat(path,&buf))
+	{
+		marslog(LOG_WARN|LOG_PERR,"Cannot stat '%s'",path);
+		return 1024*1024;    /* 1Mb by default */
+	}
+
+	if(buf.st_blksize == 0)
+	{
+		marslog(LOG_WARN,"stat(%s) does not return a block size",path);
+		return 1024*1024;    /* 1Mb by default */
+	}
+
+	/* Take rounding max of preferred filesystem size and base */
+	return ((base + (buf.st_blksize - 1))/buf.st_blksize)*buf.st_blksize;
+}
+
+double round_decimal(double f)
+{
+	double precision;
+	/* Warning, gcc wants two lines here */
+	double x ;
+	precision = 1000.0;
+	x = floor(precision * f + 0.5) / precision; 
+	return x;
+}
+
+#ifdef NO_ATOLL_SUPPORT
+long64 atoll(const char *str)
+{
+	long64 ll = 0;
+	sscanf(str,"%lld",&ll);
+	return ll;
+}
+#endif
+
+
+void print_memory_usage(char *s)
+{
+	long long bytes = proc_mem();
+	if(bytes)
+	{
+		if(s)
+			marslog(LOG_INFO,"(%s) Memory used: %sbyte(s)",s,bytename((double)bytes));
+		else
+			marslog(LOG_INFO,"Memory used: %sbyte(s)",bytename((double)bytes));
+	}
+}
+
diff --git a/src/libMars-ecregrid/tools.h b/src/libMars-ecregrid/tools.h
new file mode 100755
index 0000000..8de8e86
--- /dev/null
+++ b/src/libMars-ecregrid/tools.h
@@ -0,0 +1,20 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+err mars_compress(void *in,void *out,long inlen,long *outlen);
+err mars_uncompress(void *in,void *out,long inlen,long *outlen);
+#if defined(__cplusplus) || defined(c_plusplus)
+}
+#endif
+
diff --git a/src/libMars-ecregrid/udp.c b/src/libMars-ecregrid/udp.c
new file mode 100644
index 0000000..8b33e7e
--- /dev/null
+++ b/src/libMars-ecregrid/udp.c
@@ -0,0 +1,211 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <fcntl.h>
+#include <errno.h>
+
+int readudp(void *p,void *buf,u_int len)
+{
+	udpinfo *info = (udpinfo*)p;
+	marssocklen_t sinlen = sizeof(struct sockaddr_in);
+	int done = 0;
+
+	while(!done)
+	{
+		fd_set fds;
+		struct timeval *t = &info->timeout;
+
+		if(t->tv_sec == 0 && t->tv_usec == 0)
+			t = NULL;
+
+		FD_ZERO(&fds); 
+		FD_SET(info->soc,&fds);
+
+		switch(select(FD_SETSIZE,&fds,NULL,NULL,t))
+		{
+			case 0:
+				/* marslog(LOG_EROR,"readudp timeout"); */
+				/* time out */
+				return -1;
+				/* break; */
+
+			case -1:
+				if(errno != EINTR)
+				{
+					marslog(LOG_EROR|LOG_PERR,"select");
+					return -1;
+				}
+				break;
+
+			default:
+				done = 1;
+				break;
+		}
+	}
+
+	len = recvfrom(info->soc,buf,len,0,(struct sockaddr*)&info->sin,&sinlen);
+	/* print_address("recvfrom",&info->sin); */
+	return len;
+}
+
+int writeudp(void *p,void *buf,u_int len)
+{
+	udpinfo *info = (udpinfo*)p;
+	int n = sendto(info->soc,buf,len,0,(struct sockaddr*)&info->sin,
+		sizeof(struct sockaddr_in));
+	/* print_address("sendto",&info->sin); */
+	if(n != len)
+		marslog(LOG_EROR|LOG_PERR,"sendto failed");
+	return n;
+}
+
+int udp_socket(int port)
+{
+
+	int flg;
+	int s;
+
+#ifdef SO_LINGER
+	struct  linger ling;
+#endif
+	struct sockaddr_in sin;
+
+	s = socket(AF_INET, SOCK_DGRAM, 0);
+
+	if (s < 0)
+	{
+		marslog(LOG_EROR|LOG_PERR,"socket");
+		return -1;
+	}
+
+	flg = 1 ;
+	if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (msockopt)&flg, sizeof(flg))<0)
+		marslog(LOG_WARN|LOG_PERR,"setsockopt SO_REUSEADDR");
+
+/*
+	flg = 1 ;
+	if(setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (msockopt)&flg, sizeof(flg))<0)
+		marslog(LOG_WARN|LOG_PERR,"setsockopt SO_KEEPALIVE");
+*/
+
+#ifdef SO_REUSEPORT
+	flg = 1 ;
+	if(setsockopt(s, SOL_SOCKET, SO_REUSEPORT, (msockopt)&flg, sizeof(flg))<0)
+		marslog(LOG_WARN|LOG_PERR,"setsockopt SO_REUSEPORT");
+#endif
+
+#ifdef SO_LINGER
+	ling.l_onoff = 0;
+	ling.l_linger = 0;
+	if(setsockopt(s, SOL_SOCKET, SO_LINGER, (msockopt)&ling, sizeof(ling))<0)
+		marslog(LOG_WARN|LOG_PERR,"setsockopt SO_LINGER");
+#else
+#ifdef SO_DONTLINGER
+	if(setsockopt(s, SOL_SOCKET, SO_DONTLINGER, NULL, 0)<0)
+		marslog(LOG_WARN|LOG_PERR,"setsockopt SO_DONTLINGER");
+#endif
+#endif
+
+
+	bzero(&sin, sizeof(struct sockaddr_in));
+	sin.sin_port        = htons(port);
+	sin.sin_family      = AF_INET;
+	sin.sin_addr.s_addr = INADDR_ANY;
+
+	while (bind(s, (struct sockaddr*)&sin, sizeof(struct sockaddr_in)) == -1)
+	{
+		marslog(LOG_WARN|LOG_PERR,"bind port = %d",port);
+		sleep(5);
+	}
+
+	return s ;
+}
+
+udpinfo *udp_server(int port)
+{
+	udpinfo *info = NEW(udpinfo);
+	info->soc = udp_socket(port);
+	if(info->soc < 0) {
+		FREE(info);
+		return NULL;
+	}
+	bzero(&info->sin,sizeof(struct sockaddr_in ));
+	info->timeout.tv_sec  = 0;
+	info->timeout.tv_usec = 0;
+	return info;
+}
+
+udpinfo *udp_call(const char *host, int port)
+{
+#ifdef INADDR_NONE
+
+	in_addr_t addr;
+	in_addr_t none = INADDR_NONE;
+
+#else
+
+#ifdef __alpha
+	unsigned int  addr;
+    unsigned int  none = (unsigned int)~0;
+#elif defined(fujitsu)
+	u_int addr;
+    u_int none = (u_int)~0;
+#else
+	unsigned long addr;
+    unsigned long none = (unsigned long)-1;
+#endif
+#endif
+	struct hostent *him;
+	udpinfo *info = NEW(udpinfo);
+
+	/* create a socket first */	
+
+	info->soc = udp_socket(0);
+	if(info->soc < 0) {
+		FREE(info);
+		return NULL;
+	}
+
+	bzero(&info->sin,sizeof(struct sockaddr_in ));
+
+	info->sin.sin_port = htons(port);
+	info->sin.sin_family = AF_INET;
+
+	marslog(LOG_DBUG,"Calling \"%s\" port %d",host,port);
+
+	addr = inet_addr(host);
+	info->sin.sin_addr.s_addr = addr;
+
+	if(addr == none) {
+		if ((him=gethostbyname(host))==NULL)
+		{
+			marslog(LOG_EROR,"unknown host : %s",host);
+			close(info->soc);
+			FREE(info);
+			return NULL;
+		}
+		info->sin.sin_family = him->h_addrtype;
+		bcopy(him->h_addr_list[0],&info->sin.sin_addr,him->h_length);
+	}
+
+	info->timeout.tv_sec  = 2;
+	info->timeout.tv_usec = 0; /* 1/2 sec */
+
+	return info;
+}
+
+void udp_free(udpinfo *info)
+{
+	close(info->soc);
+	FREE(info);
+}
diff --git a/src/libMars-ecregrid/variable.c b/src/libMars-ecregrid/variable.c
new file mode 100644
index 0000000..a399ab6
--- /dev/null
+++ b/src/libMars-ecregrid/variable.c
@@ -0,0 +1,185 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+static mempool varmem = {
+	1, /* 1 page */
+	1, /* clear */
+};
+
+#define STACK_SIZE 10
+#define FASTNEW(type)        (type*)fast_new(sizeof(type),&varmem)
+#define FASTDEL(x)           fast_delete(x,&varmem)
+
+static variable *vars = NULL;
+
+static int top = 0;
+static variable stack[STACK_SIZE+1];
+
+err push_scalar(double d)
+{
+	if(top == STACK_SIZE)
+	{
+		marslog(LOG_EROR,"Stack is full");
+		return -2;
+	}
+	stack[top].scalar = true;
+	stack[top].val    = d;
+	stack[top].name   = NULL;
+	top++;
+	return NOERR;
+}
+
+err push_named_scalar(char *name, double d)
+{
+	if(top == STACK_SIZE)
+	{
+		marslog(LOG_EROR,"Stack is full");
+		return -2;
+	}
+	stack[top].scalar = true;
+	stack[top].val    = d;
+	stack[top].name   = name;
+	top++;
+	return NOERR;
+}
+
+err push_fieldset(fieldset *f)
+{
+	if(top == STACK_SIZE)
+	{
+		marslog(LOG_EROR,"Stack is full");
+		return -2;
+	}
+	stack[top].scalar = false;
+	stack[top].fs     = f;
+	stack[top].name   = NULL;
+	top++;
+	return NOERR;
+}
+
+err push_named_fieldset(char *name, fieldset *f)
+{
+	if(top == STACK_SIZE)
+	{
+		marslog(LOG_EROR,"Stack is full");
+		return -2;
+	}
+	stack[top].scalar = false;
+	stack[top].fs     = f;
+	stack[top].name   = name;
+	top++;
+	return NOERR;
+}
+
+err push(variable *v)
+{
+	abort();
+	return 0;
+}
+
+variable *pop()
+{
+	if(top == 0)
+	{
+		marslog(LOG_EROR,"Stack is empty");
+		return NULL;
+	}
+	return &stack[--top];
+}
+
+variable *stack_top()
+{
+	return &stack[top-1];
+}
+
+variable *find_variable(const char *name)
+{
+	variable *w = vars;
+	while(w)
+	{
+		if(w->name == name) return w;
+		w = w->next;
+	}
+	return NULL;
+}
+
+err name_variable(variable *v,char *name)
+{
+	abort();
+	return 0;
+}
+
+static void free_variables(int code,void *data)
+{
+	while(vars)
+		free_variable(vars);
+}
+
+variable *new_variable(const char *name,fieldset *f,double d)
+{
+	variable *w = find_variable(name);
+	variable *v  = FASTNEW(variable);
+
+	if(vars == 0)
+		install_exit_proc(free_variables,0);
+
+	v->name = name?strcache(name):NULL;
+
+	if(f)
+	{
+		v->fs   = f;
+		v->scalar = false;
+		f->refcnt++;
+		if(save_fieldset(f))
+		{
+			FASTDEL(v);
+			return NULL;
+		}
+	}
+	else
+	{
+		v->scalar = true;
+		v->fs  = NULL;
+		v->val = d;
+	}
+
+	if(w) free_variable(w);
+
+	v->next = vars;
+	vars = v;
+	return v;
+}
+
+void free_variable(variable *v)
+{
+	variable *w = vars;
+	variable *z = NULL;
+	while(w)
+	{
+		variable* n = w->next;
+
+		if(w == v)
+		{
+			if(z)
+				z->next = v->next;
+			else 
+				vars = v->next;
+			if(v->name)
+				strfree(v->name);
+			if(v->fs) free_fieldset(v->fs);
+			FASTDEL(v);
+		}
+		z = w;
+		w = n;
+	}
+}
+
diff --git a/src/libMars-ecregrid/variable.h b/src/libMars-ecregrid/variable.h
new file mode 100644
index 0000000..b5839ad
--- /dev/null
+++ b/src/libMars-ecregrid/variable.h
@@ -0,0 +1,17 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+typedef struct variable {
+	struct variable *next;
+	char    *name;
+	boolean  scalar;
+	double	 val;
+	fieldset *fs;
+} variable;
diff --git a/src/libMars-ecregrid/version.c b/src/libMars-ecregrid/version.c
new file mode 100644
index 0000000..735e3c5
--- /dev/null
+++ b/src/libMars-ecregrid/version.c
@@ -0,0 +1,34 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+
+long marsversion() { 
+	static long version = 20130628; 
+	return version; 
+}
+
+const char *marssourcebranch() {
+#ifdef ODB_SUPPORT
+	static const char *branch = "grib_odb_api_scin";
+#else
+	static const char *branch = "grib_api_scin";
+#endif
+	return branch;
+}
+
+long marsgribapi() {
+	static long version = 20130625;
+	return version;
+}
+
+long marsodbapi() {
+	static long version = 20130508;
+	return version;
+}
diff --git a/src/libMars-ecregrid/webbase.c b/src/libMars-ecregrid/webbase.c
new file mode 100644
index 0000000..dcdba5f
--- /dev/null
+++ b/src/libMars-ecregrid/webbase.c
@@ -0,0 +1,613 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include <sys/ioctl.h>      
+#include <signal.h>                   
+#include <ctype.h>
+#if defined(sgi) || defined(fujitsu) || defined(sun)
+#include <sys/filio.h>  /* For FIONREAD */
+#endif
+/*
+
+TODO: 
+
+- Work on error messages
+- Check data size againts Content-Length
+- Implement list
+- check if certificate are 0500 as well as parent dir.
+- check fixed size buffers
+
+*/
+
+typedef struct webdata {
+	char *host;
+	char *url;
+	char *openssl;
+	char *object;
+	char *proxy;
+	request *header;
+	FILE  *f;
+	int   cleanup;
+	int   port;
+} webdata;
+
+static void webbase_init(void);
+
+static err     webbase_open(void *data,request*,request*,int);
+static err     webbase_close(void *data);
+static err     webbase_read(void *data,request *r,void *buffer,long *length);
+static err     webbase_write(void *data,request *r,void *buffer,long *length);
+static err     webbase_cntl(void *data,int code,void *param,int size);
+static boolean webbase_check(void *data,request *r);
+static err     webbase_validate(void *data,request*,request*,int);
+
+static option opts[] = {
+
+	{"host","MARS_WEB_HOST",NULL,"wms.ecmwf.int:443",t_str,
+	sizeof(char*),OFFSET(webdata,host)},
+
+	{"url","MARS_WEB_URL",NULL,"/services/mars/d/webbase",t_str,
+	sizeof(char*),OFFSET(webdata,url)},
+
+	{"openssl","MARS_WEB_OPENSSL",NULL,"/usr/local/openssl/bin/openssl",t_str,
+	sizeof(char*),OFFSET(webdata,openssl)},
+
+	{"proxy","MARS_WEB_PROXY",NULL,NULL/*"carbad:3333"*/,t_str,
+	sizeof(char*),OFFSET(webdata,proxy)},
+
+
+};
+
+static base_class _webbase_base = {
+
+	NULL,                          /* parent class */
+	"webbase",                     /* name         */
+
+	false,                         /* inited       */
+
+	sizeof(webdata),               /* private_size  */
+	NUMBER(opts),                  /* options_count */
+	opts,                          /* options       */
+
+	webbase_init,                  /* init          */
+
+	webbase_open,                  /* open          */
+	webbase_close,                 /* close         */
+
+	webbase_read,                  /* read          */
+	webbase_write,                 /* write         */
+
+	webbase_cntl,                  /* control       */
+
+	webbase_check,                 /* check         */
+
+	NULL,                      	   /* query        */
+
+	NULL,                          /* archive      */
+	NULL,                          /* admin        */
+
+	webbase_validate,              /* validate */
+
+};
+
+/* the only 'public' variable ... */
+
+base_class *webbase = &_webbase_base;
+
+static FILE* post_open(webdata*,const char*,const char*,const char*);
+
+static void webbase_init(void)
+{
+}
+
+static const char *escape(const char* p)
+{
+	static char buf[10240];
+	int i = 0;
+	while(*p)
+	{
+		char c = *p;
+		unsigned int h,l;
+
+		if(isalnum(c))
+			buf[i++] = c;
+		else {
+			buf[i++] = '%';
+
+			h = ((unsigned char)c) / 16;
+			l = ((unsigned char)c) % 16;
+
+			if(h>=10) c = h - 10 + 'A'; else c = h + '0';
+			buf[i++] = c;
+
+			if(l>=10) c = l - 10 + 'A'; else c = l + '0';
+			buf[i++] = c;
+		}
+			
+		p++;
+	}
+	buf[i] = 0;
+	return buf;
+}
+
+static int ok(const char *p)
+{
+	if(*p == '_')        return 0;
+	if(EQ(p,"TARGET"))   return 0;
+	if(EQ(p,"FIELDSET")) return 0;
+	if(EQ(p,"DATABASE")) return 0;
+	return 1;
+}
+
+static char *encode(request *r)
+{
+	parameter* p = r->params;
+	static char buf[10240];
+	buf[0] = 0;
+	while(p)
+	{
+		if(ok(p->name))
+		{
+			value *v = p->values;
+			while(v)
+			{
+				if(buf[0]) strcat(buf,"&");
+				strcat(buf,lowcase(p->name));
+				strcat(buf,"=");
+				strcat(buf,escape(lowcase(v->name)));
+				v = v->next;
+			}
+		}
+		p = p->next;
+	}
+	/*strcat(buf,"\n");*/
+	return buf;
+}
+
+static err parse_header(webdata* web,FILE* f)
+{
+	char buf[1024];
+	char param[1024];
+	char value[1024];
+
+	free_all_requests(web->header);
+	web->header = empty_request("header");
+
+	if(!fgets(buf,sizeof(buf),f))
+	{
+		marslog(LOG_EROR,"Cannot read result code");
+		return -2;
+	}
+
+	while(strlen(buf)>0 && isspace(buf[strlen(buf)-1])) 
+		buf[strlen(buf)-1] = 0;
+	set_value(web->header,"heading","%s",buf);
+
+	while(fgets(buf,sizeof(buf),f))
+	{
+		char *p = buf;
+		while(strlen(buf)>0 && isspace(buf[strlen(buf)-1])) 
+			buf[strlen(buf)-1] = 0;
+
+		if(*p == 0) 
+		{
+			const char *e = get_value(web->header,"Webmars-error",0);
+			const char *m = get_value(web->header,"Webmars-message",0);
+			if(mars.debug) 
+				print_all_requests(web->header);
+
+			if(e && atol(e) && m) marslog(LOG_EROR,"%s",m);
+
+			return e ? atol(e) : 0;
+		}
+
+		while(*p != 0 && *p != ':') p++;
+		if(*p == ':')
+		{
+			*p = 0;
+			strcpy(param,buf);
+			p++;
+			while(*p && isspace(*p)) p++;
+			strcpy(value,p);
+
+			add_value(web->header,param,"%s",value);
+		}
+		else {
+			marslog(LOG_EROR,"webbase: could not find : in <%s>",buf);
+		}
+
+		/*if(buf[0] == 0) return r;*/
+	}
+	marslog(LOG_EROR,"webbase: could not find empty line");
+	return -2;
+}
+
+static void split(const char* p,char *host,int *port)
+{
+	int i = 0;
+	while(*p && *p != ':' )
+		host[i++] = *p++;
+
+	host[i] = 0;
+	if(*p) { p++; *port = atol(p); }
+}
+
+static int copy(int in,int out)
+{
+	size_t size;
+	char buf[10240];
+
+	if(ioctl(in,FIONREAD,&size) < 0)
+		marslog(LOG_EXIT|LOG_PERR,"ioctl");
+				
+	if(size == 0)
+	{
+		/* marslog(LOG_INFO,"closing %d -> %d",in,out);      */
+		shutdown(in,0);
+		shutdown(out,1);
+		return -1;
+	}
+
+	/* marslog(LOG_INFO,"copy %d -> %d %d",in,out,size);      */
+
+	while(size > 0)
+	{
+		size_t len = MIN(size,sizeof(buf));
+		if(read(in,buf,len) != len)
+			marslog(LOG_EXIT|LOG_PERR,"read");
+			
+		if(write(out,buf,len) != len)
+			marslog(LOG_EXIT|LOG_PERR,"write");
+
+		size -= len;
+	}
+
+	return in;
+}
+
+
+static err run_proxy(webdata* web,int s0)
+{
+	int s1,s2,s3,s4;
+	char host[1024];
+	char buf[10240];
+	int port = 80;
+	char c;
+	int i = 0;
+	struct sockaddr_in from;
+	marssocklen_t fromlen = sizeof(struct sockaddr_in);
+
+	split(web->proxy,host,&port);
+
+
+	/* marslog(LOG_INFO,"Unsing %s on port %d",host,port); */
+	s1 = call_server(host,port,-1);
+	if(s1 < 0) return -1;
+
+	split(web->host,host,&port);
+	sprintf(buf,"CONNECT %s HTTP/1.0\r\n"
+				"User-Agent: ECMWF-MARS-%ld\r\n"
+				"Host: %s\r\n"
+				"Content-Length: 0\r\n"
+				"Proxy-Connection: Keep-Alive\r\n"
+				"Pragma: no-cache\r\n"
+				"\r\n",
+				web->host,
+				marsversion(),
+				host);
+
+	if(write(s1,buf,strlen(buf)) != strlen(buf))
+		marslog(LOG_EXIT|LOG_PERR,"write");
+
+		
+	i = 0;
+	while(read(s1,&c,1) == 1 && i < sizeof(buf)-1)
+	{
+		buf[i++] = c;
+		if(i > 4 && strncmp(&buf[i-4],"\r\n\r\n",4) == 0)
+			break;
+	}
+	buf[i] = 0;
+
+	/* ---- */
+
+	/* marslog(LOG_INFO,"Listen on port %d",web->port); */
+	
+	alarm(10);
+	s2 = accept(s0, (struct sockaddr*)&from, &fromlen);
+	alarm(0);
+
+	if(s2 < 0) {
+		marslog(LOG_EROR|LOG_PERR,"accept");
+		return -1;
+	}
+
+	s3 = s1;
+	s4 = s2;
+
+	while(s3 >= 0 || s4 >= 0)
+	{
+		fd_set fds;
+
+		FD_ZERO(&fds); 
+		if(s3 >= 0) FD_SET(s3,&fds); 
+		if(s4 >= 0) FD_SET(s4,&fds);
+
+
+		switch(select(FD_SETSIZE,&fds,0,0,0))
+		{
+		case -1:
+			if(errno != EINTR)
+			{
+				return -1;
+				marslog(LOG_EXIT|LOG_PERR,"select");
+			}
+			break;
+
+			/* return timeout */
+		case 0:
+			return -1;
+			/*NOTREACHED*/
+			break;
+
+		default:
+			if(s3 >= 0 && FD_ISSET(s3,&fds)) s3 = copy(s1,s2);
+			if(s4 >= 0 && FD_ISSET(s4,&fds)) s4 = copy(s2,s1);
+			break;
+		}
+	}
+	
+	/* marslog(LOG_EXIT,"End of proxy"); */
+	return 0;
+	
+}
+
+static err start_proxy(webdata* web)
+{
+	char address[80];
+	int s  = server_mode(&web->port,address);
+	if(s < 0) return -1;
+
+	switch(fork())
+	{
+		case 0:
+			run_proxy(web,s);
+			exit(0);
+			break;
+
+		case -1:
+			marslog(LOG_EROR|LOG_PERR,"Cannot fork proxy helper");
+			close(s);
+			return -2;
+
+		default:
+			close(s);
+			break;
+	}
+
+	return 0;
+}
+
+
+static err post_close(webdata* web,FILE* f)
+{
+	if(pclose(f))
+	{
+		marslog(LOG_EROR|LOG_PERR,"pclose");
+		return -1;
+	}
+	return 0;
+}
+
+static FILE* post_open(webdata* web, const char* req,const char* url,const char* arg)
+{
+	const char *home = getenv("HOME");
+	FILE *f;
+	char *tmp = marstmp();
+	char buf[1024];
+	char host[1024];
+
+	f = fopen(tmp,"w");
+	if(!f)
+	{
+		marslog(LOG_EROR|LOG_PERR,"fopen(%s)",tmp);
+		return NULL;
+	}
+
+	fprintf(f,"POST %s/%s HTTP/1.0\n",url,arg);
+	fprintf(f,"User-Agent: ECMWF-MARS-%ld\n",marsversion());
+	fprintf(f,"Content-Length: %d\n",strlen(req));
+	fprintf(f,"\n");
+	fprintf(f,"%s",req);
+
+	if(fclose(f))
+	{
+		marslog(LOG_EROR|LOG_PERR,"fclose(%s)",tmp);
+		return NULL;
+	}
+
+	if(web->proxy) {
+		if(start_proxy(web) != 0)
+			return NULL;
+		sprintf(host,"localhost:%d",web->port);
+	}
+	else
+		strcpy(host,web->host);
+
+
+	sprintf(buf,"%s s_client -quiet "
+		"-cert   %s/.marsrc/cert.pem "
+		"-key    %s/.marsrc/key.pem   "
+		"-CAfile %s/.marsrc/ca.pem "
+		"-connect %s < %s 2>/dev/null",
+			web->openssl,home,home,home,host,tmp);
+
+	f = popen(buf,"r");
+	if(!f)
+	{
+		marslog(LOG_EROR|LOG_PERR,"popen(%s)",buf);
+		return NULL;
+	}
+
+	if(parse_header(web,f) != 0)
+	{
+		post_close(web,f);
+		return 0;
+	}
+
+	return f;
+}
+
+static err  webbase_open(void *data,request *r,request *v,int mode)
+{
+	webdata* web = (webdata*)data;
+	const char *me = database_name(data);
+	FILE* f  ;
+	
+	marslog(LOG_INFO,"%s is at %s%s%s", me,web->host,web->proxy?",via proxy ":"",
+		web->proxy?web->proxy:"");
+	
+	f = post_open(web,encode(r),web->url,"open");
+
+	if(!f) return -2;
+
+	web->object = strcache(get_value(web->header,"Webmars-object",0));
+	post_close(web,f); 
+
+	web->cleanup = true; /* The request was started succesfully */
+	
+	{
+	char buf[1024];
+	const char *p;
+
+	sprintf(buf,"object=%s",web->object);
+	for(;;)
+	{
+		FILE* f = post_open(web,buf,web->url,"status");
+		if(!f) return -2;
+		if(post_close(web,f)) return -2; 
+
+		p = get_value(web->header,"Webmars-result",0);
+		if(!p)
+		{
+			marslog(LOG_EROR,"Cannot get result from web server");
+			p = get_value(web->header,"Webmars-message",0);            
+			if(p) marslog(LOG_EROR,"%s",p);
+			return -2;
+		}
+
+		if(EQ(p,"complete"))
+			break;
+
+		if(EQ(p,"aborted"))
+		{
+			marslog(LOG_EROR,"The web server could not retrieve the data");
+			return -2;
+		}
+
+		p = get_value(web->header,"Webmars-sleep",0); 
+		sleep(p?atol(p):2);
+	}
+
+	{
+		FILE* f = post_open(web,buf,web->url,"fetch");
+		if(!f) return -2;
+		if(post_close(web,f)) return -2;
+	}
+
+	p = get_value(web->header,"Webmars-result",0);
+	{
+		FILE* f = post_open(web,buf,p,"");
+		if(!f) return -2;
+	/*	if(post_close(web,f)) return -2;*/
+		web->f = f;
+	}
+	}
+
+	return 0;
+
+}
+
+static err  webbase_close(void *data)
+{
+	webdata* web = (webdata*)data;
+	strfree(web->object);
+	if(web->f) post_close(web,web->f);
+
+	if(web->cleanup)
+	{
+		FILE *f;
+		char buf[1024];
+		sprintf(buf,"object=%s",web->object);
+		f = post_open(web,buf,web->url,"close");
+		if(f) post_close(web,f);
+	}
+	return 0;
+}
+
+
+static err  webbase_read(void *data,request *r,void *buffer,long *length)
+{
+	webdata* web = (webdata*)data;
+	fortint len = *length;
+	err ret = 0;
+	if(web->f == 0)
+	{
+		return -1;
+	}
+
+	ret =  _readany(web->f,buffer,&len);
+	*length = len;
+	return ret;
+}
+
+static err  webbase_write(void *data,request *r,void *buffer,long *length)
+{
+	return -1;
+}
+
+static err  webbase_list(void *data,request *r)
+{
+	return -1;
+}
+
+static err  webbase_cntl(void *data,int code,void *param,int size)
+{
+	switch(code)
+	{
+	case CNTL_LIST:
+		webbase_list(data,(request*)param);
+		return 0;
+		/*NOTREACHED*/
+		break;
+
+	default:
+		return -1;
+		/*NOTREACHED*/
+		break;
+	}
+	return -1;
+}
+
+static boolean  webbase_check(void *data,request *r)
+{
+	return true;
+}
+
+static err webbase_validate(void *data, request *r, request *e, int mode)
+{
+	err ret = NOERR;
+	
+/*	if(net->validate)*/
+/*		ret = validate_request(r,e,net->validate);*/
+
+	return ret;
+}
diff --git a/src/libMars-ecregrid/wind.c b/src/libMars-ecregrid/wind.c
new file mode 100644
index 0000000..9603f1f
--- /dev/null
+++ b/src/libMars-ecregrid/wind.c
@@ -0,0 +1,536 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+
+#define N_VO 0
+#define N_D  1
+#define N_U  2
+#define N_V  3
+
+/* TODO: Read from a file * */
+
+
+typedef struct wind_family {
+	long u;
+	long v;
+	long vo;
+	long d;
+} wind_family; 
+
+static const wind_family WIND_PARAMS[] = {
+	{     131  ,     132 ,    138,    155 },
+	{  129131  ,  129132 , 129138, 129155 },
+	{  200131  ,  200132 , 200138, 200155 },
+
+};
+
+struct wind_data {
+	struct wind_data *next;
+	request *r;
+	grib_handle *grib[4];
+	boolean given[4];
+    int family;
+};
+
+struct _wind {
+	struct wind_data *data;
+	request *r;
+	boolean want[4];
+	long64* total;
+};
+
+
+static struct wind_data* find_wind_data(request* r,struct wind_data *data, err *ret)
+{
+	while(data) {
+
+		if(reqcmp(r,data->r,false) == 0) {
+			marslog(LOG_DBUG,"MATCH for find_wind_data");
+			return data;
+		}
+
+		data = data->next;
+	}
+
+	marslog(LOG_DBUG,"NO MATCH for find_wind_data");
+	return NULL;
+}
+
+static struct wind_data* free_wind_data(struct wind_data *data)
+{
+	int i;
+	struct wind_data* next = data->next;
+/* printf("free_wind_data: %x\n",data); */
+	for(i=0;i<4;i++)
+		if(data->grib[i])
+		{
+/* printf("grib_handle_delete %x\n",data->grib[i]); */
+			grib_handle_delete(data->grib[i]);
+		}
+
+	free_all_requests(data->r);
+	FREE(data);
+	return next;
+}
+
+static boolean checkuv(wind *w,void *buffer,long length,err *ret)
+{
+	long param = 0;
+	struct wind_data* data;
+	int  which = -1;
+	int i;
+    int family;
+
+	request* r;
+	grib_handle *g = grib_handle_new_from_message_copy(0,buffer,length);
+	if(!g) {
+		marslog(LOG_EROR,"checkuv: grib_handle_new_from_message_copy() failed");
+		*ret = -2;
+	}
+
+	*ret = grib_get_long(g,"paramId",&param);
+
+/* printf("grib_handle_new_from_message_copy %x, param %ld\n",g,param); */
+
+	if(*ret) {
+		marslog(LOG_EROR,"grib_get_long(paramId) failed: %s",grib_get_error_message(*ret));
+/* printf("grib_handle_delete %x\n",g); */
+		grib_handle_delete(g);
+		return false;
+	}
+
+	marslog(LOG_DBUG,"WIND got param %ld",param);
+
+    for(i = 0; i < NUMBER(WIND_PARAMS); i++) {
+
+        if(param == WIND_PARAMS[i].vo) /* VO */
+        {
+            which = N_VO;
+            family = i;
+        }
+
+        if(param== WIND_PARAMS[i].d) /* D */
+        {
+            which = N_D;
+            family = i;
+        }
+
+        if(param == WIND_PARAMS[i].u) /* U */
+        {
+            which = N_U;
+            family = i;
+        }
+
+        if(param == WIND_PARAMS[i].v) /* V */
+        {
+            which = N_V;
+            family = i;
+        }
+
+    }
+
+	if(which == -1)
+	{
+/* printf("grib_handle_delete %x\n",g); */
+		grib_handle_delete(g);
+		return false;
+	}
+
+	r = empty_request(0);
+	*ret = handle_to_request(r,g,NULL);
+	unset_value(r,"PARAM");
+	if(mars.debug)
+		print_all_requests(r);
+
+	if(*ret) {
+		marslog(LOG_EROR,"handle_to_request failed: %s",grib_get_error_message(*ret));
+/* printf("grib_handle_delete %x\n",g); */
+		grib_handle_delete(g);
+		return false;
+	}
+
+
+	data = find_wind_data(r, w->data, ret);
+	if(!data)
+	{
+		struct wind_data *prev = w->data;
+		struct wind_data * d = w->data;
+		data = NEW_CLEAR(struct wind_data);	
+		data->r = r;
+        data->family = family;
+
+		while(d)
+		{
+			prev = d;
+			d = d->next;
+		}
+		if(prev) {
+			prev->next = data;
+		}
+		else  {
+			w->data = data;
+		}
+
+	}
+	else
+	{
+		free_all_requests(r);
+	}
+
+    if(data->family != family) {
+		marslog(LOG_EXIT,"wind family mimatch: %d %d", family, data->family);
+    }
+
+	if(data->grib[which]) {
+		marslog(LOG_EROR,"wind failed: duplicate field");
+		*ret = -2;
+		print_all_requests(data->r);
+/* printf("grib_handle_delete %x\n",g); */
+		grib_handle_delete(g);
+		return false;
+	}
+
+	data->grib[which] = g;
+
+	/* Assumes that VO/D comes after U/V */
+	if(data->grib[N_VO] && data->grib[N_D] && !(data->grib[N_U] || data->grib[N_V]))
+	{
+		long len;
+		size_t vo_len, d_len;
+		const void *vo_buffer, *d_buffer;
+		char *u_buffer;
+		char *v_buffer;
+        long param ;
+
+		grib_get_message(data->grib[N_VO], &vo_buffer, &vo_len);
+		grib_get_message(data->grib[N_D],  &d_buffer,  &d_len);
+		if(mars.debug)
+		{
+			marslog(LOG_EROR,"checkuv: VO D");
+			r = empty_request(0);
+			grib_to_request(r,(char *)vo_buffer, vo_len);
+			print_all_requests(r);
+			free_all_requests(r);
+
+			r = empty_request(0);
+			grib_to_request(r,(char *)d_buffer, d_len);
+			print_all_requests(r);
+			free_all_requests(r);
+		}
+
+		len = MAX(vo_len + 4096,ppestimate()); 
+
+		u_buffer = reserve_mem(len);
+		v_buffer = reserve_mem(len);
+
+		if(mars.debug) {
+			marslog(LOG_DBUG,"makeuv for:");
+			print_all_requests(data->r);
+		}
+
+        /* clear flag */
+        mars.wind_requested_by_server = false;
+
+		*ret = makeuv(
+				(char*)vo_buffer, 
+				(char*)d_buffer, 
+				d_len,
+				u_buffer,
+				v_buffer,
+				&len);
+
+
+		if(*ret == 0) {
+			grib_handle *u = grib_handle_new_from_message_copy(0,u_buffer,len);
+			grib_handle *v = grib_handle_new_from_message_copy(0,v_buffer,len);
+
+			if(!u) {
+				marslog(LOG_EXIT,"checkuv: grib_handle_new_from_message_copy() failed");
+				*ret = -2;
+			}
+
+            param = 0;
+            grib_get_long(u,"paramId",&param);
+            if(param != WIND_PARAMS[data->family].u)
+            {
+                marslog(LOG_WARN|LOG_ONCE,"makeuv returns invalid paramId for U %ld (should be %ld)", param, WIND_PARAMS[data->family].u);
+                *ret = grib_set_long(u, "paramId", WIND_PARAMS[data->family].u);
+            }
+
+			if(!v) {
+				marslog(LOG_EXIT,"checkuv: grib_handle_new_from_message_copy() failed");
+				*ret = -2;
+			}
+
+            param = 0;
+            grib_get_long(v,"paramId",&param);
+            if(param != WIND_PARAMS[data->family].v)
+            {
+                marslog(LOG_WARN|LOG_ONCE,"makeuv returns invalid paramId for V %ld (should be %ld)", param, WIND_PARAMS[data->family].v);
+                *ret = grib_set_long(v, "paramId", WIND_PARAMS[data->family].v);
+            }
+
+
+/* printf("grib_handle_new_from_message_copy %x, param %ld\n",g,param); */
+
+
+			if(mars.debug)
+			{
+				marslog(LOG_EROR,"checkuv: U V");
+				r = empty_request(0);
+				grib_to_request(r,u_buffer, len);
+				print_all_requests(r);
+				free_all_requests(r);
+				r = empty_request(0);
+				grib_to_request(r,v_buffer, len);
+				print_all_requests(r);
+				free_all_requests(r);
+			}
+
+			if(data->grib[N_U]) {
+				marslog(LOG_EROR,"wind failed: duplicate U field");
+				*ret = -2;
+				print_all_requests(data->r);
+/* printf("grib_handle_delete %x\n",u); */
+				grib_handle_delete(u);
+
+			}
+			else {
+				data->grib[N_U] = u;
+				marslog(LOG_DBUG,"U ready");
+			}
+
+			if(data->grib[N_V]) {
+				marslog(LOG_EROR,"wind failed: duplicate V field");
+				*ret = -2;
+				print_all_requests(data->r);
+/* printf("grib_handle_delete %x\n",v); */
+				grib_handle_delete(v);
+			}
+			else {
+				data->grib[N_V] = v;
+				marslog(LOG_DBUG,"V ready");
+			}
+
+			release_mem(u_buffer);
+			release_mem(v_buffer);
+
+
+			/* Try to recover some memory */
+			for(i = 0 ; i < 4; i++) {
+				if(!w->want[i] && data->grib[i]) {
+/* printf("grib_handle_delete %x\n",data->grib[i]); */
+					grib_handle_delete(data->grib[i]);
+					data->grib[i] = NULL;
+				}
+			}
+		}
+	}
+
+	return *ret?false:true;
+}
+
+wind *wind_new(request *r,long64* total)
+{
+	wind *w =  NEW_CLEAR(wind);
+
+	int i , n = count_values(r,"PARAM"), j;
+
+	w->total = total;
+
+	for(i=0;i<n;i++)
+	{
+		const char* p = get_value(r,"PARAM",i);
+        long param = 0, table = 0;
+        paramtable(p, &param, &table, false);
+
+        param += (table == 128 ? 0: table) * 1000;
+
+        marslog(LOG_DBUG,"wind param.... %d",param);
+
+        for(j = 0; j < NUMBER(WIND_PARAMS); j++) {
+
+            if(param == WIND_PARAMS[j].u) {
+                if(w->want[N_U]) marslog(LOG_WARN|LOG_ONCE,"Wind convertion: more than one U-like parameter requested.");
+                w->want[N_U]   = true;
+            }
+            if(param == WIND_PARAMS[j].v) {
+                if(w->want[N_V]) marslog(LOG_WARN|LOG_ONCE,"Wind convertion: more than one V-like parameter requested.");
+                w->want[N_V]   = true;
+            }
+            if(param == WIND_PARAMS[j].vo) {
+                if(w->want[N_VO]) marslog(LOG_WARN|LOG_ONCE,"Wind convertion: more than one VO-like parameter requested.");
+                w->want[N_VO]  = true;
+            }
+            if(param == WIND_PARAMS[j].d) {
+                if(w->want[N_D]) marslog(LOG_WARN|LOG_ONCE,"Wind convertion: more than one D-like parameter requested.");
+                w->want[N_D]   = true;
+            }
+
+        }
+	}
+
+/* printf("wind_new: %x\n",w); */
+	return w;
+}
+
+void wind_free(wind *w)
+{
+	int i;
+
+/* printf("wind_free: %x\n",w); */
+	if(w)
+	{
+		struct wind_data *data = w->data;
+		while(data) {
+			data = free_wind_data(data);
+		}
+		FREE(w);
+	}
+}
+
+static boolean wind_advance(wind *w,char *buffer,long *length,err *ret)
+{
+	struct wind_data* prev = NULL;
+	struct wind_data* data = w->data;
+	boolean done;
+	while(data) {
+		int i,j = -1;
+		for(i=0;i<4;i++)
+			if(w->want[i] && data->grib[i] && !data->given[i])
+			{
+				j   = i;
+				break;
+			}
+
+		if(j>=0)
+		{
+			size_t len;
+			const void *msg;
+			grib_get_message(data->grib[j],&msg, &len);
+
+			if(*length < len)
+			{
+				*length = len;
+				*ret = -3;
+				return true;
+			}
+
+			*length = len;
+			memcpy(buffer,msg,len);
+
+			data->given[j]  = true;
+
+			done = true;
+			for(i=0;i<4;i++)
+				if(w->want[i] && !data->given[i]) 
+					done = false;
+
+			if(done)
+			{
+				struct wind_data* next;
+
+				if(mars.debug) {
+					marslog(LOG_DBUG,"WIND free");
+					print_all_requests(data->r);
+				}
+
+				next = free_wind_data(data);
+				if(prev == NULL) {
+					w->data = next;		
+				}
+				else
+				{
+					prev->next = next;
+				}
+			}
+
+			return true;
+		}
+		prev = data;
+		data = data->next;
+	}
+
+
+	return false;
+}
+
+boolean is_wind(long param)
+{
+	boolean found = false;
+	int i = 0;
+	for(i = 0; i < NUMBER(WIND_PARAMS); i++) {
+
+        if(param == WIND_PARAMS[i].u) /* U */
+        {
+			found = true;
+        }
+
+        if(param == WIND_PARAMS[i].v) /* V */
+        {
+			found = true;
+        }
+		if(found)
+			break;
+
+	}
+	return found;
+}
+
+err wind_next(wind *w,FILE *f,char *buffer,long *length, timer *t)
+{
+	err ret = 0;
+	long inlen = *length;
+
+	if(w->want[N_U] || w->want[N_V])
+	{
+		for(;;)
+		{
+			*length = inlen;
+
+			/* Are they ready made fields ? */
+
+			if(wind_advance(w,buffer,length,&ret))
+				return ret;
+
+			/* ret = _readany(f,buffer,length); */
+			ret = timed_readany(f,buffer,length,t);
+			if(ret == 0) 
+			{
+				if(w->total) (*w->total) += *length;
+			}
+			else 
+				return ret;
+
+			if(!checkuv(w,buffer,*length,&ret))
+			{
+				/* other fields */	
+				return ret;
+			}
+
+		}
+
+	}
+	else {
+		/* ret = _readany(f,buffer,length); */
+		ret = timed_readany(f,buffer,length,t);
+		if(ret == NOT_FOUND_7777 && mars.ignore_7777)
+		{
+			marslog(LOG_WARN,"Group 7777 not found, but message included");
+			ret = 0;
+		}
+		if(ret == 0) {
+			if(w->total) (*w->total) += *length;
+		}
+	}
+
+	return ret;
+}
diff --git a/src/libMars-ecregrid/xservice.c b/src/libMars-ecregrid/xservice.c
new file mode 100644
index 0000000..dad8086
--- /dev/null
+++ b/src/libMars-ecregrid/xservice.c
@@ -0,0 +1,58 @@
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#ifdef METVIEW
+#include <X11/Intrinsic.h>
+#include "mars.h"
+
+static void svcinput(void *data,int *soc,XtInputId *id)
+{
+	svc *s = (svc*)data;
+	process_service(s);
+}
+
+static Boolean install_input(void *data)
+{
+	svc *s = (svc*)data;
+
+	svc_connect(s);
+
+	XtAppAddInput(
+	    (XtAppContext)s->context,
+	    s->soc,
+	    (XtPointer)XtInputReadMask,
+	    (XtInputCallbackProc)svcinput,
+	    (XtPointer)s);
+	return True;
+}
+
+
+void ListenToService(XtAppContext app_context,svc *s)
+{
+	s->context = (long)app_context;
+	XtAppAddWorkProc(app_context,(XtWorkProc)install_input,
+	    (XtPointer)s);
+}
+
+svc *RegisterService(XtAppContext app_context,const char *name)
+{
+	svc *s = create_service(name);
+
+	if(s) {
+		svc_connect(s);
+		s->context = (long)app_context;
+		XtAppAddWorkProc(app_context,
+		    (XtWorkProc)install_input,
+		    (XtPointer)s);
+	}
+	return s;
+}
+
+#endif
diff --git a/src/libMars/Makefile.in b/src/libMars/Makefile.in
index 80c40a7..dc41559 100644
--- a/src/libMars/Makefile.in
+++ b/src/libMars/Makefile.in
@@ -251,6 +251,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -266,6 +267,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -292,11 +295,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/libMars/api.c b/src/libMars/api.c
index 74ab381..4889043 100644
--- a/src/libMars/api.c
+++ b/src/libMars/api.c
@@ -26,540 +26,626 @@ static CURLM *multi_handle = 0;
 static int first = 1;
 
 struct _ecmwf_api {
-    int error;
+	int error;
 
-    char *key;
-    char *email;
-    char *url;
+	char *key;
+	char *email;
+	char *url;
 
-    char* location;
-    size_t location_len;
+	char* location;
+	size_t location_len;
 
-    char* type;
-    size_t type_len;
+	char* type;
+	size_t type_len;
 
 
-    int retry_wait;
-    int retry_count;
-    long code;
+	int retry_wait;
+	int retry_count;
+	long code;
 
-    long verbose;
+	long verbose;
 
-    char* buffer;
-    size_t pos;
-    size_t len;
+	char* buffer;
+	size_t pos;
+	size_t len;
 
-    int offset;
-    int limit;
+	int offset;
+	int limit;
 
-    CURL *curl;
-    struct curl_slist *chunk;
-    FILE *file;
+	CURL *curl;
+	struct curl_slist *chunk;
+	FILE *file;
 
-    int active;
+	int active;
 
-    json_value* value;
+	json_value* value;
 
-    CURLcode curl_error;
+	CURLcode curl_error;
+
+	typeproc typecb;
+	void* typecb_data;
+
+	messageproc msgcb;
+	void *msgcb_data;
+
+	char* last_url;
 
-    typeproc typecb;
-    void* typecb_data;
 };
 
 #define _(a) _call(api,#a,a)
 
 static void _call(ecmwf_api* api, const char* what, CURLcode code)
 {
-    api->curl_error = code;
-    if(code != CURLE_OK)
-    {
-        marslog(LOG_EROR,"%s failed: %s", what, curl_easy_strerror(code));
-        api->error++;
-    }
+	api->curl_error = code;
+	if(code != CURLE_OK)
+	{
+		marslog(LOG_EROR,"%s failed: %s", what, curl_easy_strerror(code));
+		api->error++;
+	}
+}
+
+void ecmwf_api_set_msg_callback(ecmwf_api *api, messageproc msgcb, void *data)
+{
+	api->msgcb = msgcb;
+	api->msgcb_data = data;
 }
 
 static void wait_for_data(ecmwf_api *api, size_t size)
 {
-    fd_set fdr, fdw, fdx;
-    struct timeval timeout;
-
-    if((!api->active) || (api->pos > size))
-        return;
-
-    do {
-        int maxfd = -1;
-        long time = -1;
-
-        FD_ZERO(&fdr);
-        FD_ZERO(&fdw);
-        FD_ZERO(&fdx);
-
-        _(curl_multi_timeout(multi_handle, &time));
-        if(time >= 0) {
-            timeout.tv_sec = time / 1000;
-            if(timeout.tv_sec > 1)
-                timeout.tv_sec = 1;
-            else
-                timeout.tv_usec = (time % 1000) * 1000;
-        }
-        else
-        {
-            timeout.tv_sec = 60;
-            timeout.tv_usec = 0;
-        }
-
-        _(curl_multi_fdset(multi_handle, &fdr, &fdw, &fdx, &maxfd));
-
-        if(select(maxfd+1, &fdr, &fdw, &fdx, &timeout) == -1)
-        {
-            perror("select");
-            api->error++;
-        }
-        else {
-            _(curl_multi_perform(multi_handle, &api->active));
-        }
-
-    } while(api->active && (api->pos < size));
+	fd_set fdr, fdw, fdx;
+	struct timeval timeout;
+
+	if((!api->active) || (api->pos > size))
+		return;
+
+	do {
+		int maxfd = -1;
+		long time = -1;
+
+		FD_ZERO(&fdr);
+		FD_ZERO(&fdw);
+		FD_ZERO(&fdx);
+
+		_(curl_multi_timeout(multi_handle, &time));
+		if(time >= 0) {
+			timeout.tv_sec = time / 1000;
+			if(timeout.tv_sec > 1)
+				timeout.tv_sec = 1;
+			else
+				timeout.tv_usec = (time % 1000) * 1000;
+		}
+		else
+		{
+			timeout.tv_sec = 60;
+			timeout.tv_usec = 0;
+		}
+
+		_(curl_multi_fdset(multi_handle, &fdr, &fdw, &fdx, &maxfd));
+
+		if(select(maxfd+1, &fdr, &fdw, &fdx, &timeout) == -1)
+		{
+			perror("select");
+			api->error++;
+		}
+		else {
+			_(curl_multi_perform(multi_handle, &api->active));
+		}
+
+	} while(api->active && (api->pos < size));
 
 }
 
 void ecmwf_wait_for_data(ecmwf_api *api, size_t size)
 {
-    wait_for_data(api, size);
+	wait_for_data(api, size);
 }
 
 
 size_t ecmwf_api_transfer_read(ecmwf_api* api, void *ptr, size_t size)
 {
-    wait_for_data(api, size);
+	wait_for_data(api, size);
 
-    if(api->pos == 0)
-        return 0; /* EOF */
+	if(api->pos == 0)
+		return 0; /* EOF */
 
-    if(api->pos < size)
-        size = api->pos;
+	if(api->pos < size)
+		size = api->pos;
 
-    memcpy(ptr, api->buffer, size);
+	memcpy(ptr, api->buffer, size);
 
-    if(api->pos - size <= 0)
-    {
-        api->pos=0;
-    }
-    else
-    {
-        memmove(api->buffer, api->buffer + size, api->pos - size);
-        api->pos -= size;
-    }
+	if(api->pos - size <= 0)
+	{
+		api->pos=0;
+	}
+	else
+	{
+		memmove(api->buffer, api->buffer + size, api->pos - size);
+		api->pos -= size;
+	}
 
-    return size;
+	return size;
 }
 
 
 static size_t write_callback( void *ptr, size_t size, size_t nmemb, void *userdata)
 {
-    ecmwf_api* api = (ecmwf_api*)userdata;
-    size *= nmemb;
+	ecmwf_api* api = (ecmwf_api*)userdata;
+	size *= nmemb;
 
-    if(api->buffer == NULL)
-    {
-        api->len    = INITIAL_BUFFER_SIZE;
-        api->buffer = malloc(api->len);
-    }
+	if(api->buffer == NULL)
+	{
+		api->len    = INITIAL_BUFFER_SIZE;
+		api->buffer = malloc(api->len);
+	}
 
-    if(api->pos + size > api->len) {
+	if(api->pos + size > api->len) {
 
-        while(api->pos + size > api->len) {
-            api->len *= 2;
-        }
+		while(api->pos + size > api->len) {
+			api->len *= 2;
+		}
 
-        api->buffer = realloc(api->buffer, api->len);
-        if(!api->buffer)
-        {
-            api->error++;
-            return 0;
-        }
-    }
+		api->buffer = realloc(api->buffer, api->len);
+		if(!api->buffer)
+		{
+			api->error++;
+			return 0;
+		}
+	}
 
-    memcpy(api->buffer + api->pos, ptr, size);
-    api->pos += size;
+	memcpy(api->buffer + api->pos, ptr, size);
+	api->pos += size;
 
-    return size;
+	return size;
 }
 
-static void print_messages(int i, json_value* e,  void *userdata)
+#define MAXLEN 256
+
+static void print_max(const char* msg)
 {
-    ecmwf_api* api = (ecmwf_api*)userdata;
-    if(api->verbose) printf("   ECMWF => %s\n",json_get_string(e));
-    api->offset = i+1;
+	char buf[MAXLEN];
+	int i = 0;
+	const char* p = msg;
+	const char* q = msg;
+	int flag = LOG_EROR;
+
+	memset(buf, 0, sizeof(buf));
+
+	while(*p) {
+		if(*p == '\n') {
+			marslog(flag,"%s", buf);
+			memset(buf, 0, sizeof(buf));
+			flag = LOG_NONE;
+			i = 0;
+		}
+		else {
+			if(i < MAXLEN-4) 
+			{
+				buf[i++] = *p;
+			}
+			else 
+			{
+				buf[MAXLEN-2] = '.';
+				buf[MAXLEN-3] = '.';
+				buf[MAXLEN-4] = '.';
+			}
+		}
+		p++;
+	}
+
+	if(i) {
+		marslog(flag,"%s", buf);
+	}
 }
 
+static void print_error(json_value* value)
+{
+	json_value* e = json_object_find(value,"error");
+	json_value* r = json_object_find(value,"reason");
+
+	if(e) print_max(json_get_string(e));
+	if(r) print_max(json_get_string(r));
+}
+
+static void print_messages(int i, json_value* e,  void *userdata)
+{
+	ecmwf_api* api = (ecmwf_api*)userdata;
+	if(api->msgcb)  {
+		(*api->msgcb)(json_get_string(e), api->msgcb_data);
+	}
+	api->offset = i+1;
+}
 
 static size_t headers_callback( void *ptr, size_t size, size_t nmemb, void *userdata)
 {
-    ecmwf_api* api = (ecmwf_api*)userdata;
-
-    char* p    = (char*)ptr;
-    char* q    = (char*)ptr;
-    int  count = size * nmemb;
-
-    while(count-->0) {
-        if(*p == ':') {
-            if(q == (char*)ptr) {
-                char *s = q;
-                *p = 0;
-                q = p;
-                if(strcasecmp("location",s) == 0)    {
-                    while(count-->0) {
-                        if(*p == '\r') {
-                            *p = 0;
-                            if(api->location_len < p - q) {
-                                free(api->location);
-                                api->location = NULL;
-                            }
-                            if(!api->location)  {
-                                api->location_len  = p - q;
-                                api->location = malloc(api->location_len);
-                                if(!api->location)
-                                {
-                                    api->error++;
-                                    return 0;
-                                }
-                            }
-                            strcpy(api->location, q+2);
-                            *p = '\n';
-                        }
-                        p++;
-                    }
-                }
-                if(strcasecmp("content-type",s) == 0)    {
-                    while(count-->0) {
-                        if(*p == '\r') {
-                            *p = 0;
-                            if(api->type_len < p - q) {
-                                free(api->type);
-                                api->type = NULL;
-                            }
-                            if(!api->type)  {
-                                api->type_len  = p - q;
-                                api->type = malloc(api->type_len);
-                                if(!api->type)
-                                {
-                                    api->error++;
-                                    return 0;
-                                }
-                            }
-                            strcpy(api->type, q+2);
-                            *p = '\n';
-                        }
-                        p++;
-                    }
-
-                    if(api->typecb) {
-                        api->typecb(api->type, api->typecb_data);
-                    }
-                }
-                if(strcasecmp("retry-after",s) == 0) {
-                    while(count-->0) {
-                        if(*p == '\r') {
-                            *p = 0;
-                            api->retry_wait = atol(q+2);
-                            *p = '\r';
-                        }
-                        p++;
-                    }
-                }
-                *q = ':';
-            }
-        }
-        p++;
-    }
-
-    return size*nmemb;
+	ecmwf_api* api = (ecmwf_api*)userdata;
+
+	char* p    = (char*)ptr;
+	char* q    = (char*)ptr;
+	int  count = size * nmemb;
+
+	while(count-->0) {
+		if(*p == ':') {
+			if(q == (char*)ptr) {
+				char *s = q;
+				*p = 0;
+				q = p;
+				if(strcasecmp("location",s) == 0)    {
+					while(count-->0) {
+						if(*p == '\r') {
+							*p = 0;
+							if(api->location_len < p - q) {
+								free(api->location);
+								api->location = NULL;
+							}
+							if(!api->location)  {
+								api->location_len  = p - q;
+								api->location = malloc(api->location_len);
+								if(!api->location)
+								{
+									api->error++;
+									return 0;
+								}
+							}
+							strcpy(api->location, q+2);
+							*p = '\n';
+						}
+						p++;
+					}
+				}
+				if(strcasecmp("content-type",s) == 0)    {
+					while(count-->0) {
+						if(*p == '\r') {
+							*p = 0;
+							if(api->type_len < p - q) {
+								free(api->type);
+								api->type = NULL;
+							}
+							if(!api->type)  {
+								api->type_len  = p - q;
+								api->type = malloc(api->type_len);
+								if(!api->type)
+								{
+									api->error++;
+									return 0;
+								}
+							}
+							strcpy(api->type, q+2);
+							*p = '\n';
+						}
+						p++;
+					}
+
+					if(api->typecb) {
+						api->typecb(api->type, api->typecb_data);
+					}
+				}
+				if(strcasecmp("retry-after",s) == 0) {
+					while(count-->0) {
+						if(*p == '\r') {
+							*p = 0;
+							api->retry_wait = atol(q+2);
+							*p = '\r';
+						}
+						p++;
+					}
+				}
+				*q = ':';
+			}
+		}
+		p++;
+	}
+
+	return size*nmemb;
 
 }
 
 static void init(ecmwf_api* api, const char* method, const char* url)
 {
-    api->curl  = curl_easy_init();
-    api->error = 0;
+	if(api->last_url) {
+		free(api->last_url);
+		api->last_url = strdup(url);
+	}
 
-    if(!api->curl)
-    {
-        api->error++;
-        return;
-    }
+	api->curl  = curl_easy_init();
+	api->error = 0;
 
-    _(curl_easy_setopt(api->curl, CURLOPT_VERBOSE, api->verbose));
+	if(!api->curl)
+	{
+		api->error++;
+		return;
+	}
 
-    _(curl_easy_setopt(api->curl, CURLOPT_URL, url));
+	_(curl_easy_setopt(api->curl, CURLOPT_VERBOSE, api->verbose));
 
-    api->chunk = curl_slist_append(api->chunk, "Accept: application/json");
-    api->chunk = curl_slist_append(api->chunk, "Content-Type: application/json");
-    api->chunk = curl_slist_append(api->chunk, "charsets: utf-8");
-    api->chunk = curl_slist_append(api->chunk, api->key);
-    api->chunk = curl_slist_append(api->chunk, api->email);
+	_(curl_easy_setopt(api->curl, CURLOPT_URL, url));
+
+	api->chunk = curl_slist_append(api->chunk, "Accept: application/json");
+	api->chunk = curl_slist_append(api->chunk, "Content-Type: application/json");
+	api->chunk = curl_slist_append(api->chunk, "charsets: utf-8");
+	api->chunk = curl_slist_append(api->chunk, api->key);
+	api->chunk = curl_slist_append(api->chunk, api->email);
 
 #ifdef SKIP_PEER_VERIFICATION
-    _(curl_easy_setopt(api->curl, CURLOPT_SSL_VERIFYPEER, 0L));
+	_(curl_easy_setopt(api->curl, CURLOPT_SSL_VERIFYPEER, 0L));
 #endif
 
 #ifdef SKIP_HOSTNAME_VERIFICATION
-    _(curl_easy_setopt(api->curl, CURLOPT_SSL_VERIFYHOST, 0L));
+	_(curl_easy_setopt(api->curl, CURLOPT_SSL_VERIFYHOST, 0L));
 #endif
 
-    _(curl_easy_setopt(api->curl, CURLOPT_HTTPHEADER, api->chunk));
-    _(curl_easy_setopt(api->curl, CURLOPT_CUSTOMREQUEST, method));
-    _(curl_easy_setopt(api->curl, CURLOPT_USERAGENT, "mars/1.0"));
+	_(curl_easy_setopt(api->curl, CURLOPT_HTTPHEADER, api->chunk));
+	_(curl_easy_setopt(api->curl, CURLOPT_CUSTOMREQUEST, method));
+	_(curl_easy_setopt(api->curl, CURLOPT_USERAGENT, "mars/1.0"));
 
 
 }
 
 static void cleanup(ecmwf_api* api)
 {
-    /* always cleanup */
-    if(api->curl)
-        curl_easy_cleanup(api->curl);
+	/* always cleanup */
+	if(api->curl)
+		curl_easy_cleanup(api->curl);
 
-    if(api->chunk)
-        curl_slist_free_all(api->chunk);
+	if(api->chunk)
+		curl_slist_free_all(api->chunk);
 
-    api->curl  = NULL;
-    api->chunk = NULL;
-    api->pos   = 0;
+	api->curl  = NULL;
+	api->chunk = NULL;
+	api->pos   = 0;
 
 }
 
 const json_value* _ecmwf_api_call(ecmwf_api* api, const char* method, const char* url, const char *json)
 {
 
-    char buf[10240];
+	char buf[10240];
+
+	json_free(api->value);
+	api->value = NULL;
+
+	api->error = 0;
+
+	if(strcmp(method,"GET") == 0)
+	{
+		init(api, method, url);
+	}
+	else
+	{
+		sprintf(buf, "%s?offset=%d&limit=%d" , url, api->offset,api->limit);
+		init(api, method, buf);
+	}
+
+
+	if(json) {
+		_(curl_easy_setopt(api->curl, CURLOPT_POSTFIELDS, json));
+	}
+
+	api->pos  = 0;
+	_(curl_easy_setopt(api->curl, CURLOPT_HEADERFUNCTION , &headers_callback));
+	_(curl_easy_setopt(api->curl, CURLOPT_HEADERDATA , api));
 
-    json_free(api->value);
-    api->value = NULL;
+	_(curl_easy_setopt(api->curl, CURLOPT_WRITEFUNCTION, &write_callback));
+	_(curl_easy_setopt(api->curl, CURLOPT_WRITEDATA, api));
 
-    api->error = 0;
+	/* Perform the request, res will get the return code */
+	_(curl_easy_perform(api->curl));
+	_(curl_easy_getinfo (api->curl, CURLINFO_RESPONSE_CODE, &api->code));
 
-    if(strcmp(method,"GET") == 0)
-    {
-        init(api, method, url);
-    }
-    else
-    {
-        sprintf(buf, "%s?offset=%d&limit=%d" , url, api->offset,api->limit);
-        init(api, method, buf);
-    }
 
+	api->value = json_parse_string(api->buffer,api->pos);
 
-    if(json) {
-        _(curl_easy_setopt(api->curl, CURLOPT_POSTFIELDS, json));
-    }
+	if(api->verbose) {
+		json_println(api->value);
+	}
 
-    api->pos  = 0;
-    _(curl_easy_setopt(api->curl, CURLOPT_HEADERFUNCTION , &headers_callback));
-    _(curl_easy_setopt(api->curl, CURLOPT_HEADERDATA , api));
+	print_error(api->value);
 
-    _(curl_easy_setopt(api->curl, CURLOPT_WRITEFUNCTION, &write_callback));
-    _(curl_easy_setopt(api->curl, CURLOPT_WRITEDATA, api));
+	cleanup(api);
 
-    /* Perform the request, res will get the return code */
-    _(curl_easy_perform(api->curl));
-    _(curl_easy_getinfo (api->curl, CURLINFO_RESPONSE_CODE, &api->code));
+	json_array_each(json_object_find(api->value,"messages"),print_messages,api);
 
+	if(api->code >= 200 && api->code <= 400) {
+		return api->value;
+	}
 
-    api->value = json_parse_string(api->buffer,api->pos);
-    json_array_each(json_object_find(api->value,"messages"),print_messages,api);
+	marslog(LOG_EROR,"HTTP error code: %ld", api->code);
 
-    cleanup(api);
+	return NULL;
 
-    return api->value;
 }
 
 const char* ecmwf_api_must_retry(ecmwf_api* api) {
-    int retry = 0;
+	int retry = 0;
 
-    switch(api->code)
-    {
+	/* Failed to connect */
+	if(api->code == 0) {
+		retry = 1;
+	}
 
-        case 301:
-        case 302:
-            printf("redirect to %s\n",api->location);
-            return api->location;
-            break;
+	if(api->code >= 500 && api->code <= 599)
+	{
+		retry = 1;
+	}
 
+	if(api->code == 301 || api->code == 302) 
+	{
+		return api->location;
+	}
 
-        case 503:
-            retry = 1;
-            break;
+	if(retry) {
+		if(api->code >= 100 && api->code <= 499) {
 
-    }
+			if(api->location_len < 10240) {
+				free(api->location);
+				api->location = NULL;
+			}
+			if(!api->location)  {
+				api->location_len  = 10240;
+				api->location = malloc(api->location_len);
+				if(!api->location)
+				{
+					api->error++;
+					return 0;
+				}
+			}
 
-    if(retry) {
-        fprintf(stderr,"ecmwf_api: error %ld, retrying...\n", api->code);
-        api->retry_count++;
-        sleep(60);
+			_(curl_easy_getinfo(api->curl,CURLINFO_EFFECTIVE_URL,api->location));
+		}
 
-        if(api->location_len < 10240) {
-            free(api->location);
-            api->location = NULL;
-        }
-        if(!api->location)  {
-            api->location_len  = 10240;
-            api->location = malloc(api->location_len);
-            if(!api->location)
-            {
-                api->error++;
-                return 0;
-            }
-        }
+		const char* where = api->location ? api->location : api->last_url;
 
-        _(curl_easy_getinfo(api->curl,CURLINFO_EFFECTIVE_URL,api->location));
-        printf("retry %s\n",api->location);
 
+		marslog(LOG_EROR,"ecmwf_api: error %ld, retrying... %s", api->code, where?where:"?");
+		api->retry_count++;
 
-        return api->location;
+		return where;
+	}
 
-    }
-
-    return NULL;
+	return NULL;
 
 }
 
 const json_value* ecmwf_api_call(ecmwf_api* api, const char* method, const char* url, const char *json) {
 
-    char buffer[10240];
-    const json_value* v;
-    api->retry_count = 0;
-    const char *where = buffer;
-
-    if(api->url && url[0] == '/') {
-        sprintf( buffer, "%s%s" , api->url, url);
-    }
-    else
-    {
-        strcpy(buffer, url);
-    }
-
-    do {
-        v = _ecmwf_api_call(api, method, where, json);
-    }
-    while((where = ecmwf_api_must_retry(api)) != NULL);
-    return v;
+	char buffer[10240];
+	const json_value* v;
+	api->retry_count = 0;
+	const char *where = buffer;
+
+	if(api->url && url[0] == '/') {
+		sprintf( buffer, "%s%s" , api->url, url);
+	}
+	else
+	{
+		strcpy(buffer, url);
+	}
+
+	do {
+		v = _ecmwf_api_call(api, method, where, json);
+	} while((where = ecmwf_api_must_retry(api)) != NULL);
+
+	return v;
 }
 
 ecmwf_api* ecmwf_api_create(const char *url, const char* key, const char *email)
 {
-    ecmwf_api* api = calloc(1,sizeof(ecmwf_api));
-    if(first) {
-        curl_global_init(CURL_GLOBAL_DEFAULT);
-        first = 0;
-    }
-    api->limit = 500;
-
-    if(key) {
-        api->key = malloc(strlen(key) + strlen("X-ECMWF-KEY: ") + 1);
-        sprintf(api->key, "X-ECMWF-KEY: %s", key);
-    }
-
-    if(email) {
-        api->email = malloc(strlen(email) + strlen("From: ") + 1);
-        sprintf(api->email, "From: %s", email);
-    }
-
-    if(url)
-        api->url = strdup(url);
-
-    return api;
+	ecmwf_api* api = calloc(1,sizeof(ecmwf_api));
+	if(first) {
+		curl_global_init(CURL_GLOBAL_DEFAULT);
+		first = 0;
+	}
+	api->limit = 500;
+
+	if(key) {
+		api->key = malloc(strlen(key) + strlen("X-ECMWF-KEY: ") + 1);
+		sprintf(api->key, "X-ECMWF-KEY: %s", key);
+	}
+
+	if(email) {
+		api->email = malloc(strlen(email) + strlen("From: ") + 1);
+		sprintf(api->email, "From: %s", email);
+	}
+
+	if(url)
+		api->url = strdup(url);
+
+	return api;
+}
+
+void ecmwf_api_add_message_callback(ecmwf_api* api, void (*cb)(const char*))
+{
 }
 
 void ecmwf_api_destroy(ecmwf_api* api)
 {
-    cleanup(api);
-    json_free(api->value);
-    api->value = NULL;
-    if(api->buffer)   free(api->buffer);
-    if(api->location) free(api->location);
-    if(api->type) free(api->type);
-    if(api->key) free(api->key);
-    if(api->email) free(api->email);
-    if(api->url) free(api->url);
-    free(api);
-    /* curl_global_cleanup(); */
+	cleanup(api);
+	json_free(api->value);
+	api->value = NULL;
+	if(api->buffer)   free(api->buffer);
+	if(api->location) free(api->location);
+	if(api->type) free(api->type);
+	if(api->key) free(api->key);
+	if(api->email) free(api->email);
+	if(api->url) free(api->url);
+	if(api->last_url) free(api->last_url);
+	free(api);
+	/* curl_global_cleanup(); */
 }
 
 int ecmwf_api_in_progress(ecmwf_api *api)
 {
-    return api->code == 202;
+	return api->code == 202;
 }
 
 int ecmwf_api_transfer_ready(ecmwf_api *api)
 {
-    return api->code == 303;
+	return api->code == 303;
 }
 
 void ecmwf_api_in_wait(ecmwf_api *api)
 {
-    if(api->retry_wait)
-        sleep(api->retry_wait);
+	if(api->retry_wait)
+		sleep(api->retry_wait);
 }
 
 const char* ecmwf_api_location(ecmwf_api *api)
 {
-    return api->location;
+	return api->location;
 }
 
 const char* ecmwf_api_content_type(ecmwf_api *api)
 {
-    return api->type;
+	return api->type;
 }
 
 int ecmwf_api_error(ecmwf_api *api)
 {
-    return api->error;
+	return api->error;
 }
 
 void ecmwf_api_verbose(ecmwf_api *api, int v)
 {
-    api->verbose = v;
+	api->verbose = v;
 }
 
 long long ecmwf_api_transfer_start(ecmwf_api *api, const char* url, typeproc typecb, void* typecb_data)
 {
 
-    init(api, "GET", url);
+	init(api, "GET", url);
 
-    if(!multi_handle)
-        multi_handle = curl_multi_init();
+	if(!multi_handle)
+		multi_handle = curl_multi_init();
 
-    api->typecb = typecb;
-    api->typecb_data = typecb_data;
+	api->typecb = typecb;
+	api->typecb_data = typecb_data;
 
-    api->pos  = 0;
-    _(curl_easy_setopt(api->curl, CURLOPT_HEADERFUNCTION , &headers_callback));
-    _(curl_easy_setopt(api->curl, CURLOPT_HEADERDATA , api));
+	api->pos  = 0;
+	_(curl_easy_setopt(api->curl, CURLOPT_HEADERFUNCTION , &headers_callback));
+	_(curl_easy_setopt(api->curl, CURLOPT_HEADERDATA , api));
 
-    _(curl_easy_setopt(api->curl, CURLOPT_WRITEFUNCTION, &write_callback));
-    _(curl_easy_setopt(api->curl, CURLOPT_WRITEDATA, api));
+	_(curl_easy_setopt(api->curl, CURLOPT_WRITEFUNCTION, &write_callback));
+	_(curl_easy_setopt(api->curl, CURLOPT_WRITEDATA, api));
 
-    _(curl_multi_add_handle(multi_handle, api->curl));
+	_(curl_multi_add_handle(multi_handle, api->curl));
 
-    _(curl_multi_perform(multi_handle, &api->active));
+	_(curl_multi_perform(multi_handle, &api->active));
 
-    if((api->pos == 0) && (!api->active)) {
-        curl_multi_remove_handle(multi_handle, api->curl);
-        api->error++;
-    }
+	if((api->pos == 0) && (!api->active)) {
+		curl_multi_remove_handle(multi_handle, api->curl);
+		api->error++;
+	}
 
-    return json_get_integer(json_object_find(api->value,"size"));
+	return json_get_integer(json_object_find(api->value,"size"));
 
 }
 
 int ecmwf_api_transfer_end(ecmwf_api *api)
 {
-    curl_easy_getinfo (api->curl, CURLINFO_RESPONSE_CODE, &api->code);
-    cleanup(api);
-    if(api->code != 200)
-        marslog(LOG_EROR,"Transfer return code is %d", api->code);
-    return api->code == 200;
+	curl_easy_getinfo (api->curl, CURLINFO_RESPONSE_CODE, &api->code);
+	cleanup(api);
+	if(api->code != 200)
+		marslog(LOG_EROR,"Transfer return code is %d", api->code);
+	return api->code == 200;
 }
 
 #endif
diff --git a/src/libMars/api.h b/src/libMars/api.h
index 5bb9748..1751fc5 100644
--- a/src/libMars/api.h
+++ b/src/libMars/api.h
@@ -14,12 +14,15 @@
 typedef struct _ecmwf_api ecmwf_api;
 
 typedef void (*typeproc)(const char *type, void *data);
+typedef void (*messageproc)(const char *msg, void *data);
 
 ecmwf_api* ecmwf_api_create(const char *url, const char* key, const char *email);
 
 long long ecmwf_api_transfer (ecmwf_api *api, const char *url, const char *target);
 const json_value *ecmwf_api_call (ecmwf_api *api, const char *method, const char *url, const char *json);
 
+void ecmwf_api_set_msg_callback(ecmwf_api *api, messageproc msgcb, void *data);
+
 void ecmwf_api_destroy (ecmwf_api *api);
 int ecmwf_api_in_progress (ecmwf_api *api);
 int ecmwf_api_transfer_ready (ecmwf_api *api);
diff --git a/src/libMars/apibase.c b/src/libMars/apibase.c
index 71dca9c..3cea835 100644
--- a/src/libMars/apibase.c
+++ b/src/libMars/apibase.c
@@ -15,15 +15,19 @@
 #ifndef NOCURL
 
 typedef struct apidata {
-    ecmwf_api* api;
-    char* last;
-    long long total;
-    long long length;
-    int tranfer;
-    double start;
-    char status[80];
-    int wmo;
+	ecmwf_api* api;
+	char* last;
+	long long total;
+	long long length;
+	int tranfer;
+	double start;
+	char status[80];
+	int wmo;
 	int content_type_known;
+	boolean json;
+	char *datasets;
+	char *service;
+	char service_name[128];
 } apidata;
 
 static void apibase_init(void);
@@ -37,51 +41,50 @@ static boolean apibase_check(void *data,request *r);
 static err     apibase_validate(void *data,request*,request*,int);
 
 static option opts[] = {
-    #if 0
-    {"host","MARS_api_HOST",NULL,"wms.ecmwf.int:443",t_str,
-     sizeof(char*),OFFSET(apidata,host)},
 
-    {"url","MARS_api_URL",NULL,"/services/mars/d/apibase",t_str,
-     sizeof(char*),OFFSET(apidata,url)},
+#if 0
+	{"json","MARS_JSON_","-json","1",
+		t_boolean, sizeof(boolean),OFFSET(apidata,json)},
+#endif
+
+	{"datasets",NULL,NULL,NULL,t_str,
+		sizeof(char*),OFFSET(apidata,datasets)},
 
-    {"openssl","MARS_api_OPENSSL",NULL,"/usr/local/openssl/bin/openssl",t_str,
-     sizeof(char*),OFFSET(apidata,openssl)},
 
-    {"proxy","MARS_api_PROXY",NULL,NULL/*"carbad:3333"*/,t_str,
-     sizeof(char*),OFFSET(apidata,proxy)},
+	{"service","MARS_API_SERVICE",NULL,"services/mars",t_str,
+		sizeof(char*),OFFSET(apidata,service)},
 
-    #endif
 };
 
 static base_class _apibase_base = {
 
-    NULL,                          /* parent class */
-    "apibase",                     /* name         */
+	NULL,                          /* parent class */
+	"apibase",                     /* name         */
 
-    false,                         /* inited       */
+	false,                         /* inited       */
 
-    sizeof(apidata),               /* private_size  */
-    NUMBER(opts),                  /* options_count */
-    opts,                          /* options       */
+	sizeof(apidata),               /* private_size  */
+	NUMBER(opts),                  /* options_count */
+	opts,                          /* options       */
 
-    apibase_init,                  /* init          */
+	apibase_init,                  /* init          */
 
-    apibase_open,                  /* open          */
-    apibase_close,                 /* close         */
+	apibase_open,                  /* open          */
+	apibase_close,                 /* close         */
 
-    apibase_read,                  /* read          */
-    apibase_write,                 /* write         */
+	apibase_read,                  /* read          */
+	apibase_write,                 /* write         */
 
-    apibase_cntl,                  /* control       */
+	apibase_cntl,                  /* control       */
 
-    apibase_check,                 /* check         */
+	apibase_check,                 /* check         */
 
-    NULL,                      	   /* query        */
+	NULL,                      	   /* query        */
 
-    NULL,                          /* archive      */
-    NULL,                          /* admin        */
+	NULL,                          /* archive      */
+	NULL,                          /* admin        */
 
-    apibase_validate,              /* validate */
+	apibase_validate,              /* validate */
 
 };
 
@@ -96,198 +99,366 @@ static void apibase_init(void)
 }
 
 static char* proxies[] = {"HTTP_PROXY",
-                          "FTP_PROXY",
-                          "HTTPS_PROXY",
-                          "http_proxy",
-                          "https_proxy",
-                          "no_proxy",
-                          "ftp_proxy",
-                         };
+	"FTP_PROXY",
+	"HTTPS_PROXY",
+	"http_proxy",
+	"https_proxy",
+	"no_proxy",
+	"ftp_proxy",
+};
 
 
 static void typecb(const char* type, void *data)
 {
-    apidata* api = (apidata*)data;
-
-    marslog(LOG_INFO,"Type is %s", type);
-    if(strcmp(type,"application/x-grib") == 0 || strcmp(type,"application/x-bufr") == 0)
-    {
-        api->wmo = 1;
-    }
-    else
-    {
-        api->wmo = 0;
-    }
+	apidata* api = (apidata*)data;
+
+	marslog(LOG_INFO,"Type is %s", type);
+	if(strcmp(type,"application/x-grib") == 0 || strcmp(type,"application/x-bufr") == 0)
+	{
+		api->wmo = 1;
+	}
+	else
+	{
+		api->wmo = 0;
+	}
 	api->content_type_known = 1;
 }
 
+static char *APIservice(void *data, const char *name)
+{
+	apidata* api = (apidata*)data;
+	sprintf(api->service_name,"/%s/%s",api->service,name);
+	marslog(LOG_DBUG,"Calling service: %s",api->service_name);
+	return api->service_name;
+}
+
+static char *json2string(const json_value *j)
+{
+	static char *buf = NULL;
+	file_offset n;
+
+	char *tmp = marstmp();
+	FILE *f = fopen(tmp,"w");
+
+	if(f == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"%s",tmp);
+		return NULL;
+	}
+	json_save(j,f);
+	fclose(f);
+
+	f = fopen(tmp,"r");
+	if(f == NULL)
+	{
+		marslog(LOG_EROR|LOG_PERR,"%s",tmp);
+		return NULL;
+	}
+
+	if(buf) free(buf);
+
+	fseek(f,0,2);
+	n = ftell(f);
+	rewind(f);
+	buf = (char*)MALLOC(n+2);
+
+	n = fread(buf,1,n,f);
+	buf[n] = 0;
+
+	fclose(f);
+
+	unlink(tmp);
+
+	return buf;
+}
+
+
+static json_value *request2json(const request *r)
+{
+	json_value *o = json_new_object();
+	parameter *p = r->params;
+	while(p)
+	{
+		if(*p->name != '_')
+		{
+			json_value *a = json_new_array();
+			value * v = p->values;
+			while(v)
+			{
+				json_array_push_item(a,json_new_string(v->name));
+				v = v->next;
+			}
+			json_object_set_item(o,p->name,a);
+		}
+		p = p->next;
+	}
+	return o;	
+}
+
+
+static void messages(const char* msg, void *data)
+{
+	apidata* api = (apidata*)data;
+
+	/*
+	   if(mars.debug) 
+	   {
+	   marslog(LOG_DBUG," MESSAGE ==> %s", msg);
+	   }
+	 */
+
+	if(strncmp(msg,"mars - ",7) == 0) 
+	{
+		int state = 0;
+		int mode  = -1;
+
+		while(*msg) {
+
+			switch(*msg)
+			{
+				case '-':
+					state++;
+					if(state == 3 && mode != -1) {
+						msg++;
+						while(*msg && isspace(*msg)) msg++;
+						if(*msg) {
+							marslog(mode, "%s [%s]", msg, database_name(api));
+						}
+					}
+					break;
+
+				case 'W':
+					if(state == 1 && mode == -1) mode = LOG_WARN;
+					break;
+
+				case 'I':
+					if(state == 1 && mode == -1) mode = LOG_INFO;
+					break;
+
+				case 'E':
+					if(state == 1 && mode == -1) mode = LOG_EROR;
+					break;
+
+				case 'D':
+					if(state == 1 && mode == -1) mode = LOG_DBUG;
+					break;
+
+				case 'F':
+					if(state == 1 && mode == -1) mode = LOG_EXIT;
+					break;
+
+
+			}
+			if(*msg)
+				msg++;
+		}
+	}
+}
+
 static err  apibase_open(void *data,request *r,request *env,int mode)
 {
-    apidata* api = (apidata*)data;
-    char path[PATH_MAX];
-    json_value* v;
-    const char* key , *email, *url;
-    char* tmp;
-    char* rs;
-    char *s;
-    int i;
-
-    sprintf(path,"%s/.ecmwfapirc", getenv("HOME"));
-    if(access(path,F_OK) == 0) {
-        v = json_read_file(path);
-
-        key   = json_get_string(json_object_find(v,"key"));
-        email = json_get_string(json_object_find(v,"email"));
-        url   = json_get_string(json_object_find(v,"url"));
-    }
-    else
-    {
-        marslog(LOG_EROR|LOG_PERR,"Cannot open %s", path);
-    }
-
-    if(!key) {
-        marslog(LOG_EROR,"API KEY is missing");
-        return -1;
-    }
-
-    if(!url) {
-        marslog(LOG_EROR,"API URL is missing");
-        return -1;
-    }
-
-    if(!email) {
-        marslog(LOG_EROR,"API EMAIL is missing");
-        return -1;
-    }
-
-
-    api->api = ecmwf_api_create(url, key, email);
-
-    marslog(LOG_INFO,"ECMWF API is at %s", url);
-
-    for(i = 0; i < NUMBER(proxies); i++) {
-        char *p = getenv(proxies[i]);
-        if(p) {
-            marslog(LOG_INFO,"Proxy settings: %s=%s", proxies[i], p);
-            if(*p && p[strlen(p) - 1] == '/') {
-                marslog(LOG_WARN,"Libcurl does not use proxy settings that finish with a '/'");
-            }
-        }
-    }
-
-    ecmwf_api_verbose(api->api, mars.debug);
-
-    v = ecmwf_api_call(api->api, "GET",  "/who-am-i", NULL);
-    if(!v) {
-        marslog(LOG_EROR,"API: Failed to get user information");
-        return -1;
-    }
-
-    marslog(LOG_INFO,"ECMWF user id is '%s'", json_get_string(json_object_find(v, "uid")));
-
-    v = ecmwf_api_call(api->api, "GET",  "/services/mars/news", NULL);
-
-    if((v != NULL) && ((v = json_object_find(v, "news")) != NULL)) {
-        char *p = strdup(json_get_string(v));
-        char *q = p;
-        char *tok = "\n";
-        while(strtok(p,tok)) {
-            marslog(LOG_INFO,"%s", p);
-            p = NULL;
-        }
-        free(q);
-    }
-
-    rs = request2string(r);
-    tmp = MALLOC(strlen(rs)*3);
-    v = ecmwf_api_call(api->api, "POST", "/services/mars/requests", json_encode_string(request2string(r), tmp));
-    FREE(tmp);
-
-    if(!v) {
-        marslog(LOG_EROR,"API: Failed to send request");
-        return -1;
-    }
-
-    marslog(LOG_INFO,"Request ID is %s", json_get_string(json_object_find(v, "name")));
-    s = json_get_string(json_object_find(v, "status"));
-    if(s && strcmp(s,api->status) != 0) {
-        strcpy(api->status,s);
-        marslog(LOG_INFO,"Request is %s", s);
-    }
-
-    api->last = strcache(ecmwf_api_location(api->api));
-
-    while(ecmwf_api_in_progress(api->api))
-    {
-        ecmwf_api_in_wait(api->api);
-        strfree(api->last);
-        api->last = strcache(ecmwf_api_location(api->api));
-        v = ecmwf_api_call(api->api, "GET",  ecmwf_api_location(api->api) , NULL);
-        if(!v) {
-            marslog(LOG_EROR,"API: Failed to get request status");
-            return -1;
-        }
-        s = json_get_string(json_object_find(v, "status"));
-        if(s && strcmp(s,api->status) != 0) {
-            strcpy(api->status,s);
-            marslog(LOG_INFO,"Request is %s", s);
-        }
-    }
-
-    if(!ecmwf_api_transfer_ready(api->api)) {
-        marslog(LOG_EROR,"API: Failed to initiate transfer");
-        return -1;
-    }
-
-    api->tranfer = 1;
-
-    url = ecmwf_api_location(api->api);
-
-    api->total  = 0;
-    api->length = ecmwf_api_transfer_start(api->api, url, typecb, api );
-
-    marslog(LOG_INFO,"Transfering %s from %s", bytename(api->length), url);
-    timer_start(get_timer("Transfer", NULL,0));
-    api->start = timer_value(get_timer("Transfer", NULL,0));
-
-    return 0;
+	apidata* api = (apidata*)data;
+	char path[PATH_MAX];
+	const json_value* v;
+	const char* key , *email, *url;
+	char* tmp;
+	char* rs;
+	const char *s;
+	int i;
+
+	sprintf(path,"%s/.ecmwfapirc", getenv("HOME"));
+	if(access(path,F_OK) == 0) {
+		v = json_read_file(path);
+
+		key   = json_get_string(json_object_find(v,"key"));
+		email = json_get_string(json_object_find(v,"email"));
+		url   = json_get_string(json_object_find(v,"url"));
+	}
+	else
+	{
+		marslog(LOG_EROR|LOG_PERR,"Cannot open %s", path);
+	}
+
+	if(getenv("ECMWF_API_KEY"))   key   = getenv("ECMWF_API_KEY");
+	if(getenv("ECMWF_API_URL"))   url   = getenv("ECMWF_API_URL");
+	if(getenv("ECMWF_API_EMAIL")) email = getenv("ECMWF_API_EMAIL");
+
+	if(!key) {
+		marslog(LOG_EROR,"API KEY is missing");
+		return -1;
+	}
+
+	if(!url) {
+		marslog(LOG_EROR,"API URL is missing");
+		return -1;
+	}
+
+	if(!email) {
+		marslog(LOG_EROR,"API EMAIL is missing");
+		return -1;
+	}
+
+	/* The service should be configured with the database */
+	if(api->datasets)
+	{
+		const char *dataset = get_value(r,"DATASET",0);
+		char s[1024];
+		if(!dataset)
+		{
+			marslog(LOG_EROR,"Please provide a value for DATASET");
+			return -1;
+		}
+		sprintf(s,"%s/%s",api->datasets,dataset);
+		api->service = strcache(s);
+		api->json = 1;
+	}
+
+	api->api = ecmwf_api_create(url, key, email);
+	ecmwf_api_set_msg_callback(api->api, messages, api);
+
+	marslog(LOG_INFO,"ECMWF API is at %s", url);
+	marslog(LOG_INFO,"Using MARS service at %s",APIservice(api,""));
+
+	for(i = 0; i < NUMBER(proxies); i++) {
+		char *p = getenv(proxies[i]);
+		if(p) {
+			marslog(LOG_INFO,"Proxy settings: %s=%s", proxies[i], p);
+			if(*p && p[strlen(p) - 1] == '/') {
+				marslog(LOG_WARN,"Libcurl does not use proxy settings that finish with a '/'");
+			}
+		}
+	}
+
+	ecmwf_api_verbose(api->api, mars.debug);
+	if(getenv("ECMWF_API_DEBUG"))
+		ecmwf_api_verbose(api->api, atol(getenv("ECMWF_API_DEBUG")));
+
+	v = ecmwf_api_call(api->api, "GET",  "/who-am-i", NULL);
+	if(!v) {
+		marslog(LOG_EROR,"API: Failed to get user information");
+		return -1;
+	}
+
+	marslog(LOG_INFO,"ECMWF user id is '%s'", json_get_string(json_object_find(v, "uid")));
+
+
+	v = ecmwf_api_call(api->api, "GET",  APIservice(api,"news"), NULL);
+	if(!v) {
+		marslog(LOG_EROR,"API: Failed to get service information");
+		return -1;
+	}
+
+	if((v != NULL) && ((v = json_object_find(v, "news")) != NULL)) {
+		char *p = strdup(json_get_string(v));
+		char *q = p;
+		char *tok = "\n";
+		while(strtok(p,tok)) {
+			marslog(LOG_INFO,"%s", p);
+			p = NULL;
+		}
+		free(q);
+	}
+
+	if(api->json)
+	{
+		json_value * j = request2json(r);
+		v = ecmwf_api_call(api->api, "POST", APIservice(api,"requests"), json2string(j));
+		json_free(j);
+	}
+	else
+	{
+		rs = request2string(r);
+		tmp = MALLOC(strlen(rs)*3);
+		v = ecmwf_api_call(api->api, "POST", APIservice(api,"requests"), json_encode_string(request2string(r), tmp));
+		FREE(tmp);
+	}
+
+	if(!v) {
+		marslog(LOG_EROR,"API: Failed to send request");
+		return -1;
+	}
+
+	marslog(LOG_INFO,"Request ID is %s", json_get_string(json_object_find(v, "name")));
+	s = json_get_string(json_object_find(v, "status"));
+	if(s && strcmp(s,api->status) != 0) {
+		strcpy(api->status,s);
+		marslog(LOG_INFO,"Request is %s", s);
+	}
+
+	api->last = strcache(ecmwf_api_location(api->api));
+
+	while(ecmwf_api_in_progress(api->api))
+	{
+		ecmwf_api_in_wait(api->api);
+		strfree(api->last);
+		api->last = strcache(ecmwf_api_location(api->api));
+		v = ecmwf_api_call(api->api, "GET",  ecmwf_api_location(api->api) , NULL);
+		if(!v) {
+			marslog(LOG_EROR,"API: Failed to get request status");
+			return -1;
+		}
+		s = json_get_string(json_object_find(v, "status"));
+		if(s && strcmp(s,api->status) != 0) {
+			strcpy(api->status,s);
+			marslog(LOG_INFO,"Request is %s", s);
+		}
+	}
+
+	if(!ecmwf_api_transfer_ready(api->api)) {
+		marslog(LOG_EROR,"API: Failed to initiate transfer");
+		return -1;
+	}
+
+	api->tranfer = 1;
+
+	url = ecmwf_api_location(api->api);
+
+	api->total  = 0;
+	api->length = ecmwf_api_transfer_start(api->api, url, typecb, api );
+
+	marslog(LOG_INFO,"Transfering %s from %s", bytename(api->length), url);
+	timer_start(get_timer("Transfer", NULL,0));
+	api->start = timer_value(get_timer("Transfer", NULL,0));
+
+	return 0;
 }
 
 static err  apibase_close(void *data)
 {
-    apidata* api = (apidata*)data;
-    int e = 0;
-    if(api->tranfer) {
-        timer_stop(get_timer("Transfer", NULL,0),api->length);
-        timer_partial_rate(get_timer("Transfer", NULL,0), api->start, api->length);
-        if(!ecmwf_api_transfer_end(api->api)) {
-            marslog(LOG_EROR,"API: Transfer failed");
-            e = -1;
-        }
-    }
-    if(api->last) {
-        ecmwf_api_call(api->api, "DELETE", api->last, NULL);
-        strfree(api->last);
-    }
-    ecmwf_api_destroy(api->api);
-
-    return e;
+	apidata* api = (apidata*)data;
+	int e = 0;
+	if(api->tranfer) {
+		timer_stop(get_timer("Transfer", NULL,0),api->length);
+		timer_partial_rate(get_timer("Transfer", NULL,0), api->start, api->length);
+		if(!ecmwf_api_transfer_end(api->api)) {
+			marslog(LOG_EROR,"API: Transfer failed");
+			e = -1;
+		}
+	}
+	if(api->last) {
+		ecmwf_api_call(api->api, "DELETE", api->last, NULL);
+		strfree(api->last);
+	}
+	if(api->api)
+		ecmwf_api_destroy(api->api);
+
+	return e;
 }
 
 static long readcb(void *data, void *buffer, long len)
 {
-    apidata* api = (apidata*)data;
+	apidata* api = (apidata*)data;
 
-    long size = ecmwf_api_transfer_read(api->api,buffer,len);
-    if(size > 0)
-        api->total += size;
-    return size?size:EOF;
+	long size = ecmwf_api_transfer_read(api->api,buffer,len);
+	if(size > 0)
+		api->total += size;
+	return size?size:EOF;
 }
 
 static err  apibase_read(void *data,request *r,void *buffer,long *length)
 {
-    apidata* api = (apidata*)data;
-    size_t len = *length;
+	apidata* api = (apidata*)data;
+	size_t len = *length;
 
 	if(!api->content_type_known)
 	{
@@ -300,64 +471,69 @@ static err  apibase_read(void *data,request *r,void *buffer,long *length)
 	}
 
 
-    if(api->wmo) {
-        err ret =  wmo_read_any_from_stream(data,&readcb,buffer,&len);
-        *length = len;
-        return ret;
-    }
-    else
-    {
-        long size = ecmwf_api_transfer_read(api->api,buffer,len);
-        if(size > 0) {
-            *length = size;
-            api->total += size;
-            return 0;
-
-        }
-        return -1;
-    }
+	if(api->wmo) {
+		err ret =  wmo_read_any_from_stream(data,&readcb,buffer,&len);
+		*length = len;
+		if(ret != 0 && ret != -1) {
+			marslog(LOG_EROR,"apibase_read:  wmo_read_any_from_stream returns %ld", (long)ret);
+			if(ret != BUF_TO_SMALL)
+				return RETRY_ERR;
+		}
+		return ret;
+	}
+	else
+	{
+		long size = ecmwf_api_transfer_read(api->api,buffer,len);
+		if(size > 0) {
+			*length = size;
+			api->total += size;
+			return 0;
+
+		}
+		return -1;
+	}
 }
 
 static err  apibase_write(void *data,request *r,void *buffer,long *length)
 {
-    return -1;
+	return -1;
 }
 
 static err  apibase_list(void *data,request *r)
 {
-    return -1;
+	return -1;
 }
 
 static err  apibase_cntl(void *data,int code,void *param,int size)
 {
-    switch(code)
-    {
-    case CNTL_LIST:
-        return -1;
-        /*NOTREACHED*/
-        break;
-
-    default:
-        return -1;
-        /*NOTREACHED*/
-        break;
-    }
-    return -1;
+	switch(code)
+	{
+		case CNTL_LIST:
+			return -1;
+			/*NOTREACHED*/
+			break;
+
+		default:
+			return -1;
+			/*NOTREACHED*/
+			break;
+	}
+	return -1;
 }
 
 static boolean  apibase_check(void *data,request *r)
 {
-    return true;
+	return true;
 }
 
 static err apibase_validate(void *data, request *r, request *e, int mode)
 {
-    err ret = NOERR;
+	err ret = NOERR;
 
-    /*	if(net->validate)*/
-    /*		ret = validate_request(r,e,net->validate);*/
+	/*	if(net->validate)*/
+	/*		ret = validate_request(r,e,net->validate);*/
 
-    return ret;
+	return ret;
 }
 
 #else
diff --git a/src/libMars/dhsbase.c b/src/libMars/dhsbase.c
index c56b58e..111f7a2 100755
--- a/src/libMars/dhsbase.c
+++ b/src/libMars/dhsbase.c
@@ -1661,6 +1661,7 @@ static void check_msg(dhsdata *dhs, const char* msg)
 		{ "Bad Tag",             false},  /* MARS server error */
 		{ "Bad tag",             false},  /* MARS server error */
 		{ "Write error on pipe", false},  /* MARS server error */
+		{ "Read error on pipe", false},   /* MARS server error */
 		{ "Failed HPSS call",    true},   /* Calls to HPSS unrecoverable on server for time being */
 		{ "Double buffer error: Failed HPSS call",    true},   /* Calls to HPSS unrecoverable on server for time being */
 	};
diff --git a/src/libMars/environ.c b/src/libMars/environ.c
index a2e4bf4..2abde25 100755
--- a/src/libMars/environ.c
+++ b/src/libMars/environ.c
@@ -48,7 +48,7 @@ void add_groups(const char *u,request *r)
 }
 
 #ifdef ECMWF
-#define READ_EMS_MAX_TRY 5
+#define READ_EMS_MAX_TRY 3
 static void read_ems_cache(const char* who,request* env)
 {
 	char buf[1024];
@@ -235,7 +235,7 @@ request *get_environ(void)
 	unsigned long id;
 	char *useWebmars     = getenv("WEBMARS_USER");
 	char *emosChangeUser = getenv("EMOS_CHANGE_USER");
-	const char *who      = user();
+	const char *who      = user(NULL);
 	char *useTest        = getenv("MARS_ENV");
 	const char *abc      = strcache(getenv("ECACCOUNT"));
 	const char *owner    = strcache(getenv("ECREALOWNER"));
@@ -244,6 +244,9 @@ request *get_environ(void)
 
 	if(env) return env;
 
+	if(EQ(who,"bamboo"))
+		who = user("max");
+
 	if(useTest && EQ(who,"max"))
 	{
 		env = read_request_file(useTest);
@@ -256,7 +259,8 @@ request *get_environ(void)
 
 #ifdef ECMWF
 	if((useWebmars && EQ(who,"max")) ||
-	   (emosChangeUser && EQ(who,"emos")))
+	   (emosChangeUser && EQ(who,"emos")) ||
+	   (useWebmars && EQ(who,"worker") && mars.marslite_mode))
 	{
 		char *u = useWebmars;
 		if(emosChangeUser)
@@ -322,6 +326,20 @@ request *get_environ(void)
 		}
 		set_value(env,"abc",abc);
 	}
+
+	/* No EMS category. Stop here */
+	if(get_value(env,"category",0) == NULL)
+	{
+		marslog(LOG_WARN,"Unable to find EMS category for user '%s'",who);
+		if(mars.enforce_ems_category)
+		{
+			marslog(LOG_EROR,"MARS cannot continue without an EMS category");
+			marslog(LOG_EROR,"Please, contact the MARS team. Exit");
+			marsexit(1);
+		}
+		else
+			marslog(LOG_WARN,"MARS has been configured to continue even without EMS category");
+	}
 #endif
 	if(environment)
 		set_value(env,"environment",environment);
diff --git a/src/libMars/globals.h b/src/libMars/globals.h
index 59024b5..b136ecb 100644
--- a/src/libMars/globals.h
+++ b/src/libMars/globals.h
@@ -165,6 +165,7 @@ typedef struct globals {
 	boolean    show_hosts;              /* Show hosts in logfiles */
 
 	boolean    marslite_mode;           /* Whether this client is running on behalf of a marslite client */
+	boolean    enforce_ems_category;    /* Whether we have to fail if no EMS category is found. Default true: Aug 2013 */
 
 } globals;
 
diff --git a/src/libMars/handler.c b/src/libMars/handler.c
index 6195ad3..892d467 100644
--- a/src/libMars/handler.c
+++ b/src/libMars/handler.c
@@ -34,7 +34,7 @@ static handler handlers[] = {
 	{"ERASE",   handle_retrieve,   VALIDATE | STATISTICS,},
 	{"FLUSH",   handle_control, VALIDATE | STATISTICS,},
 	{"ATTACH",  handle_control, VALIDATE | STATISTICS,},
-	{"LIST",    handle_control, },
+	{"LIST",    handle_control, MARSLITE, },
 	{"BROWSE",  handle_control, VALIDATE,},
 	{"STAGE",   handle_control, VALIDATE | STATISTICS | MARSLITE,},
 
@@ -71,11 +71,17 @@ err handle_request(request *r,void *data)
 	
 	if(mars.marslite_mode)
 	{
-        const char *force = get_value(r,"_WEBMARS_DATABASE",0);
-        if(force == NULL)
+        const char *force_database = getenv("_WEBMARS_KEEP_DATABASE"); /*get_value(r,"_WEBMARS_DATABASE",0);*/
+        const char *force_target   = getenv("_WEBMARS_KEEP_TARGET");   /*get_value(r,"_WEBMARS_TARGET",0);*/
+        if(force_database == NULL)
+		{
             unset_value(r,"DATABASE");
-		unset_value(r,"TARGET");
-		unset_value(r,"FIELDSET");
+		}
+		if(force_target == NULL)
+		{
+			unset_value(r,"TARGET");
+			unset_value(r,"FIELDSET");
+		}
 	}
 
 	if(mars.verbose)
diff --git a/src/libMars/json.c b/src/libMars/json.c
index 56a0f0c..a9b770d 100644
--- a/src/libMars/json.c
+++ b/src/libMars/json.c
@@ -59,7 +59,7 @@ void json_free(json_value* v) {
     }
 }
 
-const char* json_get_string(json_value* v)
+const char* json_get_string(const json_value* v)
 {
     if(v != NULL && v->type == json_type_string)
         return v->string;
@@ -176,7 +176,7 @@ static void _json_print(const json_value* v, FILE* out, int depth) {
             /* for(i = 0; i < depth; i++) fprintf(out,"   "); */
             fprintf(out,"[");
             p = v->array;
-            if(p && p->next)
+            if(p /*&& p->next*/)
             {
 
                 fprintf(out,"\n");
@@ -199,6 +199,12 @@ static void _json_print(const json_value* v, FILE* out, int depth) {
         }
 }
 
+void json_save(const json_value* v, FILE *f) 
+{
+    _json_print(v,f,0);
+}
+
+
 void json_print(const json_value* v) 
 {
     _json_print(v,stdout,0);
@@ -519,6 +525,66 @@ static json_value* parse_string(json_parser* p)
 
 }
 
+json_value *json_new_string(const char *s)
+{
+	json_value* j = calloc(1,sizeof(json_value));
+	j->type = json_type_string;
+	j->string = strdup(s);
+	return j;
+}
+
+json_value *json_new_array()
+{
+	json_value* j = calloc(1,sizeof(json_value));
+	j->type = json_type_array;
+	return j;
+}
+
+json_value *json_new_object()
+{
+	json_value* j = calloc(1,sizeof(json_value));
+	j->type = json_type_object;
+	return j;
+}
+
+void json_object_set_item(json_value *object, const char *key,json_value *value)
+{
+	json_value* last = 0;
+	json_value* first = 0;
+	json_value *k = json_new_string(key);
+	k->value = value;
+
+	first = object->object;
+	while(first)
+	{
+		last = first;
+		first = first->next;
+	}
+
+	if(last)
+		last->next = k;
+	else
+		object->object = k;
+}
+
+void json_array_push_item(json_value *object, json_value *k)
+{
+	json_value* last = 0;
+	json_value* first = 0;
+
+	first = object->array;
+	while(first)
+	{
+		last = first;
+		first = first->next;
+	}
+
+	if(last)
+		last->next = k;
+	else
+		object->array = k;
+}
+
 static json_value* parse_object(json_parser* p)
 {
 
@@ -706,7 +772,7 @@ void json_object_each(json_value* a, void (*proc)(const char*, json_value*, void
     }
 }
 
-json_value* json_object_find(json_value* a, const char* key)
+json_value* json_object_find(const json_value* a, const char* key)
 {
     if(a != NULL && a->type == json_type_object)
     {
diff --git a/src/libMars/json.h b/src/libMars/json.h
index 7a640c1..2abdbbf 100644
--- a/src/libMars/json.h
+++ b/src/libMars/json.h
@@ -12,24 +12,4 @@
 
 typedef struct _json_value json_value;
 
-
-void json_free (json_value *v);
-const char *json_get_string (json_value *v);
-long long json_get_integer (json_value *v);
-void json_print (const json_value *v);
-void json_println(const json_value *v);
-
-void json_write (const json_value *v, FILE* out);
-
-json_value *json_parse_string (const char *str, size_t len);
-json_value *json_read_file (const char *path);
-
-
-void json_array_each (json_value *a, void (*proc )(int, json_value *, void *), void *data);
-void json_object_each (json_value *a, void (*proc )(const char *, json_value *, void *), void *data);
-json_value *json_object_find (json_value *a, const char *key);
-
-const char* json_encode_string(const char *s, char* out);
-
-
 #endif
diff --git a/src/libMars/langl.c b/src/libMars/langl.c
index 860ee65..c55938b 100644
--- a/src/libMars/langl.c
+++ b/src/libMars/langl.c
@@ -8,7 +8,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 33
+#define YY_FLEX_SUBMINOR_VERSION 35
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -30,7 +30,7 @@
 
 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
 
-#if __STDC_VERSION__ >= 199901L
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
 
 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
  * if you want the limit (max/min) macros for int types. 
@@ -93,11 +93,12 @@ typedef unsigned int flex_uint32_t;
 
 #else	/* ! __cplusplus */
 
-#if __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
 
 #define YY_USE_CONST
 
-#endif	/* __STDC__ */
+#endif	/* defined (__STDC__) */
 #endif	/* ! __cplusplus */
 
 #ifdef YY_USE_CONST
@@ -190,14 +191,9 @@ extern FILE *yy_marsin, *yy_marsout;
 
 #define unput(c) yy_marsunput( c, (yy_marstext_ptr)  )
 
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-
 #ifndef YY_TYPEDEF_YY_SIZE_T
 #define YY_TYPEDEF_YY_SIZE_T
-typedef unsigned int yy_mars_size_t;
+typedef size_t yy_mars_size_t;
 #endif
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -671,7 +667,7 @@ static void jumpprtf(FILE *f,char *fmt,...)
 }
 
 
-#line 675 "lex.yy_mars.c"
+#line 671 "lex.yy_mars.c"
 
 #define INITIAL 0
 
@@ -689,6 +685,35 @@ static void jumpprtf(FILE *f,char *fmt,...)
 
 static int yy_mars_init_globals (void );
 
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int yy_marslex_destroy (void );
+
+int yy_marsget_debug (void );
+
+void yy_marsset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE yy_marsget_extra (void );
+
+void yy_marsset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *yy_marsget_in (void );
+
+void yy_marsset_in  (FILE * in_str  );
+
+FILE *yy_marsget_out (void );
+
+void yy_marsset_out  (FILE * out_str  );
+
+int yy_marsget_leng (void );
+
+char *yy_marsget_text (void );
+
+int yy_marsget_lineno (void );
+
+void yy_marsset_lineno (int line_number  );
+
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
  */
@@ -731,7 +756,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO (void) fwrite( yy_marstext, yy_marsleng, 1, yy_marsout )
+#define ECHO fwrite( yy_marstext, yy_marsleng, 1, yy_marsout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -742,7 +767,7 @@ static int input (void );
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_mars_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		int n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( yy_marsin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -831,7 +856,7 @@ YY_DECL
 
 
 
-#line 835 "lex.yy_mars.c"
+#line 860 "lex.yy_mars.c"
 
 	if ( !(yy_mars_init) )
 		{
@@ -844,6 +869,8 @@ YY_DECL
         /* Create the reject buffer large enough to save one state per allowed character. */
         if ( ! (yy_mars_state_buf) )
             (yy_mars_state_buf) = (yy_mars_state_type *)yy_marsalloc(YY_STATE_BUF_SIZE  );
+            if ( ! (yy_mars_state_buf) )
+                YY_FATAL_ERROR( "out of dynamic memory in yy_marslex()" );
 
 		if ( ! (yy_mars_start) )
 			(yy_mars_start) = 1;	/* first start state */
@@ -1092,7 +1119,7 @@ YY_RULE_SETUP
 #line 163 "langl.l"
 ECHO;
 	YY_BREAK
-#line 1096 "lex.yy_mars.c"
+#line 1123 "lex.yy_mars.c"
 			case YY_STATE_EOF(INITIAL):
 				yy_marsterminate();
 
@@ -1294,7 +1321,7 @@ static int yy_mars_get_next_buffer (void)
 
 		/* Read in more data. */
 		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf[number_to_move]),
-			(yy_mars_n_chars), num_to_read );
+			(yy_mars_n_chars), (size_t) num_to_read );
 
 		YY_CURRENT_BUFFER_LVALUE->yy_mars_n_chars = (yy_mars_n_chars);
 		}
@@ -1318,6 +1345,14 @@ static int yy_mars_get_next_buffer (void)
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
+	if ((yy_mars_size_t) ((yy_mars_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_mars_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_mars_size_t new_size = (yy_mars_n_chars) + number_to_move + ((yy_mars_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf = (char *) yy_marsrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_mars_get_next_buffer()" );
+	}
+
 	(yy_mars_n_chars) += number_to_move;
 	YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf[(yy_mars_n_chars)] = YY_END_OF_BUFFER_CHAR;
 	YY_CURRENT_BUFFER_LVALUE->yy_mars_ch_buf[(yy_mars_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
@@ -1739,7 +1774,9 @@ static void yy_marsensure_buffer_stack (void)
 		(yy_mars_buffer_stack) = (struct yy_mars_buffer_state**)yy_marsalloc
 								(num_to_alloc * sizeof(struct yy_mars_buffer_state*)
 								);
-		
+		if ( ! (yy_mars_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_marsensure_buffer_stack()" );
+								  
 		memset((yy_mars_buffer_stack), 0, num_to_alloc * sizeof(struct yy_mars_buffer_state*));
 				
 		(yy_mars_buffer_stack_max) = num_to_alloc;
@@ -1757,6 +1794,8 @@ static void yy_marsensure_buffer_stack (void)
 								((yy_mars_buffer_stack),
 								num_to_alloc * sizeof(struct yy_mars_buffer_state*)
 								);
+		if ( ! (yy_mars_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_marsensure_buffer_stack()" );
 
 		/* zero only the new slots.*/
 		memset((yy_mars_buffer_stack) + (yy_mars_buffer_stack_max), 0, grow_size * sizeof(struct yy_mars_buffer_state*));
@@ -1801,7 +1840,7 @@ YY_BUFFER_STATE yy_mars_scan_buffer  (char * base, yy_mars_size_t  size )
 
 /** Setup the input buffer state to scan a string. The next call to yy_marslex() will
  * scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
+ * @param yy_marsstr a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
diff --git a/src/libMars/langy.c b/src/libMars/langy.c
index 6138098..502d49e 100644
--- a/src/libMars/langy.c
+++ b/src/libMars/langy.c
@@ -1,24 +1,23 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
 
-/* Skeleton implementation for Bison's Yacc-like parsers in C
+/* A Bison parser, made by GNU Bison 2.4.1.  */
 
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
    Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
+   
+   This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -29,7 +28,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-
+   
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -47,7 +46,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.3"
+#define YYBISON_VERSION "2.4.1"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -55,11 +54,67 @@
 /* Pure parsers.  */
 #define YYPURE 0
 
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
 /* Using locations.  */
 #define YYLSP_NEEDED 0
 
 
 
+/* Copy the first part of user declarations.  */
+
+/* Line 189 of yacc.c  */
+#line 1 "langy.y"
+
+
+/*
+ * © Copyright 1996-2012 ECMWF.
+ * 
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+ * In applying this licence, ECMWF does not waive the privileges and immunities 
+ * granted to it by virtue of its status as an intergovernmental organisation nor
+ * does it submit to any jurisdiction.
+ */
+
+#include "mars.h"
+#include "lang.h"
+
+static request *reverse(request*);
+static value *reverse_other(value *r,value *s);
+static value *reverse_value(value *r,value *s);
+request *parser_lang;
+request *parser_reqs;
+rule    *parser_ruls;
+
+
+
+/* Line 189 of yacc.c  */
+#line 98 "y.tab.c"
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
 /* Tokens.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
@@ -105,54 +160,13 @@
 
 
 
-/* Copy the first part of user declarations.  */
-#line 1 "langy.y"
-
-
-/*
- * © Copyright 1996-2012 ECMWF.
- * 
- * This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
- * In applying this licence, ECMWF does not waive the privileges and immunities 
- * granted to it by virtue of its status as an intergovernmental organisation nor
- * does it submit to any jurisdiction.
- */
-
-#include "mars.h"
-#include "lang.h"
-
-static request *reverse(request*);
-static value *reverse_other(value *r,value *s);
-static value *reverse_value(value *r,value *s);
-request *parser_lang;
-request *parser_reqs;
-rule    *parser_ruls;
-
-
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 25 "langy.y"
 {
+
+/* Line 214 of yacc.c  */
+#line 25 "langy.y"
+
     char       *str;
 	request    *req;
 	parameter  *par;
@@ -161,22 +175,23 @@ typedef union YYSTYPE
 	action     *act;
 	condition  *con;
 	testop      top;
-}
-/* Line 187 of yacc.c.  */
-#line 167 "y.tab.c"
-	YYSTYPE;
+
+
+
+/* Line 214 of yacc.c  */
+#line 183 "y.tab.c"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
 # define yy_marsstype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 
-
 /* Copy the second part of user declarations.  */
 
 
-/* Line 216 of yacc.c.  */
-#line 180 "y.tab.c"
+/* Line 264 of yacc.c  */
+#line 195 "y.tab.c"
 
 #ifdef short
 # undef short
@@ -251,14 +266,14 @@ typedef short int yy_marstype_int16;
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static int
-YYID (int i)
+YYID (int yy_marsi)
 #else
 static int
-YYID (i)
-    int i;
+YYID (yy_marsi)
+    int yy_marsi;
 #endif
 {
-  return i;
+  return yy_marsi;
 }
 #endif
 
@@ -339,9 +354,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
 /* A type that is properly aligned for any stack member.  */
 union yy_marsalloc
 {
-  yy_marstype_int16 yy_marsss;
-  YYSTYPE yy_marsvs;
-  };
+  yy_marstype_int16 yy_marsss_alloc;
+  YYSTYPE yy_marsvs_alloc;
+};
 
 /* The size of the maximum gap between one aligned stack and the next.  */
 # define YYSTACK_GAP_MAXIMUM (sizeof (union yy_marsalloc) - 1)
@@ -375,12 +390,12 @@ union yy_marsalloc
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack)					\
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
     do									\
       {									\
 	YYSIZE_T yy_marsnewbytes;						\
-	YYCOPY (&yy_marsptr->Stack, Stack, yy_marssize);				\
-	Stack = &yy_marsptr->Stack;						\
+	YYCOPY (&yy_marsptr->Stack_alloc, Stack, yy_marssize);			\
+	Stack = &yy_marsptr->Stack_alloc;					\
 	yy_marsnewbytes = yy_marsstacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
 	yy_marsptr += yy_marsnewbytes / sizeof (*yy_marsptr);				\
       }									\
@@ -868,17 +883,20 @@ yy_mars_symbol_print (yy_marsoutput, yy_marstype, yy_marsvaluep)
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static void
-yy_mars_stack_print (yy_marstype_int16 *bottom, yy_marstype_int16 *top)
+yy_mars_stack_print (yy_marstype_int16 *yy_marsbottom, yy_marstype_int16 *yy_marstop)
 #else
 static void
-yy_mars_stack_print (bottom, top)
-    yy_marstype_int16 *bottom;
-    yy_marstype_int16 *top;
+yy_mars_stack_print (yy_marsbottom, yy_marstop)
+    yy_marstype_int16 *yy_marsbottom;
+    yy_marstype_int16 *yy_marstop;
 #endif
 {
   YYFPRINTF (stderr, "Stack now");
-  for (; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
+  for (; yy_marsbottom <= yy_marstop; yy_marsbottom++)
+    {
+      int yy_marsbot = *yy_marsbottom;
+      YYFPRINTF (stderr, " %d", yy_marsbot);
+    }
   YYFPRINTF (stderr, "\n");
 }
 
@@ -912,11 +930,11 @@ yy_mars_reduce_print (yy_marsvsp, yy_marsrule)
   /* The symbols being reduced.  */
   for (yy_marsi = 0; yy_marsi < yy_marsnrhs; yy_marsi++)
     {
-      fprintf (stderr, "   $%d = ", yy_marsi + 1);
+      YYFPRINTF (stderr, "   $%d = ", yy_marsi + 1);
       yy_mars_symbol_print (stderr, yy_marsrhs[yy_marsprhs[yy_marsrule] + yy_marsi],
 		       &(yy_marsvsp[(yy_marsi + 1) - (yy_marsnrhs)])
 		       		       );
-      fprintf (stderr, "\n");
+      YYFPRINTF (stderr, "\n");
     }
 }
 
@@ -1196,10 +1214,8 @@ yy_marsdestruct (yy_marsmsg, yy_marstype, yy_marsvaluep)
 	break;
     }
 }
-

 
 /* Prevent warnings from -Wmissing-prototypes.  */
-
 #ifdef YYPARSE_PARAM
 #if defined __STDC__ || defined __cplusplus
 int yy_marsparse (void *YYPARSE_PARAM);
@@ -1215,11 +1231,10 @@ int yy_marsparse ();
 #endif /* ! YYPARSE_PARAM */
 
 
-
-/* The look-ahead symbol.  */
+/* The lookahead symbol.  */
 int yy_marschar;
 
-/* The semantic value of the look-ahead symbol.  */
+/* The semantic value of the lookahead symbol.  */
 YYSTYPE yy_marslval;
 
 /* Number of syntax errors so far.  */
@@ -1227,9 +1242,9 @@ int yy_marsnerrs;
 
 
 
-/*----------.
-| yy_marsparse.  |
-`----------*/
+/*-------------------------.
+| yy_marsparse or yy_marspush_parse.  |
+`-------------------------*/
 
 #ifdef YYPARSE_PARAM
 #if (defined __STDC__ || defined __C99__FUNC__ \
@@ -1253,66 +1268,68 @@ yy_marsparse ()
 #endif
 #endif
 {
-  
-  int yy_marsstate;
-  int yy_marsn;
-  int yy_marsresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yy_marserrstatus;
-  /* Look-ahead token as an internal (translated) token number.  */
-  int yy_marstoken = 0;
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yy_marsmsgbuf[128];
-  char *yy_marsmsg = yy_marsmsgbuf;
-  YYSIZE_T yy_marsmsg_alloc = sizeof yy_marsmsgbuf;
-#endif
 
-  /* Three stacks and their tools:
-     `yy_marsss': related to states,
-     `yy_marsvs': related to semantic values,
-     `yy_marsls': related to locations.
 
-     Refer to the stacks thru separate pointers, to allow yy_marsoverflow
-     to reallocate them elsewhere.  */
+    int yy_marsstate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yy_marserrstatus;
 
-  /* The state stack.  */
-  yy_marstype_int16 yy_marsssa[YYINITDEPTH];
-  yy_marstype_int16 *yy_marsss = yy_marsssa;
-  yy_marstype_int16 *yy_marsssp;
+    /* The stacks and their tools:
+       `yy_marsss': related to states.
+       `yy_marsvs': related to semantic values.
 
-  /* The semantic value stack.  */
-  YYSTYPE yy_marsvsa[YYINITDEPTH];
-  YYSTYPE *yy_marsvs = yy_marsvsa;
-  YYSTYPE *yy_marsvsp;
+       Refer to the stacks thru separate pointers, to allow yy_marsoverflow
+       to reallocate them elsewhere.  */
 
+    /* The state stack.  */
+    yy_marstype_int16 yy_marsssa[YYINITDEPTH];
+    yy_marstype_int16 *yy_marsss;
+    yy_marstype_int16 *yy_marsssp;
 
+    /* The semantic value stack.  */
+    YYSTYPE yy_marsvsa[YYINITDEPTH];
+    YYSTYPE *yy_marsvs;
+    YYSTYPE *yy_marsvsp;
 
-#define YYPOPSTACK(N)   (yy_marsvsp -= (N), yy_marsssp -= (N))
-
-  YYSIZE_T yy_marsstacksize = YYINITDEPTH;
+    YYSIZE_T yy_marsstacksize;
 
+  int yy_marsn;
+  int yy_marsresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yy_marstoken;
   /* The variables used to return semantic value and location from the
      action routines.  */
   YYSTYPE yy_marsval;
 
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yy_marsmsgbuf[128];
+  char *yy_marsmsg = yy_marsmsgbuf;
+  YYSIZE_T yy_marsmsg_alloc = sizeof yy_marsmsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yy_marsvsp -= (N), yy_marsssp -= (N))
 
   /* The number of symbols on the RHS of the reduced rule.
      Keep to zero when no symbol should be popped.  */
   int yy_marslen = 0;
 
+  yy_marstoken = 0;
+  yy_marsss = yy_marsssa;
+  yy_marsvs = yy_marsvsa;
+  yy_marsstacksize = YYINITDEPTH;
+
   YYDPRINTF ((stderr, "Starting parse\n"));
 
   yy_marsstate = 0;
   yy_marserrstatus = 0;
   yy_marsnerrs = 0;
-  yy_marschar = YYEMPTY;		/* Cause a token to be read.  */
+  yy_marschar = YYEMPTY; /* Cause a token to be read.  */
 
   /* Initialize stack pointers.
      Waste one element of value and location stack
      so that they stay on the same level as the state stack.
      The wasted elements are never initialized.  */
-
   yy_marsssp = yy_marsss;
   yy_marsvsp = yy_marsvs;
 
@@ -1342,7 +1359,6 @@ yy_marsparse ()
 	YYSTYPE *yy_marsvs1 = yy_marsvs;
 	yy_marstype_int16 *yy_marsss1 = yy_marsss;
 
-
 	/* Each stack pointer address is followed by the size of the
 	   data in use in that stack, in bytes.  This used to be a
 	   conditional around just the two extra args, but that might
@@ -1350,7 +1366,6 @@ yy_marsparse ()
 	yy_marsoverflow (YY_("memory exhausted"),
 		    &yy_marsss1, yy_marssize * sizeof (*yy_marsssp),
 		    &yy_marsvs1, yy_marssize * sizeof (*yy_marsvsp),
-
 		    &yy_marsstacksize);
 
 	yy_marsss = yy_marsss1;
@@ -1373,9 +1388,8 @@ yy_marsparse ()
 	  (union yy_marsalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yy_marsstacksize));
 	if (! yy_marsptr)
 	  goto yy_marsexhaustedlab;
-	YYSTACK_RELOCATE (yy_marsss);
-	YYSTACK_RELOCATE (yy_marsvs);
-
+	YYSTACK_RELOCATE (yy_marsss_alloc, yy_marsss);
+	YYSTACK_RELOCATE (yy_marsvs_alloc, yy_marsvs);
 #  undef YYSTACK_RELOCATE
 	if (yy_marsss1 != yy_marsssa)
 	  YYSTACK_FREE (yy_marsss1);
@@ -1386,7 +1400,6 @@ yy_marsparse ()
       yy_marsssp = yy_marsss + yy_marssize - 1;
       yy_marsvsp = yy_marsvs + yy_marssize - 1;
 
-
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
 		  (unsigned long int) yy_marsstacksize));
 
@@ -1396,6 +1409,9 @@ yy_marsparse ()
 
   YYDPRINTF ((stderr, "Entering state %d\n", yy_marsstate));
 
+  if (yy_marsstate == YYFINAL)
+    YYACCEPT;
+
   goto yy_marsbackup;
 
 /*-----------.
@@ -1404,16 +1420,16 @@ yy_marsparse ()
 yy_marsbackup:
 
   /* Do appropriate processing given the current state.  Read a
-     look-ahead token if we need one and don't already have one.  */
+     lookahead token if we need one and don't already have one.  */
 
-  /* First try to decide what to do without reference to look-ahead token.  */
+  /* First try to decide what to do without reference to lookahead token.  */
   yy_marsn = yy_marspact[yy_marsstate];
   if (yy_marsn == YYPACT_NINF)
     goto yy_marsdefault;
 
-  /* Not known => get a look-ahead token if don't already have one.  */
+  /* Not known => get a lookahead token if don't already have one.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
   if (yy_marschar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
@@ -1445,20 +1461,16 @@ yy_marsbackup:
       goto yy_marsreduce;
     }
 
-  if (yy_marsn == YYFINAL)
-    YYACCEPT;
-
   /* Count tokens shifted since error; after three, turn off error
      status.  */
   if (yy_marserrstatus)
     yy_marserrstatus--;
 
-  /* Shift the look-ahead token.  */
+  /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yy_marstoken, &yy_marslval, &yy_marslloc);
 
-  /* Discard the shifted token unless it is eof.  */
-  if (yy_marschar != YYEOF)
-    yy_marschar = YYEMPTY;
+  /* Discard the shifted token.  */
+  yy_marschar = YYEMPTY;
 
   yy_marsstate = yy_marsn;
   *++yy_marsvsp = yy_marslval;
@@ -1498,61 +1510,85 @@ yy_marsreduce:
   switch (yy_marsn)
     {
         case 3:
+
+/* Line 1455 of yacc.c  */
 #line 95 "langy.y"
     { parser_lang  = reverse((yy_marsvsp[(1) - (1)].req));  }
     break;
 
   case 4:
+
+/* Line 1455 of yacc.c  */
 #line 96 "langy.y"
     { parser_reqs  = reverse((yy_marsvsp[(1) - (1)].req));  }
     break;
 
   case 5:
+
+/* Line 1455 of yacc.c  */
 #line 97 "langy.y"
     { parser_ruls  = (yy_marsvsp[(1) - (1)].rul);           }
     break;
 
   case 7:
+
+/* Line 1455 of yacc.c  */
 #line 101 "langy.y"
     { (yy_marsval.req) = (yy_marsvsp[(2) - (2)].req); (yy_marsvsp[(2) - (2)].req)->next = (yy_marsvsp[(1) - (2)].req);   }
     break;
 
   case 8:
+
+/* Line 1455 of yacc.c  */
 #line 105 "langy.y"
     { (yy_marsval.req) = new_request((yy_marsvsp[(1) - (1)].str),NULL);     }
     break;
 
   case 9:
+
+/* Line 1455 of yacc.c  */
 #line 106 "langy.y"
     { (yy_marsval.req) = new_request((yy_marsvsp[(1) - (3)].str),(yy_marsvsp[(3) - (3)].par));       }
     break;
 
   case 10:
+
+/* Line 1455 of yacc.c  */
 #line 107 "langy.y"
     { (yy_marsval.req) = new_request((yy_marsvsp[(1) - (2)].str),NULL);     }
     break;
 
   case 11:
+
+/* Line 1455 of yacc.c  */
 #line 108 "langy.y"
     { (yy_marsval.req) = new_request((yy_marsvsp[(1) - (4)].str),(yy_marsvsp[(3) - (4)].par));       }
     break;
 
   case 12:
+
+/* Line 1455 of yacc.c  */
 #line 109 "langy.y"
     { (yy_marsval.req) = new_request(0,(yy_marsvsp[(2) - (3)].par));        }
     break;
 
   case 14:
+
+/* Line 1455 of yacc.c  */
 #line 113 "langy.y"
     { (yy_marsval.par) = (yy_marsvsp[(3) - (3)].par); (yy_marsvsp[(3) - (3)].par)->next = (yy_marsvsp[(1) - (3)].par);   }
     break;
 
   case 15:
+
+/* Line 1455 of yacc.c  */
 #line 117 "langy.y"
     { (yy_marsval.par) = new_parameter((yy_marsvsp[(1) - (4)].str),(yy_marsvsp[(4) - (4)].val)); (yy_marsval.par)->interface = (yy_marsvsp[(2) - (4)].req); }
     break;
 
   case 16:
+
+/* Line 1455 of yacc.c  */
 #line 119 "langy.y"
     {   (yy_marsval.par) = new_parameter((yy_marsvsp[(1) - (6)].str),NULL);
 						(yy_marsval.par)->interface = (yy_marsvsp[(2) - (6)].req);
@@ -1560,6 +1596,8 @@ yy_marsreduce:
     break;
 
   case 17:
+
+/* Line 1455 of yacc.c  */
 #line 125 "langy.y"
     {
 											(yy_marsval.par) = new_parameter((yy_marsvsp[(3) - (5)].str),(yy_marsvsp[(5) - (5)].val));      
@@ -1568,21 +1606,29 @@ yy_marsreduce:
     break;
 
   case 19:
+
+/* Line 1455 of yacc.c  */
 #line 132 "langy.y"
     { (yy_marsval.val) = (yy_marsvsp[(3) - (3)].val); (yy_marsvsp[(3) - (3)].val)->next = (yy_marsvsp[(1) - (3)].val);   }
     break;
 
   case 20:
+
+/* Line 1455 of yacc.c  */
 #line 134 "langy.y"
     { (yy_marsval.val) = new_value((yy_marsvsp[(1) - (1)].str));             }
     break;
 
   case 21:
+
+/* Line 1455 of yacc.c  */
 #line 135 "langy.y"
     { (yy_marsval.val) = new_value(strcache("\"")); }
     break;
 
   case 22:
+
+/* Line 1455 of yacc.c  */
 #line 136 "langy.y"
     { 
 											char buf[1024];
@@ -1593,36 +1639,50 @@ yy_marsreduce:
     break;
 
   case 23:
+
+/* Line 1455 of yacc.c  */
 #line 142 "langy.y"
     { (yy_marsval.val) = new_value(strcache("*"));  }
     break;
 
   case 24:
+
+/* Line 1455 of yacc.c  */
 #line 143 "langy.y"
     { (yy_marsval.val) = new_value(strcache("/"));  }
     break;
 
   case 25:
+
+/* Line 1455 of yacc.c  */
 #line 144 "langy.y"
     { (yy_marsval.val) = new_value(strcache("@"));  }
     break;
 
   case 28:
+
+/* Line 1455 of yacc.c  */
 #line 154 "langy.y"
     { (yy_marsval.req) = (yy_marsvsp[(2) - (2)].req); (yy_marsvsp[(2) - (2)].req)->next = (yy_marsvsp[(1) - (2)].req);   }
     break;
 
   case 29:
+
+/* Line 1455 of yacc.c  */
 #line 157 "langy.y"
     { (yy_marsval.str) =  (yy_marsvsp[(2) - (2)].str); }
     break;
 
   case 30:
+
+/* Line 1455 of yacc.c  */
 #line 158 "langy.y"
     { (yy_marsval.str) =  NULL; }
     break;
 
   case 31:
+
+/* Line 1455 of yacc.c  */
 #line 162 "langy.y"
     { 
 					  (yy_marsval.req) = new_request((yy_marsvsp[(1) - (6)].str),(yy_marsvsp[(5) - (6)].par)); 
@@ -1632,6 +1692,8 @@ yy_marsreduce:
     break;
 
   case 32:
+
+/* Line 1455 of yacc.c  */
 #line 168 "langy.y"
     { 
 					  (yy_marsval.req) = new_request((yy_marsvsp[(1) - (5)].str),NULL); 
@@ -1641,17 +1703,23 @@ yy_marsreduce:
     break;
 
   case 34:
+
+/* Line 1455 of yacc.c  */
 #line 175 "langy.y"
     { (yy_marsval.par) = (yy_marsvsp[(2) - (2)].par); (yy_marsvsp[(2) - (2)].par)->next = (yy_marsvsp[(1) - (2)].par);   }
     break;
 
   case 35:
+
+/* Line 1455 of yacc.c  */
 #line 177 "langy.y"
     { (yy_marsval.par) = new_parameter((yy_marsvsp[(1) - (5)].str),(yy_marsvsp[(4) - (5)].val)); 
 					   (yy_marsval.par)->interface = (yy_marsvsp[(2) - (5)].req); }
     break;
 
   case 36:
+
+/* Line 1455 of yacc.c  */
 #line 180 "langy.y"
     { 
 						(yy_marsval.par) = new_parameter((yy_marsvsp[(1) - (7)].str),(yy_marsvsp[(4) - (7)].val)); 
@@ -1661,21 +1729,29 @@ yy_marsreduce:
     break;
 
   case 37:
+
+/* Line 1455 of yacc.c  */
 #line 187 "langy.y"
     { (yy_marsval.req) = NULL; }
     break;
 
   case 38:
+
+/* Line 1455 of yacc.c  */
 #line 188 "langy.y"
     { (yy_marsval.req) = new_request(NULL,(yy_marsvsp[(2) - (3)].par)); }
     break;
 
   case 40:
+
+/* Line 1455 of yacc.c  */
 #line 192 "langy.y"
     { (yy_marsval.val) = (yy_marsvsp[(2) - (2)].val); (yy_marsvsp[(2) - (2)].val)->next = (yy_marsvsp[(1) - (2)].val);   }
     break;
 
   case 42:
+
+/* Line 1455 of yacc.c  */
 #line 197 "langy.y"
     { (yy_marsval.val) = (yy_marsvsp[(1) - (3)].val); 
 						  	(yy_marsvsp[(1) - (3)].val)->other_names = reverse_other((yy_marsvsp[(3) - (3)].val),NULL);
@@ -1683,159 +1759,220 @@ yy_marsreduce:
     break;
 
   case 45:
+
+/* Line 1455 of yacc.c  */
 #line 204 "langy.y"
     { (yy_marsval.val) = (yy_marsvsp[(3) - (3)].val); (yy_marsvsp[(3) - (3)].val)->other_names = (yy_marsvsp[(1) - (3)].val);  }
     break;
 
   case 47:
+
+/* Line 1455 of yacc.c  */
 #line 208 "langy.y"
     { (yy_marsval.val) = (yy_marsvsp[(1) - (5)].val); (yy_marsvsp[(1) - (5)].val)->expand = reverse_value((yy_marsvsp[(4) - (5)].val),0); }
     break;
 
   case 48:
+
+/* Line 1455 of yacc.c  */
 #line 212 "langy.y"
     { (yy_marsval.val) = new_reference((yy_marsvsp[(2) - (4)].str),(yy_marsvsp[(4) - (4)].str)); }
     break;
 
   case 50:
+
+/* Line 1455 of yacc.c  */
 #line 218 "langy.y"
     { (yy_marsval.rul) = (yy_marsvsp[(1) - (2)].rul); (yy_marsvsp[(1) - (2)].rul)->next = (yy_marsvsp[(2) - (2)].rul);}
     break;
 
   case 51:
+
+/* Line 1455 of yacc.c  */
 #line 222 "langy.y"
     { (yy_marsval.rul) = new_rule((yy_marsvsp[(2) - (4)].con),(yy_marsvsp[(4) - (4)].act));}
     break;
 
   case 53:
+
+/* Line 1455 of yacc.c  */
 #line 226 "langy.y"
     { (yy_marsval.act) = (yy_marsvsp[(1) - (2)].act); (yy_marsvsp[(1) - (2)].act)->next = (yy_marsvsp[(2) - (2)].act);}
     break;
 
   case 55:
+
+/* Line 1455 of yacc.c  */
 #line 230 "langy.y"
     { (yy_marsval.con) = new_condition(t_or,(yy_marsvsp[(1) - (3)].con),(yy_marsvsp[(3) - (3)].con));}
     break;
 
   case 57:
+
+/* Line 1455 of yacc.c  */
 #line 234 "langy.y"
     { (yy_marsval.con) = new_condition(t_and,(yy_marsvsp[(1) - (3)].con),(yy_marsvsp[(3) - (3)].con));}
     break;
 
   case 58:
+
+/* Line 1455 of yacc.c  */
 #line 237 "langy.y"
     { (yy_marsval.con) = new_condition((yy_marsvsp[(2) - (3)].top),(yy_marsvsp[(1) - (3)].con),(yy_marsvsp[(3) - (3)].con)); }
     break;
 
   case 59:
+
+/* Line 1455 of yacc.c  */
 #line 238 "langy.y"
     { (yy_marsval.con) = new_condition(t_not,(yy_marsvsp[(2) - (2)].con),NULL); }
     break;
 
   case 60:
+
+/* Line 1455 of yacc.c  */
 #line 239 "langy.y"
     { (yy_marsval.con) = (yy_marsvsp[(2) - (3)].con); }
     break;
 
   case 63:
+
+/* Line 1455 of yacc.c  */
 #line 244 "langy.y"
     { (yy_marsval.con) = new_condition(t_val,(condition*)(yy_marsvsp[(1) - (1)].val),NULL);}
     break;
 
   case 64:
+
+/* Line 1455 of yacc.c  */
 #line 247 "langy.y"
     { (yy_marsval.con) = new_condition(t_func,(condition*)strcache((yy_marsvsp[(1) - (4)].str)),(condition*)strcache((yy_marsvsp[(3) - (4)].str)));}
     break;
 
   case 65:
+
+/* Line 1455 of yacc.c  */
 #line 248 "langy.y"
     { (yy_marsval.con) = new_condition(t_func,(condition*)strcache((yy_marsvsp[(1) - (3)].str)),NULL);}
     break;
 
   case 66:
+
+/* Line 1455 of yacc.c  */
 #line 252 "langy.y"
     { (yy_marsval.top) = t_eq;}
     break;
 
   case 67:
+
+/* Line 1455 of yacc.c  */
 #line 253 "langy.y"
     { (yy_marsval.top) = t_gt;}
     break;
 
   case 68:
+
+/* Line 1455 of yacc.c  */
 #line 254 "langy.y"
     { (yy_marsval.top) = t_lt;}
     break;
 
   case 69:
+
+/* Line 1455 of yacc.c  */
 #line 255 "langy.y"
     { (yy_marsval.top) = t_ge;}
     break;
 
   case 70:
+
+/* Line 1455 of yacc.c  */
 #line 256 "langy.y"
     { (yy_marsval.top) = t_le;}
     break;
 
   case 71:
+
+/* Line 1455 of yacc.c  */
 #line 257 "langy.y"
     { (yy_marsval.top) = t_ne;}
     break;
 
   case 72:
+
+/* Line 1455 of yacc.c  */
 #line 258 "langy.y"
     { (yy_marsval.top) = t_in;}
     break;
 
   case 73:
+
+/* Line 1455 of yacc.c  */
 #line 261 "langy.y"
     { (yy_marsval.act) = new_action(a_set,(yy_marsvsp[(2) - (2)].par)); 
 			           (yy_marsvsp[(2) - (2)].par)->values = reverse_value((yy_marsvsp[(2) - (2)].par)->values,NULL);  }
     break;
 
   case 74:
+
+/* Line 1455 of yacc.c  */
 #line 263 "langy.y"
     { (yy_marsval.act) = new_action(a_unset,(yy_marsvsp[(2) - (2)].str)); }
     break;
 
   case 75:
+
+/* Line 1455 of yacc.c  */
 #line 264 "langy.y"
     { (yy_marsval.act) = new_action(a_warning,(yy_marsvsp[(2) - (2)].str)); }
     break;
 
   case 76:
+
+/* Line 1455 of yacc.c  */
 #line 265 "langy.y"
     { (yy_marsval.act) = new_action(a_mail,(yy_marsvsp[(2) - (2)].str)); }
     break;
 
   case 77:
+
+/* Line 1455 of yacc.c  */
 #line 266 "langy.y"
     { (yy_marsval.act) = new_action(a_mailuser,(yy_marsvsp[(2) - (2)].str)); }
     break;
 
   case 78:
+
+/* Line 1455 of yacc.c  */
 #line 267 "langy.y"
     { (yy_marsval.act) = new_action(a_info,(yy_marsvsp[(2) - (2)].str)); }
     break;
 
   case 79:
+
+/* Line 1455 of yacc.c  */
 #line 268 "langy.y"
     { (yy_marsval.act) = new_action(a_error,(yy_marsvsp[(2) - (2)].str)); }
     break;
 
   case 80:
+
+/* Line 1455 of yacc.c  */
 #line 269 "langy.y"
     { (yy_marsval.act) = new_action(a_exit,(yy_marsvsp[(2) - (2)].str)); }
     break;
 
   case 81:
+
+/* Line 1455 of yacc.c  */
 #line 270 "langy.y"
     { (yy_marsval.act) = new_action(a_fail,NULL); }
     break;
 
 
-/* Line 1267 of yacc.c.  */
-#line 1839 "y.tab.c"
+
+/* Line 1455 of yacc.c  */
+#line 1976 "y.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yy_marsr1[yy_marsn], &yy_marsval, &yy_marsloc);
@@ -1846,7 +1983,6 @@ yy_marsreduce:
 
   *++yy_marsvsp = yy_marsval;
 
-
   /* Now `shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
@@ -1911,7 +2047,7 @@ yy_marserrlab:
 
   if (yy_marserrstatus == 3)
     {
-      /* If just tried and failed to reuse look-ahead token after an
+      /* If just tried and failed to reuse lookahead token after an
 	 error, discard it.  */
 
       if (yy_marschar <= YYEOF)
@@ -1928,7 +2064,7 @@ yy_marserrlab:
 	}
     }
 
-  /* Else will try to reuse look-ahead token after shifting the error
+  /* Else will try to reuse lookahead token after shifting the error
      token.  */
   goto yy_marserrlab1;
 
@@ -1985,9 +2121,6 @@ yy_marserrlab1:
       YY_STACK_PRINT (yy_marsss, yy_marsssp);
     }
 
-  if (yy_marsn == YYFINAL)
-    YYACCEPT;
-
   *++yy_marsvsp = yy_marslval;
 
 
@@ -2012,7 +2145,7 @@ yy_marsabortlab:
   yy_marsresult = 1;
   goto yy_marsreturn;
 
-#ifndef yy_marsoverflow
+#if !defined(yy_marsoverflow) || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yy_marsexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -2023,7 +2156,7 @@ yy_marsexhaustedlab:
 #endif
 
 yy_marsreturn:
-  if (yy_marschar != YYEOF && yy_marschar != YYEMPTY)
+  if (yy_marschar != YYEMPTY)
      yy_marsdestruct ("Cleanup: discarding lookahead",
 		 yy_marstoken, &yy_marslval);
   /* Do not reclaim the symbols of the rule which action triggered
@@ -2049,6 +2182,8 @@ yy_marsreturn:
 }
 
 
+
+/* Line 1675 of yacc.c  */
 #line 273 "langy.y"
 
 
diff --git a/src/libMars/logfile.c b/src/libMars/logfile.c
index 40c6687..c8a9186 100755
--- a/src/libMars/logfile.c
+++ b/src/libMars/logfile.c
@@ -174,13 +174,27 @@ void marslog(int level,char *fmt,...)
 	if(once && already_logged(msg) && (lvl != LOG_DBUG))
 		return;
 
-	time(&now);
-	strftime(buf,sizeof(buf),"%Y%m%d.%H%M%S",gmtime(&now));
-	if(!mars.show_pid)		
-		fprintf(marslogf,"%s - %s - %s - ",progname(),titles[lvl],buf);
-	else
-		fprintf(marslogf,"%s [%6d] - %s - %s - ",progname(),mars.show_pid,titles[lvl],buf);
+	if(lvl != LOG_NONE) {
+		time(&now);
+		strftime(buf,sizeof(buf),"%Y%m%d.%H%M%S",gmtime(&now));
+		if(!mars.show_pid)		
+			fprintf(marslogf,"%s - %s - %s - ",progname(),titles[lvl],buf);
+		else
+			fprintf(marslogf,"%s [%6d] - %s - %s - ",progname(),mars.show_pid,titles[lvl],buf);
+	}
+	else {
+		char name[256];
+		size_t l = strlen(progname());
+		memset(name,' ', sizeof(name));
+		name[l] = 0;
+		
+		memset(buf,' ', strlen(buf));
 
+		if(!mars.show_pid)		
+			fprintf(marslogf,"%s   %s   %s   ",name, "      ", buf);
+		else
+			fprintf(marslogf,"%s            %s   %s   ", name, "      ", buf);
+	}
 	fprintf(marslogf,"%s",msg);
 
 	if(per && errno)
diff --git a/src/libMars/mars.h b/src/libMars/mars.h
index c78075e..50e690d 100755
--- a/src/libMars/mars.h
+++ b/src/libMars/mars.h
@@ -231,6 +231,7 @@ typedef int                 boolean;
 #define LOG_EROR		3	/* error   message      */
 #define LOG_EXIT		4	/* fatal error message  */
 #define LOG_SMS		    5	/* sms message  */
+#define LOG_NONE	    6   /* no prefix */
 #define LOG_PERR    	256	/* print errno          */
 #define LOG_NOCR    	512	/* no carriage-return   */
 #define LOG_ONCE	    1024 /* print messages only once */
@@ -657,6 +658,8 @@ extern "C" {
 /* used to certify requests */
 typedef struct ECMarsCertReply eCMarsCertReply;
 
+#include "api.h"
+#include "json.h"
 #include "cos.h"
 #include "proto.h"
 extern err parser(const char*,boolean);
diff --git a/src/libMars/options.c b/src/libMars/options.c
index 62a5378..d2b929c 100755
--- a/src/libMars/options.c
+++ b/src/libMars/options.c
@@ -289,6 +289,9 @@ SCHEDULE_FAIL | SCHEDULE_INFORM_FUTURE_CHANGE | SCHEDULE_LOG = 13
 	"marslite_mode", "MARS_MARSLITE_MODE", NULL, "0",
 	t_boolean,sizeof(boolean),OFFSET(globals,marslite_mode),
 
+	"enforce_ems_category", "MARS_ENFORCE_EMS_CATEGORY", NULL, "1",
+	t_boolean,sizeof(boolean),OFFSET(globals,enforce_ems_category),
+
 };
 
 static int    ac     = 0;
diff --git a/src/libMars/proto.h b/src/libMars/proto.h
index d89daa2..e057e0f 100755
--- a/src/libMars/proto.h
+++ b/src/libMars/proto.h
@@ -1,5 +1,5 @@
 /*
- * © Copyright 1996-2012 ECMWF.
+ * © Copyright 1996-2013 ECMWF.
  * 
  * This software is licensed under the terms of the Apache Licence Version 2.0
  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -8,6 +8,7 @@
  * does it submit to any jurisdiction.
  */
 
+
 /* tcp.c */
 void socket_buffers(int s);
 int writetcp(void *p, void *buf, u_int len);
@@ -342,7 +343,7 @@ long64 proc_mem(void);
 long64 proc_mem(void);
 long64 proc_mem(void);
 double proc_cpu(void);
-const char *user(void);
+const char *user(const char *s);
 err mars_compress(void *in, void *out, long inlen, long *outlen);
 err mars_uncompress(void *in, void *out, long inlen, long *outlen);
 const char *no_quotes(const char *in);
@@ -513,6 +514,45 @@ err mars_grib_index_send(mars_grib_index *idx, mstream *s);
 void mars_grib_index_free(mars_grib_index *idx);
 void mars_grib_index_print(mars_grib_index *idx);
 
+/* api.c */
+void ecmwf_api_set_msg_callback(ecmwf_api *api, messageproc msgcb, void *data);
+void ecmwf_wait_for_data(ecmwf_api *api, size_t size);
+size_t ecmwf_api_transfer_read(ecmwf_api *api, void *ptr, size_t size);
+const json_value *_ecmwf_api_call(ecmwf_api *api, const char *method, const char *url, const char *json);
+const char *ecmwf_api_must_retry(ecmwf_api *api);
+const json_value *ecmwf_api_call(ecmwf_api *api, const char *method, const char *url, const char *json);
+ecmwf_api *ecmwf_api_create(const char *url, const char *key, const char *email);
+void ecmwf_api_add_message_callback(ecmwf_api *api, void (*cb )(const char *));
+void ecmwf_api_destroy(ecmwf_api *api);
+int ecmwf_api_in_progress(ecmwf_api *api);
+int ecmwf_api_transfer_ready(ecmwf_api *api);
+void ecmwf_api_in_wait(ecmwf_api *api);
+const char *ecmwf_api_location(ecmwf_api *api);
+const char *ecmwf_api_content_type(ecmwf_api *api);
+int ecmwf_api_error(ecmwf_api *api);
+void ecmwf_api_verbose(ecmwf_api *api, int v);
+long long ecmwf_api_transfer_start(ecmwf_api *api, const char *url, typeproc typecb, void *typecb_data);
+int ecmwf_api_transfer_end(ecmwf_api *api);
+
+/* json.c */
+void json_free(json_value *v);
+const char *json_get_string(const json_value *v);
+long long json_get_integer(json_value *v);
+const char *json_encode_string(const char *s, char *out);
+void json_save(const json_value *v, FILE *f);
+void json_print(const json_value *v);
+void json_println(const json_value *v);
+json_value *json_new_string(const char *s);
+json_value *json_new_array(void);
+json_value *json_new_object(void);
+void json_object_set_item(json_value *object, const char *key, json_value *value);
+void json_array_push_item(json_value *object, json_value *k);
+json_value *json_parse_string(const char *str, size_t len);
+void json_array_each(json_value *a, void (*proc )(int, json_value *, void *), void *data);
+void json_object_each(json_value *a, void (*proc )(const char *, json_value *, void *), void *data);
+json_value *json_object_find(const json_value *a, const char *key);
+json_value *json_read_file(const char *path);
+
 /* base.c */
 base_class *base_class_by_name(const char *name);
 database *database_of(void *data);
@@ -562,12 +602,10 @@ void feedtask(int soc, int count, void *data);
 
 /* multibase.c */
 
-/* cachebase.c */
-
-/* webbase.c */
-
 /* odbbase.c */
 
+/* apibase.c */
+
 /* archive.c */
 err feed(database *bout, request *r);
 err handle_archive(request *r, void *data);
@@ -591,6 +629,16 @@ err grib_to_request_index(request *r, char *buffer, long length, mars_grib_index
 err grib_to_request(request *r, char *buffer, long length);
 
 /* pproc.c */
+fortint intout_(char *a, fortint *b, fortfloat *c, const char *d, fortint e, fortint f);
+fortint intin_(char *a, fortint *b, fortfloat *c, const char *d, fortint e, fortint f);
+fortint areachk_(fortfloat *a, fortfloat *b, fortfloat *c, fortfloat *d, fortfloat *e, fortfloat *f);
+fortint intf2(char *grib_in, fortint *length_in, char *grib_out, fortint *length_out);
+fortint intuvs2_(char *vort_grib_in, char *div_grib_in, fortint *length_in, char *vort_grib_out, char *div_grib_out, fortint *length_out);
+fortint intuvp2_(char *vort_grib_in, char *div_grib_in, fortint *length_in, char *vort_grib_out, char *div_grib_out, fortint *length_out);
+fortint intvect2_(char *u_grib_in, char *v_grib_in, fortint *length_in, char *u_grib_out, char *v_grib_out, fortint *length_out);
+fortint emosnum_(fortint *a);
+fortint ibasini_(fortint *a);
+int emosPrecision(void);
 err ppstyle(const request *r);
 err pprotation(const request *r);
 err pparea(request *r);
@@ -609,13 +657,6 @@ void wind_free(wind *w);
 boolean is_wind(long param);
 err wind_next(wind *w, FILE *f, char *buffer, long *length, timer *t);
 
-/* ocean.c */
-int grib_ocean_fix_section_1(gribsec1 *s1, request *r);
-
-/* multidef.c */
-int decode_multi_local_definition_190(gribsec1 *s1, request *r, char *grib);
-int decode_multi_local_definition(gribsec1 *s1, request *r, char *grib);
-
 /* bufr.c */
 unsigned long getbits(unsigned char *p, int skip, int len);
 unsigned long key_length(const char *buffer, const packed_key *k);
diff --git a/src/libMars/schedule.c b/src/libMars/schedule.c
index 39c8098..893786e 100644
--- a/src/libMars/schedule.c
+++ b/src/libMars/schedule.c
@@ -15,7 +15,7 @@
 static void get_date_for_schedule(long *year,long *month,long *day,long *hour,long *minute,long *second)
 {
 	char *schedule_fake_now = getenv("SCHEDULE_FAKE_NOW");
-	const char *who  = user();	
+	const char *who  = user(NULL);	
 	time_t now;
 	struct tm* t;
 	time(&now);
diff --git a/src/libMars/service.c b/src/libMars/service.c
index 380fc55..2507b8d 100644
--- a/src/libMars/service.c
+++ b/src/libMars/service.c
@@ -139,7 +139,7 @@ static void register_service(svc *s)
 
 	gethostname(host,sizeof(host));
 
-	set_value(r,"USER",   "%s", user());
+	set_value(r,"USER",   "%s", user(NULL));
 	set_value(r,"NAME",   "%s", s->name);
 	set_value(r,"HOST",   "%s", host);
 	set_value(r,"PID",    "%d", getpid());
diff --git a/src/libMars/tools.c b/src/libMars/tools.c
index 88d64ae..ad467d6 100755
--- a/src/libMars/tools.c
+++ b/src/libMars/tools.c
@@ -141,11 +141,14 @@ double proc_cpu()
 }
 
 
-const char *user(void)
+const char *user(const char *s)
 {
 	static char *u;
 	struct passwd *pw;
 
+	if(s)
+		u = strcache(s);
+
 	if(u) return u;
 
 	setpwent();
diff --git a/src/libMetview/Makefile.in b/src/libMetview/Makefile.in
index 9ac8c9a..aa131b6 100644
--- a/src/libMetview/Makefile.in
+++ b/src/libMetview/Makefile.in
@@ -146,6 +146,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -161,6 +162,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -187,11 +190,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/libMetview/MvFieldSet.cc b/src/libMetview/MvFieldSet.cc
index 468825c..338d4d3 100644
--- a/src/libMetview/MvFieldSet.cc
+++ b/src/libMetview/MvFieldSet.cc
@@ -1639,8 +1639,17 @@ bool MvField::isModelLevel()
 	//return levelType() == GRIB_MODEL_LEVEL || levelType() == cML_UKMO_ND;
 
 	string levTyp = mvgrid_->getString("mars.levtype");
-	return levTyp == "ml" || levTyp == cML_UKMO_ND_STR;
+	if (levTyp == "ml" || levTyp == cML_UKMO_ND_STR)
+	{
+		return true;
+	}
+	else  // some GRIB files don't have mars.levtype defined the way we'd like
+	{
+		levTyp = mvgrid_->getString("levelType");
+		return (levTyp == "ml" || levTyp == cML_UKMO_ND_STR);
+	}
 }
+
 bool MvField::isPressureLevel()
 {
 	//gribsec1 *s1 = (gribsec1*)&Grib->ksec1[0];
@@ -2027,3 +2036,33 @@ MvLocation MvField::nearestGridPointLocation( const MvLocation& l )
 
   return nearestLoc;
 }
+
+int MvField::find( double min, double max, vector<double>& lat, vector<double>& lon )
+{
+   if(! mvgrid_->hasLocationInfo() )
+   {
+      marslog(LOG_EROR, "MvField::Find(). unimplemented or spectral data - unable to extract location data");
+      return 0;
+   }
+
+   int count=0;
+   MvFieldExpander x(*this);
+   mvgrid_->init();
+   for( int j = 0; j < mvgrid_->length(); ++j )
+   {
+      if ( !mvgrid_->hasValue() ) //missing value
+         continue;
+
+      if( mvgrid_->value() >= min &&  mvgrid_->value() <= max )
+      {
+         lat.push_back(mvgrid_->lat_y());
+         lon.push_back(mvgrid_->lon_x());
+         count++;
+      }
+
+      mvgrid_->advance();
+   }
+
+   return count;
+}
+
diff --git a/src/libMetview/MvFieldSet.h b/src/libMetview/MvFieldSet.h
index abc4ef9..225d8a5 100644
--- a/src/libMetview/MvFieldSet.h
+++ b/src/libMetview/MvFieldSet.h
@@ -454,6 +454,10 @@ public:
 	 */
 	grib_handle* getGribHandle(){ return mvgrid_->field_->handle; }
 
+   //! Returns a list of locations (lat/long pairs), where the values of the input field
+   //! are within the interval [a, b]. This function is similar to Macro function Find.
+   int find( double min, double max, vector<double>& lat, vector<double>& lon );
+
 protected:
 	Cached getLineFromTable2( int line );
 	Cached table2FileName();
diff --git a/src/libMetview/MvGrid.cc b/src/libMetview/MvGrid.cc
index b3ea9cb..473f9cb 100644
--- a/src/libMetview/MvGrid.cc
+++ b/src/libMetview/MvGrid.cc
@@ -2785,6 +2785,9 @@ MvGridBase* MvGridFactory( field* myfield, bool releaseMemory, bool expandGrid )
       if (oldState == packed_file)
          set_field_state( myfield, packed_mem );  // packed_file -> packed_mem
 
+   // Check if the grib file is read to be used
+   if ( !myfield->handle )
+      return 0;
 
    const size_t cMaxBuf = 99;
    char strbuf[ cMaxBuf+1 ];
diff --git a/src/libMetview/MvRequest.cc b/src/libMetview/MvRequest.cc
index 7e2754b..fb3d5fa 100644
--- a/src/libMetview/MvRequest.cc
+++ b/src/libMetview/MvRequest.cc
@@ -539,11 +539,6 @@ void MvRequest::addValue(const char* p, const MvRequest& v)
 	setValue(p,sub+v);
 }
 
-void MvRequest::setFirstToCurrent()
-{
-	FirstRequest = CurrentRequest;
-}
-
 MvRequest& MvRequest::rewind()
 {
 	CurrentRequest = FirstRequest;
@@ -905,6 +900,8 @@ MvRequest MvRequest::ExpandRequest ( const char* defName, const char* rulesName,
 
 bool MvRequest::getPath(const char* par,string &resPath,bool canBeEmpty,string &errTxt)
 {		
+	errTxt.clear();
+	
 	const char *inPath=(*this)(par);
 	
   	if(inPath && strlen(inPath) > 0)
@@ -951,7 +948,9 @@ bool MvRequest::getPath(const char* par,string &resPath,bool canBeEmpty,string &
 
 bool MvRequest::getPath(const char* iconPar,const char* textPar,string &resPath,bool canBeEmpty,string &errTxt)
 {			
-  	MvRequest dataR=(*this)(iconPar);
+  	errTxt.clear();
+	
+	MvRequest dataR=(*this)(iconPar);
 	const char *dataPath=dataR("PATH");
 	
 	//First try to get the path from the icon object
@@ -962,7 +961,7 @@ bool MvRequest::getPath(const char* iconPar,const char* textPar,string &resPath,
 	//If there is no icon we use the text parameter to get the path
 	else
 	{
-	  	if(getPath(textPar,resPath,true,errTxt) != 0)
+	  	if(!getPath(textPar,resPath,true,errTxt))
 		{ 
 			return false;
 		}
@@ -971,7 +970,7 @@ bool MvRequest::getPath(const char* iconPar,const char* textPar,string &resPath,
 	if(!canBeEmpty && resPath.empty())
 	{
 	  	errTxt="No value found for paramaters: " + string(iconPar) + " " +  string(textPar); 
-		return 1;
+		return false;
 	}	
 	
 	return true;
@@ -980,7 +979,8 @@ bool MvRequest::getPath(const char* iconPar,const char* textPar,string &resPath,
   
 bool MvRequest::getValueId(const char* par,string& value,const std::map<string,string>& idMap,bool canBeEmpty,string &errTxt)
 {	
-	value.clear();
+        value.clear();
+	errTxt.clear();
 	
 	const char *cval=(*this)(par);
 	
@@ -1016,6 +1016,7 @@ bool MvRequest::getValueId(const char* par,string& value,const std::map<string,s
 bool MvRequest::getValue(const char* par,string& value,bool canBeEmpty,string &errTxt)
 {
 	value.clear();
+	errTxt.clear();
 	
 	const char *cval=(*this)(par);
 	
@@ -1041,6 +1042,7 @@ bool MvRequest::getValue(const char* par,string& value,bool canBeEmpty,string &e
 bool MvRequest::getValue(const char* par,std::vector<string>& value,bool canBeEmpty,string &errTxt)
 {
 	value.clear();
+	errTxt.clear();
 	
 	int cnt = countValues(par);
 	
diff --git a/src/libMetview/MvRequest.h b/src/libMetview/MvRequest.h
index 11acab2..9b126bf 100644
--- a/src/libMetview/MvRequest.h
+++ b/src/libMetview/MvRequest.h
@@ -390,15 +390,6 @@ public:
      // Advance to the end of all requests
      void advanceToEnd ();
 
-	//! Sets the FirstRequest pointer to point to the CurrentRequest
-	/*! This method was written for the specific purpose of updating
-     *  the request in a PmContext without copying the whole thing.
-     *  It has the potential for a memory leak, but that should be
-     *  outweighed by the increase in speed and decreased memory accumulation
-     *  during large plot commands.
-	 */
-	void setFirstToCurrent();
-
 	//! Rewind the whole request
 	/*! This method rewinds the linked list and returns
 	 *  the first request in the list.
diff --git a/src/libMetview/MvScanFileType.cc b/src/libMetview/MvScanFileType.cc
index fe879b5..22f3918 100644
--- a/src/libMetview/MvScanFileType.cc
+++ b/src/libMetview/MvScanFileType.cc
@@ -285,8 +285,8 @@ static const char *scan_file(const char *file)
       if(strncmp(buf.ch,"CDF",3) == 0)
 	return MvNetcdfType(file);  
 		
-      if(strncmp(buf.ch,"V5D",3) == 0)
-        return "VIS5D_FILE";
+      if(strncmp(buf.ch+1,"HDF",3) == 0)
+       return "NETCDF";
 
       if(strncmp(buf.ch+1,"PNG",3) == 0)
         return "PNG";
@@ -382,7 +382,13 @@ static const char *scan_file(const char *file)
           strstr(asciiBuf,"&NEM") != 0)
   {
     	return "NAMELIST";
-  }	
+  }
+  // RTTOV output files - we may need to adjust this test in the future
+  else if (strstr(asciiBuf, "# RTTOV OUTPUT") != 0)
+  {
+    return "RTTOV_OUTPUT_FILE";
+  }
+
   rewind(f.f_);
 
    //-- Check for IFS fortran namelists
@@ -395,29 +401,6 @@ static const char *scan_file(const char *file)
   if( fileType == eBinaryFile )   
       return "BINARY";            
 
-  //-- Look for a Vis5D control script
-
-  unsigned char c = ' ';          //-- look for a Vis5D control script
-  const int cMAXLINESTOCHECK = 25;
-  char line[512];
-  int i = 0;
-  int lines_checked = 0;
-  line[0] = 0;
-  while(!feof(f.f_) && lines_checked < cMAXLINESTOCHECK)
-    {
-      fread((char*)&c,1,1,f.f_);
-
-      if(i == sizeof(line) || c == '\n')
-        {
-    i = 0;
-          lines_checked++;
-    if(strncmp("vis5d_",line,6) == 0)
-      return "VIS5D_SCRIPT";
-        }
-      else
-        line[i++] = c;
-    }
-
 
   fclose( f.f_ );                 //-- destructor will not close (end-of-file => !f.f_)
   f.f_ = 0;                       //-- but after fclose destructor would try and...
@@ -565,6 +548,10 @@ const char* MvNetcdfType(const char* file,bool checkStatus)
 				{
 					return "SCM_OUTPUT_DATA";
 				}
+				else if(vStr.find("NETCDF_RTTOV_INPUT") == 0)
+				{
+					return "NETCDF_RTTOV_INPUT";
+				}
 			}
 		}
 		if(att != NULL)
diff --git a/src/libMetview/MvServiceTask.cc b/src/libMetview/MvServiceTask.cc
index 6c05eee..f11cd30 100644
--- a/src/libMetview/MvServiceTask.cc
+++ b/src/libMetview/MvServiceTask.cc
@@ -28,6 +28,11 @@ void MvServiceTask::run(void)
 	MvApplication::callService(Service,Request,this);
 }
 
+MvRequest MvServiceTask::run(int& error)
+{
+   return MvApplication::waitService(Service,Request,error);
+}
+
 void MvServiceTask::gotReply(const MvRequest &r,err e)
 {
 	Reply = r;
diff --git a/src/libMetview/MvServiceTask.h b/src/libMetview/MvServiceTask.h
index ddf3d0d..b64a2c6 100644
--- a/src/libMetview/MvServiceTask.h
+++ b/src/libMetview/MvServiceTask.h
@@ -53,6 +53,8 @@ public:
 	 */
 	virtual void run(void);
 
+   MvRequest run(int&);
+
 	//! Returns the reply request from the other Metview module
 	MvRequest& getReply() { return Reply; }
 };
diff --git a/src/libMetview/Path.cc b/src/libMetview/Path.cc
index eaee4c5..29c65bd 100644
--- a/src/libMetview/Path.cc
+++ b/src/libMetview/Path.cc
@@ -7,8 +7,10 @@
 
  ***************************** LICENSE END *************************************/
 
+#include <sys/stat.h>
 #include <sys/types.h>
 #include <dirent.h>
+#include <pwd.h>
 
 #include "inc_iostream.h"
 #include "inc_stl.h"
@@ -163,6 +165,51 @@ set<string> Path::files() const
 	return result;
 }
 
+set<string> Path::directories() const
+{
+	static char* myTmpDirLink = 0;               //-- link name in metview/Metview/
+	if( !myTmpDirLink )
+	  myTmpDirLink = getenv( "MV_TMPDIR_LINK" ); //-- "MvTemporaryCache_$$"
+
+	set<string> result;
+	DIR* dir = opendir(path_.c_str());
+	if(!dir)
+	  return result;
+
+	dirent* d;
+
+	while( (d = readdir(dir)) )
+	{
+	    if(d->d_name[0] == '.')
+	      continue;
+
+	    //-----
+	    //---- In user's $HOME/metview/Metview folder there may be other valid TEMPORARY
+	    //---  folder links, created by other Metview sessions by this same user.
+	    //--   Inserting such a file (link) into 'result' would later break the link
+	    //-    by relinking it into the cache directory of _this_ session, thus skip it!
+	    //
+	    if( strncmp( d->d_name, myTmpDirLink, 17 ) == 0  //- start as "MvTemporaryCache_"
+		&& strcmp( d->d_name, myTmpDirLink ) != 0 )  //- but is not for this session!
+	      {
+		//cout << ">>> NOT ours! Skipping folder " << d->d_name << endl;
+		continue;  //-- temporary folder link of another Metview session
+	      }
+	     
+	    struct stat ds;
+	    string dp=path_+"/" +string(d->d_name); 
+	    if(stat(dp.c_str(),&ds) || !S_ISDIR(ds.st_mode))
+	    {  
+	      	continue;
+	    }
+	   
+	    result.insert(d->d_name);
+	  }
+	closedir(dir);
+	return result;
+}
+
+
 string Path::loadText() const
 {
 	ifstream in(path_.c_str());
@@ -190,7 +237,10 @@ void Path::saveText(const string& s) const
 
 Path Path::add(const string& name) const
 {
-	return Path(path_ + "/" + name);
+	if(path_ != "/")
+  		return Path(path_ + "/" + name);
+	else   
+	  	return Path("/" + name);	  	
 }
 
 const string& Path::str() const
@@ -251,3 +301,41 @@ void Path::makeWritableByUser() const
 		if (!(info.st_mode & S_IWUSR))
 			chmod(path_.c_str(), info.st_mode | S_IWUSR);
 }
+
+string Path::permissions() const
+{
+	struct stat info;
+	if(::stat(path_.c_str(),&info) == 0)
+	{
+	  	string str((info.st_mode & S_IRUSR)?"r":"-");
+		str+=((info.st_mode & S_IWUSR)?"w":"-");
+		str+=((info.st_mode & S_IXUSR)?"x":"-");
+		str+=((info.st_mode & S_IRGRP)?"r":"-");
+		str+=((info.st_mode & S_IWGRP)?"w":"-");
+		str+=((info.st_mode & S_IXGRP)?"x":"-");
+		str+=((info.st_mode & S_IROTH)?"r":"-");
+		str+=((info.st_mode & S_IWOTH)?"w":"-");
+		str+=((info.st_mode & S_IXOTH)?"x":"-");
+		
+		return str;
+	}
+	
+	return "---------";
+}  
+
+string Path::owner() const
+{
+ 	struct stat info;
+	if(::stat(path_.c_str(),&info) == 0)
+	{
+	  	struct passwd *pw = getpwuid(info.st_uid);
+		if(pw)
+		{
+		  	string str(pw->pw_name);
+			return str;
+		}
+	}
+	
+	return "???";
+}	
+	
\ No newline at end of file
diff --git a/src/libMetview/Path.h b/src/libMetview/Path.h
index 842c81a..c0a784c 100644
--- a/src/libMetview/Path.h
+++ b/src/libMetview/Path.h
@@ -65,6 +65,7 @@ public:
 	void symlink(const Path&) const;
 
 	set<string> files() const;
+	set<string> directories() const;
 
 	bool exists() const;
 
@@ -78,6 +79,8 @@ public:
 	off_t sizeInBytes() const;
 
 	void makeWritableByUser() const;
+	string permissions() const;
+	string owner() const;
 
 // -- Overridden methods
 	// None
diff --git a/src/libMvMotif/Makefile.in b/src/libMvMotif/Makefile.in
index 900f7c2..6f1ad44 100644
--- a/src/libMvMotif/Makefile.in
+++ b/src/libMvMotif/Makefile.in
@@ -145,6 +145,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -160,6 +161,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -186,11 +189,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/libMvNetCDF/Makefile.in b/src/libMvNetCDF/Makefile.in
index eec53c9..41fff63 100644
--- a/src/libMvNetCDF/Makefile.in
+++ b/src/libMvNetCDF/Makefile.in
@@ -134,6 +134,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -149,6 +150,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -175,11 +178,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/libMvNetCDF/MvNetCDF.cc b/src/libMvNetCDF/MvNetCDF.cc
index 031099d..1006b52 100644
--- a/src/libMvNetCDF/MvNetCDF.cc
+++ b/src/libMvNetCDF/MvNetCDF.cc
@@ -604,7 +604,7 @@ MvNcVar* MvNetCDF::addVariable(const string &name,NcType type,
     }
 
   NcDim *dim[5];
-  int num;
+  vector<long>::size_type num;
 
   // Add dimensions
   for (num = 0; num < dimsize.size(); num++)
diff --git a/src/libMvNetCDF/MvNetCDF.h b/src/libMvNetCDF/MvNetCDF.h
index 974fb36..2bc23ff 100644
--- a/src/libMvNetCDF/MvNetCDF.h
+++ b/src/libMvNetCDF/MvNetCDF.h
@@ -299,7 +299,7 @@ template <class T>  NcBool get( vector<T>& vals, const long* counts, long nvals1
   NcBool put(const vector<T>& vecvals,long c0=0,long c1=0,long c2=0,long c3=0,long c4=0)
   {
     T* vals = new T[vecvals.size()];
-    for ( int i = 0; i < vecvals.size(); i++ )
+    for ( typename vector<T>::size_type i = 0; i < vecvals.size(); i++ )
       vals[i] = vecvals[i];
     
     bool retVal = ncVar_->put(vals,c0,c1,c2,c3,c4);
diff --git a/src/libMvQtGui/Makefile.am b/src/libMvQtGui/Makefile.am
index 4aae4e4..abb142b 100755
--- a/src/libMvQtGui/Makefile.am
+++ b/src/libMvQtGui/Makefile.am
@@ -8,9 +8,10 @@ lib_libMvQtGui_a_SOURCES = MvQAbout.cc \
 		MvQX11Application.cc \
 		MvQApplication.cc \
 		MvQCheckBoxCombo.cc \
+                MvQComboLine.cc \
 		MvQConfigDialog.cc \
 		MvQDragDrop.cc \
-	   	MvQFileBrowserBase.cc \
+                MvQFileDialog.cc \
 		MvQFileInfoLabel.cc \
 		MvQGui.cc \
 		MvQGuiItem.cc \
@@ -21,18 +22,22 @@ lib_libMvQtGui_a_SOURCES = MvQAbout.cc \
 		MvQKeyFilterModel.cc \
 		MvQKeyProfileModel.cc \
 		MvQKeyProfileTree.cc \
+		MvQLineEdit.cc \
 		MvQLogBrowser.cc \
-		MvQMacroSelector.cc \
+                MvQMailDialog.cc \
 		MvQMainWindow.cc \
+                MvQPixmapCache.cc \
 		MvQPlainTextEditSearchLine.cc \
 		MvQProfileWidget.cc \
 		MvQProfileView.cc \
 		MvQRangeWidget.cc \
 		MvQScmDataWidget.cc \
 		MvQScmModel.cc \
-        MvQSearchLinePanel.cc \
-        MvQService.cc \
+		MvQSearchLinePanel.cc \
+                MvQService.cc \
+                MvQSlider.cc \
 		MvQStackedEditor.cc \
+                MvQStationsWidget.cc \
 		MvQTabManager.cc \
 		MvQTextDialog.cc \
 		MvQTextEditSearchLine.cc \
@@ -45,9 +50,10 @@ lib_libMvQtGui_a_SOURCES = MvQAbout.cc \
 	MvQAbstractSearchLine.h \
 		MvQApplication.h \
         MvQCheckBoxCombo.h \
+        MvQComboLine.h \
         MvQConfigDialog.h \
 	MvQDragDrop.h \
-        MvQFileBrowserBase.h \
+        MvQFileDialog.h \
         MvQFileInfoLabel.h \
 		MvQGui.h \
         MvQGuiItem.h \
@@ -58,11 +64,13 @@ lib_libMvQtGui_a_SOURCES = MvQAbout.cc \
         MvQKeyFilterModel.h \
         MvQKeyProfileModel.h \
 		MvQKeyProfileTree.h \
+        MvQLineEdit.h \
         MvQLogBrowser.h \
-        MvQMacroSelector.h \
+        MvQMailDialog.h \
         MvQMainWindow.h \
         MvQMemoryWidget.h \
         MvQMenuItem.h \
+        MvQPixmapCache.h \
         MvQPlainTextEditSearchLine.h \
 	    MvQProfileView.h \
 	    MvQProfileWidget.h \
@@ -71,7 +79,9 @@ lib_libMvQtGui_a_SOURCES = MvQAbout.cc \
 	    MvQScmModel.h \
         MvQSearchLinePanel.h \
 	MvQService.h \
+        MvQSlider.h \
         MvQStackedEditor.h \
+        MvQStationsWidget.h \
         MvQTabManager.h \
 	MvQTextDialog.h \
         MvQTextEditSearchLine.h \
@@ -80,16 +90,22 @@ lib_libMvQtGui_a_SOURCES = MvQAbout.cc \
         MvQX11Application.h
 
 
+if METVIEW_NEW_GUI
+lib_libMvQtGui_a_SOURCES += MvQWebViewSearchLine.cc MvQWebViewSearchLine.h
+endif
+
 nodist_lib_libMvQtGui_a_SOURCES = MvQAbstractMessageExaminer.moc.cpp \
 				  MvQAbstractSearchLine.moc.cpp \
 				  MvQX11Application.moc.cpp MvQApplication.moc.cpp MvQCheckBoxCombo.moc.cpp \
-				  MvQConfigDialog.moc.cpp MvQFileBrowserBase.moc.cpp \
+				  MvQComboLine.moc.cpp \
+                                  MvQConfigDialog.moc.cpp \
 				  MvQGuiItem.moc.cpp MvQGui.moc.cpp \
  				  MvQKeyDialog.moc.cpp MvQKeyMimeData.moc.cpp \
 				  MvQKeyModel.moc.cpp MvQKeyFilterModel.moc.cpp MvQKeyProfileModel.moc.cpp \
 				  MvQKeyProfileTree.moc.cpp \
-				  MvQMacroSelector.moc.cpp \
-				  MvQProfileView.moc.cpp \
+				  MvQLineEdit.moc.cpp \
+				  MvQMailDialog.moc.cpp \
+                                  MvQProfileView.moc.cpp \
 				  MvQProfileWidget.moc.cpp \
 				  MvQRangeWidget.moc.cpp \
                                   MvQPlainTextEditSearchLine.moc.cpp \
@@ -98,37 +114,41 @@ nodist_lib_libMvQtGui_a_SOURCES = MvQAbstractMessageExaminer.moc.cpp \
 				  MvQSearchLinePanel.moc.cpp \
 				  MvQService.moc.cpp \
                                   MvQStackedEditor.moc.cpp \
-				  MvQTabManager.moc.cpp MvQTextEditSearchLine.moc.cpp \
+                                  MvQStationsWidget.moc.cpp \
+				  MvQTabManager.moc.cpp MvQTextEditSearchLine.moc.cpp  MvQWebViewSearchLine.moc.cpp\
 				  MvQTreeView.moc.cpp \
 				  MvQTreeViewSearchLine.moc.cpp  \
  				  MvQMemoryWidget.moc.cpp \
-				  examiner.qrc.cpp find.qrc.cpp keyDialog.qrc.cpp window.qrc.cpp
+				  edit.qrc.cpp examiner.qrc.cpp find.qrc.cpp keyDialog.qrc.cpp mail.qrc.cpp window.qrc.cpp
                                 
-lib_libMvQtGui_a_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS) -I${MAGPLUS_HOME}/include/magics -I../libMvQtUtil -I../uPlot
-lib_libMvQtGui_a_CPPFLAGS = $(QT_CPPFLAGS) $(MAGPLUS_CPPFLAGS) $(AM_CPPFLAGS)
+lib_libMvQtGui_a_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS)  -I../libMvQtUtil -I../uPlot
+lib_libMvQtGui_a_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS)
 BUILT_SOURCES = lib \
 		MvQAbstractMessageExaminer.moc.cpp \
 		MvQAbstractSearchLine.moc.cpp \
 		MvQX11Application.moc.cpp MvQApplication.moc.cpp MvQCheckBoxCombo.moc.cpp  \
-		MvQFileBrowserBase.moc.cpp \
-		MvQGuiItem.moc.cpp MvQGui.moc.cpp \
+		MvQComboLine.moc.cpp \
+                MvQGuiItem.moc.cpp MvQGui.moc.cpp \
 		MvQKeyMimeData.moc.cpp \
 		MvQKeyModel.moc.cpp \
 		MvQKeyDialog.moc.cpp \
 		MvQKeyFilterModel.moc.cpp\
 		MvQKeyProfileModel.moc.cpp \
 		MvQKeyProfileTree.moc.cpp \
-		MvQMacroSelector.moc.cpp \
-		MvQProfileView.moc.cpp \
+		MvQLineEdit.moc.cpp \
+                MvQMailDialog.moc.cpp \
+                MvQProfileView.moc.cpp \
 		MvQProfileWidget.moc.cpp \
 		MvQRangeWidget.moc.cpp \
         MvQScmDataWidget.moc.cpp \
 	    MvQScmModel.moc.cpp \
 	    MvQService.moc.cpp \
+                MvQStationsWidget.moc.cpp \
                 MvQTabManager.moc.cpp MvQTreeView.moc.cpp \
 		MvQTextEditSearchLine.moc.cpp \
+		MvQWebViewSearchLine.moc.cpp \
 		MvQMemoryWidget.moc.cpp \
-		examiner.qrc.cpp find.qrc.cpp keyDialog.qrc.cpp window.qrc.cpp
+		edit.qrc.cpp examiner.qrc.cpp find.qrc.cpp keyDialog.qrc.cpp mail.qrc.cpp window.qrc.cpp
 
 
 if METVIEW_ODB
@@ -149,4 +169,4 @@ lib:
 clean:
 	-rm -f *.o *.moc.cpp *.qrc.cpp	
 
-EXTRA_DIST = examiner.qrc find.qrc keyDialog.qrc window.qrc
+EXTRA_DIST = edit.qrc examiner.qrc find.qrc keyDialog.qrc mail.qrc.cpp window.qrc
diff --git a/src/libMvQtGui/Makefile.in b/src/libMvQtGui/Makefile.in
index 833e2cc..c24dbd3 100644
--- a/src/libMvQtGui/Makefile.in
+++ b/src/libMvQtGui/Makefile.in
@@ -72,10 +72,11 @@ host_triplet = @host@
 target_triplet = @target@
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 	$(top_srcdir)/aux_build/autotroll.mk
- at METVIEW_ODB_TRUE@am__append_1 = MvQOdbModel.cc MvQOdbDataWidget.cc MvQOdbModel.h MvQOdbDataWidget.h
- at METVIEW_ODB_TRUE@am__append_2 = MvQOdbDataWidget.moc.cpp
- at METVIEW_ODB_TRUE@am__append_3 = $(ODB_CPPFLAGS)
- at METVIEW_ODB_TRUE@am__append_4 = MvQOdbDataWidget.moc.cpp
+ at METVIEW_NEW_GUI_TRUE@am__append_1 = MvQWebViewSearchLine.cc MvQWebViewSearchLine.h
+ at METVIEW_ODB_TRUE@am__append_2 = MvQOdbModel.cc MvQOdbDataWidget.cc MvQOdbModel.h MvQOdbDataWidget.h
+ at METVIEW_ODB_TRUE@am__append_3 = MvQOdbDataWidget.moc.cpp
+ at METVIEW_ODB_TRUE@am__append_4 = $(ODB_CPPFLAGS)
+ at METVIEW_ODB_TRUE@am__append_5 = MvQOdbDataWidget.moc.cpp
 subdir = src/libMvQtGui
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
@@ -99,32 +100,36 @@ lib_libMvQtGui_a_LIBADD =
 am__lib_libMvQtGui_a_SOURCES_DIST = MvQAbout.cc \
 	MvQAbstractMessageExaminer.cc MvQAbstractSearchLine.cc \
 	MvQX11Application.cc MvQApplication.cc MvQCheckBoxCombo.cc \
-	MvQConfigDialog.cc MvQDragDrop.cc MvQFileBrowserBase.cc \
-	MvQFileInfoLabel.cc MvQGui.cc MvQGuiItem.cc MvQHighlighter.cc \
-	MvQKeyMimeData.cc MvQKeyModel.cc MvQKeyDialog.cc \
-	MvQKeyFilterModel.cc MvQKeyProfileModel.cc \
-	MvQKeyProfileTree.cc MvQLogBrowser.cc MvQMacroSelector.cc \
-	MvQMainWindow.cc MvQPlainTextEditSearchLine.cc \
-	MvQProfileWidget.cc MvQProfileView.cc MvQRangeWidget.cc \
-	MvQScmDataWidget.cc MvQScmModel.cc MvQSearchLinePanel.cc \
-	MvQService.cc MvQStackedEditor.cc MvQTabManager.cc \
-	MvQTextDialog.cc MvQTextEditSearchLine.cc MvQTreeView.cc \
-	MvQTreeViewSearchLine.cc MvQMemoryWidget.cc GLWidget.h \
-	MvQAbout.h MvQAbstractMessageExaminer.h \
+	MvQComboLine.cc MvQConfigDialog.cc MvQDragDrop.cc \
+	MvQFileDialog.cc MvQFileInfoLabel.cc MvQGui.cc MvQGuiItem.cc \
+	MvQHighlighter.cc MvQKeyMimeData.cc MvQKeyModel.cc \
+	MvQKeyDialog.cc MvQKeyFilterModel.cc MvQKeyProfileModel.cc \
+	MvQKeyProfileTree.cc MvQLineEdit.cc MvQLogBrowser.cc \
+	MvQMailDialog.cc MvQMainWindow.cc MvQPixmapCache.cc \
+	MvQPlainTextEditSearchLine.cc MvQProfileWidget.cc \
+	MvQProfileView.cc MvQRangeWidget.cc MvQScmDataWidget.cc \
+	MvQScmModel.cc MvQSearchLinePanel.cc MvQService.cc \
+	MvQSlider.cc MvQStackedEditor.cc MvQStationsWidget.cc \
+	MvQTabManager.cc MvQTextDialog.cc MvQTextEditSearchLine.cc \
+	MvQTreeView.cc MvQTreeViewSearchLine.cc MvQMemoryWidget.cc \
+	GLWidget.h MvQAbout.h MvQAbstractMessageExaminer.h \
 	MvQAbstractSearchLine.h MvQApplication.h MvQCheckBoxCombo.h \
-	MvQConfigDialog.h MvQDragDrop.h MvQFileBrowserBase.h \
+	MvQComboLine.h MvQConfigDialog.h MvQDragDrop.h MvQFileDialog.h \
 	MvQFileInfoLabel.h MvQGui.h MvQGuiItem.h MvQHighlighter.h \
 	MvQKeyMimeData.h MvQKeyModel.h MvQKeyDialog.h \
 	MvQKeyFilterModel.h MvQKeyProfileModel.h MvQKeyProfileTree.h \
-	MvQLogBrowser.h MvQMacroSelector.h MvQMainWindow.h \
-	MvQMemoryWidget.h MvQMenuItem.h MvQPlainTextEditSearchLine.h \
-	MvQProfileView.h MvQProfileWidget.h MvQRangeWidget.h \
-	MvQScmDataWidget.h MvQScmModel.h MvQSearchLinePanel.h \
-	MvQService.h MvQStackedEditor.h MvQTabManager.h \
+	MvQLineEdit.h MvQLogBrowser.h MvQMailDialog.h MvQMainWindow.h \
+	MvQMemoryWidget.h MvQMenuItem.h MvQPixmapCache.h \
+	MvQPlainTextEditSearchLine.h MvQProfileView.h \
+	MvQProfileWidget.h MvQRangeWidget.h MvQScmDataWidget.h \
+	MvQScmModel.h MvQSearchLinePanel.h MvQService.h MvQSlider.h \
+	MvQStackedEditor.h MvQStationsWidget.h MvQTabManager.h \
 	MvQTextDialog.h MvQTextEditSearchLine.h MvQTreeView.h \
-	MvQTreeViewSearchLine.h MvQX11Application.h MvQOdbModel.cc \
+	MvQTreeViewSearchLine.h MvQX11Application.h \
+	MvQWebViewSearchLine.cc MvQWebViewSearchLine.h MvQOdbModel.cc \
 	MvQOdbDataWidget.cc MvQOdbModel.h MvQOdbDataWidget.h
- at METVIEW_ODB_TRUE@am__objects_1 =  \
+ at METVIEW_NEW_GUI_TRUE@am__objects_1 = lib_libMvQtGui_a-MvQWebViewSearchLine.$(OBJEXT)
+ at METVIEW_ODB_TRUE@am__objects_2 =  \
 @METVIEW_ODB_TRUE@	lib_libMvQtGui_a-MvQOdbModel.$(OBJEXT) \
 @METVIEW_ODB_TRUE@	lib_libMvQtGui_a-MvQOdbDataWidget.$(OBJEXT)
 am_lib_libMvQtGui_a_OBJECTS = lib_libMvQtGui_a-MvQAbout.$(OBJEXT) \
@@ -133,9 +138,10 @@ am_lib_libMvQtGui_a_OBJECTS = lib_libMvQtGui_a-MvQAbout.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQX11Application.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQApplication.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQCheckBoxCombo.$(OBJEXT) \
+	lib_libMvQtGui_a-MvQComboLine.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQConfigDialog.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQDragDrop.$(OBJEXT) \
-	lib_libMvQtGui_a-MvQFileBrowserBase.$(OBJEXT) \
+	lib_libMvQtGui_a-MvQFileDialog.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQFileInfoLabel.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQGui.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQGuiItem.$(OBJEXT) \
@@ -146,9 +152,11 @@ am_lib_libMvQtGui_a_OBJECTS = lib_libMvQtGui_a-MvQAbout.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQKeyFilterModel.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQKeyProfileModel.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQKeyProfileTree.$(OBJEXT) \
+	lib_libMvQtGui_a-MvQLineEdit.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQLogBrowser.$(OBJEXT) \
-	lib_libMvQtGui_a-MvQMacroSelector.$(OBJEXT) \
+	lib_libMvQtGui_a-MvQMailDialog.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQMainWindow.$(OBJEXT) \
+	lib_libMvQtGui_a-MvQPixmapCache.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQPlainTextEditSearchLine.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQProfileWidget.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQProfileView.$(OBJEXT) \
@@ -157,22 +165,25 @@ am_lib_libMvQtGui_a_OBJECTS = lib_libMvQtGui_a-MvQAbout.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQScmModel.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQSearchLinePanel.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQService.$(OBJEXT) \
+	lib_libMvQtGui_a-MvQSlider.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQStackedEditor.$(OBJEXT) \
+	lib_libMvQtGui_a-MvQStationsWidget.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQTabManager.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQTextDialog.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQTextEditSearchLine.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQTreeView.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQTreeViewSearchLine.$(OBJEXT) \
-	lib_libMvQtGui_a-MvQMemoryWidget.$(OBJEXT) $(am__objects_1)
- at METVIEW_ODB_TRUE@am__objects_2 = lib_libMvQtGui_a-MvQOdbDataWidget.moc.$(OBJEXT)
+	lib_libMvQtGui_a-MvQMemoryWidget.$(OBJEXT) $(am__objects_1) \
+	$(am__objects_2)
+ at METVIEW_ODB_TRUE@am__objects_3 = lib_libMvQtGui_a-MvQOdbDataWidget.moc.$(OBJEXT)
 nodist_lib_libMvQtGui_a_OBJECTS =  \
 	lib_libMvQtGui_a-MvQAbstractMessageExaminer.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQAbstractSearchLine.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQX11Application.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQApplication.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQCheckBoxCombo.moc.$(OBJEXT) \
+	lib_libMvQtGui_a-MvQComboLine.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQConfigDialog.moc.$(OBJEXT) \
-	lib_libMvQtGui_a-MvQFileBrowserBase.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQGuiItem.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQGui.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQKeyDialog.moc.$(OBJEXT) \
@@ -181,7 +192,8 @@ nodist_lib_libMvQtGui_a_OBJECTS =  \
 	lib_libMvQtGui_a-MvQKeyFilterModel.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQKeyProfileModel.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQKeyProfileTree.moc.$(OBJEXT) \
-	lib_libMvQtGui_a-MvQMacroSelector.moc.$(OBJEXT) \
+	lib_libMvQtGui_a-MvQLineEdit.moc.$(OBJEXT) \
+	lib_libMvQtGui_a-MvQMailDialog.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQProfileView.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQProfileWidget.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQRangeWidget.moc.$(OBJEXT) \
@@ -191,15 +203,19 @@ nodist_lib_libMvQtGui_a_OBJECTS =  \
 	lib_libMvQtGui_a-MvQSearchLinePanel.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQService.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQStackedEditor.moc.$(OBJEXT) \
+	lib_libMvQtGui_a-MvQStationsWidget.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQTabManager.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQTextEditSearchLine.moc.$(OBJEXT) \
+	lib_libMvQtGui_a-MvQWebViewSearchLine.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQTreeView.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQTreeViewSearchLine.moc.$(OBJEXT) \
 	lib_libMvQtGui_a-MvQMemoryWidget.moc.$(OBJEXT) \
+	lib_libMvQtGui_a-edit.qrc.$(OBJEXT) \
 	lib_libMvQtGui_a-examiner.qrc.$(OBJEXT) \
 	lib_libMvQtGui_a-find.qrc.$(OBJEXT) \
 	lib_libMvQtGui_a-keyDialog.qrc.$(OBJEXT) \
-	lib_libMvQtGui_a-window.qrc.$(OBJEXT) $(am__objects_2)
+	lib_libMvQtGui_a-mail.qrc.$(OBJEXT) \
+	lib_libMvQtGui_a-window.qrc.$(OBJEXT) $(am__objects_3)
 lib_libMvQtGui_a_OBJECTS = $(am_lib_libMvQtGui_a_OBJECTS) \
 	$(nodist_lib_libMvQtGui_a_OBJECTS)
 am__dirstamp = $(am__leading_dot)dirstamp
@@ -279,6 +295,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -294,6 +311,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -320,11 +339,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -462,66 +484,73 @@ DISTCLEANFILES = $(BUILT_SOURCES)
 noinst_LIBRARIES = lib/libMvQtGui.a
 lib_libMvQtGui_a_SOURCES = MvQAbout.cc MvQAbstractMessageExaminer.cc \
 	MvQAbstractSearchLine.cc MvQX11Application.cc \
-	MvQApplication.cc MvQCheckBoxCombo.cc MvQConfigDialog.cc \
-	MvQDragDrop.cc MvQFileBrowserBase.cc MvQFileInfoLabel.cc \
-	MvQGui.cc MvQGuiItem.cc MvQHighlighter.cc MvQKeyMimeData.cc \
-	MvQKeyModel.cc MvQKeyDialog.cc MvQKeyFilterModel.cc \
-	MvQKeyProfileModel.cc MvQKeyProfileTree.cc MvQLogBrowser.cc \
-	MvQMacroSelector.cc MvQMainWindow.cc \
+	MvQApplication.cc MvQCheckBoxCombo.cc MvQComboLine.cc \
+	MvQConfigDialog.cc MvQDragDrop.cc MvQFileDialog.cc \
+	MvQFileInfoLabel.cc MvQGui.cc MvQGuiItem.cc MvQHighlighter.cc \
+	MvQKeyMimeData.cc MvQKeyModel.cc MvQKeyDialog.cc \
+	MvQKeyFilterModel.cc MvQKeyProfileModel.cc \
+	MvQKeyProfileTree.cc MvQLineEdit.cc MvQLogBrowser.cc \
+	MvQMailDialog.cc MvQMainWindow.cc MvQPixmapCache.cc \
 	MvQPlainTextEditSearchLine.cc MvQProfileWidget.cc \
 	MvQProfileView.cc MvQRangeWidget.cc MvQScmDataWidget.cc \
 	MvQScmModel.cc MvQSearchLinePanel.cc MvQService.cc \
-	MvQStackedEditor.cc MvQTabManager.cc MvQTextDialog.cc \
-	MvQTextEditSearchLine.cc MvQTreeView.cc \
-	MvQTreeViewSearchLine.cc MvQMemoryWidget.cc GLWidget.h \
-	MvQAbout.h MvQAbstractMessageExaminer.h \
+	MvQSlider.cc MvQStackedEditor.cc MvQStationsWidget.cc \
+	MvQTabManager.cc MvQTextDialog.cc MvQTextEditSearchLine.cc \
+	MvQTreeView.cc MvQTreeViewSearchLine.cc MvQMemoryWidget.cc \
+	GLWidget.h MvQAbout.h MvQAbstractMessageExaminer.h \
 	MvQAbstractSearchLine.h MvQApplication.h MvQCheckBoxCombo.h \
-	MvQConfigDialog.h MvQDragDrop.h MvQFileBrowserBase.h \
+	MvQComboLine.h MvQConfigDialog.h MvQDragDrop.h MvQFileDialog.h \
 	MvQFileInfoLabel.h MvQGui.h MvQGuiItem.h MvQHighlighter.h \
 	MvQKeyMimeData.h MvQKeyModel.h MvQKeyDialog.h \
 	MvQKeyFilterModel.h MvQKeyProfileModel.h MvQKeyProfileTree.h \
-	MvQLogBrowser.h MvQMacroSelector.h MvQMainWindow.h \
-	MvQMemoryWidget.h MvQMenuItem.h MvQPlainTextEditSearchLine.h \
-	MvQProfileView.h MvQProfileWidget.h MvQRangeWidget.h \
-	MvQScmDataWidget.h MvQScmModel.h MvQSearchLinePanel.h \
-	MvQService.h MvQStackedEditor.h MvQTabManager.h \
+	MvQLineEdit.h MvQLogBrowser.h MvQMailDialog.h MvQMainWindow.h \
+	MvQMemoryWidget.h MvQMenuItem.h MvQPixmapCache.h \
+	MvQPlainTextEditSearchLine.h MvQProfileView.h \
+	MvQProfileWidget.h MvQRangeWidget.h MvQScmDataWidget.h \
+	MvQScmModel.h MvQSearchLinePanel.h MvQService.h MvQSlider.h \
+	MvQStackedEditor.h MvQStationsWidget.h MvQTabManager.h \
 	MvQTextDialog.h MvQTextEditSearchLine.h MvQTreeView.h \
-	MvQTreeViewSearchLine.h MvQX11Application.h $(am__append_1)
+	MvQTreeViewSearchLine.h MvQX11Application.h $(am__append_1) \
+	$(am__append_2)
 nodist_lib_libMvQtGui_a_SOURCES = MvQAbstractMessageExaminer.moc.cpp \
 	MvQAbstractSearchLine.moc.cpp MvQX11Application.moc.cpp \
 	MvQApplication.moc.cpp MvQCheckBoxCombo.moc.cpp \
-	MvQConfigDialog.moc.cpp MvQFileBrowserBase.moc.cpp \
+	MvQComboLine.moc.cpp MvQConfigDialog.moc.cpp \
 	MvQGuiItem.moc.cpp MvQGui.moc.cpp MvQKeyDialog.moc.cpp \
 	MvQKeyMimeData.moc.cpp MvQKeyModel.moc.cpp \
 	MvQKeyFilterModel.moc.cpp MvQKeyProfileModel.moc.cpp \
-	MvQKeyProfileTree.moc.cpp MvQMacroSelector.moc.cpp \
-	MvQProfileView.moc.cpp MvQProfileWidget.moc.cpp \
-	MvQRangeWidget.moc.cpp MvQPlainTextEditSearchLine.moc.cpp \
-	MvQScmDataWidget.moc.cpp MvQScmModel.moc.cpp \
-	MvQSearchLinePanel.moc.cpp MvQService.moc.cpp \
-	MvQStackedEditor.moc.cpp MvQTabManager.moc.cpp \
-	MvQTextEditSearchLine.moc.cpp MvQTreeView.moc.cpp \
-	MvQTreeViewSearchLine.moc.cpp MvQMemoryWidget.moc.cpp \
-	examiner.qrc.cpp find.qrc.cpp keyDialog.qrc.cpp window.qrc.cpp \
-	$(am__append_2)
-lib_libMvQtGui_a_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS) -I${MAGPLUS_HOME}/include/magics -I../libMvQtUtil -I../uPlot
-lib_libMvQtGui_a_CPPFLAGS = $(QT_CPPFLAGS) $(MAGPLUS_CPPFLAGS) \
-	$(AM_CPPFLAGS) $(am__append_3)
+	MvQKeyProfileTree.moc.cpp MvQLineEdit.moc.cpp \
+	MvQMailDialog.moc.cpp MvQProfileView.moc.cpp \
+	MvQProfileWidget.moc.cpp MvQRangeWidget.moc.cpp \
+	MvQPlainTextEditSearchLine.moc.cpp MvQScmDataWidget.moc.cpp \
+	MvQScmModel.moc.cpp MvQSearchLinePanel.moc.cpp \
+	MvQService.moc.cpp MvQStackedEditor.moc.cpp \
+	MvQStationsWidget.moc.cpp MvQTabManager.moc.cpp \
+	MvQTextEditSearchLine.moc.cpp MvQWebViewSearchLine.moc.cpp \
+	MvQTreeView.moc.cpp MvQTreeViewSearchLine.moc.cpp \
+	MvQMemoryWidget.moc.cpp edit.qrc.cpp examiner.qrc.cpp \
+	find.qrc.cpp keyDialog.qrc.cpp mail.qrc.cpp window.qrc.cpp \
+	$(am__append_3)
+lib_libMvQtGui_a_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS)  -I../libMvQtUtil -I../uPlot
+lib_libMvQtGui_a_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) \
+	$(am__append_4)
 BUILT_SOURCES = lib MvQAbstractMessageExaminer.moc.cpp \
 	MvQAbstractSearchLine.moc.cpp MvQX11Application.moc.cpp \
 	MvQApplication.moc.cpp MvQCheckBoxCombo.moc.cpp \
-	MvQFileBrowserBase.moc.cpp MvQGuiItem.moc.cpp MvQGui.moc.cpp \
+	MvQComboLine.moc.cpp MvQGuiItem.moc.cpp MvQGui.moc.cpp \
 	MvQKeyMimeData.moc.cpp MvQKeyModel.moc.cpp \
 	MvQKeyDialog.moc.cpp MvQKeyFilterModel.moc.cpp \
 	MvQKeyProfileModel.moc.cpp MvQKeyProfileTree.moc.cpp \
-	MvQMacroSelector.moc.cpp MvQProfileView.moc.cpp \
-	MvQProfileWidget.moc.cpp MvQRangeWidget.moc.cpp \
-	MvQScmDataWidget.moc.cpp MvQScmModel.moc.cpp \
-	MvQService.moc.cpp MvQTabManager.moc.cpp MvQTreeView.moc.cpp \
-	MvQTextEditSearchLine.moc.cpp MvQMemoryWidget.moc.cpp \
-	examiner.qrc.cpp find.qrc.cpp keyDialog.qrc.cpp window.qrc.cpp \
-	$(am__append_4)
-EXTRA_DIST = examiner.qrc find.qrc keyDialog.qrc window.qrc
+	MvQLineEdit.moc.cpp MvQMailDialog.moc.cpp \
+	MvQProfileView.moc.cpp MvQProfileWidget.moc.cpp \
+	MvQRangeWidget.moc.cpp MvQScmDataWidget.moc.cpp \
+	MvQScmModel.moc.cpp MvQService.moc.cpp \
+	MvQStationsWidget.moc.cpp MvQTabManager.moc.cpp \
+	MvQTreeView.moc.cpp MvQTextEditSearchLine.moc.cpp \
+	MvQWebViewSearchLine.moc.cpp MvQMemoryWidget.moc.cpp \
+	edit.qrc.cpp examiner.qrc.cpp find.qrc.cpp keyDialog.qrc.cpp \
+	mail.qrc.cpp window.qrc.cpp $(am__append_5)
+EXTRA_DIST = edit.qrc examiner.qrc find.qrc keyDialog.qrc mail.qrc.cpp window.qrc
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
@@ -583,11 +612,12 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQApplication.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQCheckBoxCombo.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQCheckBoxCombo.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQConfigDialog.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQConfigDialog.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQDragDrop.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQFileDialog.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQFileInfoLabel.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQGui.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQGui.moc.Po at am__quote@
@@ -606,15 +636,18 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQKeyProfileModel.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQKeyProfileTree.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQKeyProfileTree.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQLogBrowser.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQMainWindow.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQMemoryWidget.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQMemoryWidget.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQOdbDataWidget.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQOdbDataWidget.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQOdbModel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQPixmapCache.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQPlainTextEditSearchLine.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQPlainTextEditSearchLine.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQProfileView.Po at am__quote@
@@ -631,8 +664,11 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQSearchLinePanel.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQService.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQService.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQSlider.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQStackedEditor.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQStackedEditor.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQTabManager.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQTabManager.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQTextDialog.Po at am__quote@
@@ -642,11 +678,15 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQTreeView.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQTreeViewSearchLine.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQTreeViewSearchLine.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQX11Application.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-MvQX11Application.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-edit.qrc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-examiner.qrc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-find.qrc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-keyDialog.qrc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-mail.qrc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtGui_a-window.qrc.Po at am__quote@
 
 .cc.o:
@@ -769,6 +809,22 @@ lib_libMvQtGui_a-MvQCheckBoxCombo.obj: MvQCheckBoxCombo.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQCheckBoxCombo.obj `if test -f 'MvQCheckBoxCombo.cc'; then $(CYGPATH_W) 'MvQCheckBoxCombo.cc'; else $(CYGPATH_W) '$(srcdir)/MvQCheckBoxCombo.cc'; fi`
 
+lib_libMvQtGui_a-MvQComboLine.o: MvQComboLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQComboLine.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.Tpo -c -o lib_libMvQtGui_a-MvQComboLine.o `test -f 'MvQComboLine.cc' || echo '$(srcdir)/'`MvQComboLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQComboLine.cc' object='lib_libMvQtGui_a-MvQComboLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQComboLine.o `test -f 'MvQComboLine.cc' || echo '$(srcdir)/'`MvQComboLine.cc
+
+lib_libMvQtGui_a-MvQComboLine.obj: MvQComboLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQComboLine.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.Tpo -c -o lib_libMvQtGui_a-MvQComboLine.obj `if test -f 'MvQComboLine.cc'; then $(CYGPATH_W) 'MvQComboLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQComboLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQComboLine.cc' object='lib_libMvQtGui_a-MvQComboLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQComboLine.obj `if test -f 'MvQComboLine.cc'; then $(CYGPATH_W) 'MvQComboLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQComboLine.cc'; fi`
+
 lib_libMvQtGui_a-MvQConfigDialog.o: MvQConfigDialog.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQConfigDialog.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQConfigDialog.Tpo -c -o lib_libMvQtGui_a-MvQConfigDialog.o `test -f 'MvQConfigDialog.cc' || echo '$(srcdir)/'`MvQConfigDialog.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQConfigDialog.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQConfigDialog.Po
@@ -801,21 +857,21 @@ lib_libMvQtGui_a-MvQDragDrop.obj: MvQDragDrop.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQDragDrop.obj `if test -f 'MvQDragDrop.cc'; then $(CYGPATH_W) 'MvQDragDrop.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDragDrop.cc'; fi`
 
-lib_libMvQtGui_a-MvQFileBrowserBase.o: MvQFileBrowserBase.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQFileBrowserBase.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.Tpo -c -o lib_libMvQtGui_a-MvQFileBrowserBase.o `test -f 'MvQFileBrowserBase.cc' || echo '$(srcdir)/'`MvQFileBrowserBase.cc
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.Po
+lib_libMvQtGui_a-MvQFileDialog.o: MvQFileDialog.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQFileDialog.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQFileDialog.Tpo -c -o lib_libMvQtGui_a-MvQFileDialog.o `test -f 'MvQFileDialog.cc' || echo '$(srcdir)/'`MvQFileDialog.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQFileDialog.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQFileDialog.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileBrowserBase.cc' object='lib_libMvQtGui_a-MvQFileBrowserBase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileDialog.cc' object='lib_libMvQtGui_a-MvQFileDialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQFileBrowserBase.o `test -f 'MvQFileBrowserBase.cc' || echo '$(srcdir)/'`MvQFileBrowserBase.cc
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQFileDialog.o `test -f 'MvQFileDialog.cc' || echo '$(srcdir)/'`MvQFileDialog.cc
 
-lib_libMvQtGui_a-MvQFileBrowserBase.obj: MvQFileBrowserBase.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQFileBrowserBase.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.Tpo -c -o lib_libMvQtGui_a-MvQFileBrowserBase.obj `if test -f 'MvQFileBrowserBase.cc'; then $(CYGPATH_W) 'MvQFileBrowserBase.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFileBrowserBase.cc'; fi`
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.Po
+lib_libMvQtGui_a-MvQFileDialog.obj: MvQFileDialog.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQFileDialog.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQFileDialog.Tpo -c -o lib_libMvQtGui_a-MvQFileDialog.obj `if test -f 'MvQFileDialog.cc'; then $(CYGPATH_W) 'MvQFileDialog.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFileDialog.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQFileDialog.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQFileDialog.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileBrowserBase.cc' object='lib_libMvQtGui_a-MvQFileBrowserBase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileDialog.cc' object='lib_libMvQtGui_a-MvQFileDialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQFileBrowserBase.obj `if test -f 'MvQFileBrowserBase.cc'; then $(CYGPATH_W) 'MvQFileBrowserBase.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFileBrowserBase.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQFileDialog.obj `if test -f 'MvQFileDialog.cc'; then $(CYGPATH_W) 'MvQFileDialog.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFileDialog.cc'; fi`
 
 lib_libMvQtGui_a-MvQFileInfoLabel.o: MvQFileInfoLabel.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQFileInfoLabel.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQFileInfoLabel.Tpo -c -o lib_libMvQtGui_a-MvQFileInfoLabel.o `test -f 'MvQFileInfoLabel.cc' || echo '$(srcdir)/'`MvQFileInfoLabel.cc
@@ -977,6 +1033,22 @@ lib_libMvQtGui_a-MvQKeyProfileTree.obj: MvQKeyProfileTree.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQKeyProfileTree.obj `if test -f 'MvQKeyProfileTree.cc'; then $(CYGPATH_W) 'MvQKeyProfileTree.cc'; else $(CYGPATH_W) '$(srcdir)/MvQKeyProfileTree.cc'; fi`
 
+lib_libMvQtGui_a-MvQLineEdit.o: MvQLineEdit.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQLineEdit.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.Tpo -c -o lib_libMvQtGui_a-MvQLineEdit.o `test -f 'MvQLineEdit.cc' || echo '$(srcdir)/'`MvQLineEdit.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQLineEdit.cc' object='lib_libMvQtGui_a-MvQLineEdit.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQLineEdit.o `test -f 'MvQLineEdit.cc' || echo '$(srcdir)/'`MvQLineEdit.cc
+
+lib_libMvQtGui_a-MvQLineEdit.obj: MvQLineEdit.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQLineEdit.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.Tpo -c -o lib_libMvQtGui_a-MvQLineEdit.obj `if test -f 'MvQLineEdit.cc'; then $(CYGPATH_W) 'MvQLineEdit.cc'; else $(CYGPATH_W) '$(srcdir)/MvQLineEdit.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQLineEdit.cc' object='lib_libMvQtGui_a-MvQLineEdit.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQLineEdit.obj `if test -f 'MvQLineEdit.cc'; then $(CYGPATH_W) 'MvQLineEdit.cc'; else $(CYGPATH_W) '$(srcdir)/MvQLineEdit.cc'; fi`
+
 lib_libMvQtGui_a-MvQLogBrowser.o: MvQLogBrowser.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQLogBrowser.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQLogBrowser.Tpo -c -o lib_libMvQtGui_a-MvQLogBrowser.o `test -f 'MvQLogBrowser.cc' || echo '$(srcdir)/'`MvQLogBrowser.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQLogBrowser.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQLogBrowser.Po
@@ -993,21 +1065,21 @@ lib_libMvQtGui_a-MvQLogBrowser.obj: MvQLogBrowser.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQLogBrowser.obj `if test -f 'MvQLogBrowser.cc'; then $(CYGPATH_W) 'MvQLogBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQLogBrowser.cc'; fi`
 
-lib_libMvQtGui_a-MvQMacroSelector.o: MvQMacroSelector.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQMacroSelector.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.Tpo -c -o lib_libMvQtGui_a-MvQMacroSelector.o `test -f 'MvQMacroSelector.cc' || echo '$(srcdir)/'`MvQMacroSelector.cc
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.Po
+lib_libMvQtGui_a-MvQMailDialog.o: MvQMailDialog.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQMailDialog.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.Tpo -c -o lib_libMvQtGui_a-MvQMailDialog.o `test -f 'MvQMailDialog.cc' || echo '$(srcdir)/'`MvQMailDialog.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQMacroSelector.cc' object='lib_libMvQtGui_a-MvQMacroSelector.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQMailDialog.cc' object='lib_libMvQtGui_a-MvQMailDialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQMacroSelector.o `test -f 'MvQMacroSelector.cc' || echo '$(srcdir)/'`MvQMacroSelector.cc
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQMailDialog.o `test -f 'MvQMailDialog.cc' || echo '$(srcdir)/'`MvQMailDialog.cc
 
-lib_libMvQtGui_a-MvQMacroSelector.obj: MvQMacroSelector.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQMacroSelector.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.Tpo -c -o lib_libMvQtGui_a-MvQMacroSelector.obj `if test -f 'MvQMacroSelector.cc'; then $(CYGPATH_W) 'MvQMacroSelector.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMacroSelector.cc'; fi`
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.Po
+lib_libMvQtGui_a-MvQMailDialog.obj: MvQMailDialog.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQMailDialog.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.Tpo -c -o lib_libMvQtGui_a-MvQMailDialog.obj `if test -f 'MvQMailDialog.cc'; then $(CYGPATH_W) 'MvQMailDialog.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMailDialog.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQMacroSelector.cc' object='lib_libMvQtGui_a-MvQMacroSelector.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQMailDialog.cc' object='lib_libMvQtGui_a-MvQMailDialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQMacroSelector.obj `if test -f 'MvQMacroSelector.cc'; then $(CYGPATH_W) 'MvQMacroSelector.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMacroSelector.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQMailDialog.obj `if test -f 'MvQMailDialog.cc'; then $(CYGPATH_W) 'MvQMailDialog.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMailDialog.cc'; fi`
 
 lib_libMvQtGui_a-MvQMainWindow.o: MvQMainWindow.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQMainWindow.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQMainWindow.Tpo -c -o lib_libMvQtGui_a-MvQMainWindow.o `test -f 'MvQMainWindow.cc' || echo '$(srcdir)/'`MvQMainWindow.cc
@@ -1025,6 +1097,22 @@ lib_libMvQtGui_a-MvQMainWindow.obj: MvQMainWindow.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQMainWindow.obj `if test -f 'MvQMainWindow.cc'; then $(CYGPATH_W) 'MvQMainWindow.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMainWindow.cc'; fi`
 
+lib_libMvQtGui_a-MvQPixmapCache.o: MvQPixmapCache.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQPixmapCache.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQPixmapCache.Tpo -c -o lib_libMvQtGui_a-MvQPixmapCache.o `test -f 'MvQPixmapCache.cc' || echo '$(srcdir)/'`MvQPixmapCache.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQPixmapCache.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQPixmapCache.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQPixmapCache.cc' object='lib_libMvQtGui_a-MvQPixmapCache.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQPixmapCache.o `test -f 'MvQPixmapCache.cc' || echo '$(srcdir)/'`MvQPixmapCache.cc
+
+lib_libMvQtGui_a-MvQPixmapCache.obj: MvQPixmapCache.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQPixmapCache.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQPixmapCache.Tpo -c -o lib_libMvQtGui_a-MvQPixmapCache.obj `if test -f 'MvQPixmapCache.cc'; then $(CYGPATH_W) 'MvQPixmapCache.cc'; else $(CYGPATH_W) '$(srcdir)/MvQPixmapCache.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQPixmapCache.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQPixmapCache.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQPixmapCache.cc' object='lib_libMvQtGui_a-MvQPixmapCache.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQPixmapCache.obj `if test -f 'MvQPixmapCache.cc'; then $(CYGPATH_W) 'MvQPixmapCache.cc'; else $(CYGPATH_W) '$(srcdir)/MvQPixmapCache.cc'; fi`
+
 lib_libMvQtGui_a-MvQPlainTextEditSearchLine.o: MvQPlainTextEditSearchLine.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQPlainTextEditSearchLine.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQPlainTextEditSearchLine.Tpo -c -o lib_libMvQtGui_a-MvQPlainTextEditSearchLine.o `test -f 'MvQPlainTextEditSearchLine.cc' || echo '$(srcdir)/'`MvQPlainTextEditSearchLine.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQPlainTextEditSearchLine.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQPlainTextEditSearchLine.Po
@@ -1153,6 +1241,22 @@ lib_libMvQtGui_a-MvQService.obj: MvQService.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQService.obj `if test -f 'MvQService.cc'; then $(CYGPATH_W) 'MvQService.cc'; else $(CYGPATH_W) '$(srcdir)/MvQService.cc'; fi`
 
+lib_libMvQtGui_a-MvQSlider.o: MvQSlider.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQSlider.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQSlider.Tpo -c -o lib_libMvQtGui_a-MvQSlider.o `test -f 'MvQSlider.cc' || echo '$(srcdir)/'`MvQSlider.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQSlider.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQSlider.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQSlider.cc' object='lib_libMvQtGui_a-MvQSlider.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQSlider.o `test -f 'MvQSlider.cc' || echo '$(srcdir)/'`MvQSlider.cc
+
+lib_libMvQtGui_a-MvQSlider.obj: MvQSlider.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQSlider.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQSlider.Tpo -c -o lib_libMvQtGui_a-MvQSlider.obj `if test -f 'MvQSlider.cc'; then $(CYGPATH_W) 'MvQSlider.cc'; else $(CYGPATH_W) '$(srcdir)/MvQSlider.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQSlider.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQSlider.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQSlider.cc' object='lib_libMvQtGui_a-MvQSlider.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQSlider.obj `if test -f 'MvQSlider.cc'; then $(CYGPATH_W) 'MvQSlider.cc'; else $(CYGPATH_W) '$(srcdir)/MvQSlider.cc'; fi`
+
 lib_libMvQtGui_a-MvQStackedEditor.o: MvQStackedEditor.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQStackedEditor.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQStackedEditor.Tpo -c -o lib_libMvQtGui_a-MvQStackedEditor.o `test -f 'MvQStackedEditor.cc' || echo '$(srcdir)/'`MvQStackedEditor.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQStackedEditor.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQStackedEditor.Po
@@ -1169,6 +1273,22 @@ lib_libMvQtGui_a-MvQStackedEditor.obj: MvQStackedEditor.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQStackedEditor.obj `if test -f 'MvQStackedEditor.cc'; then $(CYGPATH_W) 'MvQStackedEditor.cc'; else $(CYGPATH_W) '$(srcdir)/MvQStackedEditor.cc'; fi`
 
+lib_libMvQtGui_a-MvQStationsWidget.o: MvQStationsWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQStationsWidget.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.Tpo -c -o lib_libMvQtGui_a-MvQStationsWidget.o `test -f 'MvQStationsWidget.cc' || echo '$(srcdir)/'`MvQStationsWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQStationsWidget.cc' object='lib_libMvQtGui_a-MvQStationsWidget.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQStationsWidget.o `test -f 'MvQStationsWidget.cc' || echo '$(srcdir)/'`MvQStationsWidget.cc
+
+lib_libMvQtGui_a-MvQStationsWidget.obj: MvQStationsWidget.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQStationsWidget.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.Tpo -c -o lib_libMvQtGui_a-MvQStationsWidget.obj `if test -f 'MvQStationsWidget.cc'; then $(CYGPATH_W) 'MvQStationsWidget.cc'; else $(CYGPATH_W) '$(srcdir)/MvQStationsWidget.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQStationsWidget.cc' object='lib_libMvQtGui_a-MvQStationsWidget.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQStationsWidget.obj `if test -f 'MvQStationsWidget.cc'; then $(CYGPATH_W) 'MvQStationsWidget.cc'; else $(CYGPATH_W) '$(srcdir)/MvQStationsWidget.cc'; fi`
+
 lib_libMvQtGui_a-MvQTabManager.o: MvQTabManager.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQTabManager.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQTabManager.Tpo -c -o lib_libMvQtGui_a-MvQTabManager.o `test -f 'MvQTabManager.cc' || echo '$(srcdir)/'`MvQTabManager.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQTabManager.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQTabManager.Po
@@ -1265,6 +1385,22 @@ lib_libMvQtGui_a-MvQMemoryWidget.obj: MvQMemoryWidget.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQMemoryWidget.obj `if test -f 'MvQMemoryWidget.cc'; then $(CYGPATH_W) 'MvQMemoryWidget.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMemoryWidget.cc'; fi`
 
+lib_libMvQtGui_a-MvQWebViewSearchLine.o: MvQWebViewSearchLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQWebViewSearchLine.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.Tpo -c -o lib_libMvQtGui_a-MvQWebViewSearchLine.o `test -f 'MvQWebViewSearchLine.cc' || echo '$(srcdir)/'`MvQWebViewSearchLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQWebViewSearchLine.cc' object='lib_libMvQtGui_a-MvQWebViewSearchLine.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQWebViewSearchLine.o `test -f 'MvQWebViewSearchLine.cc' || echo '$(srcdir)/'`MvQWebViewSearchLine.cc
+
+lib_libMvQtGui_a-MvQWebViewSearchLine.obj: MvQWebViewSearchLine.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQWebViewSearchLine.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.Tpo -c -o lib_libMvQtGui_a-MvQWebViewSearchLine.obj `if test -f 'MvQWebViewSearchLine.cc'; then $(CYGPATH_W) 'MvQWebViewSearchLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQWebViewSearchLine.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQWebViewSearchLine.cc' object='lib_libMvQtGui_a-MvQWebViewSearchLine.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQWebViewSearchLine.obj `if test -f 'MvQWebViewSearchLine.cc'; then $(CYGPATH_W) 'MvQWebViewSearchLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQWebViewSearchLine.cc'; fi`
+
 lib_libMvQtGui_a-MvQOdbModel.o: MvQOdbModel.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQOdbModel.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQOdbModel.Tpo -c -o lib_libMvQtGui_a-MvQOdbModel.o `test -f 'MvQOdbModel.cc' || echo '$(srcdir)/'`MvQOdbModel.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQOdbModel.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQOdbModel.Po
@@ -1377,6 +1513,22 @@ lib_libMvQtGui_a-MvQCheckBoxCombo.moc.obj: MvQCheckBoxCombo.moc.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQCheckBoxCombo.moc.obj `if test -f 'MvQCheckBoxCombo.moc.cpp'; then $(CYGPATH_W) 'MvQCheckBoxCombo.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQCheckBoxCombo.moc.cpp'; fi`
 
+lib_libMvQtGui_a-MvQComboLine.moc.o: MvQComboLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQComboLine.moc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.moc.Tpo -c -o lib_libMvQtGui_a-MvQComboLine.moc.o `test -f 'MvQComboLine.moc.cpp' || echo '$(srcdir)/'`MvQComboLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQComboLine.moc.cpp' object='lib_libMvQtGui_a-MvQComboLine.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQComboLine.moc.o `test -f 'MvQComboLine.moc.cpp' || echo '$(srcdir)/'`MvQComboLine.moc.cpp
+
+lib_libMvQtGui_a-MvQComboLine.moc.obj: MvQComboLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQComboLine.moc.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.moc.Tpo -c -o lib_libMvQtGui_a-MvQComboLine.moc.obj `if test -f 'MvQComboLine.moc.cpp'; then $(CYGPATH_W) 'MvQComboLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQComboLine.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQComboLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQComboLine.moc.cpp' object='lib_libMvQtGui_a-MvQComboLine.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQComboLine.moc.obj `if test -f 'MvQComboLine.moc.cpp'; then $(CYGPATH_W) 'MvQComboLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQComboLine.moc.cpp'; fi`
+
 lib_libMvQtGui_a-MvQConfigDialog.moc.o: MvQConfigDialog.moc.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQConfigDialog.moc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQConfigDialog.moc.Tpo -c -o lib_libMvQtGui_a-MvQConfigDialog.moc.o `test -f 'MvQConfigDialog.moc.cpp' || echo '$(srcdir)/'`MvQConfigDialog.moc.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQConfigDialog.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQConfigDialog.moc.Po
@@ -1393,22 +1545,6 @@ lib_libMvQtGui_a-MvQConfigDialog.moc.obj: MvQConfigDialog.moc.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQConfigDialog.moc.obj `if test -f 'MvQConfigDialog.moc.cpp'; then $(CYGPATH_W) 'MvQConfigDialog.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQConfigDialog.moc.cpp'; fi`
 
-lib_libMvQtGui_a-MvQFileBrowserBase.moc.o: MvQFileBrowserBase.moc.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQFileBrowserBase.moc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.moc.Tpo -c -o lib_libMvQtGui_a-MvQFileBrowserBase.moc.o `test -f 'MvQFileBrowserBase.moc.cpp' || echo '$(srcdir)/'`MvQFileBrowserBase.moc.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.moc.Po
- at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileBrowserBase.moc.cpp' object='lib_libMvQtGui_a-MvQFileBrowserBase.moc.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQFileBrowserBase.moc.o `test -f 'MvQFileBrowserBase.moc.cpp' || echo '$(srcdir)/'`MvQFileBrowserBase.moc.cpp
-
-lib_libMvQtGui_a-MvQFileBrowserBase.moc.obj: MvQFileBrowserBase.moc.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQFileBrowserBase.moc.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.moc.Tpo -c -o lib_libMvQtGui_a-MvQFileBrowserBase.moc.obj `if test -f 'MvQFileBrowserBase.moc.cpp'; then $(CYGPATH_W) 'MvQFileBrowserBase.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFileBrowserBase.moc.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQFileBrowserBase.moc.Po
- at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQFileBrowserBase.moc.cpp' object='lib_libMvQtGui_a-MvQFileBrowserBase.moc.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQFileBrowserBase.moc.obj `if test -f 'MvQFileBrowserBase.moc.cpp'; then $(CYGPATH_W) 'MvQFileBrowserBase.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQFileBrowserBase.moc.cpp'; fi`
-
 lib_libMvQtGui_a-MvQGuiItem.moc.o: MvQGuiItem.moc.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQGuiItem.moc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQGuiItem.moc.Tpo -c -o lib_libMvQtGui_a-MvQGuiItem.moc.o `test -f 'MvQGuiItem.moc.cpp' || echo '$(srcdir)/'`MvQGuiItem.moc.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQGuiItem.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQGuiItem.moc.Po
@@ -1537,21 +1673,37 @@ lib_libMvQtGui_a-MvQKeyProfileTree.moc.obj: MvQKeyProfileTree.moc.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQKeyProfileTree.moc.obj `if test -f 'MvQKeyProfileTree.moc.cpp'; then $(CYGPATH_W) 'MvQKeyProfileTree.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQKeyProfileTree.moc.cpp'; fi`
 
-lib_libMvQtGui_a-MvQMacroSelector.moc.o: MvQMacroSelector.moc.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQMacroSelector.moc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.moc.Tpo -c -o lib_libMvQtGui_a-MvQMacroSelector.moc.o `test -f 'MvQMacroSelector.moc.cpp' || echo '$(srcdir)/'`MvQMacroSelector.moc.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.moc.Po
+lib_libMvQtGui_a-MvQLineEdit.moc.o: MvQLineEdit.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQLineEdit.moc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.moc.Tpo -c -o lib_libMvQtGui_a-MvQLineEdit.moc.o `test -f 'MvQLineEdit.moc.cpp' || echo '$(srcdir)/'`MvQLineEdit.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQLineEdit.moc.cpp' object='lib_libMvQtGui_a-MvQLineEdit.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQLineEdit.moc.o `test -f 'MvQLineEdit.moc.cpp' || echo '$(srcdir)/'`MvQLineEdit.moc.cpp
+
+lib_libMvQtGui_a-MvQLineEdit.moc.obj: MvQLineEdit.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQLineEdit.moc.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.moc.Tpo -c -o lib_libMvQtGui_a-MvQLineEdit.moc.obj `if test -f 'MvQLineEdit.moc.cpp'; then $(CYGPATH_W) 'MvQLineEdit.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQLineEdit.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQLineEdit.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQLineEdit.moc.cpp' object='lib_libMvQtGui_a-MvQLineEdit.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQLineEdit.moc.obj `if test -f 'MvQLineEdit.moc.cpp'; then $(CYGPATH_W) 'MvQLineEdit.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQLineEdit.moc.cpp'; fi`
+
+lib_libMvQtGui_a-MvQMailDialog.moc.o: MvQMailDialog.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQMailDialog.moc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.moc.Tpo -c -o lib_libMvQtGui_a-MvQMailDialog.moc.o `test -f 'MvQMailDialog.moc.cpp' || echo '$(srcdir)/'`MvQMailDialog.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.moc.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQMacroSelector.moc.cpp' object='lib_libMvQtGui_a-MvQMacroSelector.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQMailDialog.moc.cpp' object='lib_libMvQtGui_a-MvQMailDialog.moc.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQMacroSelector.moc.o `test -f 'MvQMacroSelector.moc.cpp' || echo '$(srcdir)/'`MvQMacroSelector.moc.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQMailDialog.moc.o `test -f 'MvQMailDialog.moc.cpp' || echo '$(srcdir)/'`MvQMailDialog.moc.cpp
 
-lib_libMvQtGui_a-MvQMacroSelector.moc.obj: MvQMacroSelector.moc.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQMacroSelector.moc.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.moc.Tpo -c -o lib_libMvQtGui_a-MvQMacroSelector.moc.obj `if test -f 'MvQMacroSelector.moc.cpp'; then $(CYGPATH_W) 'MvQMacroSelector.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQMacroSelector.moc.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQMacroSelector.moc.Po
+lib_libMvQtGui_a-MvQMailDialog.moc.obj: MvQMailDialog.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQMailDialog.moc.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.moc.Tpo -c -o lib_libMvQtGui_a-MvQMailDialog.moc.obj `if test -f 'MvQMailDialog.moc.cpp'; then $(CYGPATH_W) 'MvQMailDialog.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQMailDialog.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQMailDialog.moc.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQMacroSelector.moc.cpp' object='lib_libMvQtGui_a-MvQMacroSelector.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQMailDialog.moc.cpp' object='lib_libMvQtGui_a-MvQMailDialog.moc.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQMacroSelector.moc.obj `if test -f 'MvQMacroSelector.moc.cpp'; then $(CYGPATH_W) 'MvQMacroSelector.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQMacroSelector.moc.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQMailDialog.moc.obj `if test -f 'MvQMailDialog.moc.cpp'; then $(CYGPATH_W) 'MvQMailDialog.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQMailDialog.moc.cpp'; fi`
 
 lib_libMvQtGui_a-MvQProfileView.moc.o: MvQProfileView.moc.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQProfileView.moc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQProfileView.moc.Tpo -c -o lib_libMvQtGui_a-MvQProfileView.moc.o `test -f 'MvQProfileView.moc.cpp' || echo '$(srcdir)/'`MvQProfileView.moc.cpp
@@ -1697,6 +1849,22 @@ lib_libMvQtGui_a-MvQStackedEditor.moc.obj: MvQStackedEditor.moc.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQStackedEditor.moc.obj `if test -f 'MvQStackedEditor.moc.cpp'; then $(CYGPATH_W) 'MvQStackedEditor.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQStackedEditor.moc.cpp'; fi`
 
+lib_libMvQtGui_a-MvQStationsWidget.moc.o: MvQStationsWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQStationsWidget.moc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.moc.Tpo -c -o lib_libMvQtGui_a-MvQStationsWidget.moc.o `test -f 'MvQStationsWidget.moc.cpp' || echo '$(srcdir)/'`MvQStationsWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQStationsWidget.moc.cpp' object='lib_libMvQtGui_a-MvQStationsWidget.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQStationsWidget.moc.o `test -f 'MvQStationsWidget.moc.cpp' || echo '$(srcdir)/'`MvQStationsWidget.moc.cpp
+
+lib_libMvQtGui_a-MvQStationsWidget.moc.obj: MvQStationsWidget.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQStationsWidget.moc.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.moc.Tpo -c -o lib_libMvQtGui_a-MvQStationsWidget.moc.obj `if test -f 'MvQStationsWidget.moc.cpp'; then $(CYGPATH_W) 'MvQStationsWidget.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQStationsWidget.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQStationsWidget.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQStationsWidget.moc.cpp' object='lib_libMvQtGui_a-MvQStationsWidget.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQStationsWidget.moc.obj `if test -f 'MvQStationsWidget.moc.cpp'; then $(CYGPATH_W) 'MvQStationsWidget.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQStationsWidget.moc.cpp'; fi`
+
 lib_libMvQtGui_a-MvQTabManager.moc.o: MvQTabManager.moc.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQTabManager.moc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQTabManager.moc.Tpo -c -o lib_libMvQtGui_a-MvQTabManager.moc.o `test -f 'MvQTabManager.moc.cpp' || echo '$(srcdir)/'`MvQTabManager.moc.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQTabManager.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQTabManager.moc.Po
@@ -1729,6 +1897,22 @@ lib_libMvQtGui_a-MvQTextEditSearchLine.moc.obj: MvQTextEditSearchLine.moc.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQTextEditSearchLine.moc.obj `if test -f 'MvQTextEditSearchLine.moc.cpp'; then $(CYGPATH_W) 'MvQTextEditSearchLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQTextEditSearchLine.moc.cpp'; fi`
 
+lib_libMvQtGui_a-MvQWebViewSearchLine.moc.o: MvQWebViewSearchLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQWebViewSearchLine.moc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.moc.Tpo -c -o lib_libMvQtGui_a-MvQWebViewSearchLine.moc.o `test -f 'MvQWebViewSearchLine.moc.cpp' || echo '$(srcdir)/'`MvQWebViewSearchLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQWebViewSearchLine.moc.cpp' object='lib_libMvQtGui_a-MvQWebViewSearchLine.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQWebViewSearchLine.moc.o `test -f 'MvQWebViewSearchLine.moc.cpp' || echo '$(srcdir)/'`MvQWebViewSearchLine.moc.cpp
+
+lib_libMvQtGui_a-MvQWebViewSearchLine.moc.obj: MvQWebViewSearchLine.moc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQWebViewSearchLine.moc.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.moc.Tpo -c -o lib_libMvQtGui_a-MvQWebViewSearchLine.moc.obj `if test -f 'MvQWebViewSearchLine.moc.cpp'; then $(CYGPATH_W) 'MvQWebViewSearchLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQWebViewSearchLine.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQWebViewSearchLine.moc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvQWebViewSearchLine.moc.cpp' object='lib_libMvQtGui_a-MvQWebViewSearchLine.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQWebViewSearchLine.moc.obj `if test -f 'MvQWebViewSearchLine.moc.cpp'; then $(CYGPATH_W) 'MvQWebViewSearchLine.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQWebViewSearchLine.moc.cpp'; fi`
+
 lib_libMvQtGui_a-MvQTreeView.moc.o: MvQTreeView.moc.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-MvQTreeView.moc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-MvQTreeView.moc.Tpo -c -o lib_libMvQtGui_a-MvQTreeView.moc.o `test -f 'MvQTreeView.moc.cpp' || echo '$(srcdir)/'`MvQTreeView.moc.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-MvQTreeView.moc.Tpo $(DEPDIR)/lib_libMvQtGui_a-MvQTreeView.moc.Po
@@ -1777,6 +1961,22 @@ lib_libMvQtGui_a-MvQMemoryWidget.moc.obj: MvQMemoryWidget.moc.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-MvQMemoryWidget.moc.obj `if test -f 'MvQMemoryWidget.moc.cpp'; then $(CYGPATH_W) 'MvQMemoryWidget.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQMemoryWidget.moc.cpp'; fi`
 
+lib_libMvQtGui_a-edit.qrc.o: edit.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-edit.qrc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-edit.qrc.Tpo -c -o lib_libMvQtGui_a-edit.qrc.o `test -f 'edit.qrc.cpp' || echo '$(srcdir)/'`edit.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-edit.qrc.Tpo $(DEPDIR)/lib_libMvQtGui_a-edit.qrc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='edit.qrc.cpp' object='lib_libMvQtGui_a-edit.qrc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-edit.qrc.o `test -f 'edit.qrc.cpp' || echo '$(srcdir)/'`edit.qrc.cpp
+
+lib_libMvQtGui_a-edit.qrc.obj: edit.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-edit.qrc.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-edit.qrc.Tpo -c -o lib_libMvQtGui_a-edit.qrc.obj `if test -f 'edit.qrc.cpp'; then $(CYGPATH_W) 'edit.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/edit.qrc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-edit.qrc.Tpo $(DEPDIR)/lib_libMvQtGui_a-edit.qrc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='edit.qrc.cpp' object='lib_libMvQtGui_a-edit.qrc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-edit.qrc.obj `if test -f 'edit.qrc.cpp'; then $(CYGPATH_W) 'edit.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/edit.qrc.cpp'; fi`
+
 lib_libMvQtGui_a-examiner.qrc.o: examiner.qrc.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-examiner.qrc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-examiner.qrc.Tpo -c -o lib_libMvQtGui_a-examiner.qrc.o `test -f 'examiner.qrc.cpp' || echo '$(srcdir)/'`examiner.qrc.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-examiner.qrc.Tpo $(DEPDIR)/lib_libMvQtGui_a-examiner.qrc.Po
@@ -1825,6 +2025,22 @@ lib_libMvQtGui_a-keyDialog.qrc.obj: keyDialog.qrc.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-keyDialog.qrc.obj `if test -f 'keyDialog.qrc.cpp'; then $(CYGPATH_W) 'keyDialog.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/keyDialog.qrc.cpp'; fi`
 
+lib_libMvQtGui_a-mail.qrc.o: mail.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-mail.qrc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-mail.qrc.Tpo -c -o lib_libMvQtGui_a-mail.qrc.o `test -f 'mail.qrc.cpp' || echo '$(srcdir)/'`mail.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-mail.qrc.Tpo $(DEPDIR)/lib_libMvQtGui_a-mail.qrc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='mail.qrc.cpp' object='lib_libMvQtGui_a-mail.qrc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-mail.qrc.o `test -f 'mail.qrc.cpp' || echo '$(srcdir)/'`mail.qrc.cpp
+
+lib_libMvQtGui_a-mail.qrc.obj: mail.qrc.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-mail.qrc.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-mail.qrc.Tpo -c -o lib_libMvQtGui_a-mail.qrc.obj `if test -f 'mail.qrc.cpp'; then $(CYGPATH_W) 'mail.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/mail.qrc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-mail.qrc.Tpo $(DEPDIR)/lib_libMvQtGui_a-mail.qrc.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='mail.qrc.cpp' object='lib_libMvQtGui_a-mail.qrc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtGui_a-mail.qrc.obj `if test -f 'mail.qrc.cpp'; then $(CYGPATH_W) 'mail.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/mail.qrc.cpp'; fi`
+
 lib_libMvQtGui_a-window.qrc.o: window.qrc.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtGui_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtGui_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtGui_a-window.qrc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtGui_a-window.qrc.Tpo -c -o lib_libMvQtGui_a-window.qrc.o `test -f 'window.qrc.cpp' || echo '$(srcdir)/'`window.qrc.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtGui_a-window.qrc.Tpo $(DEPDIR)/lib_libMvQtGui_a-window.qrc.Po
diff --git a/src/libMvQtGui/MvQApplication.cc b/src/libMvQtGui/MvQApplication.cc
index 759e110..3f455d7 100644
--- a/src/libMvQtGui/MvQApplication.cc
+++ b/src/libMvQtGui/MvQApplication.cc
@@ -25,10 +25,24 @@ MvQApplication::MvQApplication(int& ac, char** av, const char* name) :
 	sn_ = new QSocketNotifier( sockfd, QSocketNotifier::Read);
 	QObject::connect( sn_, SIGNAL(activated(int)),
 					this, SLOT(slotDataReceived(int)) );
+					
+	//Get desktop name
+	char *desktop=getenv("MV_DESKTOP_NAME");
+	if(desktop == 0)  
+	{	
+		cout << "Error: MV_DESKTOP_NAME is not defined! MvQApplication exits" << endl;
+		exit(1);
+	}
+	
+	string dn(desktop);	
+	desktopName_=new char[dn.size()+1];
+	desktopName_[dn.size()]='\0';
+	memcpy(desktopName_,dn.c_str(),dn.size());
 }
 
 MvQApplication::~MvQApplication()
 {
+	delete desktopName_;
 }
 
 void MvQApplication::slotDataReceived(int)
@@ -46,5 +60,5 @@ void MvQApplication::slotDataReceived(int)
 
 void MvQApplication::processDropRequest(MvRequest* req)
 {
-	send_drop_info(getService(),"MetviewUI",*req,0);
+  	send_drop_info(getService(),desktopName_,*req,0);
 }
diff --git a/src/libMvQtGui/MvQApplication.h b/src/libMvQtGui/MvQApplication.h
index 0e156b1..2024f23 100644
--- a/src/libMvQtGui/MvQApplication.h
+++ b/src/libMvQtGui/MvQApplication.h
@@ -43,6 +43,7 @@ private:
 	MvQApplication& operator=(const MvQApplication&){return *this;}
 
 	QSocketNotifier *sn_;
+	char* desktopName_;
 };
 
 #endif
diff --git a/src/libMvQtGui/MvQComboLine.cc b/src/libMvQtGui/MvQComboLine.cc
new file mode 100644
index 0000000..e57a6dd
--- /dev/null
+++ b/src/libMvQtGui/MvQComboLine.cc
@@ -0,0 +1,94 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQComboLine.h"
+
+#include <QDebug>
+#include <QComboBox>
+#include <QHBoxLayout>
+#include <QLineEdit>
+#include <QRegExpValidator>
+#include <QStyle>
+
+
+MvQComboLine::MvQComboLine(QStringList lst,QWidget *parent): 
+  QWidget(parent),
+  validator_(0)
+{
+	QHBoxLayout *layout=new QHBoxLayout(this);
+	layout->setSpacing(0); 
+	layout->setContentsMargins(1,1,1,1);
+	
+  	combo_=new QComboBox(this);
+	layout->addWidget(combo_);
+	
+	combo_->addItems(lst);	
+		
+	connect(combo_,SIGNAL(currentIndexChanged(int)),
+		this,SLOT(slotCurrentIndexChanged(int)));
+			
+	line_ = new QLineEdit(this);
+	layout->addWidget(line_);
+			
+	line_->setStyleSheet(QString("QLineEdit {background: url(:/desktop/filter.svg); background-position: right; background-repeat: no-repeat} "));
+		
+	connect(line_,SIGNAL(textChanged(QString)),
+		this,SIGNAL(textChanged(QString)));
+		       		       
+}	
+
+void MvQComboLine::setItems(QStringList lst)
+{
+  	combo_->clear();
+	combo_->addItems(lst);	 	
+}
+
+void MvQComboLine::setRegExps(QList<QRegExp> lst)
+{
+  	if(lst.count() == combo_->count())
+	  	regExps_=lst;
+  	else 
+	  	return;
+	
+  	if(!validator_)
+	{
+	  	validator_=new QRegExpValidator(this);
+		line_->setValidator(validator_);
+	}
+	
+	if(combo_->currentIndex() !=-1 )
+	  	validator_->setRegExp(regExps_.at(combo_->currentIndex()));
+}
+
+void MvQComboLine::setToolTips(QStringList lst)
+{
+	if(lst.count() == combo_->count())
+	  	toolTips_=lst;
+  	else 
+	  	return;
+	
+	if(combo_->currentIndex() !=-1 )
+	  	line_->setToolTip(toolTips_.at(combo_->currentIndex()));
+}  
+
+void MvQComboLine::setCurrentIndex(int index)
+{
+  	combo_->setCurrentIndex(index);
+}	
+
+void MvQComboLine::slotCurrentIndexChanged(int index)
+{
+  	if(validator_ && index != -1)
+	  	validator_->setRegExp(regExps_.at(index));
+  	
+	if(toolTips_.count() == combo_->count())
+	  	line_->setToolTip(toolTips_.at(index));
+	
+  	emit currentIndexChanged(index);
+}
\ No newline at end of file
diff --git a/src/libMvQtGui/MvQComboLine.h b/src/libMvQtGui/MvQComboLine.h
new file mode 100644
index 0000000..4b1debc
--- /dev/null
+++ b/src/libMvQtGui/MvQComboLine.h
@@ -0,0 +1,49 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQComboLine_H
+#define MvQComboLine_H
+ 
+#include <QWidget>
+
+class QComboBox;
+class QLineEdit;
+class QRegExpValidator;
+
+using namespace std;
+
+class MvQComboLine : public QWidget
+{  
+Q_OBJECT
+
+public:
+	MvQComboLine (QStringList,QWidget *parent=0);
+	void setItems(QStringList);
+	void setRegExps(QList<QRegExp>);
+	void setToolTips(QStringList);
+	void setCurrentIndex(int);
+
+signals:
+    	void currentIndexChanged(int);
+	void textChanged(QString);
+
+protected slots:
+    	void slotCurrentIndexChanged(int);
+
+protected:	
+	//void resizeEvent(QResizeEvent*);
+	QComboBox *combo_;
+	QLineEdit *line_;
+	QRegExpValidator* validator_;
+	QList<QRegExp> regExps_;
+	QStringList toolTips_;
+};
+
+
+#endif
diff --git a/src/libMvQtGui/MvQDragDrop.cc b/src/libMvQtGui/MvQDragDrop.cc
index 81384c3..01d0066 100644
--- a/src/libMvQtGui/MvQDragDrop.cc
+++ b/src/libMvQtGui/MvQDragDrop.cc
@@ -1,6 +1,6 @@
 /***************************** LICENSE START ***********************************
 
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2013 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.
@@ -12,6 +12,9 @@
 //#include <X11/X.h>
 //#include <X11/Xlib.h>
 //#include <X11/Xatom.h>
+#include <QByteArray>
+#include <QDataStream>
+#include <QDropEvent>
 
 #include "MvQDragDrop.h"
 
@@ -39,3 +42,66 @@ void MvQIconDropItem::clear()
 	format_      = 0;
 	iconId_      = 0;
 }
+
+
+MvQDrop::MvQDrop(QDropEvent *event) : hasData_(false)			  
+{
+	if(event->proposedAction() != Qt::CopyAction &&
+	   event->proposedAction() != Qt::MoveAction)
+	{	  	
+		hasData_=false;
+		return;
+	}
+	
+	if(event->mimeData()->hasFormat("metview/icon"))
+	{  	  	   	
+		QByteArray encodedData = event->mimeData()->data("metview/icon");
+		QDataStream stream(&encodedData, QIODevice::ReadOnly);
+		
+		QString text;
+		stream >> text;
+		int num=text.toInt();
+	
+		if(num<=0 || num > 20)
+		{		  
+			hasData_=false;
+			return;	
+		}
+		
+		int cnt=0;
+		while(!stream.atEnd()) 
+		{
+         		stream >> text;
+         		if(cnt%2 == 0)
+				iconPath_ << text;
+			else
+			  	iconClass_ << text;
+			
+			cnt++;
+		}
+		
+		if(num != iconPath_.count() || num != iconClass_.count())
+		{
+			hasData_=false;
+			return;	
+		}
+		
+		hasData_=true;
+				
+	}
+	else
+	{  
+		hasData_=true;
+	}
+}
+
+QString MvQDrop::iconPath(int i) const
+{
+  	return (i >=0 && i < iconPath_.count())?iconPath_.at(i):QString();
+}
+
+QString MvQDrop::iconClass(int i) const
+{
+  	return (i >=0 && i < iconPath_.count())?iconClass_.at(i):QString();
+}
+	
\ No newline at end of file
diff --git a/src/libMvQtGui/MvQDragDrop.h b/src/libMvQtGui/MvQDragDrop.h
index b1347db..039b169 100644
--- a/src/libMvQtGui/MvQDragDrop.h
+++ b/src/libMvQtGui/MvQDragDrop.h
@@ -10,6 +10,10 @@
 #ifndef MvQDragDrop_H
 #define MvQDragDrop_H
 
+#include <QStringList>
+
+class QDropEvent;
+
 #include <iostream>
 //#include <QtGui/QApplication>
 //#include <QWidget>
@@ -72,4 +76,22 @@ protected:
 	int iconId_;
 };
 
+class QDropEvent;
+
+class MvQDrop 
+{
+public:
+	MvQDrop(QDropEvent*);
+	bool hasData() const {return hasData_;}
+	int iconNum() const {return (hasData_)?iconPath_.count():0;}
+	QString iconPath(int) const;
+	QString iconClass(int) const;
+
+protected:
+	bool hasData_;
+	QStringList iconPath_;
+	QStringList iconClass_;
+};
+
+
 #endif
diff --git a/src/libMvQtGui/MvQFileBrowserBase.cc b/src/libMvQtGui/MvQFileBrowserBase.cc
deleted file mode 100644
index 8685d21..0000000
--- a/src/libMvQtGui/MvQFileBrowserBase.cc
+++ /dev/null
@@ -1,583 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 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 "MvQFileBrowserBase.h"
-
-#include <QAction>
-#include <QApplication>
-#include <QComboBox>
-#include <QDebug>
-#include <QDirModel>
-#include <QHBoxLayout>
-#include <QLabel>
-#include <QListView>
-#include <QMenu>
-#include <QPushButton>
-#include <QSortFilterProxyModel>
-#include <QSplitter>
-#include <QStandardItemModel>
-#include <QStringList>
-#include <QTextBrowser>
-#include <QTextStream>
-#include <QToolButton>
-#include <QTreeView>
-#include <QVBoxLayout>
-
-#include "MvRequest.h"
-
-MvQFileBrowserBase::MvQFileBrowserBase()
-{	
-	 int order = 0;
-         bool more = true;
- 
-         while(more)
-         {
-                more = false;
-                request  *r = mars.setup;
-                while (r) 
-		{
-                        MvRequest mvr(r);
-			mvr.print();
-			  //if(ConfigLoader::process(r,order))
-                         //        more = true;
-                        r = r->next;
-		}
-                order++;
-         }
-
-	rootDir_=QString("/");
-
-	char *mvhome=getenv("METVIEW_USER_DIRECTORY");
- 	if(mvhome != 0)  
-	{	
-		rootDir_=QString(mvhome);	
-	}
-
-	dirHistoryPos_=0;
-	dirHistory_.append(rootDir_);
-
-	//Iconprovider
-	MvQFileIconProvider *iconProvider = new MvQFileIconProvider;
-
-	//-----------------------------
-	// Actions
-	//-----------------------------
-
-	locationCombo_= new QComboBox;
-	locationCombo_->addItem(rootDir_);
-
-	//Back
-	actionBack_ = new QAction(this);
-	actionBack_->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowLeft)); 
-        actionBack_->setToolTip(tr("Back"));
-	actionBack_->setText(tr("Back"));
-        actionBack_->setShortcut(tr("Alt+Left"));
-	navigateActions_["back"]=actionBack_;
-
-	connect(actionBack_,SIGNAL(triggered()),
-		this,SLOT(slotChDirBack()));
-
-	//Forward
-	actionForward_ = new QAction(this);
-	actionForward_->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowRight)); 
-	actionForward_->setToolTip(tr("Forward"));
-	actionForward_->setText(tr("Forward"));
-        actionForward_->setShortcut(tr("Alt+Right"));
-	navigateActions_["forward"]=actionForward_;
-
-	connect(actionForward_,SIGNAL(triggered()),
-		this,SLOT(slotChDirForward()));
-
-	//Parent
-	actionParent_= new QAction(this);
-	actionParent_->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowUp)); 
-        actionParent_->setToolTip(tr("Parent"));
-	actionParent_->setText(tr("Parent"));
-        actionParent_->setShortcut(tr("Alt+Up"));
-	navigateActions_["parent"]=actionParent_;
-
-	connect(actionParent_,SIGNAL(triggered()),
-		this,SLOT(slotChDirParent()));
-	
-	//-------------------
-	// Dir tree 
-	//-------------------
-
-	QModelIndex rootIndex;
-
-	//Dir model
-	dirModel_ = new MvQFileSystemModel;
-	dirModel_->setIconProvider(iconProvider);
-	rootIndex=dirModel_->setRootPath(rootDir_);
-	//dirModel_->setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
-	//rootIndex=dirModel_->setRootPath(rootDir_);
-
-	dirFilterModel_= new MvQDirFilterModel;  
-	dirFilterModel_->setSourceModel(dirModel_);
-	dirFilterModel_->setDynamicSortFilter(true);
-	//dirSortModel_->setFilterRole(Qt::UserRole);
-	//dirFilterModel_->setFilterRegExp(QRegExp("[1]"));
-	//dirSortModel_->setFilterFixedString("1");
-	//dirSortModel_->setFilterKeyColumn(0);
-		
-	//Dir tree
-	dirTree_ = new QTreeView;
-	dirTree_->setHeaderHidden(true);
-        dirTree_->setModel(dirFilterModel_);
-	dirTree_->setRootIndex(dirFilterModel_->mapFromSource(rootIndex));
-
-	//-------------------
-	// Item list 
-	//-------------------
-
-	//Macro  model
-	//itemModel_ = new MvQFileSystemModel;
-	//itemModel_->setIconProvider(iconProvider);
-	//itemModel_->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::Files);
-	//itemModel_->setNameFilters(QStringList("*.mv"));
-	//itemModel_->setRootPath(rootDir_);
-	//rootIndex=itemModel_->setRootPath(rootDir_);
-
-	itemFilterModel_= new MvQCurrentDirFilterModel;  
-	itemFilterModel_->setSourceModel(dirModel_);
-	itemFilterModel_->setDynamicSortFilter(true);
-
-	//Macro tree
-	itemList_= new QListView;
-        itemList_->setModel(itemFilterModel_);
-	itemList_->setRootIndex(itemFilterModel_->mapFromSource(rootIndex));
-	//itemList_->setRootIndex(itemModel_->index(rootDir_));
-	itemList_->setContextMenuPolicy(Qt::CustomContextMenu);
-	itemList_->setViewMode(QListView::IconMode);
-	itemList_->setGridSize(QSize(90,60));
-	itemList_->setFlow(QListView::LeftToRight);
-	itemList_->setResizeMode(QListView::Adjust);
-
-	//Selection form the dir tree
-	connect(dirTree_,SIGNAL(clicked(const QModelIndex&)),
-		this,SLOT(slotSelectDir(const QModelIndex)));
-
-	//Context menu in the macro tree
-    	connect(itemList_, SIGNAL(customContextMenuRequested(const QPoint &)),
-                this, SLOT(slotContextMenu(const QPoint &)));
-	
-	//Selection form the macro tree
-	connect(itemList_,SIGNAL(clicked(const QModelIndex&)),
-		this,SLOT(slotSelectItem(const QModelIndex)));
-
-	//Setup
-	updateNavigationActionState();
-}
-
-MvQFileBrowserBase::~MvQFileBrowserBase()
-{
-	delete locationCombo_;
-	delete dirModel_;
-	delete itemModel_;
-	delete dirTree_;
-	delete itemList_;
-}
-
-QString MvQFileBrowserBase::currentDir()
-{
-	return dirModel_->filePath(dirTree_->currentIndex());
-}
-
-void MvQFileBrowserBase::setCurrentDir(QString path,bool savePath)
-{
-	/*QModelIndex rootIndex=dirModel_->setRootPath(path);
-	dirTree_->setRootIndex(dirFilterModel_->mapFromSource(rootIndex));
-
-	rootIndex=itemModel_->setRootPath(path);
-	itemList_->setRootIndex(itemFilterModel_->mapFromSource(rootIndex));
-
-	//dirTree_->setCurrentIndex(dirModel_->index(path));	
-	//itemList_->setRootIndex(itemModel_->index(path));	
-	
-	if(savePath == true)
-		addPathToDirHistory(path);	*/
-
-	//slotSelectDir(dirTree_->currentIndex());
-}
-
-void MvQFileBrowserBase::addPathToDirHistory(QString path)
-{
-	dirHistory_.append(path);
-	dirHistoryPos_=dirHistory_.count()-1;
-	updateNavigationActionState();
-}
-
-void MvQFileBrowserBase::updateNavigationActionState()
-{
-	if(dirHistoryPos_ == 0)
-	{
-		actionBack_->setEnabled(false);
-	}
-	else
-	{
-		actionBack_->setEnabled(true);
-	}
-	
-	if(dirHistoryPos_ < dirHistory_.count()-1)
-	{
-		actionForward_->setEnabled(true);
-	}
-	else
-	{
-		actionForward_->setEnabled(false);
-	}
-
-	if(dirHistory_[dirHistoryPos_] == "/")
-	{
-		actionParent_->setEnabled(false);
-	}
-	else{
-		actionParent_->setEnabled(true);
-	}
-}
-
-//------------------------------------------
-// A dir is selected form the dir tree
-//------------------------------------------
-
-void MvQFileBrowserBase::slotSelectDir(const QModelIndex& index)
-{	
-	QModelIndex realIndex=dirFilterModel_->mapToSource(index);
-	dirTree_->setCurrentIndex(index);
-	
-
-	QString filePath=dirModel_->filePath(realIndex);
-
-	qDebug() << "filePath:" << filePath;
-	//dirModel_->setRootPath(filePath);
-
-	//QModelIndex rootIndex=itemModel_->setRootPath(filePath);
-	itemList_->setRootIndex(itemFilterModel_->mapFromSource(realIndex));
-
-	//itemList_->setRootIndex(itemFilterModel_->mapToSource(itemModel_->index(filePath)));
-	//itemModel_->setRootPath(filePath);
-	addPathToDirHistory(filePath);		
-
-	qDebug() << "Last dirs:";
-	 for (int i = 0; i < dirHistory_.size(); ++i)
-         qDebug() << dirHistory_.at(i);
-}
-
-//------------------------------------------
-// An item is selected from the list
-//------------------------------------------
-
-void MvQFileBrowserBase::slotSelectItem(const QModelIndex& index)
-{
-	QModelIndex realIndex=itemFilterModel_->mapToSource(index);
-	if(dirModel_->isDir(realIndex))
-	{		
-		slotSelectDir(dirFilterModel_->mapFromSource(realIndex));
-		//setCurrentDir(itemModel_->filePath(realIndex));
-		return; 
-	}
-	else
-	{
-		//emit itemSelected(itemModel_->filePath(index));
-	}
-}
-
-void MvQFileBrowserBase::executeItem(const QModelIndex& index)
-{
-	if(!itemModel_->isDir(index))
-	{		
-		emit itemExecuted(itemModel_->filePath(index));
-	}
-}
-
-
-void MvQFileBrowserBase::slotChDirBack()
-{	
-	if(dirHistoryPos_>0)
-	{
-		dirHistoryPos_--;
-		setCurrentDir(dirHistory_[dirHistoryPos_],false);
-		updateNavigationActionState();
-	}	
-}
-
-void MvQFileBrowserBase::slotChDirForward()
-{
-	if(dirHistoryPos_ < dirHistory_.count()-1)
-	{
-		dirHistoryPos_++;
-		setCurrentDir(dirHistory_[dirHistoryPos_],false);
-		updateNavigationActionState();
-	}
-}
-
-void MvQFileBrowserBase::slotChDirParent()
-{
-	QModelIndex parent = dirModel_->parent(dirTree_->currentIndex());		
-	setCurrentDir(dirModel_->filePath(parent));
-}
-
-
-void MvQFileBrowserBase::slotContextMenu(const QPoint &position)
-{
-    	if(!itemList_->indexAt(position).isValid()) return;
-
-       	QList<QAction*> actions;
-
- 	//Open
-	QAction *actionLoad = new QAction(this);
-        actionLoad->setObjectName(QString::fromUtf8("actionLoad"));
-       	//QIcon icon;
-        //icon.addPixmap(QPixmap(QString::fromUtf8(":/new/prefix1/image/print.svg")), QIcon::Normal, QIcon::Off);
-        //actionOpen->setIcon(icon); 
-	actionLoad->setText(tr("Load"));
-        actionLoad->setShortcut(tr("Ctrl+L"));
-	actions.append(actionLoad);
-
-	QAction *actionEdit = new QAction(this);
-        actionEdit->setObjectName(QString::fromUtf8("actionEdit"));
-       	//QIcon icon;
-        //icon.addPixmap(QPixmap(QString::fromUtf8(":/new/prefix1/image/print.svg")), QIcon::Normal, QIcon::Off);
-        //actionOpen->setIcon(icon); 
-	actionEdit->setText(tr("Edit"));
-        actionEdit->setShortcut(tr("Ctrl+E"));
-	actions.append(actionEdit);
-
-	QAction *actionDuplicate = new QAction(this);
-        actionDuplicate->setObjectName(QString::fromUtf8("actionDuplicate"));
-	actionDuplicate->setText(tr("Duplicate"));
-        actionDuplicate->setShortcut(tr("Ctrl+C"));
-	actions.append(actionDuplicate);
-
-	QAction *actionDelete = new QAction(this);
-        actionDelete->setObjectName(QString::fromUtf8("actionDelete"));
-	actionDelete->setText(tr("Delete"));
-        actionDelete->setShortcut(tr("Ctrl+D"));
-	actions.append(actionDelete);
-	
-    	if(actions.count() > 0)
-	{
-        	QAction *action=QMenu::exec(actions, itemList_->mapToGlobal(position));
-
-		QModelIndex index=itemList_->indexAt(position);
-
-		if(action == actionLoad)
-		{
-			executeItem(index);
-		}
-
-	}
-}
-
-
-MvQFileIconProvider::MvQFileIconProvider()
-{
-	char *mvhome=getenv("METVIEW_DIR_SHARE");
-
- 	if (mvhome == 0)  
-	{
-		return;	
-	}
-	
-	path_= QString(mvhome);
-	path_.append("/icons/");
-}
-
-QIcon MvQFileIconProvider::icon(const QFileInfo& info) const
-{
-	QString suffix = info.suffix();
-	/*if(suffix == "grb") 
-	{	
-		QPixmap p("/var/tmp/cgr/PERFORCE/metview_4/share/metview/icons/GRIB.png");
-		p.scaled(QSize(16,16));
-		return QIcon(p);	
-	}*/
-	if(info.isFile() == true && suffix == "mc") 
-	{	
-		QString str(path_);
-		str.append("MACRO.xpm");
-		QPixmap p(str);
-		p.scaled(QSize(16,16));
-		return QIcon(p);	
-	}
-	else 
-		return QFileIconProvider::icon(info);
-}	
-
-
-
-
-
-
-MvQFileSystemModel::MvQFileSystemModel()
-{
-}
-
-MvQFileSystemModel::~MvQFileSystemModel()
-{
-}
-int MvQFileSystemModel::columnCount( const QModelIndex& /* parent */ ) const
-{
-   	 return 1;
-}
-QVariant MvQFileSystemModel::data( const QModelIndex& index, int role ) const
-{
-	if(role != Qt::ToolTipRole)
-	{
-		return QFileSystemModel::data(index,role);
-	}
-	else
-	{
-		QFileInfo info=fileInfo(index);	
-		/*if(info.suffix() == "grb")	
-			return QString("GRIB file");*/
-		if(info.isFile() == true && info.suffix() == "mc")	
-		{
-			return getMacroHeader(info);
-			//return QString("Macro");
-		}
-		else
-			return QVariant();
-	}	
-}
-
-QString MvQFileSystemModel::getMacroHeader(QFileInfo& info)
-{
-	//qDebug() << info.absoluteFilePath();
-
-	QFile file(info.absoluteFilePath()); 
-	if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
-        	return QString();
-
-	bool newItem=false;
-
-	QString res;
-
-	QStringList keys;
-	keys << "Function" << "Syntax" << "Category" << "Parameters";
-
-	//MvQMacroHeader header(keys);
-
-	QString key("Description");
-
-	/*QMap<QString,QString> macroHeader_;
-	foreach(item in  keys)
-	{
-		
-	*/
-
-	QTextStream in(&file); 
-	while (!in.atEnd()) 
-	{
-		QString line = in.readLine().simplified();
-         	if(line.startsWith("#") == true)
-		{
-			QString expr("(^#\\s*");
-			expr.append(key);
-			expr.append("\\s*: )(\\S.*)");
-
-			QRegExp rx(expr);
-
-			if(rx.indexIn(line) > -1)
-			{
-				newItem = true;
-				res.append(rx.cap(2));
-			}
-			else if(newItem) 
-			{
-				if(line.contains(QRegExp("(^# \\S.*\\s*: )")))
-				{
-					newItem = false;
-					return res;
-				}
-				else
-				{		
-					res.append("\n");
-					QRegExp rx("(^#\\s*)(\\S.*)");
-					if(rx.indexIn(line) > -1)
-					{
-						res.append(rx.cap(2));
-					}
-					else
-					{
-						res.append("\n");
-					}
-				}
-			}
-		}
-     	}
-
-	file.close();
-
-	return res;
-}
-
-MvQDirFilterModel::MvQDirFilterModel(QObject *parent) :  QSortFilterProxyModel(parent)
-{
-}
-
-void MvQDirFilterModel::setSourceModel(QAbstractItemModel* sourceModel)
-{
-	dirModel_=static_cast<MvQFileSystemModel*>(sourceModel);
-	QSortFilterProxyModel::setSourceModel(sourceModel);
-}
-
-bool MvQDirFilterModel::filterAcceptsRow(int sourceRow,
-         const QModelIndex &sourceParent) const
-{
-	QModelIndex index=dirModel_->index(sourceRow,0,sourceParent);
-	if(dirModel_->isDir(index))
-	{
-		if(!dirModel_->fileName(index).endsWith("#"))
-			return true;
-	}
-	
-	return false;
-}
-
-
-MvQCurrentDirFilterModel::MvQCurrentDirFilterModel(QObject *parent) :  QSortFilterProxyModel(parent)
-{
-}
-
-void MvQCurrentDirFilterModel::setSourceModel(QAbstractItemModel* sourceModel)
-{
-	dirModel_=static_cast<MvQFileSystemModel*>(sourceModel);
-	QSortFilterProxyModel::setSourceModel(sourceModel);
-}
-
-bool MvQCurrentDirFilterModel::filterAcceptsRow(int sourceRow,
-         const QModelIndex &sourceParent) const
-{
-	QModelIndex index=dirModel_->index(sourceRow,0,sourceParent);
-
-	qDebug() << "filter:" << dirModel_->fileName(index);
-
-	QString fileName=dirModel_->fileName(index);
-
-	if(dirModel_->isDir(index) == true)
-	{
-	  	if(fileName.endsWith("#") == false)
-			return true;
-		else
-			return false;
-	}
-
-	if(fileName.startsWith(".") == false && 
-	fileName.startsWith("..") == false)
-	{
-		return true;	
-	}
-	
-	return false;
-}
-
-
-
-
diff --git a/src/libMvQtGui/MvQFileBrowserBase.h b/src/libMvQtGui/MvQFileBrowserBase.h
deleted file mode 100644
index 972ef41..0000000
--- a/src/libMvQtGui/MvQFileBrowserBase.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 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 MvQFileBrowserBase_H
-#define MvQFileBrowserBase_H
- 
-#include <QFileSystemModel>
-#include <QFileIconProvider>
-#include <QFileInfo>
-#include <QModelIndex>
-#include <QList>
-#include <QMap>
-#include <QObject>
-#include <QSortFilterProxyModel>
-#include <QString>
-
-class QAction;
-class QComboBox;
-class QLabel;
-class QListView;
-class QSplitter;
-class QTextBrowser;
-class QTreeView;
-
-using namespace std;
-
-class MvQFileIconProvider : public QFileIconProvider
-{
-public:
-	MvQFileIconProvider();
-	QIcon icon(const QFileInfo&) const;
-private:
-	QString path_;
-};
-
-class MvQFileSystemModel : public QFileSystemModel
-{
-public:
-	MvQFileSystemModel();
-	~MvQFileSystemModel();	
-	int columnCount( const QModelIndex&) const;
-	QVariant data( const QModelIndex&, int) const;
-
-	static QString getMacroHeader(QFileInfo&);
-};
-
-class MvQDirFilterModel : public QSortFilterProxyModel
-{
-public:
-	MvQDirFilterModel(QObject *parent=0);
-	void setSourceModel(QAbstractItemModel*);
-	bool filterAcceptsRow(int,const QModelIndex &) const;
-
-protected:
-	MvQFileSystemModel *dirModel_;
-};
-
-class MvQCurrentDirFilterModel : public QSortFilterProxyModel
-{
-public:
-	MvQCurrentDirFilterModel(QObject *parent=0);
-	void setSourceModel(QAbstractItemModel*);
-	bool filterAcceptsRow(int,const QModelIndex &) const;
-
-protected:
-	MvQFileSystemModel *dirModel_;
-};
-
-class MvQFileBrowserBase : public QObject
-{
-    Q_OBJECT
-
-public:
-	MvQFileBrowserBase();
-	~MvQFileBrowserBase();
-
-	QTreeView*      dirTree() {return dirTree_;}
-	QListView*      itemList() {return itemList_;}
-	QString 	currentDir();
-	void            setCurrentDir(QString s,bool savePath=true);
-	const QMap<QString,QAction*>&  navigateActions() {return navigateActions_;}
-	QAction*        actionBack() {return actionBack_;}
-	QAction*        actionForward() {return actionForward_;}
-	QAction*        actionParent() {return actionParent_;}
-	QComboBox*      locationCombo() {return locationCombo_;}
-
-
-public slots:
-	void slotSelectDir(const QModelIndex&);
-	void slotSelectItem(const QModelIndex&);
-	void slotContextMenu(const QPoint&);
-	void slotChDirBack();
-	void slotChDirForward();
-	void slotChDirParent();
-
-signals:
-	void itemSelected(QString);
-	void itemExecuted(QString);
-
-private:
-	void addPathToDirHistory(QString);
-	void updateNavigationActionState();
-	void executeItem(const QModelIndex&);
-
-	MvQFileSystemModel*   dirModel_;
-	MvQDirFilterModel* dirFilterModel_;
-	QTreeView*     dirTree_;
-	MvQFileSystemModel*   itemModel_;
-	MvQCurrentDirFilterModel* itemFilterModel_;
-	QListView*     itemList_;
-	QComboBox*     locationCombo_;
-
-	QAction*       actionBack_;
-	QAction*       actionForward_;
-	QAction*       actionParent_;
-
-	QString        rootDir_;
-	QList<QString> dirHistory_;
-	int 	       dirHistoryPos_;
-	
-	QMap<QString,QAction*> navigateActions_;
-	
-};
-
-#endif
diff --git a/src/libMvQtGui/MvQFileDialog.cc b/src/libMvQtGui/MvQFileDialog.cc
new file mode 100644
index 0000000..cbbdefb
--- /dev/null
+++ b/src/libMvQtGui/MvQFileDialog.cc
@@ -0,0 +1,145 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQFileDialog.h"
+
+#include <QDebug>
+#include <QFileSystemModel>
+#include <QUrl>
+
+#include "MvQPixmapCache.h"
+
+//===========================
+// MvQFileIconProvider
+//===========================
+
+MvQFileIconProvider::MvQFileIconProvider()
+{
+	char *mvhome=getenv("METVIEW_DIR_SHARE");
+
+ 	if (mvhome == 0)  
+	{
+		return;	
+	}
+	
+	path_= QString(mvhome);
+	path_.append("/icons/");
+	
+	pixCache_=new MvQPixmapCache(QPixmap());
+}
+
+QIcon MvQFileIconProvider::icon(const QFileInfo& info) const
+{
+	if(info.isDir())
+	{
+		QPixmap pix=pixCache_->pixmap("FOLDER");
+		if(pix.isNull())
+		{
+		  	pix=QPixmap(path_ + "FOLDER.svg");
+		  	pixCache_->add("FOLDER",pix);
+		}
+		return QIcon(pix);
+	}	  	
+
+	return QFileIconProvider::icon(info);
+}
+
+//===========================
+// MvQFileDialogFilterModel 
+//===========================
+
+MvQFileDialogFilterModel::MvQFileDialogFilterModel(QObject *parent) :  
+   QSortFilterProxyModel(parent)
+{
+}
+
+bool MvQFileDialogFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
+{
+	QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
+    	QFileSystemModel* fsModel = qobject_cast<QFileSystemModel*>(sourceModel());
+
+	if(!fsModel) 
+		return false;
+	
+	QString fileName=fsModel->fileName(index);
+	
+    	if(fsModel->isDir(index))
+    	{
+        	if(fileName.endsWith("#") == false)
+			return true;
+		else
+			return false;  
+	}
+	
+	if(fileName.startsWith(".") == false && 
+	   fileName.startsWith("..") == false)
+	{
+		return true;	
+	}
+	
+	return false;
+}
+
+bool MvQFileDialogFilterModel::lessThan(const QModelIndex &left,const QModelIndex &right) const
+{
+    	QFileSystemModel* fsModel = qobject_cast<QFileSystemModel*>(sourceModel());
+
+	if(!fsModel) 
+		return false;
+	
+	if(fsModel->isDir(right))
+	{
+	  	if(!fsModel->isDir(left))
+		  	return false;
+	}
+	else
+	{
+	  	if(fsModel->isDir(left))
+		  	return true;
+	}
+	
+	return QSortFilterProxyModel::lessThan(left,right);
+}
+	
+//===========================
+// MvQFileDialog
+//===========================
+
+MvQFileDialog::MvQFileDialog(QString startDir,QString title,QWidget *parent): QFileDialog(parent)
+{
+  	setWindowTitle(title);
+  
+  	setOptions(QFileDialog::DontUseNativeDialog);
+	
+	//url sidebar
+	QList<QUrl> urlLst=sidebarUrls();
+	urlLst <<  QUrl::fromLocalFile(startDir);
+	
+	char *mvDir=getenv("METVIEW_USER_DIRECTORY");
+  	if(mvDir)	
+  	{ 	
+		urlLst <<  QUrl::fromLocalFile(QString(mvDir));
+	}		
+	setSidebarUrls(urlLst);
+	
+	//Filter model
+	MvQFileDialogFilterModel *proxy=new MvQFileDialogFilterModel(this);	
+	setProxyModel(proxy);
+	
+	//Dir
+	setDirectory(startDir);
+	
+	//Icons
+	MvQFileIconProvider *iconProvider=new MvQFileIconProvider;
+	setIconProvider(iconProvider);	
+	
+}	
+  
+
+
diff --git a/src/libMvQtGui/MvQFileDialog.h b/src/libMvQtGui/MvQFileDialog.h
new file mode 100644
index 0000000..d825623
--- /dev/null
+++ b/src/libMvQtGui/MvQFileDialog.h
@@ -0,0 +1,50 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQFileDialog_H
+#define MvQFileDialog_H
+ 
+#include <QFileSystemModel>
+#include <QFileIconProvider> 
+#include <QFileDialog>
+#include <QFileInfo>
+#include <QModelIndex>
+#include <QSortFilterProxyModel>
+#include <QString>
+
+using namespace std;
+
+class MvQPixmapCache;
+
+class MvQFileIconProvider : public QFileIconProvider
+{
+public:
+	MvQFileIconProvider();
+	QIcon icon(const QFileInfo&) const;
+private:
+	QString path_;
+	MvQPixmapCache* pixCache_;
+};
+
+
+class MvQFileDialogFilterModel : public QSortFilterProxyModel
+{
+public:
+	MvQFileDialogFilterModel(QObject *parent=0);
+	bool filterAcceptsRow(int,const QModelIndex &) const;
+	bool lessThan(const QModelIndex &,const QModelIndex &) const;
+};
+
+class MvQFileDialog : public QFileDialog
+{
+public:
+    MvQFileDialog(QString,QString,QWidget *parent=0);    
+};
+
+#endif
diff --git a/src/libMvQtGui/MvQFileInfoLabel.cc b/src/libMvQtGui/MvQFileInfoLabel.cc
index 06f2c2e..d3133e3 100644
--- a/src/libMvQtGui/MvQFileInfoLabel.cc
+++ b/src/libMvQtGui/MvQFileInfoLabel.cc
@@ -158,15 +158,17 @@ void MvQFileInfoLabel::setFlextraTextLabel(QString fileName, QString iconName, i
 	setText(s);
 }
 
-void MvQFileInfoLabel::setScmTextLabel(QString fileName,int stepNum, int levNum)
+void MvQFileInfoLabel::setProfileTextLabel(QString fileName,int stepNum, int levNum,QString id)
 {
 	QString s=buildTextLabel(fileName);
 	s+="<br>";
-	s+="<b><font color=#000000>Number of steps: </font></b>";		
+	s+="<b><font color=#000000>Steps: </font></b>";		
 	s+="<font color=000010>" + QString::number(stepNum) + "</font>";
-	s+="<br>";
-	s+="<b><font color=#000000>Number of model levels: </font></b>";		
+	s+="<b><font color=#000000> Model levels: </font></b>";		
 	s+="<font color=000010>" + QString::number(levNum) + "</font>";
+	s+="<br>";
+	s+="<b><font color=#000000>Data type: </font></b>";		
+	s+="<font color=000010>" + id + "</font>";
 	
 	setText(s);
-}	
\ No newline at end of file
+}	
diff --git a/src/libMvQtGui/MvQFileInfoLabel.h b/src/libMvQtGui/MvQFileInfoLabel.h
index 17871bf..3e4f52e 100644
--- a/src/libMvQtGui/MvQFileInfoLabel.h
+++ b/src/libMvQtGui/MvQFileInfoLabel.h
@@ -23,7 +23,7 @@ public:
 	void setOdbTextLabel(QString,QString);
 	void setGeopTextLabel(QString,QString,long);
 	void setFlextraTextLabel(QString,QString,int);
-	void setScmTextLabel(QString,int,int);
+	void setProfileTextLabel(QString,int,int,QString);
 
 protected:
 	QString buildTextLabel(QString);
diff --git a/src/libMvQtGui/MvQKeyModel.cc b/src/libMvQtGui/MvQKeyModel.cc
index 679d69f..30335b7 100644
--- a/src/libMvQtGui/MvQKeyModel.cc
+++ b/src/libMvQtGui/MvQKeyModel.cc
@@ -11,15 +11,26 @@
 #include <QMimeData>
 
 #include "MvQKeyModel.h"
+#include "MvQPixmapCache.h"
 
 #include "MvQKeyMimeData.h"
 #include "MvKeyProfile.h"
 
 
-MvQKeyModel::MvQKeyModel(DisplayMode mode) : mode_(mode)
+MvQKeyModel::MvQKeyModel(MvKeyProfile *profile,DisplayMode mode) :
+         profile_(profile), 
+         mode_(mode),
+         editable_(false),
+         pixmaps_(0)
+{
+}
+
+MvQKeyModel::MvQKeyModel(DisplayMode mode) : 
+         profile_(0), 
+         mode_(mode), 
+         editable_(false),
+         pixmaps_(0)
 {
-	profile_=0;
-	editable_=false;
 }
 
 void MvQKeyModel::profileIsAboutToChange()
@@ -34,7 +45,7 @@ void MvQKeyModel::setKeyProfile(MvKeyProfile  *profile)
 	endResetModel();
 }
 
-int MvQKeyModel::columnCount( const QModelIndex& /* parent */ ) const
+int MvQKeyModel::columnCount( const QModelIndex& parent) const
 {
 	switch(mode_)
 	{
@@ -42,6 +53,8 @@ int MvQKeyModel::columnCount( const QModelIndex& /* parent */ ) const
    		return 3;
 	case AllKeysMode:
 		return 2;
+	case ShortNameMode:
+		return parent.isValid() ? 0 : 1;
 	default:
 		return 0;
 	}
@@ -63,7 +76,7 @@ Qt::ItemFlags MvQKeyModel::flags ( const QModelIndex & index) const
 {
 	Qt::ItemFlags defaultFlags;
 
-	if(mode_ == ProfileContentsMode)
+	if(mode_ == ProfileContentsMode || mode_ == ShortNameMode)
 	{
 		if(index.column() == 0 || !editable_)
 		{	defaultFlags=Qt::ItemIsEnabled |
@@ -83,6 +96,7 @@ Qt::ItemFlags MvQKeyModel::flags ( const QModelIndex & index) const
         		return Qt::ItemIsDropEnabled | defaultFlags;
 
 	}
+	
 	else if(mode_ == AllKeysMode)
 	{		
 		defaultFlags=Qt::ItemIsEnabled |
@@ -90,6 +104,8 @@ Qt::ItemFlags MvQKeyModel::flags ( const QModelIndex & index) const
      		
        		return Qt::ItemIsDragEnabled | defaultFlags;
 	}
+	
+	return defaultFlags;
 }
 
 QVariant MvQKeyModel::data( const QModelIndex& index, int role ) const
@@ -102,9 +118,15 @@ QVariant MvQKeyModel::data( const QModelIndex& index, int role ) const
 	if(role == Qt::DisplayRole || role == Qt::ToolTipRole)
 	{
  		MvKey  *key=profile_->at(index.row());
-  		return label(key,index.row(),index.column() );
+  		return label(key,index.row(),index.column(),role);
 	}
-
+	else if(role == Qt::DecorationRole && index.column() == 0 && pixmaps_)
+	{	
+		MvKey  *key=profile_->at(index.row());
+		QString name=QString::fromStdString(key->name()); 
+		return pixmaps_->pixmap(name).toImage().scaled(QSize(24,24),Qt::KeepAspectRatio,Qt::SmoothTransformation);
+	}	
+	  
 	return  QVariant();
 }
 
@@ -173,7 +195,7 @@ QVariant MvQKeyModel::headerData( const int section, const Qt::Orientation orien
     	return QVariant();
 }
 
-QString MvQKeyModel::label(MvKey* key,const int row, const int column ) const
+QString MvQKeyModel::label(MvKey* key,const int row, const int column,int role ) const
 {
 	if(mode_ == ProfileContentsMode)
 	{
@@ -210,17 +232,38 @@ QString MvQKeyModel::label(MvKey* key,const int row, const int column ) const
 		default: return QString();
 		}
 	}
+	else if(mode_ == ShortNameMode)
+	{
+		if(column == 0)
+		{
+		  	if(role == Qt::ToolTipRole)
+			{
+			  	string cntStr=key->metaData("path_count");
+				if(!cntStr.empty())
+					return QString();
+				else				  
+					return QString::fromStdString(key->name());
+			}	
+			else
+			  	return QString::fromStdString(key->shortName());
+		}
+		else
+		{
+			return QString();
+		}
+	}
+	
 	
 	return QString();   	
 }
 
-QModelIndex MvQKeyModel::index( int row, int column, const QModelIndex & parent ) const
+QModelIndex MvQKeyModel::index( int row, int column, const QModelIndex & /*parent*/ ) const
 {
    return createIndex(row,column,0);
 }
 
 
-QModelIndex MvQKeyModel::parent( const QModelIndex & index ) const
+QModelIndex MvQKeyModel::parent( const QModelIndex & /*index*/ ) const
 {
     return QModelIndex();
 }
@@ -249,8 +292,8 @@ void MvQKeyModel::moveDown(const QModelIndex& index)
 
 void MvQKeyModel::moveRow(int sourceRow,int targetRow)
 {
-	if(sourceRow < 0 ||  sourceRow >= profile_->size() ||
-	   targetRow < 0 ||  targetRow >= profile_->size() ||
+	if(sourceRow < 0 ||  sourceRow >= static_cast<int>(profile_->size()) ||
+	   targetRow < 0 ||  targetRow >= static_cast<int>(profile_->size()) ||
            sourceRow == targetRow )
 	{
 		return;
@@ -298,7 +341,7 @@ QMimeData* MvQKeyModel::mimeData(const QModelIndexList &indexes) const
 }
 
 bool MvQKeyModel::dropMimeData(const QMimeData *data,
-     Qt::DropAction action, int row, int column, const QModelIndex &parent)
+     Qt::DropAction action, int row, int /*column*/, const QModelIndex &parent)
 {
 	//if(!editable_)
 	//	return false;
diff --git a/src/libMvQtGui/MvQKeyModel.h b/src/libMvQtGui/MvQKeyModel.h
index f1cbb03..18e2bef 100644
--- a/src/libMvQtGui/MvQKeyModel.h
+++ b/src/libMvQtGui/MvQKeyModel.h
@@ -12,8 +12,11 @@
 
 #include <QAbstractItemModel>
 #include <QMimeData>
+#include <QPixmap>
 #include <QStringList>
 
+class MvQPixmapCache;
+
 class MvKeyProfile;
 class MvKey;
 
@@ -22,9 +25,10 @@ class MvQKeyModel : public QAbstractItemModel
 	Q_OBJECT
 
 public:
-	enum DisplayMode {ProfileContentsMode,AllKeysMode};
+	enum DisplayMode {ProfileContentsMode,AllKeysMode,ShortNameMode};
 
    	MvQKeyModel(DisplayMode mode=ProfileContentsMode);
+	MvQKeyModel(MvKeyProfile  *,DisplayMode mode=ProfileContentsMode);
 
    	virtual int columnCount (const QModelIndex& parent = QModelIndex() ) const;
    	virtual int rowCount (const QModelIndex& parent = QModelIndex() ) const;
@@ -53,17 +57,18 @@ public:
 
 	void setEditable(bool b) {editable_=b;}
 	bool editable() {return editable_;}
+	
+	void setPixmapCache(MvQPixmapCache* p) {pixmaps_=p;}
 
 
-signals:
-
 protected:
-	virtual QString label(MvKey*,const int,const int) const;
+	virtual QString label(MvKey*,const int,const int,int) const;
 	void moveRow(int,int);
 
 	MvKeyProfile  *profile_;
 	DisplayMode mode_;
 	bool editable_;
+	MvQPixmapCache *pixmaps_;;
 };
 
 #endif
diff --git a/src/libMvQtGui/MvQLineEdit.cc b/src/libMvQtGui/MvQLineEdit.cc
new file mode 100644
index 0000000..0604b61
--- /dev/null
+++ b/src/libMvQtGui/MvQLineEdit.cc
@@ -0,0 +1,50 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQLineEdit.h"
+
+#include <QResizeEvent>
+#include <QStyle>
+#include <QToolButton>
+
+MvQLineEdit::MvQLineEdit(QWidget *parent): QLineEdit(parent)
+{
+	clearTb_=new QToolButton(this);
+	clearTb_->setIcon(QPixmap(":/edit/clear_left.svg")); 	
+  	clearTb_->setAutoRaise(true);
+	clearTb_->setToolTip(tr("Clear text"));
+	clearTb_->setStyleSheet("QToolButton { border: none; padding: 0px; }");
+	
+	connect(clearTb_,SIGNAL(clicked()),
+		this,SLOT(slotClear()));
+	
+	QSize tbSize=clearTb_->sizeHint();
+	
+   	int frame = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
+	setStyleSheet(QString("QLineEdit { padding-right: %1px; } ").arg(tbSize.width()+frame+1));
+	QSize minSize = minimumSizeHint();
+	setMinimumSize(qMax(minSize.width(),tbSize.height()+frame*2+2),
+                       qMax(minSize.height(),tbSize.height()+frame*2+2));
+}	
+  
+
+void MvQLineEdit::resizeEvent(QResizeEvent *)
+{
+	QSize tbSize = clearTb_->sizeHint();
+	int frame = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
+        clearTb_->move(rect().right()-frame-tbSize.width(),
+		      (rect().bottom()+ 1-tbSize.height())/2);
+}
+
+void MvQLineEdit::slotClear()
+{
+  	clear();
+	emit textCleared();
+}	
+  	
diff --git a/src/libMvQtGui/MvQLineEdit.h b/src/libMvQtGui/MvQLineEdit.h
new file mode 100644
index 0000000..29bb5a3
--- /dev/null
+++ b/src/libMvQtGui/MvQLineEdit.h
@@ -0,0 +1,38 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQLineEdit_H
+#define MvQLineEdit_H
+ 
+#include <QLineEdit>
+
+class QToolButton;
+
+using namespace std;
+
+class MvQLineEdit : public QLineEdit
+{  
+Q_OBJECT
+
+public:
+	MvQLineEdit (QWidget *parent=0);
+
+public slots:
+        void slotClear();
+  
+signals:
+    	void textCleared();
+
+protected:	
+	void resizeEvent(QResizeEvent*);
+	QToolButton *clearTb_;
+};
+
+
+#endif
diff --git a/src/libMvQtGui/MvQMacroSelector.cc b/src/libMvQtGui/MvQMacroSelector.cc
deleted file mode 100644
index 29a1c0f..0000000
--- a/src/libMvQtGui/MvQMacroSelector.cc
+++ /dev/null
@@ -1,193 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 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 "MvQMacroSelector.h"
-
-#include <QAction>
-#include <QApplication>
-#include <QComboBox>
-#include <QDebug>
-#include <QDirModel>
-#include <QHBoxLayout>
-#include <QLabel>
-#include <QListView>
-#include <QMenu>
-#include <QPushButton>
-#include <QSplitter>
-#include <QStandardItemModel>
-#include <QStringList>
-#include <QTextBrowser>
-#include <QTextStream>
-#include <QToolButton>
-#include <QTreeView>
-#include <QVBoxLayout>
-
-#include "MvQFileBrowserBase.h"
-
-MvQMacroSelector::MvQMacroSelector(QWidget *parent,QString rootDir)
-{
-	//lastDirPos_=0;
-	//lastDirList_.append(rootDir);
-
-	rootDir_=rootDir;
-
-	base_= new MvQFileBrowserBase;
-
-	//-----------------------------
-	// Layout 
-	//-----------------------------
-	
-	QVBoxLayout *mainLayout = new QVBoxLayout;
-	
-
-	//-----------------------------
-	// Top part 
-	//-----------------------------
-
-	QHBoxLayout *tbLayout = new QHBoxLayout;
-	mainLayout->addLayout(tbLayout);
-		
-	QIcon icon;
-
-	QLabel *locationLabel = new QLabel("Location:");
-	tbLayout->addWidget(locationLabel);
-		
-
-	tbLayout->addWidget(base_->locationCombo());
-
-	//Back
-	QToolButton *tbBack = new QToolButton;
-	tbBack->setDefaultAction(base_->actionBack());
-	tbLayout->addWidget(tbBack);
-	
-	//Forward
-	QToolButton *tbForward = new QToolButton;
-	tbForward->setDefaultAction(base_->actionForward());
-	tbLayout->addWidget(tbForward);
-
-	//Forward
-	QToolButton *tbParent = new QToolButton;
-	tbParent->setDefaultAction(base_->actionParent());
-	tbLayout->addWidget(tbParent);
-
-
-	/*connect(tbBack,SIGNAL(clicked()),
-	this,SLOT(slotChDirBack()));
-
-	//Forward
-	QToolButton *tbForward = new QToolButton;
-	tbForward->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowRight)); 
-	tbForward->setToolTip(tr("Forward"));
-	tbForward->setText(tr("Forward"));
-        tbForward->setShortcut(tr("Alt+Right"));
-
-	tbLayout->addWidget(tbForward);
-	
-	connect(tbBack,SIGNAL(clicked()),
-	this,SLOT(slotChDirForward()));
-
-	//Parent
-	QToolButton *tbParent = new QToolButton;
-	tbParent->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowUp)); 
-        tbParent->setToolTip(tr("Parent"));
-	tbParent->setText(tr("Parent"));
-        tbParent->setShortcut(tr("Alt+Up"));
-
-	tbLayout->addWidget(tbParent);
-	
-	connect(tbParent,SIGNAL(clicked()),
-	this,SLOT(slotChDirParent()));*/
-
-	//------------------------------
-	// Central part
-	//------------------------------
-
-	/*mainSplitter_ = new QSplitter;
-	mainSplitter_->setOrientation(Qt::Vertical);	
-	mainLayout->addWidget(mainSplitter_);*/
-	
-	// Dir tree (on the right)
-		
-	dirSplitter_ = new QSplitter;
-	mainLayout->addWidget(dirSplitter_);
-
-	//Add it to the layout
-	dirSplitter_->addWidget(base_->dirTree());
-	dirSplitter_->addWidget(base_->itemList());
-
-	//
-	/*QWidget *infoWidget = new QWidget;
-	QHBoxLayout *infoLayout = new QHBoxLayout;
-	infoWidget->setLayout(infoLayout);*/
-
-	//Macro description 
-	//macroInfo_ = new QTextBrowser;
-	//infoLayout->addWidget(macroInfo_);
-
-	//QPushButton *loadPb = new QPushButton("Load");
-	//infoLayout->addWidget(loadPb);
-
-	//connect(loadPb,SIGNAL(clicked()),
-	//	this,SLOT(slotLoadMacro()));
-
-	//mainSplitter_->addWidget(infoWidget);	
-
-	parent->setLayout(mainLayout);
-
-	connect(base_,SIGNAL(itemExecuted(QString)),
-		this,SLOT(slotLoadMacro(QString)));
-}
-
-MvQMacroSelector::~MvQMacroSelector()
-{
-	//delete macroInfo_;
-}
-
-QString MvQMacroSelector::currentDir()
-{
-	return base_->currentDir();	
-}
-
-void MvQMacroSelector::setCurrentDir(QString path)
-{
-	base_->setCurrentDir(path);	
-}
-
-
-void MvQMacroSelector::slotLoadMacro(QString file)
-{
-	currentMacro_=file;
-
-	//QFileInfo info(file);
-	//QString txt=MvQDirModel::getMacroHeader(info);
-
-	emit macroLoaded(currentMacro_);
-
-	//emit macroSelected(info);
-
-	/*
-	QString str("<b>Path: </b>");
-	str+=info.absolutePath();
-	str+="<br>";
-	str+="<b>Name: </b> ";
-	str+=info.fileName();	
-	str+="<br>";
-	str+="<b>Description: </b>";
-	str+=txt;
-
-	macroInfo_->setHtml(str);*/
-	
-	//emit macroSelected(info);
-}
-
-/*void MvQMacroSelector::slotLoadMacro()
-{
-	emit macroLoaded(currentMacro_);
-
-}*/
\ No newline at end of file
diff --git a/src/libMvQtGui/MvQMacroSelector.h b/src/libMvQtGui/MvQMacroSelector.h
deleted file mode 100644
index 0fc1cc1..0000000
--- a/src/libMvQtGui/MvQMacroSelector.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 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 MvQMacroSelector_H
-#define MvQMacroSelector_H
- 
-#include <QDirModel>
-#include <QFileIconProvider>
-#include <QFileInfo>
-#include <QModelIndex>
-#include <QList>
-#include <QString>
-
-class MvQFileBrowserBase;
-
-class QComboBox;
-class QLabel;
-class QListView;
-class QSplitter;
-class QTextBrowser;
-class QTreeView;
-
-using namespace std;
-
-class MvQMacroSelector : public QObject
-{
-    Q_OBJECT
-
-public:
-	MvQMacroSelector(QWidget*,QString);
-	~MvQMacroSelector();
-
-	//QTreeView*      macroDirTree() {return macroDirTree_;}
-	//QListView*      macroTree() {return macroTree_;}
-	//QTextBrowser*   macroInfo() {return macroInfo_;}
-	
-	QString 	currentDir();
-	void            setCurrentDir(QString);
-
-	//QSplitter*      mainSplitter() {return mainSplitter_;}
-
-	//QSplitter* 	mainSplitter() {return mainSplitter_;}
-	QSplitter*      dirSplitter() {return dirSplitter_;} 
-
-
-public slots:
-	//void slotSelectMacroDir(const QModelIndex&);
-	//void slotMacroContextMenu(const QPoint&);
-	//void slotSelectMacro(const QModelIndex&);
-	//void slotChDirBack();
-	//void slotChDirForward();
-	//void slotChDirParent();
-	//void slotSelectMacro(QString);
-	void slotLoadMacro(QString);
-
-signals:
-	void macroLoaded(QString);
-
-private:
-	
-	QString        rootDir_;
-	QString        currentMacro_;
-	/*MvQDirModel*   macroDirModel_;
-	QTreeView*     macroDirTree_;
-	MvQDirModel*   macroModel_;
-	QListView*     macroTree_;*/
-
-	//QTextBrowser*  macroInfo_;
-
-	//QComboBox*     locationCombo_;
-
-	//QSplitter*     mainSplitter_;
-	QSplitter*     dirSplitter_; 
-	
-	
-	MvQFileBrowserBase*	base_;
-	
-};
-
-#endif
diff --git a/src/libMvQtGui/MvQMailDialog.cc b/src/libMvQtGui/MvQMailDialog.cc
new file mode 100644
index 0000000..5ea8c01
--- /dev/null
+++ b/src/libMvQtGui/MvQMailDialog.cc
@@ -0,0 +1,226 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQMailDialog.h"
+
+#include <QCompleter>
+#include <QDialogButtonBox>
+#include <QFile>
+#include <QFileInfo>
+#include <QGridLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QMessageBox>
+#include <QPlainTextEdit>
+#include <QPushButton>
+#include <QSettings>
+#include <QTextStream>
+#include <QVBoxLayout>
+
+MvQMailDialog::MvQMailDialog(const std::string& fAttach,const std::string& fAttachInfo)
+{
+	setWindowTitle(tr("Send icons in mail"));
+  	
+  	QVBoxLayout *vb=new QVBoxLayout(this);
+  	
+	QGridLayout *grid=new QGridLayout();
+	vb->addLayout(grid);
+	
+	QLabel *label=new QLabel(tr("To:"),this);
+	toLe_=new QLineEdit(this);
+	grid->addWidget(label,0,0);
+	grid->addWidget(toLe_,0,1);
+	
+	label=new QLabel(tr("Cc:"),this);
+	ccLe_=new QLineEdit(this);
+	grid->addWidget(label,1,0);
+	grid->addWidget(ccLe_,1,1);
+	
+	label=new QLabel(tr("Subject:"),this);
+	subjLe_=new QLineEdit(tr("Metview icons"),this);
+	grid->addWidget(label,2,0);
+	grid->addWidget(subjLe_,2,1);
+	
+	msgTe_=new QPlainTextEdit(this);
+	vb->addWidget(msgTe_,1);
+	
+	//------------------------
+	// List of files	
+	//------------------------
+	
+	QStringList items;
+	QFile file(fAttachInfo.c_str());
+     	if(file.open(QIODevice::ReadOnly | QIODevice::Text))
+	{
+     		QTextStream its(&file);
+     		while (!its.atEnd())
+         		items <<  its.readLine();       
+    	
+		QFileInfo info(fAttach.c_str());
+	
+		label=new QLabel(tr("This is the list of icons (and their descriptor files) you are about to send as a <b>tar.gz</b> attachment (<b>") + 
+		                      formatFileSize(info.size()) + "</b> in total).",this);
+		label->setWordWrap(true);
+		vb->addWidget(label);
+	
+		QPlainTextEdit *itemTe=new QPlainTextEdit(this);
+		itemTe->setProperty("mvStyle","mailAttachment");
+		itemTe->setReadOnly(true);
+		itemTe->setLineWrapMode(QPlainTextEdit::NoWrap);
+
+		QFont font("Courier");
+		font.setStyleHint(QFont::TypeWriter);
+		font.setFixedPitch(true);
+		itemTe->setFont(font);
+		vb->addWidget(itemTe);
+	
+		QString txt;
+		foreach(QString str, items)
+		{
+	  		txt+=str+ "\n";
+		}
+		itemTe->setPlainText(txt);
+	}
+	
+	//-----------------------
+	// Buttons 
+	//-----------------------
+	
+	QDialogButtonBox *bb= new QDialogButtonBox(this);
+	bb->addButton(new QPushButton(QPixmap(":/mail/mail_send.svg"),tr("Send"),this),
+		      QDialogButtonBox::AcceptRole);	
+	
+	//bb->addButton(QDialogButtonBox::Ok);	
+	bb->addButton(QDialogButtonBox::Cancel);	
+	vb->addWidget(bb);
+
+	connect(bb, SIGNAL(accepted()), 
+		this, SLOT(accept()));
+	
+	connect(bb, SIGNAL(rejected()), 
+		this, SLOT(reject()));
+		
+		
+	readSettings();	
+}
+
+void MvQMailDialog::accept()
+{
+  	if(to().isEmpty())
+	{
+	  	QMessageBox::critical(this,tr("No address specified"),
+				      tr("Cannot send email!<br> No <b>recepient</b> is specified!"));
+		return;
+	}
+	else
+	{
+	  	writeSettings();
+  		QDialog::accept();
+	}	
+}
+
+void MvQMailDialog::reject()
+{
+  	writeSettings();
+  	QDialog::reject();
+}
+
+void MvQMailDialog::closeEvent(QCloseEvent *event)
+{
+	writeSettings();
+	event->accept();
+}  
+
+QString MvQMailDialog::to() const
+{
+  	return toLe_->text();
+}
+
+QString MvQMailDialog::cc() const
+{
+  	return ccLe_->text();
+}
+	
+QString MvQMailDialog::subject() const
+{
+  	return subjLe_->text();
+}
+	
+QString MvQMailDialog::message() const
+{
+  	return msgTe_->toPlainText();
+}
+
+QString MvQMailDialog::formatFileSize(qint64 size) const
+{
+  	QString col;
+  	if(size < 1000000)
+	  	col="green";
+	else if(size < 5000000)
+	  	col="orange";
+	else
+	  	col="red";
+  
+	QString str;
+  	if(size < 1024)
+	  	str=QString::number(size) + " B";
+	else if(size < 1024*1024)
+	  	str=QString::number(size/1024) + " KB";
+	else if(size < 1024*1024*1024)
+	  	str=QString::number(size/(1024*1024)) + " MB";
+	else
+	  	str=QString::number(size/(1024*1024*1024)) + " GB";
+
+	return "<font color=\"" + col + "\">" + str + "</font>";
+	
+}
+
+void  MvQMailDialog::readSettings()
+{
+	QSettings settings("ECMWF","MV4-MvQMailDialog");
+  	
+	settings.beginGroup("main");	
+	if(settings.contains("size"))
+	{  
+		resize(settings.value("size").toSize());
+	}
+	else
+	{
+	  	resize(QSize(500,420));
+	}  
+	
+	toLst_=settings.value("toLst").toStringList();
+	if(toLe_->completer() == 0)
+	{  
+		if(toLst_.count() > 0)
+		  	toLe_->setCompleter(new QCompleter(toLst_,this));
+	}
+	
+	settings.endGroup(); 
+}
+
+void  MvQMailDialog::writeSettings()
+{
+  	QSettings settings("ECMWF","MV4-MvQMailDialog");
+	
+	settings.clear();
+	
+	settings.beginGroup("main");
+	settings.setValue("size",size());
+	
+	toLst_.prepend(to());
+	toLst_.removeDuplicates();
+	
+	while(toLst_.count() > 20)
+		toLst_.pop_back();
+	
+	settings.setValue("toLst",toLst_);
+	
+	settings.endGroup();
+}  
diff --git a/src/libMvQtGui/MvQMailDialog.h b/src/libMvQtGui/MvQMailDialog.h
new file mode 100644
index 0000000..90d130c
--- /dev/null
+++ b/src/libMvQtGui/MvQMailDialog.h
@@ -0,0 +1,48 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQMailDialog_H
+#define MvQMailDialog_H
+
+#include <QDialog>
+#include <string>
+
+class QLineEdit;
+class QPlainTextEdit;
+
+class MvQMailDialog : public QDialog
+{
+Q_OBJECT  
+  
+public: 
+ 	MvQMailDialog(const std::string&,const std::string&);
+	QString to() const;
+	QString cc() const;
+	QString subject() const;
+	QString message() const;
+  
+public slots:
+	void accept();
+	void reject();
+	
+protected:
+	void closeEvent(QCloseEvent *);
+	QString formatFileSize(qint64 size) const;
+	void readSettings();
+	void writeSettings();
+	
+	QLineEdit* toLe_;
+	QLineEdit* ccLe_;
+	QLineEdit* subjLe_;
+	QPlainTextEdit *msgTe_;
+	QStringList toLst_;
+};	
+
+#endif
+	
\ No newline at end of file
diff --git a/src/libMvQtGui/MvQMainWindow.cc b/src/libMvQtGui/MvQMainWindow.cc
index e2c135d..1487b4f 100644
--- a/src/libMvQtGui/MvQMainWindow.cc
+++ b/src/libMvQtGui/MvQMainWindow.cc
@@ -43,6 +43,8 @@ MvQMainWindow::MvQMainWindow(QWidget *parent) : QMainWindow(parent)
 	menuOrder_ << FileMenu << EditMenu << ViewMenu << NavigateMenu << BookmarksMenu << HistoryMenu <<
 	           ProfilesMenu << AnimationMenu << StepMenu << 
 	           ZoomMenu << SelectionMenu << ToolsMenu << SettingsMenu << HelpMenu;
+		   
+	setIconSize(QSize(20,20));
 	
 }
 
@@ -193,8 +195,6 @@ QToolBar *MvQMainWindow::createToolBar(QString name,QString objectName,Qt::ToolB
 		addToolBar(Qt::RightToolBarArea,toolBar);
 	}
 
-	toolBar->setIconSize(QSize(22,22));
-	
 	return toolBar;
 }
 
@@ -203,17 +203,28 @@ void MvQMainWindow::populate(QMenu *menu, QToolBar * toolBar, QList<MvQMenuItem*
 	if(!menu && !toolBar)
 		return;
 
+	QMenu *subMenu=0;
+
 	foreach(MvQMenuItem* item,items)
 	{
-		const char *type_char=item->object()->metaObject()->className(); 
+		if(!item->object())
+			continue;  
+	  
+	  	const char *type_char=item->object()->metaObject()->className(); 
 		QString type(type_char);
 		if(type == "QAction")
-		{
-			if(item->targets().testFlag(MvQMenuItem::MenuTarget))
-			{
-				QAction* action=static_cast<QAction*>(item->object());
-				if(menu) menu->addAction(action);
+		{			
+		  	if(item->targets().testFlag(MvQMenuItem::SubMenuTarget))
+			{							  
+			  	QAction* action=static_cast<QAction*>(item->object());
+				if(subMenu)  subMenu->addAction(action);
 			}
+			else if(item->targets().testFlag(MvQMenuItem::MenuTarget))
+			{							  
+			  	QAction* action=static_cast<QAction*>(item->object());
+				if(menu)  menu->addAction(action);
+			}
+			
 			if(item->targets().testFlag(MvQMenuItem::ToolBarTarget))
 			{
 				QAction* action=static_cast<QAction*>(item->object());
@@ -221,7 +232,17 @@ void MvQMainWindow::populate(QMenu *menu, QToolBar * toolBar, QList<MvQMenuItem*
 			}
 
 		}
-		else if(type == "QWidget" || type == "QPushButton" ||  type == "QToolButton" ||
+		else if(type == "QMenu")
+		{
+		  	subMenu=static_cast<QMenu*>(item->object());
+			menu->addMenu(subMenu);		  
+		}  
+		else if(toolBar && item->targets().testFlag(MvQMenuItem::ToolBarTarget))
+		{
+		  	QWidget* w=static_cast<QWidget*>(item->object());
+			if(w) toolBar->addWidget(w);
+		}
+		/*else if(type == "QWidget" || type == "QPushButton" ||  type == "QToolButton" ||
 			type == "MvQZoomStackWidget" || type == "QComboBox" ||
 			type == "QLabel" || type == "QLineEdit" || type == "MvQSceneComboBox")
 		{
@@ -230,7 +251,7 @@ void MvQMainWindow::populate(QMenu *menu, QToolBar * toolBar, QList<MvQMenuItem*
 				QWidget* w=static_cast<QWidget*>(item->object());
 				if(toolBar) toolBar->addWidget(w);
 			}
-		}
+		}*/
 	}
 }
 bool MvQMainWindow::isToolBarItemPresent(QList<MvQMenuItem*> items)
@@ -281,7 +302,8 @@ bool MvQMainWindow::isMenuNeeded(QList<MvQMenuItem*> items)
 {
 	foreach(MvQMenuItem* item,items)
 	{	
-		if(item->targets().testFlag(MvQMenuItem::MenuTarget))
+		if(item->targets().testFlag(MvQMenuItem::MenuTarget) || 
+		   item->targets().testFlag(MvQMenuItem::SubMenuTarget))
 		{
 			return true;
 		}
@@ -435,4 +457,4 @@ QAction* MvQMainWindow::createSeparator(QObject *parent)
 	QAction *ac=new QAction(parent);
      	ac->setSeparator(true);
 	return ac;
-}	
\ No newline at end of file
+}	
diff --git a/src/libMvQtGui/MvQMenuItem.h b/src/libMvQtGui/MvQMenuItem.h
index 4ccc6f3..b95053c 100644
--- a/src/libMvQtGui/MvQMenuItem.h
+++ b/src/libMvQtGui/MvQMenuItem.h
@@ -19,7 +19,7 @@ class QObject;
 class MvQMenuItem
 {
 public:
-	enum Target {NoTarget = 0x0, MenuTarget = 0x1, ToolBarTarget = 0x2};
+	enum Target {NoTarget = 0x0, MenuTarget = 0x1, ToolBarTarget = 0x2, SubMenuTarget = 0x4};
 	Q_DECLARE_FLAGS(Targets,Target);
 
 	MvQMenuItem(QObject* o,Targets t = Targets(MenuTarget|ToolBarTarget) ) : object_(o), targets_(t) {};
diff --git a/src/libMvQtGui/MvQOdbDataWidget.cc b/src/libMvQtGui/MvQOdbDataWidget.cc
index 568a1be..96d20b9 100644
--- a/src/libMvQtGui/MvQOdbDataWidget.cc
+++ b/src/libMvQtGui/MvQOdbDataWidget.cc
@@ -567,4 +567,4 @@ void MvQOdbDataWidget::setVisibleColumns(QStringList lst)
 		}	
 	}
 }	
-	
\ No newline at end of file
+	
diff --git a/src/libMvQtGui/MvQOdbModel.cc b/src/libMvQtGui/MvQOdbModel.cc
index d088046..75db0ee 100644
--- a/src/libMvQtGui/MvQOdbModel.cc
+++ b/src/libMvQtGui/MvQOdbModel.cc
@@ -121,6 +121,7 @@ MvQOdbColumnModel::MvQOdbColumnModel(bool showTableColumn) :
 	typeMap_[MvQOdbColumn::None]="none";
 	typeMap_[MvQOdbColumn::Int]="int";
 	typeMap_[MvQOdbColumn::Float]="float";
+	typeMap_[MvQOdbColumn::Double]="double";
 	typeMap_[MvQOdbColumn::String]="string";
 	typeMap_[MvQOdbColumn::Bitfield]="bitfield";
 }
@@ -543,6 +544,10 @@ QVariant MvQOdbDataModel::data( const QModelIndex& index, int role ) const
 	else if(col->type() == MvOdbColumn::Float)
 	{
 		return  col->floatData().at(dataRow);
+	}
+	else if(col->type() == MvOdbColumn::Double)
+	{
+		return  col->doubleData().at(dataRow);
 	}	
 	else if(col->type() == MvOdbColumn::String)
 	{
@@ -621,4 +626,4 @@ void MvQOdbDataModel::setFilter(const vector<int>& filter)
 bool MvQOdbDataModel::filtered() const
 {
   	return (data_ && data_->chunkSize() == 0 && filter_.size() > 0);
-}	
\ No newline at end of file
+}	
diff --git a/src/libMvQtGui/MvQPixmapCache.cc b/src/libMvQtGui/MvQPixmapCache.cc
new file mode 100644
index 0000000..b3c86c1
--- /dev/null
+++ b/src/libMvQtGui/MvQPixmapCache.cc
@@ -0,0 +1,86 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQPixmapCache.h"
+
+#include <QImageReader>
+
+#include "Path.h"
+
+MvQPixmapCache::MvQPixmapCache(QPixmap pix)  : 
+	defaultPixmap_(pix),
+	size_(16)
+{
+}
+
+QPixmap MvQPixmapCache::pixmap(QString s)
+{
+	QMap<QString,QPixmap>::iterator it=pixmaps_.find(s);
+	if(it != pixmaps_.end())
+	{	  	
+	  	return it.value();
+	}
+	else 
+	{
+	  	QMap<QString,QString>::iterator itP=mvIconPaths_.find(s);
+		if(itP != mvIconPaths_.end())
+		{			
+			QPixmap p=create(mvIconPath(itP.value()));			
+			pixmaps_.insert(itP.key(),p);		
+			return p;
+		}	  
+	}
+	
+	return defaultPixmap_;
+}
+
+void MvQPixmapCache::addMvIconPath(QString key,QString path)
+{
+	mvIconPaths_[key]=path;
+}
+
+QPixmap MvQPixmapCache::create(QString path)
+{	
+  	QImageReader imgR(path);
+	imgR.setScaledSize(QSize(size_,size_));
+	QImage img=imgR.read();
+	return QPixmap::fromImage(img);
+}	
+
+QString MvQPixmapCache::mvIconPath(QString def) const
+{  	
+	  	Path p(def.toStdString());
+		string fname=p.name();
+		string::size_type pos=fname.rfind(".icon");
+		if(pos != string::npos)
+		{
+		   	fname=fname.substr(0,pos);
+		}   	
+	
+		string s=getenv("METVIEW_DIR_SHARE");
+		string svgName=s + "/icons_mv5/" +  fname + ".svg";
+		
+		Path psvg(s + "/icons_mv5/" +  fname + ".svg");
+		if(psvg.exists())
+		{  
+			return QString::fromStdString(psvg.str());
+		}
+		else
+		{	  
+			Path pxpm(s + "/icons_mv5/" +  fname + ".xpm");
+			if(pxpm.exists())
+			{  
+				return QString::fromStdString(pxpm.str());
+			}
+		}
+		
+		return QString();
+}
+	
+	
\ No newline at end of file
diff --git a/src/libMvQtGui/MvQPixmapCache.h b/src/libMvQtGui/MvQPixmapCache.h
new file mode 100644
index 0000000..6b2a9a3
--- /dev/null
+++ b/src/libMvQtGui/MvQPixmapCache.h
@@ -0,0 +1,35 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQPixmapCache_H
+#define MvQPixmapCache_H
+
+#include <QMap>
+#include <QPixmap>
+
+class MvQPixmapCache
+{
+public:		
+	MvQPixmapCache(QPixmap);
+	void add(QString key,QPixmap pix) {pixmaps_[key]=pix;}
+	void addMvIconPath(QString,QString);
+	QPixmap pixmap(QString);	
+
+private:
+	QPixmap create(QString);
+	QString mvIconPath(QString) const;
+	
+	QPixmap defaultPixmap_;
+	int size_;
+	QMap<QString,QPixmap> pixmaps_;
+	QMap<QString,QString> mvIconPaths_;
+	
+};
+
+#endif
\ No newline at end of file
diff --git a/src/libMvQtGui/MvQProfileView.cc b/src/libMvQtGui/MvQProfileView.cc
index d0d4019..2d994ce 100644
--- a/src/libMvQtGui/MvQProfileView.cc
+++ b/src/libMvQtGui/MvQProfileView.cc
@@ -375,10 +375,19 @@ void MvQProfileItem::adjustFrame()
 		  	tickXStep_=pow(10.,digits-1);
 		}	
 	}
+	else if(fabs(valMin) > 0.0000000001  && fabs(valMin) < 1000000000.)
+	{
+	  	 int digits=static_cast<int>(log10(valMin)); 
+	         tickXStep_=pow(10.,digits);
+		 if(fabs(valMin/tickXStep_) < 3)
+		 {
+		  	tickXStep_=pow(10.,digits-1);
+		 }		         
+	}  	
 	else
 	{
 	  	tickXStep_=1;
-	}  	
+	}
 	
 	tickXLabelStep_=tickXStep_;
 	tickXLabelStepOffset_=0;
@@ -604,6 +613,13 @@ bool MvQProfileItem::updateValue(const MvProfileChange& ch)
 		int index=ch.level();
 	  	float val=data_->value(index);
 		nodes_.at(index)->setPos((val-frameXMin_)*xRatio_,frameRect_.top()+(index-firstIndex_)*yRatio_);  
+				
+		//See if the coordinate system needs to be adjusted to the data value range
+		if(val < frameXMin_ || val > frameXMax_)
+		  	view_->adjustValueRange();
+		else  
+		  	checkValueRange();
+		
 		return true;
 	}
 	return false;
@@ -846,6 +862,21 @@ void MvQProfileItem::valueRange(float &valMin,float &valMax)
 	}
 }
 
+void MvQProfileItem::checkValueRange()
+{
+	//See if the coordinate system needs to be adjusted to the data value range
+	if(!presetMinMax_ && !data_->isRangeSet())
+	{
+		float valMin, valMax;
+		data_->valueRange(firstIndex_,lastIndex_,valMin,valMax);
+		valMax=(fabs(valMax) > fabs(valMin))?fabs(valMax):fabs(valMin);
+		float frameMax=(fabs(frameXMax_) > fabs(frameXMin_))?fabs(frameXMax_):fabs(frameXMin_);
+			
+		if(valMax > 0.0000000001 && valMax < frameMax/100.)
+			  view_->adjustValueRange();
+	}
+}	
+				
 bool MvQProfileItem::cursorData(QPointF scenePos,QString &txt)
 {
 	QPointF pos=mapFromScene(scenePos);
diff --git a/src/libMvQtGui/MvQProfileView.h b/src/libMvQtGui/MvQProfileView.h
index fb526e2..3b74820 100644
--- a/src/libMvQtGui/MvQProfileView.h
+++ b/src/libMvQtGui/MvQProfileView.h
@@ -117,6 +117,7 @@ protected:
         void adjustFrame();
 	void adjustData();
 	void nodeMoved(MvQNodeItem*);
+	void checkValueRange();
   
 	MvQProfileView* view_;
 	MvProfileData* data_;
diff --git a/src/libMvQtGui/MvQRangeWidget.cc b/src/libMvQtGui/MvQRangeWidget.cc
index d0050d9..400a56e 100644
--- a/src/libMvQtGui/MvQRangeWidget.cc
+++ b/src/libMvQtGui/MvQRangeWidget.cc
@@ -67,6 +67,9 @@ void MvQRangeWidget::setRange(int start, int end)
 	
 	if(values_.count() >0)
 	{
+		if(rangeEndIndex_ >values_.count()-1)
+		   rangeEndIndex_=values_.count()-1;	
+		
 		updateSpins();
 		plot_->update();
 	}
@@ -87,6 +90,14 @@ void MvQRangeWidget::reset(QVector<float> d)
 		rangeStartIndex_=0;
 		rangeEndIndex_=values_.count()-1;
 	}	
+	else
+	{
+	  	if(rangeStartIndex_ > values_.count()-1)
+		   rangeStartIndex_=0;
+		if(rangeEndIndex_ >values_.count()-1)
+		   rangeEndIndex_=values_.count()-1;	
+	}
+	
 	
 	ignoreSpinChange_=true;
 	startSpin_->setRange(1,values_.count());
diff --git a/src/libMvQtGui/MvQScmDataWidget.cc b/src/libMvQtGui/MvQScmDataWidget.cc
index 427cd5e..51113a1 100644
--- a/src/libMvQtGui/MvQScmDataWidget.cc
+++ b/src/libMvQtGui/MvQScmDataWidget.cc
@@ -12,7 +12,9 @@
 #include <QDebug>
 #include <QHeaderView>
 #include <QHBoxLayout>  
+#include <QInputDialog>
 #include <QLabel>
+#include <QMenu>
 #include <QPushButton>
 #include <QSettings>
 #include <QToolButton>
@@ -23,209 +25,375 @@
 #include "MvQScmDataWidget.h"
 #include "MvQScmModel.h"
 
-MvQScmTab::MvQScmTab(QWidget* parent) :
-  QTabWidget(parent)
-{ 	
-	tabBar()->setProperty("mvStyle","folder");
-}
+#include <algorithm>
 
-MvQScmDataWidget::MvQScmDataWidget(QWidget *parent) : 
-         QWidget(parent),
-         data_(0),
-         usePl_(false)
-{	
-	//-----------------------
-	// The main layout 
-	//-----------------------
-  
-	QVBoxLayout *mainLayout = new QVBoxLayout;
-        mainLayout->setObjectName(QString::fromUtf8("vboxLayout"));
-	mainLayout->setContentsMargins(0,0,0,1);
-	mainLayout->setSpacing(1);
-	setLayout(mainLayout);
+//===============================================================
+//
+// MvQScmDataPanel
+//
+//===============================================================
+
+MvQScmDataPanel::MvQScmDataPanel(QWidget *parent) : 
+	QWidget(parent), 
+	model_(0), 
+	master_(false)
+{
+	QVBoxLayout *layout= new QVBoxLayout;
+	layout->setContentsMargins(0,0,0,0);
+	setLayout(layout);
 	
-	//-------------------
-	// Central tab	
-	//-------------------
-		
-	paramTab_= new MvQScmTab(this); 	
+	filterModel_= new MvQScmProfileFilterModel(this);
+	filterModel_->setDynamicSortFilter(true);
 	
-	mainLayout->addWidget(paramTab_,1);
+	view_=new QTableView;
+	view_->setObjectName("paramMlView");
+	view_->setProperty("mvStyle",3);	
+	view_->setAlternatingRowColors(true);
+	view_->setModel(filterModel_);	
+	layout->addWidget(view_);
+	
+	MvQScmTableViewDelegate *mlDelegate=new MvQScmTableViewDelegate(this);
+	view_->setItemDelegate(mlDelegate);
 		
-	setupParamBox();
+	connect(view_,SIGNAL(clicked(const QModelIndex&)),
+		this,SLOT(slotParamSelected(const QModelIndex&)));	
+	
+	connect(view_,SIGNAL(pressed(const QModelIndex&)),
+		this,SLOT(slotParamSelected(const QModelIndex&)));
+}	
+
+
+void MvQScmDataPanel::setMasterParam(MvScmVar *var,MvScmVar *var1)
+{
+  	masterParams_[var]=var1;
+}
+
+void MvQScmDataPanel::setStep(int step)
+{
+	prevIndex_=filterModel_->mapToSource(view_->currentIndex());	
+	model_->setStep(step);
+}	
 	
-	paramTab_->addTab(paramMlPanel_,tr("Model levels"));
-	paramTab_->addTab(paramSoilPanel_,tr("Soil level"));
-	paramTab_->addTab(paramSurfPanel_,tr("Surface"));
-	if(usePl_)
+void MvQScmDataPanel::reselectIndex(bool select)
+{
+	QModelIndex actIndex=model_->index(prevIndex_.row(),prevIndex_.column());	
+	view_->setCurrentIndex(filterModel_->mapFromSource(actIndex));			
+	if(select)
+	{
+		if(masterParams_.size() == 0)
+		{
+		  	 slotParamSelected(actIndex);	
+		}
+		else 
+		{
+			if(actIndex.isValid())
+			{		  	
+	  			std::map<MvScmVar*,MvScmVar*>::iterator it=masterParams_.find(vars_.at(actIndex.column())); 
+				if(it != masterParams_.end())
+				{
+		  			slotParamSelected(actIndex);	
+				}	
+				else	
+				{	
+					emit selectParamFromMasterPanel();
+				}
+			}
+			else emit selectParamFromMasterPanel();			  	
+		}	
+	}
+}
+
+void MvQScmDataPanel::slotParamSelected(int index)
+{
+	if(index >=0 && index < static_cast<int>(vars_.size()))
 	{
-	  	paramTab_->addTab(paramPlPanel_,tr("Pressure level"));
+		MvScmVar *var=vars_.at(index);
+		int step=model_->step(); 
+		
+		std::map<MvScmVar*,MvScmVar*>::iterator it=masterParams_.find(var); 
+		if(it != masterParams_.end())
+		{
+		  	emit paramSelected(it->second,step);
+		}
+		else if(masterParams_.size() ==0)
+		{  	
+			emit paramSelected(var,step);
+		}  
 	}
-	
-	//----------------------------
-	// Signals and slots
-	//----------------------------
+}	
 
-	connect(paramTab_,SIGNAL(currentChanged(int)),
-		this,SLOT(slotTabIndexChanged(int)));
-}
- 
-MvQScmDataWidget::~MvQScmDataWidget()
+void MvQScmDataPanel::slotParamSelected(const QModelIndex& index)
 {
-	writeSettings();
+	if(!index.isValid())
+	{
+	  	emit stepChanged(model_->step());
+	}
+	else
+	{
+	  	slotParamSelected(index.column());
+	}	
 }
 
-void MvQScmDataWidget::setupParamBox()
+bool MvQScmDataPanel::selectParam(MvScmVar* var)
 {
-	QVBoxLayout *layout;
+  	if(!var)
+	  	return false;
 	
-	//--------------------------------
-	// Model levels
-	//--------------------------------
+	QModelIndex index=filterModel_->mapFromSource(model_->indexForVar(var,model_->step(),0));
+	if(index.isValid())
+	{
+		view_->scrollTo(index,QAbstractItemView::PositionAtCenter);
+		return true;
+	}
+	
+	return false;
+}	
 
-	paramMlPanel_=new QWidget;
-	layout= new QVBoxLayout;
-	layout->setContentsMargins(0,0,0,0);
-	paramMlPanel_->setLayout(layout);
+void MvQScmDataPanel::showEditableOnly(bool b)
+{
+	filterModel_->setShowEditableOnly(b);
+}	
+
+bool MvQScmDataPanel::update(const MvScmProfileChange& item)
+{ 
+  	QModelIndex index=filterModel_->mapFromSource(model_->indexForChange(item));
+	if(index.isValid())
+	{  	
+		view_->update(index);
+		view_->scrollTo(index,QAbstractItemView::PositionAtCenter);
+			
+		if(item.dependantVar())
+		{
+			index=model_->indexForVar(item.dependantVar(),item.step(),item.level());
+			view_->update(filterModel_->mapFromSource(index));
+		}
+		return true;
+	}
 	
+	return false;
+}
+
+void MvQScmDataPanel::reload()
+{
+  	model_->reload();
+}	
+
+//===============================================================
+//
+// MvQScmProfileDataPanel
+//
+//===============================================================
+
+MvQScmProfileDataPanel::MvQScmProfileDataPanel(QWidget *parent) : 
+   MvQScmDataPanel(parent),
+   header_(0)
+{
 	//Column tree
-	paramMlModel_= new MvQScmProfileModel;
-	
-	paramMlFilterModel_= new MvQScmProfileFilterModel(this);
-	paramMlFilterModel_->setSourceModel(paramMlModel_);
-	paramMlFilterModel_->setDynamicSortFilter(true);
-	
-	paramMlView_=new QTableView;
-	paramMlView_->setObjectName("paramMlView");
-	paramMlView_->setProperty("mvStyle",3);	
-	paramMlView_->setAlternatingRowColors(true);
-	paramMlView_->setModel(paramMlFilterModel_);	
-	
-	MvQScmTableViewDelegate *mlDelegate=new MvQScmTableViewDelegate(this);
-	paramMlView_->setItemDelegate(mlDelegate);
-	
-	layout->addWidget(paramMlView_);
+	model_= new MvQScmProfileModel();
+	filterModel_->setSourceModel(model_);
 	
-	connect(paramMlModel_,SIGNAL(dataEdited(const MvScmProfileChange&)),
+	connect(model_,SIGNAL(dataEdited(const MvScmProfileChange&)),
 		this,SIGNAL(dataEdited(const MvScmProfileChange&)));
 	
-	connect(paramMlView_,SIGNAL(clicked(const QModelIndex&)),
-		this,SLOT(slotParamMlSelected(const QModelIndex&)));	
+	header_=view_->horizontalHeader();
+	header_->setContextMenuPolicy(Qt::CustomContextMenu);
 	
-	connect(paramMlView_,SIGNAL(pressed(const QModelIndex&)),
-		this,SLOT(slotParamMlSelected(const QModelIndex&)));
+	connect(header_,SIGNAL(sectionClicked(int)),
+		this,SLOT(slotParamSelected(int)));
 		
-	QHeaderView *header=paramMlView_->horizontalHeader();
+	connect(header_,SIGNAL(customContextMenuRequested(const QPoint &)),
+                this, SLOT(slotHeaderContextMenu(const QPoint &)));
+		
+	//Dymanic filter did not work somehow, so we need to update the filter model in this way	
+	filterModel_->setShowEditableOnly(filterModel_->showEditableOnly());	
+}  
+
+void MvQScmProfileDataPanel::init(const vector<MvScmVar*>& vars,int step,const vector<float>& levels,const string& levelName,
+				  const vector<MvScmVar*>& editableVars)
+{
+  	vars_=vars;
+	editableVars_=editableVars;
+	model_->setData(vars,step,levels,levelName);
+	model_->setEditableVars(editableVars);
+}
+
+
+void MvQScmProfileDataPanel::slotHeaderContextMenu(const QPoint &position)
+{
+	int section=header_->logicalIndexAt(position); 
 	
-	connect(header,SIGNAL(sectionClicked(int)),
-		this,SLOT(slotParamMlSelected(int)));
+	if( section< 0 || section >= header_->count())
+		return;
 	
-	//--------------------------------
-	// Pressure levels
-	//--------------------------------
-
-	if(usePl_)
-	{
-		paramPlPanel_=new QWidget;
-		layout= new QVBoxLayout;
-		layout->setContentsMargins(0,0,0,0);
-		paramPlPanel_->setLayout(layout);
+	bool editable=(std::find(editableVars_.begin(),editableVars_.end(),vars_.at(section)) != editableVars_.end())?true:false;
 	
-		//Column tree
-		paramPlModel_= new MvQScmProfileModel;
+	if(!editable)
+	  	return;
 	
-		paramPlView_=new QTableView;
-		paramPlView_->setObjectName("paramPlView");
-		paramPlView_->setProperty("mvStyle",3);	
-		paramPlView_->setAlternatingRowColors(true);
-   
-		paramPlView_->setModel(paramPlModel_);	
+	QList<QAction*> actions;
+	QAction *action;
 	
-		MvQScmTableViewDelegate *plDelegate=new MvQScmTableViewDelegate(this);
-		paramPlView_->setItemDelegate(plDelegate);
+	action = new QAction(this);
+        action->setObjectName(QString::fromUtf8("actionAssign"));
+	action->setText(tr("Set values"));
+	action->setData("assign");	
+	actions << action;
 	
-		layout->addWidget(paramPlView_);
-	}
 	
-	//--------------------------------
-	// Soil levels
-	//--------------------------------
+	action = new QAction(this);
+        action->setObjectName(QString::fromUtf8("actionAssign"));
+	action->setText(tr("Set values to 0"));
+	action->setData("assignToZero");	
+	actions << action;
+		
+    	if(actions.count() > 0 && 
+	   (action=QMenu::exec(actions, header_->mapToGlobal(position))) != 0)
+	{
+		QString key=action->data().toString();
+		MvScmVar *var=vars_.at(section);
+		if(key == "assign")
+		{			  
+			assignValue(var);		  
+		}
+		
+		if(key == "assignToZero")
+		{			  
+			assignValue(var,0.);		  
+		}
+	}	
+			
+	foreach(QAction *action,actions)
+	{
+		delete action;
+	}
+}
 
-	paramSoilPanel_=new QWidget;
-	layout= new QVBoxLayout;
-	layout->setContentsMargins(0,0,0,0);
-	paramSoilPanel_->setLayout(layout);
-	
+void MvQScmProfileDataPanel::assignValue(MvScmVar *var)
+{
+	bool ok;
+     	double val=QInputDialog::getDouble(0, 
+				tr("Assign value"),
+                        	tr("New value:"),
+                                0.,-10000000,10000000,10,&ok);
+				
+	if(ok)
+        { 			
+		assignValue(var,val);	
+	}	
+}
+
+void MvQScmProfileDataPanel::assignValue(MvScmVar *var,double val)
+{
+  	vector<MvScmProfileChange> ch;  	
+	var->setValues(model_->step(),val,ch);
+	for(unsigned int  i=0; i < ch.size(); i++)
+	  	emit dataEdited(ch[i]);	 
+}  
+  
+  
+//===============================================================
+//
+// MvQScmProfileDataPanel
+//
+//===============================================================
+
+
+MvQScmSurfaceDataPanel::MvQScmSurfaceDataPanel(QWidget *parent) : MvQScmDataPanel(parent)
+{
 	//Column tree
-	paramSoilModel_= new MvQScmProfileModel;
-	
-	paramSoilView_=new QTableView;
-	paramSoilView_->setObjectName("paramSoilView");
-	paramSoilView_->setProperty("mvStyle",3);	
-	paramSoilView_->setAlternatingRowColors(true);
-   
-	paramSoilView_->setModel(paramSoilModel_);	
+	model_= new MvQScmSurfaceModel();
+	filterModel_->setSourceModel(model_);
 	
-	MvQScmTableViewDelegate *soilDelegate=new MvQScmTableViewDelegate(this);
-	paramSoilView_->setItemDelegate(soilDelegate);
-	
-	layout->addWidget(paramSoilView_);
-	
-	connect(paramSoilModel_,SIGNAL(dataEdited(const MvScmProfileChange&)),
+	connect(model_,SIGNAL(dataEdited(const MvScmProfileChange&)),
 		this,SIGNAL(dataEdited(const MvScmProfileChange&)));
 		
-	connect(paramSoilView_,SIGNAL(clicked(const QModelIndex&)),
-		this,SLOT(slotParamSoilSelected(const QModelIndex&)));	
-	
-	connect(paramSoilView_,SIGNAL(pressed(const QModelIndex&)),
-		this,SLOT(slotParamSoilSelected(const QModelIndex&)));		
-		
-	header=paramSoilView_->horizontalHeader();
+	QHeaderView *header=view_->verticalHeader();
 	
 	connect(header,SIGNAL(sectionClicked(int)),
-		this,SLOT(slotParamSoilSelected(int)));
+		this,SLOT(slotParamSelected(int)));
 		
-	//--------------------------------
-	// Surface
-	//--------------------------------
+	//Dymanic filter did not work somehow, so we need to update the filter model in this way	
+	filterModel_->setShowEditableOnly(filterModel_->showEditableOnly());		
+}  
 
-	paramSurfPanel_=new QWidget;
-	layout= new QVBoxLayout;
-	layout->setContentsMargins(0,0,0,0);
-	paramSurfPanel_->setLayout(layout);
-	
-	//Column tree
-	paramSurfModel_= new MvQScmSurfaceModel;
-	
-	paramSurfView_=new QTableView;
-	paramSurfView_->setObjectName("paramSoilView");
-	paramSurfView_->setProperty("mvStyle",3);	
-	paramSurfView_->setAlternatingRowColors(true);
-   
-	paramSurfView_->setModel(paramSurfModel_);	
-	
-	MvQScmTableViewDelegate *surfDelegate=new MvQScmTableViewDelegate(this);
-	paramSurfView_->setItemDelegate(surfDelegate);
-	
-	layout->addWidget(paramSurfView_);
+void MvQScmSurfaceDataPanel::init(const vector<MvScmVar*>& vars,int step,
+				  const vector<MvScmVar*>& editableVars)
+{
+  	vars_=vars;
+	model_->setData(vars,step);
+	model_->setEditableVars(editableVars);
+}
+
+//===============================================================
+//
+// MvQScmDataWidget
+//
+//===============================================================
+
+MvQScmTab::MvQScmTab(QWidget* parent) :
+  QTabWidget(parent)
+{ 	
+	tabBar()->setProperty("mvStyle","folder");
+}
+
+MvQScmDataWidget::MvQScmDataWidget(QWidget *parent) : 
+         QWidget(parent),
+         data_(0),
+         masterPanel_(0)
+{	
+	//-----------------------
+	// The main layout 
+	//-----------------------
+  
+	QVBoxLayout *mainLayout = new QVBoxLayout;
+        mainLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+	mainLayout->setContentsMargins(0,0,0,1);
+	mainLayout->setSpacing(1);
+	setLayout(mainLayout);
 	
-	connect(paramSurfModel_,SIGNAL(dataEdited(const MvScmProfileChange&)),
-		this,SIGNAL(dataEdited(const MvScmProfileChange&)));
+	//-------------------
+	// Central tab	
+	//-------------------
+		
+	tab_= new MvQScmTab(this); 	
 	
-	connect(paramSurfView_,SIGNAL(clicked(const QModelIndex&)),
-		this,SLOT(slotParamSurfSelected(const QModelIndex&)));	
+	mainLayout->addWidget(tab_,1);
 	
-	connect(paramSurfView_,SIGNAL(pressed(const QModelIndex&)),
-		this,SLOT(slotParamSurfSelected(const QModelIndex&)));	
-				
-	header=paramSurfView_->verticalHeader();
+	connect(tab_,SIGNAL(currentChanged(int)),
+		this,SLOT(slotTabIndexChanged(int)));
+}
+ 
+MvQScmDataWidget::~MvQScmDataWidget()
+{
+	writeSettings();
+}
+
+void MvQScmDataWidget::clearPanels()
+{
+  	tab_->clear();
+	for(std::map<PanelType,MvQScmDataPanel*>::iterator it=panels_.begin(); it != panels_.end(); it++)
+	{
+  		delete it->second;
+	}
 	
-	connect(header,SIGNAL(sectionClicked(int)),
-		this,SLOT(slotParamSurfSelected(int)));	
+	masterPanel_=0;
+	tabToPanel_.clear();
+	panelToTab_.clear(); 
+}  
+
+void MvQScmDataWidget::addPanelToTab(MvQScmDataPanel *panel,PanelType type,QString title)
+{
+	tab_->addTab(panel,title);
+	int tabIndex=tab_->count()-1;
+	panelToTab_[type]=tabIndex;
+	tabToPanel_[tabIndex]=type;		
 }
-		
+
 void MvQScmDataWidget::init(MvScm *data,QList<MvScmVar*> editVars)
 {	
+  	//Delete all the panels
+  	clearPanels();
+  	
   	if(data->stepNum() <= 0)
 	{
 	  	data_=0;
@@ -236,223 +404,174 @@ void MvQScmDataWidget::init(MvScm *data,QList<MvScmVar*> editVars)
 
 	//Get editable variables	     
 	std::vector<MvScmVar*> editVec=editVars.toVector().toStdVector();
-
+		
 	int step=0;
+	MvQScmDataPanel *panel;
+
+	//-------------------------
+	// Model levels
+	//-------------------------
 	
-	//Model levels
-	paramMlModel_->setData(data_->modelLevel(),step,data_->modelLevelDim().values(),data_->modelLevelDim().longName());
-	paramMlModel_->setEditableVars(editVec);
+	//At the moment masterPanel_ has to be the model level panel !!!
 	
-	//Pressure levels	
-	if(usePl_)
-	{
-	  	paramPlModel_->setData(data_->pressureLevel(),step,data_->pressureLevelDim().values(),data_->pressureLevelDim().longName());
-	}
+	if(!data->modelLevelDim().isEmpty()) 
+	{		
+		panel=new MvQScmProfileDataPanel(this);
+		panels_[ModelLevPanel]=panel;
 	
+		//This will be the master panel
+		masterPanel_=panel;
+		
+		//Add to tab
+		addPanelToTab(panel,ModelLevPanel,tr("Model levels"));
+		
+		//init
+		panel->init(data_->modelLevel(),step,data_->modelLevelDim().values(),data_->modelLevelDim().longName(),editVec);
+	}
+		
+	//-------------------------
+	// Pressure levels
+	//-------------------------		
+	
+	//if(!data->pressureLevelDim().isEmpty())
+	if(0)
+	{		
+	  	panel=new MvQScmProfileDataPanel(this);
+		panels_[PressureLevPanel]=panel;
+	
+		//Add to tab
+		addPanelToTab(panel,PressureLevPanel,tr("Pressure levels"));
+			 
+		//init
+		panel->init(data_->pressureLevel(),step,data_->pressureLevelDim().values(),data_->pressureLevelDim().longName(),editVec);
+	}
+		
+	//-------------------------
 	//Soil levels
-	paramSoilModel_->setData(data_->soilLevel(),step,data_->soilLevelDim().values(),data_->soilLevelDim().longName());	
-	paramSoilModel_->setEditableVars(editVec);
+	//-------------------------
 	
-	//Surface
-	paramSurfModel_->setData(data_->surfaceLevel(),step);
-	paramSurfModel_->setEditableVars(editVec);
-
-	//Dymanic filter did not work somehow, so we need to update the filter model in this way
-	paramMlFilterModel_->setShowEditableOnly(paramMlFilterModel_->showEditableOnly());
+	if(!data->soilLevelDim().isEmpty())
+	{		
+	  	panel=new MvQScmProfileDataPanel(this);
+		panels_[SoilLevPanel]=panel;
 	
-	//Initial profile
-	slotParamMlSelected(data_->mlVarIndex(MvScm::TempML));
-
-	//Steps combo
+		//Add to tab
+		addPanelToTab(panel,SoilLevPanel,tr("Soil levels"));
+		
+		panel->init(data_->soilLevel(),step,data_->soilLevelDim().values(),data_->soilLevelDim().longName(),editVec);
+		
+		if(masterPanel_)
+		{
+			panel->setMasterParam(data_->soilVar(MvScm::TempSoil),data_->mlVar(MvScm::TempML));
+				
+			connect(panel,SIGNAL(selectMasterPanel()),
+				masterPanel_,SLOT(slotSelectCurrent()));
+		}		
+	}
+		
+	//-------------------------
+	//Surface - always exists
+	//------------------------
 	
-	//Steps slider
-	/*stepSlider_->setRange(0,steps.size()-1);	
-	stepSlider_->setTickInterval(1);
-	stepSlider_->setTickPosition(QSlider::TicksBelow);
+	panel=new MvQScmSurfaceDataPanel(this);
+	panels_[SurfaceLevPanel]=panel;
 	
-	connect(stepSlider_,SIGNAL(valueChanged(int)),
-		this,SLOT(slotStepSliderChanged(int)));*/
+	//Add to tab
+	addPanelToTab(panel,SurfaceLevPanel,tr("Surface and other 2D"));
+	
+	panel->init(data_->surfaceLevel(),step,editVec);
+	
+	if(masterPanel_)
+	{	
+		panel->setMasterParam(data_->surfVar(MvScm::TempSurf),data_->mlVar(MvScm::TempML));
+		
+		connect(panel,SIGNAL(selectMasterPanel()),
+			masterPanel_,SLOT(slotSelectCurrent()));
+	}
+	
+	//-----------------------------------
+	//Relaying signals from the panels
+	//-----------------------------------
+	
+	for(std::map<PanelType,MvQScmDataPanel*>::iterator it=panels_.begin(); it != panels_.end(); it++)
+	{
+		connect(it->second,SIGNAL(dataEdited(const MvScmProfileChange&)),
+			this,SIGNAL(dataEdited(const MvScmProfileChange&))); 
+			
+		connect(it->second,SIGNAL(paramSelected(MvScmVar*,int)),
+			this,SIGNAL(paramSelected(MvScmVar*,int)));
 			
+		connect(it->second,SIGNAL(stepChanged(int)),	
+			this,SIGNAL(stepChanged(int)));
+	}
+
+	//Initial profile	
+	if(masterPanel_)
+	{	
+	  	//!!!!!!!!!!!!!!!!!!
+		masterPanel_->slotParamSelected(data_->mlVarIndex(MvScm::TempML));
+	}			
 }
 
 void MvQScmDataWidget::slotStepChanged(int value)
 {
 	int step=value;
 	
-	QModelIndex prevMlIndex=paramMlFilterModel_->mapToSource(paramMlView_->currentIndex());
-	QModelIndex prevSoilIndex=paramSoilView_->currentIndex();
-	QModelIndex prevSurfIndex=paramSurfView_->currentIndex();
-	QModelIndex prevPlIndex;
-	if(usePl_)
+	//Save and set steps	
+	for(std::map<PanelType,MvQScmDataPanel*>::iterator it=panels_.begin(); it != panels_.end(); it++)
 	{
-	  	prevPlIndex=paramPlView_->currentIndex();
-	}
-	
-	paramMlModel_->setStep(step);
-	if(usePl_)
-	{
-	  	paramPlModel_->setStep(step);
-	}
-	paramSoilModel_->setStep(step);
-	paramSurfModel_->setStep(step);
+		it->second->setStep(step);
+	}	
 	
 	//Update profile view
 	
+	int actTab=tab_->currentIndex();	
 	
-	int actTab=paramTab_->currentIndex();	
-	
-	//ML
-	QModelIndex actMlIndex=paramMlModel_->index(prevMlIndex.row(),prevMlIndex.column());	
-	paramMlView_->setCurrentIndex(paramMlFilterModel_->mapFromSource(actMlIndex));			
-	if(actTab == 0 || actTab == 3)
+	//Model levels
+	if(panels_.find(ModelLevPanel) != panels_.end())
 	{
-		slotParamMlSelected(actMlIndex);	
+		panels_[ModelLevPanel]->reselectIndex(tabToPanel_[actTab] == ModelLevPanel || tabToPanel_[actTab] == PressureLevPanel);
+	}
+	
+	//Pressure
+	if(panels_.find(PressureLevPanel) != panels_.end())
+	{  
+	  	panels_[PressureLevPanel]->reselectIndex(tabToPanel_[actTab] == PressureLevPanel);
+	
 	}
 	
 	//Soil
-	QModelIndex actSoilIndex=paramSoilModel_->index(prevSoilIndex.row(),prevSoilIndex.column());
-	if(actSoilIndex.isValid())
-	{	  	
-		paramSoilView_->setCurrentIndex(actSoilIndex);	
-		if(actTab == 1)
-		{
-	  		if(data_->soilLevel().at(actSoilIndex.column()) == data_->soilVar(MvScm::TempSoil))
-			{	  
-				slotParamSoilSelected(actSoilIndex);
-			}			
-			else
-			{
-		  		slotParamMlSelected(actMlIndex);
-			}
-		}	
+	if(panels_.find(SoilLevPanel) != panels_.end())
+	{  
+	  	panels_[SoilLevPanel]->reselectIndex(tabToPanel_[actTab] == SoilLevPanel);
+	
 	}
-	else
-	{
-		 slotParamMlSelected(actMlIndex);
-	}	  
-		
+	
 	//Surf
-	QModelIndex actSurfIndex=paramSurfModel_->index(prevSurfIndex.row(),prevSurfIndex.column());	
-	paramSurfView_->setCurrentIndex(actSurfIndex);		
-	if(actSurfIndex.isValid())
-	{
-	  	if(actTab == 2)
-		{
-			if(data_->surfaceLevel().at(actSurfIndex.column()) == data_->surfVar(MvScm::TempSurf))
-			{	  
-	  			slotParamSurfSelected(actSurfIndex);
-			}
-			else
-			{
-		  		slotParamMlSelected(actMlIndex);
-			}
-		}
-	}
-	else
-	{
-		 slotParamMlSelected(actMlIndex);
-	}
-		
-	//Pres
-	if(usePl_)
-	{  	
-	  	QModelIndex actPlIndex=paramPlModel_->index(prevPlIndex.row(),prevPlIndex.column());	
-		paramPlView_->setCurrentIndex(actPlIndex);
-	}
-}
-
-
-void MvQScmDataWidget::slotTabIndexChanged(int /*index*/)
-{
-}
-
-void MvQScmDataWidget::slotParamMlSelected(int index)
-{
-	if(index >=0 && index < static_cast<int>(data_->modelLevel().size()))
-	{
-		MvScmVar *var=data_->modelLevel().at(index);
-		int step=paramMlModel_->step(); 
-		
-		emit paramSelected(var,step);
-	}
-}	
-
-void MvQScmDataWidget::slotParamMlSelected(const QModelIndex& index)
-{
-	if(!index.isValid())
-	{
-	  	emit stepChanged(paramMlModel_->step());
-	}
-	else
-	{
-	  	slotParamMlSelected(index.column());
-	}	
+	panels_[SurfaceLevPanel]->reselectIndex(tabToPanel_[actTab] == SurfaceLevPanel);
 }	
 
-void MvQScmDataWidget::slotParamSoilSelected(int index)
-{
-	if(index >=0 && index < static_cast<int>(data_->soilLevel().size()))
-	{
-		MvScmVar *var=data_->soilLevel().at(index);
-		int step=paramSoilModel_->step(); 
-				
-		if(var == data_->soilVar(MvScm::TempSoil)) 
-		{		
-			emit paramSelected(data_->mlVar(MvScm::TempML),step);
-		}	
-	}
-}	
 
-void MvQScmDataWidget::slotParamSoilSelected(const QModelIndex& index)
-{
-	if(!index.isValid())
-	{
-	  	emit stepChanged(paramSoilModel_->step());
-	}
-	else
-	{
-	  	slotParamSoilSelected(index.column());
-	}	
-}	
-
-void MvQScmDataWidget::slotParamSurfSelected(int index)
-{
-	if(index >=0 && index < static_cast<int>(data_->surfaceLevel().size()))
-	{
-		MvScmVar *var=data_->surfaceLevel().at(index);
-		int step=paramSurfModel_->step(); 
-				
-		if(var == data_->surfVar(MvScm::TempSurf)) 
-		{		
-			emit paramSelected(data_->mlVar(MvScm::TempML),step);
-		}	
-	}
-}	
-
-void MvQScmDataWidget::slotParamSurfSelected(const QModelIndex& index)
+void MvQScmDataWidget::slotTabIndexChanged(int /*index*/)
 {
-	if(!index.isValid())
-	{
-	  	emit stepChanged(paramSurfModel_->step());
-	}
-	else
-	{
-	  	slotParamSurfSelected(index.column());
-	}	
 }
 
 void MvQScmDataWidget::showEditableParams(bool b)
 {
-  	paramMlFilterModel_->setShowEditableOnly(b);	   
+	for(std::map<PanelType,MvQScmDataPanel*>::iterator it=panels_.begin(); it != panels_.end(); it++)
+	{
+		it->second->showEditableOnly(b);
+	}	   
 }  
 
 void MvQScmDataWidget::selectMlParam(MvScmVar* var)	
-{
-  	if(var)
-	{  
-  		QModelIndex index=paramMlFilterModel_->mapFromSource(paramMlModel_->indexForVar(var,paramMlModel_->step(),0));
-		paramMlView_->scrollTo(index,QAbstractItemView::PositionAtCenter);
-		paramTab_->setCurrentIndex(0);		
+{ 
+  	if(panels_.find(ModelLevPanel) != panels_.end())
+	{			
+	  	if(panels_[ModelLevPanel]->selectParam(var))
+		{
+		  	tab_->setCurrentIndex(panelToTab_[ModelLevPanel]);		
+		}
 	}	
 }  
 
@@ -461,47 +580,22 @@ void MvQScmDataWidget::update(const MvScmProfileChange& item)
 	if(!item.var())
 	  	return;
 	
-  	if(item.var()->levelType() == MvScmVar::ModelLevelType)
-	{  
-	  	QModelIndex index=paramMlFilterModel_->mapFromSource(paramMlModel_->indexForChange(item));
-		paramMlView_->update(index);
-		paramMlView_->scrollTo(index,QAbstractItemView::PositionAtCenter);
-		paramTab_->setCurrentIndex(0);
-		
-		if(item.dependantVar())
-		{
-		  	index=paramMlModel_->indexForVar(item.dependantVar(),item.step(),item.level());
-			paramMlView_->update(paramMlFilterModel_->mapFromSource(index));
+  	for(std::map<PanelType,MvQScmDataPanel*>::iterator it=panels_.begin(); it != panels_.end(); it++)
+	{
+		if(it->second->update(item))
+		{		  
+			tab_->setCurrentIndex(panelToTab_[it->first]);
+			break;
 		}	
-	}  
-	else if(item.var()->levelType() == MvScmVar::SoilLevelType)
-	{  
-	  	QModelIndex index=paramSoilModel_->indexForChange(item);
-		paramSoilView_->update(index);
-		paramSoilView_->scrollTo(index,QAbstractItemView::EnsureVisible);
-		paramTab_->setCurrentIndex(1);
-	} 
-	else if(item.var()->levelType() == MvScmVar::SurfaceLevelType)
-	{  
-	  	QModelIndex index=paramSurfModel_->indexForChange(item);
-		paramSurfView_->update(index);
-		paramSurfView_->scrollTo(index,QAbstractItemView::EnsureVisible);
-		paramTab_->setCurrentIndex(2);
-	}   
-	
-	//updateStepStatus(item.step(),true);
-	
+	}
 }
 
 void MvQScmDataWidget::reload()
 {
-	paramMlModel_->reload();
-	if(usePl_)
+	for(std::map<PanelType,MvQScmDataPanel*>::iterator it=panels_.begin(); it != panels_.end(); it++)
 	{
-	  	paramPlModel_->reload();
-	}
-	paramSoilModel_->reload();
-	paramSurfModel_->reload();
+		it->second->reload();
+	}	
 }  
 
 void MvQScmDataWidget::writeSettings()
diff --git a/src/libMvQtGui/MvQScmDataWidget.h b/src/libMvQtGui/MvQScmDataWidget.h
index 3384421..8ef6d26 100644
--- a/src/libMvQtGui/MvQScmDataWidget.h
+++ b/src/libMvQtGui/MvQScmDataWidget.h
@@ -15,11 +15,13 @@
 #include <QModelIndex>
 
 class QAction;
+class QHeaderView;
 class QPushButton;
 class QTableView;
 class QStandardItemModel;
 class QVBoxLayout;
 
+class MvQScmDataModel;
 class MvQScmProfileModel;
 class MvQScmProfileFilterModel;
 class MvQScmSurfaceModel;
@@ -37,6 +39,74 @@ public:
     MvQScmTab(QWidget *parent=0);
 };	
 
+class MvQScmDataPanel : public QWidget
+{
+Q_OBJECT  
+public:  
+	MvQScmDataPanel(QWidget* parent=0);
+	virtual ~MvQScmDataPanel() {};
+	
+	void setMasterParam(MvScmVar *,MvScmVar *);  
+
+	void setStep(int);
+	void reselectIndex(bool);
+	bool selectParam(MvScmVar*);
+	void showEditableOnly(bool);
+	bool update(const MvScmProfileChange&);
+	void reload();
+		
+	virtual void init(const vector<MvScmVar*>&,int,const vector<float>&,const string&,
+				  const vector<MvScmVar*>&) {};
+	virtual void init(const vector<MvScmVar*>&,int,const vector<MvScmVar*>&) {};
+	
+signals: 
+  	void paramSelected(MvScmVar*,int); 
+	void stepChanged(int);
+	void dataEdited(const MvScmProfileChange&);
+	void selectParamFromMasterPanel();
+  
+public slots:	
+	void slotParamSelected(int); 
+	void slotParamSelected(const QModelIndex&); 
+
+protected:	
+  	vector<MvScmVar*>  vars_;
+	QTableView*  	view_;
+	MvQScmDataModel* 	model_;
+	MvQScmProfileFilterModel* filterModel_;	      
+	QModelIndex prevIndex_;
+	std::map<MvScmVar*,MvScmVar*> masterParams_;
+	bool master_;
+};  
+
+class MvQScmProfileDataPanel : public MvQScmDataPanel
+{
+ Q_OBJECT
+  
+public:
+    	MvQScmProfileDataPanel(QWidget* parent=0);
+	void init(const vector<MvScmVar*>&,int,const vector<float>&,const string&,
+				  const vector<MvScmVar*>&);
+				  
+public slots:	
+  	void slotHeaderContextMenu(const QPoint &);
+	
+protected:				  
+	void assignValue(MvScmVar *);
+	void assignValue(MvScmVar *,double);	
+	
+	QHeaderView* header_;
+	vector<MvScmVar*> editableVars_;			  				  
+};  
+
+class MvQScmSurfaceDataPanel : public MvQScmDataPanel
+{
+public:
+    	MvQScmSurfaceDataPanel(QWidget* parent=0);
+	void init(const vector<MvScmVar*>&,int,const vector<MvScmVar*>&);		  				  
+};  
+
+
 class MvQScmDataWidget : public QWidget
 {
     Q_OBJECT
@@ -52,12 +122,6 @@ public:
 
 public slots:
 	void slotStepChanged(int);
-	void slotParamMlSelected(int);
-	void slotParamMlSelected(const QModelIndex&);
-	void slotParamSurfSelected(int);
-	void slotParamSurfSelected(const QModelIndex&);
-	void slotParamSoilSelected(int);
-	void slotParamSoilSelected(const QModelIndex&);
 	void slotTabIndexChanged(int);
 	
 signals:
@@ -66,32 +130,19 @@ signals:
 	void stepChanged(int);
 	
 protected:
-	void setupParamBox();
+  	enum PanelType {ModelLevPanel=0,PressureLevPanel=1,SoilLevPanel=2,SurfaceLevPanel=3};
+		
+	void clearPanels();
+  	void addPanelToTab(MvQScmDataPanel*, MvQScmDataWidget::PanelType, QString);  	
 	void readSettings();
 	void writeSettings();
 
  	MvScm *data_;
-
-	QTabWidget *paramTab_;
-	
-	QWidget*     		paramMlPanel_;
-	QTableView*  		paramMlView_;
-	MvQScmProfileModel* 	paramMlModel_;
-	MvQScmProfileFilterModel* paramMlFilterModel_;
-	
-	QWidget*     		paramPlPanel_;
-	QTableView*  		paramPlView_;
-	MvQScmProfileModel* 	paramPlModel_;
-	
-	QWidget*     		paramSoilPanel_;
-	QTableView*  		paramSoilView_;
-	MvQScmProfileModel* 	paramSoilModel_;
-	
-	QWidget*     		paramSurfPanel_;
-	QTableView*  		paramSurfView_;
-	MvQScmSurfaceModel* 	paramSurfModel_;
-	
-	bool usePl_;
+	QTabWidget *tab_;
+	std::map<PanelType,MvQScmDataPanel*> panels_;
+	MvQScmDataPanel* masterPanel_;
+	std::map<PanelType,int> panelToTab_;
+	std::map<int,PanelType> tabToPanel_;	
  };
 
 
diff --git a/src/libMvQtGui/MvQScmModel.cc b/src/libMvQtGui/MvQScmModel.cc
index d715897..50a1003 100644
--- a/src/libMvQtGui/MvQScmModel.cc
+++ b/src/libMvQtGui/MvQScmModel.cc
@@ -50,7 +50,7 @@ void MvQScmTableViewDelegate::paint(QPainter *painter, const QStyleOptionViewIte
 //
 //=========================================
 
-MvQScmDataModel::MvQScmDataModel()			
+MvQScmDataModel::MvQScmDataModel(QObject *parent) : QAbstractItemModel(parent)			
 {
 	step_=-1;
 		
@@ -112,7 +112,7 @@ void MvQScmDataModel::reload()
 //
 //=========================================
 
-MvQScmSurfaceModel::MvQScmSurfaceModel()		
+MvQScmSurfaceModel::MvQScmSurfaceModel(QObject *parent)	: MvQScmDataModel(parent)
 {
 }
 
@@ -279,7 +279,7 @@ Qt::ItemFlags MvQScmSurfaceModel::flags ( const QModelIndex & index) const
 //
 //=========================================
 
-MvQScmProfileModel::MvQScmProfileModel()			
+MvQScmProfileModel::MvQScmProfileModel(QObject *parent)	: MvQScmDataModel(parent)			
 {
 }
 
@@ -464,7 +464,7 @@ void MvQScmProfileFilterModel::setShowEditableOnly(bool b)
 }
 
 bool MvQScmProfileFilterModel::filterAcceptsColumn(int sourceColumn,
-         const QModelIndex &index) const
+         const QModelIndex &) const
 {	
   	if(showEditableOnly_)
 		return sourceModel()->flags(sourceModel()->index(0,sourceColumn)) & Qt::ItemIsEditable;
diff --git a/src/libMvQtGui/MvQScmModel.h b/src/libMvQtGui/MvQScmModel.h
index 5857098..dadb2cf 100644
--- a/src/libMvQtGui/MvQScmModel.h
+++ b/src/libMvQtGui/MvQScmModel.h
@@ -47,11 +47,15 @@ public:
 	int step() const {return step_;}
 	void  setEditableVars (const vector<MvScmVar*>& v) { editableVars_=v;}
 	
+	virtual bool setData(const QModelIndex&, const QVariant&,int role=Qt::EditRole)=0;	
+	virtual void setData(const vector<MvScmVar*>&,int,const vector<float>&,const string&) {}
+	virtual void setData(const vector<MvScmVar*>&,int) {}
+	
 signals:	
 	void dataEdited(const MvScmProfileChange&);	
   
 protected:	
-	MvQScmDataModel();
+	MvQScmDataModel(QObject *parent=0);
 	
 	vector<MvScmVar*>  data_;
 	QList<int> columnOrder_;
@@ -69,12 +73,12 @@ protected:
 class MvQScmSurfaceModel : public MvQScmDataModel 
 {
 public:
-   	MvQScmSurfaceModel();
+   	MvQScmSurfaceModel(QObject *parent=0);
  
 	int columnCount (const QModelIndex& parent = QModelIndex() ) const;
    	int rowCount (const QModelIndex& parent = QModelIndex() ) const;	
 	QVariant data (const QModelIndex& , int role = Qt::DisplayRole ) const;
-	bool setData(const QModelIndex& index, const QVariant& value,int role=Qt::EditRole);	
+	bool setData(const QModelIndex& , const QVariant&,int role=Qt::EditRole);	
 	void setData(const vector<MvScmVar*>&,int);
 	QVariant headerData(int,Qt::Orientation,int role = Qt::DisplayRole ) const;
 	QModelIndex indexForVar(MvScmVar *, int, int) const;
@@ -84,12 +88,12 @@ public:
 class MvQScmProfileModel : public MvQScmDataModel
 {
 public:
-   	MvQScmProfileModel(); 	 
+   	MvQScmProfileModel(QObject *parent=0); 	 
 	
 	int columnCount (const QModelIndex& parent = QModelIndex() ) const;
    	int rowCount (const QModelIndex& parent = QModelIndex() ) const;	
 	QVariant data (const QModelIndex& , int role = Qt::DisplayRole ) const;
-	bool setData(const QModelIndex& index, const QVariant& value,int role=Qt::EditRole);
+	bool setData(const QModelIndex&, const QVariant&,int role=Qt::EditRole);
 	void setData(const vector<MvScmVar*>&,int,const vector<float>&,const string&);
 	QVariant headerData(int,Qt::Orientation,int role = Qt::DisplayRole ) const; 	
 	QModelIndex indexForVar(MvScmVar *, int, int) const;
diff --git a/src/libMvQtGui/MvQSearchLinePanel.cc b/src/libMvQtGui/MvQSearchLinePanel.cc
index e024731..4b969b8 100644
--- a/src/libMvQtGui/MvQSearchLinePanel.cc
+++ b/src/libMvQtGui/MvQSearchLinePanel.cc
@@ -254,4 +254,4 @@ void MvQDualSearchLinePanel::setCurrentSearchLineById(QWidget *itemId)
 			itemLayout_->setCurrentWidget(currentRightItem_);	
 		}   
 	}  
-}	
\ No newline at end of file
+}	
diff --git a/src/libMvQtGui/MvQSlider.cc b/src/libMvQtGui/MvQSlider.cc
new file mode 100644
index 0000000..f5ce7bc
--- /dev/null
+++ b/src/libMvQtGui/MvQSlider.cc
@@ -0,0 +1,57 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "MvQSlider.h"
+
+#include <QDebug>
+#include <QMouseEvent>
+#include <QStyle>
+
+MvQSlider::MvQSlider(QWidget *parent): QSlider(parent)
+{	
+}	
+  
+
+//There is a bug in QSlider: if we click into
+//the slider it does not jump into the right position but either jumps to the
+//min or to the max position of the slider. It only works if we keep the mouse pressed down 
+//at least for 1-2 seconds!!!
+//
+//To overcome this problem we needed this custom implementation of mousePressEvent!
+
+void MvQSlider::mousePressEvent(QMouseEvent * event)
+{
+  	if(event->button() == Qt::LeftButton)
+    	{
+        	int v;
+	  	if(orientation() == Qt::Vertical)
+		{  
+			v=QStyle::sliderValueFromPosition(minimum(),maximum(),height()-event->y(),height()) ;
+		}
+		else
+		{		  	
+		  	v=QStyle::sliderValueFromPosition(minimum(),maximum(),event->x(),width()) ;
+		}
+		
+		if(v == value())
+		{
+		  	QSlider::mousePressEvent(event); 
+		}
+		else		  
+		{
+		  	setSliderPosition(v);
+			event->accept();
+			return;
+		}	
+    	}
+    	
+    	QSlider::mousePressEvent(event);
+}
+
+
diff --git a/src/libMvQtGui/MvQSlider.h b/src/libMvQtGui/MvQSlider.h
new file mode 100644
index 0000000..ac7111f
--- /dev/null
+++ b/src/libMvQtGui/MvQSlider.h
@@ -0,0 +1,27 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQSlider_H
+#define MvQSlider_H
+ 
+#include <QSlider>
+
+using namespace std;
+
+class MvQSlider : public QSlider
+{
+public:
+	MvQSlider (QWidget *parent=0);
+
+protected:	
+	void mousePressEvent(QMouseEvent* event);
+};
+
+
+#endif
diff --git a/src/libMvQtGui/MvQStationsWidget.cc b/src/libMvQtGui/MvQStationsWidget.cc
new file mode 100644
index 0000000..e398b65
--- /dev/null
+++ b/src/libMvQtGui/MvQStationsWidget.cc
@@ -0,0 +1,361 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 "MvQStationsWidget.h"
+
+#include <QDebug>
+#include <QTreeView>
+#include <QVBoxLayout>
+
+#include "MvQComboLine.h"
+
+#include <math.h>
+#include <gdbm.h>
+
+extern "C" {GDBM_FILE db = NULL;}
+
+QList<MvStationData*> MvQStationsModel::data_;
+
+//========================================================
+//
+// MvQStationsModel
+//
+//========================================================
+
+MvQStationsModel::MvQStationsModel(QObject *parent) : 
+       QAbstractItemModel(parent)
+      
+{
+	loadDb();   
+}  
+
+void MvQStationsModel::loadDb()
+{  
+  	if(data_.count() > 0)
+		return;  
+	  
+	char mode ='i';
+	
+	char database[1024];
+	int blocksize = 0;  /* less than 512 forces the system default */
+	sprintf(database, "%s-%c.db", getenv("METVIEW_STATIONS"),mode);
+	db=gdbm_open(database, blocksize, GDBM_READER,0777, 0); 
+		
+	if(db == NULL)
+	{
+	  	qDebug() << "Cannot open WMO station database";
+		return;
+	}
+	
+	datum key = gdbm_firstkey(db);
+        qDebug() << "Searching ...";
+	
+	while(key.dptr != NULL)
+	{
+		datum content = gdbm_fetch(db,key);	  
+	  	MvStationData *sdata=new MvStationData;
+		memcpy(sdata,content.dptr,qMin(content.dsize,static_cast<int>(sizeof(MvStationData))));
+		data_ << sdata;
+		key = gdbm_nextkey(db, key);
+	}
+	
+	gdbm_close(db);
+	db = NULL;	
+}    
+  
+
+int MvQStationsModel::columnCount( const QModelIndex& /* parent */ ) const
+{
+   	 return 5;
+}
+
+int MvQStationsModel::rowCount( const QModelIndex& parent) const
+{ 
+  	if(!parent.isValid())
+	  	return data_.count();
+	else return 0;
+}
+
+
+QVariant MvQStationsModel::data( const QModelIndex& index, int role ) const
+{
+	if( !index.isValid() || 
+	   (role != Qt::DisplayRole))
+        {			
+		return QVariant();
+	}
+	
+	MvStationData *v=data_.at(index.row());
+	
+	if(role == Qt::DisplayRole)
+	{  
+		switch (index.column()) 
+		{
+     		case 0: return v->ident;
+		case 1: return v->pos.lat/100.;
+		case 2: return v->pos.lon/100.;
+		case 3: return QString(v->pos.flags);
+		case 4: return QString(v->name);
+		default: return QString();
+    		}
+	}
+	
+	return QVariant();
+} 
+
+
+QVariant MvQStationsModel::headerData( const int section, const Qt::Orientation orient , const int role ) const
+{
+	if ( orient != Qt::Horizontal)
+      		  return QAbstractItemModel::headerData( section, orient, role );
+
+   	if(role == Qt::DisplayRole)
+	{
+		switch ( section ) 
+		{
+  		case 0: return QObject::tr("Id");
+		case 1: return QObject::tr("Lat");
+		case 2: return QObject::tr("Lon");
+		case 3: return QObject::tr("S");
+		case 4: return QObject::tr("Name");
+		default: return QVariant();
+   		}
+	}
+	else if(role == Qt::ToolTipRole)
+	{
+		switch ( section ) 
+		{
+  		case 0: return QObject::tr("WMO id");
+		case 1: return QObject::tr("Latitude");
+		case 2: return QObject::tr("Longitude");
+		case 3: return QObject::tr("Sounding type");
+		case 4: return QObject::tr("Name");
+		default: return QVariant();
+   		}
+	}
+	
+    	return QVariant();
+}
+
+QModelIndex MvQStationsModel::index( int row, int column, const QModelIndex & /*parent*/ ) const
+{
+	if(data_.count() == 0 || column < 0)
+	{
+		return QModelIndex();
+	}
+	
+	return createIndex(row, column, 0);
+}
+
+QModelIndex MvQStationsModel::parent( const QModelIndex & /*index */) const
+{			
+	return QModelIndex();
+}
+
+//========================================================
+//
+// MvQStationsFilterModel
+//
+//========================================================
+
+MvQStationsFilterModel::MvQStationsFilterModel(QObject *parent) : QSortFilterProxyModel(parent)
+{  
+	filters_ << 
+	FilterDef("Name",NameMode,"",QRegExp(".*")) << 
+	FilterDef("Id",IdMode,"",QRegExp("[0-9]{1,5}")) << 
+        FilterDef("Wmo block",WmoMode,"",QRegExp("[0-9]{1,2}")) << 
+   	FilterDef("Position",PositionMode,"Format: lat/lon/tolerance (in degrees)",QRegExp("\\-?[0-9]+\\.?[0-9]*/\\-?[0-9]+\\.?[0-9]*/[0-9]+\\.?[0-9]*")) << 
+   	FilterDef("Area",AreaMode,"Format: N/W/S/E (in degrees)",QRegExp("\\-?[0-9]+\\.?[0-9]*/\\-?[0-9]+\\.?[0-9]*/\\-?[0-9]+\\.?[0-9]*/\\-?[0-9]+\\.?[0-9]*")); 
+  
+	filterMode_=NameMode;
+}  
+
+
+QStringList MvQStationsFilterModel::filterLabels() const
+{
+ 	QStringList lst;
+  	foreach(FilterDef def,filters_)
+		lst << def.label;
+	
+	return lst;
+}  
+
+QList<QRegExp> MvQStationsFilterModel::filterRegExps() const
+{
+ 	QList<QRegExp> lst;
+  	foreach(FilterDef def,filters_)
+		lst << def.regExp;
+	
+	return lst;
+}  
+
+QStringList MvQStationsFilterModel::filterToolTips() const
+{
+ 	QStringList lst;
+  	foreach(FilterDef def,filters_)
+		lst << def.desc;
+	
+	return lst;
+}  
+
+int MvQStationsFilterModel::filterModeIndex() const
+{
+  	for(int i=0; i < filters_.count(); i++)
+		if(filters_.at(i).mode == filterMode_)
+		  	return i;
+		
+	return -1;	 
+}  
+
+void MvQStationsFilterModel::slotFilterModeChanged(int index)
+{
+	if(index >=0 && index < filters_.count())
+	{
+	  	filterMode_=filters_.at(index).mode;
+		filterText_.clear();
+		invalidateFilter();
+	}	  
+}  
+
+void MvQStationsFilterModel::slotFilterTextChanged(QString txt)
+{
+  	filterText_=txt;
+  	invalidateFilter();
+}
+
+bool MvQStationsFilterModel::filterAcceptsRow(int sourceRow,
+         const QModelIndex &sourceParent) const
+ {
+
+   	if(filterText_.isEmpty())
+	  	return true;	
+	
+	QModelIndex index,index1;
+	QStringList lst;
+	
+	switch(filterMode_)
+	{
+	case NameMode:
+	  	index=sourceModel()->index(sourceRow, 4, sourceParent);
+		return sourceModel()->data(index).toString().startsWith(filterText_,Qt::CaseInsensitive);
+		break;
+	case IdMode:
+	  	index=sourceModel()->index(sourceRow, 0, sourceParent);
+		return sourceModel()->data(index).toString().startsWith(filterText_);
+		break; 
+	case WmoMode:
+	  	index=sourceModel()->index(sourceRow, 0, sourceParent);
+		return sourceModel()->data(index).toInt()/1000 == filterText_.toInt();
+		break; 
+	case PositionMode:
+		lst=filterText_.split("/");
+		if(lst.count() >= 2 && lst[0] != "-" && lst[1] != "-")
+		{  	  
+	  		float lat=sourceModel()->data(sourceModel()->index(sourceRow, 1, sourceParent)).toFloat();
+			float lon=sourceModel()->data(sourceModel()->index(sourceRow, 2, sourceParent)).toFloat();
+	 
+	  		float delta=(lst.count()==3 && lst[2].toFloat() >= 0.)?lst[2].toFloat():1.;
+			return fabs(lat-lst[0].toFloat()) < delta && fabs(lon-lst[1].toFloat()) <= delta;
+		}
+		else
+		  	return true;
+		break;
+	case AreaMode:
+		lst=filterText_.split("/");
+		if(lst.count() == 4)
+		{  	  
+	  		float lat=sourceModel()->data(sourceModel()->index(sourceRow, 1, sourceParent)).toFloat();
+			float lon=sourceModel()->data(sourceModel()->index(sourceRow, 2, sourceParent)).toFloat();
+	 
+			return lat <= lst[0].toFloat() && lat >= lst[2].toFloat() &&
+			       lon <= lst[3].toFloat() && lon >= lst[1].toFloat(); 
+		}
+		else
+		  	return true;
+		break;
+	 
+	default:	
+	  	return true;
+	  	break;
+	}
+
+	return true;
+}
+
+
+//====================================
+//
+// MvQStationsWidget
+//
+//====================================
+
+MvQStationsWidget::MvQStationsWidget(SelectionMode sm,QWidget *parent) : 
+        QWidget(parent),
+        selectionMode_(sm)
+{
+	QVBoxLayout *vb=new QVBoxLayout(this);
+        vb->setSpacing(0); 
+	vb->setContentsMargins(1,1,1,1);
+	
+	tree_=new QTreeView(this);
+	vb->addWidget(tree_);
+	
+	model_=new MvQStationsModel(this);
+	sortModel_=new MvQStationsFilterModel(this);
+	sortModel_->setSourceModel(model_);
+	sortModel_->setDynamicSortFilter(true);
+	
+	tree_->setModel(sortModel_); 
+	tree_->setSortingEnabled(true);
+	tree_->setUniformRowHeights(true);
+	tree_->setRootIsDecorated(false);
+	
+	for(int i=0; i < model_->columnCount()-1; i++)
+		tree_->resizeColumnToContents(i);
+	
+	filterCb_=new MvQComboLine(sortModel_->filterLabels(),this);
+	vb->addWidget(filterCb_);
+		
+	filterCb_->setRegExps(sortModel_->filterRegExps());
+	filterCb_->setToolTips(sortModel_->filterToolTips());
+	filterCb_->setCurrentIndex(sortModel_->filterModeIndex());
+			
+	connect(tree_,SIGNAL(activated(const QModelIndex&)),
+		this,SLOT(slotSelected(const QModelIndex&)));
+	
+	connect(filterCb_,SIGNAL(currentIndexChanged(int)),
+		sortModel_,SLOT(slotFilterModeChanged(int)));
+		
+	connect(filterCb_,SIGNAL(textChanged(QString)),
+		sortModel_,SLOT(slotFilterTextChanged(QString)));	
+} 
+  
+void  MvQStationsWidget::slotSelected(const QModelIndex& index)
+{
+ 	QModelIndex index1;
+	
+	switch(selectionMode_)
+	{
+	case NameMode:
+		index1=sortModel_->index(index.row(),4);
+		emit selected(sortModel_->data(index1).toString()); 
+		break;
+	case IdMode:
+		index1=sortModel_->index(index.row(),0);
+		emit selected(sortModel_->data(index1).toString()); 
+		break;
+	case WmoMode:
+	  	index1=sortModel_->index(index.row(),0);
+		emit selected(QString::number(sortModel_->data(index1).toInt()/100));
+  		break;
+	default:
+	  	break;
+	}
+}  
+  
\ No newline at end of file
diff --git a/src/libMvQtGui/MvQStationsWidget.h b/src/libMvQtGui/MvQStationsWidget.h
new file mode 100644
index 0000000..c31326b
--- /dev/null
+++ b/src/libMvQtGui/MvQStationsWidget.h
@@ -0,0 +1,116 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvQStationsWidget_inc
+#define MvQStationsWidget_inc
+
+#include <QAbstractItemModel>
+#include <QSortFilterProxyModel>
+#include <QWidget>
+
+class QTreeView;
+class MvQComboLine;
+
+typedef struct {
+	long lat;
+	long lon;
+	char flags[13];
+	int station_height;
+} MvStationPosition;
+
+
+typedef struct {
+	int ident;
+	MvStationPosition pos;
+	int barometre_height;
+	int pressure_level;
+	char name[1024];
+} MvStationData;
+
+
+class MvQStationsModel :  public QAbstractItemModel
+{
+public:
+   	MvQStationsModel(QObject *parent=0);
+ 	
+   	int columnCount (const QModelIndex& parent = QModelIndex() ) const;
+   	int rowCount (const QModelIndex& parent = QModelIndex() ) const;
+
+   	QVariant data (const QModelIndex& , int role = Qt::DisplayRole ) const;
+	QVariant headerData(int,Qt::Orientation,int role = Qt::DisplayRole ) const;
+ 
+   	QModelIndex index (int, int, const QModelIndex& parent = QModelIndex() ) const;
+   	QModelIndex parent (const QModelIndex & ) const;
+	
+protected:
+        void loadDb();
+	static QList<MvStationData*> data_;   
+};
+
+class MvQStationsFilterModel : public QSortFilterProxyModel
+{
+Q_OBJECT
+
+public:
+    	MvQStationsFilterModel(QObject *parent=0);
+	QStringList filterLabels() const;
+	QList<QRegExp> filterRegExps() const;
+	QStringList filterToolTips() const;
+	int filterModeIndex() const;
+
+public slots:	
+	void slotFilterModeChanged(int index);
+	void slotFilterTextChanged(QString);
+
+protected:
+	bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
+	
+	enum FilterMode {NameMode,IdMode,WmoMode,PositionMode,AreaMode};
+	
+	struct FilterDef
+	{
+	  	FilterDef(QString lab,FilterMode m,QString d,QRegExp r) :
+	  	   label(lab), mode(m), desc(d), regExp(r) {}
+	  	QString label;
+		FilterMode mode;
+		QString desc;
+		QRegExp regExp;
+	};	
+	
+	FilterMode filterMode_;
+	QString filterText_;
+	QList<FilterDef> filters_;
+};	
+
+
+class MvQStationsWidget : public QWidget
+{
+Q_OBJECT
+
+public:
+  	enum SelectionMode {NameMode,IdMode,WmoMode};
+	
+	MvQStationsWidget(SelectionMode,QWidget *parent=0);
+  
+protected slots:
+	void slotSelected(const QModelIndex&);	
+
+signals:
+	void selected(QString);
+	
+protected:
+	MvQStationsModel *model_;
+	MvQStationsFilterModel *sortModel_;
+	QTreeView *tree_;
+	MvQComboLine *filterCb_;
+	SelectionMode selectionMode_;
+	
+};
+
+#endif
diff --git a/src/libMvQtGui/MvQTextEditSearchLine.cc b/src/libMvQtGui/MvQTextEditSearchLine.cc
index 4cb8cd2..c352e78 100644
--- a/src/libMvQtGui/MvQTextEditSearchLine.cc
+++ b/src/libMvQtGui/MvQTextEditSearchLine.cc
@@ -18,8 +18,8 @@
 #include "MvQTextEditSearchLine.h"
 
 
-MvQTextEditSearchLine::MvQTextEditSearchLine(QTextEdit *editor,QString searchLabelText) :
-	MvQAbstractSearchLine(searchLabelText), editor_(editor)
+MvQTextEditSearchLine::MvQTextEditSearchLine(QTextEdit *edit,QString searchLabelText) :
+	MvQAbstractSearchLine(searchLabelText), editor_(edit)
 {
 
 }
@@ -37,7 +37,7 @@ void MvQTextEditSearchLine::slotFind(QString txt)
 	
 	if(editor_->find(txt)==false)
 	{
-      		cursor=editor_->textCursor();
+      	cursor=editor_->textCursor();
 		cursor.movePosition(QTextCursor::Start);
 		editor_->setTextCursor(cursor);
 		updateButtons(editor_->find(txt));
diff --git a/src/libMvQtGui/MvQTextEditSearchLine.h b/src/libMvQtGui/MvQTextEditSearchLine.h
index 7b550ae..4d01deb 100644
--- a/src/libMvQtGui/MvQTextEditSearchLine.h
+++ b/src/libMvQtGui/MvQTextEditSearchLine.h
@@ -20,7 +20,7 @@ class MvQTextEditSearchLine : public MvQAbstractSearchLine
 
 public:
 	MvQTextEditSearchLine(QTextEdit*,QString);
-	~MvQTextEditSearchLine(); 
+	~MvQTextEditSearchLine();
 	
 public slots:
 	void slotFind(QString);
@@ -32,4 +32,4 @@ protected:
 
 };
 
-#endif
\ No newline at end of file
+#endif
diff --git a/src/libMvQtGui/MvQWebViewSearchLine.cc b/src/libMvQtGui/MvQWebViewSearchLine.cc
new file mode 100644
index 0000000..9448d7c
--- /dev/null
+++ b/src/libMvQtGui/MvQWebViewSearchLine.cc
@@ -0,0 +1,51 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 <QColor>
+#include <QDebug>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QWebView>
+#include <QWebPage>
+
+#include "MvQWebViewSearchLine.h"
+
+
+MvQWebViewSearchLine::MvQWebViewSearchLine(QWebView *view,QString searchLabelText) :
+	MvQAbstractSearchLine(searchLabelText), view_(view)
+{
+
+}
+
+MvQWebViewSearchLine::~MvQWebViewSearchLine()
+{
+
+}
+
+void MvQWebViewSearchLine::slotFind(QString txt)
+{
+	QWebPage::FindFlags flags= QWebPage::FindWrapsAroundDocument;
+	updateButtons(view_->findText(txt,flags));
+	//keep the search term
+	txt_= txt;
+}
+
+void MvQWebViewSearchLine::slotFindNext()
+{
+	QWebPage::FindFlags flags= QWebPage::FindWrapsAroundDocument;
+	updateButtons(view_->findText(txt_,flags));
+}
+
+void MvQWebViewSearchLine::slotFindPrev()
+{
+	QWebPage::FindFlags flags= QWebPage::FindBackward | QWebPage::FindWrapsAroundDocument;
+	updateButtons(view_->findText(txt_,flags));
+}
diff --git a/src/libMvQtGui/MvQWebViewSearchLine.h b/src/libMvQtGui/MvQWebViewSearchLine.h
new file mode 100644
index 0000000..0dda667
--- /dev/null
+++ b/src/libMvQtGui/MvQWebViewSearchLine.h
@@ -0,0 +1,35 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 MvQWebViewSearchLine_H
+#define MvQWebViewSearchLine_H
+
+class QWebView;
+
+#include "MvQAbstractSearchLine.h" 
+
+class MvQWebViewSearchLine : public MvQAbstractSearchLine
+{
+	Q_OBJECT
+
+public:
+	MvQWebViewSearchLine(QWebView*,QString);
+	~MvQWebViewSearchLine();
+	
+public slots:
+	void slotFind(QString);
+	void slotFindNext();
+	void slotFindPrev();
+
+protected:
+	QWebView* view_;
+	QString txt_;
+};
+
+#endif
diff --git a/src/libMvQtGui/edit.qrc b/src/libMvQtGui/edit.qrc
new file mode 100644
index 0000000..c083edf
--- /dev/null
+++ b/src/libMvQtGui/edit.qrc
@@ -0,0 +1,5 @@
+<RCC>
+  <qresource prefix="edit" > 
+    <file alias="clear_left.svg">../images/clear_left.svg</file>
+  </qresource>
+</RCC>
diff --git a/src/libMvQtGui/find.qrc b/src/libMvQtGui/find.qrc
index fde7e65..f1d0e63 100644
--- a/src/libMvQtGui/find.qrc
+++ b/src/libMvQtGui/find.qrc
@@ -5,4 +5,4 @@
     <file alias="prev.svg">../images/arrow_up.svg</file>
     <file alias="close.svg">../images/remove.svg</file>
   </qresource>
-</RCC>
\ No newline at end of file
+</RCC>
diff --git a/src/libMvQtGui/keyDialog.qrc b/src/libMvQtGui/keyDialog.qrc
index 8408e6d..42a455b 100644
--- a/src/libMvQtGui/keyDialog.qrc
+++ b/src/libMvQtGui/keyDialog.qrc
@@ -15,4 +15,4 @@
     <file alias="profile_save.svg">../images/profile_save.svg</file>
     <file alias="profile_duplicate.svg">../images/profile_duplicate.svg</file>
   </qresource>
-</RCC>
\ No newline at end of file
+</RCC>
diff --git a/src/libMvQtGui/mail.qrc.cpp b/src/libMvQtGui/mail.qrc.cpp
new file mode 100644
index 0000000..8c39e49
--- /dev/null
+++ b/src/libMvQtGui/mail.qrc.cpp
@@ -0,0 +1,374 @@
+/****************************************************************************
+** Resource object code
+**
+** Created: 
+**      by: The Resource Compiler for Qt version 4.6.3
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include <QtCore/qglobal.h>
+
+static const unsigned char qt_resource_data[] = {
+  // /vol/metview/data/p4/mv4dev_suse113_inst/metview/src/images/mail_send.svg
+  0x0,0x0,0x12,0xe4,
+  0x3c,
+  0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,
+  0x30,0x22,0x20,0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22,0x55,0x54,0x46,
+  0x2d,0x38,0x22,0x20,0x73,0x74,0x61,0x6e,0x64,0x61,0x6c,0x6f,0x6e,0x65,0x3d,0x22,
+  0x6e,0x6f,0x22,0x3f,0x3e,0xa,0x3c,0x21,0x2d,0x2d,0x20,0x43,0x72,0x65,0x61,0x74,
+  0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x49,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,
+  0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x69,0x6e,0x6b,
+  0x73,0x63,0x61,0x70,0x65,0x2e,0x6f,0x72,0x67,0x2f,0x29,0x20,0x2d,0x2d,0x3e,0xa,
+  0xa,0x3c,0x73,0x76,0x67,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x64,
+  0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c,0x2e,0x6f,
+  0x72,0x67,0x2f,0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x2f,0x31,
+  0x2e,0x31,0x2f,0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x63,0x63,
+  0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x63,0x72,0x65,0x61,0x74,0x69,0x76,
+  0x65,0x63,0x6f,0x6d,0x6d,0x6f,0x6e,0x73,0x2e,0x6f,0x72,0x67,0x2f,0x6e,0x73,0x23,
+  0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d,0x22,
+  0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,
+  0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d,0x72,0x64,0x66,
+  0x2d,0x73,0x79,0x6e,0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0xa,0x20,0x20,0x20,
+  0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73,0x76,0x67,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,
+  0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,
+  0x30,0x2f,0x73,0x76,0x67,0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,
+  0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,
+  0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0xa,0x20,0x20,0x20,
+  0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,
+  0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,
+  0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22,0xa,0x20,0x20,0x20,0x78,0x6d,
+  0x6c,0x6e,0x73,0x3a,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x3d,0x22,0x68,0x74,
+  0x74,0x70,0x3a,0x2f,0x2f,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x2e,0x73,0x6f,
+  0x75,0x72,0x63,0x65,0x66,0x6f,0x72,0x67,0x65,0x2e,0x6e,0x65,0x74,0x2f,0x44,0x54,
+  0x44,0x2f,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x2d,0x30,0x2e,0x64,0x74,0x64,
+  0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x69,0x6e,0x6b,0x73,0x63,
+  0x61,0x70,0x65,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,
+  0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x2e,0x6f,0x72,0x67,0x2f,0x6e,0x61,0x6d,
+  0x65,0x73,0x70,0x61,0x63,0x65,0x73,0x2f,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,
+  0x22,0xa,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x32,0x22,0xa,
+  0x20,0x20,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x32,0x22,0xa,0x20,
+  0x20,0x20,0x69,0x64,0x3d,0x22,0x73,0x76,0x67,0x32,0x22,0xa,0x20,0x20,0x20,0x76,
+  0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31,0x22,0xa,0x20,0x20,0x20,
+  0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,
+  0x3d,0x22,0x30,0x2e,0x34,0x38,0x2e,0x32,0x20,0x72,0x39,0x38,0x31,0x39,0x22,0xa,
+  0x20,0x20,0x20,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x3a,0x64,0x6f,0x63,0x6e,
+  0x61,0x6d,0x65,0x3d,0x22,0x6d,0x61,0x69,0x6c,0x5f,0x73,0x65,0x6e,0x64,0x2e,0x73,
+  0x76,0x67,0x22,0x3e,0xa,0x20,0x20,0x3c,0x64,0x65,0x66,0x73,0xa,0x20,0x20,0x20,
+  0x20,0x20,0x69,0x64,0x3d,0x22,0x64,0x65,0x66,0x73,0x34,0x22,0x3e,0xa,0x20,0x20,
+  0x20,0x20,0x3c,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,
+  0x74,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6c,0x69,0x6e,
+  0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x33,0x37,0x38,0x39,0x22,
+  0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x6f,0x70,0xa,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x73,0x74,
+  0x6f,0x70,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x23,0x64,0x37,0x65,0x33,0x66,0x34,
+  0x3b,0x73,0x74,0x6f,0x70,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x31,0x3b,
+  0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x66,0x66,0x73,0x65,
+  0x74,0x3d,0x22,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,
+  0x64,0x3d,0x22,0x73,0x74,0x6f,0x70,0x33,0x37,0x39,0x31,0x22,0x20,0x2f,0x3e,0xa,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x6f,0x70,0xa,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x73,0x74,0x6f,0x70,
+  0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x23,0x66,0x37,0x66,0x37,0x66,0x37,0x3b,0x73,
+  0x74,0x6f,0x70,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x31,0x3b,0x22,0xa,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x3d,
+  0x22,0x31,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,
+  0x22,0x73,0x74,0x6f,0x70,0x33,0x37,0x39,0x33,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,
+  0x20,0x20,0x3c,0x2f,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,
+  0x6e,0x74,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,
+  0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,
+  0x64,0x3d,0x22,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,
+  0x74,0x34,0x30,0x30,0x30,0x22,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,
+  0x74,0x6f,0x70,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,
+  0x22,0x73,0x74,0x6f,0x70,0x33,0x37,0x38,0x33,0x22,0xa,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x3d,0x22,0x30,0x22,0xa,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x73,
+  0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x23,0x61,0x64,0x63,0x62,0x64,
+  0x64,0x3b,0x73,0x74,0x6f,0x70,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x31,
+  0x3b,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x6f,
+  0x70,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,
+  0x3d,0x22,0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x23,0x66,0x66,
+  0x66,0x66,0x66,0x66,0x3b,0x73,0x74,0x6f,0x70,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,
+  0x79,0x3a,0x31,0x3b,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,
+  0x66,0x66,0x73,0x65,0x74,0x3d,0x22,0x31,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x73,0x74,0x6f,0x70,0x34,0x30,0x30,0x34,0x22,
+  0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x2f,0x6c,0x69,0x6e,0x65,0x61,0x72,
+  0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x6c,
+  0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0xa,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x6f,
+  0x6c,0x6c,0x65,0x63,0x74,0x3d,0x22,0x61,0x6c,0x77,0x61,0x79,0x73,0x22,0xa,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x68,0x72,0x65,0x66,
+  0x3d,0x22,0x23,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,
+  0x74,0x33,0x37,0x38,0x39,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,
+  0x3d,0x22,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,
+  0x33,0x37,0x39,0x35,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x31,0x3d,
+  0x22,0x31,0x31,0x2e,0x35,0x35,0x33,0x33,0x33,0x33,0x22,0xa,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x79,0x31,0x3d,0x22,0x33,0x2e,0x30,0x31,0x33,0x33,0x33,0x31,0x39,
+  0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x32,0x3d,0x22,0x31,0x34,0x2e,
+  0x36,0x30,0x36,0x36,0x36,0x36,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x79,
+  0x32,0x3d,0x22,0x31,0x33,0x2e,0x35,0x37,0x33,0x33,0x33,0x33,0x22,0xa,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x67,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x55,0x6e,0x69,
+  0x74,0x73,0x3d,0x22,0x75,0x73,0x65,0x72,0x53,0x70,0x61,0x63,0x65,0x4f,0x6e,0x55,
+  0x73,0x65,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x67,0x72,0x61,0x64,0x69,
+  0x65,0x6e,0x74,0x54,0x72,0x61,0x6e,0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61,
+  0x74,0x72,0x69,0x78,0x28,0x31,0x2c,0x30,0x2c,0x30,0x2c,0x30,0x2e,0x39,0x36,0x30,
+  0x31,0x39,0x38,0x39,0x39,0x2c,0x30,0x2e,0x31,0x31,0x39,0x39,0x39,0x39,0x36,0x37,
+  0x2c,0x2d,0x30,0x2e,0x34,0x34,0x35,0x32,0x38,0x39,0x32,0x29,0x22,0x20,0x2f,0x3e,
+  0xa,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,
+  0x69,0x65,0x6e,0x74,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,
+  0x63,0x61,0x70,0x65,0x3a,0x63,0x6f,0x6c,0x6c,0x65,0x63,0x74,0x3d,0x22,0x61,0x6c,
+  0x77,0x61,0x79,0x73,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6c,0x69,
+  0x6e,0x6b,0x3a,0x68,0x72,0x65,0x66,0x3d,0x22,0x23,0x6c,0x69,0x6e,0x65,0x61,0x72,
+  0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x33,0x37,0x38,0x39,0x22,0xa,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,
+  0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x33,0x38,0x30,0x33,0x22,0xa,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x78,0x31,0x3d,0x22,0x31,0x34,0x2e,0x36,0x33,0x33,0x33,0x33,
+  0x33,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x79,0x31,0x3d,0x22,0x33,0x32,
+  0x2e,0x36,0x36,0x36,0x36,0x36,0x38,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x78,0x32,0x3d,0x22,0x31,0x35,0x2e,0x39,0x32,0x36,0x36,0x36,0x36,0x22,0xa,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x79,0x32,0x3d,0x22,0x2d,0x30,0x2e,0x33,0x34,0x36,
+  0x36,0x36,0x36,0x36,0x36,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x67,0x72,
+  0x61,0x64,0x69,0x65,0x6e,0x74,0x55,0x6e,0x69,0x74,0x73,0x3d,0x22,0x75,0x73,0x65,
+  0x72,0x53,0x70,0x61,0x63,0x65,0x4f,0x6e,0x55,0x73,0x65,0x22,0xa,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x67,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x54,0x72,0x61,0x6e,
+  0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61,0x74,0x72,0x69,0x78,0x28,0x31,0x2c,
+  0x30,0x2c,0x30,0x2c,0x30,0x2e,0x38,0x38,0x39,0x33,0x37,0x38,0x39,0x39,0x2c,0x30,
+  0x2e,0x31,0x31,0x39,0x39,0x39,0x39,0x36,0x37,0x2c,0x2d,0x30,0x2e,0x30,0x31,0x34,
+  0x37,0x30,0x33,0x35,0x31,0x29,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x3c,0x2f,0x64,
+  0x65,0x66,0x73,0x3e,0xa,0x20,0x20,0x3c,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,
+  0x3a,0x6e,0x61,0x6d,0x65,0x64,0x76,0x69,0x65,0x77,0xa,0x20,0x20,0x20,0x20,0x20,
+  0x69,0x64,0x3d,0x22,0x62,0x61,0x73,0x65,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x70,
+  0x61,0x67,0x65,0x63,0x6f,0x6c,0x6f,0x72,0x3d,0x22,0x23,0x66,0x66,0x66,0x66,0x66,
+  0x66,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x63,0x6f,
+  0x6c,0x6f,0x72,0x3d,0x22,0x23,0x36,0x36,0x36,0x36,0x36,0x36,0x22,0xa,0x20,0x20,
+  0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,
+  0x3d,0x22,0x31,0x2e,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,
+  0x63,0x61,0x70,0x65,0x3a,0x70,0x61,0x67,0x65,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,
+  0x3d,0x22,0x30,0x2e,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,
+  0x63,0x61,0x70,0x65,0x3a,0x70,0x61,0x67,0x65,0x73,0x68,0x61,0x64,0x6f,0x77,0x3d,
+  0x22,0x32,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,
+  0x65,0x3a,0x7a,0x6f,0x6f,0x6d,0x3d,0x22,0x31,0x38,0x2e,0x37,0x35,0x22,0xa,0x20,
+  0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x78,0x3d,
+  0x22,0x35,0x2e,0x36,0x32,0x34,0x32,0x32,0x34,0x32,0x22,0xa,0x20,0x20,0x20,0x20,
+  0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x79,0x3d,0x22,0x31,0x31,
+  0x2e,0x35,0x33,0x39,0x32,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,
+  0x63,0x61,0x70,0x65,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2d,0x75,0x6e,
+  0x69,0x74,0x73,0x3d,0x22,0x70,0x78,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,
+  0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2d,0x6c,
+  0x61,0x79,0x65,0x72,0x3d,0x22,0x6c,0x61,0x79,0x65,0x72,0x36,0x22,0xa,0x20,0x20,
+  0x20,0x20,0x20,0x73,0x68,0x6f,0x77,0x67,0x72,0x69,0x64,0x3d,0x22,0x74,0x72,0x75,
+  0x65,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,
+  0x3a,0x73,0x6e,0x61,0x70,0x2d,0x67,0x72,0x69,0x64,0x73,0x3d,0x22,0x66,0x61,0x6c,
+  0x73,0x65,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,
+  0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,
+  0x31,0x35,0x39,0x39,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,
+  0x61,0x70,0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x68,0x65,0x69,0x67,0x68,
+  0x74,0x3d,0x22,0x39,0x39,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,
+  0x73,0x63,0x61,0x70,0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x78,0x3d,0x22,
+  0x39,0x36,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,
+  0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x79,0x3d,0x22,0x32,0x30,0x22,0xa,
+  0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x77,0x69,
+  0x6e,0x64,0x6f,0x77,0x2d,0x6d,0x61,0x78,0x69,0x6d,0x69,0x7a,0x65,0x64,0x3d,0x22,
+  0x30,0x22,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,
+  0x65,0x3a,0x67,0x72,0x69,0x64,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x79,
+  0x70,0x65,0x3d,0x22,0x78,0x79,0x67,0x72,0x69,0x64,0x22,0xa,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x67,0x72,0x69,0x64,0x32,0x38,0x31,0x36,0x22,
+  0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x6d,0x70,0x73,0x70,0x61,0x63,0x69,
+  0x6e,0x67,0x3d,0x22,0x35,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x69,
+  0x73,0x69,0x62,0x6c,0x65,0x3d,0x22,0x74,0x72,0x75,0x65,0x22,0xa,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x64,0x3d,0x22,0x74,0x72,0x75,
+  0x65,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x6e,0x61,0x70,0x76,0x69,
+  0x73,0x69,0x62,0x6c,0x65,0x67,0x72,0x69,0x64,0x6c,0x69,0x6e,0x65,0x73,0x6f,0x6e,
+  0x6c,0x79,0x3d,0x22,0x74,0x72,0x75,0x65,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x3c,
+  0x2f,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x3a,0x6e,0x61,0x6d,0x65,0x64,0x76,
+  0x69,0x65,0x77,0x3e,0xa,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x64,0x61,0x74,0x61,
+  0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6d,0x65,0x74,0x61,0x64,0x61,
+  0x74,0x61,0x37,0x22,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,
+  0x44,0x46,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x63,0x63,0x3a,0x57,0x6f,
+  0x72,0x6b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x64,0x66,0x3a,
+  0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x3c,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74,0x3e,0x69,0x6d,0x61,
+  0x67,0x65,0x2f,0x73,0x76,0x67,0x2b,0x78,0x6d,0x6c,0x3c,0x2f,0x64,0x63,0x3a,0x66,
+  0x6f,0x72,0x6d,0x61,0x74,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
+  0x64,0x63,0x3a,0x74,0x79,0x70,0x65,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x72,0x64,0x66,0x3a,0x72,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x3d,
+  0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,
+  0x2f,0x64,0x63,0x2f,0x64,0x63,0x6d,0x69,0x74,0x79,0x70,0x65,0x2f,0x53,0x74,0x69,
+  0x6c,0x6c,0x49,0x6d,0x61,0x67,0x65,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x74,0x69,0x74,0x6c,0x65,0x20,0x2f,0x3e,
+  0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x63,0x63,0x3a,0x6c,0x69,0x63,
+  0x65,0x6e,0x73,0x65,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x72,0x64,0x66,0x3a,0x72,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x3d,0x22,0x41,0x70,
+  0x61,0x63,0x68,0x65,0x20,0x4c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x32,0x2e,0x30,
+  0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,
+  0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x3c,0x63,0x63,0x3a,0x41,0x67,0x65,0x6e,0x74,0x3e,0xa,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x74,
+  0x69,0x74,0x6c,0x65,0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x3c,0x2f,0x63,0x63,0x3a,0x41,0x67,0x65,0x6e,0x74,0x3e,0xa,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x63,0x3a,0x63,0x72,0x65,0x61,0x74,
+  0x6f,0x72,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,
+  0x70,0x75,0x62,0x6c,0x69,0x73,0x68,0x65,0x72,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x3c,0x63,0x63,0x3a,0x41,0x67,0x65,0x6e,0x74,0x3e,0xa,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,
+  0x74,0x69,0x74,0x6c,0x65,0x3e,0x45,0x43,0x4d,0x57,0x46,0x3c,0x2f,0x64,0x63,0x3a,
+  0x74,0x69,0x74,0x6c,0x65,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x3c,0x2f,0x63,0x63,0x3a,0x41,0x67,0x65,0x6e,0x74,0x3e,0xa,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x63,0x3a,0x70,0x75,0x62,0x6c,0x69,0x73,
+  0x68,0x65,0x72,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,
+  0x3a,0x6c,0x61,0x6e,0x67,0x75,0x61,0x67,0x65,0x3e,0x65,0x6e,0x2d,0x47,0x42,0x3c,
+  0x2f,0x64,0x63,0x3a,0x6c,0x61,0x6e,0x67,0x75,0x61,0x67,0x65,0x3e,0xa,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x73,0x75,0x62,0x6a,0x65,0x63,
+  0x74,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,
+  0x66,0x3a,0x42,0x61,0x67,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x4d,0x65,0x74,0x76,0x69,
+  0x65,0x77,0x20,0x69,0x63,0x6f,0x6e,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,
+  0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,
+  0x3a,0x42,0x61,0x67,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,
+  0x64,0x63,0x3a,0x73,0x75,0x62,0x6a,0x65,0x63,0x74,0x3e,0xa,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x64,0x65,0x73,0x63,0x72,0x69,0x70,0x74,
+  0x69,0x6f,0x6e,0x3e,0x4d,0x65,0x74,0x76,0x69,0x65,0x77,0x20,0x69,0x63,0x6f,0x6e,
+  0x3c,0x2f,0x64,0x63,0x3a,0x64,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,
+  0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x63,0x63,0x3a,0x57,0x6f,0x72,
+  0x6b,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,
+  0x3e,0xa,0x20,0x20,0x3c,0x2f,0x6d,0x65,0x74,0x61,0x64,0x61,0x74,0x61,0x3e,0xa,
+  0x20,0x20,0x3c,0x67,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,
+  0x70,0x65,0x3a,0x67,0x72,0x6f,0x75,0x70,0x6d,0x6f,0x64,0x65,0x3d,0x22,0x6c,0x61,
+  0x79,0x65,0x72,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6c,0x61,
+  0x79,0x65,0x72,0x36,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,
+  0x61,0x70,0x65,0x3a,0x6c,0x61,0x62,0x65,0x6c,0x3d,0x22,0x4c,0x61,0x79,0x65,0x72,
+  0x22,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x72,0x65,0x63,0x74,0xa,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c,0x3a,
+  0x75,0x72,0x6c,0x28,0x23,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,
+  0x65,0x6e,0x74,0x33,0x38,0x30,0x33,0x29,0x3b,0x66,0x69,0x6c,0x6c,0x2d,0x6f,0x70,
+  0x61,0x63,0x69,0x74,0x79,0x3a,0x31,0x3b,0x66,0x69,0x6c,0x6c,0x2d,0x72,0x75,0x6c,
+  0x65,0x3a,0x65,0x76,0x65,0x6e,0x6f,0x64,0x64,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,
+  0x3a,0x23,0x31,0x34,0x32,0x31,0x34,0x63,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,
+  0x77,0x69,0x64,0x74,0x68,0x3a,0x30,0x2e,0x39,0x34,0x33,0x30,0x36,0x38,0x39,0x32,
+  0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x63,0x61,0x70,0x3a,
+  0x62,0x75,0x74,0x74,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,
+  0x6a,0x6f,0x69,0x6e,0x3a,0x6d,0x69,0x74,0x65,0x72,0x3b,0x73,0x74,0x72,0x6f,0x6b,
+  0x65,0x2d,0x6d,0x69,0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3a,0x34,0x3b,0x73,
+  0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x31,0x3b,
+  0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x64,0x61,0x73,0x68,0x61,0x72,0x72,0x61,0x79,
+  0x3a,0x6e,0x6f,0x6e,0x65,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x64,0x61,0x73,
+  0x68,0x6f,0x66,0x66,0x73,0x65,0x74,0x3a,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x69,0x64,0x3d,0x22,0x72,0x65,0x63,0x74,0x33,0x39,0x39,0x38,0x22,0xa,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x30,
+  0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,
+  0x22,0x32,0x31,0x2e,0x33,0x34,0x35,0x30,0x39,0x35,0x22,0xa,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x78,0x3d,0x22,0x31,0x2e,0x31,0x31,0x39,0x39,0x39,0x39,0x36,0x22,
+  0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x79,0x3d,0x22,0x35,0x2e,0x33,0x32,0x31,
+  0x35,0x37,0x30,0x34,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x79,0x3d,
+  0x22,0x31,0x2e,0x30,0x32,0x38,0x36,0x38,0x34,0x35,0x22,0x20,0x2f,0x3e,0xa,0x20,
+  0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c,0x3a,0x6e,0x6f,0x6e,0x65,
+  0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3a,0x23,0x31,0x34,0x32,0x31,0x34,0x63,0x3b,
+  0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x30,0x2e,0x39,
+  0x34,0x33,0x30,0x36,0x38,0x39,0x32,0x70,0x78,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,
+  0x2d,0x6c,0x69,0x6e,0x65,0x63,0x61,0x70,0x3a,0x72,0x6f,0x75,0x6e,0x64,0x3b,0x73,
+  0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3a,0x72,
+  0x6f,0x75,0x6e,0x64,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6f,0x70,0x61,0x63,
+  0x69,0x74,0x79,0x3a,0x31,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x3d,
+  0x22,0x4d,0x20,0x31,0x2e,0x37,0x34,0x36,0x36,0x36,0x36,0x34,0x2c,0x32,0x36,0x2e,
+  0x31,0x30,0x39,0x33,0x32,0x31,0x20,0x31,0x36,0x2e,0x31,0x32,0x2c,0x31,0x33,0x2e,
+  0x31,0x36,0x35,0x39,0x38,0x31,0x20,0x33,0x30,0x2e,0x37,0x34,0x36,0x36,0x36,0x37,
+  0x2c,0x32,0x36,0x2e,0x33,0x33,0x34,0x36,0x33,0x32,0x22,0xa,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x61,0x74,0x68,0x33,0x37,0x38,0x35,0x22,
+  0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,
+  0x3a,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x6f,0x72,0x2d,0x63,0x75,0x72,0x76,0x61,
+  0x74,0x75,0x72,0x65,0x3d,0x22,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x3a,0x6e,0x6f,0x64,0x65,0x74,0x79,0x70,
+  0x65,0x73,0x3d,0x22,0x63,0x63,0x63,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,
+  0x3c,0x70,0x61,0x74,0x68,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,
+  0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x6f,0x72,0x2d,
+  0x63,0x75,0x72,0x76,0x61,0x74,0x75,0x72,0x65,0x3d,0x22,0x30,0x22,0xa,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x61,0x74,0x68,0x33,0x37,0x38,
+  0x37,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x3d,0x22,0x4d,0x20,0x31,
+  0x33,0x2e,0x31,0x32,0x2c,0x31,0x36,0x2e,0x38,0x33,0x38,0x32,0x39,0x33,0x20,0x31,
+  0x2e,0x36,0x36,0x36,0x36,0x36,0x36,0x34,0x2c,0x35,0x2e,0x34,0x39,0x35,0x31,0x34,
+  0x31,0x39,0x20,0x33,0x30,0x2e,0x33,0x33,0x33,0x33,0x33,0x32,0x2c,0x35,0x2e,0x33,
+  0x39,0x32,0x37,0x31,0x38,0x38,0x20,0x31,0x39,0x2e,0x31,0x32,0x2c,0x31,0x36,0x2e,
+  0x38,0x33,0x38,0x32,0x39,0x33,0x20,0x63,0x20,0x2d,0x32,0x2e,0x30,0x30,0x33,0x34,
+  0x38,0x36,0x2c,0x31,0x2e,0x37,0x38,0x35,0x34,0x32,0x20,0x2d,0x33,0x2e,0x39,0x31,
+  0x32,0x38,0x38,0x37,0x2c,0x31,0x2e,0x39,0x38,0x34,0x36,0x30,0x33,0x20,0x2d,0x36,
+  0x2c,0x30,0x20,0x7a,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,
+  0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c,0x3a,0x75,0x72,0x6c,0x28,0x23,0x6c,0x69,
+  0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x33,0x37,0x39,0x35,
+  0x29,0x3b,0x66,0x69,0x6c,0x6c,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x31,
+  0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3a,0x23,0x31,0x34,0x32,0x31,0x34,0x63,0x3b,
+  0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x30,0x2e,0x39,
+  0x37,0x39,0x38,0x39,0x37,0x34,0x34,0x70,0x78,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,
+  0x2d,0x6c,0x69,0x6e,0x65,0x63,0x61,0x70,0x3a,0x72,0x6f,0x75,0x6e,0x64,0x3b,0x73,
+  0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3a,0x72,
+  0x6f,0x75,0x6e,0x64,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6f,0x70,0x61,0x63,
+  0x69,0x74,0x79,0x3a,0x31,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x6f,
+  0x64,0x69,0x70,0x6f,0x64,0x69,0x3a,0x6e,0x6f,0x64,0x65,0x74,0x79,0x70,0x65,0x73,
+  0x3d,0x22,0x63,0x63,0x63,0x63,0x63,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x3c,0x2f,
+  0x67,0x3e,0xa,0x20,0x20,0x3c,0x67,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,
+  0x73,0x63,0x61,0x70,0x65,0x3a,0x67,0x72,0x6f,0x75,0x70,0x6d,0x6f,0x64,0x65,0x3d,
+  0x22,0x6c,0x61,0x79,0x65,0x72,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,
+  0x22,0x6c,0x61,0x79,0x65,0x72,0x37,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,
+  0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x6c,0x61,0x62,0x65,0x6c,0x3d,0x22,0x6c,0x65,
+  0x66,0x74,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x3c,0x67,0xa,0x20,0x20,0x20,0x20,
+  0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x67,0x72,0x6f,0x75,0x70,0x6d,
+  0x6f,0x64,0x65,0x3d,0x22,0x6c,0x61,0x79,0x65,0x72,0x22,0xa,0x20,0x20,0x20,0x20,
+  0x20,0x69,0x64,0x3d,0x22,0x6c,0x61,0x79,0x65,0x72,0x38,0x22,0xa,0x20,0x20,0x20,
+  0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x6c,0x61,0x62,0x65,0x6c,
+  0x3d,0x22,0x73,0x63,0x72,0x65,0x77,0x22,0x20,0x2f,0x3e,0xa,0x3c,0x2f,0x73,0x76,
+  0x67,0x3e,0xa,
+  
+};
+
+static const unsigned char qt_resource_name[] = {
+  // mail
+  0x0,0x4,
+  0x0,0x7,0x37,0xfc,
+  0x0,0x6d,
+  0x0,0x61,0x0,0x69,0x0,0x6c,
+    // mail_send.svg
+  0x0,0xd,
+  0xf,0x47,0x16,0x27,
+  0x0,0x6d,
+  0x0,0x61,0x0,0x69,0x0,0x6c,0x0,0x5f,0x0,0x73,0x0,0x65,0x0,0x6e,0x0,0x64,0x0,0x2e,0x0,0x73,0x0,0x76,0x0,0x67,
+  
+};
+
+static const unsigned char qt_resource_struct[] = {
+  // :
+  0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,
+  // :/mail
+  0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2,
+  // :/mail/mail_send.svg
+  0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,
+
+};
+
+QT_BEGIN_NAMESPACE
+
+extern Q_CORE_EXPORT bool qRegisterResourceData
+    (int, const unsigned char *, const unsigned char *, const unsigned char *);
+
+extern Q_CORE_EXPORT bool qUnregisterResourceData
+    (int, const unsigned char *, const unsigned char *, const unsigned char *);
+
+QT_END_NAMESPACE
+
+
+int QT_MANGLE_NAMESPACE(qInitResources_mail)()
+{
+    QT_PREPEND_NAMESPACE(qRegisterResourceData)
+        (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
+    return 1;
+}
+
+Q_CONSTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qInitResources_mail))
+
+int QT_MANGLE_NAMESPACE(qCleanupResources_mail)()
+{
+    QT_PREPEND_NAMESPACE(qUnregisterResourceData)
+       (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
+    return 1;
+}
+
+Q_DESTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qCleanupResources_mail))
+
diff --git a/src/libMvQtGui/window.qrc b/src/libMvQtGui/window.qrc
index ec0afea..5550ed6 100644
--- a/src/libMvQtGui/window.qrc
+++ b/src/libMvQtGui/window.qrc
@@ -4,4 +4,4 @@
     <file alias="exit.svg">../images/exit.svg</file>
     <file alias="configure.svg">../images/configure.svg</file>
   </qresource>
-</RCC>
\ No newline at end of file
+</RCC>
diff --git a/src/libMvQtUtil/Makefile.in b/src/libMvQtUtil/Makefile.in
index 38bb462..cdd1b3b 100644
--- a/src/libMvQtUtil/Makefile.in
+++ b/src/libMvQtUtil/Makefile.in
@@ -191,6 +191,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -206,6 +207,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -232,11 +235,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
diff --git a/src/libMvQtUtil/MvQOdbMetaData.cc b/src/libMvQtUtil/MvQOdbMetaData.cc
index b960230..988506f 100644
--- a/src/libMvQtUtil/MvQOdbMetaData.cc
+++ b/src/libMvQtUtil/MvQOdbMetaData.cc
@@ -77,12 +77,14 @@ MvQOdbMetaData::MvQOdbMetaData(string path,string odbVersion)
 		typeIdMap[odb::REAL]=MvQOdbColumn::Float;
 		typeIdMap[odb::STRING]=MvQOdbColumn::String;
 		typeIdMap[odb::BITFIELD]=MvQOdbColumn::Bitfield;
+		typeIdMap[odb::DOUBLE]=MvQOdbColumn::Double;
 
 		typeIdNameMap[odb::IGNORE]="none";
 		typeIdNameMap[odb::INTEGER]="int";
 		typeIdNameMap[odb::REAL]="float";
 		typeIdNameMap[odb::STRING]="string";
-		typeIdNameMap[odb::BITFIELD]="bitfield";	
+		typeIdNameMap[odb::BITFIELD]="bitfield";
+		typeIdNameMap[odb::DOUBLE]="double";	
 	}
 #endif
 
diff --git a/src/libMvQtUtil/MvQOdbMetaData.h b/src/libMvQtUtil/MvQOdbMetaData.h
index 06794d6..12fa139 100644
--- a/src/libMvQtUtil/MvQOdbMetaData.h
+++ b/src/libMvQtUtil/MvQOdbMetaData.h
@@ -60,7 +60,7 @@ private:
 class MvQOdbColumn
 {
 public:
-	enum OdbColumnType {None, Int, Float, String, Bitfield, OldType};
+	enum OdbColumnType {None, Int, Float, String, Bitfield, Double, OldType};
 
 	MvQOdbColumn() : typeId_(None) {};
 	MvQOdbColumn(QString name,QString type,QString table) : 
diff --git a/src/libUtil/Makefile.am b/src/libUtil/Makefile.am
index 4041657..39a3aa0 100644
--- a/src/libUtil/Makefile.am
+++ b/src/libUtil/Makefile.am
@@ -19,8 +19,9 @@ lib_libUtil_a_SOURCES = \
 		MvMiscelaneous.cc \
 		MvPath.cc   \
 		MvProfileData.cc \
-                MvRequestUtil.cc \
-                MvScm.cc \
+		MvRequestUtil.cc \
+		MvRttov.cc \
+		MvScm.cc \
 		MvStopWatch.cc \
 		MvVersionInfo.cc \
 		Point.cc \
@@ -28,7 +29,7 @@ lib_libUtil_a_SOURCES = \
 		MvGribParC.c 	\
 		Request.cc \
 		TableReader.cc \
-                Tokenizer.cc \
+		Tokenizer.cc \
 		UtilitiesC.c \
 		Cached.h GribMetaData.h LogHandler.h MagicsColours.h MtInputEvent.h MvException.h \
 		MvFileInfo.h MvFlextra.h MvGribParC.h MvKeyManager.h MvKeyProfile.h MvMessageMetaData.h MvMsg.h MvOda.h MvOdb.h \
@@ -39,10 +40,10 @@ lib_libUtil_a_SOURCES = \
 		MvAlmostObsoleteRequest.hpp MvCommandHistory.h MvElement.hpp MvList.hpp \
 		MvMiscelaneous.h MvParTable.hpp MvPath.hpp \
 		MvProfileData.h \
-                MvRequest.hpp MvRequestUtil.hpp MvScm.h Point.hpp Projection.hpp Prototype.hpp Transfm.hpp \
+		MvRequest.hpp MvRequestUtil.hpp MvRttov.h MvScm.h Point.hpp Projection.hpp Prototype.hpp Transfm.hpp \
 		Types.hpp griddoc.hpp imagedoc.hpp proj_braz.hpp stypes.hpp \
 		TableReader.h \
-                Tokenizer.h
+		Tokenizer.h
 
 
 if METVIEW_ODB
diff --git a/src/libUtil/Makefile.in b/src/libUtil/Makefile.in
index a36933d..2bd9c9d 100644
--- a/src/libUtil/Makefile.in
+++ b/src/libUtil/Makefile.in
@@ -62,19 +62,20 @@ am__lib_libUtil_a_SOURCES_DIST = Box.cc Cached.cc Grib.cc \
 	MvAlmostObsoleteRequest.cc MvElement.cc MvException.cc \
 	MvFileInfo.cc MvFlextra.cc MvKeyProfile.cc MvKeyManager.cc \
 	MvList.cc MvMiscelaneous.cc MvPath.cc MvProfileData.cc \
-	MvRequestUtil.cc MvScm.cc MvStopWatch.cc MvVersionInfo.cc \
-	Point.cc proj_braz.cc MvGribParC.c Request.cc TableReader.cc \
-	Tokenizer.cc UtilitiesC.c Cached.h GribMetaData.h LogHandler.h \
-	MagicsColours.h MtInputEvent.h MvException.h MvFileInfo.h \
-	MvFlextra.h MvGribParC.h MvKeyManager.h MvKeyProfile.h \
-	MvMessageMetaData.h MvMsg.h MvOda.h MvOdb.h MvSTL.h \
-	MvStopWatch.h MvVersionInfo.h Rectangle.h Request.h \
-	UtilitiesC.h auto_ptr.h bits.h gdefines.h inc_iostream.h \
-	inc_stl.h min_max_macros.h progress.h xec.h Assertions.hpp \
-	Box.hpp DataTools.hpp DataVis.hpp Factory.hpp Grib.hpp \
-	Imagep.hpp MvAlmostObsoleteRequest.hpp MvCommandHistory.h \
-	MvElement.hpp MvList.hpp MvMiscelaneous.h MvParTable.hpp \
-	MvPath.hpp MvProfileData.h MvRequest.hpp MvRequestUtil.hpp \
+	MvRequestUtil.cc MvRttov.cc MvScm.cc MvStopWatch.cc \
+	MvVersionInfo.cc Point.cc proj_braz.cc MvGribParC.c Request.cc \
+	TableReader.cc Tokenizer.cc UtilitiesC.c Cached.h \
+	GribMetaData.h LogHandler.h MagicsColours.h MtInputEvent.h \
+	MvException.h MvFileInfo.h MvFlextra.h MvGribParC.h \
+	MvKeyManager.h MvKeyProfile.h MvMessageMetaData.h MvMsg.h \
+	MvOda.h MvOdb.h MvSTL.h MvStopWatch.h MvVersionInfo.h \
+	Rectangle.h Request.h UtilitiesC.h auto_ptr.h bits.h \
+	gdefines.h inc_iostream.h inc_stl.h min_max_macros.h \
+	progress.h xec.h Assertions.hpp Box.hpp DataTools.hpp \
+	DataVis.hpp Factory.hpp Grib.hpp Imagep.hpp \
+	MvAlmostObsoleteRequest.hpp MvCommandHistory.h MvElement.hpp \
+	MvList.hpp MvMiscelaneous.h MvParTable.hpp MvPath.hpp \
+	MvProfileData.h MvRequest.hpp MvRequestUtil.hpp MvRttov.h \
 	MvScm.h Point.hpp Projection.hpp Prototype.hpp Transfm.hpp \
 	Types.hpp griddoc.hpp imagedoc.hpp proj_braz.hpp stypes.hpp \
 	TableReader.h Tokenizer.h MvOdb.cc
@@ -96,7 +97,7 @@ am_lib_libUtil_a_OBJECTS = lib_libUtil_a-Box.$(OBJEXT) \
 	lib_libUtil_a-MvPath.$(OBJEXT) \
 	lib_libUtil_a-MvProfileData.$(OBJEXT) \
 	lib_libUtil_a-MvRequestUtil.$(OBJEXT) \
-	lib_libUtil_a-MvScm.$(OBJEXT) \
+	lib_libUtil_a-MvRttov.$(OBJEXT) lib_libUtil_a-MvScm.$(OBJEXT) \
 	lib_libUtil_a-MvStopWatch.$(OBJEXT) \
 	lib_libUtil_a-MvVersionInfo.$(OBJEXT) \
 	lib_libUtil_a-Point.$(OBJEXT) \
@@ -183,6 +184,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -198,6 +200,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -224,11 +228,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -361,8 +368,8 @@ lib_libUtil_a_SOURCES = Box.cc Cached.cc Grib.cc GribMetaData.cc \
 	LogHandler.cc MtInputEvent.cc MvAlmostObsoleteRequest.cc \
 	MvElement.cc MvException.cc MvFileInfo.cc MvFlextra.cc \
 	MvKeyProfile.cc MvKeyManager.cc MvList.cc MvMiscelaneous.cc \
-	MvPath.cc MvProfileData.cc MvRequestUtil.cc MvScm.cc \
-	MvStopWatch.cc MvVersionInfo.cc Point.cc proj_braz.cc \
+	MvPath.cc MvProfileData.cc MvRequestUtil.cc MvRttov.cc \
+	MvScm.cc MvStopWatch.cc MvVersionInfo.cc Point.cc proj_braz.cc \
 	MvGribParC.c Request.cc TableReader.cc Tokenizer.cc \
 	UtilitiesC.c Cached.h GribMetaData.h LogHandler.h \
 	MagicsColours.h MtInputEvent.h MvException.h MvFileInfo.h \
@@ -375,9 +382,9 @@ lib_libUtil_a_SOURCES = Box.cc Cached.cc Grib.cc GribMetaData.cc \
 	Imagep.hpp MvAlmostObsoleteRequest.hpp MvCommandHistory.h \
 	MvElement.hpp MvList.hpp MvMiscelaneous.h MvParTable.hpp \
 	MvPath.hpp MvProfileData.h MvRequest.hpp MvRequestUtil.hpp \
-	MvScm.h Point.hpp Projection.hpp Prototype.hpp Transfm.hpp \
-	Types.hpp griddoc.hpp imagedoc.hpp proj_braz.hpp stypes.hpp \
-	TableReader.h Tokenizer.h $(am__append_1)
+	MvRttov.h MvScm.h Point.hpp Projection.hpp Prototype.hpp \
+	Transfm.hpp Types.hpp griddoc.hpp imagedoc.hpp proj_braz.hpp \
+	stypes.hpp TableReader.h Tokenizer.h $(am__append_1)
 @METVIEW_ODB_TRUE at lib_libUtil_a_CPPFLAGS = $(ODB_CPPFLAGS)
 BUILT_SOURCES = lib
 all: $(BUILT_SOURCES)
@@ -452,6 +459,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libUtil_a-MvPath.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libUtil_a-MvProfileData.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libUtil_a-MvRequestUtil.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libUtil_a-MvRttov.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libUtil_a-MvScm.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libUtil_a-MvStopWatch.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libUtil_a-MvVersionInfo.Po at am__quote@
@@ -830,6 +838,22 @@ lib_libUtil_a-MvRequestUtil.obj: MvRequestUtil.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libUtil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib_libUtil_a-MvRequestUtil.obj `if test -f 'MvRequestUtil.cc'; then $(CYGPATH_W) 'MvRequestUtil.cc'; else $(CYGPATH_W) '$(srcdir)/MvRequestUtil.cc'; fi`
 
+lib_libUtil_a-MvRttov.o: MvRttov.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libUtil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib_libUtil_a-MvRttov.o -MD -MP -MF $(DEPDIR)/lib_libUtil_a-MvRttov.Tpo -c -o lib_libUtil_a-MvRttov.o `test -f 'MvRttov.cc' || echo '$(srcdir)/'`MvRttov.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libUtil_a-MvRttov.Tpo $(DEPDIR)/lib_libUtil_a-MvRttov.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvRttov.cc' object='lib_libUtil_a-MvRttov.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libUtil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib_libUtil_a-MvRttov.o `test -f 'MvRttov.cc' || echo '$(srcdir)/'`MvRttov.cc
+
+lib_libUtil_a-MvRttov.obj: MvRttov.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libUtil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib_libUtil_a-MvRttov.obj -MD -MP -MF $(DEPDIR)/lib_libUtil_a-MvRttov.Tpo -c -o lib_libUtil_a-MvRttov.obj `if test -f 'MvRttov.cc'; then $(CYGPATH_W) 'MvRttov.cc'; else $(CYGPATH_W) '$(srcdir)/MvRttov.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libUtil_a-MvRttov.Tpo $(DEPDIR)/lib_libUtil_a-MvRttov.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='MvRttov.cc' object='lib_libUtil_a-MvRttov.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libUtil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib_libUtil_a-MvRttov.obj `if test -f 'MvRttov.cc'; then $(CYGPATH_W) 'MvRttov.cc'; else $(CYGPATH_W) '$(srcdir)/MvRttov.cc'; fi`
+
 lib_libUtil_a-MvScm.o: MvScm.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libUtil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib_libUtil_a-MvScm.o -MD -MP -MF $(DEPDIR)/lib_libUtil_a-MvScm.Tpo -c -o lib_libUtil_a-MvScm.o `test -f 'MvScm.cc' || echo '$(srcdir)/'`MvScm.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib_libUtil_a-MvScm.Tpo $(DEPDIR)/lib_libUtil_a-MvScm.Po
diff --git a/src/libUtil/MvKeyProfile.cc b/src/libUtil/MvKeyProfile.cc
index 9d0e387..d9ea826 100644
--- a/src/libUtil/MvKeyProfile.cc
+++ b/src/libUtil/MvKeyProfile.cc
@@ -99,7 +99,10 @@ void MvKey::setMetaData(const string &key,const string &value)
 }
 
 	
-
+void MvKey::clearMetaData()
+{
+	metaData_.clear();
+}
 //-----------------------------------
 // MvKeyProfile
 //-----------------------------------
diff --git a/src/libUtil/MvKeyProfile.h b/src/libUtil/MvKeyProfile.h
index 3f7d913..0ba5084 100644
--- a/src/libUtil/MvKeyProfile.h
+++ b/src/libUtil/MvKeyProfile.h
@@ -43,6 +43,7 @@ public:
 	const vector<string>& value() {return value_;}
 	void  setValue(int,string);
 	string firstValue();
+	void clearMetaData();
 	void clearData();
 
 	map<string,int>& counter() {return counter_;}
diff --git a/src/libUtil/MvMiscelaneous.cc b/src/libUtil/MvMiscelaneous.cc
index f69c0f5..8c4115f 100644
--- a/src/libUtil/MvMiscelaneous.cc
+++ b/src/libUtil/MvMiscelaneous.cc
@@ -97,12 +97,13 @@ double saturationMixingRatio(double t, double p)
 }
 
 /*! 
-  \brief computes the saturation  mixing ratio
+  \brief computes the relative himidity
 
-  This method computes the relative himidity.
+  This method computes the relative humidity.
 
   \param t  temperature in K 
   \param p  pressure in Pa
+  \param q  specific humidity in kg/kg
   \return   relative humidity (0-1) 
 */
 
@@ -115,7 +116,23 @@ double relativeHumidity(double t, double p,double q)
 }
 
 /*! 
-  \brief computes the specific humidity
+  \brief computes the relative himidity from dewpoint temperature
+
+  This method computes the relative humidity from dewpoint temperature.
+
+  \param t  temperature in K 
+  \param td dewpoint temperature in K 
+  \return   relative humidity (0-1) 
+*/
+
+double relativeHumidityFromTd(double t, double td)
+{
+	double es=saturationVapourPressure(td)/saturationVapourPressure(t);	
+  	return es; 
+}
+
+/*! 
+  \brief computes the specific humidity from relative humidity
 
   This method computes specific humidity from relative humidity
 
@@ -134,6 +151,24 @@ double specificHumidity(double t, double p,double r)
 }
 
 /*! 
+  \brief computes the specific humidity from dewpoint temperature
+
+  This method computes specific humidity from dewpoint temperature
+
+  \param t  temperature in K 
+  \param p  pressure in Pa
+  \param td  dewpoint temperature in K 
+  \return   specific humidity in kg/kg 
+*/
+
+double specificHumidityFromTd(double t, double p,double td)
+{
+  	double r=relativeHumidityFromTd(t,td);
+  	return specificHumidity(t,p,r);
+
+}
+
+/*! 
   \brief computes the saturation vapour pressure over water from temperature
  
   This method computes the saturation vapour pressure
@@ -172,14 +207,14 @@ double saturationVapourPressure(double t)
 }	
 
 /*! 
-  \brief computes the vapour pressure over from temperature and spec humidity
+  \brief computes the vapour pressure over from pressure and spec humidity
  
   This method computes the vapour pressure
-  from temperature and specific humidity.
+  from pressure and specific humidity.
 
-  \param t temperature in K
+  \param p pressure in Pa 
   \param q specific humidity in kg/kg
-  \return pressure in Pa   
+  \return vapour pressure in Pa   
 */   
 double vapourPressure(double p,double q)
 {
@@ -187,4 +222,42 @@ double vapourPressure(double p,double q)
 	return p*w/(0.621981+w);
 }  
   
+/*! 
+  \brief computes the water vapour ppmv from pressure and specific humidity
+ 
+  This method computes the water vapour ppmv
+  from pressure and specific humidity.
+
+  \param p pressure in Pa 
+  \param q specific humidity in kg/kg
+  \return humidity in ppm   
+*/     
+  
+double vapourPPMV(double p,double q)
+{
+	double pw=vapourPressure(p,q);
+	return pw/(p-pw)*1000000;
+}  
+  
+/*! 
+  \brief computes the ozone ppmv from mixing ratio
+ 
+  This method computes the ozone ppmv
+  from from mixing ratio.
+
+  \param r ozone mixing ratio in kg/kg 
+  \return ozone in ppmv  
+*/     
+  
+double ozonePPMV(double r)
+{
+	double mmr2vmr = 28.97/48.0;
+	return 1000000*r*mmr2vmr;
+}  
+  
+ 
 } //namespace metview
+
+
+
+
diff --git a/src/libUtil/MvMiscelaneous.h b/src/libUtil/MvMiscelaneous.h
index 14aaf6f..73a2814 100644
--- a/src/libUtil/MvMiscelaneous.h
+++ b/src/libUtil/MvMiscelaneous.h
@@ -21,9 +21,13 @@ void shellCommand(string&, stringstream&, stringstream&);
 bool createWorkDir(string prefix,string& tmpPath,string& errTxt);
 double saturationMixingRatio(double t, double p);
 double relativeHumidity(double t, double p,double q);
+double relativeHumidityFromTd(double t, double td);
 double specificHumidity(double t, double p,double r);
+double specificHumidityFromTd(double t, double p,double td);
 double saturationVapourPressure(double t);
 double vapourPressure(double p,double q);
+double vapourPPMV(double p,double q);
+double ozonePPMV(double r);
 
 template<typename TYPE>
 inline string toString(const TYPE& in)
diff --git a/src/libUtil/MvOdb.cc b/src/libUtil/MvOdb.cc
index d801a4e..9c6c969 100644
--- a/src/libUtil/MvOdb.cc
+++ b/src/libUtil/MvOdb.cc
@@ -65,6 +65,9 @@ void MvOdbColumn::addToStats(float val)
 	std_+=val*val;
 }
 
+void MvOdbColumn::addToStats(double val)
+{
+}
 
 void MvOdbColumn::compStats()
 {
@@ -88,6 +91,7 @@ void MvOdbColumn::unload()
 	fval_.clear();
 	ival_.clear();
 	sval_.clear();
+	dval_.clear();
 	loaded_=false;
 }
 
@@ -102,7 +106,8 @@ int MvOdbColumn::rowNum() const
 		return ival_.size();	
 	if(sval_.size() >0)
 		return sval_.size();
-
+	if(dval_.size() >0)
+		return dval_.size();
 	return -1;
 }
 
@@ -203,6 +208,7 @@ void MvOdb::init()
 		typeMap[odb::REAL]=MvOdbColumn::Float;
 		typeMap[odb::STRING]=MvOdbColumn::String;
 		typeMap[odb::BITFIELD]=MvOdbColumn::Bitfield;
+		typeMap[odb::DOUBLE]=MvOdbColumn::Double;
 	}
 
 	odb_start();
@@ -326,6 +332,7 @@ int MvOdb::totalSizeInMb()
   	
   	size_t intSize=sizeof(int);
   	size_t floatSize=sizeof(float);
+	size_t doubleSize=sizeof(double);
 	
 	float totalSize=0.;
 	
@@ -339,6 +346,10 @@ int MvOdb::totalSizeInMb()
 		{
 			totalSize+=(rowNum*floatSize)/mb;
 		}
+		else if(column_[i]->type() == MvOdbColumn::Double)
+		{
+			totalSize+=(rowNum*doubleSize)/mb;
+		}
 		else if(column_[i]->type() == MvOdbColumn::String)
 		{
 			totalSize+=(rowNum*8)/mb;
@@ -491,7 +502,7 @@ const MvOdbColumn* MvOdb::loadColumn(int pos,bool reload)
 				column_[pos]->addIntData(static_cast<int>((*it)[pos]));			 
 			}
 		}	
-		else
+		else if(column_[pos]->type() == MvOdbColumn::Float || column_[pos]->type() == MvOdbColumn::Bitfield)
 		{
 			i=0;
 			for(; it != oda.end() && i < chunkSize_; ++it, i++) 
@@ -499,6 +510,15 @@ const MvOdbColumn* MvOdb::loadColumn(int pos,bool reload)
 				column_[pos]->addFloatData((*it)[pos]);		
 			}
 		}
+		else if(column_[pos]->type() == MvOdbColumn::Double)
+		{
+			i=0;
+			for(; it != oda.end() && i < chunkSize_; ++it, i++) 
+			{			
+				column_[pos]->addDoubleData((*it)[pos]);		
+			}
+		}
+		
 	}
 	//No chunks are used for load
 	else
@@ -510,20 +530,27 @@ const MvOdbColumn* MvOdb::loadColumn(int pos,bool reload)
 				column_[pos]->addStringData((*it).string(pos));		
 			}
 		}
-		if(column_[pos]->type() == MvOdbColumn::Int)
+		else if(column_[pos]->type() == MvOdbColumn::Int)
 		{
 			for(; it != oda.end(); ++it) 
 			{			
 				column_[pos]->addIntData(static_cast<int>((*it)[pos]));		
 			}
-		}
-		else
+		}		
+		else if(column_[pos]->type() == MvOdbColumn::Float || column_[pos]->type() == MvOdbColumn::Bitfield)
 		{
 			for(; it != oda.end(); ++it) 
 			{			
 				column_[pos]->addFloatData((*it)[pos]);		
 			}
 		}
+		else if(column_[pos]->type() == MvOdbColumn::Double)
+		{
+			for(; it != oda.end(); ++it) 
+			{			
+				column_[pos]->addDoubleData((*it)[pos]);		
+			}
+		}
 	}
 
 	column_[pos]->setLoaded(true);
@@ -587,7 +614,11 @@ void MvOdb::loadAllColumns()
 				{
 				  	column_[pos]->addIntData(static_cast<int>((*it)[pos]));			 
 				}
-				else
+				else if(column_[pos]->type() == MvOdbColumn::Double)
+				{
+				  	column_[pos]->addDoubleData((*it)[pos]);			
+				}
+				else 
 				{
 				  	column_[pos]->addFloatData((*it)[pos]);			
 				}
@@ -608,7 +639,11 @@ void MvOdb::loadAllColumns()
 				else if(column_[pos]->type() == MvOdbColumn::Int)
 				{
 					column_[pos]->addIntData(static_cast<int>((*it)[pos]));				
-				}  
+				} 
+				else if(column_[pos]->type() == MvOdbColumn::Double)
+				{				
+					column_[pos]->addDoubleData((*it)[pos]);		
+				}
 				else
 				{				
 					column_[pos]->addFloatData((*it)[pos]);		
diff --git a/src/libUtil/MvOdb.h b/src/libUtil/MvOdb.h
index 6826953..23c477e 100644
--- a/src/libUtil/MvOdb.h
+++ b/src/libUtil/MvOdb.h
@@ -42,10 +42,11 @@ private:
 class MvOdbColumn
 {
 public:
-	enum OdbColumnType {None, Int, Float, String, Bitfield};
+	enum OdbColumnType {None, Int, Float, String, Bitfield, Double};
 
 	MvOdbColumn() : type_(None), num_(0), min_(1.0e+08), max_(-1.0e+08), loaded_(false) {};
 	void addToStats(float);
+	void addToStats(double);
 	void compStats();
 
 	string name() const {return name_;}
@@ -70,7 +71,9 @@ public:
 	void setLoaded(bool);
 	void addStringData(string s) {sval_.push_back(s);}
 	void addFloatData(float f) {fval_.push_back(f);}
+	void addDoubleData(double d) {dval_.push_back(d);}
 	void addIntData(int i) {ival_.push_back(i);}
+	const vector<double>& doubleData() const {return dval_;}
 	const vector<float>& floatData() const {return fval_;}
 	const vector<int>& intData() const {return ival_;}
 	const vector<string>& stringData() const {return sval_;}
@@ -94,6 +97,7 @@ private:
 	vector<float> fval_;
 	vector<int>    ival_;
 	vector<string> sval_;
+	vector<double> dval_;
 };
 
 
diff --git a/src/libUtil/MvProfileData.h b/src/libUtil/MvProfileData.h
index 2202457..77739ae 100644
--- a/src/libUtil/MvProfileData.h
+++ b/src/libUtil/MvProfileData.h
@@ -21,23 +21,29 @@ class MvScmProfileData;
 class MvProfileChange
 {
 public:
-	MvProfileChange() {}	
+	MvProfileChange() : group_(NoGroup) {}	
 	MvProfileChange(int lev, float val, float prevVal) :
-	    level_(lev), value_(val), prevValue_(prevVal) {}
+	    level_(lev), value_(val), prevValue_(prevVal), group_(NoGroup) {}
 	
-	MvProfileChange(const MvProfileChange& c) : level_(c.level()),  value_(c.value()), prevValue_(c.prevValue()) {}
+	MvProfileChange(const MvProfileChange& c) : level_(c.level()),  value_(c.value()), prevValue_(c.prevValue()), group_(c.group()) {}
+	
+	enum GroupStatus {GroupStart,GroupEnd,GroupMember,NoGroup};
 	
 	virtual bool checkData(const MvProfileData&) const {return false;}
 	virtual bool checkData(const MvScmProfileData&) const {return false;}
 	
+	
 	int    level() const {return level_;}
 	float  value() const {return value_;}
 	float  prevValue() const {return prevValue_;}
+	GroupStatus   group() const {return group_;}
+	void  setGroup(GroupStatus b) {group_=b;}
 
 protected:
 	int level_;
 	float value_;
 	float prevValue_;
+	GroupStatus group_;
 };
 
 class MvProfileData
diff --git a/src/libUtil/MvRequestUtil.cc b/src/libUtil/MvRequestUtil.cc
index dd0d1c0..6bc92fd 100644
--- a/src/libUtil/MvRequestUtil.cc
+++ b/src/libUtil/MvRequestUtil.cc
@@ -245,18 +245,19 @@ AreEqualRequests ( MvRequest& req1, MvRequest& req2 )
 }
 
 bool
-IsParameterSet ( MvRequest& request, const Cached& paramSought )
+IsParameterSet ( MvRequest& request, const char* paramSought )
 {
-	int count = request.countParameters();
+   int count = request.countParameters();
 
-	for( int i = 0; i < count ; i++ )
-	{
-		Cached paramFound = request.getParameter(i);
+   for( int i = 0; i < count ; i++ )
+   {
+      const char* paramFound = (const char*)request.getParameter(i);
 
-		if ( paramFound == paramSought )
-			return true;
-	}
-return false;
+      if ( strcmp(paramFound,paramSought) == 0 )
+         return true;
+   }
+
+   return false;
 }
 
 bool
@@ -322,42 +323,20 @@ MergeTextParameters ( MvRequest&  inRequest,
 	CopySomeParameters (inRequest, outRequest, "TEXT_", overwrite);
 }
 
-#if 0
-//-- moved to MvCheckFileType.cc
-
-//----
-//--- Check if a file is a binary file or a missing file i.e.
-//--  does the file have any chance to contain a Metview request!
-//-
-
-bool
-IsBinaryOrMissingFile( const char* fileName )
+void
+CopyParametersAndStackingOrder ( const MvRequest& inRequestOld, const MvRequest& inRequestNew, int index, MvRequest& outRequest )
 {
-	ifstream f( fileName );
-	if( !f )
-	  return true;                     //-- missing file
-
-	bool isBinary = false;
-	const int CHECKLEN = 4000;         //-- may be a huge PostScript file
-	                                   //-- => check beginning only is ok
-	int chr = f.get();
-	for( int ci=0; ci<CHECKLEN; ++ci ) //-- look for "binary" chars
-	  {
-	    if( f.eof() )
-	      break;
-
-	    if( ! isprint(chr) && ! isspace(chr) )
-	      {
-		isBinary = true;           //-- binary file
-		break;
-	      }
-
-	    chr = f.get();
-	  }
-
-	f.close();
-
-	return isBinary;
+   // Create a new request based on inRequestNew and taking into consideration the
+   // drawing order info. If there is a new drawing order info then update it too;
+   // otherwise, keep the previous one (if it exists).
+   outRequest = inRequestNew;
+   if ( index != -1 || !inRequestOld )
+      outRequest("_STACKING_ORDER") = index;
+   else
+   {
+      const char* corder = (const char*)inRequestOld("_STACKING_ORDER");
+      outRequest("_STACKING_ORDER") = (int)(corder ? atoi(corder) : -1);
+   }
+
+   return;
 }
-
-#endif
diff --git a/src/libUtil/MvRequestUtil.hpp b/src/libUtil/MvRequestUtil.hpp
index fb30c5c..6edda5b 100644
--- a/src/libUtil/MvRequestUtil.hpp
+++ b/src/libUtil/MvRequestUtil.hpp
@@ -48,8 +48,7 @@ void MergeTextParameters ( MvRequest&  inRequest,
 bool AreEqualRequests ( MvRequest& req1, MvRequest& req2 );
 
 // --- Find if a parameter has been set
-
-bool IsParameterSet ( MvRequest& request, const Cached& paramSought );
+bool IsParameterSet ( MvRequest&, const char* );
 
 // -- Copy a value to a parameter
 bool SetIfValue( MvRequest& req, const char* param, const char* val );
@@ -57,12 +56,8 @@ bool SetIfValue( MvRequest& req, const char* param, const char* val );
 // -- Remove parameters with a certain prefix
 void RemoveParameters ( MvRequest& req, const char* prefix );
 
-#if 0
-//-- moved to MvCheckFileType.h
-
-//-- check if file is missing a binary file --
-bool IsBinaryOrMissingFile( const char* fileName );
-#endif
+// -- Copy a request taking into consideration the Drawing Order parameter
+void CopyParametersAndStackingOrder ( const MvRequest& inRequestOld, const MvRequest& inRequestNew, int index, MvRequest& outRequest );
 
 #endif
  
diff --git a/src/libUtil/MvRttov.cc b/src/libUtil/MvRttov.cc
new file mode 100644
index 0000000..a158a86
--- /dev/null
+++ b/src/libUtil/MvRttov.cc
@@ -0,0 +1,225 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 *************************************/
+
+/******************************************************************************
+
+    The MvRttov class loads and parses an output file from the RTTOV model.
+    A skeleton of such a file looks like:
+
+
+ # RTTOV OUTPUT     
+  -----------------
+  Instrument iasi    
+  -----------------
+  ... <parameter lines>
+  ... <parameter lines>
+2m air parameters
+  param_name (units)   value
+  param_name (units)   value
+  ...
+  <blank line>
+  <other lines>
+
+ OUTPUT: CHANNEL BRIGHTNESS TEMPERATURE       EMISSIVITY:
+  
+            1    218.8644864351669        0.9531080000000000     
+            2    218.8867066300515        0.9531470000000000 
+            .... <more lines of output>    
+ <blank lines>
+ JACOBIANS:
+  0.0000E+00           1           2           3  ...
+  0.1000E-01 -0.2195E-14 -0.5583E-14 -0.2388E-12  ...
+
+
+******************************************************************************/
+
+
+#include <sstream>
+#include <fstream>
+#include <algorithm>
+
+#include "MvRttov.h"
+#include "TableReader.h"
+
+using namespace std;
+
+
+MvRttov::MvRttov()
+{
+    fileName_     = "NO FILE SPECIFIED";
+    currentLine_  = 0;
+}
+
+
+MvRttov::~MvRttov()
+{
+}
+
+
+
+// ----------------------------------------------------------------------
+// MvRttov::searchForLineContainingString
+// Reads line after line of text from the given input stream and stops
+// when it finds the given string (and returns true) or when it reaches
+// the end of the file (and returns false).
+// ----------------------------------------------------------------------
+
+bool MvRttov::searchForLineContainingString(ifstream &ifs, string &str)
+{
+    string line;
+    bool found = false;
+    while(!found && !ifs.eof())
+    {
+        getline(ifs,line);
+        currentLine_++;
+        if (line.find(str) != string::npos)  // does this line match the given string?
+        {
+            found = true;
+        }
+    }
+    return true;
+}
+
+
+// ----------------------------------------------------------------------
+// MvRttov::parseFile
+// Reads the given file into memory and stores structured information
+// and data from it. If it returns false, then errorMessage() should be
+// called in order to obtain the reason for the failure.
+// ----------------------------------------------------------------------
+
+bool MvRttov::parseFile(std::string &fileName)
+{
+    fileName_ = fileName;
+
+    // open the file
+    ifstream in(fileName.c_str());
+
+    if (!in)
+    {
+        errorMsg_ = "Unable to read file " + fileName;
+        return false;
+    }
+
+
+    // look for the start of the tb data
+
+    string headerString = "OUTPUT:";
+    bool found = searchForLineContainingString(in, headerString);
+
+    if (!found)  // could not find the start of the data?
+    {
+        errorMsg_ = "Could not find label '" + headerString + "' in file";
+        return false;
+    }
+
+
+    // now we're at the start of the data, keep reading each line until we
+    // get to a blank line (or eof)
+
+    string line;
+    getline(in,line);  // first, skip the blank line between the header and the data
+    currentLine_++;
+
+    int channel;
+    double tb, emis;
+    bool endOfData = false;
+    while (!endOfData && !in.eof())
+    {
+        getline(in,line);  // first, skip the blank line between the header and the data
+        currentLine_++;
+        istringstream iss(line);
+        if (iss >> channel)  // any valid data on this line?
+        {
+            iss >> tb;
+            iss >> emis;
+            channels_.push_back(channel);
+            tbs_.push_back(tb);
+        }
+        else
+        {
+            endOfData = true;
+        }
+    }
+
+
+
+
+    // ----- look for the start of the Jacobian data -----
+
+    headerString = "JACOBIANS:";
+    found = searchForLineContainingString(in, headerString);
+
+    if (!found)  // could not find the start of the data?
+    {
+        errorMsg_ = "Could not find label '" + headerString + "' in file";
+        return false;
+    }
+
+
+    // use the Table Reader to parse the table of Jacobians
+
+    TableReader tableReader(fileName);
+    tableReader.setDelimiter(' ');
+    tableReader.setHeaderRow(currentLine_+1);
+    tableReader.setConsecutiveDelimitersAsOne(true);
+
+    string errorMsg;
+    bool ret;
+
+    ret = tableReader.getMetaData(errorMsg);
+
+    if (!ret)
+    {
+        errorMsg_ = errorMsg;
+        return false;
+    }
+
+    vector<string> &colNames = tableReader.fieldNames();
+
+
+    // for each column, create a vector to hold its values and tell the Table Reader
+    // that this vector should store the values for that column
+
+    string emptyString;
+    jacobians_.reserve(colNames.size());
+    for (size_t i = 0; i < colNames.size(); i++)
+    {
+        vector<double> vd;
+        jacobians_.push_back(vd);
+        tableReader.setFieldContainer(i, emptyString, jacobians_[jacobians_.size()-1], -99999);
+    }
+
+
+    // read the data from the file
+
+    ret = tableReader.read(errorMsg);
+
+    if (!ret)
+    {
+        errorMsg_ = errorMsg;
+        return false;
+    }
+
+
+    // reverse the arrays of data so that the bottom pressure level is first
+    // (so that the default visualisation has the vertical axis the 'right way up'
+
+    for (size_t i = 0; i < colNames.size(); i++)
+    {
+        vector<double> &vd = jacobians_[i];
+        reverse(vd.begin(), vd.end());
+    }
+
+
+    return true;
+}
+
+
+
diff --git a/src/libUtil/MvRttov.h b/src/libUtil/MvRttov.h
new file mode 100644
index 0000000..0bdbcfd
--- /dev/null
+++ b/src/libUtil/MvRttov.h
@@ -0,0 +1,45 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 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 MvRttov_inc
+#define MvRttov_inc
+
+
+#include <string>
+#include <vector>
+
+class MvRttov
+{
+
+public:
+    MvRttov();
+    ~MvRttov();
+
+    bool parseFile(std::string &fileName);
+    std::string errorMessage()   {return errorMsg_;};
+    std::vector<int>& channels() {return channels_;};
+    std::vector<double>& tbs()   {return tbs_;};
+    std::vector<double>& jacobianPressures()      {return jacobians_[0];};
+    std::vector<double>& jacobianValues(size_t i) {return jacobians_[i+1];};
+
+
+private:
+    bool searchForLineContainingString(std::ifstream &ifs, std::string &str);
+
+    int currentLine_;
+    std::string fileName_;
+    std::string errorMsg_;
+    std::vector<int> channels_;
+    std::vector<double> tbs_;
+    std::vector<int> jacobianChannels_;
+    std::vector<std::vector<double> > jacobians_;
+
+};
+
+
+#endif  // MvRttov_inc
diff --git a/src/libUtil/MvScm.cc b/src/libUtil/MvScm.cc
index 6b9c5f3..4304149 100644
--- a/src/libUtil/MvScm.cc
+++ b/src/libUtil/MvScm.cc
@@ -11,6 +11,7 @@
 
 #include "MvMiscelaneous.h"
 
+#include <fstream>
 #include <set>
 #include <sstream>
 #include <string.h>
@@ -179,13 +180,26 @@ bool MvScmProfileData::acceptChange(const MvProfileChange& ch) const
 void MvScmDim::init(NcFile& nc,string name)
 {  
 	name_=name;
-  
-  	NcDim *dim=nc.get_dim(name_.c_str());
-	if(dim)
+  	NcDim *dim;
+	
+	//We need this solution because nc.get_dim(name_.c_str());
+	//crahes when the dimension does not exist
+	
+	int dnum=nc.num_dims();
+	bool found=false;
+	for(int i=0; i < dnum; i++)
 	{
-	  	size_=dim->size();
+	  	NcDim *dim=nc.get_dim(i);
+		if(dim && strcmp(dim->name(),name.c_str()) == 0)
+		{
+			 size_=dim->size();
+			 found=true;
+			 break;
+		}  	
 	}
 	
+	if(!found)
+		return;
 	
 	int varNum=nc.num_vars();
 	for(int i=0; i < varNum; i++)
@@ -268,8 +282,7 @@ MvScmVar::MvScmVar(LevelType levelType, NcVar *var,const MvScmDim& timeDim) :
   presentInFile_(true),
   rangeSet_(false),
   consistency_(0),
-  useOffset_(false),
-  offsetUnits_("")
+  unitsConverter_(0)
 {
 	setName(var);
   	setAttributes(var);
@@ -297,8 +310,7 @@ MvScmVar::MvScmVar(LevelType levelType, NcVar *var,const MvScmDim& timeDim, cons
   presentInFile_(true),
   rangeSet_(false),
   consistency_(0),
-  useOffset_(false),
-  offsetUnits_("")
+  unitsConverter_(0)
 {
 	setName(var);
   	setAttributes(var);
@@ -321,15 +333,15 @@ MvScmVar::MvScmVar(LevelType levelType, NcVar *var,const MvScmDim& timeDim, cons
 	delete [] vals;
 }
 
-/*
-MvScmVar::MvScmVar(const string& name, const string& longName, const string& units,MvScmVar *var,float offset) :
+//Create a new variable that is not present in the file
+MvScmVar::MvScmVar(const string& name, const string& longName, const string& units,MvScmVar *var) :
    name_(name),
    longName_(longName),
    units_(units),
    presentInFile_(false),
    rangeSet_(false),
    consistency_(0),
-   offset_(offset)
+   unitsConverter_(0)
 {
 	levelType_=var->levelType();
 	
@@ -339,7 +351,7 @@ MvScmVar::MvScmVar(const string& name, const string& longName, const string& uni
 		data_.push_back(vector<float>(var->data(i).size(),0.));
 		dataOri_.push_back(vector<float>());
 	}
-}  */
+} 
 
 MvScmVar::~MvScmVar()
 {
@@ -349,8 +361,8 @@ MvScmVar::~MvScmVar()
 
 string MvScmVar::units() const 
 {
-  	if(useOffset_)
-	  	return offsetUnits_;
+  	if(unitsConverter_)
+	  	return unitsConverter_->units_;
 	else	   
   		return units_;
 }	
@@ -407,10 +419,10 @@ float MvScmVar::consistencyValue(int ts,int lev)
 	{ 
 	  	if(lev >=0 && lev < static_cast<int>(data_.at(ts).size()))
 		{
-			if(!useOffset_)
+			if(!unitsConverter_)
 			  	return  data_.at(ts)[lev];
 			else
-			  	return  data_.at(ts)[lev]-offset_;
+			  	return  unitsConverter_->convertFrom(data_.at(ts)[lev]);
 		}	
 	}
 	
@@ -419,10 +431,10 @@ float MvScmVar::consistencyValue(int ts,int lev)
 
 bool MvScmVar::setConsistentValue(int ts,int lev,float val)
 {
-  	if(!useOffset_)
+  	if(!unitsConverter_)
 	  	return setValue(ts,lev,val,false);
 	else
-	  	return setValue(ts,lev,val+offset_,false);
+	  	return setValue(ts,lev,unitsConverter_->convertTo(val),false);
 }
 
 bool MvScmVar::setValue(int ts,int lev,float val,bool checkCons)
@@ -481,6 +493,49 @@ bool MvScmVar::setValue(int ts,int lev,float val,MvScmProfileChange& ch,bool che
  
 }
 
+bool MvScmVar::setValues(int ts,float val,vector<MvScmProfileChange>& ch,bool checkCons)
+{
+	if(ts >=0 && ts < static_cast<int>(data_.size()))
+	{	  	
+	  	int levnum=static_cast<int>(data_.at(ts).size());
+	  	for(int lev=0; lev < levnum; lev++)
+		{
+			if(dataOri_.at(ts).size() == 0)
+			{	  
+		 		dataOri_.at(ts)=data_.at(ts); 
+				changed_=true;
+			}
+		
+			float prevVal=data_.at(ts)[lev];		
+			data_.at(ts)[lev]=val;			
+			
+			MvScmProfileChange chItem(this,ts,lev,val,prevVal);			
+			
+			if(lev==0)
+			  	chItem.setGroup(MvProfileChange::GroupStart);
+			else if(lev==levnum-1)
+			  	chItem.setGroup(MvProfileChange::GroupEnd);
+			else
+			  	chItem.setGroup(MvProfileChange::GroupMember);
+			
+			if(MvScm::needConsistency() && checkCons)			  
+			{			  	
+			  	checkConsistency(ts,lev);
+				if(consistency_)
+				  	chItem.setDependantVar(consistency_->target());
+			}
+			
+			ch.push_back(chItem);			
+			
+		}		
+		
+		return true;
+		
+	}
+	
+	return false;  
+ 
+}
  
 bool MvScmVar::changed(int ts)
 {
@@ -552,12 +607,12 @@ bool MvScmVar::saveChanges(NcFile &nc)
 					counts[0]=1;
 					counts[1]=data_.at(ts).size();
 					
-					if(useOffset_)
+					if(unitsConverter_)
 					{
 					 	float *vals=new float[data_.at(ts).size()];
 					  	for(unsigned int i=0; i< data_.at(ts).size();i++)
 						{
-						  	vals[i]=data_.at(ts).at(i)-offset_;
+						  	vals[i]=unitsConverter_->convertFrom(data_.at(ts).at(i));
 						}
 						outVar->set_cur(ts,0);				
 						outVar->put(vals,counts);
@@ -577,10 +632,10 @@ bool MvScmVar::saveChanges(NcFile &nc)
 					long counts[1];		
 					counts[0]=1;
 					
-					if(useOffset_)
+					if(unitsConverter_)
 					{					 	
 					  	float *vals=new float[1];					  	
-						vals[0]=data_.at(ts).at(0)-offset_;
+						vals[0]=unitsConverter_->convertFrom(data_.at(ts).at(0));
 						outVar->set_cur(ts);				
 						outVar->put(vals,counts);
 					
@@ -643,7 +698,38 @@ bool MvScmVar::fitToRange(float& val)
 	
 	return true;
 }
-			
+
+void MvScmVar::compute(MvScmVar *v1,CompProc1 proc)
+{
+  	for(unsigned int ts=0; ts < data_.size(); ts++)
+	{
+	  	const vector<float>& d1=v1->data(ts);
+		
+	  	for(unsigned int lev=0; lev < data_.at(ts).size(); lev++)
+		{		  	
+		  	float val=(*proc)(d1.at(lev));
+		  	fitToRange(val);
+			data_.at(ts)[lev]=val;
+		}
+	}		  
+}
+
+void MvScmVar::compute(MvScmVar *v1,MvScmVar *v2,CompProc2 proc)
+{
+  	for(unsigned int ts=0; ts < data_.size(); ts++)
+	{
+	  	const vector<float>& d1=v1->data(ts);
+		const vector<float>& d2=v2->data(ts);
+	  
+	  	for(unsigned int lev=0; lev < data_.at(ts).size(); lev++)
+		{		  	
+		  	float val=(*proc)(d1.at(lev),d2.at(lev));
+		  	fitToRange(val);
+			data_.at(ts)[lev]=val;
+		}
+	}		  
+}
+
 void MvScmVar::compute(MvScmVar *v1,MvScmVar *v2,MvScmVar *v3,CompProc3 proc)
 {
   	for(unsigned int ts=0; ts < data_.size(); ts++)
@@ -680,20 +766,21 @@ void MvScmVar::setConsistency(MvScmConsistency *c)
 	consistency_=c;
 }
 
-void MvScmVar::setOffset(float offset,string units)
+void MvScmVar::setUnits(float offset,float scale,string units)
 {
-	if(useOffset_)
+	if(unitsConverter_)
 	  	return;
 	
-	offset_=offset;
-	offsetUnits_=units;
-	useOffset_=true;
+	unitsConverter_=new MvScmUnitsConverter;
+	unitsConverter_->offset_=offset;
+	unitsConverter_->scale_=scale;
+	unitsConverter_->units_=units;
 		
 	for(unsigned int ts=0; ts < data_.size(); ts++)
 	{
 	  	for(unsigned int lev=0; lev < data_.at(ts).size(); lev++)
 		{		  	
-			data_.at(ts)[lev]+=offset_;
+			data_.at(ts)[lev]=unitsConverter_->convertTo(data_.at(ts)[lev]);
 		}
 	}		  
 }	
@@ -729,34 +816,51 @@ bool MvScmVar::overwrite(int fromTs)
  
 }
 
-
-
+bool MvScmVar::write(ofstream &out,int ts,bool useConverted,bool newline)
+{
+	if(ts >=0 && ts < static_cast<int>(data_.size()))
+	{
+	  	for(unsigned int lev=0; lev < data_.at(ts).size(); lev++)
+		{		  	
+		  	if(!unitsConverter_ || useConverted)
+				out << data_.at(ts)[lev];
+			else				  
+			  	out << unitsConverter_->convertFrom(data_.at(ts)[lev]);
+			
+			if(newline)
+			  	out << endl;
+		}
+		return true;
+	}
+	
+	return false;
+}  
+  
+  
 //=========================================================
 //
 //  MvScm
 //
 //=========================================================
 
-MvScm::MvScm(const string& fileName) : 
-	fileName_(fileName)
-{
-	mlVarName_["pressure_f"]=PresML;
-	mlVarName_["height_f"]=HeightML;
-	mlVarName_["t"]=TempML;
-	mlVarName_["u"]=WindUML;
-	mlVarName_["v"]=WindVML;
-	mlVarName_["q"]=SpHumML;
-	mlVarName_["relative_humidity"]=RelHumML;
-	mlVarName_["ql"]=CloudLiqML;
-	mlVarName_["qi"]=CloudIceML;
-	
-	soilVarName_["t_soil"]=TempSoil;
-	soilVarName_["q_soil"]=HumSoil;
+MvScm::MvScm(const string& fileName,bool convertUnits) : 
+	fileName_(fileName),
+	convertUnits_(convertUnits)
+{ 
+  	//Figure out the id
+  	decodeId(); 
 	
-	surfVarName_["t_skin"]=TempSurf;
-	surfVarName_["t_sea_ice"]=TempSeaIceSurf;
-	surfVarName_["open_sst"]=TempSeaSurf;
+	//Map variables
+	if(id_.find("SCM") != string::npos || id_.find("scm") != string::npos )
+	{
+		mapRttovVars();
+	}
+	if(id_ == "NETCDF_RTTOV_INPUT")
+	{
+		mapRttovVars();
+	}
 	
+	//Decode data	
 	decode();
 }  
 
@@ -775,16 +879,104 @@ MvScm::~MvScm()
   		delete soil_.at(i);	
 }
 
+void MvScm::decodeId()
+{
+	NcFile nc(fileName_.c_str());
+	
+	//Get id
+	int n=nc.num_atts();
+	for(int i=0; i < n; i++)
+	{  	
+		NcAtt* att=nc.get_att(i);
+		if(att != NULL && att->name() != NULL && 
+		   strcmp(att->name(),"dataID") == 0 && att->num_vals() > 0)
+		{  
+			char* v=att->as_string(0);
+			if(v) id_=string(v);
+			break;
+		}
+	}	
+	
+}
+
+void MvScm::mapRttovVars()
+{
+  	mlVarName_["pressure"]=PresML;
+	mlVarName_["height_f"]=HeightML;
+	mlVarName_["t"]=TempML;
+	mlVarName_["u"]=WindUML;
+	mlVarName_["v"]=WindVML;
+	mlVarName_["q"]=SpHumML;
+	mlVarName_["relative_humidity"]=RelHumML;
+	mlVarName_["ql"]=CloudLiqML;
+	mlVarName_["qi"]=CloudIceML;
+	mlVarName_["o3"]=OzoneML;
+	
+	soilVarName_["t_soil"]=TempSoil;
+	soilVarName_["q_soil"]=HumSoil;
+	
+	surfVarName_["t_skin"]=TempSurf;
+	surfVarName_["t_sea_ice"]=TempSeaIceSurf;
+	surfVarName_["open_sst"]=TempSeaSurf;
+	surfVarName_["sea_ice_frct"]=SeaIceFractionSurf;
+	
+	surfVarName_["t_2"]=Temp2Surf;
+	surfVarName_["td_2"]=Td2Surf;
+	surfVarName_["q_2"]=SpecHum2Surf;
+	surfVarName_["u_10"]=WindU10Surf;
+	surfVarName_["v_10"]=WindV10Surf;
+	surfVarName_["orog"]=OrogSurf;
+	surfVarName_["z_sfc"]=ZSurf;
+	surfVarName_["lsm"]=LsmSurf;
+	surfVarName_["surftype"]=LsiSurf;
+	surfVarName_["water_type"]=WaterTypeSurf;
+	surfVarName_["p_cloudtop_scs"]=CloudTopPressSurf;
+	surfVarName_["cloud_fraction_scs"]=CloudFractionSurf;
+	surfVarName_["lat"]=LatSurf;
+	surfVarName_["lon"]=LonSurf; 
+	
+	dimName_["time"]="time";
+	dimName_["ml"]="nlev";
+	dimName_["pl"]="nlevp1";
+	dimName_["soil"]="nlevs";
+}  
 
+void MvScm::mapScmVars()
+{ 
+  	mlVarName_["pressure_f"]=PresML;
+	mlVarName_["height_f"]=HeightML;
+	mlVarName_["t"]=TempML;
+	mlVarName_["u"]=WindUML;
+	mlVarName_["v"]=WindVML;
+	mlVarName_["q"]=SpHumML;
+	mlVarName_["relative_humidity"]=RelHumML;
+	mlVarName_["ql"]=CloudLiqML;
+	mlVarName_["qi"]=CloudIceML;
+	
+	soilVarName_["t_soil"]=TempSoil;
+	soilVarName_["q_soil"]=HumSoil;
+	
+	surfVarName_["t_skin"]=TempSurf;
+	surfVarName_["t_sea_ice"]=TempSeaIceSurf;
+	surfVarName_["open_sst"]=TempSeaSurf;
+	
+	dimName_["time"]="time";
+	dimName_["ml"]="nlev";
+	dimName_["pl"]="nlevp1";
+	dimName_["soil"]="nlevs";
+	
+}  
+	
+	
 void MvScm::decode()
 {
 	NcFile nc(fileName_.c_str());
 	
 	//Init dimensions
-	timeDim_.init(nc,"time");
-	modelLevDim_.init(nc,"nlev");
-	pressureLevDim_.init(nc,"nlevp1");
-	soilLevDim_.init(nc,"nlevs");
+	timeDim_.init(nc,dimName_["time"]);
+	modelLevDim_.init(nc,dimName_["ml"]);
+	pressureLevDim_.init(nc,dimName_["pl"]);
+	soilLevDim_.init(nc,dimName_["soil"]);
 		
 	//Get variables
 	int varNum=nc.num_vars();
@@ -795,6 +987,20 @@ void MvScm::decode()
 	}
 	
 	initRelHum();	
+	
+	//Get id
+	/*int n=nc.num_atts();
+	for(int i=0; i < n; i++)
+	{  	
+		NcAtt* att=nc.get_att(i);
+		if(att != NULL && att->name() != NULL && 
+		   strcmp(att->name(),"dataID") == 0 && att->num_vals() > 0)
+		{  
+			char* v=att->as_string(0);
+			if(v) id_=string(v);
+			break;
+		}
+	}*/	
 }	
 
 void MvScm::decodeVar(NcVar* var)
@@ -1022,21 +1228,24 @@ void MvScm::initRelHum()
 	MvScmVar* q=mlVar(SpHumML);
 	MvScmVar* r=mlVar(RelHumML);	
 	MvScmVar* tSurf=surfVar(TempSurf);
-	MvScmVar* tSeaIce=surfVar(TempSeaIceSurf);
+	//MvScmVar* tSeaIce=surfVar(TempSeaIceSurf);
 	MvScmVar* tSea=surfVar(TempSeaSurf);
 	MvScmVar* tSoil=soilVar(TempSoil);
 	
-	if(t && t->units() == "K")
-	  	t->setOffset(-273.16,"C");
-	if(tSurf && tSurf->units() == "K")
-	  	tSurf->setOffset(-273.16,"C");
-	if(tSoil && tSoil->units() == "K")
-	  	tSoil->setOffset(-273.16,"C");	
-	if(tSea && tSea->units() == "K")
-	  	tSea->setOffset(-273.16,"C");
-	//if(tSeaIce && tSeaIce->units() == "K")
-	//  	tSeaIce->setOffset(-273.16,"C");
-		
+	if(convertUnits_)
+	{
+		if(t && t->units() == "K")
+	 	 	t->setUnits(-273.16,1.,"C");
+		if(tSurf && tSurf->units() == "K")
+	  		tSurf->setUnits(-273.16,1.,"C");
+		if(tSoil && tSoil->units() == "K")
+	  		tSoil->setUnits(-273.16,1.,"C");	
+		if(tSea && tSea->units() == "K")
+	  		tSea->setUnits(-273.16,1.,"C");
+		//if(tSeaIce && tSeaIce->units() == "K")
+		//  	tSeaIce->setOffset(-273.16,"C");
+	}
+	
 	if(!t || !p || !q || !r)
 	  	return;
 	
@@ -1050,11 +1259,8 @@ void MvScm::initRelHum()
 
 void MvScm::needConsistency(bool b)
 {
-  	needConsistency_=b;
-	
-	
-  
-}  
+  	needConsistency_=b; 
+} 
 
 //==========================================================
 // Static methods
@@ -1291,3 +1497,315 @@ void MvScm::addVarToFile(NcVar *inVar,NcFile& outNc,const std::vector<NcDim*>& o
 		outVar->put(vals,counts);	 	
 	}
 }	
+
+//Create an ASCII input file for RTTOV
+bool MvScm::createRttovInput(const string& inFileName,const string& outFileName,
+			    float sat_zenith_angle,float sat_azimuth_angle,
+			    float solar_zenith_angle,float solar_azimuth_angle,
+			    bool useOzone,string &errTxt)
+{
+	//Open input NetCDF file, and use original units
+	MvScm in(inFileName.c_str(),false);
+		
+	//Check the required profiles
+	string nfTxt=" not found!";
+	
+	MvScmVar* t=in.mlVar(TempML);
+	if(!t)
+	{
+	  	errTxt="Temperature" + nfTxt;
+		return false;
+	}	
+		  
+	MvScmVar* p=in.mlVar(PresML);
+	if(!p)
+	{
+	  	errTxt="Pressure" + nfTxt;
+		return false;
+	}	
+	  
+	
+	MvScmVar* q=in.mlVar(SpHumML);
+	if(!q)
+	{
+	  	errTxt="Specific humidity" + nfTxt;
+		return false;
+	}	
+	
+	//Compute water vapour ppmv
+	MvScmVar *ppmv=new MvScmVar("ppmv", "ppmv","ppmv",q);
+	ppmv->compute(p,q,&metview::vapourPPMV);	
+	
+	//Ozone 
+	MvScmVar *ozppmv=0;
+	if(useOzone)
+	{
+		MvScmVar* oz=in.mlVar(OzoneML);
+		if(!oz)
+		{
+	  		errTxt="Ozone" + nfTxt;
+			return false;
+		}	  	
+	
+		//Compute ozone ppmv
+		ozppmv=new MvScmVar("ozppmv", "ozppmv","ppmv",oz);
+		ozppmv->compute(oz,&metview::ozonePPMV);	
+	}
+	
+	//Surface pressure in Pa
+	double psurf=p->value(0,p->levelNum()-1);
+	
+	//Skin tempearture in K
+	MvScmVar* v;
+	double tskin=0.;	
+	v=in.surfVar(TempSurf);
+	if(!v)
+	{
+	  	errTxt="Skin temperature" + nfTxt;
+		return false;
+	}
+	else
+	  	tskin=v->value(0,0);
+
+	//2m tempearture in K
+	double t2=0.;	
+	v=in.surfVar(Temp2Surf);
+	if(!v)
+	{
+	  	errTxt="2m temperature" + nfTxt;
+		return false;
+	}
+	else
+		t2=v->value(0,0);
+	
+	
+	//2m q in ppmv
+	double q2ppmv=0.;
+	v=in.surfVar(SpecHum2Surf);
+	if(!v)
+	{
+	  	errTxt="2m specific humidity" + nfTxt;
+		return false;
+	}
+	else
+		q2ppmv=metview::vapourPPMV(psurf,v->value(0,0));
+	
+		
+	//10m u in m/s
+	double u10=0.;
+	v=in.surfVar(WindU10Surf);
+	if(!v)
+	{
+	  	errTxt="Wind U 10 m" + nfTxt;
+		return false;
+	}
+	else
+	  	u10=v->value(0,0);
+	
+	//10m v m/s
+	double v10=0.;
+	v=in.surfVar(WindV10Surf);
+	if(!v)
+	{
+	  	errTxt="Wind V 10 m" + nfTxt;
+		return false;
+	}
+	else
+	  	v10=v->value(0,0);
+		
+	//Lat
+	double lat=0.;
+	v=in.surfVar(LatSurf);
+	if(!v)
+	{
+	  	errTxt="Lat" + nfTxt;
+		return false;
+	}	
+	else
+	  	lat=v->value(0,0);
+	
+	//Lon
+	double lon=0.;
+	v=in.surfVar(LonSurf);
+	if(!v)
+	{
+	  	errTxt="Lon" + nfTxt;
+		return false;
+	}	
+	else
+	  	lon=v->value(0,0);
+	
+	//orog in km
+	double orog=0.;	
+	v=in.surfVar(OrogSurf);
+	if(!v)
+	{
+	  	errTxt="Orography" + nfTxt;
+		return false;
+	}	
+	else
+	  	orog=0.001*v->value(0,0);
+	
+	//Surftype	
+	double surfType=0.;
+	v=in.surfVar(LsiSurf);
+	if(!v)
+	{
+	  	errTxt="Surface type" + nfTxt;
+		return false;
+	}
+	else
+		surfType=v->value(0,0);
+	
+	/*double surfType=0.;
+	v=in.surfVar(LsmSurf);
+	if(!v)
+	{
+	  	errTxt="LSM" + nfTxt;
+		return false;
+	}
+	else
+	{
+	  	MvScmVar* v1=in.surfVar(SeaIceFractionSurf);
+		if(!v1)
+		{
+		  	errTxt="Sea ice fraction" + nfTxt;
+			return false;
+		}
+		//Sea
+		if(v->value(0,0) > 0.5)
+		{
+		  	if(v1->value(0,0) > 0.5)
+			  	surfType=2;
+			else
+			  	surfType=1;
+		}
+		else
+		  	surfType=0;
+		
+	} */ 
+	  
+	//Watertype
+	double waterType=0.;
+	v=in.surfVar(WaterTypeSurf);
+	if(!v)
+	{
+	  	errTxt="Water type" + nfTxt;
+		return false;
+	}	
+	else
+	  	waterType=v->value(0,0);
+		
+	//cltoppres
+	double cltop=0.;
+	v=in.surfVar(CloudTopPressSurf);
+	if(!v)
+	{
+	  	errTxt="Cloud top pressure" + nfTxt;
+		return false;
+	}	
+	else
+	  	cltop=v->value(0,0);
+	
+	//clfract
+	double clfract=0.;
+	v=in.surfVar(CloudFractionSurf);
+	if(!v)
+	{
+	  	errTxt="Cloud fraction" + nfTxt;
+		return false;
+	}	
+	else
+	  	clfract=v->value(0,0);	
+	
+	//Open ASCII output
+	ofstream out(outFileName.c_str());	
+	if(!out.good())
+	  	return false;
+	
+	//Generate ASCII output
+	out << "! --- Profile 1 ---" << endl;
+	
+out << "! \n\
+! Pressure levels (hPa) \n\
+!\n";
+	if(p->units() == "Pa")	
+	  	p->setUnits(0.,0.01,"hPa");
+	p->write(out,0,true,true);
+	
+out << "! \n\
+! Temperature profile (K) \n\
+!\n";	
+		
+	t->write(out,0,false,true);
+
+out << "! \n\
+! Water vapour profile (ppmv) \n\
+!\n"; 
+	ppmv->write(out,0,false,true);
+	
+if(useOzone)
+{
+
+out << "! \n\
+! Ozone profile (ppmv) \n\
+!\n"; 
+	ozppmv->write(out,0,false,true);	
+}
+
+out << "!\n\
+!\n\
+! Near-surface variables:\n\
+!  2m T (K)    2m q (ppmv) 2m p (hPa) 10m wind u (m/s)  10m wind v (m/s)  wind fetch (m)\n\
+!\n";
+		
+	
+out << t2 << " " << q2ppmv << " " << psurf/100. << " " <<  u10 << " " << v10 <<  " 100000." << endl;
+	
+	//tSurf->write(out,0,false);
+	//out << "  15248.0550  1007.30      5.000             2.0000            100000." << endl;
+	
+out << "!\n\
+! Skin variables:\n\
+!  Skin T (K)  FASTEM parameters for land surfaces\n\
+!\n";
+	out << tskin << "   3.0 5.0 15.0 0.1 0.3" << endl;
+
+	
+out << "!\n\
+! Surface type (0=land, 1=sea, 2=sea-ice) and water type (0=fresh, 1=ocean)\n\
+!\n";
+     	out << surfType << " " << waterType << endl;
+
+out << "!\n\
+! Elevation (km), latitude and longitude (degrees)\n\
+!\n";
+
+out << orog << " "  << " " << lat << " " << lon << endl; 
+
+out << "!\n\
+! Sat. zenith and azimuth angles, solar zenith and azimuth angles (degrees)\n\
+!\n";
+out << sat_zenith_angle << "  " << sat_azimuth_angle << "  " <<
+    solar_zenith_angle << "  " << solar_azimuth_angle << endl;
+
+	
+out << "!\n\
+! Cloud top pressure (hPa) and cloud fraction for simple cloud scheme\n\
+!\n";
+
+
+   out << cltop << " " << clfract << endl;
+
+out << "!\n\
+! --- End of profile 1 ---\n\
+!";
+	
+	
+	out.close();
+	
+	delete ppmv;
+	
+	return true;
+}	
+	
diff --git a/src/libUtil/MvScm.h b/src/libUtil/MvScm.h
index dcbec8b..377227f 100644
--- a/src/libUtil/MvScm.h
+++ b/src/libUtil/MvScm.h
@@ -25,6 +25,19 @@ class MvScm;
 class MvScmVar;
 class MvScmProfileData;
 
+class MvScmUnitsConverter
+{
+public:
+	MvScmUnitsConverter() : offset_(0.), scale_(1.) {}
+	
+	float convertTo(float v) {return v*scale_+offset_;}
+	float convertFrom(float v) {return (v-offset_)/scale_;}
+	float offset_;
+	float scale_;
+	string units_;
+};	
+
+
 class MvScmConsistency
 {
 public:
@@ -113,6 +126,7 @@ public:
 	int size() const {return size_;}
 	void setSize(int n) {size_=n;}
 	const vector<float>& values() const {return values_;}
+	bool isEmpty() const { return size_==0 ;}
 
 protected:
 	void setVar(NcVar*);
@@ -132,11 +146,13 @@ class MvScmVar
 public:
     	enum LevelType {NoType,ModelLevelType,PressureLevelType,SurfaceLevelType,SoilLevelType};
 	
+	typedef double (*CompProc1)(double);
+	typedef double (*CompProc2)(double,double);
 	typedef double (*CompProc3)(double,double,double);
 	
   	MvScmVar(LevelType,NcVar*,const MvScmDim&);
 	MvScmVar(LevelType,NcVar*,const MvScmDim&,const MvScmDim&);
-	//vScmVar(const string&, const string&, const string&,MvScmVar*);
+	MvScmVar(const string&, const string&, const string&,MvScmVar*);
 	~MvScmVar();
 	
 	LevelType levelType() {return levelType_;}
@@ -150,6 +166,7 @@ public:
 	int stepNum() {return static_cast<int>(data_.size());}
 	int levelNum() {return (data_.size() >0)?static_cast<int>(data_.at(0).size()):0;}
 	bool setValue(int,int,float,MvScmProfileChange&,bool checkCons=true);
+	bool setValues(int,float,vector<MvScmProfileChange>&,bool checkCons=true);
 	bool setConsistentValue(int,int,float);
 	bool setValue(int,int,float,bool checkCons=true);
 	bool changed(int);
@@ -161,10 +178,13 @@ public:
 	float rangeMin() const {return rangeMin_;}
 	float rangeMax() const {return rangeMax_;}
 	bool fitToRange(float&);
+	void compute(MvScmVar*,CompProc1);
+	void compute(MvScmVar*,MvScmVar*,CompProc2);
 	void compute(MvScmVar*,MvScmVar*,MvScmVar*,CompProc3);
 	void setConsistency(MvScmConsistency*);
-	void setOffset(float,string);
+	void setUnits(float,float,string);
 	bool overwrite(int);
+	bool write(ofstream &,int,bool,bool);
 	
 protected:
   	void setName(NcVar*);
@@ -183,9 +203,7 @@ protected:
 	float rangeMin_;
 	float rangeMax_;
 	MvScmConsistency* consistency_;
-	bool useOffset_;
-	float offset_;
-	string offsetUnits_;
+	MvScmUnitsConverter *unitsConverter_;
 };
 
 class MvScm
@@ -194,12 +212,15 @@ class MvScm
 friend class MvScmVar;
 
 public:
-	MvScm(const string&);    
+	MvScm(const string&,bool convertUnits=true);    
   	~MvScm();
 	
-	enum ModelLevelVariable {PresML,HeightML,TempML,WindUML,WindVML,SpHumML,RelHumML,CloudLiqML,CloudIceML};
+	enum ModelLevelVariable {PresML,HeightML,TempML,WindUML,WindVML,SpHumML,RelHumML,CloudLiqML,CloudIceML,OzoneML};
 	enum SoilVariable {TempSoil,HumSoil};
-	enum SurfVariable {TempSurf,TempSeaIceSurf,TempSeaSurf};
+	enum SurfVariable {TempSurf,TempSeaIceSurf,TempSeaSurf,SeaIceFractionSurf,
+	                   Temp2Surf,Td2Surf,SpecHum2Surf,WindU10Surf,WindV10Surf,
+	                   ZSurf,LsiSurf,LsmSurf,OrogSurf,LatSurf,LonSurf,WaterTypeSurf,CloudTopPressSurf,
+			   CloudFractionSurf};
 	
 	const string& fileName() const {return fileName_;}
 	
@@ -217,6 +238,8 @@ public:
 	int modelLevelNum() const {return modelLevDim_.size();}
 	void save();
 	void reset();
+	string id() const {return id_;};
+	
 	
 	static int modelLevelNum(const string&);
 	static bool mergeOutFiles(const string&,const string&,const string&);
@@ -232,7 +255,15 @@ public:
 	static void needConsistency(bool);
 	static bool needConsistency() {return needConsistency_;}
 	
+	static bool createRttovInput(const string& inFileName,const string& outFileName,
+			    float sat_zenith_angle,float sat_azimuth_angle,
+			    float solar_zenith_angle,float solar_azimuth_angle,
+		            bool useOzone,string &errTxt);
+	
 protected:
+        void decodeId();
+	void mapScmVars();
+	void mapRttovVars();
     	void decode();
        	void decodeVar(NcVar*);
 	void notifyObservers(MvScmVar*,int,int,float,float);
@@ -240,12 +271,15 @@ protected:
        	static void addVarToFile(NcVar *,NcFile&,const std::vector<NcDim*>&);
             	
     	string fileName_;
+	string id_;
+	bool convertUnits_;
 	
 	MvScmDim	timeDim_;
 	MvScmDim	modelLevDim_;
 	MvScmDim	pressureLevDim_;
 	MvScmDim	soilLevDim_;
-	
+	map<string,string> dimName_;
+		
 	vector<MvScmVar*> ml_;
 	vector<MvScmVar*> pl_;
 	vector<MvScmVar*> surf_; 
diff --git a/src/libUtil/Request.cc b/src/libUtil/Request.cc
index 76552db..bb802e0 100644
--- a/src/libUtil/Request.cc
+++ b/src/libUtil/Request.cc
@@ -1,6 +1,6 @@
 /***************************** LICENSE START ***********************************
 
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2013 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.
@@ -54,7 +54,7 @@ vector<string> Request::get(const char* name) const
 	vector<string> result;
 	result.reserve(count_values(CurrentRequest,name));
 
-	while(p = get_value(CurrentRequest,name,i++))
+	while((p = get_value(CurrentRequest,name,i++)))
 		result.push_back(p);
 
 	return result;
@@ -77,3 +77,10 @@ void Request::set(const string& name,const vector<string>& v)
 {
 	set(name.c_str(),v);
 }
+
+Request Request::fromText(const string& txt)
+{
+  	//request* r=string2request(txt.c_str());
+	MvRequest r(string2request(txt.c_str()));	
+	return Request(r);  
+}
diff --git a/src/libUtil/Request.h b/src/libUtil/Request.h
index 3ad178a..83cee99 100644
--- a/src/libUtil/Request.h
+++ b/src/libUtil/Request.h
@@ -1,15 +1,12 @@
 /***************************** LICENSE START ***********************************
 
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2013 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 *************************************/
 
-// File Request.h
-// Baudouin Raoult - ECMWF Jul 99
-
 #ifndef Request_H
 #define Request_H
 
@@ -59,6 +56,8 @@ public:
 
 	void set(const string&,const vector<string>&);
 	void set(const char*,const vector<string>&);
+	
+	static Request fromText(const string&);
 
 // -- Overridden methods
 	// None
diff --git a/src/libUtil/TableReader.cc b/src/libUtil/TableReader.cc
index a3c5fd7..e47b1e9 100644
--- a/src/libUtil/TableReader.cc
+++ b/src/libUtil/TableReader.cc
@@ -432,7 +432,7 @@ bool TableReader::getMetaData(string &errorMessage)
 
 
 
-    const int MAX_CHARS_IN_LINE = 1024*10;
+    const int MAX_CHARS_IN_LINE = 1024*100;
     char line[MAX_CHARS_IN_LINE];
 
 
@@ -566,7 +566,7 @@ bool TableReader::getMetaData(string &errorMessage)
 
 bool TableReader::read(string &errorMessage)
 {
-    const int MAX_CHARS_IN_LINE = 1024*10;
+    const int MAX_CHARS_IN_LINE = 1024*100;
     char line[MAX_CHARS_IN_LINE];
 
 
diff --git a/src/libUtil/TableReader.h b/src/libUtil/TableReader.h
index 3717f21..002c232 100644
--- a/src/libUtil/TableReader.h
+++ b/src/libUtil/TableReader.h
@@ -163,7 +163,7 @@ public:
     enum eTableReaderFieldType {TABFIELD_NUMBER, TABFIELD_STRING};
 
     TableReader ()              {gotMetaData_ = false; errorCode_ = 0;}
-    TableReader (string &path)  {setPath(path);}
+    TableReader (string &path)  {setPath(path); gotMetaData_ = false; errorCode_ = 0;}
 
     void setFieldContainer (int index, string &name, vector<double>& container, double outputMissingIndicator);
     void setFieldContainer (int index, string &name, vector<string>& container, string outputMissingIndicator);
diff --git a/src/metview_config.h b/src/metview_config.h
index 11c80a7..cab83ef 100644
--- a/src/metview_config.h
+++ b/src/metview_config.h
@@ -72,7 +72,10 @@
 /* #undef METVIEW_32BIT */
 
 /* Turn on any additional debugging support */
-#define METVIEW_DEBUG 1
+/* #undef METVIEW_DEBUG */
+
+/* Turn on experimental interpolation library - only in developments. */
+#define METVIEW_ECREGRID 1
 
 /* Turn off the Emoslib support */
 #define METVIEW_EMOS 1
@@ -87,10 +90,10 @@
 #define METVIEW_GUI 1
 
 /* Turn on the INPE support */
-#define METVIEW_INPE 1
+/* #undef METVIEW_INPE */
 
 /* Install path. */
-#define METVIEW_INSTALL_PATH "/tmp/cgi/mv4_maintenance_install"
+#define METVIEW_INSTALL_PATH "/usr/local/apps/Metview/4.4.3"
 
 /* Turn on Magics++ related modules. */
 #define METVIEW_MAGICS 1
@@ -99,7 +102,7 @@
 #define METVIEW_MARS 1
 
 /* Turn on the MARS catalog support. */
-#define METVIEW_MARS_CATALOG 1
+/* #undef METVIEW_MARS_CATALOG */
 
 /* Turn on the MARS ODB support */
 #define METVIEW_MARS_ODB 1
@@ -107,8 +110,11 @@
 /* Name of this package. */
 #define METVIEW_NAME "Metview"
 
+/* Turn on the Qt-based graphical user interface */
+#define METVIEW_NEW_GUI 1
+
 /* Turn on the OBSTAT support */
-#define METVIEW_OBSTAT 1
+/* #undef METVIEW_OBSTAT */
 
 /* Turn on the ODB support */
 #define METVIEW_ODB 1
@@ -135,7 +141,7 @@
 /* #undef METVIEW_QTDEBUG */
 
 /* Release date of this version. */
-#define METVIEW_RELEASE_DATE "04-July-2013"
+#define METVIEW_RELEASE_DATE "15-October-2013"
 
 /* Turn on the SCM auxillary files */
 /* #undef METVIEW_SCM_AUX */
@@ -144,7 +150,7 @@
 #define METVIEW_SITE "ecmwf"
 
 /* Version of Metview. */
-#define METVIEW_VERSION "4.3.11"
+#define METVIEW_VERSION "4.4.3"
 
 /* Define to 1 if your C compiler doesn't accept -c and -o together. */
 /* #undef NO_MINUS_C_MINUS_O */
diff --git a/src/metview_config.h.in b/src/metview_config.h.in
index 602e76a..825e6e3 100644
--- a/src/metview_config.h.in
+++ b/src/metview_config.h.in
@@ -73,6 +73,9 @@
 /* Turn on any additional debugging support */
 #undef METVIEW_DEBUG
 
+/* Turn on experimental interpolation library - only in developments. */
+#undef METVIEW_ECREGRID
+
 /* Turn off the Emoslib support */
 #undef METVIEW_EMOS
 
@@ -106,6 +109,9 @@
 /* Name of this package. */
 #undef METVIEW_NAME
 
+/* Turn on the Qt-based graphical user interface */
+#undef METVIEW_NEW_GUI
+
 /* Turn on the OBSTAT support */
 #undef METVIEW_OBSTAT
 
diff --git a/src/uPlot/AnnotationView.cc b/src/uPlot/AnnotationView.cc
new file mode 100644
index 0000000..66ffb45
--- /dev/null
+++ b/src/uPlot/AnnotationView.cc
@@ -0,0 +1,170 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 "AnnotationView.h"
+#include "DataObject.h"
+#include "ObjectList.h"
+#include "Page.h"
+#include "PmContext.h"
+#include "SubPage.h"
+
+// Class AnnotationViewFactory - builds service views
+class AnnotationViewFactory : public PlotModViewFactory
+{
+   // --  Virtual Constructor - Builds a new AnnotationView
+   virtual PlotModView* Build ( Page&            page,
+                                const MvRequest& contextRequest,
+                                const MvRequest& setupRequest    )
+    { return new AnnotationView ( page, contextRequest, setupRequest ); }
+
+public:
+
+  AnnotationViewFactory() : PlotModViewFactory ( "AnnotationView" ) {}
+};
+
+static AnnotationViewFactory annotationViewFactoryInstance;
+
+//------------------------------------------------------------------
+
+AnnotationView::AnnotationView ( Page&            owner,
+                                 const MvRequest& viewRequest,
+                                 const MvRequest& setupRequest,
+                                 const string&    viewName ):
+  PlotModView ( owner, viewRequest, setupRequest  ), 
+  viewName_(viewName)
+{
+}
+
+AnnotationView::AnnotationView ( const AnnotationView &old ) :
+  PlotModView ( old ),
+  viewName_(old.viewName_)
+{
+}
+
+string
+AnnotationView::Name()
+{
+   int id =  Owner().Id();
+   return (const char*)ObjectInfo::ObjectName ( viewRequest_, "AnnotationView", id );
+}
+
+void
+AnnotationView::Drop ( PmContext& context )
+{
+   // Process the drop
+   MvRequest dropRequest = context.InRequest();
+   while ( dropRequest )
+   {
+      MvRequest request = dropRequest.justOneRequest();
+      const char* verb = request.getVerb();
+
+      #if 0 //do we need this?
+      // VisDefs are processed in one single goal. This is because the processing
+      // of a single or a group of visdefs is different. It is assumed that
+      // visdefs always come after a dataunit (if it exists).
+      MvRequest vdRequestList;
+      if ( this->RetrieveVisdefList (dropRequest,vdRequestList) )
+      {
+         Owner().InsertVisDef (vdRequestList, dataUnit);
+
+         if ( !dropRequest ) // no more drops
+             break;
+      }
+      #endif
+
+      if ( ObjectList::IsVisDefText ( verb ) )
+         Owner().InsertPText ( request );
+      else if ( (const char*)verb == PLOTSUPERPAGE )
+      {
+         context.AdvanceTo(PLOTSUPERPAGE);
+         return;
+      }
+      else if ( (const char*)verb == NEWPAGE )
+      {
+         context.AdvanceTo(NEWPAGE);
+         return;
+      }
+
+      dropRequest.advance();
+    }
+
+   // Consume all of the input request (the service will use it)
+   context.AdvanceToEnd();
+}
+
+void
+AnnotationView::DescribeYourself ( ObjectInfo& description )
+{
+   // Convert my request to macro
+   set<Cached> skipSet;
+   description.ConvertRequestToMacro ( viewRequest_, PUT_END, MacroName().c_str(), viewName_.c_str(), skipSet );
+}
+
+void AnnotationView::Draw ( SubPage* subPage )
+{
+   // Get the data units for this subpage
+   list<DataObject*> doList;
+   subPage->GetDataObjects(doList);
+   list<DataObject*>::iterator ii;
+   DataObject *dataObject = 0;
+   DrawPriorMap drawPriorMap;
+   DrawPriorMap::iterator j;
+
+   // Loop on all data to be plotted
+   MvIconDataBase& dataBase = Owner().IconDataBase();
+   MvIconList  duList;
+   MvIcon dataUnit;
+   for ( ii = doList.begin(); ii != doList.end(); ii++ )
+   {
+      dataObject = (*ii);
+      //if ( !dataBase.RetrieveDataUnit (dataObject->DataUnitId(), dataUnit) )
+      if ( ! dataBase.RetrieveIconFromList (DB_DATAUNIT, dataObject->DataUnitId(), dataUnit) )
+         continue;
+
+      duList.push_back(dataUnit);
+      MvIconList vdList;
+      dataObject->RetrieveMyVisDefList(dataUnit,vdList);
+      MvIcon visDef = *(vdList.begin());
+      MvRequest duRequest =  dataUnit.Request();
+
+      duRequest.setValue("_PTEXT",visDef.Request());
+      dataUnit.SaveRequest(duRequest);
+
+      DrawPriorMap tmpMap = dataObject->DrawPriority(vdList);
+      for ( j = tmpMap.begin(); j != tmpMap.end(); ++j )
+         drawPriorMap.insert ( *j );
+   }
+
+   // Do the drawing 
+   CommonDraw(subPage, drawPriorMap);
+
+   // Get rid of the temporary _PTEXT requests.
+   for ( MvListCursor jj = duList.begin(); jj != duList.end(); jj++ )
+   {
+      MvIcon currentdu = *jj;
+      MvRequest currentReq = currentdu.Request();  
+      currentReq.unsetParam("_PTEXT");
+      currentdu.SaveRequest(currentReq);
+   }
+}
+
+bool AnnotationView::UpdateView ()
+{
+   // Parameter SUBPAGE_FRAME has a default ON in Magics. However, this parameter has
+   // a default value OFF in AnnotationView. Magics needs to be informed if the value
+   // OFF is to be used.
+   if ( (const char*)viewRequest_("SUBPAGE_FRAME") )
+      return true;
+
+   // It should use the AnnotationView default value for parameter SUBPAGE_FRAME
+   MvRequest exp = ObjectList::ExpandRequest (viewRequest_, EXPAND_DEFAULTS);
+   viewRequest_("SUBPAGE_FRAME") = exp("SUBPAGE_FRAME");
+
+   return true;
+}
diff --git a/src/uPlot/AnnotationView.h b/src/uPlot/AnnotationView.h
new file mode 100644
index 0000000..790c3cd
--- /dev/null
+++ b/src/uPlot/AnnotationView.h
@@ -0,0 +1,90 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+//
+// .NAME:
+//  AnnotationView
+//
+// .AUTHOR:
+//  Fernando Ii
+//
+// .SUMMARY:
+//  Describes the AnnotationView class, which plots text and images
+//
+// .CLIENTS:
+//  Page
+//
+// .RESPONSIBILITY:
+//
+// .COLLABORATORS:
+//
+// .ASCENDENT:
+//  PlotModView, PlotModTable
+//
+// .DESCENDENT:
+//
+//
+//
+#ifndef AnnotationView_H
+#define AnnotationView_H
+
+#include "PlotModView.h"
+
+class AnnotationView: public PlotModView
+{
+public:
+
+  // -- Constructors
+  AnnotationView( Page&, const MvRequest&, const MvRequest&,
+                  const string &viewName  = "annotationview");
+
+  AnnotationView(const AnnotationView&);
+  virtual PlotModView *Clone() const { return new AnnotationView(*this); }
+
+  // -- Destructor
+  ~AnnotationView() {}
+
+  // --  Methods overriden from PlotModView class
+  virtual string Name();
+
+  // Update the current view
+  virtual void UpdateView ( MvRequest& ) {}
+  virtual bool UpdateView ();
+
+  // Decode the data Unit
+  virtual void DecodeDataUnit ( MvIcon& ) {}
+
+  // Draw the background
+  virtual void DrawBackground ( ) {}
+  //virtual bool EmptyShared() { return false; }
+
+  // Draw the foreground
+  virtual void DrawForeground ( ) {}
+
+  // Draw data
+  virtual void Draw(SubPage*);
+
+  // Describe the contents of the view
+  virtual void DescribeYourself ( ObjectInfo& );
+
+  // Process the drop request
+  void Drop ( PmContext& context );
+
+  void InsertDataRequest ( MvRequest& ) {}
+
+protected:
+
+  string viewName_;
+
+private:
+
+  // No assignment
+  AnnotationView& operator=(const AnnotationView&);
+};
+#endif
diff --git a/src/uPlot/AverageView.cc b/src/uPlot/AverageView.cc
index 15060b1..19ccc90 100644
--- a/src/uPlot/AverageView.cc
+++ b/src/uPlot/AverageView.cc
@@ -13,32 +13,77 @@
 // 
 //
 #include "AverageView.h"
-
 #include <MvRequestUtil.hpp>
-
 #include "ObjectList.h"
+#include "PlotMod.h"
 #include "Root.h"
 
 //--------------------------------------------------------
-class AverageViewFactory : public PlotModViewFactory 
+static AverageViewFactory averageViewFactoryInstance;
+
+PlotModView*
+AverageViewFactory::Build ( Page& page,
+                            const MvRequest& contextRequest,
+                            const MvRequest& setupRequest )
 {
+   // Expand request
+   MvRequest expReq = ObjectList::ExpandRequest(contextRequest,EXPAND_DEFAULTS);
 
-    // --  Virtual Constructor - Builds a new AverageView
-    virtual PlotModView* Build ( Page& page,
-                                 const MvRequest& contextRequest,
-                                 const MvRequest& setupRequest )
-    {
-        // Expand request
-        MvRequest expReq = ObjectList::ExpandRequest(contextRequest,EXPAND_DEFAULTS);
-        return new AverageView ( page, expReq, setupRequest );
-    }
+   // Instantiate a Average view
+   return new AverageView ( page, expReq, setupRequest );
+}
 
-public:
+//--------------------------------------------------------
+static AverageViewM3Factory averageView3FactoryInstance;
 
-    AverageViewFactory() : PlotModViewFactory ( "AverageView" ) {}
-};
+PlotModView*
+AverageViewM3Factory::Build ( Page& page,
+                             const MvRequest& contextRequest,
+                             const MvRequest& setupRequest )
+{
+   // Translate view request to Metview 4
+   MvRequest viewM4Req = this->Translate(contextRequest);
 
-static AverageViewFactory averageViewFactoryInstance;
+   // Instantiate a Average view
+   return new AverageView ( page, viewM4Req, setupRequest );
+}
+
+MvRequest
+AverageViewM3Factory::Translate ( const MvRequest& in )
+{
+   // Send a warning message
+   PlotMod::Instance().MetviewError ("The Metview 3 AVERAGE VIEW icon is deprecated. An automatic translation to the Metview 4 AVERAGE VIEW icon will be performed internally, but may not work for all cases. It is recommended to manually replace the old icons with their new equivalents.","WARNING");
+
+   // Expand request
+   MvRequest req = ObjectList::ExpandRequest(in,EXPAND_DEFAULTS);
+
+   // Copy Area and Direction parameters
+   MvRequest viewReq("MXAVERAGEVIEW");
+   viewReq.addValue("AREA",(double)req("AREA",0));
+   viewReq.addValue("AREA",(double)req("AREA",1));
+   viewReq.addValue("AREA",(double)req("AREA",2));
+   viewReq.addValue("AREA",(double)req("AREA",3));
+   viewReq("DIRECTION") = req("DIRECTION");
+
+   // Translate Levels interval
+   viewReq("BOTTOM_LEVEL") = (double)req("BOTTOM_PRESSURE");
+   viewReq("TOP_LEVEL")    = (double)req("TOP_PRESSURE");
+
+   // Translate Vertical scaling parameter
+   viewReq("VERTICAL_SCALING") = (const char*)req("PRESSURE_LEVEL_AXIS");
+
+   // Overlay Control parameter is not translated
+   PlotMod::Instance().MetviewError ("The Metview 3 AVERAGE VIEW icon is deprecated. Parameter OVERLAY CONTROL will not be internally translated.\n","WARNING");
+
+   // Copy Page and Subpage parameters
+   CopySomeParameters ( req,viewReq,"Subpage");
+   CopySomeParameters ( req,viewReq,"Page");
+
+   // Expand output request
+   MvRequest out = ObjectList::ExpandRequest(viewReq,EXPAND_DEFAULTS);
+
+   return out;
+}
 
 //------------------------------------------------------------
 
@@ -47,7 +92,7 @@ AverageView::AverageView ( Page& owner,
                            const MvRequest& setupRequest ): 
              CommonXSectView ( owner, viewRequest, setupRequest )
 {
-    ApplicationName("PM_AVERAGE");
+    ApplicationName("MXAVERAGE");
     SetVariables(viewRequest,true);
 }
 
@@ -68,9 +113,8 @@ string AverageView::Name()
 void 
 AverageView::DescribeYourself ( ObjectInfo& description )
 {
+    // Convert my request to macro
     set<Cached> skipSet;
-
-    // convert my request to macro
     description.ConvertRequestToMacro ( viewRequest_, PUT_END,
                                         MacroName().c_str(),"maverageview", skipSet);
 
@@ -115,11 +159,11 @@ void AverageView::SetVariables(const MvRequest &in, bool resetMembers)
     }
 }
 
-void AverageView::UpdateView ()
+bool AverageView::UpdateView ()
 {
     // It has already been updated
     if ( string(viewRequest_.getVerb()) == CARTESIANVIEW )
-        return;
+        return true;
 
     // Translate geographical coordinates
     MvRequest cartView("CARTESIANVIEW");
@@ -138,7 +182,7 @@ void AverageView::UpdateView ()
 
     // Translate Y coordinates
     cartView("Y_AUTOMATIC") = "off";
-    const char* log = viewRequest_("PRESSURE_LEVEL_AXIS");
+    const char* log = viewRequest_("VERTICAL_SCALING");
     if ( log && strcmp(log,"LOG") == 0)
         cartView("Y_AXIS_TYPE") = "logarithmic";
     else
@@ -155,9 +199,19 @@ void AverageView::UpdateView ()
     CopySomeParameters( viewRequest_,cartView,"PAGE" );
     CopySomeParameters( viewRequest_,cartView,"SUBPAGE" );
 
+    // Copy the original request without certain parameteres (to avoid duplication)
+    RemoveParameters( viewRequest_, "HORIZONTAL_AXIS" );
+    RemoveParameters( viewRequest_, "VERTICAL_AXIS" );
+    RemoveParameters( viewRequest_, "PAGE" );
+    RemoveParameters( viewRequest_, "SUBPAGE" );
+    RemoveParameters( viewRequest_, "_" );
+    cartView("_ORIGINAL_REQUEST") = viewRequest_;
+
     // Update request
     viewRequest_ = cartView;;
 
     // Indicate that the plotting tree needs to be rebuilt
     Root::Instance().Refresh(false);
+
+    return true;
 }
diff --git a/src/uPlot/AverageView.h b/src/uPlot/AverageView.h
index 0323572..1c68212 100644
--- a/src/uPlot/AverageView.h
+++ b/src/uPlot/AverageView.h
@@ -51,6 +51,39 @@
 
 #include "CommonXSectView.h"
 
+//-------------------------------------------------------------------
+// Average factory definition
+class AverageViewFactory : public PlotModViewFactory {
+
+   // --  Virtual Constructor - Builds a new AverageView
+   virtual PlotModView* Build ( Page&, const MvRequest&, const MvRequest& );
+
+public:
+
+   // Constructors
+    AverageViewFactory() : PlotModViewFactory ( "AverageView" ) {}
+};
+
+//---------------------------------------------------------------------
+// Average factory definition to handle translation from Metview 3 to 4.
+// This should be delete in the future. It is defined here for backwards
+// compatibility.
+class AverageViewM3Factory : public PlotModViewFactory {
+
+   // --  Virtual Constructor - Builds a new AverageView
+   virtual PlotModView* Build ( Page&, const MvRequest&, const MvRequest& );
+
+   // Translate Metview 3 view request to Metview 4
+   MvRequest Translate ( const MvRequest& );
+
+public:
+
+   // Constructors
+    AverageViewM3Factory() : PlotModViewFactory ( "AverageM3View" ) {}
+};
+
+//---------------------------------------------------------------------
+// Average class definition
 class AverageView: public CommonXSectView {
 
 public:
@@ -77,7 +110,7 @@ public:
     virtual void SetVariables(const MvRequest&, bool);
 
     // Update view
-    virtual void UpdateView ();
+    virtual bool UpdateView ();
 
 private:
 
diff --git a/src/uPlot/CartesianView.cc b/src/uPlot/CartesianView.cc
index 658133a..d97786e 100644
--- a/src/uPlot/CartesianView.cc
+++ b/src/uPlot/CartesianView.cc
@@ -100,7 +100,7 @@ CartesianView::Drop ( PmContext& context )
      MvIconDataBase&   dataBase = Owner().IconDataBase();
 
      // Process the drop
-     MvRequest dropRequest(context.InRequest());
+     MvRequest dropRequest = context.InRequest();
 	MvIcon dataUnit;
 	while ( dropRequest )
 	{
@@ -117,7 +117,7 @@ CartesianView::Drop ( PmContext& context )
                     break;
           }
 
-		MvRequest request(dropRequest.justOneRequest());
+		MvRequest request =  dropRequest.justOneRequest();
 		Cached verb       =  request.getVerb();
 		if ( verb == Cached ( "DRAWING_PRIORITY" ) )
 		{
@@ -136,13 +136,15 @@ CartesianView::Drop ( PmContext& context )
                this->UpdateAxisTypeView( request );
 		}
 
-          // Handle visdefs
-		else if ( ObjectList::IsVisDefText ( verb ) )
-			Owner().InsertPText ( request );
-		else if ( ObjectList::IsVisDefLegend ( verb ) )
-			Owner().InsertLegend ( request );
-          else if ( ObjectList::IsVisDefAxis ( verb ) )
-               this->ReplaceAxis ( request );
+   // Handle visdefs
+   else if ( ObjectList::IsVisDefText ( verb ) )
+      Owner().InsertPText ( request );
+   else if ( ObjectList::IsVisDefLegend ( verb ) )
+      Owner().InsertLegend ( request );
+   else if ( ObjectList::IsVisDefAxis ( verb ) )
+      this->ReplaceAxis ( request );
+//   else if ( ObjectList::IsVisDefTephi ( verb ) )
+//      this->ReplaceTephi ( request );
 
           // Replace the view (if applicable)
 		else if ( ObjectList::IsView ( verb ) == true )
@@ -219,7 +221,7 @@ CartesianView::ReplaceAxis ( MvRequest& axisRequest )
 
      // Unset previous axis definition from the view, if exists
      string sorient = cori + (string)"_AXIS";
-     MvRequest newView(viewRequest_);
+     MvRequest newView = viewRequest_;
      newView.unsetParam(sorient.c_str());
 
      // Add new axis definition and update the view
@@ -227,6 +229,17 @@ CartesianView::ReplaceAxis ( MvRequest& axisRequest )
      this->UpdateView(newView);
 }
 
+#if 0
+void
+CartesianView::ReplaceTephi ( MvRequest& req )
+{
+     // Add new tephi definition and update the view
+     MvRequest newView = viewRequest_;
+     newView("TEPHIGRAM_GRID") = req;
+     this->UpdateView(newView);
+}
+#endif
+
 // -- METHOD: DecodeDataUnit
 //
 // -- PURPOSE:
@@ -250,7 +263,7 @@ void CartesianView::DecodeDataUnit ( MvIcon& givenUnit )
 
 	while ( decoder->ReadNextData() )
 	{
-		MvRequest dataRequest(decoder->Request());
+		MvRequest dataRequest = decoder->Request();
 //D		if ( ! decoder->FillDataRequest(dataRequest) )
 //D			continue;
 
@@ -302,7 +315,7 @@ void CartesianView::InsertDataRequest ( MvRequest& dropRequest )
 	// Process the request
 	while ( dropRequest )
 	{
-		MvRequest dataUnitRequest(dropRequest.justOneRequest());
+		MvRequest dataUnitRequest = dropRequest.justOneRequest();
 		string verb = dataUnitRequest.getVerb();
 
 		if ( verb == NETCDF )
@@ -311,7 +324,8 @@ void CartesianView::InsertDataRequest ( MvRequest& dropRequest )
 			DecodeDataUnit (  tmpIcon );
 
 			MvIcon parentDataUnit;
-			dataBase.RetrieveDataUnit(this->ParentDataUnitId (), parentDataUnit);
+			//dataBase.RetrieveDataUnit(this->ParentDataUnitId (), parentDataUnit);
+         dataBase.RetrieveIconFromList(DB_DATAUNIT, this->ParentDataUnitId (), parentDataUnit);
 			parentDataUnit.SvcRequest ( dataUnitRequest );
 		}
 
@@ -323,11 +337,11 @@ void CartesianView::InsertDataRequest ( MvRequest& dropRequest )
 void CartesianView::HandleAxisData ( MvIcon &dataUnit, double minx,double maxx,
 				     double miny, double maxy)
 {
-	MvRequest dataRequest(dataUnit.Request());
+	MvRequest dataRequest = dataUnit.Request();
 	MvIconDataBase& dataBase = Owner().IconDataBase();
 
-	MvRequest xAxis(viewRequest_.getSubrequest( hAxisName_.c_str() ));
-	MvRequest yAxis(viewRequest_.getSubrequest( vAxisName_.c_str() ));
+	MvRequest xAxis = viewRequest_.getSubrequest( hAxisName_.c_str() );
+	MvRequest yAxis = viewRequest_.getSubrequest( vAxisName_.c_str() );
 
 	if ( FlipMinMax() )
 	{
@@ -385,7 +399,8 @@ CartesianView::Draw ( SubPage* subPage )
 	for ( ii = doList.begin(); ii != doList.end(); ii++ )
 	{
 		dataObject = (*ii);
-		if ( ! dataBase.RetrieveDataUnit (dataObject->DataUnitId(), dataUnit) )
+		//if ( ! dataBase.RetrieveDataUnit (dataObject->DataUnitId(), dataUnit) )
+      if ( ! dataBase.RetrieveIconFromList (DB_DATAUNIT, dataObject->DataUnitId(), dataUnit) )
 			continue;
 
 		// duList.push_back(dataUnit); 
diff --git a/src/uPlot/CommonXSectView.cc b/src/uPlot/CommonXSectView.cc
index f32a697..f778ab6 100644
--- a/src/uPlot/CommonXSectView.cc
+++ b/src/uPlot/CommonXSectView.cc
@@ -15,10 +15,10 @@
 #include "DataObject.h"
 #include "Decoder.h"
 #include "ObjectList.h"
+#include "PlotMod.h"
 #include "PlotModTask.h"
 #include "PmContext.h"
 #include "SubPage.h"
-
 #include "MvRequestUtil.hpp"
 
 CommonXSectView::CommonXSectView ( Page& owner,
@@ -28,8 +28,8 @@ CommonXSectView::CommonXSectView ( Page& owner,
                     PlotModService ( setupRequest("service"), this ),
                     appViewReq_    ( viewRequest )
 {
-    yMin_ = viewRequest_("BOTTOM_PRESSURE");
-    yMax_ = viewRequest_("TOP_PRESSURE");
+    yMin_ = viewRequest_("BOTTOM_LEVEL");
+    yMax_ = viewRequest_("TOP_LEVEL");
 }
 
 CommonXSectView::CommonXSectView(const CommonXSectView &old) :
@@ -49,18 +49,32 @@ CommonXSectView::~CommonXSectView()
   // Empty
 }
 
-bool CommonXSectView::CallService(const MvRequest &req, PmContext & context)
+// Synchronous call service. Calls a service and wait its return.
+bool CommonXSectView::CallService(const MvRequest &dataReq, PmContext & context, MvRequest& replyReq)
 {
-    if ( req.getVerb() != GRIB )
+    if ( dataReq.getVerb() != GRIB )
         return false;
 
-    MvRequest appRequest = appViewReq_;
-    appRequest("DATA")     = req;
-    appRequest("_CONTEXT") = appViewReq_;
-    appRequest.setVerb ( ApplicationName().c_str() );
+    MvRequest appRequest(ApplicationName().c_str());
+    appRequest("DATA")     = dataReq;
+    appRequest("_CONTEXT") = viewRequest_;
+    appRequest("_ACTION")  = (const char*)dataReq("_ACTION") ? (const char*)dataReq("_ACTION") : "prepare";
 
-    ( new PlotModTask (this, context, serviceName_.c_str(), appRequest ) )->run(); 
+    //( new PlotModTask (this, context, serviceName_.c_str(), appRequest ) )->run();
+    PlotModTask* pmt = new PlotModTask (this, context, serviceName_.c_str(), appRequest );
+    int err;
+    replyReq = pmt->run(err);
+    if( !replyReq || err != 0)
+    {
+       string message = serviceName_ + " application failed";
+       PlotMod::Instance().MetviewError ( message.c_str(), "Error" );
+       exit(1);
+    }
 
+    // Add a flag to indicate that there is a data attached to this View
+    viewRequest_("_DATAATTACHED") = "YES";
+    // This will be done by the destructor of the MvClient/MvTask
+    //delete pmt; pmt = 0;  
     return true;
 }
 
@@ -70,6 +84,7 @@ void CommonXSectView::Drop ( PmContext& context )
 
     // Process the drop
     MvRequest dropRequest = context.InRequest();
+
     MvIcon dataUnit;
     while ( dropRequest )
     {
@@ -98,29 +113,29 @@ void CommonXSectView::Drop ( PmContext& context )
         }
         else if ( ObjectList::IsDataUnit ( verb.c_str() ) == true )
         {
+            // Insert the dataunit in the data base
             dataUnit = dataBase.InsertDataUnit ( request,Owner().Id() );
 
             // Save to be used when returning from service
             this->ParentDataUnitId ( dataUnit.Id() );
 
-            // Call the service to process the request.
+            // Call the service to process the request
+#if 0
             // After CallService is finished, function PlotModService::endOfTask
             // should be called and this function should perform the drawing.
             Owner().HasDrawTask(false);
             if ( ! CallService(request, context) )
-                InsertDataRequest(request);
-#if 0
-            // Reset view values, may be temporarily set because of axis changes
-            if ( yMin_ != 0 || yMax_ != 0 )
-            {
-                viewRequest_("BOTTOM_PRESSURE") = yMin_;
-                viewRequest_("TOP_PRESSURE") = yMax_;
-            }
-
-            Owner().EraseBackDraw();
-            Owner().NeedsRedrawing(true);
-            Owner().RedrawIfWindow();
- #endif
+               InsertDataRequest(request);
+#else
+            // It calls an external service and waits for its return
+            // If returns false, it means that this is just a dataUnit
+            // that does not need to be processed by a external service
+            MvRequest replyRequest;
+            if ( !CallService(request, context, replyRequest) )
+               InsertDataRequest ( request );
+            else
+               InsertDataRequest ( replyRequest );
+#endif
       }
       else if ( ObjectList::IsVisDefText ( verb.c_str() ) )
           Owner().InsertPText ( request );
@@ -147,64 +162,47 @@ void CommonXSectView::Drop ( PmContext& context )
     context.AdvanceToEnd();
 }
 
-#if 0
-bool
-CommonXSectView::RetrieveVisdefList (MvRequest& dropRequest, MvRequest& vdRequestList)
-{
-	bool vdFound = false;        // VisDef flag
-
-	vdRequestList.rewind();
-	if (vdRequestList)
-		vdRequestList = empty_request(NULL); // Clean visdef list
-
-	while ( dropRequest )
-	{
-		MvRequest  request =  dropRequest.justOneRequest();
-		Cached verb        =  request.getVerb();
-
-		// Retrieve visdefs
-		if ( ObjectList::IsVisDef ( verb ) )
-		{
-			vdRequestList = vdRequestList + request;
-
-			// Some visdefs has additional tasks
-			if ( ObjectList::IsAxis ( verb ) ) 
-				// Replace the axis associated to the view.
-				ReplaceAxis ( request );
-			else if ( ObjectList::IsPgraph ( verb ) )
-				ReplacePgraph ( request );
-
-			vdFound = true;
-			dropRequest.advance();
-		}
-		else break;
-	}
-
-	return vdFound;
-}
-#endif
-
 void
 CommonXSectView::InsertDataRequest ( MvRequest& dropRequest )
 {
-    MvIconDataBase&   dataBase = Owner().IconDataBase();
+    MvIconDataBase& dataBase = Owner().IconDataBase();
+
+    // Save some specific values sent by the Data Applicaation
+    this->ApplicationInfo(dropRequest);
 
     // Process the request
-    // The CommonXSectView descendants are only associated with netCDF request
+    MvIcon dataUnit;
     while ( dropRequest )
     {
-        string verb = dropRequest.getVerb();
-        if ( verb.find(NETCDF) !=string::npos )
+        // VisDefs are processed in one single goal. This is because the processing
+        // of a single or a group of visdefs is different. It is assumed that
+        // visdefs always come after a dataunit (if it exists).
+        MvRequest vdRequestList;
+        if ( this->RetrieveVisdefList (dropRequest,vdRequestList) )
         {
-            MvRequest dataUnitRequest = dropRequest.justOneRequest();
-            MvIcon tmpIcon(dataUnitRequest);
-            DecodeDataUnit (  tmpIcon );
+            Owner().InsertVisDef (vdRequestList, dataUnit);
 
-            MvIcon parentDataUnit;
-            dataBase.RetrieveDataUnit(ParentDataUnitId (), parentDataUnit);
-            parentDataUnit.SvcRequest ( dataUnitRequest );
+            if ( !dropRequest ) // no more drops
+                break;
         }
 
+        MvRequest req = dropRequest.justOneRequest();
+        string verb = req.getVerb();
+        if ( verb.find(NETCDF) != string::npos || verb.find("INPUT") != string::npos)
+        {
+            // Insert the dataunit in the data base
+            MvIcon dataUnit = dataBase.InsertDataUnit ( req );
+            dataUnit.ParentId ( this->ParentDataUnitId () ); //Check if is needed
+
+            DecodeDataUnit ( dataUnit );
+
+            MvIcon parentDataUnit;
+            dataBase.RetrieveIconFromList(DB_DATAUNIT,ParentDataUnitId (), parentDataUnit);
+            parentDataUnit.SvcRequest ( req );
+        }
+        else if ( ObjectList::IsVisDefText ( verb.c_str() ) )
+            Owner().InsertPText ( req );
+ 
         dropRequest.advance();
     }
 }
@@ -216,31 +214,18 @@ CommonXSectView::InsertDataRequest ( MvRequest& dropRequest )
 //    . Provides the proper axis and graph definition according 
 //      to the metada. 
 //
-void CommonXSectView::DecodeDataUnit ( MvIcon& givenUnit )
+void CommonXSectView::DecodeDataUnit ( MvIcon& dataUnit )
 {
-    MvIconDataBase&   dataBase = Owner().IconDataBase();
-
     Owner().InitMatching();
 
     // Build a new data decoder, which will provide information
     // about the data
-    auto_ptr<Decoder> decoder ( DecoderFactory::Make ( givenUnit.Request() ) );
+    auto_ptr<Decoder> decoder ( DecoderFactory::Make ( dataUnit.Request() ) );
     ensure (decoder.get() != 0);
 
     int subpageId = 0;
-    double minX,maxX,minY,maxY;
-
     while ( decoder->ReadNextData() )
     {
-        MvRequest dataRequest = decoder->Request();
-
-        decoder->GetMinMax(minX,maxX,minY,maxY);
-
-        // Insert the dataunit in the data base
-        MvIcon dataUnit = dataBase.InsertDataUnit ( dataRequest );
-
-        dataUnit.ParentId ( this->ParentDataUnitId () );
-
         // Pass the data and metadata info to the page
         MatchingInfo dataInfo = decoder->CreateMatchingInfo();
 
@@ -640,7 +625,8 @@ void CommonXSectView::Draw ( SubPage* subPage )
     for ( ii = doList.begin(); ii != doList.end(); ii++ )
     {
         dataObject = (*ii);
-        if ( ! dataBase.RetrieveDataUnit (dataObject->DataUnitId(), dataUnit) )
+        //if ( ! dataBase.RetrieveDataUnit (dataObject->DataUnitId(), dataUnit) )
+        if ( ! dataBase.RetrieveIconFromList (DB_DATAUNIT, dataObject->DataUnitId(), dataUnit) )
             continue;
 
         // Retrieve visdef associated to this dataunit
diff --git a/src/uPlot/CommonXSectView.h b/src/uPlot/CommonXSectView.h
index 908f00b..03db6ff 100644
--- a/src/uPlot/CommonXSectView.h
+++ b/src/uPlot/CommonXSectView.h
@@ -52,7 +52,8 @@ public:
     virtual string Name()
             { return  "CommonXSectView" + Owner().Id(); }
 
-    virtual bool CallService(const MvRequest &,  PmContext &);
+    // Call a service and wait its return
+    bool CallService(const MvRequest&, PmContext&, MvRequest&);
 
     // Insert a new data request into the page hierarchy
     virtual void InsertDataRequest ( MvRequest& dropRequest );
@@ -65,7 +66,7 @@ public:
     virtual void UpdateView ( MvRequest& ) {}
 
     // Replace the current view
-    virtual void UpdateView () = 0;
+    virtual bool UpdateView () = 0;
 
     // Replace axis
     //virtual void ReplaceAxis ( MvRequest&);
@@ -109,6 +110,9 @@ protected:
 
     virtual void Draw(SubPage *);
 
+    // Save some data specific to some DataApplication
+    virtual void ApplicationInfo( MvRequest& ) {}
+
 #if 0
     // Provide Axis information
     void DescribeAxis ( ObjectInfo& description,
diff --git a/src/uPlot/CreateAction.cc b/src/uPlot/CreateAction.cc
index d149d2c..18df8d1 100644
--- a/src/uPlot/CreateAction.cc
+++ b/src/uPlot/CreateAction.cc
@@ -14,7 +14,9 @@
 
 #include <Assertions.hpp>
 #include "ObjectList.h"
+#include "PlotMod.h"
 #include "PlotModBuilder.h"
+#include "Presentable.h"
 
 //
 // This is the exemplar object for the Create Action class
@@ -41,4 +43,10 @@ CreateAction::Execute ( PmContext& context )
    // Execute the builder (return the tree node which has been created)
    Presentable* superpage = builder.Execute ( context );
    ensure (superpage != 0 );
+
+   // Add output device to Superpage
+   MvRequest deviceReq = PlotMod::Instance().OutputFormat()("OUTPUT_DEVICES");
+   MvRequest spReq = superpage->Request();
+   spReq("_OUTPUT_DEVICES") = deviceReq;
+   superpage->SetRequest(spReq);
 }
diff --git a/src/uPlot/DataBuilder.cc b/src/uPlot/DataBuilder.cc
index 85e8681..a6f661e 100644
--- a/src/uPlot/DataBuilder.cc
+++ b/src/uPlot/DataBuilder.cc
@@ -30,15 +30,6 @@ DataBuilder::Execute (PmContext& context)
   Presentable* superpage = 0;
   MvRequest defaultSuperPage = ObjectList::CreateDefaultRequest ( "PLOT_SUPERPAGE" );
 
-  // Make sure the macro is generated in current dir, even when defaults are used.
-  const char *val;
-  if ( ( val =  dataReq("_NAME")) )
-  {
-      string newName = dirname(val);
-      newName  += "/<Display Window>";
-      defaultSuperPage("_NAME") = newName.c_str();
-  }
-
   // Create default page and add view to this request
   MvRequest pageRequest = ObjectList::CreateDefaultRequest ( "PLOT_PAGE" );
 
@@ -68,7 +59,6 @@ DataBuilder::Execute (PmContext& context)
 			// Build a default
 			viewRequest = ObjectList::CreateDefaultRequest( viewName,EXPAND_NO_DEFAULT );
 			viewRequest("_ORIGIN") = "DataBuilder";
-			viewRequest("_DEFAULT") = 1;
 		}
 		pageRequest("VIEW") = viewRequest;
 	}
diff --git a/src/uPlot/DataObject.cc b/src/uPlot/DataObject.cc
index 6f5433b..08449db 100644
--- a/src/uPlot/DataObject.cc
+++ b/src/uPlot/DataObject.cc
@@ -150,7 +150,8 @@ DataObject::DrawPriority( )
 	// Retrieve the DataUnit
 	// (the object only stores its dataunit Id and index)
 	MvIcon  dataUnit;
-	if ( dataBase.RetrieveDataUnit (myDataUnitId_, dataUnit) == false)
+	//if ( dataBase.RetrieveDataUnit (myDataUnitId_, dataUnit) == false)
+   if ( dataBase.RetrieveIconFromList (DB_DATAUNIT, myDataUnitId_, dataUnit) == false)
 	{
 //		cout << "DataObject::Draw() -> No Data Unit" << endl;
 		return DrawPriorMap();
@@ -194,7 +195,8 @@ void DataObject::DrawDataVisDef()
 
 	// Retrieve the DataUnit
 	MvIcon  dataUnit;
-	if ( dataBase.RetrieveDataUnit (myDataUnitId_, dataUnit) == false)
+	//if ( dataBase.RetrieveDataUnit (myDataUnitId_, dataUnit) == false)
+   if ( dataBase.RetrieveIconFromList (DB_DATAUNIT, myDataUnitId_, dataUnit) == false)
 	{
 		cout << "ERROR: DataObject::Draw(DataVisDef) -> No Data Unit" << endl;
 		return;
@@ -214,7 +216,7 @@ void DataObject::DrawDataVisDef()
      if ( !(const char*)dataRequest("_NDIM_FLAG" ) )
      {
           dataRequest("_NDIM_FLAG" ) = dimFlag_;
-          dataBase.UpdateDataUnit(dataUnit.Id(),dataRequest);
+          dataBase.UpdateIcon(DB_DATAUNIT,dataUnit.Id(),dataRequest);
           first = true;
      }
 
@@ -324,7 +326,8 @@ DataObject::RetrieveMyVisDefList ( MvIcon& dataUnit, MvIconList& visdefList )
 	{
 		// There is a parent, look for its Visdefs
 		MvIcon parentDataUnit;
-		dataBase.RetrieveDataUnit ( parentDataUnitId, parentDataUnit );
+		//dataBase.RetrieveDataUnit ( parentDataUnitId, parentDataUnit );
+      dataBase.RetrieveIconFromList ( DB_DATAUNIT, parentDataUnitId, parentDataUnit );
 		dataBase.RetrieveVisDefList ( parentDataUnit, visdefList );
 
 		// Check that the parent has a valid visdef for this dataunit
@@ -656,18 +659,15 @@ DataObject:: MagicsTitle ()
 		return false;
 }
 
-
 void DataObject::DataUnit(MvIcon  &dataUnit)
 {
-	// Retrieve the data base info
-	MvIconDataBase& dataBase = IconDataBase();
+   // Retrieve the data base info
+   MvIconDataBase& dataBase = IconDataBase();
 
-	// Retrieve the DataUnit
-	if (dataBase.RetrieveDataUnit (myDataUnitId_, dataUnit) == false)
-	{
-		cout << "ERROR: DataObject::Draw(DataVisDef) -> No Data Unit" << endl;
-		//return;
-	}
+   // Retrieve the DataUnit
+	//if (dataBase.RetrieveDataUnit (myDataUnitId_, dataUnit) == false)
+   if (dataBase.RetrieveIconFromList (DB_DATAUNIT, myDataUnitId_, dataUnit) == false)
+       cout << "ERROR: DataObject::Draw(DataVisDef) -> No Data Unit" << endl;
 }
 
 // Update some visdef parameters only for the following cases:
diff --git a/src/uPlot/GenAppService.cc b/src/uPlot/GenAppService.cc
index 0ebc6f8..f05bd81 100644
--- a/src/uPlot/GenAppService.cc
+++ b/src/uPlot/GenAppService.cc
@@ -62,7 +62,15 @@ GenAppService::CallGenApp ( MvCallbackBase* callback,
 	editRequest.setValue ("DEFINITION", expandedRequest );
 
 	// Create a new task
-	MvServiceTask* task = new MvServiceTask (this, "MetviewUI",  editRequest);
+	char *desktop=getenv("MV_DESKTOP_NAME");
+	if(desktop == 0)  
+	{	
+		cout << "Error: MV_DESKTOP_NAME is not defined! GenAppService exits!" << endl;
+		return false;
+	}
+	
+	string desktopName(desktop);	
+	MvServiceTask* task = new MvServiceTask (this, desktop,  editRequest);
 
 	// Put the task in the map
 	callbackMap_[ task ] = callback;
diff --git a/src/uPlot/GeoTool.cc b/src/uPlot/GeoTool.cc
index c2bb729..023d609 100644
--- a/src/uPlot/GeoTool.cc
+++ b/src/uPlot/GeoTool.cc
@@ -316,10 +316,18 @@ QString GeoTool::InitializeParams( MvRequest& req )
 	// Get input type
 	// Problem: request MapView comes with MAP and Average with AREA
 	// Use input type tag AREA always
-	inputType_ = (const char*)req( "INPUT_TYPE" );
-	if ( inputType_ == "MAP" )
+	if(const char *cv=req("INPUT_TYPE"))
+		inputType_=string(cv);
+	else
+	  	return QString("ERROR");
+		
+	if(inputType_ == "MAP")
 		inputType_ = "AREA";
 
+	//Get the paramater name
+	if(const char *cv=req("INPUT_PARAM"))
+		inputPar_=string(cv);
+	
 	// Update size
 	spRequest_("CUSTOM_WIDTH")  = req("CUSTOM_WIDTH");
 	spRequest_("CUSTOM_HEIGHT") = req("CUSTOM_HEIGHT");
@@ -341,60 +349,90 @@ QString GeoTool::InitializeParams( MvRequest& req )
 	// Initialize parameters
 	QString coord;
 	geoRequest_.setVerb("INPUT");
-	if ( inputType_ == "POINT")
+	if(inputType_ == "POINT")
 	{
-		if ( (const char*)req("POINT") )
-			type_ = "POINT";
-		else if ( (const char*)req("POSITION") )
-			type_ = "POSITION";
-		else
+		//If there is no par specified we need to guess it 
+		if(inputPar_.empty())
 		{
-			cout << " ERROR: INVALID PARAMETER VALUE. VALID VALUES: POINT, POSITION" << endl;
-			return QString("ERROR");
+		  	if(static_cast<const char*>(req("POINT")))
+			  	inputPar_="POINT";
+			else if(static_cast<const char*>(req("POSITION")))
+				inputPar_="POSITION";
+			else
+			{
+				cout << " ERROR: INVALID PARAMETER VALUE. VALID VALUES: POINT, POSITION" << endl;
+				return QString("ERROR");
+			}
 		}
-
-		geoRequest_(type_.c_str())  = req(type_.c_str(),0);
-		geoRequest_(type_.c_str()) += req(type_.c_str(),1);
-		coord = (const char*)req(type_.c_str(),0) % QChar('/') % (const char*)req(type_.c_str(),1);
-		
+		 
+		geoRequest_(inputPar_.c_str())  = req(inputPar_.c_str(),0);
+		geoRequest_(inputPar_.c_str()) += req(inputPar_.c_str(),1);
+		coord = (const char*)req(inputPar_.c_str(),0) % QChar('/') % (const char*)req(inputPar_.c_str(),1);		
 	}
-	else if ( inputType_ == "LINE")
+	else if(inputType_ == "LINE")
 	{
-		geoRequest_("LINE")  = req("LINE",0);
-		geoRequest_("LINE") += req("LINE",1);
-		geoRequest_("LINE") += req("LINE",2);
-		geoRequest_("LINE") += req("LINE",3);
-		coord = requestToCoord(req,"LINE");
+		//If there is no par specified we need to guess it 
+		if(inputPar_.empty())
+		{
+	  		if(static_cast<const char*>(req("LINE")))
+				inputPar_="LINE";
+			else			  
+			{  	cout << " ERROR: NO PARAMETER IS SPECIFIED FOR LINE HELPER" << endl;
+				return QString("ERROR");
+			}	
+		}
+		
+	  	geoRequest_(inputPar_.c_str())  = req(inputPar_.c_str(),0);
+		geoRequest_(inputPar_.c_str()) += req(inputPar_.c_str(),1);
+		geoRequest_(inputPar_.c_str()) += req(inputPar_.c_str(),2);
+		geoRequest_(inputPar_.c_str()) += req(inputPar_.c_str(),3);
+		coord = requestToCoord(req,inputPar_.c_str());
 	}
-	else if ( inputType_ == "AREA")
+	else if(inputType_ == "AREA")
 	{		
-		if(static_cast<const char*>(req("AREA")))
+		//If there is no par specified we need to guess it 
+		if(inputPar_.empty())
+		{
+			if(static_cast<const char*>(req("AREA")))
+			  	inputPar_="AREA";
+			else if(static_cast<const char*>(req("FLEXTRA_AREA")))
+		  		inputPar_="FLEXTRA_AREA";
+			else if(static_cast<const char*>(req("area")))
+		  		inputPar_="area";
+			else
+			{
+			  	cout << " ERROR: NO PARAMETER IS SPECIFIED FOR AREA HELPER" << endl;
+				return QString("ERROR");
+			}
+		}  
+		  	  
+		/*if(static_cast<const char*>(req("AREA")))
 	  		areaParam_="AREA";
 		else if(static_cast<const char*>(req("FLEXTRA_AREA")))
 		  	areaParam_="FLEXTRA_AREA";
 		else if(static_cast<const char*>(req("area")))
-		  	areaParam_="area";
+		  	areaParam_="area";*/
 		
-	  	geoRequest_(areaParam_.c_str())  = req(areaParam_.c_str(),0);
-		geoRequest_(areaParam_.c_str()) += req(areaParam_.c_str(),1);
-		geoRequest_(areaParam_.c_str()) += req(areaParam_.c_str(),2);
-		geoRequest_(areaParam_.c_str()) += req(areaParam_.c_str(),3);
-		coord = requestToCoord(req,areaParam_.c_str());
+	  	geoRequest_(inputPar_.c_str())  = req(inputPar_.c_str(),0);
+		geoRequest_(inputPar_.c_str()) += req(inputPar_.c_str(),1);
+		geoRequest_(inputPar_.c_str()) += req(inputPar_.c_str(),2);
+		geoRequest_(inputPar_.c_str()) += req(inputPar_.c_str(),3);
+		coord = requestToCoord(req,inputPar_.c_str());
 
-		if ( (const char*)req("MAP_PROJECTION") )
+		if(static_cast<const char*>(req("MAP_PROJECTION")) )
 		{
 			geoRequest_("MAP_PROJECTION")  = req("MAP_PROJECTION");
 			viewRequest("MAP_PROJECTION")  = req("MAP_PROJECTION");
 		}
-		if ( (const char*)req("MAP_VERTICAL_LONGITUDE") )
+		if(static_cast<const char*>(req("MAP_VERTICAL_LONGITUDE")) )
 		{
 			geoRequest_("MAP_VERTICAL_LONGITUDE")  = req("MAP_VERTICAL_LONGITUDE");
 			viewRequest("MAP_VERTICAL_LONGITUDE")  = req("MAP_VERTICAL_LONGITUDE");
 		}
-		if ( (const char*)req("MAP_HEMISPHERE") )
+		if(static_cast<const char*>(req("MAP_HEMISPHERE")) )
 		{
-			geoRequest_("MAP_HEMISPHERE")  = (const char*)req("MAP_HEMISPHERE");
-			viewRequest("MAP_HEMISPHERE")  = (const char*)req("MAP_HEMISPHERE");
+			geoRequest_("MAP_HEMISPHERE")  = static_cast<const char*>(req("MAP_HEMISPHERE"));
+			viewRequest("MAP_HEMISPHERE")  = static_cast<const char*>(req("MAP_HEMISPHERE"));
 		}
 	}
 
@@ -410,33 +448,33 @@ QString GeoTool::InitializeParams( MvRequest& req )
 void GeoTool::UpdateCoordinates( QString& coord )
 {
 	QStringList clist = coord.split("/");
-	if ( inputType_ == (const char*)( "POINT" ) )
+	if ( inputType_ == "POINT")
 	{
 		if ( clist.size() != 2 )
 		{
 			cout << "ERROR" << endl;
 			return;
 		}
-	        geoRequest_(type_.c_str())  = clist.at(0).toDouble();
-	        geoRequest_(type_.c_str()) += clist.at(1).toDouble();
+	        geoRequest_(inputPar_.c_str())  = clist.at(0).toDouble();
+	        geoRequest_(inputPar_.c_str()) += clist.at(1).toDouble();
 	}
-	else if ( inputType_ ==  (const char*)( "LINE" ) )
+	else if ( inputType_ ==  "LINE")
 	{
 		if ( clist.size() != 4 )
 		{
 			cout << "ERROR" << endl;
 			return;
 		}
-		coordToRequest(coord,geoRequest_,"LINE");
-	}
-       	else
+		coordToRequest(coord,geoRequest_,inputPar_.c_str());
+	}      	
+    else
        	{
 		if ( clist.size() != 4 )
 		{
 			cout << "ERROR" << endl;
 			return;
 		}
-		coordToRequest(coord,geoRequest_,areaParam_.c_str());
+		coordToRequest(coord,geoRequest_,inputPar_.c_str());
 	}
 	return;
 }
@@ -733,6 +771,17 @@ bool GeoTool::setDropTarget(QPoint globalPos)
 	return false;
 }
 
+bool GeoTool::setDropTargetInView(QPoint pos)
+{
+	QPointF scenePos = plotView_->mapToScene(pos);
+	
+	if(activeScene_ && activeScene_->sceneBoundingRect().contains(scenePos))
+	{	
+		return true;
+	}
+	
+	return false;
+}  
 
 void GeoTool::writeSettings()
 {	  
diff --git a/src/uPlot/GeoTool.h b/src/uPlot/GeoTool.h
index ba26140..dcc6e3d 100644
--- a/src/uPlot/GeoTool.h
+++ b/src/uPlot/GeoTool.h
@@ -53,6 +53,7 @@ private:
 	QString InitializeParams( MvRequest& );
 
 	bool setDropTarget(QPoint);
+	bool setDropTargetInView(QPoint);
 	int currentStep() {return 0;}
 	int stepNum() {return 0;}
 		
@@ -71,10 +72,8 @@ private:
 	MvRequest  geoRequest_;  // request to be sent out to the caller
 	MvRequest  spRequest_;   // superpage request
 	string inputType_;	 // AREA, LINE, POINT
-	string type_;		 // POINT, POSITION
-	bool isFirstMap_;
-	
-	string areaParam_;
+	string inputPar_;
+	bool isFirstMap_;	
 };
 
 #endif
diff --git a/src/uPlot/GeoToolManager.cc b/src/uPlot/GeoToolManager.cc
index 4f5f799..b6ff699 100644
--- a/src/uPlot/GeoToolManager.cc
+++ b/src/uPlot/GeoToolManager.cc
@@ -97,8 +97,18 @@ GeoToolService::CallGeoTool ( MvRequest& in, MvRequest& out)
 	// can not process the request.
 	// WE NEED TO FIND A BETTER SOLUTION!!!!!!!
 	out.setVerb("REPLY");
-	out("TARGET") = "MetviewUI";   //????????????
-
+	
+	// Create a new task
+	char *desktop=getenv("MV_DESKTOP_NAME");
+	if(desktop == 0)  
+	{	
+		cout << "Error: MV_DESKTOP_NAME is not defined! GeoTool exits!" << endl;
+		return;
+	}
+	
+	string desktopName(desktop);
+	out("TARGET") = desktopName.c_str();
+	
 	// Start the approriate service
 	char cmd[1024];
 	sprintf(cmd,"$metview_command $METVIEW_BIN/GeoTool %s $METVIEW_QT_APPLICATION_FLAGS &",ftemp);
diff --git a/src/uPlot/GraphicsEngine.h b/src/uPlot/GraphicsEngine.h
index c3b8f6b..0c5ad2e 100644
--- a/src/uPlot/GraphicsEngine.h
+++ b/src/uPlot/GraphicsEngine.h
@@ -148,16 +148,7 @@ public:
 	virtual void DrawDataUnit ( MvIcon&, MvRequest&, MvIcon& ) = 0;
 
 	virtual void DrawNewPage ( MvRequest& ) = 0;
-//D	virtual void DrawFrame   ( Canvas&, MvRequest& ) = 0;
-//	virtual void DrawExternalFrame ( Canvas&, MvRequest& ) = 0;
-	virtual void DrawText ( MvRequest& ) = 0;
-	virtual void DrawLegend ( MvRequest& ) = 0;
-	virtual void Draw ( const MvRequest& ) = 0;
-//	virtual void DrawCoastlines      ( Canvas&, MvRequest& ) = 0;
-
-	virtual void DrawCoastlinesBack  ( MvRequest& ) = 0;
-	virtual void DrawCoastlinesFront ( MvRequest& ) = 0;
-	virtual void DrawAxis 		 ( MvRequest& ) = 0;
+	virtual void Draw ( const MvRequest&, bool=false ) = 0;
 
 protected:
 	Presentable& owner_;      // keep track of my owner
diff --git a/src/uPlot/HovmoellerView.cc b/src/uPlot/HovmoellerView.cc
new file mode 100644
index 0000000..2d3ba38
--- /dev/null
+++ b/src/uPlot/HovmoellerView.cc
@@ -0,0 +1,392 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+// Methods for HovmoellerView class
+
+#include "HovmoellerView.h"
+#include <MvRequestUtil.hpp>
+#include "ObjectList.h"
+#include "PlotMod.h"
+#include "Root.h"
+
+// Hovmoeller types
+static const string HOVLINE = "LINE_HOVM";
+static const string HOVAREA = "AREA_HOVM";
+static const string HOVVERT = "VERTICAL_HOVM";
+
+//--------------------------------------------------------
+static HovmoellerViewFactory hovmoellerViewFactoryInstance;
+
+PlotModView*
+HovmoellerViewFactory::Build ( Page& page,
+                               const MvRequest& contextRequest,
+                               const MvRequest& setupRequest )
+{
+   // Expand request
+   MvRequest expReq = ObjectList::ExpandRequest(contextRequest,EXPAND_DEFAULTS);
+
+   // Instantiate a Hovmoeller view
+   return new HovmoellerView ( page, expReq, setupRequest );
+}
+
+//--------------------------------------------------------
+static HovmoellerViewM3Factory hovmoellerViewM3FactoryInstance;
+
+PlotModView*
+HovmoellerViewM3Factory::Build ( Page& page,
+                                 const MvRequest& contextRequest,
+                                 const MvRequest& setupRequest )
+{
+   // Translate view request to Metview 4
+   MvRequest viewM4Req = this->Translate(contextRequest);
+
+   // Instantiate a Hovmoeller View
+   return new HovmoellerView ( page, viewM4Req, setupRequest );
+}
+
+MvRequest
+HovmoellerViewM3Factory::Translate ( const MvRequest& in )
+{
+   // Send a warning message
+   PlotMod::Instance().MetviewError ("The Metview 3 HOVMOELLER VIEW icon is deprecated. An automatic translation to the Metview 4 HOVMOELLER VIEW icon will be performed internally, but may not work for all cases. It is recommended to manually replace the old icons with their new equivalents.","WARNING");
+
+   // Expand request
+   MvRequest req = ObjectList::ExpandRequest(in,EXPAND_DEFAULTS);
+
+   // Copy Line parameter
+   MvRequest viewReq("MHOVMOELLERVIEW");
+#if 0
+   viewReq.addValue("LINE",(double)req("LINE",0));
+   viewReq.addValue("LINE",(double)req("LINE",1));
+   viewReq.addValue("LINE",(double)req("LINE",2));
+   viewReq.addValue("LINE",(double)req("LINE",3));
+
+   // Translate Levels interval
+   viewReq("BOTTOM_LEVEL") = (double)req("BOTTOM_PRESSURE");
+   viewReq("TOP_LEVEL")    = (double)req("TOP_PRESSURE");
+
+   // Copy Wind parameters
+   viewReq("WIND_PARALLEL")      = (const char*)req("WIND_PARALLEL");
+   viewReq("WIND_PERPENDICULAR") = (const char*)req("WIND_PERPENDICULAR");
+   viewReq("WIND_INTENSITY")     = (const char*)req("WIND_INTENSITY");
+
+   // Translate Vertical scaling parameter
+   viewReq("VERTICAL_SCALING") = (const char*)req("PRESSURE_LEVEL_AXIS");
+
+   // Overlay Control parameter is not translated
+   PlotMod::Instance().MetviewError ("The Metview 3 CROSS SECTION VIEW icon is deprecated. Parameter OVERLAY CONTROL will not be internally translated.\n","WARNING");
+
+   // Copy Page and Subpage parameters
+   CopySomeParameters ( req,viewReq,"Subpage");
+   CopySomeParameters ( req,viewReq,"Page");
+#endif
+
+   // Expand output request
+   MvRequest out = ObjectList::ExpandRequest(viewReq,EXPAND_DEFAULTS);
+
+   return out;
+}
+
+//-----------------------------------------------------------------
+
+HovmoellerView::HovmoellerView ( Page& owner,
+                                 const MvRequest& viewRequest,
+                                 const MvRequest& setupRequest ):
+                CommonXSectView ( owner, viewRequest, setupRequest )
+{
+   SetVariables(viewRequest,true);
+   ApplicationName(type_.c_str());
+}
+
+HovmoellerView::HovmoellerView ( const HovmoellerView &old ) :
+                CommonXSectView(old)
+{
+   type_     = old.type_;
+   bDateMin_ = old.bDateMin_;
+   bDateMax_ = old.bDateMax_;
+   dateMin_  = old.dateMin_;
+   dateMax_  = old.dateMax_;
+}
+
+string HovmoellerView::Name()
+{
+   int id =  Owner().Id();
+   string name =  (const char*)ObjectInfo::ObjectName ( viewRequest_, "HovmoellerView", id );
+
+   return name;
+}
+
+void HovmoellerView::DescribeYourself ( ObjectInfo& description )
+{
+   // Convert my request to macro
+   set<Cached> skipSet;
+   description.ConvertRequestToMacro ( viewRequest_, PUT_END, MacroName().c_str(),"hovmoellerview", skipSet);
+   description.PutNewLine (" " );
+}
+
+void HovmoellerView::SetVariables(const MvRequest &in, bool)
+{
+   // Set Hovmoeller type
+   type_ = (const char*)in("TYPE");
+
+   // Set geographical coordinates
+   char param[6];
+   if ( in.countValues("LINE") )
+       strcpy(param,"LINE");
+   else
+       strcpy(param,"AREA");
+
+   latMin_ = in(param,2);
+   latMax_ = in(param,0);
+   lonMin_ = in(param,1);
+   lonMax_ = in(param,3);
+
+   // Set date limits
+   if ( strcmp((const char*)in("DATE_MIN"),"AUTOMATIC") == 0 )
+   {
+      bDateMin_ = true;
+      dateMin_  = "2013-01-01";
+   }
+   else
+   {
+      bDateMin_ = false;
+      dateMin_  = (const char*)in("DATE_MIN");
+   }
+
+   if ( strcmp((const char*)in("DATE_MAX"),"AUTOMATIC") == 0 )
+   {
+      bDateMax_ = true;
+      dateMax_  = "2013-01-01 00:01:00";
+   }
+   else
+   {
+      bDateMax_ = false;
+      dateMax_  = (const char*)in("DATE_MAX");
+   }
+}
+
+bool HovmoellerView::UpdateView ()
+{
+   // It has already been updated
+   if ( string(viewRequest_.getVerb()) == CARTESIANVIEW )
+      return true;
+
+   // Translate common parameters
+   //GetCommonParameters ( req, cartView );
+   bool swapAxes = ( (const char*)viewRequest_("SWAP_AXES") &&
+                     strcmp(viewRequest_("SWAP_AXES"),"YES") == 0) ? true : false;
+
+   // Translate specific parameters
+   MvRequest cartView("CARTESIANVIEW");
+   if ( type_ == HOVLINE )
+      UpdateViewLine( swapAxes, viewRequest_, cartView );
+   else if ( type_ == HOVAREA )
+      UpdateViewArea( swapAxes, viewRequest_, cartView );
+   else
+      UpdateViewVert( swapAxes, viewRequest_, cartView );
+
+    // Copy PAGE and SUBPAGE definition
+    CopySomeParameters( viewRequest_,cartView,"PAGE" );
+    CopySomeParameters( viewRequest_,cartView,"SUBPAGE" );
+
+    // Copy the original request without certain parameteres (to avoid duplication)
+    RemoveParameters( viewRequest_, "HORIZONTAL_AXIS" );
+    RemoveParameters( viewRequest_, "VERTICAL_AXIS" );
+    RemoveParameters( viewRequest_, "PAGE" );
+    RemoveParameters( viewRequest_, "SUBPAGE" );
+    RemoveParameters( viewRequest_, "_" );
+    cartView("_ORIGINAL_REQUEST") = viewRequest_;
+
+    // Update request
+    viewRequest_ = cartView;
+
+    // Indicate that the plotting tree needs to be rebuilt
+    Root::Instance().Refresh(false);
+
+    return true;
+}
+
+void HovmoellerView::UpdateViewLine ( bool swapAxes, MvRequest& in, MvRequest& cartView )
+{
+   // Translate Geographical and Time coordinates
+   cartView("X_AUTOMATIC") = "off";
+   cartView("Y_AUTOMATIC") = "off";
+   if ( swapAxes )
+   {
+      cartView("Y_AXIS_TYPE")     = "geoline";
+      cartView("Y_MIN_LATITUDE")  = latMin_;
+      cartView("Y_MAX_LATITUDE")  = latMax_;
+      cartView("Y_MIN_LONGITUDE") = lonMin_;
+      cartView("Y_MAX_LONGITUDE") = lonMax_;
+
+      cartView("X_AXIS_TYPE")     = "date";
+      cartView("X_DATE_MIN")      = dateMin_.c_str();
+      cartView("X_DATE_MAX")      = dateMax_.c_str();
+
+      // Copy axis definition
+      cartView.setValue("HORIZONTAL_AXIS",in.getSubrequest("TIME_AXIS"));
+      cartView.setValue("VERTICAL_AXIS",in.getSubrequest("GEO_AXIS"));
+   }
+   else
+   {
+      cartView("X_AXIS_TYPE")     = "geoline";
+      cartView("X_MIN_LATITUDE")  = latMin_;
+      cartView("X_MAX_LATITUDE")  = latMax_;
+      cartView("X_MIN_LONGITUDE") = lonMin_;
+      cartView("X_MAX_LONGITUDE") = lonMax_;
+
+      cartView("Y_AXIS_TYPE")     = "date";
+      cartView("Y_DATE_MIN")      = dateMin_.c_str();
+      cartView("Y_DATE_MAX")      = dateMax_.c_str();
+
+      // Copy axis definition
+      cartView.setValue("HORIZONTAL_AXIS",in.getSubrequest("GEO_AXIS"));
+      cartView.setValue("VERTICAL_AXIS",in.getSubrequest("TIME_AXIS"));
+   }
+}
+
+void HovmoellerView::UpdateViewArea ( bool swapAxes, MvRequest& in, MvRequest& cartView )
+{
+   // Get geo axis
+   MvRequest geoAxisReq = in.getSubrequest("GEO_AXIS");
+   if ( !geoAxisReq )
+      geoAxisReq.setVerb("MAXIS");
+
+   // Translate Geographical and Time coordinates
+   cartView("X_AUTOMATIC") = "off";
+   cartView("Y_AUTOMATIC") = "off";
+   string dir = (const char*)in("AVERAGE_DIRECTION");
+   int hAxis, vAxis;  // 1 - time, 2 - latitude, 3 - longitude
+   if ( swapAxes )
+   {
+      hAxis = ( dir == "EAST_WEST" ) ? 2 : 1;
+      vAxis = ( dir == "EAST_WEST" ) ? 1 : 3;
+   }
+   else
+   {
+      hAxis = ( dir == "EAST_WEST" ) ? 1 : 3;
+      vAxis = ( dir == "EAST_WEST" ) ? 2 : 1;
+   }
+
+   if ( hAxis == 1 ) // Horizontal time axis
+   {
+      cartView("X_AXIS_TYPE")     = "date";
+      cartView("X_DATE_MIN")      = dateMin_.c_str();
+      cartView("X_DATE_MAX")      = dateMax_.c_str();
+
+      geoAxisReq("AXIS_ORIENTATION") = "VERTICAL";
+      if ( vAxis == 2 ) // vertical latitude axis
+      {
+         cartView("Y_MIN")  = latMin_;
+         cartView("Y_MAX")  = latMax_;
+         geoAxisReq("AXIS_TICK_LABEL_TYPE") = "LATITUDE";
+      }
+      else // vertical longitude axis
+      {
+         cartView("Y_MIN")  = lonMin_;
+         cartView("Y_MAX")  = lonMax_;
+         geoAxisReq("AXIS_TICK_LABEL_TYPE") = "LONGITUDE";
+      }
+
+      // Set axes definitions
+      cartView.setValue("HORIZONTAL_AXIS",in.getSubrequest("TIME_AXIS"));
+      cartView.setValue("VERTICAL_AXIS",geoAxisReq);
+   }
+   else if ( hAxis == 2 ) // Horizontal latitude axis
+   {
+      cartView("X_MIN") = latMin_;
+      cartView("X_MAX") = latMax_;
+      geoAxisReq("AXIS_ORIENTATION")     = "HORIZONTAL";
+      geoAxisReq("AXIS_TICK_LABEL_TYPE") = "LATITUDE";
+
+      cartView("Y_AXIS_TYPE")     = "date";
+      cartView("Y_DATE_MIN")      = dateMin_.c_str();
+      cartView("Y_DATE_MAX")      = dateMax_.c_str();
+
+      // Set axes definitions
+      cartView.setValue("HORIZONTAL_AXIS",geoAxisReq);
+      cartView.setValue("VERTICAL_AXIS",in.getSubrequest("TIME_AXIS"));
+   }
+   else   // Horizontal longitude axis
+   {
+      cartView("X_MIN") = lonMin_;
+      cartView("X_MAX") = lonMax_;
+      geoAxisReq("AXIS_ORIENTATION")     = "HORIZONTAL";
+      geoAxisReq("AXIS_TICK_LABEL_TYPE") = "LONGITUDE";
+
+      cartView("Y_AXIS_TYPE")     = "date";
+      cartView("Y_DATE_MIN")      = dateMin_.c_str();
+      cartView("Y_DATE_MAX")      = dateMax_.c_str();
+
+      // Set axes definitions
+      cartView.setValue("HORIZONTAL_AXIS",geoAxisReq);
+      cartView.setValue("VERTICAL_AXIS",in.getSubrequest("TIME_AXIS"));
+   }
+}
+
+void HovmoellerView::UpdateViewVert ( bool swapAxes, MvRequest& in, MvRequest& cartView )
+{
+   // Translate Geographical and Time coordinates
+   const char* vs = "regular";
+   if ( (const char*)in("VERTICAL_SCALING") && strcmp((const char*)in("VERTICAL_SCALING"),"LOG") == 0 )
+      vs = "logarithmic";
+
+   cartView("X_AUTOMATIC") = "off";
+   cartView("Y_AUTOMATIC") = "off";
+   if ( swapAxes )
+   {
+      cartView("X_AXIS_TYPE") = vs;
+      cartView("X_MIN")       = yMin_;
+      cartView("X_MAX")       = yMax_;
+
+      cartView("Y_AXIS_TYPE") = "date";
+      cartView("Y_DATE_MIN")  = dateMin_.c_str();
+      cartView("Y_DATE_MAX")  = dateMax_.c_str();
+
+      // Copy axis definition
+      cartView.setValue("HORIZONTAL_AXIS",in.getSubrequest("VERTICAL_AXIS"));
+      cartView.setValue("VERTICAL_AXIS",in.getSubrequest("TIME_AXIS"));
+   }
+   else
+   {
+      cartView("X_AXIS_TYPE") = "date";
+      cartView("X_DATE_MIN")  = dateMin_.c_str();
+      cartView("X_DATE_MAX")  = dateMax_.c_str();
+
+      cartView("Y_AXIS_TYPE") = vs;
+      cartView("Y_MIN")       = yMin_;
+      cartView("Y_MAX")       = yMax_;
+
+      // Copy axis definition
+      cartView.setValue("HORIZONTAL_AXIS",in.getSubrequest("TIME_AXIS"));
+      cartView.setValue("VERTICAL_AXIS",in.getSubrequest("VERTICAL_AXIS"));
+   }
+}
+
+void HovmoellerView::ApplicationInfo( MvRequest& req)
+{
+   // Update the DATE_MIN/MAX parameters in the View if the original values
+   // were AUTOMATIC and the Hovmoeller application provided new values
+   if ( bDateMin_ )
+   {
+      string str = (const char*)req("X_DATE_MIN") ? "X_DATE_MIN" : "Y_DATE_MIN";
+      dateMin_ = (const char*)req(str.c_str());
+      viewRequest_(str.c_str()) = (const char*)req(str.c_str());
+      bDateMin_ = false;
+   }
+   if ( bDateMax_ )
+   {
+      string str = (const char*)req("X_DATE_MAX") ? "X_DATE_MAX" : "Y_DATE_MAX";
+      dateMax_ = (const char*)req(str.c_str());
+      viewRequest_(str.c_str()) = (const char*)req(str.c_str());
+      bDateMax_ = false;
+   }
+
+   return;
+}
diff --git a/src/uPlot/HovmoellerView.h b/src/uPlot/HovmoellerView.h
new file mode 100644
index 0000000..e988400
--- /dev/null
+++ b/src/uPlot/HovmoellerView.h
@@ -0,0 +1,132 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 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 *************************************/
+
+//
+// .NAME:
+//  HovmoellerView
+//
+// .AUTHOR:
+//  Fernando Ii
+//
+// .SUMMARY:
+//  Describes the HovmoellerView class, which handles the
+//  matching issues related to the Hovmoeller View
+//
+// .CLIENTS:
+//  DropAction
+//
+// .RESPONSIBILITY:
+//
+//  - When receiving a drop or a request in a page associated
+//    to a service view, call the service to process the request
+//
+//  - When the application is finished, pass the request sent
+//    by the application to the presentable, which then should
+//    perform the data matching
+//
+// .COLLABORATORS:
+//  MvRequest - extracts information from the request
+//  MvTask - communication with METVIEW modules
+//
+// .DESCENDENT:
+//
+// .RELATED:
+//  Presentable, SuperPage, Page, DataObject
+//
+// .ASCENDENT:
+// CommonXSectView
+//
+
+#ifndef HovmoellerView_H
+#define HovmoellerView_H
+
+#include "CommonXSectView.h"
+
+//---------------------------------------------------------------------
+// HovmoellerView factory definition
+class HovmoellerViewFactory : public PlotModViewFactory
+{
+   // --  Virtual Constructor - Builds a new HovmoellerView
+   virtual PlotModView* Build ( Page&, const MvRequest&, const MvRequest& );
+
+public:
+
+   // Constructors
+   HovmoellerViewFactory() : PlotModViewFactory ( "HovmoellerView" ) {}
+};
+
+//---------------------------------------------------------------------
+// HovmoellerView factory definition to handle translation from Metview 3 to 4.
+// This should be delete in the future. It is defined here for backwards compatibility.
+class HovmoellerViewM3Factory : public PlotModViewFactory
+{
+   // --  Virtual Constructor - Builds a new HovmoellerView
+   virtual PlotModView* Build ( Page&, const MvRequest&, const MvRequest& );
+
+   // Translate Metview 3 view request to Metview 4
+   MvRequest Translate ( const MvRequest& );
+
+public:
+
+   // Constructors
+   HovmoellerViewM3Factory() : PlotModViewFactory ( "HovmoellerM3View" ) {}
+};
+
+//---------------------------------------------------------------------
+// HovmoellerView class definition
+class HovmoellerView: public CommonXSectView {
+
+public:
+
+   // -- Constructors
+   HovmoellerView ( Page&, const MvRequest&, const MvRequest& );
+   HovmoellerView ( const HovmoellerView& );
+   virtual PlotModView *Clone() const { return new HovmoellerView(*this); }
+
+   // -- Destructor
+   ~HovmoellerView() {}
+
+   // -- Methods
+   // -- Overriden from CommonXSectView class
+   virtual string Name();
+
+   // Draw the background (axis )
+   virtual void DrawBackground () {};
+
+   // Describe the contents of the view
+   virtual void DescribeYourself ( ObjectInfo& );
+
+    // Initialize some variable members
+    virtual void SetVariables(const MvRequest&, bool);
+
+    // Update view
+   virtual bool UpdateView ();
+
+
+private:
+
+   // No assignment
+   HovmoellerView& operator=(const HovmoellerView&);
+
+   void ApplicationInfo( MvRequest& );
+
+   // Update View according to the Hovmoeller type
+   void UpdateViewLine ( bool, MvRequest&, MvRequest& );
+   void UpdateViewArea ( bool, MvRequest&, MvRequest& );
+   void UpdateViewVert ( bool, MvRequest&, MvRequest& );
+
+   // Variable members
+   string type_;         // Line, Area, Vertical
+   string dateMin_;      // date 1 current used in the axis
+   string dateMax_;      // date 2 current used in the axis
+   bool   bDateMin_;     // true: date 1 has a default value 'automatic'
+   bool   bDateMax_;     // true: date 2 has a default value 'automatic'
+};
+
+#endif
diff --git a/src/uPlot/MagPlusService.h b/src/uPlot/MagPlusService.h
index 5cf2542..892fecd 100644
--- a/src/uPlot/MagPlusService.h
+++ b/src/uPlot/MagPlusService.h
@@ -112,6 +112,7 @@ public:
 	int countValues(const string& name) { return request_.countValues(name.c_str()); }
 	string getParameter(int i) { return request_.getParameter(i); }
 	void print() { return request_.print(); }
+	void read(const string& file) { request_.read(file.c_str()); }
 	MagRequest& justOneRequest() { MvRequest sub = request_.justOneRequest();
         return *(new MvMagRequest(sub)); }
 protected:
diff --git a/src/uPlot/MagicsGraphicsEngine.cc b/src/uPlot/MagicsGraphicsEngine.cc
index 9bad289..5b5fd74 100644
--- a/src/uPlot/MagicsGraphicsEngine.cc
+++ b/src/uPlot/MagicsGraphicsEngine.cc
@@ -102,11 +102,17 @@ MagicsGraphicsEngine::MakeCanvas  (  Device& device,
 //
 //  PURPOSE - Add request
 void
-MagicsGraphicsEngine::Draw ( const MvRequest& magicsRequest )
+MagicsGraphicsEngine::Draw ( const MvRequest& magicsRequest, bool translate )
 {
 	// Add a magicsRequest to the service Request 
-	//serviceRequest_ = serviceRequest_ + magicsRequest;
-	serviceRequest_ += magicsRequest;
+   // If requested, translate first METVIEW calls into MAGICS calls
+   if ( translate )
+   {
+      MagicsTranslator& mt = MagicsTranslator::Find ( magicsRequest.getVerb() );
+      serviceRequest_ += mt.Execute ( magicsRequest );
+   }
+   else
+      serviceRequest_ += magicsRequest;
 }
 
 void
@@ -176,14 +182,8 @@ MagicsGraphicsEngine::DrawDataVisDef (
                     if ( pos != string::npos )
                          lvd = lvd.substr(0,pos);
 
-                    // Build the visdef request
-                    MvRequest vdRequest( lvd.c_str() );
-                    string name = "<";
-                    name += (const char*)ObjectList::Find("object",lvd.c_str(),"default_name");
-                    name += ">";
-                    vdRequest( "_NAME" )  = name.c_str();
-                    vdRequest( "_CLASS" ) = lvd.c_str();
-                    vdRequest("_DEFAULT") = true;
+                    // Build a default visdef request
+                    MvRequest vdRequest = ObjectList::CreateDefaultRequest ( lvd.c_str() );
 
                     // Insert the visdef into the list
                     MvIcon newVd ( vdRequest );
@@ -267,112 +267,53 @@ MagicsGraphicsEngine::DrawNewPage( MvRequest& viewRequest )
 }
 
 #if 0
-#if 0 //D
-void
-MagicsGraphicsEngine::DrawFrame( Canvas& canvas, MvRequest& viewRequest )
-{
-	// Call the magics translator to translate METVIEW calls 
-	// into MAGICS calls
-	MagicsTranslator& mt = MagicsTranslator::Find ( "FRAME" );
-	MvRequest frameRequest = mt.Execute ( viewRequest );
-
-	// Draw the frame
-	this->Draw ( canvas, frameRequest );
-}
-#endif
-
-void
-MagicsGraphicsEngine::DrawExternalFrame( Canvas& canvas, MvRequest& frameRequest )
-{
-	// Call the magics translator to translate METVIEW calls 
-	// into MAGICS calls
-	MagicsTranslator& mt = MagicsTranslator::Find ( "FRAME" );
-	MvRequest magicsRequest = mt.Execute ( frameRequest );
-
-	magicsRequest ("SUBPAGE_FRAME") = "OFF";
-
-	// Draw the frame
-	this->Draw ( canvas, magicsRequest );
-}
-#endif
-
-void
-MagicsGraphicsEngine::DrawText( MvRequest& textRequest )
-{
-	const char* verb = textRequest.getVerb();
-	MagicsTranslator& mtrans = MagicsTranslator::Find ( verb );
-	MvRequest magicsTextRequest = mtrans.Execute ( textRequest );
-
-	this->Draw ( magicsTextRequest );
-}
-
-void
-MagicsGraphicsEngine::DrawLegend( MvRequest& legRequest )
-{
-	MagicsTranslator& mtrans = MagicsTranslator::Find ( "MLEGEND" );
-	MvRequest magicsLegendRequest = mtrans.Execute ( legRequest );
-
-	this->Draw ( magicsLegendRequest );
-}
-
-//
-//  DrawCoastlinesBack
-//
-//  INPUT  - canvas: the canvas associated to the graphics engine
-//           viewRequest: the mapview Request
-//           shaded: indicates if land-sea shading is to be performed
-//
-//  PURPOSE - Translate a METVIEW request into a MAGICS request
-//            Call the "Draw" method to draw the coastlines
 //
-void
-MagicsGraphicsEngine::DrawCoastlinesBack( MvRequest& viewRequest )
+// Boundaries, Cities, Rivers and Grid are plotted in the Foreground.
+void MagicsGraphicsEngine::DrawGeoLayersBack ( MvRequest& viewRequest )
 {
-	int drawPrior;
-	bool draw = false;
-	Cached ON   = "ON";
+   //bool draw = false;
+   //string ON = "ON";
 
 	// Get DrawingPriority from Page
-	DrawingPriority& tmpDrawingPriority = owner_.GetDrawPriority ();
+  // DrawingPriority& tmpDrawingPriority = owner_.GetDrawPriority ();
 
-	// Retrieve the coastlines Request
-	// Call the magics translator to translate METVIEW calls
-	// into MAGICS calls
-	// Expand request
-	MagicsTranslator& mt = MagicsTranslator::Find ( "COASTLINES" );
-	MvRequest coastRequest = mt.Execute ( viewRequest );
-	MvRequest expRequest = ObjectList::ExpandRequest ( coastRequest, EXPAND_DEFAULTS  );
+   // Retrieve the GeoLayers request
+   MvRequest geoRequest = viewRequest.getSubrequest ("GEO_LAYERS");
 
-	// Account for land-sea shading and for the drawing order
-	// Check if Coastline Land Shade is to be drawn on the background
-	Cached landShade = expRequest ( "MAP_COASTLINE_LAND_SHADE" );
-	if ( landShade == ON )
+   // Account for land-sea shading
+   MvRequest landReq = geoRequest.getSubrequest ("GEO_LAND_SHADE");
+   if ( landReq )
+      this->Draw ( landReq );
+
+   #if 0
+   string onoff = (const char*)expRequest ( "MAP_COASTLINE_LAND_SHADE" );
+   if ( onoff == ON )
 	{
-		drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_LAND_SHADE" );
+      int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_LAND_SHADE" );
 		if ( drawPrior == 999 )
-			expRequest ("MAP_COASTLINE_LAND_SHADE") = "OFF";
+         coastRequest ("MAP_COASTLINE_LAND_SHADE") = "OFF";
 		else
 			draw = true;
 	}
 
 	// Check if Coastline Sea Shade is to be drawn on the background
-	Cached seaShade = expRequest ( "MAP_COASTLINE_SEA_SHADE" );
-	if ( seaShade == ON )
+   onoff = (const char*)expRequest ( "MAP_COASTLINE_SEA_SHADE" );
+   if ( onoff == ON )
 	{
-		drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_SEA_SHADE" );
+      int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_SEA_SHADE" );
 		if ( drawPrior == 999 )
-			expRequest ("MAP_COASTLINE_SEA_SHADE") = "OFF";
+         coastRequest ("MAP_COASTLINE_SEA_SHADE") = "OFF";
 		else
 			draw = true;
 	}
 
 	// Check if Coastline is to be drawn on the background
-	Cached mapCoastline = expRequest ( "MAP_COASTLINE" );
-	if ( mapCoastline == ON )
+   onoff = (const char*)expRequest ( "MAP_COASTLINE" );
+   if ( onoff == ON )
 	{
-		drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE" );
+      int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE" );
 		if ( drawPrior == 999 && draw == false )
-			expRequest ("MAP_COASTLINE") = "OFF";
+         coastRequest ("MAP_COASTLINE") = "OFF";
 		else
 			draw = true;
 	}
@@ -380,88 +321,19 @@ MagicsGraphicsEngine::DrawCoastlinesBack( MvRequest& viewRequest )
 	// Draw Coastline on the background
 	if ( draw )
 	{
-		// Unset other drawings
-		expRequest ("MAP_GRID") = "OFF";
-		expRequest ("MAP_LABEL") = "OFF";
-		this->Draw ( expRequest );
-	}
-}
-
-// If both Coastlines and Sea/Land Shade have been selected to be drawn,
-// the PCOAST request has to be send twice, otherwise the Coastlines will
-// not be drawed (Magics restriction).
-// The PCOAST request must be called at least once to draw the Grid and Label
-// (if both options are OFF, it will be a dummy call to Magics)
-void
-MagicsGraphicsEngine::DrawCoastlinesFront( MvRequest& viewRequest )
-{
-	int drawPrior;
-	MvRequest finalRequest;
-
-	bool draw   = false;
-	Cached ON   = "ON";
-	Cached LAST = "LAST";
-	DrawingPriority& tmpDrawingPriority = owner_.GetDrawPriority (); // Get from Page
-
-    // Retrieve the coastlines Request. Call the magics translator
-    // to translate METVIEW calls into MAGICS calls. Expand request
-    MagicsTranslator& mt = MagicsTranslator::Find ( "COASTLINES" );
-    MvRequest coastRequest = mt.Execute ( viewRequest );
-    MvRequest expRequest = ObjectList::ExpandRequest ( coastRequest, EXPAND_DEFAULTS  );
-
-	// Account for land-sea shading and for the drawing order
-	// Check if Coastline Land Shade is to be drawn on the foreground
-	Cached landShade = expRequest ( "MAP_COASTLINE_LAND_SHADE" );
-	if ( landShade == ON )
-	{
-		drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_LAND_SHADE" );
-		if ( drawPrior == 999 )
-			draw = true;
-		else
-			expRequest ("MAP_COASTLINE_LAND_SHADE") = "OFF";
-	}
+      // By default Boundaries, Cities and Rivers are plotted in the Foreground.
+      coastRequest ("MAP_BOUNDARIES") = "OFF";
+      coastRequest ("MAP_CITIES") = "OFF";
+      coastRequest ("MAP_RIVERS") = "OFF";
 
-	// Check if Coastline Sea Shade is to be drawn on the foreground
-	Cached seaShade = expRequest ( "MAP_COASTLINE_SEA_SHADE" );
-	if ( seaShade == ON )
-	{
-		drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_SEA_SHADE" );
-		if ( drawPrior == 999 )
-			draw = true;
-		else
-			expRequest ("MAP_COASTLINE_SEA_SHADE") = "OFF";
-	}
-
-	// Check if Coastline is to be drawn on the foreground
-	Cached mapCoastline = expRequest ( "MAP_COASTLINE" );
-	if ( mapCoastline == ON )
-	{
-		drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE" );
-
-		// If MAP_COASTLINE was already ploted in the background but
-		// SEA/LAND SHADE was selected, MAGICS needs that MAP_COASTLINE
-		// be set to ON.
-		// If both MAP_COASTLINE and SEA/LAND SHADE are to be drawn,
-		// Magics needs a double PCOAST
-		if ( drawPrior != 999 && draw == false )
-			expRequest ("MAP_COASTLINE") = "OFF";
-		else if ( drawPrior == 999 && draw == true )
-		{
-			// Unset other drawings and set land/sea shade request
-			finalRequest               = expRequest;
-			finalRequest ("MAP_GRID")  = "OFF";
-			finalRequest ("MAP_LABEL") = "OFF";
-
-			// Unset Sea/Land Shade
-			expRequest ("MAP_COASTLINE_LAND_SHADE") = "OFF";
-			expRequest ("MAP_COASTLINE_SEA_SHADE")  = "OFF";
-		}
+		// Unset other drawings
+      coastRequest ("MAP_GRID") = "OFF";
+      coastRequest ("MAP_LABEL") = "OFF";
+      this->Draw ( coastRequest );
 	}
-
-	// Draw Coastline and/or other options (Grid,Label,...) on the foreground
-	finalRequest += expRequest;
-	this->Draw ( finalRequest );
+   #endif
 }
+#endif
 
 #if 0
 void
@@ -538,10 +410,10 @@ MagicsGraphicsEngine::EndPicture ()
                     req1.setVerb("SUPERPAGE");
                     Presentable* sp = owner_.FindSuperPage();
                     SuperPage *sp1 = (SuperPage*)(owner_.FindSuperPage ( ));
-                    superpageRequest_ = superpageRequest_ + req1;
+                    superpageRequest_ += req1;
                }
                else
-                    fullRequest_ = fullRequest_ + req1;
+                    fullRequest_ += req1;
 
                serviceRequest_.advance();
           }
@@ -576,9 +448,6 @@ MagicsGraphicsEngine::DrawPageHeader ( Canvas& canvas )
 void
 MagicsGraphicsEngine::DrawTrailer ( Canvas& canvas ) //CHECK IF THIS IS STILL NEEDED
 {
-cout << "MagicsGraphicsEngine::EndPictureCCCCCCCCCCCCCCCCCCCCC" << endl;
-fullRequest_.print();
-
         // Call MAGICS to process the request
         MagPlusService::Instance().SetRequest ( fullRequest_ );
 
@@ -604,19 +473,6 @@ MagicsGraphicsEngine::DrawTrailer ( MvRequest& fullReq )
         fullReq += fullRequest_;
 }
 
-void
-MagicsGraphicsEngine::DrawAxis( MvRequest& viewRequest )
-{
-	// Retrieve the axis Request
-	// Call the magics translator to translate METVIEW calls
-	// into MAGICS call
-	MagicsTranslator& mt = MagicsTranslator::Find ( "PAXIS" );
-	MvRequest axisRequest = mt.Execute ( viewRequest );
-
-	// Draw the axis
-	this->Draw ( axisRequest );
-}
-
 double
 MagicsGraphicsEngine::ComputeAspectRatio( Canvas& canvas, MvRequest& req )
 {
@@ -662,7 +518,7 @@ MagicsGraphicsEngine::TranslateRequest( MvIconList& iList, MvRequest& req )
      {
           MvRequest idef = (*( iCursor )).Request();
           MagicsTranslator& mt2 = MagicsTranslator::Find ( idef.getVerb() );
-          req = req + mt2.Execute ( idef );
+          req += mt2.Execute ( idef );
      }
 }
 
diff --git a/src/uPlot/MagicsGraphicsEngine.h b/src/uPlot/MagicsGraphicsEngine.h
index 6f5013e..b3b6df0 100644
--- a/src/uPlot/MagicsGraphicsEngine.h
+++ b/src/uPlot/MagicsGraphicsEngine.h
@@ -104,19 +104,7 @@ public:
 	virtual void DrawDataUnit (MvIcon&, MvRequest&, MvIcon& );
 
 	virtual void DrawNewPage ( MvRequest& );
-//D	virtual void DrawFrame   ( Canvas&, MvRequest& );
-//	virtual void DrawExternalFrame ( Canvas&, MvRequest& );
-	virtual void DrawText ( MvRequest& );
-	virtual void DrawLegend ( MvRequest& );
-
-	virtual void Draw ( const MvRequest& );
-
-//	virtual void DrawCoastlines      ( Canvas&, MvRequest& );
-
-	virtual void DrawCoastlinesBack ( MvRequest& );
-	virtual void DrawCoastlinesFront ( MvRequest& );
-
-	virtual void DrawAxis ( MvRequest& );
+	virtual void Draw ( const MvRequest&, bool=false );
 
 	virtual void DrawProlog ( );
 	virtual void DrawPageHeader ( Canvas& );
diff --git a/src/uPlot/MagicsTranslator.cc b/src/uPlot/MagicsTranslator.cc
index 33d4fe3..0745edf 100644
--- a/src/uPlot/MagicsTranslator.cc
+++ b/src/uPlot/MagicsTranslator.cc
@@ -18,8 +18,15 @@
 //
 // Singleton objects for each class
 AxisTranslator         axisTranslatorInstance    ( "PAXIS" );
-BufrTranslator         bufrTranslatorInstance	 ( "BUFR" );
-CoastTranslator        coastTranslatorInstance	 ( "COASTLINES" );
+BufrTranslator         bufrTranslatorInstance    ( "BUFR" );
+CoastTranslator        coast1TranslatorInstance  ( "PCOAST" );
+//CoastTranslator        coast2TranslatorInstance  ( "GEO_COASTLINE" );
+//CoastTranslator        coast3TranslatorInstance  ( "GEO_LAND_SHADE" );
+//CoastTranslator        coast4TranslatorInstance  ( "GEO_SEA_SHADE" );
+//CoastTranslator        coast5TranslatorInstance  ( "GEO_BOUNDARIES" );
+//CoastTranslator        coast6TranslatorInstance  ( "GEO_CITIES" );
+//CoastTranslator        coast7TranslatorInstance  ( "GEO_RIVERS" );
+//CoastTranslator        coast8TranslatorInstance  ( "GEO_GRID" );
 ContTranslator         contTranslatorInstance    ( "PCONT" );
 GeopointsTranslator    geopTranslatorInstance    ( "GEOPOINTS" );
 GraphTranslator        graphTranslatorInstance   ( "PGRAPH" );
@@ -34,6 +41,7 @@ ObsTranslator          obsTranslatorInstance     ( "POBS" );
 PageTranslator         pageTranslatorInstance    ( "PAGE" );
 SymbolTranslator       symbolTranslatorInstance  ( "PSYMB" );
 TextTranslator         textTranslatorInstance	 ( "PTEXT" );
+TextTranslator         mtextTranslatorInstance   ( "MTEXT" );
 VoidTranslator         input1TranslatorInstance  ( "INPUT_HISTOGRAM" );
 VoidTranslator         input2TranslatorInstance  ( "INPUT_XY_POINTS" );
 VoidTranslator         input3TranslatorInstance  ( "INPUT_GEO_POINTS" );
@@ -45,10 +53,10 @@ VoidTranslator         input8TranslatorInstance  ( "INPUT_XY_BOXES" );
 VoidTranslator         input9TranslatorInstance  ( "INPUT_GEO_BOXES" );
 VoidTranslator         input10TranslatorInstance ( "INPUT_HOR_BAR" );
 VoidTranslator         input11TranslatorInstance ( "INPUT_VER_BAR" );
+VoidTranslator         mcoastTranslatorInstance  ( "MCOAST" );
 VoidTranslator         mcontTranslatorInstance   ( "MCONT" );
 VoidTranslator         mgraphTranslatorInstance  ( "MGRAPH" );
 VoidTranslator         mlegendTranslatorInstance ( "MLEGEND" );
-VoidTranslator         mtextTranslatorInstance   ( "MTEXT" );
 VoidTranslator         msymbolTranslatorInstance ( "MSYMB" );
 VoidTranslator         mwindTranslatorInstance   ( "MWIND" );
 VoidTranslator         odbGeoPTranslatorInstance ( "ODB_GEO_POINTS" );
@@ -74,6 +82,7 @@ VoidTranslator         table11TranslatorInstance ( "TABLE_VER_BAR" );
 WindTranslator         windTranslatorInstance    ( "PWIND" );
 
 #if 0
+//GeoLayersTranslator    geolTranslatorInstance    ( "GEOLAYERS" );
 ImageTranslator   imageTranslatorInstance ( "IMAGE"  );
 FrameTranslator   frameTranslatorInstance ( "FRAME"  );
 CurveTranslator   curvTranslatorInstance  ( "CURVE"  );
@@ -278,12 +287,34 @@ ObsTranslator::Execute ( const MvRequest& mapviewRequest )
 MvRequest
 CoastTranslator::Execute ( const MvRequest& mapviewRequest )
 {
-	// Retrieve the coastlines Request
-	MvRequest magicsRequest = mapviewRequest.getSubrequest ("COASTLINES");
+//MvRequest magicsRequest = mapviewRequest.getSubrequest ("COASTLINES");
 
-	magicsRequest.setVerb("MCOAST");
-	
-	return magicsRequest;
+   // Replace verb
+   const char* verb = mapviewRequest.getVerb();
+   MvRequest magicsRequest = mapviewRequest;
+   magicsRequest.setVerb("MCOAST");
+
+   // Keep backwards compatibility
+   if  ( strcmp ( verb, "PCOAST" ) == 0 )
+      return magicsRequest;
+
+#if 0
+   // Since Coast and Grid are set to ON by default, switch them to OFF according
+   // to the relevant Geo action. This will avoid them to be drawn several times.
+
+   //IMPORTANTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT!!!!!!!!!!!!!
+   // SWITCH BACK TO OFF BEFORE SUBMITING.
+   // IT IS ON BECAUSE MAGICS DOES NOT PLOT IT CORRECTTLY
+   if ( strcmp ( verb, "GEO_COASTLINE" ) != 0 )
+      magicsRequest("MAP_COASTLINE") = "on"; //"OFF";
+
+   if ( strcmp ( verb, "GEO_GRID" ) != 0 )
+   {
+      magicsRequest("MAP_GRID")      = "OFF";
+      magicsRequest("MAP_LABEL")     = "OFF";
+   }
+#endif
+   return magicsRequest;
 }
 
 //=================================================================
@@ -391,11 +422,10 @@ PageTranslator::Execute ( const MvRequest& viewRequest )
 	}
 
 	// Temporary solution to draw cartesian view
-	if (projection != 0 && strcmp(projection,"cartesian") == 0)
+	if (projection != 0 && (strcmp(projection,"cartesian") == 0 || strcmp(projection,"tephigram") == 0 ||  strcmp(projection,"taylor") == 0) )
 	{
 		// Add a new request related to the VIEW
 		magicsRequest("SUBPAGE_MAP_PROJECTION") = "NEXT";
-		metviewRequest.unsetParam("MAP_PROJECTION");
 		RemoveParameters(metviewRequest,"PAGE");
 		RemoveParameters(metviewRequest,"SUBPAGE");
 		magicsRequest = magicsRequest + metviewRequest;
@@ -448,7 +478,7 @@ PageTranslator::Execute ( const MvRequest& viewRequest )
 //	if ( (const char*)metviewRequest("MAP_OVERLAY_CONTROL") )
 //		magicsRequest("SUBPAGE_OVERLAY_CONTROL") = (const char*)metviewRequest("MAP_OVERLAY_CONTROL");
 
-	return magicsRequest;
+   return magicsRequest;
 }
 
 //=================================================================
@@ -458,10 +488,22 @@ PageTranslator::Execute ( const MvRequest& viewRequest )
 MvRequest
 TextTranslator::Execute ( const MvRequest& textsRequest )
 {
-	MvRequest magicsRequest = textsRequest ;
-	ensure ( magicsRequest.getVerb() == Cached ( "PTEXT" ) );
-	
-	return magicsRequest;
+   MvRequest magicsRequest = textsRequest;
+
+   // Set text box coordinates explicitely. If these coordinates are not defined,
+   // Magics will compute them by using an internal scheme. To guarantee that Magics
+   // will use the Metview default values, these coordinates need to be added to the
+   // request.
+   if ( (const char*)magicsRequest("TEXT_MODE") && strcmp((const char*)magicsRequest("TEXT_MODE"),"POSITIONAL") == 0 )
+   {
+      MvRequest expRequest = ObjectList::ExpandRequest ( magicsRequest,EXPAND_DEFAULTS );
+      magicsRequest("TEXT_BOX_X_POSITION") = expRequest("TEXT_BOX_X_POSITION");
+      magicsRequest("TEXT_BOX_Y_POSITION") = expRequest("TEXT_BOX_Y_POSITION");
+      magicsRequest("TEXT_BOX_X_LENGTH")   = expRequest("TEXT_BOX_X_LENGTH");
+      magicsRequest("TEXT_BOX_Y_LENGTH")   = expRequest("TEXT_BOX_Y_LENGTH");
+   }
+
+   return magicsRequest;
 }
 
 MvRequest
diff --git a/src/uPlot/MagicsTranslator.h b/src/uPlot/MagicsTranslator.h
index 33306ac..9f982b9 100644
--- a/src/uPlot/MagicsTranslator.h
+++ b/src/uPlot/MagicsTranslator.h
@@ -156,7 +156,7 @@ public:
 		{ return MvRequest("EMPTY"); }
 };
 
-class ContTranslator : public MagicsTranslator 
+class ContTranslator : public MagicsTranslator
 {
 public:
 
@@ -418,21 +418,21 @@ public:
 };
 #endif
 
-class GeopointsTranslator : public MagicsTranslator 
+class GeopointsTranslator : public MagicsTranslator
 {
 public:
 
-	// Contructors
-	GeopointsTranslator(const Cached& actionName ):
-		MagicsTranslator ( actionName ){}
-  
-	// Destructor
-	~GeopointsTranslator() {}
-  
-        virtual MvRequest Execute ( const MvRequest& )
-            { return MvRequest("EMPTY");; }
+   // Contructors
+   GeopointsTranslator(const Cached& actionName ):
+            MagicsTranslator ( actionName ){}
+
+   // Destructor
+   ~GeopointsTranslator() {}
 
-	virtual MvRequest Execute ( const MvRequest& req, const MvRequest&, MvRequest& );
+   virtual MvRequest Execute ( const MvRequest& )
+            { return MvRequest("EMPTY"); }
+
+   virtual MvRequest Execute ( const MvRequest&, const MvRequest&, MvRequest& );
 };
 
 class SymbolTranslator : public MagicsTranslator
diff --git a/src/uPlot/Makefile.am b/src/uPlot/Makefile.am
index 17eb315..353e49f 100755
--- a/src/uPlot/Makefile.am
+++ b/src/uPlot/Makefile.am
@@ -12,12 +12,13 @@ endif
 
 #-------- uPLOT COMMON SOURCES--------------------------------------------------
 
-uPlot_COMMON_SOURCES = AverageView.cc BufrDecoder.cc \
+uPlot_COMMON_SOURCES = AnnotationView.cc AverageView.cc BufrDecoder.cc \
 	   Canvas.cc CartesianView.cc CommonXSectView.cc \
            CreateAction.cc CreateTypeAction.cc \
 	   DataBuilder.cc DataObject.cc Decoder.cc Device.cc \
 	   DrawingPriority.cc DropAction.cc \
-	   GeopointsDecoder.cc GraphicsEngine.cc GribDecoder.cc Location.cc \
+	   GeopointsDecoder.cc GraphicsEngine.cc GribDecoder.cc \
+           HovmoellerView.cc Location.cc \
 	   MvLayer.cc MacroConverter.cc MacroVisitor.cc \
 	   MagicsGraphicsEngine.cc MagicsTranslator.cc \
 	   MagPlusService.cc MapView.cc MatchingCriteria.cc MatchingInfo.cc \
@@ -31,12 +32,13 @@ uPlot_COMMON_SOURCES = AverageView.cc BufrDecoder.cc \
 	   Root.cc \
 	   SatelliteProjection.cc SimpleDecoder.cc SkipAction.cc SubPage.cc SuperPage.cc \
 	   Task.cc VertProfView.cc XDevice.cc XSectView.cc ZoomStacks.cc \
-	   AverageView.h BufrDecoder.h \
+           AnnotationView.h AverageView.h BufrDecoder.h \
 	   Canvas.h CartesianView.h CommonXSectView.h \
            Counted.h CreateAction.h CreateTypeAction.h \
 	   DataBuilder.h DataObject.h Decoder.h Device.h \
 	   DeviceData.h DrawingPriority.h DropAction.h \
-	   GeopointsDecoder.h GraphicsEngine.h GribDecoder.h Location.h \
+	   GeopointsDecoder.h GraphicsEngine.h GribDecoder.h \
+           HovmoellerView.h Location.h \
            MvLayer.h MacroConverter.h MacroVisitor.h \
 	   MagPlusService.h MagicsGraphicsEngine.h MagicsTranslator.h MapView.h \
 	   MatchingCriteria.h MatchingInfo.h MvIcon.h MvIconDataBase.h \
@@ -124,9 +126,9 @@ nodist_bin_uPlot_SOURCES = ${uPlot_COMMON_QT_SOURCES_nodist} ${uPlot_COMMON_UI_S
                            uPlot.moc.cpp
 
 
-bin_uPlot_CPPFLAGS =  -I../libMvQtGui -I../libMvQtUtil $(MAGPLUS_CPPFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS)
+bin_uPlot_CPPFLAGS =  -I../libMvQtGui -I../libMvQtUtil $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS)
 bin_uPlot_LDFLAGS  =  $(QT_LDFLAGS) -L../../lib $(MAGPLUS_LDFLAGS) $(LDFLAGS) $(ODB_LDFLAGS)
-bin_uPlot_LDADD    = $(LDADD)  $(MAGPLUS_LIB) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS)  $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
+bin_uPlot_LDADD    = $(LDADD)  $(MAGPLUS_LIB) $(MAGPLUS_LIB_QT) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS)  $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
 bin_uPlot_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
 AM_LDFLAGS = $(QT_LDFLAGS)
 # AM_LDFLAGS is placed before $(LDFLAGS) when linking
@@ -150,9 +152,9 @@ bin_uPlotBatch_SOURCES  = MvMainuPlotBatch.cc \
 # we will need the flags in order to have a correct compilation. If Magics++ has been built without
 # Qt, then these flags should be empty, so no harm done.
 
-bin_uPlotBatch_CPPFLAGS =  $(MAGPLUS_CPPFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS) -DNOMETVIEW_QT
+bin_uPlotBatch_CPPFLAGS =  $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS) -DNOMETVIEW_QT
 bin_uPlotBatch_LDFLAGS  = $(QT_LDFLAGS) -L../../lib $(MAGPLUS_LDFLAGS) $(LDFLAGS) $(ODB_LDFLAGS)
-bin_uPlotBatch_LDADD    = $(LDADD)  $(MAGPLUS_LIB) $(STANDARD_METVIEW_LIBS) $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
+bin_uPlotBatch_LDADD    = $(LDADD)  $(MAGPLUS_LIB) $(MAGPLUS_LIB_QT) $(STANDARD_METVIEW_LIBS) $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
 bin_uPlotBatch_DEPENDENCIES = ../../lib/libUtil.a ../../lib/libMetview.a
 
 
@@ -170,9 +172,9 @@ nodist_bin_GeoTool_SOURCES = ${uPlot_COMMON_QT_SOURCES_nodist} ${uPlot_COMMON_UI
                              GeoTool.moc.cpp geoSelect.qrc.cpp
 
 
-bin_GeoTool_CPPFLAGS = -I../libMvQtGui -I../libMvQtUtil  $(MAGPLUS_CPPFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS)
+bin_GeoTool_CPPFLAGS = -I../libMvQtGui -I../libMvQtUtil  $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS)
 bin_GeoTool_LDFLAGS  = $(QT_LDFLAGS) -L../../lib $(MAGPLUS_LDFLAGS) $(QT_LDFLAGS) $(LDFLAGS) $(ODB_LDFLAGS)
-bin_GeoTool_LDADD    = $(LDADD)  $(MAGPLUS_LIB) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
+bin_GeoTool_LDADD    = $(LDADD)  $(MAGPLUS_LIB) $(MAGPLUS_LIB_QT) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
 bin_GeoTool_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
 
 bin_GeoToolManager_SOURCES  = GeoToolManager.cc GeoToolManager.h
diff --git a/src/uPlot/Makefile.in b/src/uPlot/Makefile.in
index 484ab7b..8cb9aaa 100644
--- a/src/uPlot/Makefile.in
+++ b/src/uPlot/Makefile.in
@@ -102,7 +102,8 @@ CONFIG_CLEAN_VPATH_FILES =
 @METVIEW_QT_TRUE@	bin/GeoToolManager$(EXEEXT)
 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sharedir)"
 PROGRAMS = $(bin_PROGRAMS)
-am__objects_1 = bin_GeoTool-AverageView.$(OBJEXT) \
+am__objects_1 = bin_GeoTool-AnnotationView.$(OBJEXT) \
+	bin_GeoTool-AverageView.$(OBJEXT) \
 	bin_GeoTool-BufrDecoder.$(OBJEXT) bin_GeoTool-Canvas.$(OBJEXT) \
 	bin_GeoTool-CartesianView.$(OBJEXT) \
 	bin_GeoTool-CommonXSectView.$(OBJEXT) \
@@ -116,6 +117,7 @@ am__objects_1 = bin_GeoTool-AverageView.$(OBJEXT) \
 	bin_GeoTool-GeopointsDecoder.$(OBJEXT) \
 	bin_GeoTool-GraphicsEngine.$(OBJEXT) \
 	bin_GeoTool-GribDecoder.$(OBJEXT) \
+	bin_GeoTool-HovmoellerView.$(OBJEXT) \
 	bin_GeoTool-Location.$(OBJEXT) bin_GeoTool-MvLayer.$(OBJEXT) \
 	bin_GeoTool-MacroConverter.$(OBJEXT) \
 	bin_GeoTool-MacroVisitor.$(OBJEXT) \
@@ -232,7 +234,8 @@ bin_GeoToolManager_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
 	$(AM_CXXFLAGS) $(CXXFLAGS) $(bin_GeoToolManager_LDFLAGS) \
 	$(LDFLAGS) -o $@
-am__objects_6 = bin_uPlot-AverageView.$(OBJEXT) \
+am__objects_6 = bin_uPlot-AnnotationView.$(OBJEXT) \
+	bin_uPlot-AverageView.$(OBJEXT) \
 	bin_uPlot-BufrDecoder.$(OBJEXT) bin_uPlot-Canvas.$(OBJEXT) \
 	bin_uPlot-CartesianView.$(OBJEXT) \
 	bin_uPlot-CommonXSectView.$(OBJEXT) \
@@ -244,8 +247,10 @@ am__objects_6 = bin_uPlot-AverageView.$(OBJEXT) \
 	bin_uPlot-DropAction.$(OBJEXT) \
 	bin_uPlot-GeopointsDecoder.$(OBJEXT) \
 	bin_uPlot-GraphicsEngine.$(OBJEXT) \
-	bin_uPlot-GribDecoder.$(OBJEXT) bin_uPlot-Location.$(OBJEXT) \
-	bin_uPlot-MvLayer.$(OBJEXT) bin_uPlot-MacroConverter.$(OBJEXT) \
+	bin_uPlot-GribDecoder.$(OBJEXT) \
+	bin_uPlot-HovmoellerView.$(OBJEXT) \
+	bin_uPlot-Location.$(OBJEXT) bin_uPlot-MvLayer.$(OBJEXT) \
+	bin_uPlot-MacroConverter.$(OBJEXT) \
 	bin_uPlot-MacroVisitor.$(OBJEXT) \
 	bin_uPlot-MagicsGraphicsEngine.$(OBJEXT) \
 	bin_uPlot-MagicsTranslator.$(OBJEXT) \
@@ -339,7 +344,8 @@ bin_uPlot_OBJECTS = $(am_bin_uPlot_OBJECTS) \
 bin_uPlot_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
 	$(CXXFLAGS) $(bin_uPlot_LDFLAGS) $(LDFLAGS) -o $@
-am__objects_11 = bin_uPlotBatch-AverageView.$(OBJEXT) \
+am__objects_11 = bin_uPlotBatch-AnnotationView.$(OBJEXT) \
+	bin_uPlotBatch-AverageView.$(OBJEXT) \
 	bin_uPlotBatch-BufrDecoder.$(OBJEXT) \
 	bin_uPlotBatch-Canvas.$(OBJEXT) \
 	bin_uPlotBatch-CartesianView.$(OBJEXT) \
@@ -355,6 +361,7 @@ am__objects_11 = bin_uPlotBatch-AverageView.$(OBJEXT) \
 	bin_uPlotBatch-GeopointsDecoder.$(OBJEXT) \
 	bin_uPlotBatch-GraphicsEngine.$(OBJEXT) \
 	bin_uPlotBatch-GribDecoder.$(OBJEXT) \
+	bin_uPlotBatch-HovmoellerView.$(OBJEXT) \
 	bin_uPlotBatch-Location.$(OBJEXT) \
 	bin_uPlotBatch-MvLayer.$(OBJEXT) \
 	bin_uPlotBatch-MacroConverter.$(OBJEXT) \
@@ -516,6 +523,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -531,6 +539,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -557,11 +567,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -698,12 +711,13 @@ SUFFIXES = .moc.cpp .moc.cc .moc.cxx .moc.C .h .hh .hpp \
 DISTCLEANFILES = $(BUILT_SOURCES)
 
 #-------- uPLOT COMMON SOURCES--------------------------------------------------
-uPlot_COMMON_SOURCES = AverageView.cc BufrDecoder.cc \
+uPlot_COMMON_SOURCES = AnnotationView.cc AverageView.cc BufrDecoder.cc \
 	   Canvas.cc CartesianView.cc CommonXSectView.cc \
            CreateAction.cc CreateTypeAction.cc \
 	   DataBuilder.cc DataObject.cc Decoder.cc Device.cc \
 	   DrawingPriority.cc DropAction.cc \
-	   GeopointsDecoder.cc GraphicsEngine.cc GribDecoder.cc Location.cc \
+	   GeopointsDecoder.cc GraphicsEngine.cc GribDecoder.cc \
+           HovmoellerView.cc Location.cc \
 	   MvLayer.cc MacroConverter.cc MacroVisitor.cc \
 	   MagicsGraphicsEngine.cc MagicsTranslator.cc \
 	   MagPlusService.cc MapView.cc MatchingCriteria.cc MatchingInfo.cc \
@@ -717,12 +731,13 @@ uPlot_COMMON_SOURCES = AverageView.cc BufrDecoder.cc \
 	   Root.cc \
 	   SatelliteProjection.cc SimpleDecoder.cc SkipAction.cc SubPage.cc SuperPage.cc \
 	   Task.cc VertProfView.cc XDevice.cc XSectView.cc ZoomStacks.cc \
-	   AverageView.h BufrDecoder.h \
+           AnnotationView.h AverageView.h BufrDecoder.h \
 	   Canvas.h CartesianView.h CommonXSectView.h \
            Counted.h CreateAction.h CreateTypeAction.h \
 	   DataBuilder.h DataObject.h Decoder.h Device.h \
 	   DeviceData.h DrawingPriority.h DropAction.h \
-	   GeopointsDecoder.h GraphicsEngine.h GribDecoder.h Location.h \
+	   GeopointsDecoder.h GraphicsEngine.h GribDecoder.h \
+           HovmoellerView.h Location.h \
            MvLayer.h MacroConverter.h MacroVisitor.h \
 	   MagPlusService.h MagicsGraphicsEngine.h MagicsTranslator.h MapView.h \
 	   MatchingCriteria.h MatchingInfo.h MvIcon.h MvIconDataBase.h \
@@ -805,9 +820,9 @@ bin_uPlot_SOURCES = MvMain.cc \
 nodist_bin_uPlot_SOURCES = ${uPlot_COMMON_QT_SOURCES_nodist} ${uPlot_COMMON_UI_SOURCES_nodist} \
                            uPlot.moc.cpp
 
-bin_uPlot_CPPFLAGS = -I../libMvQtGui -I../libMvQtUtil $(MAGPLUS_CPPFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS)
+bin_uPlot_CPPFLAGS = -I../libMvQtGui -I../libMvQtUtil $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS)
 bin_uPlot_LDFLAGS = $(QT_LDFLAGS) -L../../lib $(MAGPLUS_LDFLAGS) $(LDFLAGS) $(ODB_LDFLAGS)
-bin_uPlot_LDADD = $(LDADD)  $(MAGPLUS_LIB) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS)  $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
+bin_uPlot_LDADD = $(LDADD)  $(MAGPLUS_LIB) $(MAGPLUS_LIB_QT) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS)  $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
 bin_uPlot_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
 AM_LDFLAGS = $(QT_LDFLAGS)
 # AM_LDFLAGS is placed before $(LDFLAGS) when linking
@@ -828,9 +843,9 @@ bin_uPlotBatch_SOURCES = MvMainuPlotBatch.cc \
 # no dependencies on Qt, it still uses Magics++, and if that has been built with Qt support, then
 # we will need the flags in order to have a correct compilation. If Magics++ has been built without
 # Qt, then these flags should be empty, so no harm done.
-bin_uPlotBatch_CPPFLAGS = $(MAGPLUS_CPPFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS) -DNOMETVIEW_QT
+bin_uPlotBatch_CPPFLAGS = $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS) -DNOMETVIEW_QT
 bin_uPlotBatch_LDFLAGS = $(QT_LDFLAGS) -L../../lib $(MAGPLUS_LDFLAGS) $(LDFLAGS) $(ODB_LDFLAGS)
-bin_uPlotBatch_LDADD = $(LDADD)  $(MAGPLUS_LIB) $(STANDARD_METVIEW_LIBS) $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
+bin_uPlotBatch_LDADD = $(LDADD)  $(MAGPLUS_LIB) $(MAGPLUS_LIB_QT) $(STANDARD_METVIEW_LIBS) $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
 bin_uPlotBatch_DEPENDENCIES = ../../lib/libUtil.a ../../lib/libMetview.a
 
 #-------- GeoTool ---------------------------------------------------------------
@@ -845,9 +860,9 @@ bin_GeoTool_SOURCES = MvMainGeoTool.cc \
 nodist_bin_GeoTool_SOURCES = ${uPlot_COMMON_QT_SOURCES_nodist} ${uPlot_COMMON_UI_SOURCES_nodist} \
                              GeoTool.moc.cpp geoSelect.qrc.cpp
 
-bin_GeoTool_CPPFLAGS = -I../libMvQtGui -I../libMvQtUtil  $(MAGPLUS_CPPFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS)
+bin_GeoTool_CPPFLAGS = -I../libMvQtGui -I../libMvQtUtil  $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS)
 bin_GeoTool_LDFLAGS = $(QT_LDFLAGS) -L../../lib $(MAGPLUS_LDFLAGS) $(QT_LDFLAGS) $(LDFLAGS) $(ODB_LDFLAGS)
-bin_GeoTool_LDADD = $(LDADD)  $(MAGPLUS_LIB) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
+bin_GeoTool_LDADD = $(LDADD)  $(MAGPLUS_LIB) $(MAGPLUS_LIB_QT) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
 bin_GeoTool_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
 bin_GeoToolManager_SOURCES = GeoToolManager.cc GeoToolManager.h
 bin_GeoToolManager_CPPFLAGS = $(AM_CPPFLAGS)
@@ -968,6 +983,7 @@ mostlyclean-compile:
 distclean-compile:
 	-rm -f *.tab.c
 
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoTool-AnnotationView.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoTool-AverageView.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoTool-BufrDecoder.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoTool-Canvas.Po at am__quote@
@@ -989,6 +1005,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoTool-GeopointsDecoder.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoTool-GraphicsEngine.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoTool-GribDecoder.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoTool-HovmoellerView.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoTool-Location.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoTool-MacroConverter.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoTool-MacroVisitor.Po at am__quote@
@@ -1087,6 +1104,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoTool-uPlotBase.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoTool-uPlotBase.moc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_GeoToolManager-GeoToolManager.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-AnnotationView.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-AverageView.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-BufrDecoder.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-Canvas.Po at am__quote@
@@ -1106,6 +1124,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-GeopointsDecoder.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-GraphicsEngine.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-GribDecoder.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-HovmoellerView.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-Location.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-MacroConverter.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-MacroVisitor.Po at am__quote@
@@ -1204,6 +1223,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-uPlotApp.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-uPlotBase.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-uPlotBase.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlotBatch-AnnotationView.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlotBatch-AverageView.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlotBatch-BufrDecoder.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlotBatch-Canvas.Po at am__quote@
@@ -1221,6 +1241,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlotBatch-GeopointsDecoder.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlotBatch-GraphicsEngine.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlotBatch-GribDecoder.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlotBatch-HovmoellerView.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlotBatch-Location.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlotBatch-MacroConverter.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlotBatch-MacroVisitor.Po at am__quote@
@@ -1310,6 +1331,22 @@ bin_GeoTool-MvMainGeoTool.obj: MvMainGeoTool.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_GeoTool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_GeoTool-MvMainGeoTool.obj `if test -f 'MvMainGeoTool.cc'; then $(CYGPATH_W) 'MvMainGeoTool.cc'; else $(CYGPATH_W) '$(srcdir)/MvMainGeoTool.cc'; fi`
 
+bin_GeoTool-AnnotationView.o: AnnotationView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_GeoTool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_GeoTool-AnnotationView.o -MD -MP -MF $(DEPDIR)/bin_GeoTool-AnnotationView.Tpo -c -o bin_GeoTool-AnnotationView.o `test -f 'AnnotationView.cc' || echo '$(srcdir)/'`AnnotationView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_GeoTool-AnnotationView.Tpo $(DEPDIR)/bin_GeoTool-AnnotationView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='AnnotationView.cc' object='bin_GeoTool-AnnotationView.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_GeoTool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_GeoTool-AnnotationView.o `test -f 'AnnotationView.cc' || echo '$(srcdir)/'`AnnotationView.cc
+
+bin_GeoTool-AnnotationView.obj: AnnotationView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_GeoTool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_GeoTool-AnnotationView.obj -MD -MP -MF $(DEPDIR)/bin_GeoTool-AnnotationView.Tpo -c -o bin_GeoTool-AnnotationView.obj `if test -f 'AnnotationView.cc'; then $(CYGPATH_W) 'AnnotationView.cc'; else $(CYGPATH_W) '$(srcdir)/AnnotationView.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_GeoTool-AnnotationView.Tpo $(DEPDIR)/bin_GeoTool-AnnotationView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='AnnotationView.cc' object='bin_GeoTool-AnnotationView.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_GeoTool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_GeoTool-AnnotationView.obj `if test -f 'AnnotationView.cc'; then $(CYGPATH_W) 'AnnotationView.cc'; else $(CYGPATH_W) '$(srcdir)/AnnotationView.cc'; fi`
+
 bin_GeoTool-AverageView.o: AverageView.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_GeoTool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_GeoTool-AverageView.o -MD -MP -MF $(DEPDIR)/bin_GeoTool-AverageView.Tpo -c -o bin_GeoTool-AverageView.o `test -f 'AverageView.cc' || echo '$(srcdir)/'`AverageView.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_GeoTool-AverageView.Tpo $(DEPDIR)/bin_GeoTool-AverageView.Po
@@ -1566,6 +1603,22 @@ bin_GeoTool-GribDecoder.obj: GribDecoder.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_GeoTool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_GeoTool-GribDecoder.obj `if test -f 'GribDecoder.cc'; then $(CYGPATH_W) 'GribDecoder.cc'; else $(CYGPATH_W) '$(srcdir)/GribDecoder.cc'; fi`
 
+bin_GeoTool-HovmoellerView.o: HovmoellerView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_GeoTool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_GeoTool-HovmoellerView.o -MD -MP -MF $(DEPDIR)/bin_GeoTool-HovmoellerView.Tpo -c -o bin_GeoTool-HovmoellerView.o `test -f 'HovmoellerView.cc' || echo '$(srcdir)/'`HovmoellerView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_GeoTool-HovmoellerView.Tpo $(DEPDIR)/bin_GeoTool-HovmoellerView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovmoellerView.cc' object='bin_GeoTool-HovmoellerView.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_GeoTool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_GeoTool-HovmoellerView.o `test -f 'HovmoellerView.cc' || echo '$(srcdir)/'`HovmoellerView.cc
+
+bin_GeoTool-HovmoellerView.obj: HovmoellerView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_GeoTool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_GeoTool-HovmoellerView.obj -MD -MP -MF $(DEPDIR)/bin_GeoTool-HovmoellerView.Tpo -c -o bin_GeoTool-HovmoellerView.obj `if test -f 'HovmoellerView.cc'; then $(CYGPATH_W) 'HovmoellerView.cc'; else $(CYGPATH_W) '$(srcdir)/HovmoellerView.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_GeoTool-HovmoellerView.Tpo $(DEPDIR)/bin_GeoTool-HovmoellerView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovmoellerView.cc' object='bin_GeoTool-HovmoellerView.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_GeoTool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_GeoTool-HovmoellerView.obj `if test -f 'HovmoellerView.cc'; then $(CYGPATH_W) 'HovmoellerView.cc'; else $(CYGPATH_W) '$(srcdir)/HovmoellerView.cc'; fi`
+
 bin_GeoTool-Location.o: Location.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_GeoTool_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_GeoTool-Location.o -MD -MP -MF $(DEPDIR)/bin_GeoTool-Location.Tpo -c -o bin_GeoTool-Location.o `test -f 'Location.cc' || echo '$(srcdir)/'`Location.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_GeoTool-Location.Tpo $(DEPDIR)/bin_GeoTool-Location.Po
@@ -3214,6 +3267,22 @@ bin_uPlot-MvMain.obj: MvMain.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlot-MvMain.obj `if test -f 'MvMain.cc'; then $(CYGPATH_W) 'MvMain.cc'; else $(CYGPATH_W) '$(srcdir)/MvMain.cc'; fi`
 
+bin_uPlot-AnnotationView.o: AnnotationView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlot-AnnotationView.o -MD -MP -MF $(DEPDIR)/bin_uPlot-AnnotationView.Tpo -c -o bin_uPlot-AnnotationView.o `test -f 'AnnotationView.cc' || echo '$(srcdir)/'`AnnotationView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlot-AnnotationView.Tpo $(DEPDIR)/bin_uPlot-AnnotationView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='AnnotationView.cc' object='bin_uPlot-AnnotationView.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlot-AnnotationView.o `test -f 'AnnotationView.cc' || echo '$(srcdir)/'`AnnotationView.cc
+
+bin_uPlot-AnnotationView.obj: AnnotationView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlot-AnnotationView.obj -MD -MP -MF $(DEPDIR)/bin_uPlot-AnnotationView.Tpo -c -o bin_uPlot-AnnotationView.obj `if test -f 'AnnotationView.cc'; then $(CYGPATH_W) 'AnnotationView.cc'; else $(CYGPATH_W) '$(srcdir)/AnnotationView.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlot-AnnotationView.Tpo $(DEPDIR)/bin_uPlot-AnnotationView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='AnnotationView.cc' object='bin_uPlot-AnnotationView.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlot-AnnotationView.obj `if test -f 'AnnotationView.cc'; then $(CYGPATH_W) 'AnnotationView.cc'; else $(CYGPATH_W) '$(srcdir)/AnnotationView.cc'; fi`
+
 bin_uPlot-AverageView.o: AverageView.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlot-AverageView.o -MD -MP -MF $(DEPDIR)/bin_uPlot-AverageView.Tpo -c -o bin_uPlot-AverageView.o `test -f 'AverageView.cc' || echo '$(srcdir)/'`AverageView.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlot-AverageView.Tpo $(DEPDIR)/bin_uPlot-AverageView.Po
@@ -3470,6 +3539,22 @@ bin_uPlot-GribDecoder.obj: GribDecoder.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlot-GribDecoder.obj `if test -f 'GribDecoder.cc'; then $(CYGPATH_W) 'GribDecoder.cc'; else $(CYGPATH_W) '$(srcdir)/GribDecoder.cc'; fi`
 
+bin_uPlot-HovmoellerView.o: HovmoellerView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlot-HovmoellerView.o -MD -MP -MF $(DEPDIR)/bin_uPlot-HovmoellerView.Tpo -c -o bin_uPlot-HovmoellerView.o `test -f 'HovmoellerView.cc' || echo '$(srcdir)/'`HovmoellerView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlot-HovmoellerView.Tpo $(DEPDIR)/bin_uPlot-HovmoellerView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovmoellerView.cc' object='bin_uPlot-HovmoellerView.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlot-HovmoellerView.o `test -f 'HovmoellerView.cc' || echo '$(srcdir)/'`HovmoellerView.cc
+
+bin_uPlot-HovmoellerView.obj: HovmoellerView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlot-HovmoellerView.obj -MD -MP -MF $(DEPDIR)/bin_uPlot-HovmoellerView.Tpo -c -o bin_uPlot-HovmoellerView.obj `if test -f 'HovmoellerView.cc'; then $(CYGPATH_W) 'HovmoellerView.cc'; else $(CYGPATH_W) '$(srcdir)/HovmoellerView.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlot-HovmoellerView.Tpo $(DEPDIR)/bin_uPlot-HovmoellerView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovmoellerView.cc' object='bin_uPlot-HovmoellerView.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlot-HovmoellerView.obj `if test -f 'HovmoellerView.cc'; then $(CYGPATH_W) 'HovmoellerView.cc'; else $(CYGPATH_W) '$(srcdir)/HovmoellerView.cc'; fi`
+
 bin_uPlot-Location.o: Location.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlot-Location.o -MD -MP -MF $(DEPDIR)/bin_uPlot-Location.Tpo -c -o bin_uPlot-Location.o `test -f 'Location.cc' || echo '$(srcdir)/'`Location.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlot-Location.Tpo $(DEPDIR)/bin_uPlot-Location.Po
@@ -5086,6 +5171,22 @@ bin_uPlotBatch-MvMainuPlotBatch.obj: MvMainuPlotBatch.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlotBatch_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlotBatch-MvMainuPlotBatch.obj `if test -f 'MvMainuPlotBatch.cc'; then $(CYGPATH_W) 'MvMainuPlotBatch.cc'; else $(CYGPATH_W) '$(srcdir)/MvMainuPlotBatch.cc'; fi`
 
+bin_uPlotBatch-AnnotationView.o: AnnotationView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlotBatch_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlotBatch-AnnotationView.o -MD -MP -MF $(DEPDIR)/bin_uPlotBatch-AnnotationView.Tpo -c -o bin_uPlotBatch-AnnotationView.o `test -f 'AnnotationView.cc' || echo '$(srcdir)/'`AnnotationView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlotBatch-AnnotationView.Tpo $(DEPDIR)/bin_uPlotBatch-AnnotationView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='AnnotationView.cc' object='bin_uPlotBatch-AnnotationView.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlotBatch_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlotBatch-AnnotationView.o `test -f 'AnnotationView.cc' || echo '$(srcdir)/'`AnnotationView.cc
+
+bin_uPlotBatch-AnnotationView.obj: AnnotationView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlotBatch_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlotBatch-AnnotationView.obj -MD -MP -MF $(DEPDIR)/bin_uPlotBatch-AnnotationView.Tpo -c -o bin_uPlotBatch-AnnotationView.obj `if test -f 'AnnotationView.cc'; then $(CYGPATH_W) 'AnnotationView.cc'; else $(CYGPATH_W) '$(srcdir)/AnnotationView.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlotBatch-AnnotationView.Tpo $(DEPDIR)/bin_uPlotBatch-AnnotationView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='AnnotationView.cc' object='bin_uPlotBatch-AnnotationView.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlotBatch_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlotBatch-AnnotationView.obj `if test -f 'AnnotationView.cc'; then $(CYGPATH_W) 'AnnotationView.cc'; else $(CYGPATH_W) '$(srcdir)/AnnotationView.cc'; fi`
+
 bin_uPlotBatch-AverageView.o: AverageView.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlotBatch_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlotBatch-AverageView.o -MD -MP -MF $(DEPDIR)/bin_uPlotBatch-AverageView.Tpo -c -o bin_uPlotBatch-AverageView.o `test -f 'AverageView.cc' || echo '$(srcdir)/'`AverageView.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlotBatch-AverageView.Tpo $(DEPDIR)/bin_uPlotBatch-AverageView.Po
@@ -5342,6 +5443,22 @@ bin_uPlotBatch-GribDecoder.obj: GribDecoder.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlotBatch_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlotBatch-GribDecoder.obj `if test -f 'GribDecoder.cc'; then $(CYGPATH_W) 'GribDecoder.cc'; else $(CYGPATH_W) '$(srcdir)/GribDecoder.cc'; fi`
 
+bin_uPlotBatch-HovmoellerView.o: HovmoellerView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlotBatch_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlotBatch-HovmoellerView.o -MD -MP -MF $(DEPDIR)/bin_uPlotBatch-HovmoellerView.Tpo -c -o bin_uPlotBatch-HovmoellerView.o `test -f 'HovmoellerView.cc' || echo '$(srcdir)/'`HovmoellerView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlotBatch-HovmoellerView.Tpo $(DEPDIR)/bin_uPlotBatch-HovmoellerView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovmoellerView.cc' object='bin_uPlotBatch-HovmoellerView.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlotBatch_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlotBatch-HovmoellerView.o `test -f 'HovmoellerView.cc' || echo '$(srcdir)/'`HovmoellerView.cc
+
+bin_uPlotBatch-HovmoellerView.obj: HovmoellerView.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlotBatch_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlotBatch-HovmoellerView.obj -MD -MP -MF $(DEPDIR)/bin_uPlotBatch-HovmoellerView.Tpo -c -o bin_uPlotBatch-HovmoellerView.obj `if test -f 'HovmoellerView.cc'; then $(CYGPATH_W) 'HovmoellerView.cc'; else $(CYGPATH_W) '$(srcdir)/HovmoellerView.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlotBatch-HovmoellerView.Tpo $(DEPDIR)/bin_uPlotBatch-HovmoellerView.Po
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HovmoellerView.cc' object='bin_uPlotBatch-HovmoellerView.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlotBatch_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlotBatch-HovmoellerView.obj `if test -f 'HovmoellerView.cc'; then $(CYGPATH_W) 'HovmoellerView.cc'; else $(CYGPATH_W) '$(srcdir)/HovmoellerView.cc'; fi`
+
 bin_uPlotBatch-Location.o: Location.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlotBatch_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlotBatch-Location.o -MD -MP -MF $(DEPDIR)/bin_uPlotBatch-Location.Tpo -c -o bin_uPlotBatch-Location.o `test -f 'Location.cc' || echo '$(srcdir)/'`Location.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlotBatch-Location.Tpo $(DEPDIR)/bin_uPlotBatch-Location.Po
diff --git a/src/uPlot/MapView.cc b/src/uPlot/MapView.cc
index ce505da..d8cab36 100644
--- a/src/uPlot/MapView.cc
+++ b/src/uPlot/MapView.cc
@@ -278,7 +278,7 @@ void MapView::DecodeDataUnit ( MvIcon& dataUnit )
     // Some decoders will want to update the data requests
     MvRequest dataRequest;
     if ( decoder->UpdateDataRequest(dataRequest) )
-        dataBase.UpdateDataUnit(dataUnit.Id(),dataRequest);
+        dataBase.UpdateIcon(DB_DATAUNIT,dataUnit.Id(),dataRequest);
 
      // If the dataset contains single and companion fields then
      // tell Magics to plot single and companion fields separately
@@ -318,7 +318,8 @@ MapView::ConvertToSatellite ( MvRequest& decRequest )
 void
 MapView::UpdateView ( MvRequest& viewRequest )
 {
-	if ( ObjectList::IsGeographicalView( viewRequest.getVerb() ) )
+//	if ( ObjectList::IsGeographicalView( viewRequest.getVerb() ) )
+   if ( strcmp (viewRequest_.getVerb(),viewRequest.getVerb()) == 0)
 	{
 #if 0  //FAMI022012 With the introduction of Proj4 in Magics there are many more 
        // projections available. So, Magics should be now responsible for the projection 
@@ -366,6 +367,7 @@ MapView::UpdateView ( MvRequest& viewRequest )
 	else 
 	{
         // Changing MapView to another view is disabled at the moment.
+      PlotMod::Instance().errorMessage("Changing MapView to another View is currently disabled");
         // The code below needs to be updated if uPlot will allow changing views
         #if 0
 		RecreateData();
@@ -415,25 +417,157 @@ MapView::ReplaceArea ( const Location& coordinates, int izoom)
 void
 MapView::DrawBackground ( )
 {
-	// Retrieve the graphics Engine
-	GraphicsEngine& ge = Owner().GetGraphicsEngine();
-
-	// Ask the graphics engine to draw the coastlines
-	ge.DrawCoastlinesBack ( viewRequest_ );
-
-	Owner().SetProjection ( viewRequest_ );
+   bool draw = false;
+   string ON = "ON";
+
+   // Get DrawingPriority from Page
+   DrawingPriority& tmpDrawingPriority = Owner().GetDrawPriority ();
+
+   // Expand coastlines request
+   MvRequest coastRequest = viewRequest_.getSubrequest ("COASTLINES");
+   MvRequest expRequest = ObjectList::ExpandRequest (coastRequest, EXPAND_DEFAULTS);
+
+   // Account for land-sea shading and for the drawing order
+   // Check if Coastline Land Shade is to be drawn on the background
+   string onoff = (const char*)expRequest ( "MAP_COASTLINE_LAND_SHADE" );
+   if ( onoff == ON )
+   {
+      int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_LAND_SHADE" );
+      if ( drawPrior == 999 )
+         coastRequest ("MAP_COASTLINE_LAND_SHADE") = "OFF";
+      else
+         draw = true;
+   }
+
+   // Check if Coastline Sea Shade is to be drawn on the background
+   onoff = (const char*)expRequest ( "MAP_COASTLINE_SEA_SHADE" );
+   if ( onoff == ON )
+   {
+      int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_SEA_SHADE" );
+      if ( drawPrior == 999 )
+         coastRequest ("MAP_COASTLINE_SEA_SHADE") = "OFF";
+      else
+         draw = true;
+   }
+
+   // Check if Coastline is to be drawn on the background
+   onoff = (const char*)expRequest ( "MAP_COASTLINE" );
+   if ( onoff == ON )
+   {
+      int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE" );
+      if ( drawPrior == 999 && draw == false )
+         coastRequest ("MAP_COASTLINE") = "OFF";
+      else
+         draw = true;
+   }
+
+   // Draw Coastline on the background
+   if ( draw )
+   {
+      // By default Boundaries, Cities and Rivers are plotted in the Foreground.
+      coastRequest ("MAP_BOUNDARIES") = "OFF";
+      coastRequest ("MAP_CITIES") = "OFF";
+      coastRequest ("MAP_RIVERS") = "OFF";
+
+      // Unset other drawings
+      coastRequest ("MAP_GRID") = "OFF";
+      coastRequest ("MAP_LABEL") = "OFF";
+
+      // Draw the layer info
+      MvIcon icon(coastRequest,true);
+      Owner().DrawLayerInfo( icon.Id() );
+
+      // Ask the graphics engine to draw the coastlines
+      GraphicsEngine& ge = Owner().GetGraphicsEngine();
+      ge.Draw ( coastRequest, true );
+   }
+
+   Owner().SetProjection ( viewRequest_ );
 }
 
 void
 MapView::DrawForeground ( )
 {
-	// Retrieve the graphics Engine
-	GraphicsEngine& ge = Owner().GetGraphicsEngine();
-
-	// Ask the graphics engine to draw the coastlines
-	ge.DrawCoastlinesFront ( viewRequest_ );
-
-	Owner().SetProjection ( viewRequest_ );
+   bool draw   = false;
+   string ON   = "ON";
+   string LAST = "LAST";
+
+   // Retrieve the graphics Engine
+   GraphicsEngine& ge = Owner().GetGraphicsEngine();
+
+   // Get DrawingPriority from Page
+   DrawingPriority& tmpDrawingPriority = Owner().GetDrawPriority ();
+
+   // Expand coastlines request
+   MvRequest coastRequest = viewRequest_.getSubrequest ("COASTLINES");
+   MvRequest expRequest = ObjectList::ExpandRequest (coastRequest, EXPAND_DEFAULTS);
+
+   // Account for land-sea shading and for the drawing order
+   // Check if Coastline Land Shade is to be drawn on the foreground
+   string onoff = (const char*)expRequest ( "MAP_COASTLINE_LAND_SHADE" );
+   if ( onoff == ON )
+   {
+      int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_LAND_SHADE" );
+      if ( drawPrior == 999 )
+         draw = true;
+      else
+         coastRequest ("MAP_COASTLINE_LAND_SHADE") = "OFF";
+   }
+
+   // Check if Coastline Sea Shade is to be drawn on the foreground
+   onoff = (const char*)expRequest ( "MAP_COASTLINE_SEA_SHADE" );
+   if ( onoff == ON )
+   {
+      int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_SEA_SHADE" );
+      if ( drawPrior == 999 )
+         draw = true;
+      else
+         coastRequest ("MAP_COASTLINE_SEA_SHADE") = "OFF";
+   }
+
+   // Check if Coastline is to be drawn on the foreground
+   onoff = (const char*)expRequest ( "MAP_COASTLINE" );
+   if ( onoff == ON )
+   {
+      int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE" );
+
+      // If MAP_COASTLINE was already ploted in the background but SEA/LAND
+      // SHADE was selected, MAGICS needs that MAP_COASTLINE be set to ON.
+      // If both MAP_COASTLINE and SEA/LAND SHADE are to be drawn,
+      // Magics needs a double PCOAST
+      if ( drawPrior != 999 && draw == false )
+         coastRequest ("MAP_COASTLINE") = "OFF";
+      else if ( drawPrior == 999 && draw == true )
+      {
+         // Unset other drawings and set land/sea shade request
+         MvRequest finalRequest = coastRequest;
+         finalRequest ("MAP_GRID")  = "OFF";
+         finalRequest ("MAP_LABEL") = "OFF";
+         finalRequest ("MAP_BOUNDARIES") = "OFF";
+         finalRequest ("MAP_CITIES") = "OFF";
+         finalRequest ("MAP_RIVERS") = "OFF";
+
+         // Unset Sea/Land Shade
+         coastRequest ("MAP_COASTLINE_LAND_SHADE") = "OFF";
+         coastRequest ("MAP_COASTLINE_SEA_SHADE")  = "OFF";
+
+         // Draw the layer info
+         MvIcon icon(finalRequest,true);
+         Owner().DrawLayerInfo( icon.Id() );
+
+         // Draw Coastline sea/land shade
+         ge.Draw ( finalRequest, true );
+      }
+   }
+
+   // Draw the layer info
+   MvIcon icon(coastRequest,true);
+   Owner().DrawLayerInfo( icon.Id() );
+
+   // Draw Coastline and/or other options (Grid,Label,...) on the foreground
+   ge.Draw ( coastRequest, true );
+
+   Owner().SetProjection ( viewRequest_ );
 }
 
 // Describe the contents of the view
diff --git a/src/uPlot/MvIcon.cc b/src/uPlot/MvIcon.cc
index 0412ae0..08a87ef 100644
--- a/src/uPlot/MvIcon.cc
+++ b/src/uPlot/MvIcon.cc
@@ -64,7 +64,7 @@ MvIconRep::MvIconRep(const MvRequest& inRequest, bool idSave):
 	parentId_( 0 ),
 	myRequest_(inRequest)
 { 
-	iconName_     = ObjectInfo::ObjectName (inRequest); 
+	iconName_     = ObjectInfo::ObjectName (inRequest,"",iconId_); 
 	iconClass_    = inRequest.getVerb();
 	iconFullPath_ = ObjectInfo::ObjectPath (inRequest);
 
diff --git a/src/uPlot/MvIconDataBase.cc b/src/uPlot/MvIconDataBase.cc
index 1cf2cab..295a940 100644
--- a/src/uPlot/MvIconDataBase.cc
+++ b/src/uPlot/MvIconDataBase.cc
@@ -25,35 +25,24 @@
 #include <MvPath.hpp>
 
 #include "MvIconDataBase.h"
+#include "MvLayer.h"
+#include "MvRequestUtil.hpp"
 #include "PlotModConst.h"
 #include "Root.h"
 #include "ObjectList.h"
 
-MvIconDataBase::MvIconDataBase()
-{
-	//empty
-}
-
 MvIconDataBase::MvIconDataBase(const MvIconDataBase &old) :
   dataunitList_(old.dataunitList_),
   visdefList_(old.visdefList_),
   textList_(old.textList_),
   legendList_(old.legendList_)
 {
-  // Initialize cursors
-  duListCursor_  = dataunitList_.begin();
-  vdListCursor_  = visdefList_.begin();
-  ptListCursor_  = textList_.begin();
-  legListCursor_ = legendList_.begin();
-
-  // Don't copy relations. These will be rebuilt with
-  // presentable id's for new hierarchy.
 }
 
 MvIconDataBase::~MvIconDataBase()
 {
-	// Remove all data links
-	DeleteLink();
+   // Remove all data links
+   DeleteLink();
 }
 
 // If presentable id is > 0, do the insertion into the presentable/
@@ -61,13 +50,11 @@ MvIconDataBase::~MvIconDataBase()
 bool 
 MvIconDataBase::InsertDataUnit ( MvIcon& newDataUnit,int presentableId)
 {
-	bool retVal;
+   bool retVal = InsertIfNew(newDataUnit,dataunitList_,presentableDataUnitRelation_, presentableId);
 
-	retVal = InsertIfNew(newDataUnit,dataunitList_,presentableDataUnitRelation_, presentableId);
+   RelationInsertIfNew(presentableDataUnitRelation_,presentableId, newDataUnit.Id() );
 
-	RelationInsertIfNew(presentableDataUnitRelation_,presentableId, newDataUnit.Id() );
- 
-	return retVal;
+   return retVal;
 }
 
 bool 
@@ -76,12 +63,6 @@ MvIconDataBase::InsertVisDef ( MvIcon& newVisDef)
 	return InsertIfNew(newVisDef,visdefList_, presentableVisDefRelation_);
 }
 
-void 
-MvIconDataBase::DataUnitVisDefRelation (const int dataunitId, const int visdefId)
-{
-	RelationInsertIfNew(dataUnitVisDefRelation_,dataunitId,visdefId);
-}
-
 bool
 MvIconDataBase::RetrieveVisDefList ( const MvIcon& dataUnit, MvIconList& visdefList )
 {
@@ -159,7 +140,8 @@ MvIconDataBase::NextVisDefByDataUnitId (const int dataunitId, MvIcon& theVisDef)
 		      ++duvdRelationCursor_;
 
 		      // Retrieve the visdef
-		      return RetrieveVisDef(visdefId, theVisDef);
+		      //return RetrieveVisDef(visdefId, theVisDef);
+            return RetrieveIconFromList(DB_VISDEF, visdefId, theVisDef);
 	      }
 	      ++duvdRelationCursor_;
 	}
@@ -194,124 +176,7 @@ bool MvIconDataBase::DataUnitHasVisDef(const int dataUnitId,const int visdefId)
 }
 #endif
 
-bool
-MvIconDataBase::RetrieveDataUnit(const int dataunitId, MvIcon& theDataUnit)
-{
-	require ( dataunitId > 0 );
-
-	// DataUnits have a unique icon id
-	// find the one on the list
-	duListCursor_ = dataunitList_.begin();
-
-	while (duListCursor_ != dataunitList_.end())
-	{
-		if ( (*duListCursor_).Id() == dataunitId )
-		{
-			theDataUnit = *duListCursor_;
-			return true;
-		}
-		++duListCursor_;
-	}
-
-	return false;
-}
-
-bool
-MvIconDataBase::UpdateDataUnit ( const int dataunitId, const MvRequest& duRequest )
-{
-	require ( dataunitId > 0 );
-
-	// Data units have a unique icon id
-	// find the one on the list
-	duListCursor_ = dataunitList_.begin();
-	while (duListCursor_ != dataunitList_.end())
-	{
-		if ( (*duListCursor_).Id() == dataunitId ) // update Request
-		{
-			(*duListCursor_).SaveRequest(duRequest,true);
-			return true;
-		}
-		++duListCursor_;
-	}
-
-	return false;
-}
-
-void
-MvIconDataBase::RemoveDataUnitFromList (const int dataunitId)
-{
-	require ( dataunitId > 0 );
-
-	MvListCursor duListCursor = dataunitList_.begin();
-	MvListCursor foundCursor;
-	while ( duListCursor != dataunitList_.end() )
-	{
-	        foundCursor = duListCursor;
-		++duListCursor;
-
-		if ( (*foundCursor).Id() == dataunitId ||
-		     (*foundCursor).ParentId() == dataunitId )
-		{
-		      dataunitList_.erase ( foundCursor );
-		}
-	}
-}
-
-bool
-MvIconDataBase::RetrieveVisDef(const int visdefId, MvIcon& theVisDef)
-{
-	require ( visdefId > 0 );
-
-	// VisDefs have a unique icon id
-	// find the one on the list
-	vdListCursor_ = visdefList_.begin();
-
-	while (vdListCursor_ != visdefList_.end())
-	{
-		if ( (*vdListCursor_).Id() == visdefId )
-		{
-			theVisDef = *vdListCursor_;
-			return true;
-		}
-		++vdListCursor_;
-	}
-
-	return false;
-}
-
-void
-MvIconDataBase::RemoveVisDefFromList ( const int visdefId )
-{
-	require ( visdefId > 0 );
-
-	// VisDefs have a unique icon id
-	// find the one on the list
-	vdListCursor_ = visdefList_.begin();
-
-	while ( vdListCursor_ != visdefList_.end() )
-	{
-		if ( (*vdListCursor_).Id() == visdefId )
-		{
-			visdefList_.erase ( vdListCursor_ );
-			break;
-		}
-		++vdListCursor_;
-	}
-}
-
 #if 0
-void 
-MvIconDataBase::DataUnitRewind()
-{
-	duListCursor_ = dataunitList_.begin();
-}
-
-void 
-MvIconDataBase::VisDefRewind()
-{
-	vdListCursor_ = visdefList_.begin();
-}
-
 bool
 MvIconDataBase::NextDataUnitByClass (const Cached& iconClass, MvIcon& theDataUnit)
 {
@@ -354,11 +219,9 @@ MvIconDataBase::RemoveAllVisDefsByDataUnit ( MvIcon& theDataUnit, const MvReques
         MvIcon currentDataUnit;
 	while (  duvdCursor != dataUnitVisDefRelation_.end() )
 	{
-		// DataUnits have a unique icon id
-		// find the one on the list
-	        MvListCursor oldCursor = duListCursor_;
-	        RetrieveDataUnit((*duvdCursor).first,currentDataUnit);
-		duListCursor_ = oldCursor;
+      // DataUnits have a unique icon id. Find the one on the list.
+      //RetrieveDataUnit((*duvdCursor).first,currentDataUnit);
+      RetrieveIconFromList(DB_DATAUNIT,(*duvdCursor).first,currentDataUnit);
 
 		if ( currentDataUnit.Id() == theDataUnit.Id() || 
 		     currentDataUnit.ParentId() == theDataUnit.Id() )
@@ -370,7 +233,8 @@ MvIconDataBase::RemoveAllVisDefsByDataUnit ( MvIcon& theDataUnit, const MvReques
 			++duvdCursor;
 
 			MvIcon visDef;
-			RetrieveVisDef ( (*foundCursor).second, visDef );
+			//RetrieveVisDef ( (*foundCursor).second, visDef );
+         RetrieveIconFromList ( DB_VISDEF, (*foundCursor).second, visDef );
 
 			// Do not remove if they are not of the same class
 			if ( !vd || ObjectInfo::CheckVisDefClass(*vd, visDef.Request( )) )
@@ -378,8 +242,8 @@ MvIconDataBase::RemoveAllVisDefsByDataUnit ( MvIcon& theDataUnit, const MvReques
 				// delete the relation pair
 				dataUnitVisDefRelation_.erase ( foundCursor );
 
-				// Remove visdef from list
-				RemoveVisDefFromList ( (*foundCursor).second );
+            // Remove visdef from list
+            RemoveIconFromList ( DB_VISDEF, (*foundCursor).second );
 
 				// indicate that visdef is related to dataunit
 				found = true;
@@ -395,14 +259,14 @@ MvIconDataBase::RemoveAllVisDefsByDataUnit ( MvIcon& theDataUnit, const MvReques
 void
 MvIconDataBase::RemoveDataUnit ( MvIcon& theDataUnit )
 {
-	// Remove the visdef from the visdef-data unit relation
-	RemoveAllVisDefsByDataUnit ( theDataUnit );
+   // Remove the visdef from the visdef-data unit relation
+   RemoveAllVisDefsByDataUnit ( theDataUnit );
 
-	// Remove data unit from the Presentable-DataUnit Relation
-	RemoveAllDataUnitsFromPresRel (theDataUnit );
+   // Remove data unit from the Presentable-DataUnit Relation
+   RemoveAllDataUnitsFromPresRel (theDataUnit );
 
-	// Remove data unit from List
-	RemoveDataUnitFromList ( theDataUnit.Id() );
+   // Remove data unit from List
+   RemoveIconFromList ( DB_DATAUNIT,theDataUnit.Id() );
 }
 
 void
@@ -410,7 +274,8 @@ MvIconDataBase::RemoveDataUnit ( const int presentableId )
 {
 	// Retrieve list of DataUnits by presentable ID
 	MvIconList dataUnitList;
-	DataUnitListByPresentableId ( presentableId, dataUnitList );
+	//DataUnitListByPresentableId ( presentableId, dataUnitList );
+   RetrieveIcon ( PRES_DATAUNIT_REL, presentableId, dataUnitList );
 
 	// Remove DataUnits
 	MvListCursor duListCursor = dataUnitList.begin();
@@ -447,70 +312,6 @@ MvIconDataBase::RemoveDataUnit ( )
 }
 
 bool
-MvIconDataBase::RemoveAllVisDefsByVisDefId ( MvIcon& theVisDef )
-{
-	bool found = false;
-
-	MvRelationCursor duvdCursor = dataUnitVisDefRelation_.begin();
-	MvRelationCursor foundCursor;
-
-	while ( duvdCursor != dataUnitVisDefRelation_.end() )
-	{
-		// DataUnits have a unique icon id 
-		// find the one on the list
-		if ( (*duvdCursor).second == theVisDef.Id() )
-		{
-			// Keep a copy of the found iterator
-			foundCursor = duvdCursor;
-
-			// Increment, so we can continue our search
-			++duvdCursor;
-
-			// delete the relation pair
-			dataUnitVisDefRelation_.erase ( foundCursor );
-
-			// indicate that visdef is related to dataunit
-			found = true;
-		}
-		else
-			++duvdCursor;
-	}
-
-	return found;
-}
-
-bool
-MvIconDataBase::RemoveAllVisDefsFromPresRel ( MvIcon& theVisDef )
-{
-	bool found = false;
-
-	MvRelationCursor prvdCursor = presentableVisDefRelation_.begin();
-	MvRelationCursor foundCursor;
-
-	while ( prvdCursor != presentableVisDefRelation_.end() )
-	{
-		if ( (*prvdCursor).second == theVisDef.Id() )
-		{
-			// Keep a copy of the found iterator
-			foundCursor = prvdCursor;
-
-			// Increment, so we can continue our search
-			++prvdCursor;
-
-			// delete the relation pair
-			presentableVisDefRelation_.erase ( foundCursor );
-
-			// indicate that visdef is related to presentable
-			found = true;
-		}
-		else
-			++prvdCursor;
-	}
-
-	return found;
-}
-
-bool
 MvIconDataBase::RemoveAllDataUnitsFromPresRel ( MvIcon& theDataUnit )
 {
 	bool found = false;
@@ -521,7 +322,8 @@ MvIconDataBase::RemoveAllDataUnitsFromPresRel ( MvIcon& theDataUnit )
 	MvIcon currentDataUnit;
 	while ( prduCursor != presentableDataUnitRelation_.end() )
 	{
-	        RetrieveDataUnit((*prduCursor).second,currentDataUnit);
+      //RetrieveDataUnit((*prduCursor).second,currentDataUnit);
+      RetrieveIconFromList(DB_DATAUNIT,(*prduCursor).second,currentDataUnit);
 		if ( currentDataUnit.Id() == theDataUnit.Id() || 
 		     currentDataUnit.ParentId() == theDataUnit.Id() )
 		{
@@ -555,7 +357,8 @@ MvIconDataBase::RemoveDataUnitFromPresRel ( MvIcon& theDataUnit, int presentable
 	MvIcon currentDataUnit;
 	while ( prduCursor != presentableDataUnitRelation_.end() )
 	{
-	        RetrieveDataUnit((*prduCursor).second,currentDataUnit);
+      //RetrieveDataUnit((*prduCursor).second,currentDataUnit);
+      RetrieveIconFromList(DB_DATAUNIT,(*prduCursor).second,currentDataUnit);
 		if ( (currentDataUnit.Id() == theDataUnit.Id() || 
 		      currentDataUnit.ParentId() == theDataUnit.Id()) &&
 		      (*prduCursor).first == presentableId )
@@ -602,13 +405,14 @@ MvIconDataBase::RemoveVisDef ( MvIcon& theVisDef )
 void
 MvIconDataBase::RemoveVisDef ( const int presentableId, const MvRequest* vd )
 {
-	// Remove VisDefs from DataUnit relation
-	MvIconList dataUnitList;
-        if (DataUnitListByPresentableId ( presentableId, dataUnitList ))
-		RemoveAllVisDefsByDataUnitList ( dataUnitList, vd );
+   // Remove VisDefs from DataUnit relation
+   MvIconList dataUnitList;
+   //if (DataUnitListByPresentableId ( presentableId, dataUnitList ))
+   if (RetrieveIcon ( PRES_DATAUNIT_REL, presentableId, dataUnitList ))
+      RemoveAllVisDefsByDataUnitList ( dataUnitList, vd );
 
-	// Remove VisDefs from Presentable relation
-	RemoveVisDefFromPresRel ( presentableId, vd );
+   // Remove VisDefs from Presentable relation
+   RemoveVisDefFromPresRel ( presentableId, vd );
 }
 
 void
@@ -630,15 +434,16 @@ MvIconDataBase::RemoveVisDefFromPresRel ( const int presentableId, const MvReque
 
 		      // Check if class is given
 		      MvIcon theVisDef;
-		      if (vd && RetrieveVisDef((*foundCursor).second,theVisDef))
+		      //if (vd && RetrieveVisDef((*foundCursor).second,theVisDef))
+            if (vd && RetrieveIconFromList(DB_VISDEF,(*foundCursor).second,theVisDef))
 		      {
 			// Do not remove if they are not of the same class
 			if (!ObjectInfo::CheckVisDefClass(*vd,theVisDef.Request()) )
 			     continue;
 		      }
 
-		      // Delete visdef from VisDefList
-		       RemoveVisDefFromList ( (*foundCursor).second );
+            // Delete visdef from VisDefList
+            RemoveIconFromList ( DB_VISDEF, (*foundCursor).second );
 
 		      // Delete the visdef-presentable pair
 		      presentableVisDefRelation_.erase ( foundCursor );
@@ -651,46 +456,45 @@ MvIconDataBase::RemoveVisDefFromPresRel ( const int presentableId, const MvReque
 void
 MvIconDataBase::RemoveVisDef ( )
 {
-	bool found;
-
-	// Remove all VisDefs
-	MvListCursor vdListCursor = visdefList_.begin();
-	MvListCursor foundCursor;
+   bool found;
 
-	while ( vdListCursor != visdefList_.end() )
-	{
-		// Keep a copy of the found iterator
-		foundCursor = vdListCursor;
+   // Remove all VisDefs
+   MvListCursor vdListCursor = visdefList_.begin();
+   MvListCursor foundCursor;
+   while ( vdListCursor != visdefList_.end() )
+   {
+      // Keep a copy of the found iterator
+      foundCursor = vdListCursor;
 
-		// Increment, so we can continue our search
-		++vdListCursor;
+      // Increment, so we can continue our search
+      ++vdListCursor;
 
-		// Remove the visdef from the visdef-data unit relation
-		found = RemoveAllVisDefsByVisDefId ( *foundCursor );
+      // Remove the visdef from the visdef-data unit relation
+      found = RemoveIconFromRel ( DATAUNIT_VISDEF_REL, (*foundCursor).Id() );
 
-		// If the visdef is not related to a data unit, then 
-		// it must be related to a presentable
-		if ( found == false )
-			RemoveAllVisDefsFromPresRel ( *foundCursor );
+      // If the visdef is not related to a data unit, then
+      // it must be related to a presentable
+      if ( found == false )
+         RemoveIconFromRel ( PRES_VISDEF_REL, (*foundCursor).Id() );
 
-		// delete the relation pair
-		visdefList_.erase ( foundCursor );
-	}
+      // delete the relation pair
+      visdefList_.erase ( foundCursor );
+   }
 }
 
 void
 MvIconDataBase::RemoveAllVisDefsByDataUnitList ( MvIconList& dataUnitList, const MvRequest* vd )
 {
-	duListCursor_ = dataUnitList.begin();
+   MvListCursor duListCursor = dataUnitList.begin();
 	MvIcon theDataUnit;
 
-	while ( duListCursor_ != dataUnitList.end() )
+	while ( duListCursor != dataUnitList.end() )
 	{
-		theDataUnit = *duListCursor_;
+		theDataUnit = *duListCursor;
 
 		RemoveAllVisDefsByDataUnit ( theDataUnit, vd );
 
-		++duListCursor_;
+		++duListCursor;
 	}
 }
 
@@ -727,6 +531,7 @@ MvIconDataBase::VisDefListByDataUnitAndPresentableId ( const int   presentableId
 	return success;
 }
 
+#if 0
 bool
 MvIconDataBase::VisDefListByPresentableId ( const int   presentableId, MvIconList& visdefList )
 {
@@ -746,6 +551,7 @@ MvIconDataBase::VisDefListByPresentableId ( const int   presentableId, MvIconLis
 
 	return success;
 }
+#endif
 
 bool
 MvIconDataBase::NextVisDefByPresentableId (const int presentableId, MvIcon& theVisDef)
@@ -763,7 +569,8 @@ MvIconDataBase::NextVisDefByPresentableId (const int presentableId, MvIcon& theV
 		      ++prvdRelationCursor_;
 
 		      // Retrieve the visdef
-		      return RetrieveVisDef(visdefId, theVisDef);
+		      //return RetrieveVisDef(visdefId, theVisDef);
+            return RetrieveIconFromList(DB_VISDEF, visdefId, theVisDef);
 	      }
 	      ++prvdRelationCursor_;
 	}
@@ -803,12 +610,7 @@ MvIconDataBase::UpdatePresentableVisDefRelation ( const int newPresentableId, co
 }
 #endif
 
-void
-MvIconDataBase::PresentableDataUnitRelation (const int presentableId, const int dataunitId)
-{
-	RelationInsertIfNew(presentableDataUnitRelation_,presentableId,dataunitId);
-}
-
+#if 0
 bool
 MvIconDataBase::DataUnitListByPresentableId ( const int   presentableId, MvIconList& dataUnitList )
 {
@@ -829,6 +631,7 @@ MvIconDataBase::DataUnitListByPresentableId ( const int   presentableId, MvIconL
 
 	return success;
 }
+#endif
 
 bool
 MvIconDataBase::PresentableHasData ( const int presentableId )
@@ -846,25 +649,25 @@ MvIconDataBase::PresentableHasData ( const int presentableId )
 bool
 MvIconDataBase::NextDataUnitByPresentableId (const int presentableId, MvIcon& theDataUnit)
 {
-	while (prduRelationCursor_ !=  presentableDataUnitRelation_.end())
-	{
-              // Presentable have a unique icon id
-	      // find the one on the list
-	      if ( (*prduRelationCursor_).first == presentableId )
-	      {
-	              // Retrieve the dataunit Id
-		      const int dataunitId = (*prduRelationCursor_).second;
-		     
-		      // Increment the relation Cursor (to point to next item)
-		      ++prduRelationCursor_;
+    while (prduRelationCursor_ !=  presentableDataUnitRelation_.end())
+    {
+        // Presentable have a unique icon id
+        // find the one on the list
+        if ( (*prduRelationCursor_).first == presentableId )
+        {
+             // Retrieve the dataunit Id
+             const int dataunitId = (*prduRelationCursor_).second;
 
-		      // Retrieve the dataunit
-		      return RetrieveDataUnit ( dataunitId, theDataUnit );
-	      }
-	      ++prduRelationCursor_;
-	}
+             // Increment the relation Cursor (to point to next item)
+             ++prduRelationCursor_;
 
-	return false;
+             // Retrieve the dataunit
+             return RetrieveIconFromList ( DB_DATAUNIT, dataunitId, theDataUnit );
+         }
+         ++prduRelationCursor_;
+   }
+
+   return false;
 }
 
 #if 0
@@ -921,12 +724,12 @@ MvIconDataBase::RemovePresentable (const int presentableId)
 #endif
 
 MvIcon
-MvIconDataBase::InsertDataUnit (  const MvRequest& dataunitRequest, int presentableId )
+MvIconDataBase::InsertDataUnit (  const MvRequest& dataunitRequest, int presentableId, int index )
 {
 	// Copy the grib Request into a new DataUnit
 	MvIcon newDataUnit ( dataunitRequest );
 
-	// If the data existed before, we get rid of old drawings to make sure
+   // If the data existed before, we get rid of old drawings to make sure
 	// redraw is done properly
 	if ( ! this->InsertDataUnit ( newDataUnit,presentableId ) )
 	{
@@ -940,6 +743,13 @@ MvIconDataBase::InsertDataUnit (  const MvRequest& dataunitRequest, int presenta
 			treeNode->RemoveData(oldStatus);
 		}
 	}
+	else
+   {
+      MvLayer layer;
+      MvIcon icon(layer.Request(),true);
+      this->InsertIcon( ICON_LAYER_REL,newDataUnit.Id(),icon, index );
+
+   }
 
 	return newDataUnit;
 }
@@ -992,28 +802,6 @@ MvIconDataBase::InsertVisDef ( MvIcon& visDef, const int nodeId )
 	return;
 }
 
-bool
-MvIconDataBase::UpdateVisDef ( const int        visdefId,
-			       const MvRequest& visdefRequest )
-{
-	require ( visdefId > 0 );
-
-	// VisDefs have a unique icon id
-	// find the one on the list
-	vdListCursor_ = visdefList_.begin();
-	while (vdListCursor_ != visdefList_.end())
-	{
-		if ( (*vdListCursor_).Id() == visdefId ) // update Request
-		{
-			(*vdListCursor_).SaveRequest(visdefRequest,true);
-			return true;
-		}
-		++vdListCursor_;
-	}
-
-	return false;
-}
-
 #if 0
 int
 MvIconDataBase::UpdateVisDefByName (const MvRequest& visdefRequest, const MvIcon& dataUnit)
@@ -1156,272 +944,64 @@ MvIconDataBase::UpdateLayerStackingOrder ( )
     return false;
 }
 
-// -----------------------------------------------------------------
-// -- Methods for the Presentable-PText Relation
-// -----------------------------------------------------------------
 void
-MvIconDataBase::PresentableTextRelation (const int presentableId, const int ptextId)
-{
-  	RelationInsertIfNew ( presentableTextRelation_,presentableId,ptextId );
-}
-
-bool
-MvIconDataBase::TextListByPresentableId ( const int presentableId, MvIconList& ptextList )
+MvIconDataBase::UpdateTitleText ( const MvRequest& textRequest, const int nodeId )
 {
-	// Instantiate auxiliary variables
-	MvIcon tmpPText;
-	bool success = false;
+	// Retrieve list of Ptexts by presentable ID
+	MvIconList textList;
+	//TextListByPresentableId ( nodeId, textList );
+   RetrieveIcon ( PRES_TEXT_REL, nodeId, textList );
+	// Find the Icon on the list that is TITLE-TEXT
+	MvListCursor ptListCursor = textList.begin();
+	while (ptListCursor != textList.end())
+	{
+		MvIcon tmpIcon = *ptListCursor;
+		MvRequest tmpRequest = tmpIcon.Request();
 
-	// Rewind the Presentable-PText relation
-	this->PresentableTextRelationRewind();
+//		if ( tmpRequest ("TEXT_TYPE") == Cached( "TITLE" ) )
+		if ( tmpRequest.getVerb() != ANNOTATION )
+		{
+			Presentable* treeNode = Root::Instance().FindBranch ( nodeId );
+			treeNode->RemoveIcon ( tmpIcon );
 
-	// Loop through the database and find all PTexts associated to the presentable
-	while ( this->NextTextByPresentableId ( presentableId, tmpPText ) )
-	{
-		success = true;
-		ptextList.push_back ( tmpPText );
+			// update Request and return
+			Cached iconName = textRequest ( "_NAME" );
+			(*ptListCursor).Rename(iconName);
+			(*ptListCursor).SaveRequest(textRequest,true);
+			return;
+		}
+		++ptListCursor;
 	}
 
-	return success;
+   // If there is no TITLE TEXT, insert as a new one
+   MvIcon text ( textRequest, true );
+   this->InsertIcon ( PRES_TEXT_REL, nodeId, text);
 }
 
-bool
-MvIconDataBase::NextTextByPresentableId (const int presentableId, MvIcon& thePText)
+#if 0
+void
+MvIconDataBase::RemovePText ( MvIcon& thePText )
 {
-	while (prptRelationCursor_ !=  presentableTextRelation_.end())
-	{
-              // Presentable have a unique icon id
-	      // find the one on the list
-	      if ( (*prptRelationCursor_).first == presentableId )
-	      {
-	              // Retrieve the PText Id
-		      const int ptextId = (*prptRelationCursor_).second;
+	// Remove PText from the Presentable-PText Relation
 
-		      // Increment the relation Cursor (to point to next item)
-		      ++prptRelationCursor_;
+	RemoveAllPTextsFromPresRel (thePText );
 
-		      // Retrieve the visdef
-		      return RetrieveText(ptextId, thePText);
-	      }
-	      ++prptRelationCursor_;
-	}
-	return false;
+	// Remove PText from List
+
+	RemovePTextFromList ( thePText.Id() );
 }
 
-bool
-MvIconDataBase::TextListByPresentableId ( const int presentableId, MvIconList&  textList, const string& type )
+void
+MvIconDataBase::RemoveText ( )  //replaced by RemoveIcon()
 {
-	// Instantiate auxiliary variables
-	MvIcon tmpText;
-	bool success = false;
-
-	// Rewind the Presentable-Text relation
-	this->PresentableTextRelationRewind();
+	// Remove all PTexts
+	MvListCursor ptListCursor = textList_.begin();
+	MvListCursor foundCursor;
 
-	// Loop through the database and find all Texts - type TITLE
-	// or ANNOTATION - associated to the presentable
-	while ( this->NextTextByPresentableId ( presentableId, tmpText ) )
+	while ( ptListCursor != textList_.end() )
 	{
-		MvRequest tmpReq = tmpText.Request();
-
-		// Temporary (and ugly) code. Update this code after Annotation and
-		// MText icons are defined properly
-		string verb = tmpReq.getVerb();
-		if ( (type == "TEXT" && (verb == "MTEXT" || verb == "PTEXT")) || 
-		     (type == "ANNOTATION" && verb == "ANNOTATION") )
-		{
-			success = true;
-			textList.push_back ( tmpText );
-		}
-	}
-
-	return success;
-}
-
-bool
-MvIconDataBase::RetrieveText(const int ptextId, MvIcon& thePText)
-{
-	require ( ptextId > 0 );
-
-	// VisDefs have a unique icon id
-	// find the one on the list
-	ptListCursor_ = textList_.begin();
-	while (ptListCursor_ != textList_.end())
-	{
-		if ( (*ptListCursor_).Id() == ptextId )
-		{
-			thePText = *ptListCursor_;
-			return true;
-		}
-		++ptListCursor_;
-	}
-	return false;
-}
-
-void
-MvIconDataBase::InsertText ( const MvRequest& textRequest, const int nodeId )
-{
-	require ( nodeId > 0 );
-
-	// Copy the ptext Request into a new PText
-	MvIcon text ( textRequest, true );
-
-	// Retrieve list of Ptexts by presentable ID
-	MvIconList textList;
-	TextListByPresentableId ( nodeId, textList );
-
-	// Scan list of icons
-	MvListCursor ptListCursor = textList.begin();
-	while (ptListCursor != textList.end())
-	{
-		MvIcon tmpIcon = *ptListCursor;
-		if (tmpIcon == text)
-		{
-			// The icon exists in list - Just update
-			(*ptListCursor).SaveRequest(textRequest,true);
-			return;
-		}
-		++ptListCursor;
-	}
-	// Put the new ptext icon in the DataBase
-	this->InsertText (text);
-
-	// Put the pair Presentable - PText in the DataBase
-	this->PresentableTextRelation ( nodeId, text.Id());
-}
-
-void
-MvIconDataBase::UpdateTitleText ( const MvRequest& textRequest, const int nodeId )
-{
-	// Retrieve list of Ptexts by presentable ID
-	MvIconList textList;
-	TextListByPresentableId ( nodeId, textList );
-
-	// Find the Icon on the list that is TITLE-TEXT
-	MvListCursor ptListCursor = textList.begin();
-	while (ptListCursor != textList.end())
-	{
-		MvIcon tmpIcon = *ptListCursor;
-		MvRequest tmpRequest = tmpIcon.Request();
-
-//		if ( tmpRequest ("TEXT_TYPE") == Cached( "TITLE" ) )
-		if ( tmpRequest.getVerb() != ANNOTATION )
-		{
-			Presentable* treeNode = Root::Instance().FindBranch ( nodeId );
-			treeNode->RemoveIcon ( tmpIcon );
-
-			// update Request and return
-			Cached iconName = textRequest ( "_NAME" );
-			(*ptListCursor).Rename(iconName);
-			(*ptListCursor).SaveRequest(textRequest,true);
-			return;
-		}
-		++ptListCursor;
-	}
-	// If there is no TITLE TEXT, insert as a new one
-	InsertText(textRequest, nodeId);
-}
-
-#if 0
-void
-MvIconDataBase::UpdateTitleText ( Cached textLine1, Cached textLine2, const int nodeId )
-{
-	// Retrieve list of Ptexts by presentable ID
-	MvIconList ptextList;
-	PTextListByPresentableId ( nodeId, ptextList );
-
-	// Find the Icon on the list that is not POSITIONAL TEXT_MODE, i.e. TITLE mode
-	MvListCursor ptListCursor = ptextList.begin();
-	while (ptListCursor != ptextList.end())
-	{
-		MvIcon tmpIcon = *ptListCursor;
-		MvRequest tmpRequest = tmpIcon.Request();
-
-		if ( ObjectList::IsAutomaticTitleText ( tmpRequest ) )
-		{
-			tmpRequest ("TEXT_LINE_1") = textLine1;				
-			tmpRequest ("TEXT_LINE_2") = textLine2;	
-			tmpRequest ("TEXT_LINE_COUNT") = 2;
-			tmpIcon.SaveRequest ( tmpRequest,true );
-			return;
-		}
-		++ptListCursor;
-	}
-}
-#endif
-
-void
-MvIconDataBase::RemoveTextFromList ( const int textId )
-{
-	require ( textId > 0 );
-
-	// PTexts have a unique icon id
-	// find the one on the list
-	ptListCursor_ = textList_.begin();
-
-	while ( ptListCursor_ != textList_.end() )
-	{
-		if ( (*ptListCursor_).Id() == textId )
-		{
-			textList_.erase ( ptListCursor_ );
-			break;
-		}
-		++ptListCursor_;
-	}
-}
-
-#if 0
-void
-MvIconDataBase::RemovePText ( MvIcon& thePText )
-{
-	// Remove PText from the Presentable-PText Relation
-
-	RemoveAllPTextsFromPresRel (thePText );
-
-	// Remove PText from List
-
-	RemovePTextFromList ( thePText.Id() );
-}
-#endif
-
-void
-MvIconDataBase::RemoveText ( const int presentableId  )
-{
-	MvRelationCursor prptCursor = presentableTextRelation_.begin();
-	MvRelationCursor foundCursor;
-
-	while ( prptCursor != presentableTextRelation_.end() )
-	{
-		if ( (*prptCursor).first == presentableId )
-		{
-			// Keep a copy of the found iterator
-			foundCursor = prptCursor;
-
-			// Increment, so we can continue our search
-			++prptCursor;
-
-			// delete PText from List
-			RemoveTextFromList ( (*foundCursor).second );
-
-			// delete the relation pair
-			presentableTextRelation_.erase ( foundCursor );
-		}
-		else
-			++prptCursor;
-	}
-}
-
-void
-MvIconDataBase::RemoveText ( )
-{
-	// Remove all PTexts
-	MvListCursor ptListCursor = textList_.begin();
-	MvListCursor foundCursor;
-
-	while ( ptListCursor != textList_.end() )
-	{
-		// Keep a copy of the found iterator
-		foundCursor = ptListCursor;
+		// Keep a copy of the found iterator
+		foundCursor = ptListCursor;
 
 		// Increment, so we can continue our search
 		++ptListCursor;
@@ -1433,37 +1013,7 @@ MvIconDataBase::RemoveText ( )
 		textList_.erase ( foundCursor );
 	}
 }
-
-bool
-MvIconDataBase::RemoveAllTextsFromPresRel ( MvIcon& theText )
-{
-	bool found = false;
-
-	MvRelationCursor prptCursor = presentableTextRelation_.begin();
-	MvRelationCursor foundCursor;
-
-	while ( prptCursor != presentableTextRelation_.end() )
-	{
-		if ( (*prptCursor).second == theText.Id() )
-		{
-			// Keep a copy of the found iterator
-			foundCursor = prptCursor;
-
-			// Increment, so we can continue our search
-			++prptCursor;
-
-			// delete the relation pair
-			presentableTextRelation_.erase ( foundCursor );
-
-			// indicate that ptext is related to presentable
-			found = true;
-		}
-		else
-			++prptCursor;
-	}
-
-	return found;
-}
+#endif
 
 #if 0
 void
@@ -1497,113 +1047,6 @@ MvIconDataBase::UpdatePresentablePTextRelation ( const int newPresentableId, con
 }
 #endif
 
-// -----------------------------------------------------------------
-// -- Methods for the Presentable-Legend Relation
-// -----------------------------------------------------------------
-
-void
-MvIconDataBase::RemoveLegendFromList ( const int legId )
-{
-	require ( legId > 0 );
-
-	// Legends have a unique icon id; find the one on the list
-	legListCursor_ = legendList_.begin();
-	while ( legListCursor_ != legendList_.end() )
-	{
-		if ( (*legListCursor_).Id() == legId )
-		{
-			legendList_.erase ( legListCursor_ );
-			break;
-		}
-		++legListCursor_;
-	}
-}
-
-bool
-MvIconDataBase::RemoveLegendFromPresRel ( MvIcon& theLeg )
-{
-	bool found = false;
-
-	MvRelationCursor prlegCursor = presentableLegendRelation_.begin();
-	MvRelationCursor foundCursor;
-
-	while ( prlegCursor != presentableLegendRelation_.end() )
-	{
-		if ( (*prlegCursor).second == theLeg.Id() )
-		{
-			// Keep a copy of the found iterator
-			foundCursor = prlegCursor;
-
-			// Increment, so we can continue our search
-			++prlegCursor;
-
-			// delete the relation pair
-			presentableLegendRelation_.erase ( foundCursor );
-
-			// indicate that legend was found
-			found = true;
-		}
-		else
-			++prlegCursor;
-	}
-
-	return found;
-}
-
-void
-MvIconDataBase::RemoveLegend ( const int presentableId  )
-{
-	MvRelationCursor prlegCursor = presentableLegendRelation_.begin();
-	MvRelationCursor foundCursor;
-
-	while ( prlegCursor != presentableLegendRelation_.end() )
-	{
-		if ( (*prlegCursor).first == presentableId )
-		{
-			// Keep a copy of the found iterator
-			foundCursor = prlegCursor;
-
-			// Increment, so we can continue our search
-			++prlegCursor;
-
-			// delete Legend from List
-			RemoveLegendFromList ( (*foundCursor).second );
-
-			// delete the relation pair
-			presentableLegendRelation_.erase ( foundCursor );
-
-			return;
-		}
-		else
-			++prlegCursor;
-	}
-
-	return;
-}
-
-void
-MvIconDataBase::RemoveLegend ( )
-{
-	// Remove all Legends
-	MvListCursor legListCursor = legendList_.begin();
-	MvListCursor foundCursor;
-
-	while ( legListCursor != legendList_.end() )
-	{
-		// Keep a copy of the found iterator
-		foundCursor = legListCursor;
-
-		// Increment, so we can continue our search
-		++legListCursor;
-
-		// Remove Legend from the Presentable-Legend Relation
-		RemoveLegendFromPresRel ( *foundCursor );
-
-		// delete the relation pair
-		legendList_.erase ( foundCursor );
-	}
-}
-
 void
 MvIconDataBase::RemoveAllData ( )
 {
@@ -1613,136 +1056,84 @@ MvIconDataBase::RemoveAllData ( )
 	// Remove all VisDefs
 	RemoveVisDef ( );
 
-	// Remove all PTexts
-	RemoveText ( );
+	// Remove all Texts
+	RemoveIcon ( PRES_TEXT_REL );
 
 	// Remove all Legends
-	RemoveLegend ( );}
+	RemoveIcon ( PRES_LEGEND_REL );
+}
 
 void
 MvIconDataBase::RemovePresentable ( const int presentableId )
 {
-	// Remove all DataUnits by Presentable Id
-	RemoveDataUnit ( presentableId );
+   // Remove all DataUnits by Presentable Id
+   RemoveDataUnit ( presentableId );
 
-	// Remove all VisDefs by Presentable Id
-	RemoveVisDef ( presentableId );
+   // Remove all VisDefs by Presentable Id
+   RemoveVisDef ( presentableId );
 
-	// Remove all PTexts by Presentable Id
-	RemoveText ( presentableId );
+   // Remove all PTexts by Presentable Id
+   RemoveIcon ( PRES_TEXT_REL, presentableId );
 
-	// Remove Legend by Presentable Id
-	RemoveLegend ( presentableId );
+   // Remove Legend by Presentable Id
+   RemoveIcon ( PRES_LEGEND_REL, presentableId );
 }
 
 void
 MvIconDataBase::Print ()
 {
-	cout << "MvIconDataBase Contents" << endl;
-
-	cout << "DataUnitList :" << endl;
-	MvListCursor lCursor = dataunitList_.begin();
-	while (lCursor != dataunitList_.end())
-	{
-		cout << " " << (*lCursor).Id();
-		++lCursor;
-	}
-
-	cout << " " << endl;
-	cout << "VisDefList :" << endl;
-	lCursor = visdefList_.begin();
-	while (lCursor != visdefList_.end())
-	{
-		cout << " " << (*lCursor).Id();
-		++lCursor;
-	}
-
-	cout << " " << endl;
-	cout << "TextList :" << endl;
-	lCursor = textList_.begin();
-	while ( lCursor != textList_.end() )
-	{
-		cout << " " << (*lCursor).Id();
-		++lCursor;
-	}
-
-	cout << " " << endl;
-	cout << "LegendList :" << endl;
-	lCursor = legendList_.begin();
-	while ( lCursor != legendList_.end() )
-	{
-		cout << " " << (*lCursor).Id();
-		++lCursor;
-	}
-
-    cout << " " << endl;
-    cout << "LayerList :" << endl;
-    lCursor = layerList_.begin();
-    while ( lCursor != layerList_.end() )
-    {
-        cout << " " << (*lCursor).Id();
-        ++lCursor;
-    }
-
-	cout << " " << endl;
-	cout << "DataUnitVisDefRelation :" << endl;
-	MvRelationCursor rCursor = dataUnitVisDefRelation_.begin();
-	while ( rCursor != dataUnitVisDefRelation_.end() )
-	{
-		cout << " " << (*rCursor).first;
-		cout << " " << (*rCursor).second << endl;
-		++rCursor;
-	}
-
-	cout << " " << endl;
-	cout << "PresentableDataUnitRelation :" << endl;
-	rCursor = presentableDataUnitRelation_.begin();
-	while ( rCursor != presentableDataUnitRelation_.end() )
-	{
-		cout << " " << (*rCursor).first;
-		cout << " " << (*rCursor).second << endl;
-		++rCursor;
-	}
-
-	cout << " " << endl;
-	cout << "PresentableVisDefRelation :" << endl;
-	rCursor = presentableVisDefRelation_.begin();
-	while ( rCursor != presentableVisDefRelation_.end() )
-	{
-		cout << " " << (*rCursor).first;
-		cout << " " << (*rCursor).second << endl;
-		++rCursor;
-	}
+   // Print lists
+   cout << "MvIconDataBase Contents" << endl;
+   string mlist[5] = {"DB_DATAUNIT", "DB_VISDEF", "DB_TEXT", "DB_LEGEND", "DB_LAYER"};
+   for ( unsigned int i = 0; i < 5; i++)
+   {
+      cout << mlist[i] << endl;
+      MvIconList* iconList = this->IconList(i);
+      MvListCursor lCursor = iconList->begin();
+      while (lCursor != iconList->end())
+      {
+         cout << " " << (*lCursor).Id();
+         ++lCursor;
+      }
+      cout << " " << endl;
+   }
 
-	cout << " " << endl;
-	cout << "PresentableTextRelation :" << endl;
-	rCursor = presentableTextRelation_.begin();
-	while ( rCursor != presentableTextRelation_.end() )
-	{
-		cout << " " << (*rCursor).first;
-		cout << " " << (*rCursor).second << endl;
-		++rCursor;
-	}
+   // Print relations
+   cout << " " << endl;
+   string mrel[6] = { "PRES_DATAUNIT_REL", "PRES_VISDEF_REL", "PRES_TEXT_REL", "PRES_LEGEND_REL", "ICON_LAYER_REL", "DATAUNIT_VISDEF_REL" };
+   for ( unsigned int i = 0; i < 6; i++)
+   {
+      cout << mrel[i] << endl;
+      MvRelation* rel = this->IconRelation(i);
+      MvRelationCursor rCursor = rel->begin();
+      while ( rCursor != rel->end() )
+      {
+         cout << " " << (*rCursor).first;
+         cout << " " << (*rCursor).second << endl;
+         ++rCursor;
+      }
+      cout << " " << endl;
+   }
 
-	cout << " " << endl;
-	cout << "PresentableLegendRelation :" << endl;
-	rCursor = presentableLegendRelation_.begin();
-	while ( rCursor != presentableLegendRelation_.end() )
-	{
-		cout << " " << (*rCursor).first;
-		cout << " " << (*rCursor).second << endl;
-		++rCursor;
-	}
+   // Print Presentable-Layer relation
+   cout << "PRES_LAYER_REL" << endl;
+   MvMapRelationCursor mCursor = presentableLayerRelation_.begin();
+   while ( mCursor != presentableLayerRelation_.end() )
+   {
+      cout << " " << (*mCursor).first;
+      MvIconList iconList = (*mCursor).second;
+      MvListCursor listCursor = iconList.begin();
+      while (listCursor != iconList.end())
+      {
+         MvIcon tmpIcon = *listCursor;
+         cout << tmpIcon.Id();
+         ++listCursor;
+      }
+      cout << endl;
+      ++mCursor;
+   }
 
-    cout << " " << endl;
-    cout << "IconLayerRelation :" << endl;
-    rCursor = iconLayerRelation_.begin();
-    while ( rCursor != iconLayerRelation_.end() )
-    {
-        cout << " " << (*rCursor).first;
-        cout << " " << (*rCursor).second << endl;
-        ++rCursor;
-    }
+   cout << " " << endl;
 }
 
 #if 0
@@ -1906,6 +1297,7 @@ void MvIconDataBase::DeleteLink ()
 // -- General methods
 // -----------------------------------------------------------------
 
+// Retrieve the relation pair variable
 MvRelation* MvIconDataBase::IconRelation ( const int iconType )
 {
     if ( iconType == DATAUNIT_VISDEF_REL )
@@ -1927,17 +1319,18 @@ MvRelation* MvIconDataBase::IconRelation ( const int iconType )
     }
 }
 
+// Retrieve the icon object list
 MvIconList* MvIconDataBase::IconList ( const int iconType )
 {
-    if ( iconType == DATAUNIT )
+    if ( iconType == DB_DATAUNIT )
         return &dataunitList_;
-    else if ( iconType == VISDEF )
+    else if ( iconType == DB_VISDEF )
         return &visdefList_;
-    else if ( iconType == TEXT )
+    else if ( iconType == DB_TEXT )
         return &textList_;
-    else if ( iconType == LEGEND )
+    else if ( iconType == DB_LEGEND )
         return &legendList_;
-    else if ( iconType == LAYER )
+    else if ( iconType == DB_LAYER )
         return &layerList_;
     else
     {
@@ -1946,51 +1339,190 @@ MvIconList* MvIconDataBase::IconList ( const int iconType )
     }
 }
 
+// Retrieve the correspondent icon type
+int MvIconDataBase::IconType ( const int iconRelType )
+{
+    if ( iconRelType == DATAUNIT_VISDEF_REL )
+        return DB_VISDEF;
+    else if ( iconRelType == PRES_VISDEF_REL )
+        return DB_VISDEF;
+    else if ( iconRelType == PRES_DATAUNIT_REL )
+        return DB_DATAUNIT;
+    else if ( iconRelType == PRES_TEXT_REL )
+        return DB_TEXT;
+    else if ( iconRelType == PRES_LEGEND_REL )
+        return DB_LEGEND;
+    else if ( iconRelType == ICON_LAYER_REL )
+        return DB_LAYER;
+    else
+    {
+        marslog(LOG_WARN,(char*)"Pair Icon Relation and Icon Type not defined: %d", iconRelType);
+        return -1;
+    }
+}
+
+void
+MvIconDataBase::InsertIcon ( const int iconRelType, const int iconRelId, MvIcon& icon, bool bLayer, int index )
+{
+   // Insert icon
+   this->InsertIcon( iconRelType,iconRelId,icon );
+
+#if 1
+   // Create a new Layer entry
+   if ( bLayer )
+   {
+      MvLayer layer;
+      layer.StackingOrder(index);
+      //layer.IconId(icon.Id());
+      MvIcon iconLayer(layer.Request(),true);
+//      this->InsertMapIcon( ICON_LAYER_REL,icon.Id(),iconLayer,index );
+      this->InsertLayerIcon( iconRelId,iconLayer,index );
+   }
+#endif
+}
+
+void
+MvIconDataBase::InsertLayerIcon( const int presId, MvIcon& layer, int index )
+{
+  // Check if Layer already exists
+   // Retrieve list of Layers by Presentable Id
+   MvIconList layerList;
+   if ( this->RetrieveLayerIcon1 ( presId, layerList ) )
+   {
+      // if index = 0 then add it in the beginning (background)
+      // if index > list.size then add it in the end (foreground)
+      // if index < 0 then add it in the end but before foreground
+      // otherwise, add it in the position indicated by index
+      int size = layerList.size();
+      if ( index == 0 || size == 0 )
+         layerList.push_front(layer);
+      else if ( index > size )
+         layerList.push_back(layer);
+      else if ( index < 0 )
+      {
+         bool found = false;
+         MvListCursor it = layerList.end();
+         for ( int i = size; i != 0; --i )
+         {
+            --it;
+            if ( (int)(*it).Request()("_STACKING_ORDER") != 999 )
+            {
+               layerList.insert(++it,layer);
+               found = true;
+               break;
+            }
+         }
+         if ( !found ) // add as a first element
+            layerList.push_front(layer);
+      }
+      else
+      {
+         MvListCursor it = layerList.begin();
+         for ( int i = 1; i < index; i++) ++it;
+         layerList.insert(it,layer);
+      }
+   }
+}
+
+int MvIconDataBase::RetrieveLayerIcon1 (const int ii,MvIconList& layerList)
+{
+   return 1;
+}
+
 void
-MvIconDataBase::InsertIcon ( const int iconType, const int iconRelId, const MvIcon& icon )
+MvIconDataBase::InsertIcon ( const int iconRelType, const int iconRelId, MvIcon& icon, int index )
 {
     require ( iconRelId > 0 );
 
+    // Get the associated iconType from the icon relation type variable
+    int iconType = IconType (iconRelType);
+
     // Check if icon already exists
-    MvIcon iconAux;
-    if ( this->RetrieveIcon ( iconType,iconRelId,iconAux ) )
+    // Retrieve list of icons by relation ID
+    MvIconList iconList;
+    if ( this->RetrieveIcon ( iconRelType, iconRelId, iconList ) )
     {
-        // The icon exists - Just update it
-        iconAux.SaveRequest(icon.Request(),true);
-        return;
+        // Scan list of icons to check if icon already exists
+        MvListCursor listCursor = iconList.begin();
+        while (listCursor != iconList.end())
+        {
+            MvIcon tmpIcon = *listCursor;
+            if (tmpIcon == icon)
+            {
+                // The icon exists in list. Update it taking into consideration the
+                // drawing order info.
+                MvRequest req;
+                CopyParametersAndStackingOrder ( tmpIcon.Request(), icon.Request(), index, req);
+                (*listCursor).SaveRequest(req,true);
+
+                return;
+            }
+            ++listCursor;
+        }
     }
 
-    // Copy the icon request into a new icon
-//    MvIcon icon ( iconRequest,true );
-
     // Put the new icon in the correspondent List
-    this->InsertIcon (iconType,icon);
+    this->InsertIcon (iconType,icon,index);
 
     // Put the pair IconRel - Icon in the Relation
-    this->InsertIconRelation ( iconType, iconRelId, icon.Id());
+    this->InsertIconRelation ( iconRelType, iconRelId, icon.Id());
 
     return;
 }
 
 void
-MvIconDataBase::InsertIcon ( const int iconType, const MvIcon& icon )
-{
-    MvIconList* list = this->IconList( iconType );
-    list->push_back(icon);
+MvIconDataBase::InsertIcon ( const int iconType, const MvIcon& icon, int index )
+{
+   // if index = 0 then add it in the beginning (background)
+   // if index > list.size then add it in the end (foreground)
+   // if index < 0 then add it in the end but before foreground
+   // otherwise, add it in the position indicated by index
+   MvIconList* list = this->IconList( iconType );
+   int size = list->size();
+   if ( index == 0 || size == 0 )
+      list->push_front(icon);
+   else if ( index > size )
+      list->push_back(icon);
+   else if ( index < 0 )
+   {
+      bool found = false;
+      MvListCursor it = list->end();
+      for ( int i = size; i != 0; --i )
+      {
+         --it;
+         if ( (int)(*it).Request()("_STACKING_ORDER") != 999 )
+         {
+            list->insert(++it,icon);
+            found = true;
+            break;
+         }
+      }
+      if ( !found ) // add as a first element
+         list->push_front(icon);
+   }
+   else
+   {
+      MvListCursor it = list->begin();
+      for ( int i = 1; i < index; i++) ++it;
+      list->insert(it,icon);
+   }
 }
 
 void
-MvIconDataBase::InsertIconRelation ( const int iconType, const int iconRelId, const int iconId)
+MvIconDataBase::InsertIconRelation ( const int iconRelType, const int iconRelId, const int iconId)
 {
-    MvRelation* rel = this->IconRelation ( iconType );
+    MvRelation* rel = this->IconRelation ( iconRelType );
     this->RelationInsertIfNew ( *rel,iconRelId,iconId );
 }
 
 bool
-MvIconDataBase::RetrieveIcon( int iconType, int relId, MvIcon& theIcon )
+MvIconDataBase::RetrieveIcon( const int iconRelType, const int relId, MvIcon& theIcon )
 {
     // Get the correspondent icon relation
-    MvRelation* iconRelation = this->IconRelation(iconType);
+    MvRelation* iconRelation = this->IconRelation(iconRelType);
+
+    // Get the correspondent icon type
+    int iconType = IconType(iconRelType);
 
     // Loop through the database and find the unique Layer associated to the Icon
     MvRelationCursor relCursor = iconRelation->begin();
@@ -2011,6 +1543,36 @@ MvIconDataBase::RetrieveIcon( int iconType, int relId, MvIcon& theIcon )
     return false;
 }
 
+int
+MvIconDataBase::RetrieveIcon ( const int iconRelType, const int iconRelId, MvIconList& iconList )
+{
+   // Get the correspondent icon relation
+   MvRelation* iconRelation = this->IconRelation(iconRelType);
+
+   // Get the correspondent icon type
+   int iconType = IconType(iconRelType);
+
+   // Loop through the database and find all icons associated to the Presentable
+   MvRelationCursor relCursor = iconRelation->begin();
+   while (relCursor !=  iconRelation->end())
+   {
+       // Find the Presentable
+       if ( (*relCursor).first == iconRelId )
+       {
+           // Retrieve the Icon Id
+           const int iconId = (*relCursor).second;
+
+          // Retrieve the icon
+          MvIcon tmpIcon;
+          if ( RetrieveIconFromList(iconType,iconId,tmpIcon) )
+               iconList.push_back ( tmpIcon );
+       }
+       ++relCursor;
+   }
+
+   return iconList.size();
+}
+
 bool
 MvIconDataBase::RetrieveIconFromList( const int iconType, const int iconId, MvIcon& theIcon)
 {
@@ -2032,3 +1594,196 @@ MvIconDataBase::RetrieveIconFromList( const int iconType, const int iconId, MvIc
     }
     return false;
 }
+
+int
+RetrieveLayerIcon ( const int presentableId, MvIconList& layerList )
+{
+   #if 0
+   // Loop through the database and find all icons associated to the Presentable
+   MvMapRelationCursor relCursor = presentableLayerRelation_.begin();
+
+
+   while (relCursor !=  presentableLayerRelation_.end())
+   {
+       // Find the Presentable
+       if ( (*relCursor).first == presentableId )
+       {
+          // Retrieve the layer list
+          layerList = (*relCursor).second;
+          break;
+       }
+       ++relCursor;
+   }
+#endif
+//   return layerList.size();
+return 0;
+}
+
+bool
+MvIconDataBase::CheckIcon( const int iconRelType, const int relId )
+{
+    // Get the correspondent icon relation
+    MvRelation* iconRelation = this->IconRelation(iconRelType);
+
+    // Loop through the database and find the unique Layer associated to the Icon
+    MvRelationCursor relCursor = iconRelation->begin();
+    while (relCursor !=  iconRelation->end())
+    {
+        // Icon has a unique id; find the one on the list
+        if ( (*relCursor).first == relId )
+           return true;
+
+        ++relCursor;
+    }
+
+    return false;
+}
+
+void
+MvIconDataBase::RemoveIcon ( const int iconRelType )
+{
+   // Get the correspondent icon relation
+   MvRelation* iconRelation = this->IconRelation(iconRelType);
+
+   // Get the correspondent icon type
+   int iconType = IconType(iconRelType);
+
+   // Get the correspondent icon list
+   MvIconList* iconList = this->IconList(iconType);
+
+   // Remove all icons
+   iconRelation->clear();
+   iconList->clear();
+
+   #if 0
+   MvListCursor listCursor = iconList->begin();
+   MvListCursor foundCursor;
+   while ( listCursor != iconList->end() )
+   {
+      // Keep a copy of the found iterator
+      foundCursor = listCursor;
+
+      // Increment, so we can continue our search
+      ++listCursor;
+
+      // Delete the relation pair
+      RemoveRelation ( *foundCursor );
+
+      // Delete icon from List
+      iconList->erase ( foundCursor );
+   }
+   #endif
+}
+
+void
+MvIconDataBase::RemoveIcon ( const int iconRelType, const int iconRelId  )
+{
+   // Get the correspondent icon relation
+   MvRelation* iconRelation = this->IconRelation(iconRelType);
+
+   // Get the correspondent icon type
+   int iconType = IconType(iconRelType);
+
+   // Loop through the database and find all icons associated to the Relation icon
+   MvRelationCursor relCursor = iconRelation->begin();
+   MvRelationCursor foundCursor;
+   while (relCursor !=  iconRelation->end())
+   {
+       if ( (*relCursor).first == iconRelId )
+       {
+           // Keep a copy of the found iterator
+           foundCursor = relCursor;
+
+           // Delete icon from List
+           int iconId = (*foundCursor).second;
+           RemoveIconFromList ( iconType, iconId );
+
+           // Delete the relation pair
+           iconRelation->erase ( foundCursor );
+
+           // Delete entries in the Layer relation too
+           if ( iconRelType != ICON_LAYER_REL )
+              this->RemoveIcon(ICON_LAYER_REL,iconId);
+       }
+
+       ++relCursor;
+   }
+}
+
+void
+MvIconDataBase::RemoveIconFromList ( const int iconType, const int iconId )
+{
+   require ( iconId > 0 );
+
+    // Get the correspondent icon list
+    MvIconList* iconList = this->IconList(iconType);
+
+   // Icons have a unique icon id; find the one on the list
+   MvListCursor listCursor = iconList->begin();
+   while ( listCursor != iconList->end() )
+   {
+      if ( (*listCursor).Id() == iconId )
+      {
+         iconList->erase ( listCursor );
+         break;
+      }
+      ++listCursor;
+   }
+   return;
+}
+
+bool
+MvIconDataBase::RemoveIconFromRel ( const int iconRelType, const int iconId )
+{
+   bool found = false;
+
+   // Get the correspondent icon relation
+   MvRelation* iconRelation = this->IconRelation(iconRelType);
+
+   // Loop through the database and find all icons associated to the Relation icon
+   MvRelationCursor relCursor = iconRelation->begin();
+   MvRelationCursor foundCursor;
+   while ( relCursor != iconRelation->end() )
+   {
+       if ( (*relCursor).second == iconId )
+       {
+           // Keep a copy of the found iterator
+           foundCursor = relCursor;
+
+           // Increment, so we can continue our search
+           //++relCursor;
+
+           // Delete the relation pair
+           iconRelation->erase ( foundCursor );
+
+           found = true;
+       }
+      //else
+      ++relCursor;
+   }
+
+   return found;
+}
+
+bool
+MvIconDataBase::UpdateIcon ( const int iconType, const int iconId, const MvRequest& iconRequest )
+{
+   require ( iconId > 0 );
+
+   // Get the correspondent icon list
+   MvIconList* iconList = this->IconList(iconType);
+
+   // Icons have a unique id; find the one on the list
+   MvListCursor listCursor = iconList->begin();
+   while (listCursor != iconList->end())
+   {
+      if ( (*listCursor).Id() == iconId )
+      {
+         (*listCursor).SaveRequest(iconRequest,true);
+         return true;
+      }
+      ++listCursor;
+   }
+
+   return false;
+}
diff --git a/src/uPlot/MvIconDataBase.h b/src/uPlot/MvIconDataBase.h
index 38ba48e..f788dd3 100644
--- a/src/uPlot/MvIconDataBase.h
+++ b/src/uPlot/MvIconDataBase.h
@@ -20,47 +20,35 @@
 //  Implements a data base of Data Units and VisDefs
 //  and a m:n relation between a DataUnit and a VisDef
 //
-//
 // .CLIENTS:
 //  Presentable
 //
-//
 // .RESPONSABILITIES:
 //  - Store the dataunits and visdef, 
 //  - Retrieve them based on a key (Id) or an icon name
 //  - Given a DataUnit, retrieve the corresponding VisDef
 //
-//  
 // .COLLABORATORS:
 //  MvIcon, STL classes (list, multimap)
 //
-//
 // .BASE CLASS:
 //
-//
 // .DERIVED CLASSES:
 //
-//
 // .REFERENCES:
 //
-//
 #ifndef MvIconDataBase_H
 #define MvIconDataBase_H
 
 #include <inc_iostream.h>
-#include "MvIcon.h"
 
-// General typedefs used in MvIconDataBase
-// which need to be publicly acessible
-#define DB_PRESENTABLE 1
-#define DB_DATAUNIT    2
-#define DB_PRESENT_DU  3
+#include "MvIcon.h"
 
 // Relation types
-enum { PRES_DATAUNIT_REL, PRES_VISDEF_REL, PRES_TEXT_REL, PRES_LEGEND_REL, ICON_LAYER_REL, DATAUNIT_VISDEF_REL };
+enum { PRES_DATAUNIT_REL, PRES_VISDEF_REL, PRES_TEXT_REL, PRES_LEGEND_REL, ICON_LAYER_REL, DATAUNIT_VISDEF_REL, PRES_LAYER_REL };
 
 // Icon list types
-enum { DATAUNIT, VISDEF, TEXT, LEGEND, LAYER };
+enum { DB_DATAUNIT, DB_VISDEF, DB_TEXT, DB_LEGEND, DB_LAYER };
 
 //  Definitions for the Icon List
 typedef list <MvIcon> MvIconList;
@@ -68,132 +56,62 @@ typedef list <MvIcon> MvIconList;
 //  Definitions for the Link List
 typedef list <string> MvLinkList;
 
-// Definitions of the iterators that will loop
-// through the lists
+// Definitions of the iterators that will loop through the lists
 typedef MvIconList::iterator MvListCursor;
 
 // Definition for a relation to store m:n relationships
-typedef multimap <int, int > MvRelation;
+typedef multimap <int, int> MvRelation;
 
 // Definition for the pairs of entries in the relation 
 typedef MvRelation::value_type MvEntryPair;
 
-// Definition for the iterator that loops through the
-// relation pairs
+// Definition for the iterator that loops through the relation pairs
 typedef MvRelation::iterator MvRelationCursor;
 
-class MvIconDataBase {
-
-public:
-
-	// Contructors
-	MvIconDataBase();
-        MvIconDataBase(const MvIconDataBase&);
+// Definition for a relation to store m relationships
+typedef map <int, MvIconList> MvMapRelation;
 
-	// Destructor
-       ~MvIconDataBase();
+// Definition for the pairs of entries in the MvMapRelation
+typedef MvMapRelation::value_type MvMapEntryPair;
 
-//---------------------------------------------
-// --- Methods for the Data Unit List
-//---------------------------------------------
+// Definition for the iterator that loops through the MvMapRelation pairs
+typedef MvMapRelation::iterator MvMapRelationCursor;
 
-// Inserts a new DataUnit into the DataUnit List
-	bool InsertDataUnit ( MvIcon& newDataUnit, int presentableId = 0);
-
-	// Retrieves a DataUnit, given its unique Id
-	bool RetrieveDataUnit(const int dataunitId, MvIcon& theDataUnit);
-
-	// Updates the Data request, given its unique Id
-	bool UpdateDataUnit (const int dataunitId, const MvRequest& duRequest);
-
-	// Removes a DataUnit, given its unique Id
-	void RemoveDataUnitFromList (const int dataunitId);
+class MvIconDataBase {
 
-//	void DataUnitRewind();
-	// Rewinds the cursor, putting it at the beginning of the list
+public:
 
-//	bool NextDataUnit ( MvIcon& theDataUnit );
-	// Retrieves current data unit (if not at end) and sets pointer to the next data
+   // Contructors
+   MvIconDataBase() {};
+   MvIconDataBase(const MvIconDataBase&);
 
-//	bool NextDataUnitByClass (const Cached& iconClass, MvIcon& theDataUnit);
-	// Retrieves the next data unit associated with a class 
+   // Destructor
+   ~MvIconDataBase();
 
 //---------------------------------------------
-// --- Methods for the VisDef List
+// --- Methods for the Data Unit
 //---------------------------------------------
 
-	// Inserts a new VisDef into the VisDef List
-	bool InsertVisDef   ( MvIcon& newVisDef);
-
-	// Retrieves a VisDef, given its unique Id
-	bool RetrieveVisDef (const int visdefId, MvIcon& theVisDef);
-
-	// Updates the VisDef's Request, given its unique Id
-	bool UpdateVisDef (const int visdefId, const MvRequest& visdefRequest);
+   // Inserts a new DataUnit into the DataUnit List
+   bool InsertDataUnit ( MvIcon& newDataUnit, int presentableId = 0);
 
-//	bool UpdateVisDefByName (const MvRequest& visdefRequest, const int nodeId, MvIconList& list, const int option);
-	// Updates visdefs given its name. Returns the VisDefs updated.
-	// The parameter <option> has the following values:
-	// DB_PRESENTABLE: search VisDef at Presentable level
-	// DB_DATAUNIT   : search VisDef at Data Unit level
-	// DB_PRESENT_DU : search VisDef at both cases
+   // Retrieves current data unit (if not at end) and sets pointer to the next data
+   bool NextDataUnit ( MvIcon& theDataUnit );
 
-	// Removes a VisDef, given its unique Id
-	void RemoveVisDefFromList ( const int visdefId );
-
-//	void VisDefRewind();
-	// Rewind the cursor
 
 //---------------------------------------------
-// --- Methods for the PText List
+// --- Methods for the VisDef
 //---------------------------------------------
 
-	// Inserts a ptext
-	void InsertText (const MvIcon& newPText)
-		{ textList_.push_back(newPText); }
-
-	void InsertText (const MvRequest& ptextReq, const int nodeId);
-
-	// Retrieves a PText, given its unique Id
-	bool RetrieveText(const int ptextId, MvIcon& thePText);
-
-	// Updates the unique PText that contains the title for the presentable
-	void UpdateTitleText (const MvRequest& ptextRequest, const int nodeId);
-
-//	void UpdateTitleText ( Cached textLine1, Cached textLine2, const int nodeId );
-	// Updates the unique PText that contains the user defined title for the presentable
-
-	// Removes a PText, given its unique Id
-	void RemoveTextFromList ( const int ptextId );
-
-//	void RemovePText ( MvIcon& thePText );
-	// Removes a Ptext from the Data Base
-
-	// Remove all PTexts, associated with a specific
-	// presentable Id, from the database
-	void RemoveText ( const int presentableId );
-
-	// Removes all PTexts from the Data Base
-	void RemoveText ( );
-
-	// Rewind the cursor
-	void TextRewind()
-		{ ptListCursor_ = textList_.begin(); }
-
+   // Inserts a new VisDef into the VisDef List
+   bool InsertVisDef   ( MvIcon& newVisDef);
 
 //---------------------------------------------
-// --- Methods for the Legend list
+// --- Methods for the PText
 //---------------------------------------------
 
-	void PresentableLegendRelation (const int presId, const int legId);
-
-	void InsertLegend ( const MvIcon& newLeg )
-		{ legendList_.push_back(newLeg); }
-
-	void RemoveLegendFromList ( const int legId );
-	bool RemoveLegendFromPresRel ( MvIcon& theLeg );
-	void RemoveLegend ( const int presentableId  );
-	void RemoveLegend ( );
+   // Updates the unique PText that contains the title for the presentable
+   void UpdateTitleText (const MvRequest& ptextRequest, const int nodeId);
 
 
 //---------------------------------------------
@@ -203,15 +121,13 @@ public:
     bool UpdateLayerTransparency  ( int, int );
     bool UpdateLayerVisibility    ( int, bool );
     bool UpdateLayerStackingOrder ( );
+    int  LayerIndex () { return layerList_.size(); }
 
 
 //---------------------------------------------
 // --- Methods for the DataUnit-VisDef Relation
 //---------------------------------------------
 
-	// Inserts a new pair in the relation
-	void DataUnitVisDefRelation (const int dataunitId, const int visdefId);
-
 	// Rewinds the cursor
 	void DataUnitVisDefRelationRewind()
 	     { duvdRelationCursor_ = dataUnitVisDefRelation_.begin(); }
@@ -239,10 +155,6 @@ public:
 	// according to its class (if defined)
 	void RemoveAllVisDefsByDataUnitList ( MvIconList& dataUnitList, const MvRequest* vd = 0 );
 
-	// Remove all visdefs from the data base of Data Units and 
-	// VisDefs, given its Id
-	bool RemoveAllVisDefsByVisDefId ( MvIcon& theVisDef );
-
 	// Remove Data Unit from the database
 	void RemoveDataUnit ( MvIcon& theDataUnit );
 
@@ -272,9 +184,6 @@ public:
 // --- Methods for the Presentable-VisDef Relation
 //--------------------------------------------------
 
-//	void PresentableVisDefRelation (const int presentableId, const int visdefId);
-	// Inserts a new pair in the relation
-
 	// Rewinds the cursor
 	void PresentableVisDefRelationRewind()
 	     { prvdRelationCursor_ = presentableVisDefRelation_.begin(); }
@@ -284,10 +193,10 @@ public:
 	bool NextVisDefByPresentableId (const int presentableId, MvIcon& theVisDef);
 
 	// Retrieve the visdef list associated to a data unit and a presentable
-	bool VisDefListByDataUnitAndPresentableId ( const int   presentableId, const char* dataUnitName, MvIconList& visdefList );
+	bool VisDefListByDataUnitAndPresentableId ( const int presentableId, const char* dataUnitName, MvIconList& visdefList );
 
 	// Retrieve the visdef list associated to a presentable
-	bool VisDefListByPresentableId ( const int presentableId, MvIconList& visdefList );
+	//bool VisDefListByPresentableId ( const int presentableId, MvIconList& visdefList );
 
 //	void UpdatePresentableVisDefRelation ( const int newPresentableId, const int oldPresentableId );
 	// Update Presentable-VisDef Relation with a new Presentable Id
@@ -296,14 +205,11 @@ public:
 	// certain class (if selected)
 	void RemoveVisDefFromPresRel ( const int presentableId, const MvRequest* vd = 0 );
 
-    
+
 //--------------------------------------------------
 // --- Methods for the Presentable-DataUnit Relation
 //--------------------------------------------------
 
-	// Inserts a new pair in the relation
-	void PresentableDataUnitRelation (const int presentableId, const int dataUnitId);
-
 	// Rewinds the cursor
 	void PresentableDataUnitRelationRewind()
 		{ prduRelationCursor_ = presentableDataUnitRelation_.begin(); }
@@ -313,8 +219,7 @@ public:
 	bool NextDataUnitByPresentableId (const int presentableId, MvIcon& theVisDef);
 
 	// Retrieve the dataunit list associated to a presentable
-	bool DataUnitListByPresentableId ( const int   presentableId,
-					   MvIconList& dataUnitList );
+	//bool DataUnitListByPresentableId ( const int presentableId, MvIconList& dataUnitList );
 
 	// Verify if there is any DataUnit related to the Presentable Id
 	bool PresentableHasData ( const int presentableId );
@@ -328,9 +233,6 @@ public:
 //     and Presentable-DataUnit Relations
 //--------------------------------------------------------
 
-	// Removes all visdefs, given an Id
-	bool RemoveAllVisDefsFromPresRel ( MvIcon& theVisDef );
-
 	// Removes all data units, given an Id
 	bool RemoveAllDataUnitsFromPresRel ( MvIcon& theDataUnit );
 
@@ -347,7 +249,7 @@ public:
 //--------------------------------------------------
 
 	// Includes dataunits from a request
-    MvIcon InsertDataUnit ( const MvRequest& inRequest, int presentableId = 0 );
+    MvIcon InsertDataUnit ( const MvRequest& inRequest, int presentableId = 0, int index = -1 );
 	
 	// Inserts a visdef
 	MvIcon InsertVisDef ( const MvRequest& visdefRequest, const int nodeId, MvIcon& dataUnit );
@@ -355,34 +257,6 @@ public:
 	void InsertVisDef ( MvIcon& visdef, const int nodeId );
 
 //--------------------------------------------------
-// --- Methods for the Presentable-PText Relation
-//--------------------------------------------------
-
-	// Inserts a new pair in the relation
-	void PresentableTextRelation (const int presentableId, const int ptextId);
-
-	// Rewinds the cursor
-	void PresentableTextRelationRewind()
-	     { prptRelationCursor_ = presentableTextRelation_.begin(); }
-
-	// Retrieves the next PText from the current cursor position,
-	// given a Presentable Id
-	bool NextTextByPresentableId (const int presentableId, MvIcon& thePText);
-
-	// Retrieves the Text list associated to a presentable
-	bool TextListByPresentableId ( const int, MvIconList& );
-
-	// Retrieves the PText list - according to the type - 
-	// associated to a presentable
-	bool TextListByPresentableId ( const int presentableId, MvIconList&  textList, const string& type );
-
-	// Removes all ptexts, given an Id
-	bool RemoveAllTextsFromPresRel ( MvIcon& thePText );
-
-	// Update Presentable-PText Relation with a new Presentable Id
-//	void UpdatePresentablePTextRelation ( const int newPresentableId, const int oldPresentableId );
-
-//--------------------------------------------------
 // --- General methods
 //--------------------------------------------------
 
@@ -395,25 +269,63 @@ public:
     // Prints the Data Base contents
     void Print ( );
 
-//--------------------------------------------------
-// --- General methods to retrieve and insert info
-//--------------------------------------------------
+//-----------------------------------------------------------------
+// --- General methods to retrieve, remove, update and insert info
+//-----------------------------------------------------------------
 
+    // Retrieve one icon giving a relation id
     bool RetrieveIcon ( const int, const int, MvIcon& );
+
+    // Retrive all icons related to a giving relation id
+    int RetrieveIcon ( const int, const int, MvIconList& );
+
+    // Retrieve an icon from its list giving an id
     bool RetrieveIconFromList ( const int, const int, MvIcon& );
-    void InsertIcon ( const int, const int, const MvIcon& );
-    void InsertIcon ( const int, const MvIcon& );
-    void InsertIconRelation ( const int, const int, const int);
 
+    // Retrieve all Layers related to a giving presentable id
+    int RetrieveLayerIcon ( const int, MvIconList& );
+    int RetrieveLayerIcon1 ( const int,MvIconList&);
+
+    // Insert an icon (relation, list and layer) giving a relation id
+    void InsertIcon ( const int, const int, MvIcon&, bool, const int = -1 );
+
+    // Insert an icon (relation and list) giving a relation id
+    void InsertIcon ( const int, const int, MvIcon&, const int = -1 );
+
+    // Insert an icon to its list
+    void InsertIcon ( const int, const MvIcon&, const int );
+
+    // Insert a relation-icon entry
+    void InsertIconRelation ( const int, const int, const int );
+
+    // Insert the layer icon
+    void InsertLayerIcon( const int, MvIcon&, int );
+
+    // Check if icon exists
+    bool CheckIcon( const int, const int );
+
+    // Remove all icons from the database given a relation id
+    void RemoveIcon ( const int );
+
+    // Remove an icon from the database given a relation id
+    void RemoveIcon ( const int, const int );
+
+    // Remove an icon from its list giving an id
+    void RemoveIconFromList (  const int, const int );
+
+    // Removes all icons from the icons pair relation
+    bool RemoveIconFromRel ( const int, const int );
+
+    // Updates the icon request, given its unique Id
+    bool UpdateIcon ( const int, const int, const MvRequest& );
 
 private:
 
-	// No copy allowed
-	MvIconDataBase& operator=(const MvIconDataBase&);
+    // No copy allowed
+    MvIconDataBase& operator=(const MvIconDataBase&);
 
-	// Utility functions for adding icons only if they do not already exist
-	bool InsertIfNew(MvIcon &, MvIconList&, MvRelation& relation,
-			 int relationId = 0);
+    // Utility functions for adding icons only if they do not already exist
+    bool InsertIfNew(MvIcon &, MvIconList&, MvRelation& relation, int relationId = 0);
     void RelationInsertIfNew (MvRelation &relation, const int firstId, const int secondId);
     bool ExistsInRelation (MvRelation &relation, const int firstId, const int secondId);
 
@@ -424,47 +336,45 @@ private:
 
     // Utility functions for handling Relations and Lists
     MvRelation* IconRelation( const int );
-    MvIconList* IconList    ( const int );
+    MvIconList* IconList ( const int );
+    int IconType ( const int );
 
-	// Members
-	// Definitions for the objects lists
+    // Members
+    // Definitions for the objects lists
     MvIconList   dataunitList_,
                  visdefList_,
                  textList_,
                  legendList_,
                  layerList_;
 
-    MvListCursor duListCursor_,
-                 vdListCursor_,
-                 ptListCursor_,
-                 legListCursor_;
-
     // Definitions for the DataUnit - VisDef pairs
     // Each DataUnit may be related to one or more VisDefs
-	MvRelation       dataUnitVisDefRelation_;
-	MvRelationCursor duvdRelationCursor_;
-	
-	// Definition for the Presentable - VisDef Relation
-	MvRelation       presentableVisDefRelation_;
-	MvRelationCursor prvdRelationCursor_;	
+    MvRelation       dataUnitVisDefRelation_;
+    MvRelationCursor duvdRelationCursor_;
+
+    // Definition for the Presentable - VisDef Relation
+    MvRelation       presentableVisDefRelation_;
+    MvRelationCursor prvdRelationCursor_;
+
+    // Definition for the Presentable - DataUnit Relation
+    MvRelation       presentableDataUnitRelation_;
+    MvRelationCursor prduRelationCursor_;
 
-	// Definition for the Presentable - DataUnit Relation
-	MvRelation       presentableDataUnitRelation_;
-	MvRelationCursor prduRelationCursor_;
+    // Definition for the Presentable - PText Relation
+    MvRelation       presentableTextRelation_;
+    MvRelationCursor prptRelationCursor_;
 
-	// Definition for the Presentable - PText Relation
-	MvRelation       presentableTextRelation_;
-	MvRelationCursor prptRelationCursor_;
+    // Definition for the Presentable - Legend Relation
+    MvRelation presentableLegendRelation_;
 
-	// Definition for the Presentable - Legend Relation
-	MvRelation       presentableLegendRelation_;
-	MvRelationCursor prlegRelationCursor_;
+    // Definition for the Presentable - Layer Relation
+    MvMapRelation presentableLayerRelation_;
 
     // Definition for the Layer - Icon Relation
-    MvRelation       iconLayerRelation_;
+    MvRelation iconLayerRelation_;
 
-	// List of dataunit links
-	MvLinkList linkList_;
+    // List of dataunit links
+    MvLinkList linkList_;
 };
 
 #endif
diff --git a/src/uPlot/MvQContentsModel.cc b/src/uPlot/MvQContentsModel.cc
index 1dd3c03..09a3c9e 100644
--- a/src/uPlot/MvQContentsModel.cc
+++ b/src/uPlot/MvQContentsModel.cc
@@ -36,7 +36,7 @@
 //===============================
 
 
-MvQContentsNode::MvQContentsNode(Presentable& pr, MvQContentsNode *parent,Type type)
+MvQContentsNode::MvQContentsNode(Presentable&, MvQContentsNode *parent,Type type)
 {
 	//presentable_=pr; 
 	parent_=parent;
@@ -144,8 +144,9 @@ void MvQContentsTree::Visit(Page &page)
 
 	// Retrieve DataUnits related to the Page
 	MvIconList duList;
-	dataBase.DataUnitListByPresentableId (page.Id(), duList );
-	
+	//dataBase.DataUnitListByPresentableId (page.Id(), duList );
+   dataBase.RetrieveIcon (PRES_DATAUNIT_REL, page.Id(), duList );
+
 	MvListCursor duCursor;
 	MvQContentsNode *duNode;
 	
@@ -176,8 +177,10 @@ MvIconList MvQContentsTree::iconList(Presentable &treeNode)
 
 	// Find the list of objects associated to the Presentable
 	MvIconList objList;
-	dataBase.VisDefListByPresentableId ( treeNode.Id(), objList );
-	dataBase.TextListByPresentableId ( treeNode.Id(), objList );
+   //dataBase.VisDefListByPresentableId ( treeNode.Id(), objList );
+   //dataBase.TextListByPresentableId ( treeNode.Id(), objList );
+   dataBase.RetrieveIcon ( PRES_VISDEF_REL, treeNode.Id(), objList );
+   dataBase.RetrieveIcon ( PRES_TEXT_REL, treeNode.Id(), objList );
 
 	return objList;
 }
diff --git a/src/uPlot/MvQLayerDataWidget.cc b/src/uPlot/MvQLayerDataWidget.cc
index cf08157..046581f 100644
--- a/src/uPlot/MvQLayerDataWidget.cc
+++ b/src/uPlot/MvQLayerDataWidget.cc
@@ -604,4 +604,4 @@ void MvQLayerDataWidget::readSettings(QSettings& settings)
   	settings.beginGroup("MvQLayerDataWidget");
 	visibleOdbColumns_=settings.value("visibleOdbColumns").toStringList();
   	settings.endGroup(); 
-}  
\ No newline at end of file
+}  
diff --git a/src/uPlot/MvQLayerWidget.cc b/src/uPlot/MvQLayerWidget.cc
index ef2707d..68fe023 100644
--- a/src/uPlot/MvQLayerWidget.cc
+++ b/src/uPlot/MvQLayerWidget.cc
@@ -945,4 +945,4 @@ void MvQLayerWidget::readSettings(QSettings& settings)
   
 }  
 
-*/
\ No newline at end of file
+*/
diff --git a/src/uPlot/MvQLayerWidget.h b/src/uPlot/MvQLayerWidget.h
index 3ed81b4..8eb1033 100644
--- a/src/uPlot/MvQLayerWidget.h
+++ b/src/uPlot/MvQLayerWidget.h
@@ -164,4 +164,4 @@ protected:
 
 #endif
 
-*/
\ No newline at end of file
+*/
diff --git a/src/uPlot/MvQPlaceMark.cc b/src/uPlot/MvQPlaceMark.cc
index 76917b2..b882f05 100644
--- a/src/uPlot/MvQPlaceMark.cc
+++ b/src/uPlot/MvQPlaceMark.cc
@@ -754,4 +754,4 @@ QPointF MvQPlaceMark::checkMagnifiedPosInMagnifier(const QPointF& magPos)
 	
 	
 	
-			
\ No newline at end of file
+			
diff --git a/src/uPlot/MvQPlotView.cc b/src/uPlot/MvQPlotView.cc
index 943bb64..4f32fe8 100644
--- a/src/uPlot/MvQPlotView.cc
+++ b/src/uPlot/MvQPlotView.cc
@@ -14,6 +14,7 @@
 #include <QMouseEvent>
 #include <QPaintEvent>
 #include <QResizeEvent>
+#include <QScrollBar>
 
 #include "MvKeyProfile.h"
 
@@ -51,6 +52,8 @@ MvQPlotView::MvQPlotView(QGraphicsScene *scene,QWidget *parent) : QGraphicsView(
 	resetTransform();
 	//translate(0,height);
 	scale(1.,-1);
+	
+	setAcceptDrops(true);
 }
 
 MvQPlotView::~MvQPlotView()
@@ -740,6 +743,44 @@ void MvQPlotView::DrawRectangle(double /*north*/, double /*west*/, double /*sout
 {
 }
 
+//===========================
+// Drop from the new Desktop
+//===========================
+
+void MvQPlotView::dragEnterEvent(QDragEnterEvent *event)
+{
+        if((event->proposedAction() == Qt::CopyAction ||
+            event->proposedAction() == Qt::MoveAction))
+        {
+                event->accept();
+        }
+}
+
+void MvQPlotView::dragMoveEvent(QDragMoveEvent *event)
+{
+        if((event->proposedAction() == Qt::CopyAction ||
+            event->proposedAction() == Qt::MoveAction))
+        {
+                event->accept();
+        }
+}
+
+void MvQPlotView::dropEvent(QDropEvent *event)
+{
+        MvQDrop drop(event);
+	
+	if(drop.hasData())
+	{	
+		QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+		emit iconDropped(drop,event->pos()+scrollOffset);
+		
+		event->accept();
+	  	return;
+	}
+	
+	event->ignore();
+}
+
 void MvQPlotView::contextMenuEvent(QContextMenuEvent *event)
 {
 	emit contextMenuEventHappened(event->globalPos(),mapToScene(event->pos()));	
diff --git a/src/uPlot/MvQPlotView.h b/src/uPlot/MvQPlotView.h
index 533a562..7c41141 100644
--- a/src/uPlot/MvQPlotView.h
+++ b/src/uPlot/MvQPlotView.h
@@ -16,6 +16,7 @@ class MvKeyProfile;
 
 class MvQAreaSelection;
 class MvQCursorData;
+class MvQDrop;
 class MvQLineSelection;
 class MvQMagnifier;
 class MvQZoom;
@@ -80,7 +81,8 @@ signals:
 	void contextMenuEventHappened(const QPoint&,const QPointF&); 
 	void resizeEventHappened(const QSize&);
 	void zoomActionStarted(MgQSceneItem*);	
-	void cursorDataChanged(QPointF,QList<ValuesCollector>); 	
+	void cursorDataChanged(QPointF,QList<ValuesCollector>);
+	void iconDropped(const MvQDrop&,QPoint);
 
 protected:
 	void mouseMoveEvent ( QMouseEvent * event );
@@ -88,6 +90,9 @@ protected:
 	void mouseReleaseEvent ( QMouseEvent * event );
 	void contextMenuEvent(QContextMenuEvent *);
 	void resizeEvent(QResizeEvent *);
+	void dragEnterEvent(QDragEnterEvent *);
+	void dragMoveEvent(QDragMoveEvent *);
+	void dropEvent(QDropEvent *);
 
 	MgQPlotScene* plotScene_;
 
diff --git a/src/uPlot/NewpageAction.cc b/src/uPlot/NewpageAction.cc
index d3bfb14..dd7274f 100644
--- a/src/uPlot/NewpageAction.cc
+++ b/src/uPlot/NewpageAction.cc
@@ -33,10 +33,9 @@ NewpageAction::Execute ( PmContext& context )
      // Save the remaining requests.
 	// It will skip all the previous requests and only save the
 	// remaining ones. 
-	//MvRequest remainingReqs;
-    //remainingReqs.copyFromCurrent(context.InRequest());
+	MvRequest remainingReqs;
+    remainingReqs.copyFromCurrent(context.InRequest());
 
     // Update context
-    //context.Update(remainingReqs);
-    context.SetFirstInRequestToCurrent();
+    context.Update(remainingReqs);
 }
diff --git a/src/uPlot/ObjectList.cc b/src/uPlot/ObjectList.cc
index 15bd209..37eb46f 100644
--- a/src/uPlot/ObjectList.cc
+++ b/src/uPlot/ObjectList.cc
@@ -455,31 +455,29 @@ ObjectList::UserPreferencesRequest(const char* name)
 MvRequest
 ObjectList::UserDefaultRequest(const char* requestName)
 {
-	require ( requestName != 0 );
+   require ( requestName != 0 );
 
-	// Read the objectFileName in the METVIEW ObjectList
-	const char* requestFileName = Find("object", requestName)("default_name"); 
-	ensure ( requestFileName != 0);
+   // Read the objectFileName in the METVIEW ObjectList
+   const char* requestFileName = Find("object", requestName)("default_name");
+   ensure ( requestFileName != 0);
 
-	// Determine  the default path for the icon
-	// Find the file which contains the request 
-	string fullName = MakeUserDefPath (requestFileName);
+   // Determine  the default path for the icon
+   // Find the file which contains the request
+   string fullName = MakeUserDefPath (requestFileName);
 
-	// Create a new request and read its contents
-	// for the file in the default directory
-	MvRequest defaultRequest;
-	if ( FileCanBeOpened ( fullName.c_str(), "r" ) == true )
-	{
-		defaultRequest.read (fullName.c_str());
-		if ( defaultRequest.countParameters() == 0 )
-			defaultRequest =  ObjectList::CreateDefaultRequest(requestName);
-	}
-	else
-	{
-		defaultRequest =  ObjectList::CreateDefaultRequest(requestName);
-	}
+   // Create a new request and read its contents
+   // for the file in the default directory
+   MvRequest defaultRequest;
+   if ( FileCanBeOpened ( fullName.c_str(), "r" ) == true )
+   {
+      defaultRequest.read (fullName.c_str());
+      if ( defaultRequest.countParameters() == 0 )
+         defaultRequest =  ObjectList::CreateDefaultRequest(requestName);
+   }
+   else
+      defaultRequest =  ObjectList::CreateDefaultRequest(requestName);
 
-	return defaultRequest;
+   return defaultRequest;
 }
 
 // -- METHOD :  ExpandRequest
@@ -518,11 +516,17 @@ ObjectList::ExpandRequest ( const MvRequest& reqst, long expandFlag )
 MvRequest
 ObjectList::CreateDefaultRequest ( const char* requestName, int expandFlag )
 {
- 	MvRequest request ( requestName );
-	MvRequest expandedRequest = ObjectList::ExpandRequest ( request,expandFlag );
-	
-	return expandedRequest;
+   MvRequest request ( requestName );
+   MvRequest expandedRequest = ObjectList::ExpandRequest ( request,expandFlag );
 
+   // Add hidden parameters
+   string cname = (const char*)Find("object", requestName)("default_name");
+   string name = "<" + cname + ">";
+   expandedRequest("_NAME") = name.c_str();
+   expandedRequest( "_CLASS" ) = requestName;
+   expandedRequest("_DEFAULT") = true;
+
+   return expandedRequest;
 }
 
 // -- METHOD :  
@@ -660,10 +664,10 @@ ObjectList::IsVisDefIsotachs( const MvRequest& request )
 bool
 ObjectList::IsVisDefCoastlines ( const Cached& requestVerb )
 {
-	return ( requestVerb == MCOAST || requestVerb == PCOAST );
+   return ( requestVerb == MCOAST || requestVerb == PCOAST );
 }
 
-// -- METHOD :  
+// -- METHOD :
 //
 // -- PURPOSE:   
 //
@@ -754,7 +758,8 @@ bool
 ObjectList::CalledFromMacro ( const MvRequest& request )
 {
 	int i = request ( "_CALLED_FROM_MACRO" );
-	if ( i == 1 )
+	if ( i == 1 || ( (const char*)request("_APPL") &&
+        strcmp((const char*)request("_APPL"),"macro") == 0 ) )
 		return true;
 
 	return false;
diff --git a/src/uPlot/ObjectList.h b/src/uPlot/ObjectList.h
index 8c0beb3..943f457 100644
--- a/src/uPlot/ObjectList.h
+++ b/src/uPlot/ObjectList.h
@@ -86,39 +86,40 @@ public:
 
 	static MvRequest ExpandRequest ( const MvRequest&, long );
 
-	// Create a request in case there isn't one
-	static MvRequest CreateDefaultRequest( const char*, int expandFlag=EXPAND_DEFAULTS );
-
-	// Check objects
-	static bool IsDataUnit			( const Cached& );
-	static bool IsImage				( const char* );
-	static bool IsService			( const char*, const char* action=0, bool context=false );
-	static bool IsDefaultValue		( MvRequest&, const char * );
-	static bool IsWindow			( const Cached& );
-	static bool IsView				( const Cached& );
-    static bool IsGeographicalView  ( const string& );
-	static bool IsVisDef			( const Cached& );
-	static bool IsVisDefContour		( const char* );
-	static bool IsVisDefIsotachs    ( const MvRequest& );
-	static bool IsVisDefCoastlines	( const Cached& );
-	static bool IsVisDefText        ( const Cached& );
-	static bool IsVisDefLegend		( const Cached& );
-	static bool IsVisDefAxis        ( const Cached& );
-	static bool IsVisDefGraph		( const Cached& );
-	static bool IsAutomaticTitleText( const MvRequest& );
-    static bool IsLayer             ( const char* );
-	static bool CalledFromMacro		( const MvRequest& );
-
-	static Cached MacroName ( const Cached& iconClass   );
-	static void GetCompanion ( const string&, string&, string& );
+   // Create a request in case there isn't one.
+   // expandFlag = 0 means use the expand flag value from the ObjectList.
+   static MvRequest CreateDefaultRequest( const char*, int expandFlag=0 );
+
+   // Check objects
+   static bool IsDataUnit ( const Cached& );
+   static bool IsImage ( const char* );
+   static bool IsService ( const char*, const char* action=0, bool context=false );
+   static bool IsDefaultValue ( MvRequest&, const char * );
+   static bool IsWindow ( const Cached& );
+   static bool IsView ( const Cached& );
+   static bool IsGeographicalView ( const string& );
+   static bool IsVisDef ( const Cached& );
+   static bool IsVisDefContour ( const char* );
+   static bool IsVisDefIsotachs ( const MvRequest& );
+   static bool IsVisDefCoastlines ( const Cached& );
+   static bool IsVisDefText ( const Cached& );
+   static bool IsVisDefLegend ( const Cached& );
+   static bool IsVisDefAxis ( const Cached& );
+   static bool IsVisDefGraph ( const Cached& );
+   static bool IsAutomaticTitleText ( const MvRequest& );
+   static bool IsLayer ( const char* );
+   static bool CalledFromMacro ( const MvRequest& );
+
+   static Cached MacroName ( const Cached& iconClass   );
+   static void GetCompanion ( const string&, string&, string& );
 
 private:
 
-	// Contructor
-	ObjectList();
+   // Contructor
+   ObjectList();
 
-	// Destructor
-	~ObjectList();
+   // Destructor
+   ~ObjectList();
 };
 
 #endif
diff --git a/src/uPlot/ObjectSpec.OutputFormats b/src/uPlot/ObjectSpec.OutputFormats
index df2276d..e43a93a 100644
--- a/src/uPlot/ObjectSpec.OutputFormats
+++ b/src/uPlot/ObjectSpec.OutputFormats
@@ -139,6 +139,7 @@ object,
 	check              = False,
 	default_object     = False,
 	type               = File,
+        doubleclick_method = Visualise,
 	pixmap             = '$METVIEW_DIR_SHARE/icons/SVG.icon',
 	default_name       = SVG File,
 	editor_type        = TextEditor
@@ -148,6 +149,7 @@ object,
 	check       	   = False,
 	default_object     = False,
 	type        	   = File,
+        doubleclick_method = Visualise,
 	pixmap      	   = '$METVIEW_DIR_SHARE/icons/PNG.icon',
 	default_name       = PNG File,
 	editor_type 	   = NoEditor
@@ -157,7 +159,8 @@ object,
 	check              = False,
 	default_object     = False,
 	type               = File,
-	pixmap             = '$METVIEW_DIR_SHARE/icons/PDF.icon',
+	doubleclick_method = Visualise,
+        pixmap             = '$METVIEW_DIR_SHARE/icons/PDF.icon',
 	default_name       = PDF File,
 	editor_type        = NoEditor
 
diff --git a/src/uPlot/OutputFormatAction.cc b/src/uPlot/OutputFormatAction.cc
index 569b061..df8b5de 100644
--- a/src/uPlot/OutputFormatAction.cc
+++ b/src/uPlot/OutputFormatAction.cc
@@ -67,12 +67,11 @@ OutputFormatAction::Execute (PmContext& context)
 	// request, such as ODB_MANAGER and NETCDF_MANAGER. So, there
 	// will be no problems to save only the remaining requests.
 	// If this situation changes, this function.will need to be updated.
-	//MvRequest remainingReqs;
-    //remainingReqs.copyFromCurrent(context.InRequest());
+	MvRequest remainingReqs;
+    remainingReqs.copyFromCurrent(context.InRequest());
 
     // Update context
-	//context.Update(remainingReqs);
-	context.SetFirstInRequestToCurrent();
+	context.Update(remainingReqs);
 }
 
 //
diff --git a/src/uPlot/Page.cc b/src/uPlot/Page.cc
index f92d565..d5bc5a2 100644
--- a/src/uPlot/Page.cc
+++ b/src/uPlot/Page.cc
@@ -69,11 +69,8 @@ Page::Page ( MvRequest& pageRequest ):
    if ( !viewClass || ObjectList::IsView ( viewClass ) == false )
    {
       viewRequest = ObjectList::CreateDefaultRequest ( DEFAULTVIEW.c_str(), EXPAND_NO_DEFAULT );
-      string name = "<" + DEFAULTVIEW + ">";
-      viewRequest ( "_NAME" )    = name.c_str();
-      viewRequest ( "_DEFAULT" ) = true;
-      pageRequest ( "VIEW" )     = viewRequest;
-      myRequest_  ( "VIEW" )     = viewRequest;
+      pageRequest ( "VIEW" ) = viewRequest;
+      myRequest_  ( "VIEW" ) = viewRequest;
    }
 
    // Create a view associated to the page
@@ -318,41 +315,6 @@ Page::DrawForeground ( Canvas& canvas, bool emptyFore )
 }
 #endif
 
-// Draw Page Text, i.e. Annotation Only
-void
-Page::DrawText ( )
-{
-	// Retrieve the graphics engine
-	GraphicsEngine& ge = this->GetGraphicsEngine();
-
-	// Draw the texts associated to this page
-	MvIconList textList;
-	RetrieveTextList ( textList );
-
-	// Look for Non Title Texts
-	MvListCursor  vdCursor;
-	for ( vdCursor = textList.begin(); vdCursor != textList.end(); ++vdCursor)
-	{		
-		MvIcon oneIcon = *( vdCursor );
-		MvRequest textRequest = oneIcon.Request();
-		if ( textRequest.getVerb() == ANNOTATION )
-		{
-			// make sure that option TEXT_TYPE is not passed to MAGICS
-//			textRequest.unsetParam("TEXT_TYPE");
-//			textRequest ( "_VERB" )  = PTEXT;
-//			textRequest ( "_CLASS" ) = PTEXT;
-
-			// It is necessary, because Annotation has default
-			// values different from Title (ex: TEXT_MODE)
-			textRequest = ObjectList::ExpandRequest(textRequest,EXPAND_DEFAULTS);
-			// Magics needs PTEXT verb, not ANNOTATION verb
-			textRequest.setVerb ( "PTEXT" );
-
-			ge.Draw ( textRequest );
-		}
-	}
-}
-
 #if 0
 bool
 Page::FindView(string viewName)
@@ -578,7 +540,8 @@ Page::InsertVisDefFromWindow (MvRequest& vdRequestList, MvIcon& dataUnit)
 	  MvIconDataBase&   dataBase = this->IconDataBase();
 	  MvIconList duList;
 	  bool found = false;
-	  if ( dataBase.DataUnitListByPresentableId (Id(),duList) )
+	  //if ( dataBase.DataUnitListByPresentableId (Id(),duList) )
+     if ( dataBase.RetrieveIcon (PRES_DATAUNIT_REL,Id(),duList) )
 	    {
 	      MvListCursor duCursor;
 	      // Process visdefs for each dataunit
@@ -865,8 +828,7 @@ Page::UpdateDataForZoom(const string& /*zoomInfo*/)
 			  	pres->SetRequest(result);
 
 				MvIconDataBase&  dataBase = pres->IconDataBase();
-				dataBase.UpdateDataUnit(dataUnit.Id(),result);
-            //dataBase.UpdateIcon(DB_DATAUNIT,dataUnit.Id(),result);
+				dataBase.UpdateIcon(DB_DATAUNIT,dataUnit.Id(),result);
 			}
 		} 
 	}			  
@@ -1657,21 +1619,7 @@ Page::CheckValidVisDef ( MvIcon& dataUnit, MvRequest& vdRequest )
 bool
 Page::CanDoZoom ()
 {
-	if ( this->HasProjection() == false )
-	{
-//		Cached message ("No projection associated to this plotting" );
-//		PlotMod::MetviewError( (const char*) message );
-		return false;
-	}
-
-	if ( projection_->CanDoZoom() == false )
-	{
-//		Cached message ("Change coordinates not available" );
-//		PlotMod::MetviewError( (const char*)message, (const char*)projection_->Name() );
-		return false;
-	}
-
-	return true;
+   return myView_->CanDoZoom();
 }
 
 #if 0
diff --git a/src/uPlot/Page.h b/src/uPlot/Page.h
index e442742..0b43648 100644
--- a/src/uPlot/Page.h
+++ b/src/uPlot/Page.h
@@ -52,50 +52,44 @@ class Page : public Presentable {
 
 public:
 
-        // Constructors
-        Page(MvRequest& pageRequest);
-	Page(const Page&);
-        virtual Presentable* Clone() const { return new Page(*this); }
+   // Constructors
+   Page(MvRequest& pageRequest);
+   Page(const Page&);
+   virtual Presentable* Clone() const { return new Page(*this); }
 
-        // Destructor
-	~Page();
+   // Destructor
+   ~Page();
 
-        // Methods
-        // Overriden from Presentable class
+   // Methods
+   // Overriden from Presentable class
 
-	// Return my name
-	virtual string Name();
-	
-	virtual bool IsVisible()
-		{ return true; }
+   // Return my name
+   virtual string Name();
 
-//	virtual void Save ();
-	// Save the contents of the page
+   virtual bool IsVisible()
+      { return true; }
 
-        virtual void Draw ();
-	// Draw me and all my children
-	
-        virtual void DrawProlog ();
-        //	draws the presentable
+   // Draw me and all my children
+   virtual void Draw ();
 
-	// Draw page header
-        virtual void DrawPageHeader ();
+   //  draws the presentable
+   virtual void DrawProlog ();
 
-        // Register to draw trailer later
-        virtual void RegisterDrawTrailer ();
+   // Draw page header
+   virtual void DrawPageHeader ();
 
-	// Draw Positional Text Only, Title text is drawn by SubPage
-        virtual void DrawText ( );
+   // Register to draw trailer later
+   virtual void RegisterDrawTrailer ();
 
-	// Respond to a drop action
-	virtual void Drop ( PmContext& context );
+   // Respond to a drop action
+   virtual void Drop ( PmContext& context );
 
-	// Return the graphics engine (one per page)
-	virtual GraphicsEngine& GetGraphicsEngine() const
-		{ return *engine_; }
+   // Return the graphics engine (one per page)
+   virtual GraphicsEngine& GetGraphicsEngine() const
+      { return *engine_; }
 
-	// Accept a visitor
-	virtual void Visit ( Visitor& v );
+   // Accept a visitor
+   virtual void Visit ( Visitor& v );
 
 #if 0
 	virtual void DrawBackground ( Canvas& canvas, bool emptyBack = false );
diff --git a/src/uPlot/PlotMod.cc b/src/uPlot/PlotMod.cc
index 3803be1..03f2f8c 100644
--- a/src/uPlot/PlotMod.cc
+++ b/src/uPlot/PlotMod.cc
@@ -206,12 +206,9 @@ void PlotMod::MetviewError ( const string & message, const string & errorlevel )
     if ( errorlevel.length() )
     {
         fullMsg = errorlevel + ": ";
-        
-        if (errorlevel == "Warn")
-        {
-            priority = true;
-        }
 
+        if (errorlevel == "Warn" || errorlevel == "WARNING")
+            priority = true;
         else if (errorlevel == "Error")
         {
             priority = true;
@@ -219,15 +216,13 @@ void PlotMod::MetviewError ( const string & message, const string & errorlevel )
         }
     }
 
-
     fullMsg += message;
     printMessage(fullMsg, priority);
 
+    UserMessage(fullMsg);
 
     if (exit)
-    {
         exitWithError();
-    }
 }
 
 
@@ -235,7 +230,6 @@ void PlotMod::MetviewError ( const string & message, const string & errorlevel )
 void PlotMod::exitWithError()
 {
     svc *service = MvApplication::instance().getService();
-    
     if (service != NULL)
     {
         set_svc_err(service->id,1);
diff --git a/src/uPlot/PlotModView.cc b/src/uPlot/PlotModView.cc
index 20eaee0..308b669 100644
--- a/src/uPlot/PlotModView.cc
+++ b/src/uPlot/PlotModView.cc
@@ -186,88 +186,6 @@ void PlotModView::CommonDraw(SubPage *subPage,DrawPriorMap &drawPriorMap)
 		// Set draw actions: data + visdef
 		treeNode->DrawDataVisDef();
 	}
-
-#if 0 //FAMI Old code 20100922
-  MvIconDataBase&  dataBase = Owner().IconDataBase();
-
-  if ( subPage->NrOfChildren() == 0 )
-    {
-//D      if ( subPage->IsAWindow () )
-//D	return;
-	    cout << "Nr of Children = 0" << endl;
-    }
-
-  // Retrieve the Graphics Engine
-//D0210  GraphicsEngine& ge = subPage->GetGraphicsEngine();
-
-  Canvas &canvas = subPage->GetCanvas();
-
-  DrawPriorMap::iterator j;
-  bool first = true;
-  int lastDO, currentDO;
-  MvIcon dataUnit;
-  for ( j = drawPriorMap.begin(); j != drawPriorMap.end(); ++j )
-  {
-      if ( first )
-	lastDO = ((*j).second).first;
-
-      // Get DataObject ID
-      currentDO = ((*j).second).first;
-      Presentable*  treeNode = Root::Instance().FindBranch ( currentDO );
-      if ( treeNode == 0 )
-      {
-	  PlotMod::Instance().SystemError ( "PlotModView::CommonDraw -> treeNode == 0" );
-	  return;
-      }
-
-      // If the draw exist, don't draw again
-      string dataString = (*j).first;
-      if ( ! canvas.HasSegment ( subPage->Id (), dataString ) )
-      {
-
-	  MvIcon tmpVisDef;
-	  if ( ! dataBase.RetrieveVisDef( ((*j).second).second, tmpVisDef) )
-	  {
-	      PlotMod::Instance().SystemError ( "PlotModView::CommonDraw -> can't find given visdef id" );
-	      continue;
-	  }
-
-//D	  if ( subPage->IsAWindow () )
-//D	    {
-//D	      ge.StartPicture ( canvas, dataString.c_str(),
-//D				treeNode->Id() );
-//D	      
-//D	      this->DrawNewPage ( canvas );
-//D	    }
-
-	  if ( ! first && currentDO == lastDO )
-	  {
-	      int currentDataUnitId = ((DataObject *)treeNode)->DataUnitId();
-	      map<int,MvRequest>::iterator ii = resetMap.find(currentDataUnitId);
-	      if ( ii != resetMap.end() )
-	      {
-		  if ( dataBase.RetrieveDataUnit( currentDataUnitId , dataUnit) )
-		    dataUnit.SaveRequest((*ii).second);
-	      }
-	  }
-
-	  treeNode->DrawVisDef (tmpVisDef, dataString);
-
-//D	  if ( subPage->IsAWindow () )
-//D	    {
-//D	      this->DrawFrame ( canvas );
-	      
-//D				// terminate the drawing
-//D	      ge.EndPicture ();
-	      
-//D	      subPage->PendingDrawingsAdd();
-//D	    }
-      }
-      first = false;
-      lastDO = currentDO;
-    }
-#endif
-
 }
 
 #if 0
@@ -315,7 +233,8 @@ void PlotModView::RecreateData()
 	MvIconList duList;
 
 	// Get all data units and resend them to plotmod.
-	dataBase.DataUnitListByPresentableId(Owner().Id(), duList);
+	//dataBase.DataUnitListByPresentableId(Owner().Id(), duList);
+   dataBase.RetrieveIcon(PRES_DATAUNIT_REL, Owner().Id(), duList);
 
 	MvListCursor ii;
 	for ( ii = duList.begin(); ii != duList.end(); ii++ )
diff --git a/src/uPlot/PlotModView.h b/src/uPlot/PlotModView.h
index adbc251..75881d5 100644
--- a/src/uPlot/PlotModView.h
+++ b/src/uPlot/PlotModView.h
@@ -137,7 +137,7 @@ public:
 	virtual void UpdateView ( MvRequest& viewRequest) = 0;
 
     // Replace the current view depending on the type of the view
-    virtual void UpdateView () {}
+    virtual bool UpdateView () { return true; }
 
 	// Replace the current geographical area
 	//virtual void ReplaceArea ( const Location&, int /* izoom=-1 */ ) {}
@@ -207,6 +207,9 @@ public:
         virtual bool Reset(const MvRequest &)
 		{ return false; }
 
+   // Zoom inquiry
+   virtual bool CanDoZoom() { return true; }
+
 protected:
 
 	Page* owner_;
diff --git a/src/uPlot/PlotPageBuilder.cc b/src/uPlot/PlotPageBuilder.cc
index 0872c10..4d0a4f4 100644
--- a/src/uPlot/PlotPageBuilder.cc
+++ b/src/uPlot/PlotPageBuilder.cc
@@ -73,15 +73,6 @@ PlotPageBuilder::Execute (PmContext& context)
 	{
 		defaultSuperPage = ObjectList::CreateDefaultRequest ( "PLOT_SUPERPAGE" );
 
-		// Make sure the macro is generated in current dir, even when defaults are used.
-		const char *val;
-		if ( ( val =  context.InRequest()("_NAME")) )
-		{
-			string newName = dirname(val);
-			newName  += "/<Display Window>";
-			defaultSuperPage("_NAME") = newName.c_str();
-		}
-
 		if ( strcmp(verb,PLOTPAGE) == 0 )
 			defaultSuperPage("PAGES") = context.InRequest();
 		else  if ( ObjectList::IsView(verb) )  // View
diff --git a/src/uPlot/PmContext.h b/src/uPlot/PmContext.h
index 241934b..664a729 100644
--- a/src/uPlot/PmContext.h
+++ b/src/uPlot/PmContext.h
@@ -112,9 +112,6 @@ public:
      // that has been processed.
      void Update(const MvRequest &changedReq) { inRequest_ = changedReq; }
 
-     // Quick way to 'fast-forward' the in request to the current request
-     void SetFirstInRequestToCurrent() {inRequest_.setFirstToCurrent();};
-
      void DropX(double x) { dropX_ = x; }
      double DropX() { return dropX_; } 
 
diff --git a/src/uPlot/PmProjection.cc b/src/uPlot/PmProjection.cc
index ce159be..6ae66c0 100644
--- a/src/uPlot/PmProjection.cc
+++ b/src/uPlot/PmProjection.cc
@@ -111,7 +111,7 @@ PmProjection :: PmProjection ( const MvRequest& viewRequest )
 {
 	// Get the projection name. If it does not exist in the request, 
 	// expand the request to search for the default projection name
-	MvRequest tmpReq(viewRequest);
+	MvRequest tmpReq = viewRequest;
 	Pname = tmpReq ("MAP_PROJECTION");
 	if ( !Pname )
 	{
diff --git a/src/uPlot/Presentable.cc b/src/uPlot/Presentable.cc
index e4836fe..bc47d18 100644
--- a/src/uPlot/Presentable.cc
+++ b/src/uPlot/Presentable.cc
@@ -476,7 +476,8 @@ Presentable::RemoveMyData()
 
    // Remove Data Units
    MvIconList duList;
-   if ( iconDataBase.DataUnitListByPresentableId ( this->Id(), duList ) )
+   //if ( iconDataBase.DataUnitListByPresentableId ( this->Id(), duList ) )
+   if ( iconDataBase.RetrieveIcon ( PRES_DATAUNIT_REL, this->Id(), duList ) )
    {
       MvListCursor  duCursor;
       for ( duCursor = duList.begin(); duCursor != duList.end(); ++duCursor)
@@ -489,7 +490,8 @@ Presentable::RemoveMyData()
 
    // Remove PTexts
    MvIconList ptList;
-   if ( iconDataBase.TextListByPresentableId ( this->Id(), ptList ) )
+   //if ( iconDataBase.TextListByPresentableId ( this->Id(), ptList ) )
+   if ( iconDataBase.RetrieveIcon ( PRES_TEXT_REL, this->Id(), ptList ) )
    {
       MvListCursor  ptCursor;
       for ( ptCursor = ptList.begin(); ptCursor != ptList.end(); ++ptCursor)
@@ -754,7 +756,8 @@ Presentable::DefaultVisDefList ( const char* className, MvIconList& visdefList,
 	if ( type == GETBYVISDEF )
 	{
 	    MvIconList tmpList;
-	    iconDataBase.VisDefListByPresentableId(presentableId_,tmpList);
+	    //iconDataBase.VisDefListByPresentableId(presentableId_,tmpList);
+       iconDataBase.RetrieveIcon(PRES_VISDEF_REL,presentableId_,tmpList);
 	    MvListCursor ii;
 	    MvIcon currentVisDef;
 	    for ( ii = tmpList.begin(); ii != tmpList.end(); ii++ )
@@ -809,68 +812,24 @@ Presentable::DefaultVisDefList ( const char* className, MvIconList& visdefList,
 
 // -- METHOD  :  RetrieveTextList
 //
-// -- PURPOSE : This method will retrieve the Text list 
-//              associated to the node
-//
-//         Two routines will be called :
-//         1. RetrieveTextTitle : retrieve the first title text in the tree
-//         2. RetrievePTextAnnot : retrieve all the texts - type
-//            annotation - in the tree
-void
-Presentable::RetrieveTextList ( MvIconList& textList )
-{
-	require (textList.size() == 0);
- 
-	RetrieveTextTitle(textList);
-	RetrievePTextAnnot(textList);
-
-	ensure(textList.size() > 0);
-
-	return;
-}
-
-// -- METHOD  :  RetrieveTextTitle
-//
-// -- PURPOSE : This method will retrieve the Text title associated to a presentable
-//
-//         If there is no Text title associated to the
-//         presentable, this method will go up the tree
-//         until the Root treeNode (the top of the tree)
-//         that will retrieve the user's default Text title.
+// -- PURPOSE : This method will retrieve the Text list associated to a presentable.
+//              If there is no Text associated to the presentable, this method will
+//              go up the tree until the Root treeNode (the top of the tree) that will
+//              retrieve the user's default Text title.
 bool
-Presentable::RetrieveTextTitle ( MvIconList& textList )
-{
-        bool usingDefault = false;
-	string type("TEXT");
-
-	// Try to find a ptext associated to the presentable
-	MvIconDataBase& dataBase = this->IconDataBase();
-	if (!dataBase.TextListByPresentableId ( presentableId_, textList, type))
-		usingDefault = myParent_->RetrieveTextTitle(textList);
-
-	ensure(textList.size() > 0);
-
-	return usingDefault;
-}
-
-// -- METHOD  :  RetrievePTextAnnot
-//
-// -- PURPOSE : This method will retrieve all the PText - type annotation - 
-//              presented in the tree
-//
-bool
-Presentable::RetrievePTextAnnot ( MvIconList& ptextList )
+Presentable::RetrieveTextList ( MvIconList& textList )
 {
-	bool foundP,foundL;
-	string type("ANNOTATION");
+   require (textList.size() == 0);
+   bool usingDefault = false;
 
-	// Try to find a ptext associated to the presentable
-	MvIconDataBase& dataBase = this->IconDataBase();
-	foundL = dataBase.TextListByPresentableId ( presentableId_, ptextList, type);
+   // Try to find a ptext associated to the presentable
+   MvIconDataBase& dataBase = this->IconDataBase();
+   if (!dataBase.RetrieveIcon ( PRES_TEXT_REL, presentableId_, textList ))
+      usingDefault = myParent_->RetrieveTextList(textList);
 
-	foundP = myParent_->RetrievePTextAnnot(ptextList);
+   ensure(textList.size() > 0);
 
-	return (foundP | foundL);
+   return usingDefault;
 }
 
 // -- METHOD  :  RetrieveLegend
@@ -1115,15 +1074,18 @@ Presentable::DescribeDrops ( ObjectInfo& myDescription, MacroVisDefMap& vdMap )
 
 	// Find any ptexts associated with the presentable.
 	MvIconList ptextList;
-	dataBase.TextListByPresentableId ( Id(), ptextList );
+	//dataBase.TextListByPresentableId ( Id(), ptextList );
+   dataBase.RetrieveIcon ( PRES_TEXT_REL, Id(), ptextList );
 
 	// Find the list of Visdefs associated to the presentable
 	MvIconList visdefList;
-	dataBase.VisDefListByPresentableId ( Id(), visdefList );
+	//dataBase.VisDefListByPresentableId ( Id(), visdefList );
+   dataBase.RetrieveIcon(PRES_VISDEF_REL, Id(), visdefList );
 
 	// Find the list of data units associated to the presentable
 	MvIconList dataUnitList;
-	dataBase.DataUnitListByPresentableId ( Id(), dataUnitList );
+	//dataBase.DataUnitListByPresentableId ( Id(), dataUnitList );
+   dataBase.RetrieveIcon ( PRES_DATAUNIT_REL, Id(), dataUnitList );
 
 	// Get an indexed name for the page. Need to be called even if
 	// there are no drops, beacuse it updates the index.
@@ -1289,14 +1251,9 @@ Presentable::InsertPText (  MvRequest& textRequest )
    // Retrieve the Icon Data Base
    MvIconDataBase& dataBase = this->IconDataBase();
 
-   if ( textRequest.getVerb() == ANNOTATION )
-   {
-       // Acumulate positional texts in the list
-       dataBase.InsertText ( textRequest, presentableId_  );
-   }
-   else
-       // there should be only one title text in the list
-       dataBase.UpdateTitleText ( textRequest, presentableId_ );
+   // Acumulate positional texts in the list
+   MvIcon text ( textRequest, true );
+   dataBase.InsertIcon ( PRES_TEXT_REL, presentableId_, text);
 
    // Redraw this page
    RedrawIfWindow();
diff --git a/src/uPlot/Presentable.h b/src/uPlot/Presentable.h
index 9588b65..7089b4d 100644
--- a/src/uPlot/Presentable.h
+++ b/src/uPlot/Presentable.h
@@ -461,18 +461,11 @@ public:
         virtual bool CheckValidVisDef(MvIcon &,MvRequest&)
 		{ return true; }
 
-	// Retrieve the Text list associated to the node
-	virtual void RetrieveTextList ( MvIconList& );
+   // Retrieve the Text list associated to the node
+   virtual bool RetrieveTextList ( MvIconList& );
 
-	// Retrieve the Text Title list associated to the node
-	virtual bool RetrieveTextTitle ( MvIconList& );
-
-	// Retrieve the PText list - type annotation - associated 
-	// to the PlotMod
-	virtual bool RetrievePTextAnnot ( MvIconList& ptList );
-
-	// Retrieve the Legend associated to the tree
-	virtual bool RetrieveLegend ( MvIcon& );
+   // Retrieve the Legend associated to the tree
+   virtual bool RetrieveLegend ( MvIcon& );
 
 	// Retrieves the icon database associated to the
 	// tree branch (normally, a superpage)
diff --git a/src/uPlot/Root.cc b/src/uPlot/Root.cc
index 05dc79f..ed622fd 100644
--- a/src/uPlot/Root.cc
+++ b/src/uPlot/Root.cc
@@ -42,8 +42,7 @@ Root::DefaultVisDefList (const char* className, MvIconList& visdefList, int type
 	require (visdefList.size() == 0); // visdefList should be empty
 	require (className != 0);
 
-	// Find out the name of the default VisDef(s)
-	// associated to the data unit
+   // Find out the name of the default VisDef(s) associated to the data unit
 	string str;
 	if ( type == GETBYVISDEF )
 	  	str = className;
@@ -65,13 +64,7 @@ Root::DefaultVisDefList (const char* className, MvIconList& visdefList, int type
           MvRequest visdefRequest = ObjectList::UserDefaultRequest ( str1.c_str() );
 
           // Now we have all the information to create the VisDef
-          // Create the visdef
-          MvRequest expandedRequest = ObjectList::ExpandRequest ( visdefRequest, 0  );
-          Cached name = ObjectList::Find("object",str1.c_str(),"default_name");
-          expandedRequest( "_NAME" )  = Cached("<") + name + Cached(">");
-          expandedRequest( "_CLASS" ) = str1.c_str();
-          expandedRequest("_DEFAULT") = true;
-          MvIcon newVisDef ( expandedRequest );
+      MvIcon newVisDef ( visdefRequest );
 
           // Insert the visdef into the list
           visdefList.push_back(newVisDef);
@@ -84,40 +77,22 @@ Root::DefaultVisDefList (const char* className, MvIconList& visdefList, int type
 	return true; // Using default
 }
 
-bool Root::RetrieveTextTitle ( MvIconList& textList )
+bool Root::RetrieveTextList ( MvIconList& textList )
 {
-	// Initialises the text request with an empty ptext
-        // this is used to plot the default text
-	MvRequest textRequest( "MTEXT" );
-//	MvRequest expandedRequest = ObjectList::ExpandRequest(textRequest,EXPAND_DEFAULTS);
+   // Create a default request
+   MvRequest textRequest = ObjectList::CreateDefaultRequest("MTEXT");
 
-	Cached name = ObjectList::Find("object","MTEXT","default_name");
-	textRequest( "_NAME" )  = Cached("<") + name + Cached(">");
-	textRequest( "_CLASS" ) = Cached("MTEXT");
-	textRequest("_DEFAULT") = true;
-
-	// Insert the ptext into the list
+   // Insert the text into the list
 	MvIcon newText ( textRequest,true );
 	textList.push_back( newText );
 
-	ensure(textList.size() > 0);
-
-	return true; // Using default
+   return true;
 }
 
 bool Root::RetrieveLegend ( MvIcon& legIcon )
 {
-    // Initialises the legend request with an empty legend
-    // this is used to plot the default legend
-    MvRequest legRequest( "MLEGEND" );
-
-    const char* defName = ObjectList::Find("object","MLEGEND","default_name");
-    string name = "<";
-    name += defName;
-    name += ">";
-    legRequest( "_NAME" )  = name.c_str();
-    legRequest( "_CLASS" ) = "MLEGEND";
-    legRequest("_DEFAULT") = true;
+   // Create a default request
+   MvRequest legRequest = ObjectList::CreateDefaultRequest("MLEGEND");
 
     // Copy the default request to the icon.
     // Make sure that the icon has an ID; otherwise, create a new one.
@@ -129,7 +104,7 @@ bool Root::RetrieveLegend ( MvIcon& legIcon )
         legIcon = auxIcon;
     }
 
-    return true; // Using default
+   return true;
 }
 
 Presentable* Root::FindSuperPage( int index )
@@ -229,7 +204,7 @@ void Root::DrawTrailer()
      }
 
      // Second request are the output devices
-     fullReq += PlotMod::Instance().OutputFormat()("OUTPUT_DEVICES");
+//     fullReq = fullReq + PlotMod::Instance().OutputFormat()("OUTPUT_DEVICES");
 
      // Get children requests
      MvChildIterator child;
diff --git a/src/uPlot/Root.h b/src/uPlot/Root.h
index 0ccf3d9..092bb94 100644
--- a/src/uPlot/Root.h
+++ b/src/uPlot/Root.h
@@ -76,15 +76,11 @@ public:
         // Returns the default visdef list for the data unit or visdef name
 	virtual bool DefaultVisDefList (const char* className, MvIconList& visdefList, int type);
 
-	// Returns the default ptext list - type title
-	virtual bool RetrieveTextTitle ( MvIconList& ptextList );
+   // Returns the default text list
+   virtual bool RetrieveTextList ( MvIconList& );
 
-	// Returns the default (empty) ptext list - type annotation
-	virtual bool RetrievePTextAnnot ( MvIconList&  )
-		{return false;}
-
-	// Returns the default legend
-	bool RetrieveLegend ( MvIcon& legIcon );
+   // Returns the default legend
+   bool RetrieveLegend ( MvIcon& );
 
 	// Returns the superpage 
 	Presentable* FindSuperPage (int index=-1);
diff --git a/src/uPlot/SubPage.cc b/src/uPlot/SubPage.cc
index 5859520..6e3b0a9 100644
--- a/src/uPlot/SubPage.cc
+++ b/src/uPlot/SubPage.cc
@@ -101,7 +101,7 @@ SubPage::InsertDataUnit ( int dataunitId, long offset, long offset2, const Match
 
 	// Insert the data in the the subpage IconDataBase
 	MvIconDataBase&   iconDataBase = this->IconDataBase();
-	iconDataBase.PresentableDataUnitRelation (presentableId_, dataunitId);
+   iconDataBase.InsertIconRelation (PRES_DATAUNIT_REL,presentableId_, dataunitId);
 
 	// Indicate that the subpage has found a match
 	this->MatchFound();
@@ -137,7 +137,8 @@ SubPage::RemoveIcon ( MvIcon& icon )
 
 			MvIcon dataUnit;
 			MvChildIterator foundChild;
-			iconDataBase.RetrieveDataUnit( dataObj->DataUnitId(), dataUnit);
+			//iconDataBase.RetrieveDataUnit( dataObj->DataUnitId(), dataUnit);
+         iconDataBase.RetrieveIconFromList( DB_DATAUNIT, dataObj->DataUnitId(), dataUnit);
 			if ( dataUnit.Id() == icon.Id() ||
 			     dataUnit.ParentId() == icon.Id())
 			{
@@ -277,11 +278,8 @@ SubPage::Draw ()
 
 	view.DrawForeground ( );
 
-	// Ask my parent to draw positional text
-	myParent_->DrawText ();
-
 	// Draw title text and legend
-	this->DrawText ( );
+   this->DrawText ( );
 	this->DrawLegend ( );
 	
 	// terminate the drawing
@@ -406,64 +404,32 @@ SubPage::DrawForeground ( Canvas &, bool )
 }
 #endif
 
-// Draw SubPage Text, i.e. Title Text Only
+// Draw SubPage Text
 void
 SubPage::DrawText ( )
 {
-#if 0 //D
-	// To avoid redrawing
- 	if ( ! hasTitleDraw_ )
-		hasTitleDraw_ = true;
-	else
-	{
-		this->NotifyObservers ();
-		return;
-	}
-#endif
+   // Retrieve the texts associated to this page
+   MvIconList textList;
+   RetrieveTextList ( textList );
 
-	// Retrieve the texts associated to this page
-	MvIconList textList;
-	RetrieveTextList ( textList );
+   // Retreive the graphics engine
+   GraphicsEngine& ge = this->GetGraphicsEngine();
 
-	// Look for Title Text
-	MvRequest pageTextRequest;
-	MvListCursor vdCursor;
-	for ( vdCursor = textList.begin(); vdCursor != textList.end(); ++vdCursor)
-	{
-		MvIcon oneIcon = *( vdCursor );
-		pageTextRequest = oneIcon.Request();
+   // Draw all texts
+   MvListCursor vdCursor;
+   for ( vdCursor = textList.begin(); vdCursor != textList.end(); ++vdCursor)
+   {
+      MvIcon oneIcon = *( vdCursor );
+      MvRequest textRequest = oneIcon.Request();
 
-		// Remember: there is only one Title Text for each page
-		if ( pageTextRequest.getVerb() != ANNOTATION )
-			break;
-	}
+      // Draw the layer
+      DrawLayerInfo( (int)textRequest("_ID") );
 
-	if ( vdCursor == textList.end() )
-		return;
+      // Draw the title
+      ge.Draw ( textRequest, true );
+   }
 
-	// Title Text found, draw the layer info
-    DrawLayerInfo( (int)pageTextRequest("_ID") );
-
-    // Draw the title
-	GraphicsEngine& ge = this->GetGraphicsEngine();
-
-//D	MvRequest textRequest( "MTEXT" );
-//D	CopySomeParameters( pageTextRequest, textRequest, "TEXT" );
-//D	CopySomeParameters( pageTextRequest, textRequest, "LEGEND" );
-
-#if 0 //D
-		int i = 1;//     virtual void DrawTrailer();
-
-		int j = 1;
-		for ( MvChildIterator child = childList_.begin();
-		      child != childList_.end(); ++child )
-		{
-			DataObject* dataObj = (DataObject*) (*child);
-			dataObj->GetTitle  ( textRequest, &i );
-			dataObj->GetLegend ( textRequest, &j );
-		}
-#endif
-	ge.DrawText ( pageTextRequest );
+   return;
 }
 
 // Draw SubPage Legend
@@ -481,7 +447,7 @@ SubPage::DrawLegend ( )
 	// Draw legend
     MvRequest legRequest = legIcon.Request();
 	GraphicsEngine& ge = this->GetGraphicsEngine();
-	ge.DrawLegend ( legRequest );
+	ge.Draw ( legRequest, true );
 }
 
 #if 0
@@ -736,7 +702,8 @@ SubPage::CheckValidVisDef ( MvIcon& dataUnit, MvRequest& vdRequest, int ndimFlag
 
         // Get corresponding dataunit
         MvIcon currentdu;
-        dataBase.RetrieveDataUnit(dataObj->DataUnitId(),currentdu);
+        //dataBase.RetrieveDataUnit(dataObj->DataUnitId(),currentdu);
+        dataBase.RetrieveIconFromList(DB_DATAUNIT,dataObj->DataUnitId(),currentdu);
 
         // Find the appropriate dataUnit and check if it ( or its parent) matches.
         if ( currentdu.Id()   == dataUnit.Id() || 
diff --git a/src/uPlot/SuperPage.cc b/src/uPlot/SuperPage.cc
index 2230fca..39fb2e3 100644
--- a/src/uPlot/SuperPage.cc
+++ b/src/uPlot/SuperPage.cc
@@ -326,8 +326,18 @@ SuperPage::DrawProlog()
 void
 SuperPage::DrawTrailer( MvRequest& fullReq )
 {
-     // Get all requests
-     GetAllRequests( fullReq );
+   // Nothing to be drawn
+   if ( !this->HasDrawTask () )
+      return;
+
+   // Retrieve from the request the Output Device description
+   fullReq = fullReq + myRequest_("_OUTPUT_DEVICES");
+
+   // Get all requests
+   GetAllRequests( fullReq );
+
+   // Reset the draw task
+   this->HasDrawTask ( false );
 }
 
 void
@@ -991,7 +1001,7 @@ SuperPage::InsertVisDef ( MvRequest& visdefRequest  )
    if (visdefId != 0)
    {
       // Visdef already exists in the data base replace in data base
-      dataBase.UpdateVisDef ( visdefId, visdefRequest );
+      dataBase.UpdateIcon ( DB_VISDEF, visdefId, visdefRequest );
       EraseDraw(visdefId);
    }
    else
@@ -1104,39 +1114,35 @@ SuperPage::SetInputPresentableId ( int presentableId )
 }
 #endif
 
-// -- METHOD  :  RetrievePTextTitle
+// -- METHOD  :  RetrieveTextList
 //
-// -- PURPOSE : This method will retrieve the PText list - type ptext
-//
-//         If there is no PTextList it will go up to the Root 
-//         treeNode (the top of the tree) to retrieve
-//         the user's default PText list
-
+// -- PURPOSE : This method will retrieve the Text list. If there is no
+//              TextList it will go up to the Root treeNode (the top of
+//              the tree) to retrieve the user's default Text list.
 bool
-SuperPage::RetrieveTextTitle ( MvIconList& textList )
+SuperPage::RetrieveTextList ( MvIconList& textList )
 {
    bool usingDefault = false;
-	string type("TEXT");
 
-	// Try to find a visdef associated to the presentable
-	if (!iconDataBase_->TextListByPresentableId ( presentableId_, textList, type ))
-		usingDefault = myParent_->RetrieveTextTitle(textList);
+   // Try to find Texts associated to the presentable
+   if (!iconDataBase_->RetrieveIcon ( PRES_TEXT_REL, presentableId_, textList ))
+      usingDefault = myParent_->RetrieveTextList(textList);
 
-	ensure(textList.size() > 0);
+   ensure(textList.size() > 0);
 
-	// It is a Text default and I am the SuperPage
-	// Save Texts default in the DataBase
-	if ( usingDefault )
-	{
-		MvListCursor  vdCursor;
-		for ( vdCursor = textList.begin(); vdCursor != textList.end(); ++vdCursor)
-		{
-			MvIcon& text = *( vdCursor );
-			iconDataBase_->InsertText( text.Request(),presentableId_ );
-		}
-	}
+   // It is a Text default and I am the SuperPage
+   // Save Texts default in the DataBase
+   if ( usingDefault )
+   {
+      MvListCursor  vdCursor;
+      for ( vdCursor = textList.begin(); vdCursor != textList.end(); ++vdCursor)
+      {
+         MvIcon& text = *( vdCursor );
+         iconDataBase_->InsertIcon( PRES_TEXT_REL, presentableId_, text );
+      }
+   }
 
-	return usingDefault;
+   return usingDefault;
 }
 
 // -- METHOD  :  RetrieveLegend
diff --git a/src/uPlot/SuperPage.h b/src/uPlot/SuperPage.h
index 565db80..9d995a9 100644
--- a/src/uPlot/SuperPage.h
+++ b/src/uPlot/SuperPage.h
@@ -185,13 +185,13 @@ public:
 //	virtual void UpdateWidget ( MvRequest& inRequest, const int treeNodeId, int& newTreeNodeId );
 	// Update SuperPage Widget
 
-	// Retrieve the PText list - type title -
-	// If failed, retrieves the root's PText list (default)
-	virtual bool RetrieveTextTitle ( MvIconList& );
+   // Retrieve the PText list.
+   // If failed, retrieves the root's Text list (default)
+   virtual bool RetrieveTextList ( MvIconList& );
 
-	// Retrieve the Legend
-	// If failed, retrieves the root's Legend (default)
-	virtual bool RetrieveLegend ( MvIcon& );
+   // Retrieve the Legend
+   // If failed, retrieves the root's Legend (default)
+   virtual bool RetrieveLegend ( MvIcon& );
 
 	// Zoom methods
 	//virtual void ZoomRequest ( int id, const Location& zoomCoord );
diff --git a/src/uPlot/VertProfView.cc b/src/uPlot/VertProfView.cc
index f78979d..d3204f3 100644
--- a/src/uPlot/VertProfView.cc
+++ b/src/uPlot/VertProfView.cc
@@ -7,118 +7,250 @@
 
  ***************************** LICENSE END *************************************/
 
-// Methods for class VertProfView
-
 #include "VertProfView.h"
+#include <MvRequestUtil.hpp>
 #include "ObjectList.h"
+#include "PlotMod.h"
 #include "Root.h"
 
 //----------------------------------------------------------
-class VertProfViewFactory : public PlotModViewFactory
+static VertProfViewFactory vertprofViewFactoryInstance;
+
+PlotModView*
+VertProfViewFactory::Build ( Page& page,
+                             const MvRequest& contextRequest,
+                             const MvRequest& setupRequest )
 {
-    // --  Virtual Constructor - Builds a new VertProfView
-    virtual PlotModView* Build ( Page& page,
-                                 const MvRequest& contextRequest,
-                                 const MvRequest& setupRequest ) 
-    {
-        // Expand request
-        MvRequest expReq = ObjectList::ExpandRequest(contextRequest,EXPAND_DEFAULTS);
+   // Expand request
+   MvRequest expReq = ObjectList::ExpandRequest(contextRequest,EXPAND_DEFAULTS);
 
-        return new VertProfView ( page, expReq, setupRequest );
-    }
+   // Instantiate a VerticalProfile view
+   return new VertProfView ( page, expReq, setupRequest );
+}
 
-public:
+//--------------------------------------------------------
+static VertProfViewM3Factory vertProfViewM3FactoryInstance;
 
-    VertProfViewFactory() : PlotModViewFactory ( "VertProfView" ) {}
-};
+PlotModView*
+VertProfViewM3Factory::Build ( Page& page,
+                               const MvRequest& contextRequest,
+                               const MvRequest& setupRequest )
+{
+   // Translate view request to Metview 4
+   MvRequest viewM4Req = this->Translate(contextRequest);
 
-static VertProfViewFactory vertprofViewFactoryInstance;
+   // Instantiate a VerticalProfile View
+   return new VertProfView ( page, viewM4Req, setupRequest );
+}
+
+MvRequest
+VertProfViewM3Factory::Translate ( const MvRequest& in )
+{
+   // Send a warning message
+   //PlotMod::Instance().errorMessage("Error Message");
+   //PlotMod::Instance().warningMessage("Warning Message\n");
+   PlotMod::Instance().MetviewError ("The Metview 3 VERTICAL PROFILE VIEW icon is deprecated. An automatic translation to the Metview 4 VERTICAL PROFILE VIEW icon will be performed internally, but may not work for all cases. It is recommended to manually replace the old icons with their new equivalents.","WARNING");
+
+   // Expand request
+   MvRequest req = ObjectList::ExpandRequest(in,EXPAND_DEFAULTS);
+
+   // Copy Input Mode, Pont and Area parameters
+   MvRequest viewReq("MVPROFILEVIEW");
+   viewReq("INPUT_MODE") = (const char*)req("INPUT_MODE");
+   if ( req.countValues("POINT") )
+   {
+      viewReq.addValue("POINT",(double)req("POINT",0));
+      viewReq.addValue("POINT",(double)req("POINT",1));
+   }
+   if ( req.countValues("AREA") )
+   {
+      viewReq.addValue("AREA",(double)req("AREA",0));
+      viewReq.addValue("AREA",(double)req("AREA",1));
+      viewReq.addValue("AREA",(double)req("AREA",2));
+      viewReq.addValue("AREA",(double)req("AREA",3));
+   }
+
+   // Translate Levels interval
+   viewReq("BOTTOM_LEVEL") = (double)req("BOTTOM_PRESSURE");
+   viewReq("TOP_LEVEL")    = (double)req("TOP_PRESSURE");
+
+   // Translate axes parameters
+   viewReq.setValue("LEVEL_AXIS", req.getSubrequest("PRESSURE_AXIS"));
+   viewReq.setValue("VALUE_AXIS", req.getSubrequest("VALUE_AXIS"));
+
+   // Overlay Control parameter is not translated
+   PlotMod::Instance().MetviewError ("The Metview 3 VERTICAL PROFILE VIEW icon is deprecated. Parameter OVERLAY CONTROL will not be internally translated.","WARNING");
 
-//---------------------------------------------------------
+   // Copy Page and Subpage parameters
+   CopySomeParameters ( req,viewReq,"Subpage");
+   CopySomeParameters ( req,viewReq,"Page");
+
+   // Expand output request
+   MvRequest out = ObjectList::ExpandRequest(viewReq,EXPAND_DEFAULTS);
+
+   return out;
+}
+
+//------------------------------------------------------------
 
 VertProfView::VertProfView ( Page& owner,
                              const MvRequest& viewRequest,
-                             const MvRequest& setupRequest ):
-              CommonXSectView ( owner, viewRequest, setupRequest)
+                             const MvRequest& setupRequest ) :
+              CommonXSectView ( owner, viewRequest, setupRequest),
+              xValuesAuto_ (true),
+              xMin_ (0.),
+              xMax_ (100.)
 {
-    ApplicationName("PM_VPROF");
+    ApplicationName("MVPROFILE");
     SetVariables(viewRequest,true);
 }
 
 VertProfView::VertProfView (const VertProfView& old) :
-              CommonXSectView ( old )
+              CommonXSectView ( old ),
+              xValuesAuto_ (true),
+              xMin_ (0.),
+              xMax_ (100.)
 {
 }
 
 string VertProfView::Name()
 {
-    int id =  Owner().Id();
-    string name =  (const char*)ObjectInfo::ObjectName ( viewRequest_, "VertProfView", id );
+   int id =  Owner().Id();
+   string name =  (const char*)ObjectInfo::ObjectName ( viewRequest_, "VProfileView", id );
 
-    return name ;
+   return name;
 }
 
 void VertProfView::DescribeYourself ( ObjectInfo& description )
 {
-#if 0
-  // convert my request to macro
-  set<Cached> skipSet;
- 
-  description.ConvertRequestToMacro ( viewRequest_, PUT_END,
-                      MacroName(),"xsectview",skipSet);
-#endif
+   // Convert my request to macro
+   set<Cached> skipSet;
+   description.ConvertRequestToMacro ( viewRequest_, PUT_END, MacroName().c_str(),"mvertprofview",skipSet);
+   description.PutNewLine (" " );
 }
 
-void VertProfView::SetVariables(const MvRequest &in, bool setMembers)
+void VertProfView::SetVariables(const MvRequest& in, bool setMembers)
 {
-    #if 0
-    char param[10];
-    if ( in.countValues("LINE") )
-        strcpy(param,"LINE");
-    else
-        strcpy(param,"AREA");
-
-    if ( setMembers )
-    {
-        latMin_ = in(param,0);
-        latMax_ = in(param,2);
-        lonMin_ = in(param,1);
-        lonMax_ = in(param,3);
+   string param = ( in.countValues("POINT") ) ? "POINT" : "AREA";
+
+   // Called with a viewRequest
+   if ( setMembers )
+   {
+      if ( in.countValues("POINT") )
+      {
+         latMin_ = latMax_ = in("POINT",0);
+         lonMin_ = lonMax_ = in("POINT",1);
+      }
+      else
+      {
+         latMin_ = in("AREA",0);
+         latMax_ = in("AREA",2);
+         lonMin_ = in("AREA",1);
+         lonMax_ = in("AREA",3);
+      }
     }
-    else
+    else   // Called with a netCDF request
     {
-        viewRequest_.unsetParam("LINE");
-        viewRequest_.addValue("LINE",(double)in(param,0));
-        viewRequest_.addValue("LINE",(double)in(param,1));
-        viewRequest_.addValue("LINE",(double)in(param,2));
-        viewRequest_.addValue("LINE",(double)in(param,3));
+       if ( in.countValues("POINT") )
+       {
+          viewRequest_.unsetParam("POINT");
+          viewRequest_.addValue("POINT",(double)in("POINT",0));
+          viewRequest_.addValue("POINT",(double)in("POINT",1));
+       }
+       else
+       {
+          viewRequest_.unsetParam("AREA");
+          viewRequest_.addValue("AREA",(double)in("AREA",0));
+          viewRequest_.addValue("AREA",(double)in("AREA",1));
+          viewRequest_.addValue("AREA",(double)in("AREA",2));
+          viewRequest_.addValue("AREA",(double)in("AREA",3));
+       }
     }
-    #endif
 }
 
-void VertProfView::UpdateView ()
+bool VertProfView::UpdateView ()
 {
-    if ( string(viewRequest_.getVerb()) == CARTESIANVIEW )
-    {
-        // Delegate the x-axis min/max definition to the data
-        viewRequest_("X_AUTOMATIC") = "on";
-        return;
-    }
+   // It has already been updated
+   if ( string(viewRequest_.getVerb()) == CARTESIANVIEW )
+   {
+      // First drop: data was dropped in an empty View. In this case, if user has not
+      // selected X_MIN/MAX values, update parameter X_AUTOMATIC to ON. Initially, it was
+      // forced to be OFF because MAGICS requires min/max values.
+      if ( xValuesAuto_ &&
+           strcmp( (const char*)viewRequest_("X_AUTOMATIC"), "OFF") == 0
+         )
+           viewRequest_("X_AUTOMATIC") = "ON";
 
-    // Translate X coordinates
-    MvRequest cartView("CARTESIANVIEW");
-    cartView("X_AUTOMATIC")     = "off";
-    cartView("X_AXIS_TYPE")     = "regular";
+      return true;
+   }
 
-    // Translate Y coordinates
-    cartView("Y_AUTOMATIC") = "off";
-    cartView("Y_AXIS_TYPE") = "regular";
-    cartView("Y_MIN")       = yMin_;
-    cartView("Y_MAX")       = yMax_;
+   // Translate X coordinates
+   bool ierror = false;
+   MvRequest cartView("CARTESIANVIEW");
+   cartView("X_AUTOMATIC") = "OFF";
+   cartView("X_AXIS_TYPE") = "REGULAR";
+   int nvals = viewRequest_.countValues("X_MIN_MAX");
+   if ( nvals != 2 )
+      ierror = true;
+   else
+   {
+      // Read X valyes
+      string sx1 = (const char*)viewRequest_("X_MIN_MAX",0);
+      string sx2 = (const char*)viewRequest_("X_MIN_MAX",1);
+      if ( sx1 == "AUTO" && sx2 == "AUTO" )
+      {
+         xValuesAuto_ = true;
+         if ( (const char*)viewRequest_("_DATAATTACHED") &&
+              strcmp((const char*)viewRequest_("_DATAATTACHED"),"YES") == 0 )
+            cartView("X_AUTOMATIC") = "ON";
+      }
+      else if ( sx1 == "AUTO" || sx2 == "AUTO" )
+         ierror = true;
+      else
+      {
+         xValuesAuto_ = false;
+         xMin_ = viewRequest_("X_MIN_MAX",0);
+         xMax_ = viewRequest_("X_MIN_MAX",1);
+         cartView("X_MIN") = xMin_;
+         cartView("X_MAX") = xMax_;
+      }
+   }
+
+   if ( ierror )
+   {
+       PlotMod::Instance().MetviewError ("Icon VERTICAL PROFILE VIEW, parameter X_MIN_MAX, has invalid input values. Please use the default values (AUTO/AUTO) or provide 2 numerical values.","WARNING");
+       return false;
+   }
+
+   // Translate Y coordinates
+   cartView("Y_AUTOMATIC") = "OFF";
+   const char* log = viewRequest_("VERTICAL_SCALING");
+   cartView("Y_AXIS_TYPE") = ( log && strcmp(log,"LOG") == 0) ? "logarithmic" : "REGULAR";
+
+   cartView("Y_MIN") = yMin_;
+   cartView("Y_MAX") = yMax_;
+
+    // Translate axes definitions
+    cartView.setValue("HORIZONTAL_AXIS",viewRequest_.getSubrequest("VALUE_AXIS"));
+    cartView.setValue("VERTICAL_AXIS",viewRequest_.getSubrequest("LEVEL_AXIS"));
+
+    // Copy PAGE and SUBPAGE definition
+    CopySomeParameters( viewRequest_,cartView,"PAGE" );
+    CopySomeParameters( viewRequest_,cartView,"SUBPAGE" );
+
+    // Copy the original request without certain parameteres (to avoid duplication)
+    RemoveParameters( viewRequest_, "VALUE_AXIS" );
+    RemoveParameters( viewRequest_, "LEVEL_AXIS" );
+    RemoveParameters( viewRequest_, "PAGE" );
+    RemoveParameters( viewRequest_, "SUBPAGE" );
+    RemoveParameters( viewRequest_, "_" );
+    cartView("_ORIGINAL_REQUEST") = viewRequest_;
 
     // Update request
     viewRequest_ = cartView;;
 
     // Indicate that the plotting tree needs to be rebuilt
     Root::Instance().Refresh(false);
+
+    return true;
 }
diff --git a/src/uPlot/VertProfView.h b/src/uPlot/VertProfView.h
index 0bc8622..56b8043 100644
--- a/src/uPlot/VertProfView.h
+++ b/src/uPlot/VertProfView.h
@@ -16,7 +16,7 @@
 //    Modified by Fernando Ii 03-2012
 //
 // .SUMMARY:
-//  Describes the VertProfView class, which deals with
+//  Describes the VProfileView class, which deals with
 //  vertical profile application
 //
 // .CLIENTS:
@@ -33,20 +33,55 @@
 //
 //  
 // .COLLABORATORS:
+//  MvRequest - extracts information from the request
 //  MvTask - communication with METVIEW modules
 //
 // .ASCENDENT:
-//  PlotModView, PlotModTable
+//  CommonXSectView
 //
 // .DESCENDENT:
 //
-//
+// .RELATED:
+//  Presentable, SuperPage, Page, DataObject
 //
 #ifndef VertProfView_H
 #define VertProfView_H
 
 #include "CommonXSectView.h"
 
+//---------------------------------------------------------------------
+// VerticalProfile factory definition
+class VertProfViewFactory : public PlotModViewFactory {
+
+   // --  Virtual Constructor - Builds a new VerticalProfile view
+   virtual PlotModView* Build ( Page&, const MvRequest&, const MvRequest& );
+
+public:
+
+   // Constructors
+   VertProfViewFactory() : PlotModViewFactory ( "VProfileView" ) {}
+};
+
+//---------------------------------------------------------------------
+// VerticalProfile factory definition to handle translation from Metview 3 to 4.
+// This should be delete in the future. It is defined here for backwards
+// compatibility.
+class VertProfViewM3Factory : public PlotModViewFactory
+{
+   // --  Virtual Constructor - Builds a new VerticalProfile view
+   virtual PlotModView* Build ( Page&, const MvRequest&, const MvRequest& );
+
+   // Translate Metview 3 view request to Metview 4
+   MvRequest Translate ( const MvRequest& );
+
+public:
+
+   // Constructors
+   VertProfViewM3Factory() : PlotModViewFactory ( "VertProfM3View" ) {}
+};
+
+//---------------------------------------------------------------------
+// VerticalProfile class definition
 class VertProfView: public CommonXSectView
 {
 public:
@@ -62,22 +97,24 @@ public:
     // --   Methods overriden from CurveView class
     virtual string Name();
 
-  // Draw the background (axis )
+  // Draw the background
     virtual void DrawBackground ( ) {}
 
     // Describe the contents of the view
-    virtual void DescribeYourself ( ObjectInfo& description );
+    virtual void DescribeYourself ( ObjectInfo& );
 
     // Initialize some variable members
     virtual void SetVariables(const MvRequest&, bool);
 
     // Update the current view
-    virtual void UpdateView ( MvRequest& ) {}
-    virtual void UpdateView ();
+    virtual bool UpdateView ();
 
 private:
 
-    // No assignment
-    VertProfView& operator=(const VertProfView&);
+   bool xValuesAuto_;  // true: x values provided by user
+   double xMin_,xMax_; // X min/max values
+
+   // No assignment
+   VertProfView& operator=(const VertProfView&);
 };
 #endif
diff --git a/src/uPlot/XSectView.cc b/src/uPlot/XSectView.cc
index a0d316d..4a03ee4 100644
--- a/src/uPlot/XSectView.cc
+++ b/src/uPlot/XSectView.cc
@@ -16,27 +16,81 @@
 #include "XSectView.h"
 #include <MvRequestUtil.hpp>
 #include "ObjectList.h"
+#include "PlotMod.h"
 #include "Root.h"
 
 //--------------------------------------------------------
-class XSectViewFactory : public PlotModViewFactory 
+static XSectViewFactory xSectViewFactoryInstance;
+
+PlotModView*
+XSectViewFactory::Build ( Page& page,
+                          const MvRequest& contextRequest,
+                          const MvRequest& setupRequest )
 {
-    // --  Virtual Constructor - Builds a new XSectView
-    virtual PlotModView* Build ( Page& page,
-                                 const MvRequest& contextRequest,
-                                 const MvRequest& setupRequest )
-    {
-        // Expand request
-        MvRequest expReq = ObjectList::ExpandRequest(contextRequest,EXPAND_DEFAULTS);
-        return new XSectView ( page, expReq, setupRequest );
-    }
+   // Expand request
+   MvRequest expReq = ObjectList::ExpandRequest(contextRequest,EXPAND_DEFAULTS);
+
+   // Instantiate a Xsection view
+   return new XSectView ( page, expReq, setupRequest );
+}
 
-public:
+//--------------------------------------------------------
+static XSectViewM3Factory xSectViewM3FactoryInstance;
 
-    XSectViewFactory() : PlotModViewFactory ( "XSectView" ) {}
-};
+PlotModView*
+XSectViewM3Factory::Build ( Page& page,
+                            const MvRequest& contextRequest,
+                            const MvRequest& setupRequest )
+{
+   // Translate view request to Metview 4
+   MvRequest viewM4Req = this->Translate(contextRequest);
 
-static XSectViewFactory xSectViewFactoryInstance;
+   // Instantiate a Xsection View
+   return new XSectView ( page, viewM4Req, setupRequest );
+}
+
+MvRequest
+XSectViewM3Factory::Translate ( const MvRequest& in )
+{
+   // Send a warning message
+   //PlotMod::Instance().errorMessage("Error Message");
+   //PlotMod::Instance().warningMessage("Warning Message\n");
+   PlotMod::Instance().MetviewError ("The Metview 3 CROSS SECTION VIEW icon is deprecated. An automatic translation to the Metview 4 XSECTION VIEW icon will be performed internally, but may not work for all cases. It is recommended to manually replace the old icons with their new equivalents.","WARNING");
+
+   // Expand request
+   MvRequest req = ObjectList::ExpandRequest(in,EXPAND_DEFAULTS);
+
+   // Copy Line parameter
+   MvRequest viewReq("MXSECTIONVIEW");
+   viewReq.addValue("LINE",(double)req("LINE",0));
+   viewReq.addValue("LINE",(double)req("LINE",1));
+   viewReq.addValue("LINE",(double)req("LINE",2));
+   viewReq.addValue("LINE",(double)req("LINE",3));
+
+   // Translate Levels interval
+   viewReq("BOTTOM_LEVEL") = (double)req("BOTTOM_PRESSURE");
+   viewReq("TOP_LEVEL")    = (double)req("TOP_PRESSURE");
+
+   // Copy Wind parameters
+   viewReq("WIND_PARALLEL")      = (const char*)req("WIND_PARALLEL");
+   viewReq("WIND_PERPENDICULAR") = (const char*)req("WIND_PERPENDICULAR");
+   viewReq("WIND_INTENSITY")     = (const char*)req("WIND_INTENSITY");
+
+   // Translate Vertical scaling parameter
+   viewReq("VERTICAL_SCALING") = (const char*)req("PRESSURE_LEVEL_AXIS");
+
+   // Overlay Control parameter is not translated
+   PlotMod::Instance().MetviewError ("The Metview 3 CROSS SECTION VIEW icon is deprecated. Parameter OVERLAY CONTROL will not be internally translated.\n","WARNING");
+
+   // Copy Page and Subpage parameters
+   CopySomeParameters ( req,viewReq,"Subpage");
+   CopySomeParameters ( req,viewReq,"Page");
+
+   // Expand output request
+   MvRequest out = ObjectList::ExpandRequest(viewReq,EXPAND_DEFAULTS);
+
+   return out;
+}
 
 //------------------------------------------------------------
 
@@ -45,7 +99,7 @@ XSectView::XSectView ( Page& owner,
                        const MvRequest& setupRequest ):
            CommonXSectView ( owner, viewRequest, setupRequest )
 {
-    ApplicationName("PM_XSECT");
+    ApplicationName("MXSECTION");
     SetVariables(viewRequest,true);
 }
 
@@ -57,18 +111,17 @@ XSectView::XSectView (const XSectView &old) :
 string XSectView::Name()
 {
     int id = Owner().Id();
-    string name =  (const char*)ObjectInfo::ObjectName ( viewRequest_, "XSectView", id );
+    string name =  (const char*)ObjectInfo::ObjectName ( viewRequest_, "XSectionView", id );
 
     return name ;
 }
 
 void XSectView::DescribeYourself ( ObjectInfo& description )
 {
-  // convert my request to macro
-  set<Cached> skipSet;
- 
-  description.ConvertRequestToMacro ( appViewReq_, PUT_END,
-				      MacroName().c_str(),"mxsectview",skipSet);
+   // convert my request to macro
+   set<Cached> skipSet;
+   description.ConvertRequestToMacro ( appViewReq_, PUT_END, MacroName().c_str(),"mxsectview",skipSet);
+   description.PutNewLine (" " );
 }
 
 // In request is either a view request, if view parameters have
@@ -100,11 +153,11 @@ void XSectView::SetVariables(const MvRequest &in, bool setMembers)
     }
 }
 
-void XSectView::UpdateView ()
+bool XSectView::UpdateView ()
 {
     // It has already been updated
     if ( string(viewRequest_.getVerb()) == CARTESIANVIEW )
-        return;
+        return true;
 
     // Translate geographical coordinates
     MvRequest cartView("CARTESIANVIEW");
@@ -117,7 +170,7 @@ void XSectView::UpdateView ()
 
     // Translate Y coordinates
     cartView("Y_AUTOMATIC") = "off";
-    const char* log = viewRequest_("PRESSURE_LEVEL_AXIS");
+    const char* log = viewRequest_("VERTICAL_SCALING");
     if ( log && strcmp(log,"LOG") == 0 )
         cartView("Y_AXIS_TYPE") = "logarithmic";
     else
@@ -134,10 +187,20 @@ void XSectView::UpdateView ()
     CopySomeParameters( viewRequest_,cartView,"PAGE" );
     CopySomeParameters( viewRequest_,cartView,"SUBPAGE" );
 
+    // Copy the original request without certain parameteres (to avoid duplication)
+    RemoveParameters( viewRequest_, "HORIZONTAL_AXIS" );
+    RemoveParameters( viewRequest_, "VERTICAL_AXIS" );
+    RemoveParameters( viewRequest_, "PAGE" );
+    RemoveParameters( viewRequest_, "SUBPAGE" );
+    RemoveParameters( viewRequest_, "_" );
+    cartView("_ORIGINAL_REQUEST") = viewRequest_;
+
     // Update request
-    viewRequest_ = cartView;;
+    viewRequest_ = cartView;
 
     // Indicate that the plotting tree needs to be rebuilt
     Root::Instance().Refresh(false);
+
+    return true;
 }
 
diff --git a/src/uPlot/XSectView.h b/src/uPlot/XSectView.h
index 0dd28e5..54f089a 100644
--- a/src/uPlot/XSectView.h
+++ b/src/uPlot/XSectView.h
@@ -50,6 +50,39 @@
 
 #include "CommonXSectView.h"
 
+//---------------------------------------------------------------------
+// XSection factory definition
+class XSectViewFactory : public PlotModViewFactory {
+
+   // --  Virtual Constructor - Builds a new XSectView
+   virtual PlotModView* Build ( Page&, const MvRequest&, const MvRequest& );
+
+public:
+
+   // Constructors
+   XSectViewFactory() : PlotModViewFactory ( "XSectionView" ) {}
+};
+
+//---------------------------------------------------------------------
+// XSection factory definition to handle translation from Metview 3 to 4.
+// This should be delete in the future. It is defined here for backwards
+// compatibility.
+class XSectViewM3Factory : public PlotModViewFactory
+{
+   // --  Virtual Constructor - Builds a new XSectView
+   virtual PlotModView* Build ( Page&, const MvRequest&, const MvRequest& );
+
+   // Translate Metview 3 view request to Metview 4
+   MvRequest Translate ( const MvRequest& );
+
+public:
+
+   // Constructors
+   XSectViewM3Factory() : PlotModViewFactory ( "XSectM3View" ) {}
+};
+
+//---------------------------------------------------------------------
+// XSection class definition
 class XSectView: public CommonXSectView {
 
 public:
@@ -76,21 +109,7 @@ public:
     virtual void SetVariables(const MvRequest&, bool);
 
     // Update view
-    virtual void UpdateView ();
-
-#if 0
-    // Input mode is LINE
-    virtual Cached InputMode () { return Cached ("LINE"); }
-
-    // Allow to change geography coordinates
-    virtual bool CanChangeGeography() { return true; }
-
-    // Check horizontal value
-    virtual bool CheckHorizontal(MvRequest &);
-
-    // Reset data members when stuff are removed from contents.
-    bool Reset(const MvRequest&);
-#endif
+    virtual bool UpdateView ();
 
 private:
 
diff --git a/src/uPlot/uPlot.cc b/src/uPlot/uPlot.cc
index 36d3c07..b26b34b 100644
--- a/src/uPlot/uPlot.cc
+++ b/src/uPlot/uPlot.cc
@@ -660,6 +660,31 @@ bool uPlot::setDropTarget(QPoint globalPos)
 	return false;
 }	
 	
+bool uPlot::setDropTargetInView(QPoint pos)
+{
+	MgQSceneItem *item=0;
+	
+	QPointF scenePos = plotView_->mapToScene(pos);
+		
+	if(activeScene_)
+	{
+		if(activeScene_->sceneBoundingRect().contains(scenePos))
+			return true; 				
+	}
+
+	item = plotScene_->findSceneItem(scenePos);
+	if(item || plotScene_->sceneItems().count() == 0)
+	{  
+			slotSetActiveScene(item);
+			return true;
+	}
+	else
+	{	
+		return false;
+	}
+	
+	return false;
+}  
 
 void uPlot::newRequestForDriversBegin()
 {
diff --git a/src/uPlot/uPlot.h b/src/uPlot/uPlot.h
index 03a1e41..fc04156 100644
--- a/src/uPlot/uPlot.h
+++ b/src/uPlot/uPlot.h
@@ -99,6 +99,7 @@ protected:
 	void setupAnimationActions();
 	
 	bool setDropTarget(QPoint);
+	bool setDropTargetInView(QPoint);
 	
 	void updateAnimationActionState();
 	int currentStep();
diff --git a/src/uPlot/uPlot.qrc b/src/uPlot/uPlot.qrc
index fcdac29..ab367e3 100644
--- a/src/uPlot/uPlot.qrc
+++ b/src/uPlot/uPlot.qrc
@@ -34,4 +34,4 @@
     <file alias="reset.svg">../images/reset.svg</file>
     <file alias="layerInfo.css">layerInfo.css</file>   
   </qresource> 	
-</RCC>
\ No newline at end of file
+</RCC>
diff --git a/src/uPlot/uPlotBase.cc b/src/uPlot/uPlotBase.cc
index 28cec04..169a39c 100644
--- a/src/uPlot/uPlotBase.cc
+++ b/src/uPlot/uPlotBase.cc
@@ -93,6 +93,9 @@ uPlotBase::uPlotBase(QWidget* parent) : MvQMainWindow(parent),
 	connect(plotView_,SIGNAL(zoomRectangleIsDefined(const string&,const string&)),
 		this,SLOT(slotPerformZoom(const string&,const string&)));
 
+	connect(plotView_,SIGNAL(iconDropped(const MvQDrop&,QPoint)),
+		this,SLOT(slotProcessDropInView(const MvQDrop&,QPoint)));
+	
 	//Setup the actions
 	//setupFileActions();
 	//setupViewActions();
@@ -448,6 +451,79 @@ void uPlotBase::processDrop(MvQIconDropItem* drop)
 
 }
 
+void uPlotBase::slotProcessDropInView(const MvQDrop& drop, QPoint pos)
+{
+	setDropTargetInView(pos);
+  
+  	// IMPORTANT: THIS CODE WILL BE REPLACED BY:
+	//	sPageId = activeScene_->layout().id();
+	// WE WILL ASK SYLVIE TO IMPLEMENT THIS FUNCTION
+
+	string sPageId;
+
+	if(activeScene_)	
+	{
+		sPageId = activeScene_->layout().id();
+		if(sPageId.empty())
+		{
+			MgQLayoutItem *projItem = activeScene_->firstProjectorItem();
+			sPageId = projItem->layout().id();
+		}
+	}
+	
+	// Build request to be sent back to source
+	int pageId;
+	istringstream sst(sPageId);
+    	sst >> pageId;
+    
+	MvRequest req("DROP_REQUEST");
+//	req("BATCH") = drop->batchNumber();
+		
+	req("ACTION") = 3;
+
+	MvRequest subreq("DROP");
+	subreq("DROP_ID") = pageId;
+	subreq("DROP_X") = 12.;
+	
+	if(drop.iconNum() > 0)
+	{
+		subreq.setValue("ICON_NAME",drop.iconPath(0).toStdString().c_str());  	
+	
+		for(int i=1; i < drop.iconNum(); i++)
+		{		  		   
+			subreq.addValue("ICON_NAME", drop.iconPath(i).toStdString().c_str());
+		}	
+	}
+	
+	subreq("DROP_Y") = 4.2;
+	subreq("_REGISTER_TRAILER") = 1;
+
+	req("HEADER") = subreq;
+   
+	// Add View request if it exists
+	if ( owner_ )
+	{
+		Presentable *pres=owner_->FindBranch (pageId);
+		if(pres)
+		{
+		  	MvRequest reqView =pres->GetView().ViewRequest();
+			req("_CONTEXT") = reqView;
+		}
+		//Safety solution
+		else
+		{
+		  	MvRequest reqView = owner_->Request()("PAGES");
+			reqView = reqView("VIEW");
+			req("_CONTEXT") = reqView;
+		}
+	}
+
+	//qDebug() << "DROP REQUEST";
+	//req.print();
+
+	// Send drop request to the appropriate function
+	emit sendDropRequest(&req);
+}
 
 void uPlotBase::processContentsRequest(MvRequest &iconReq)
 {
diff --git a/src/uPlot/uPlotBase.h b/src/uPlot/uPlotBase.h
index 90c3cd6..746a970 100644
--- a/src/uPlot/uPlotBase.h
+++ b/src/uPlot/uPlotBase.h
@@ -34,6 +34,7 @@ class QSlider;
 class ExportDialog;
 class MgQPlotScene;
 class MgQSceneItem;
+class MvQDrop;
 class MvQPlotView;
 class MvQZoomStackWidget;
 
@@ -85,6 +86,7 @@ public slots:
 	void slotSizeUp();	
 	void slotBuildContextMenu(const QPoint&,const QPointF&);
 	void slotResizeEvent(const QSize &);
+	void slotProcessDropInView(const MvQDrop&,QPoint);	
 	virtual void slotSetActiveScene(MgQSceneItem*)=0;
 
 protected:
@@ -99,6 +101,7 @@ protected:
 	void updateResizeActionState();
 
 	virtual bool setDropTarget(QPoint)=0;
+	virtual bool setDropTargetInView(QPoint)=0;
 	virtual int currentStep()=0;
 	virtual int stepNum()=0;
 	
diff --git a/src/uPlot/uPlotBatchApp.cc b/src/uPlot/uPlotBatchApp.cc
index 8175284..2cd96cd 100644
--- a/src/uPlot/uPlotBatchApp.cc
+++ b/src/uPlot/uPlotBatchApp.cc
@@ -14,13 +14,13 @@
 #include "Root.h"
 
 uPlotBatchApp::uPlotBatchApp(int& ac, char** av, const char* name) : 
-	MvApplication(ac,av,name)
+   MvApplication(ac,av,name)
 {
-	// Install Resources
-//	InstallResources();
+   // Install Resources
+   //InstallResources();
 
-	// Register this service
-	registerTMvServe(*this,0);
+   // Register this service
+   registerTMvServe(*this,0);
 }
 
 uPlotBatchApp::~uPlotBatchApp()
@@ -32,18 +32,20 @@ uPlotBatchApp::~uPlotBatchApp()
 void
 uPlotBatchApp::serve ( MvProtocol& proto, MvRequest& inRequest )
 {
-	// Create a new context, based on the input Request
-	PmContext * context = new PmContext ( proto, inRequest );
+   // Create a new context, based on the input Request
+   PmContext * context = new PmContext ( proto, inRequest );
 
-	// Increment the reference counting
-	context->Attach();
+   // Increment the reference counting
+   context->Attach();
 
-	// It is a new call, so it first needs to clean the previous structure
-	Root::Instance().Clean();
+   // It is a new call, so it first needs to clean the previous structure
+   Root::Instance().Clean();
 
-	// Execute the context
-	context->Execute();
+   // Execute the context
+   context->Execute();
 
-	// Decrement the reference counting
-//	context->Detach();
+   // Decrement the reference counting
+   //FAMI092013: it was causing function TMvServe::callback to crash because
+   // this function is called afterwards and it still needs the context object.
+   //context->Detach();
 }
diff --git a/src/uPlot/uPlotManager.cc b/src/uPlot/uPlotManager.cc
index 0455e65..a8d2e6c 100644
--- a/src/uPlot/uPlotManager.cc
+++ b/src/uPlot/uPlotManager.cc
@@ -19,81 +19,90 @@
 
 uPlotManager::uPlotManager(const char* kw): MvService(kw)
 {
-     saveToPool(false);
+   saveToPool(false);
 }
 
 void uPlotManager::serve(MvRequest& in,MvRequest& out)
 {
-	cout << "uPlotManager::serve --> in" << endl;
-	in.print();
+cout << "uPlotManager::serve --> in" << endl;
+in.print();
 
-        uPlotService::Instance().CalluPlot ( in,out );
+   uPlotService::Instance().CalluPlot ( in,out );
 
-	return;
+   return;
 }
 
 //--------------------------------------------------------
 
 int main(int argc,char **argv)
 {
-	// Set option -debug to true
-	// This is needed in order to force the Save Request command
-	// to save the hidden parameters too (underscore parameters)
+   // Set option -debug to true
+   // This is needed in order to force the Save Request command
+   // to save the hidden parameters too (underscore parameters)
    option opts[] = {"debug","MARS_DEBUG","-debug","1",t_boolean, sizeof(boolean),OFFSET(globals,debug)};
 
-	MvApplication theApp(argc,argv,NULL,&mars,1,opts);
-
-	uPlotManager vis0("UPLOT_MANAGER");
-	uPlotManager vis1("GRIB");
-	uPlotManager vis2("GEOPOINTS");
-	uPlotManager vis3("MAPVIEW");
-	uPlotManager vis4("CARTESIANVIEW");
-	uPlotManager vis6("PLOT_SUPERPAGE");
-	uPlotManager vis7("PRASTERLOOP");
-	uPlotManager vis8("BUFR");
-	uPlotManager vis9("PRINTER_MANAGER");
-    uPlotManager vis10("GEOVIEW");
-    uPlotManager vis11("MXSECTVIEW");
-    uPlotManager vis12("MVERTPROFVIEW");
-    uPlotManager vis13("MAVERAGEVIEW");
-
-    uPlotManager nc0("NETCDF_GEO_POINTS");
-    uPlotManager nc1("NETCDF_GEO_VECTORS");
-    uPlotManager nc2("NETCDF_GEO_MATRIX");
-    uPlotManager nc3("NETCDF_XY_MATRIX");
-    uPlotManager nc4("NETCDF_XY_POINTS");
-
-    uPlotManager i1 ("INPUT_HISTOGRAM");
-	uPlotManager i2 ("INPUT_XY_POINTS");
-	uPlotManager i3 ("INPUT_GEO_POINTS");
-	uPlotManager i4 ("INPUT_XY_VECTORS");
-	uPlotManager i5 ("INPUT_GEO_VECTORS");
-	uPlotManager i6 ("INPUT_XY_BINNING");
-	uPlotManager i7 ("INPUT_GEO_BINNING");
-	uPlotManager i8 ("INPUT_XY_BOXES");
-	uPlotManager i9 ("INPUT_GEO_BOXES");
-	uPlotManager i10("INPUT_HOR_BAR");
-	uPlotManager i11("INPUT_VER_BAR");
-
-	uPlotManager t1 ("TABLE_HISTOGRAM");
-	uPlotManager t2 ("TABLE_XY_POINTS");
-	uPlotManager t3 ("TABLE_GEO_POINTS");
-	uPlotManager t4 ("TABLE_XY_VECTORS");
-	uPlotManager t5 ("TABLE_GEO_VECTORS");
-	uPlotManager t6 ("TABLE_XY_BINNING");
-	uPlotManager t7 ("TABLE_GEO_BINNING");
-	uPlotManager t8 ("TABLE_XY_BOXES");
-	uPlotManager t9 ("TABLE_GEO_BOXES");
-	uPlotManager t10("TABLE_HOR_BAR");
-	uPlotManager t11("TABLE_VER_BAR");
-
-	uPlotManager odb1("ODB_GEO_POINTS");
-	uPlotManager odb2("ODB_GEO_VECTORS");
-	uPlotManager odb3("ODB_XY_POINTS");
-	uPlotManager odb4("ODB_XY_VECTORS");
-	uPlotManager odb5("ODB_XY_BINNING");
-	
+   MvApplication theApp(argc,argv,NULL,&mars,1,opts);
+
+   uPlotManager vis0("UPLOT_MANAGER");
+   uPlotManager vis1("GRIB");
+   uPlotManager vis2("GEOPOINTS");
+   uPlotManager vis3("MAPVIEW");
+   uPlotManager vis4("CARTESIANVIEW");
+   uPlotManager vis6("PLOT_SUPERPAGE");
+   uPlotManager vis7("PRASTERLOOP");
+   uPlotManager vis8("BUFR");
+   uPlotManager vis9("PRINTER_MANAGER");
+   uPlotManager vis10("GEOVIEW");
+   uPlotManager vis11("MXSECTIONVIEW");
+   uPlotManager vis12("MVPROFILEVIEW");
+   uPlotManager vis13("MXAVERAGEVIEW");
+   uPlotManager vis14("ANNOTATIONVIEW");
+   uPlotManager vis15("HOVMOELLERVIEW");
+   uPlotManager vis16("MHOVMOELLERVIEW");
+
+   uPlotManager nc0("NETCDF_GEO_POINTS");
+   uPlotManager nc1("NETCDF_GEO_VECTORS");
+   uPlotManager nc2("NETCDF_GEO_MATRIX");
+   uPlotManager nc3("NETCDF_XY_MATRIX");
+   uPlotManager nc4("NETCDF_XY_POINTS");
+
+   uPlotManager i1 ("INPUT_HISTOGRAM");
+   uPlotManager i2 ("INPUT_XY_POINTS");
+   uPlotManager i3 ("INPUT_GEO_POINTS");
+   uPlotManager i4 ("INPUT_XY_VECTORS");
+   uPlotManager i5 ("INPUT_GEO_VECTORS");
+   uPlotManager i6 ("INPUT_XY_BINNING");
+   uPlotManager i7 ("INPUT_GEO_BINNING");
+   uPlotManager i8 ("INPUT_XY_BOXES");
+   uPlotManager i9 ("INPUT_GEO_BOXES");
+   uPlotManager i10("INPUT_HOR_BAR");
+   uPlotManager i11("INPUT_VER_BAR");
+
+   uPlotManager t1 ("TABLE_HISTOGRAM");
+   uPlotManager t2 ("TABLE_XY_POINTS");
+   uPlotManager t3 ("TABLE_GEO_POINTS");
+   uPlotManager t4 ("TABLE_XY_VECTORS");
+   uPlotManager t5 ("TABLE_GEO_VECTORS");
+   uPlotManager t6 ("TABLE_XY_BINNING");
+   uPlotManager t7 ("TABLE_GEO_BINNING");
+   uPlotManager t8 ("TABLE_XY_BOXES");
+   uPlotManager t9 ("TABLE_GEO_BOXES");
+   uPlotManager t10("TABLE_HOR_BAR");
+   uPlotManager t11("TABLE_VER_BAR");
+
+   uPlotManager odb1("ODB_GEO_POINTS");
+   uPlotManager odb2("ODB_GEO_VECTORS");
+   uPlotManager odb3("ODB_XY_POINTS");
+   uPlotManager odb4("ODB_XY_VECTORS");
+   uPlotManager odb5("ODB_XY_BINNING");
+
    uPlotManager gv1("GRIB_VECTORS");
 
-	theApp.run();
+   // 'METVIEW 3' applications. Instantiated here due to
+   // backwards compatibility. Delete them later.
+   uPlotManager mv31("XSECTVIEW");
+   uPlotManager mv32("AVERAGEVIEW");
+   uPlotManager mv33("VERTPROFVIEW");
+
+   theApp.run();
 }
diff --git a/src/uPlot/uPlotService.cc b/src/uPlot/uPlotService.cc
index 3a20265..44f0e7b 100644
--- a/src/uPlot/uPlotService.cc
+++ b/src/uPlot/uPlotService.cc
@@ -60,7 +60,15 @@ uPlotService::CalluPlot ( MvRequest& uPlotRequest, MvRequest& out)
 	// can not process the request.
 	// WE NEED TO FIND A BETTER SOLUTION!!!!!!!
 	out.setVerb("REPLY");
-	out("TARGET") = "MetviewUI";
+	
+	char *desktop=getenv("MV_DESKTOP_NAME");
+	if(desktop == 0)  
+	{	
+		cout << "Error: MV_DESKTOP_NAME is not defined! GeoTool exits!" << endl;
+		return;
+	}
+	string desktopName(desktop);
+	out("TARGET") = desktopName.c_str();
 
 	string GRIB_DEFINITION_PATH_ENV;
 	const char* grb_def_path=getenv("GRIB_DEFINITION_PATH");
diff --git a/test/Makefile.am b/test/Makefile.am
index dce7021..77aeb57 100755
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,4 +1,4 @@
 AUTOMAKE_OPTIONS	= foreign
 SUBDIRS			= . macros
 
-EXTRA_DIST		= data/z500.grb
+EXTRA_DIST		= data/z500.grb data/t1000_SH.grb data/t1000_SH_to_LL_reference.grb data/t1000_SH_to_RGG_reference.grb data/t1000_RGG_to_LL_reference.grb data/10U_GG.grb data/10U_GG_to_subarea_result.grb
diff --git a/test/Makefile.in b/test/Makefile.in
index bb3f85e..166375d 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -122,6 +122,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -137,6 +138,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -163,11 +166,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -297,7 +303,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign
 SUBDIRS = . macros
-EXTRA_DIST = data/z500.grb
+EXTRA_DIST = data/z500.grb data/t1000_SH.grb data/t1000_SH_to_LL_reference.grb data/t1000_SH_to_RGG_reference.grb data/t1000_RGG_to_LL_reference.grb data/10U_GG.grb data/10U_GG_to_subarea_result.grb
 all: all-recursive
 
 .SUFFIXES:
diff --git a/test/data/10U_GG.grb b/test/data/10U_GG.grb
new file mode 100644
index 0000000..73d6bd1
Binary files /dev/null and b/test/data/10U_GG.grb differ
diff --git a/test/data/10U_GG_to_subarea_result.grb b/test/data/10U_GG_to_subarea_result.grb
new file mode 100644
index 0000000..fd075bc
Binary files /dev/null and b/test/data/10U_GG_to_subarea_result.grb differ
diff --git a/test/data/t1000_RGG_to_LL_reference.grb b/test/data/t1000_RGG_to_LL_reference.grb
new file mode 100644
index 0000000..28b19d3
Binary files /dev/null and b/test/data/t1000_RGG_to_LL_reference.grb differ
diff --git a/test/data/t1000_SH.grb b/test/data/t1000_SH.grb
new file mode 100644
index 0000000..8eaf2a6
Binary files /dev/null and b/test/data/t1000_SH.grb differ
diff --git a/test/data/t1000_SH_to_LL_reference.grb b/test/data/t1000_SH_to_LL_reference.grb
new file mode 100644
index 0000000..cdbfe06
Binary files /dev/null and b/test/data/t1000_SH_to_LL_reference.grb differ
diff --git a/test/data/t1000_SH_to_RGG_reference.grb b/test/data/t1000_SH_to_RGG_reference.grb
new file mode 100644
index 0000000..f329c8a
Binary files /dev/null and b/test/data/t1000_SH_to_RGG_reference.grb differ
diff --git a/test/macros/Makefile.am b/test/macros/Makefile.am
index 277457e..53b8685 100644
--- a/test/macros/Makefile.am
+++ b/test/macros/Makefile.am
@@ -2,10 +2,11 @@ AUTOMAKE_OPTIONS  = foreign
 AM_COLOR_TESTS    = always
 
 TESTS_ENVIRONMENT = ../../metview -b
-TESTS             = HelloWorld.mv layoutx3.mv
+TESTS             = HelloWorld.mv layoutx3.mv \
+                    interpolation_sh_to_ll.mv interpolation_sh_to_rgg.mv interpolation_rgg_to_ll.mv interpolation_gg_to_subarea.mv
 
 if METVIEW_MARS
 TESTS	       += MarsAccess.mv
 endif
 
-EXTRA_DIST = set_output.mv HelloWorld.mv layoutx3.mv MarsAccess.mv
+EXTRA_DIST = set_output.mv MarsAccess.mv $(TESTS)
diff --git a/test/macros/Makefile.in b/test/macros/Makefile.in
index 6055813..fcfa1d9 100644
--- a/test/macros/Makefile.in
+++ b/test/macros/Makefile.in
@@ -85,6 +85,7 @@ DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+ECREGRID_LIBS = @ECREGRID_LIBS@
 EGREP = @EGREP@
 EMOS_LIB_NAME = @EMOS_LIB_NAME@
 EXEEXT = @EXEEXT@
@@ -100,6 +101,8 @@ GREP = @GREP@
 GRIBAPI_LIBS = @GRIBAPI_LIBS@
 GRIB_API_INC = @GRIB_API_INC@
 GRIB_API_LIB = @GRIB_API_LIB@
+HAVE_CONVERT = @HAVE_CONVERT@
+HAVE_KSH = @HAVE_KSH@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -126,11 +129,14 @@ MAGPLUS_HOME = @MAGPLUS_HOME@
 MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
 MAGPLUS_LIB = @MAGPLUS_LIB@
 MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
+MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
 MAKEINFO = @MAKEINFO@
 MARS_ACCESS = @MARS_ACCESS@
+MARS_HOME = @MARS_HOME@
 MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
 METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
 METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
+METVIEW_ECREGRID = @METVIEW_ECREGRID@
 METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
 METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
 METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
@@ -261,8 +267,10 @@ top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign
 AM_COLOR_TESTS = always
 TESTS_ENVIRONMENT = ../../metview -b
-TESTS = HelloWorld.mv layoutx3.mv $(am__append_1)
-EXTRA_DIST = set_output.mv HelloWorld.mv layoutx3.mv MarsAccess.mv
+TESTS = HelloWorld.mv layoutx3.mv interpolation_sh_to_ll.mv \
+	interpolation_sh_to_rgg.mv interpolation_rgg_to_ll.mv \
+	interpolation_gg_to_subarea.mv $(am__append_1)
+EXTRA_DIST = set_output.mv MarsAccess.mv $(TESTS)
 all: all-am
 
 .SUFFIXES:
diff --git a/test/macros/interpolation_gg_to_subarea.mv b/test/macros/interpolation_gg_to_subarea.mv
new file mode 100644
index 0000000..6fe8796
--- /dev/null
+++ b/test/macros/interpolation_gg_to_subarea.mv
@@ -0,0 +1,49 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2013 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_gg = read('../data/10U_GG.grb')
+
+# perform the interpolation
+data_sub = read
+(
+    data     : data_gg,
+    area     : [70, -30, 20, 30]
+)
+
+# write the result so that we can manually compare it if needed
+write ('10U_GG_to_subarea_result.grb', data_sub)
+
+
+# now check whether the new grid type is what we asked for
+expected_grid_type = 'regular_gg'
+new_grid_type = grib_get_string(data_sub, 'gridType')
+
+
+using_ecregrid_flag = getenv('EC_USE_ECREGRID')
+if using_ecregrid_flag = 1 then
+    interp_package = 'ecRegrid'
+else
+    interp_package = 'emoslib'
+end if
+
+
+if new_grid_type <> expected_grid_type then
+    print('Error interpolating a subarea from a regular Gaussian grid - the resulting gridType is ' & new_grid_type & ' (expected: ' & expected_grid_type & ')')
+    print('This could be due to an error in the interpolation package (' & interp_package & ')')
+    print('Note that this example requires the use of a land/sea mask file in the interpolation software.')
+    print('Ensure that this is correctly installed.')
+    if interp_package = 'emoslib' then
+        print('Set the environment variable JDCNDBG=1 and run Metview with the -slog option to see more output.')
+    end if
+    fail()
+end if
diff --git a/test/macros/interpolation_rgg_to_ll.mv b/test/macros/interpolation_rgg_to_ll.mv
new file mode 100644
index 0000000..a2b5d57
--- /dev/null
+++ b/test/macros/interpolation_rgg_to_ll.mv
@@ -0,0 +1,44 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2013 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_rgg = read('../data/t1000_SH_to_RGG_reference.grb')
+
+# perform the interpolation
+data_ll = read
+(
+    data     : data_rgg,
+    grid     : [1,1]
+)
+
+# write the result so that we can manually compare it if needed
+write ('t1000_RGG_to_LL_result.grb', data_ll)
+
+
+# now check whether the new grid type is what we asked for
+expected_grid_type = 'regular_ll'
+new_grid_type = grib_get_string(data_ll, 'gridType')
+
+
+using_ecregrid_flag = getenv('EC_USE_ECREGRID')
+if using_ecregrid_flag = 1 then
+    interp_package = 'ecRegrid'
+else
+    interp_package = 'emoslib'
+end if
+
+
+if new_grid_type <> expected_grid_type then
+    print('Error interpolating from reduced Gaussian grid to regular lat/lon - the resulting gridType is ' & new_grid_type & ' (expected: ' & expected_grid_type & ')')
+    print('This could be due to an error in the interpolation package (' & interp_package & ')')
+    fail()
+end if
diff --git a/test/macros/interpolation_sh_to_ll.mv b/test/macros/interpolation_sh_to_ll.mv
new file mode 100644
index 0000000..c67df63
--- /dev/null
+++ b/test/macros/interpolation_sh_to_ll.mv
@@ -0,0 +1,44 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2013 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_sh = read('../data/t1000_SH.grb')
+
+# perform the interpolation
+data_ll = read
+(
+    data : data_sh,
+    grid : [1,1]
+)
+
+# write the result so that we can manually compare it if needed
+write ('t1000_SH_to_LL_result.grb', data_ll)
+
+
+# now check whether the new grid type is what we asked for
+expected_grid_type = 'regular_ll'
+new_grid_type = grib_get_string(data_ll, 'gridType')
+
+
+using_ecregrid_flag = getenv('EC_USE_ECREGRID')
+if using_ecregrid_flag = 1 then
+    interp_package = 'ecRegrid'
+else
+    interp_package = 'emoslib'
+end if
+
+
+if new_grid_type <> expected_grid_type then
+    print('Error interpolating from spherical harmonics to regular lat/lon - the resulting gridType is ' & new_grid_type & ' (expected: ' & expected_grid_type & ')')
+    print('This could be due to an error in the interpolation package (' & interp_package & ')')
+    fail()
+end if
diff --git a/test/macros/interpolation_sh_to_rgg.mv b/test/macros/interpolation_sh_to_rgg.mv
new file mode 100644
index 0000000..e8832cc
--- /dev/null
+++ b/test/macros/interpolation_sh_to_rgg.mv
@@ -0,0 +1,45 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2013 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_sh = read('../data/t1000_SH.grb')
+
+# perform the interpolation
+data_rgg = read
+(
+    data     : data_sh,
+    grid     : 400,
+    gaussian : 'reduced'
+)
+
+# write the result so that we can manually compare it if needed
+write ('t1000_SH_to_RGG_result.grb', data_rgg)
+
+
+# now check whether the new grid type is what we asked for
+expected_grid_type = 'reduced_gg'
+new_grid_type = grib_get_string(data_rgg, 'gridType')
+
+
+using_ecregrid_flag = getenv('EC_USE_ECREGRID')
+if using_ecregrid_flag = 1 then
+    interp_package = 'ecRegrid'
+else
+    interp_package = 'emoslib'
+end if
+
+
+if new_grid_type <> expected_grid_type then
+    print('Error interpolating from spherical harmonics to reduced Gaussian grid - the resulting gridType is ' & new_grid_type & ' (expected: ' & expected_grid_type & ')')
+    print('This could be due to an error in the interpolation package (' & interp_package & ')')
+    fail()
+end if
diff --git a/version.sh b/version.sh
index 1263910..28f1310 100644
--- a/version.sh
+++ b/version.sh
@@ -3,11 +3,11 @@
 #
 METVIEW_PACKAGE_NAME='Metview'
 METVIEW_PACKAGE_VERSION_MAJOR='4'
-METVIEW_PACKAGE_VERSION_MINOR='3'
-METVIEW_PACKAGE_VERSION_REVISION='11'
+METVIEW_PACKAGE_VERSION_MINOR='4'
+METVIEW_PACKAGE_VERSION_REVISION='3'
 METVIEW_PACKAGE_VERSION_LABEL=''
 
-METVIEW_MAGICS_MIN_VERSION='2.18.12'
+METVIEW_MAGICS_MIN_VERSION='2.18.1'
 METVIEW_GRIBAPI_MIN_VERSION='1.9.8'
 
 # for METVIEW_PACKAGE_VERSION, add a '-' before the label string
@@ -20,6 +20,6 @@ fi
 
 
 METVIEW_PACKAGE_VERSION=${METVIEW_PACKAGE_VERSION_MAJOR}.${METVIEW_PACKAGE_VERSION_MINOR}.${METVIEW_PACKAGE_VERSION_REVISION}${METVIEW_PACKAGE_VERSION_LABEL_STRING}
-METVIEW_PACKAGE_COPYRIGHT_YEAR='2013'
-METVIEW_PACKAGE_COPYRIGHT_PERIOD='1990-2013'
+METVIEW_PACKAGE_COPYRIGHT_YEAR='2012'
+METVIEW_PACKAGE_COPYRIGHT_PERIOD='1990-2012'
 METVIEW_PACKAGE_RELEASE_DATE=`date +%d-%B-%Y`

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